ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNjViOTAKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsNDQgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyMgTWF2ZW4KK3RhcmdldAorCisjIEludGVsbGlKCisqLmltbAorKi5pcHIKKyouaXdzCisuaWRlYQorCisjIEVjbGlwc2UKKy5jYWNoZQorLmNsYXNzcGF0aAorLnByb2plY3QKKy5zZXR0aW5ncworLmV4dGVybmFsVG9vbEJ1aWxkZXJzCittYXZlbi1lY2xpcHNlLnhtbAorCisjbG9nIGZpbGVzCitsb2dzCisqLmxvZwordGVzdC1vdXRwdXQKKworI1B5dGhvbgorKi5weWMKKworIyBvdGhlciBmaWxlcworLkRTX1N0b3JlCisqLnN3cApkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9BcmNoaXRlY3R1cmUuaHRtbCBiLzAuNS4wLWluY3ViYXRpbmcvQXJjaGl0ZWN0dXJlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlZTQwMwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvQXJjaGl0ZWN0dXJlLmh0bWwKQEAgLTAsMCArMSwyNTggQEAKKzwhRE9DVFlQRSBodG1sPgorPCEtLQorIHwgR2VuZXJhdGVkIGJ5IEFwYWNoZSBNYXZlbiBEb3hpYSBhdCAyMDE1LTA3LTA5CisgfCBSZW5kZXJlZCB1c2luZyBBcGFjaGUgTWF2ZW4gRmx1aWRvIFNraW4gMS4zLjAKKy0tPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgorICA8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCIgLz4KKyAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCIgLz4KKyAgICA8bWV0YSBuYW1lPSJEYXRlLVJldmlzaW9uLXl5eXltbWRkIiBjb250ZW50PSIyMDE1MDcwOSIgLz4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbiIgLz4KKyAgICA8dGl0bGU+TWV0YWRhdGEgYW5kIEdvdmVybmFuY2UgLSBBcmNoaXRlY3R1cmU8L3RpdGxlPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3Mvc2l0ZS5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9wcmludC5jc3MiIG1lZGlhPSJwcmludCIgLz4KKworICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9qcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIAorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkgeyAkKCAnLmNhcm91c2VsJyApLmNhcm91c2VsKCB7IGludGVydmFsOiAzNTAwIH0gKSB9ICk7PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ0b3BCYXJFbmFibGVkIj4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKworICAgIDxkaXYgaWQ9InRvcGJhciIgY2xhc3M9Im5hdmJhciBuYXZiYXItZml4ZWQtdG9wICI+CisgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItaW5uZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciIgc3R5bGU9IndpZHRoOiA2OCU7Ij48ZGl2IGNsYXNzPSJuYXYtY29sbGFwc2UiPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QXRsYXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJBYm91dCI+QWJvdXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iV2lraSI+V2lraTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJOZXdzIj5OZXdzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2dpdC13aXAtdXMuYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yLWF0bGFzLmdpdCIgIHRpdGxlPSJHaXQiPkdpdDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yL2F0bGFzIiAgdGl0bGU9IlN2biI+U3ZuPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0FUTEFTIiAgdGl0bGU9IkppcmEiPkppcmE8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMvUG93ZXJlZEJ5IiAgdGl0bGU9IlBvd2VyZWQgYnkiPlBvd2VyZWQgYnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9ibG9ncy5hcGFjaGUub3JnL2F0bGFzLyIgIHRpdGxlPSJCbG9nIj5CbG9nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UHJvamVjdCBJbmZvcm1hdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJwcm9qZWN0LWluZm8uaHRtbCIgIHRpdGxlPSJTdW1tYXJ5Ij5TdW1tYXJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJtYWlsLWxpc3RzLmh0bWwiICB0aXRsZT0iTWFpbGluZyBMaXN0cyI+TWFpbGluZyBMaXN0czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3dlYmNoYXQuZnJlZW5vZGUubmV0P2NoYW5uZWxzPWFwYWNoZWF0bGFzJnVpbz1kNCIgIHRpdGxlPSJJUkMiPklSQzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0idGVhbS1saXN0Lmh0bWwiICB0aXRsZT0iVGVhbSI+VGVhbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaXNzdWUtdHJhY2tpbmcuaHRtbCIgIHRpdGxlPSJJc3N1ZSBUcmFja2luZyI+SXNzdWUgVHJhY2tpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InNvdXJjZS1yZXBvc2l0b3J5Lmh0bWwiICB0aXRsZT0iU291cmNlIFJlcG9zaXRvcnkiPlNvdXJjZSBSZXBvc2l0b3J5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJsaWNlbnNlLmh0bWwiICB0aXRsZT0iTGljZW5zZSI+TGljZW5zZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlbGVhc2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iQ29taW5nIHNvb24iPkNvbWluZyBzb29uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+RG9jdW1lbnRhdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9ImN1cnJlbnQiPmN1cnJlbnQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZXNvdXJjZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJPdmVydmlldyI+T3ZlcnZpZXc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlF1aWNrU3RhcnQuaHRtbCIgIHRpdGxlPSJHZXR0aW5nIFN0YXJ0ZWQiPkdldHRpbmcgU3RhcnRlZDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQXJjaGl0ZWN0dXJlLmh0bWwiICB0aXRsZT0iQXJjaGl0ZWN0dXJlIj5BcmNoaXRlY3R1cmU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Ikluc3RhbGxhdGlvblN0ZXBzLmh0bWwiICB0aXRsZT0iSW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlR5cGVTeXN0ZW0uaHRtbCIgIHRpdGxlPSJUeXBlIFN5c3RlbSI+VHlwZSBTeXN0ZW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkNvbmZpZ3VyYXRpb24uaHRtbCIgIHRpdGxlPSJDb25maWd1cmF0aW9uIj5Db25maWd1cmF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJTZWN1cml0eS5odG1sIiAgdGl0bGU9IlNlY3VyaXR5Ij5TZWN1cml0eTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iYXBpL3Jlc3QuaHRtbCIgIHRpdGxlPSJSZXN0IEFQSSI+UmVzdCBBUEk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BU0YgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vaG93LWl0LXdvcmtzLmh0bWwiICB0aXRsZT0iSG93IEFwYWNoZSBXb3JrcyI+SG93IEFwYWNoZSBXb3JrczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vIiAgdGl0bGU9IkZvdW5kYXRpb24iPkZvdW5kYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3Nwb25zb3JzaGlwLmh0bWwiICB0aXRsZT0iU3BvbnNvcmluZyBBcGFjaGUiPlNwb25zb3JpbmcgQXBhY2hlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi90aGFua3MuaHRtbCIgIHRpdGxlPSJUaGFua3MiPlRoYW5rczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBpZD0ic2VhcmNoLWZvcm0iIGFjdGlvbj0iaHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaCIgbWV0aG9kPSJnZXQiICBjbGFzcz0ibmF2YmFyLXNlYXJjaCBwdWxsLXJpZ2h0IiA+CisgICAgCisgIDxpbnB1dCB2YWx1ZT0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnIiBuYW1lPSJzaXRlc2VhcmNoIiB0eXBlPSJoaWRkZW4iLz4KKyAgPGlucHV0IGNsYXNzPSJzZWFyY2gtcXVlcnkiIG5hbWU9InEiIGlkPSJxdWVyeSIgdHlwZT0idGV4dCIgLz4KKzwvZm9ybT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9jb29wL2NzZS9icmFuZD9mb3JtPXNlYXJjaC1mb3JtIj48L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICA8aWZyYW1lIHNyYz0iaHR0cDovL3d3dy5mYWNlYm9vay5jb20vcGx1Z2lucy9saWtlLnBocD9ocmVmPWh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzJnNlbmQ9ZmFsc2UmbGF5b3V0PWJ1dHRvbl9jb3VudCZzaG93LWZhY2VzPWZhbHNlJmFjdGlvbj1saWtlJmNvbG9yc2NoZW1lPWRhcmsiCisgICAgICAgIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPSIwIgorICAgICAgICBzdHlsZT0iYm9yZGVyOm5vbmU7IHdpZHRoOjgwcHg7IGhlaWdodDoyMHB4OyBtYXJnaW4tdG9wOiAxMHB4OyIgIGNsYXNzPSJwdWxsLXJpZ2h0IiA+PC9pZnJhbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2FwaXMuZ29vZ2xlLmNvbS9qcy9wbHVzb25lLmpzIj48L3NjcmlwdD4KKworICAgICAgICA8dWwgY2xhc3M9Im5hdiBwdWxsLXJpZ2h0Ij48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij4KKyAgICAKKyAgICA8ZGl2IGNsYXNzPSJnLXBsdXNvbmUiIGRhdGEtaHJlZj0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3MiIGRhdGEtc2l6ZT0ibWVkaXVtIiAgd2lkdGg9IjYwcHgiIGFsaWduPSJyaWdodCIgPjwvZGl2PgorCisgICAgICAgIDwvbGk+PC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIAorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIAorICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgIDxkaXYgaWQ9ImJhbm5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtbGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uIiBpZD0iYmFubmVyTGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2F0bGFzLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgQXRsYXMiIHdpZHRoPSIyMDBweCIgaGVpZ2h0PSI0NXB4Ii8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4gICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vaW5jdWJhdG9yLmFwYWNoZS5vcmciIGlkPSJiYW5uZXJSaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2FwYWNoZS1pbmN1YmF0b3ItbG9nby5wbmciICBhbHQ9IkFwYWNoZSBJbmN1YmF0b3IiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiPjxoci8+PC9kaXY+CisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0iYnJlYWRjcnVtYnMiPgorICAgICAgICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiPgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iQXBhY2hlIj4KKyAgICAgICAgQXBhY2hlPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJBdGxhcyI+CisgICAgICAgIEF0bGFzPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0iIj5BcmNoaXRlY3R1cmU8L2xpPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICA8bGkgaWQ9InB1Ymxpc2hEYXRlIiBjbGFzcz0icHVsbC1yaWdodCI+TGFzdCBQdWJsaXNoZWQ6IDIwMTUtMDctMDk8L2xpPiA8bGkgY2xhc3M9ImRpdmlkZXIgcHVsbC1yaWdodCI+fDwvbGk+CisgICAgICAgICAgICAgIDxsaSBpZD0icHJvamVjdFZlcnNpb24iIGNsYXNzPSJwdWxsLXJpZ2h0Ij5WZXJzaW9uOiAwLjUtaW5jdWJhdGluZzwvbGk+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9kaXY+CisKKyAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxkaXYgaWQ9ImJvZHlDb2x1bW4iID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPkFyY2hpdGVjdHVyZTxhIG5hbWU9IkFyY2hpdGVjdHVyZSI+PC9hPjwvaDI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5JbnRyb2R1Y3Rpb248YSBuYW1lPSJJbnRyb2R1Y3Rpb24iPjwvYT48L2gzPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDM+TWV0YWRhdGEgSGlnaCBMZXZlbCBBcmNoaXRlY3R1cmUgLSBPdmVydmlldzxhIG5hbWU9Ik1ldGFkYXRhX0hpZ2hfTGV2ZWxfQXJjaGl0ZWN0dXJlXy1fT3ZlcnZpZXciPjwvYT48L2gzPgorPHA+PGltZyBzcmM9ImFyY2hpdGVjdHVyZS5wbmciIGFsdD0iIiAvPjwvcD48L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorCisgICAgPGhyLz4KKworICAgIDxmb290ZXI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgc3BhbjEyIj5Db3B5cmlnaHQgJmNvcHk7ICAgICAgICAgICAgICAgICAgICAyMDE1CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciPkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9hPi4KKyAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPHAgaWQ9InBvd2VyZWRCeSIgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy8iIHRpdGxlPSJCdWlsdCBieSBNYXZlbiIgY2xhc3M9InBvd2VyZWRCeSI+CisgICAgICAgIDxpbWcgY2xhc3M9ImJ1aWx0QnkiIGFsdD0iQnVpbHQgYnkgTWF2ZW4iIHNyYz0iLi9pbWFnZXMvbG9nb3MvbWF2ZW4tZmVhdGhlci5wbmciIC8+CisgICAgICA8L2E+CisgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgPC9mb290ZXI+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvQ29uZmlndXJhdGlvbi5odG1sIGIvMC41LjAtaW5jdWJhdGluZy9Db25maWd1cmF0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRiNTcwOQotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvQ29uZmlndXJhdGlvbi5odG1sCkBAIC0wLDAgKzEsMzA3IEBACis8IURPQ1RZUEUgaHRtbD4KKzwhLS0KKyB8IEdlbmVyYXRlZCBieSBBcGFjaGUgTWF2ZW4gRG94aWEgYXQgMjAxNS0wNy0wOQorIHwgUmVuZGVyZWQgdXNpbmcgQXBhY2hlIE1hdmVuIEZsdWlkbyBTa2luIDEuMy4wCistLT4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CisgICAgPG1ldGEgbmFtZT0iRGF0ZS1SZXZpc2lvbi15eXl5bW1kZCIgY29udGVudD0iMjAxNTA3MDkiIC8+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4iIC8+CisgICAgPHRpdGxlPk1ldGFkYXRhIGFuZCBHb3Zlcm5hbmNlIC0gQ29uZmlndXJpbmcgQXBhY2hlIEF0bGFzPC90aXRsZT4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmNzcyIgLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3NpdGUuY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvcHJpbnQuY3NzIiBtZWRpYT0icHJpbnQiIC8+CisKKyAgICAgIAorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4vanMvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uanMiPjwvc2NyaXB0PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHsgJCggJy5jYXJvdXNlbCcgKS5jYXJvdXNlbCggeyBpbnRlcnZhbDogMzUwMCB9ICkgfSApOzwvc2NyaXB0PgorICAgICAgICAgIAorICAgICAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keSBjbGFzcz0idG9wQmFyRW5hYmxlZCI+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisKKyAgICA8ZGl2IGlkPSJ0b3BiYXIiIGNsYXNzPSJuYXZiYXIgbmF2YmFyLWZpeGVkLXRvcCAiPgorICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWlubmVyIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiIHN0eWxlPSJ3aWR0aDogNjglOyI+PGRpdiBjbGFzcz0ibmF2LWNvbGxhcHNlIj4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Im5hdiI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkF0bGFzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iQWJvdXQiPkFib3V0PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9Ildpa2kiPldpa2k8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iTmV3cyI+TmV3czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXQtd2lwLXVzLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci1hdGxhcy5naXQiICB0aXRsZT0iR2l0Ij5HaXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci9hdGxhcyIgIHRpdGxlPSJTdm4iPlN2bjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9BVExBUyIgIHRpdGxlPSJKaXJhIj5KaXJhPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTL1Bvd2VyZWRCeSIgIHRpdGxlPSJQb3dlcmVkIGJ5Ij5Qb3dlcmVkIGJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vYmxvZ3MuYXBhY2hlLm9yZy9hdGxhcy8iICB0aXRsZT0iQmxvZyI+QmxvZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlByb2plY3QgSW5mb3JtYXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0icHJvamVjdC1pbmZvLmh0bWwiICB0aXRsZT0iU3VtbWFyeSI+U3VtbWFyeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibWFpbC1saXN0cy5odG1sIiAgdGl0bGU9Ik1haWxpbmcgTGlzdHMiPk1haWxpbmcgTGlzdHM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93ZWJjaGF0LmZyZWVub2RlLm5ldD9jaGFubmVscz1hcGFjaGVhdGxhcyZ1aW89ZDQiICB0aXRsZT0iSVJDIj5JUkM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InRlYW0tbGlzdC5odG1sIiAgdGl0bGU9IlRlYW0iPlRlYW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imlzc3VlLXRyYWNraW5nLmh0bWwiICB0aXRsZT0iSXNzdWUgVHJhY2tpbmciPklzc3VlIFRyYWNraW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJzb3VyY2UtcmVwb3NpdG9yeS5odG1sIiAgdGl0bGU9IlNvdXJjZSBSZXBvc2l0b3J5Ij5Tb3VyY2UgUmVwb3NpdG9yeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibGljZW5zZS5odG1sIiAgdGl0bGU9IkxpY2Vuc2UiPkxpY2Vuc2U8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZWxlYXNlcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9IkNvbWluZyBzb29uIj5Db21pbmcgc29vbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkRvY3VtZW50YXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJjdXJyZW50Ij5jdXJyZW50PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UmVzb3VyY2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJRdWlja1N0YXJ0Lmh0bWwiICB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj5HZXR0aW5nIFN0YXJ0ZWQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkFyY2hpdGVjdHVyZS5odG1sIiAgdGl0bGU9IkFyY2hpdGVjdHVyZSI+QXJjaGl0ZWN0dXJlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJJbnN0YWxsYXRpb25TdGVwcy5odG1sIiAgdGl0bGU9Ikluc3RhbGxhdGlvbiI+SW5zdGFsbGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJUeXBlU3lzdGVtLmh0bWwiICB0aXRsZT0iVHlwZSBTeXN0ZW0iPlR5cGUgU3lzdGVtPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJDb25maWd1cmF0aW9uLmh0bWwiICB0aXRsZT0iQ29uZmlndXJhdGlvbiI+Q29uZmlndXJhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iU2VjdXJpdHkuaHRtbCIgIHRpdGxlPSJTZWN1cml0eSI+U2VjdXJpdHk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImFwaS9yZXN0Lmh0bWwiICB0aXRsZT0iUmVzdCBBUEkiPlJlc3QgQVBJPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QVNGIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL2hvdy1pdC13b3Jrcy5odG1sIiAgdGl0bGU9IkhvdyBBcGFjaGUgV29ya3MiPkhvdyBBcGFjaGUgV29ya3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uLyIgIHRpdGxlPSJGb3VuZGF0aW9uIj5Gb3VuZGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9zcG9uc29yc2hpcC5odG1sIiAgdGl0bGU9IlNwb25zb3JpbmcgQXBhY2hlIj5TcG9uc29yaW5nIEFwYWNoZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vdGhhbmtzLmh0bWwiICB0aXRsZT0iVGhhbmtzIj5UaGFua3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gaWQ9InNlYXJjaC1mb3JtIiBhY3Rpb249Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2giIG1ldGhvZD0iZ2V0IiAgY2xhc3M9Im5hdmJhci1zZWFyY2ggcHVsbC1yaWdodCIgPgorICAgIAorICA8aW5wdXQgdmFsdWU9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZyIgbmFtZT0ic2l0ZXNlYXJjaCIgdHlwZT0iaGlkZGVuIi8+CisgIDxpbnB1dCBjbGFzcz0ic2VhcmNoLXF1ZXJ5IiBuYW1lPSJxIiBpZD0icXVlcnkiIHR5cGU9InRleHQiIC8+Cis8L2Zvcm0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vY29vcC9jc2UvYnJhbmQ/Zm9ybT1zZWFyY2gtZm9ybSI+PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgPGlmcmFtZSBzcmM9Imh0dHA6Ly93d3cuZmFjZWJvb2suY29tL3BsdWdpbnMvbGlrZS5waHA/aHJlZj1odHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmcvYXRsYXMtZG9jcyZzZW5kPWZhbHNlJmxheW91dD1idXR0b25fY291bnQmc2hvdy1mYWNlcz1mYWxzZSZhY3Rpb249bGlrZSZjb2xvcnNjaGVtZT1kYXJrIgorICAgICAgICBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0iMCIKKyAgICAgICAgc3R5bGU9ImJvcmRlcjpub25lOyB3aWR0aDo4MHB4OyBoZWlnaHQ6MjBweDsgbWFyZ2luLXRvcDogMTBweDsiICBjbGFzcz0icHVsbC1yaWdodCIgPjwvaWZyYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9hcGlzLmdvb2dsZS5jb20vanMvcGx1c29uZS5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgPHVsIGNsYXNzPSJuYXYgcHVsbC1yaWdodCI+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CisgICAgCisgICAgPGRpdiBjbGFzcz0iZy1wbHVzb25lIiBkYXRhLWhyZWY9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzIiBkYXRhLXNpemU9Im1lZGl1bSIgIHdpZHRoPSI2MHB4IiBhbGlnbj0icmlnaHQiID48L2Rpdj4KKworICAgICAgICA8L2xpPjwvdWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAKKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICAKKyAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICA8ZGl2IGlkPSJiYW5uZXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLWxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLiIgaWQ9ImJhbm5lckxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hdGxhcy1sb2dvLnBuZyIgIGFsdD0iQXBhY2hlIEF0bGFzIiB3aWR0aD0iMjAwcHgiIGhlaWdodD0iNDVweCIvPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+ICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2luY3ViYXRvci5hcGFjaGUub3JnIiBpZD0iYmFubmVyUmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hcGFjaGUtaW5jdWJhdG9yLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgSW5jdWJhdG9yIi8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIj48aHIvPjwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImJyZWFkY3J1bWJzIj4KKyAgICAgICAgPHVsIGNsYXNzPSJicmVhZGNydW1iIj4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZyIgY2xhc3M9ImV4dGVybmFsTGluayIgdGl0bGU9IkFwYWNoZSI+CisgICAgICAgIEFwYWNoZTwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iQXRsYXMiPgorICAgICAgICBBdGxhczwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICA8bGkgY2xhc3M9IiI+Q29uZmlndXJpbmcgQXBhY2hlIEF0bGFzPC9saT4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgPGxpIGlkPSJwdWJsaXNoRGF0ZSIgY2xhc3M9InB1bGwtcmlnaHQiPkxhc3QgUHVibGlzaGVkOiAyMDE1LTA3LTA5PC9saT4gPGxpIGNsYXNzPSJkaXZpZGVyIHB1bGwtcmlnaHQiPnw8L2xpPgorICAgICAgICAgICAgICA8bGkgaWQ9InByb2plY3RWZXJzaW9uIiBjbGFzcz0icHVsbC1yaWdodCI+VmVyc2lvbjogMC41LWluY3ViYXRpbmc8L2xpPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvZGl2PgorCisgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICA8ZGl2IGlkPSJib2R5Q29sdW1uIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj5Db25maWd1cmluZyBBcGFjaGUgQXRsYXM8YSBuYW1lPSJDb25maWd1cmluZ19BcGFjaGVfQXRsYXMiPjwvYT48L2gyPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDM+SW50cm9kdWN0aW9uPGEgbmFtZT0iSW50cm9kdWN0aW9uIj48L2E+PC9oMz4KKzxwPkFsbCBjb25maWd1cmF0aW9uIGluIEF0bGFzIHVzZXMgamF2YSBwcm9wZXJ0aWVzIHN0eWxlIGNvbmZpZ3VyYXRpb24uPC9wPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDM+QXBwbGljYXRpb24gUHJvcGVydGllczxhIG5hbWU9IkFwcGxpY2F0aW9uX1Byb3BlcnRpZXMiPjwvYT48L2gzPgorPHA+VGhlIG1haW4gY29uZmlndXJhdGlvbiBmaWxlIGlzIGFwcGxpY2F0aW9uLnByb3BlcnRpZXMgd2hpY2ggaXMgaW4gdGhlIDxiPmNvbmY8L2I+IGRpciBhdCB0aGUgZGVwbG95ZWQgbG9jYXRpb24uIEl0IGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnM6PC9wPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDQ+R3JhcGggRGF0YWJhc2UgQ29uZmlnczxhIG5hbWU9IkdyYXBoX0RhdGFiYXNlX0NvbmZpZ3MiPjwvYT48L2g0PjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDU+R3JhcGggcGVyc2lzdGVuY2UgZW5naW5lPGEgbmFtZT0iR3JhcGhfcGVyc2lzdGVuY2VfZW5naW5lIj48L2E+PC9oNT4KKzxwPjxhIGhyZWY9Imh0dHA6Ly9zMy50aGlua2F1cmVsaXVzLmNvbS9kb2NzL3RpdGFuLzAuNS40L3RpdGFuLWNvbmZpZy1yZWYuaHRtbCI+bGluazwvYT4gZm9yIG1vcmUgZGV0YWlscy4gVGhlIGV4YW1wbGUgYmVsb3cgdXNlcyBCZXJrZWxleURCSkUuPC9wPgorPGRpdiBjbGFzcz0ic291cmNlIj4KKzxwcmU+CithdGxhcy5ncmFwaC5zdG9yYWdlLmJhY2tlbmQ9YmVya2VsZXlqZQorYXRsYXMuZ3JhcGguc3RvcmFnZS5kaXJlY3Rvcnk9ZGF0YS9iZXJrbGV5CisKKzwvcHJlPjwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDU+R3JhcGggU2VhcmNoIEluZGV4PGEgbmFtZT0iR3JhcGhfU2VhcmNoX0luZGV4Ij48L2E+PC9oNT4KKzxwPlRoaXMgc2VjdGlvbiBzZXRzIHVwIHRoZSBncmFwaCBkYiAtIHRpdGFuIC0gdG8gdXNlIGFuIHNlYXJjaCBpbmRleGluZyBzeXN0ZW0uIFRoZSBleGFtcGxlIGNvbmZpZ3VyYXRpb24gYmVsb3cgc2V0c3VwIHRvIHVzZSBhbiBlbWJlZGRlZCBFbGFzdGljIHNlYXJjaCBpbmRleGluZyBzeXN0ZW0uPC9wPgorPGRpdiBjbGFzcz0ic291cmNlIj4KKzxwcmU+CithdGxhcy5ncmFwaC5pbmRleC5zZWFyY2guYmFja2VuZD1lbGFzdGljc2VhcmNoCithdGxhcy5ncmFwaC5pbmRleC5zZWFyY2guZGlyZWN0b3J5PWRhdGEvZXMKK2F0bGFzLmdyYXBoLmluZGV4LnNlYXJjaC5lbGFzdGljc2VhcmNoLmNsaWVudC1vbmx5PWZhbHNlCithdGxhcy5ncmFwaC5pbmRleC5zZWFyY2guZWxhc3RpY3NlYXJjaC5sb2NhbC1tb2RlPXRydWUKK2F0bGFzLmdyYXBoLmluZGV4LnNlYXJjaC5lbGFzdGljc2VhcmNoLmNyZWF0ZS5zbGVlcD0yMDAwCisKKzwvcHJlPjwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDQ+SGl2ZSBMaW5lYWdlIENvbmZpZ3M8YSBuYW1lPSJIaXZlX0xpbmVhZ2VfQ29uZmlncyI+PC9hPjwvaDQ+Cis8cD5UaGUgaGlnaGVyIGxheWVyIHNlcnZpY2VzIGxpa2UgaGl2ZSBsaW5lYWdlLCBzY2hlbWEsIGV0Yy4gYXJlIGRyaXZlbiBieSB0aGUgdHlwZSBzeXN0ZW0gYW5kIHRoaXMgc2VjdGlvbiBlbmNvZGVzIHRoZSBzcGVjaWZpYyB0eXBlcyBmb3IgdGhlIGhpdmUgZGF0YSBtb2RlbC48L3A+Cis8cD4jIFRoaXMgbW9kZWxzIHJlZmxlY3RzIHRoZSBiYXNlIHN1cGVyIHR5cGVzIGZvciBEYXRhIGFuZCBQcm9jZXNzPC9wPgorPGRpdiBjbGFzcz0ic291cmNlIj4KKzxwcmU+CithdGxhcy5saW5lYWdlLmhpdmUudGFibGUudHlwZS5uYW1lPURhdGFTZXQKK2F0bGFzLmxpbmVhZ2UuaGl2ZS5wcm9jZXNzLnR5cGUubmFtZT1Qcm9jZXNzCithdGxhcy5saW5lYWdlLmhpdmUucHJvY2Vzcy5pbnB1dHMubmFtZT1pbnB1dHMKK2F0bGFzLmxpbmVhZ2UuaGl2ZS5wcm9jZXNzLm91dHB1dHMubmFtZT1vdXRwdXRzCisKKyMjIFNjaGVtYQorYXRsYXMubGluZWFnZS5oaXZlLnRhYmxlLnNjaGVtYS5xdWVyeT1oaXZlX3RhYmxlIHdoZXJlIG5hbWU9PywgY29sdW1ucworCis8L3ByZT48L2Rpdj48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGg0PlNlY3VyaXR5IFByb3BlcnRpZXM8YSBuYW1lPSJTZWN1cml0eV9Qcm9wZXJ0aWVzIj48L2E+PC9oND48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGg1PlNTTCBjb25maWc8YSBuYW1lPSJTU0xfY29uZmlnIj48L2E+PC9oNT4KKzxwPlRoZSBmb2xsb3dpbmcgcHJvcGVydHkgaXMgdXNlZCB0byB0b2dnbGUgdGhlIFNTTCBmZWF0dXJlLjwvcD4KKzxkaXYgY2xhc3M9InNvdXJjZSI+Cis8cHJlPgorYXRsYXMuZW5hYmxlVExTPWZhbHNlCisKKzwvcHJlPjwvZGl2PjwvZGl2PgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisKKyAgICA8aHIvPgorCisgICAgPGZvb3Rlcj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyBzcGFuMTIiPkNvcHlyaWdodCAmY29weTsgICAgICAgICAgICAgICAgICAgIDIwMTUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZyI+QXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb248L2E+LgorICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8cCBpZD0icG93ZXJlZEJ5IiBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnLyIgdGl0bGU9IkJ1aWx0IGJ5IE1hdmVuIiBjbGFzcz0icG93ZXJlZEJ5Ij4KKyAgICAgICAgPGltZyBjbGFzcz0iYnVpbHRCeSIgYWx0PSJCdWlsdCBieSBNYXZlbiIgc3JjPSIuL2ltYWdlcy9sb2dvcy9tYXZlbi1mZWF0aGVyLnBuZyIgLz4KKyAgICAgIDwvYT4KKyAgICAgICAgICAgICAgPC9wPgorICAgICAgICAKKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICA8L2Zvb3Rlcj4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9JbnN0YWxsYXRpb25TdGVwcy5odG1sIGIvMC41LjAtaW5jdWJhdGluZy9JbnN0YWxsYXRpb25TdGVwcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YjdjMjMKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL0luc3RhbGxhdGlvblN0ZXBzLmh0bWwKQEAgLTAsMCArMSwzOTYgQEAKKzwhRE9DVFlQRSBodG1sPgorPCEtLQorIHwgR2VuZXJhdGVkIGJ5IEFwYWNoZSBNYXZlbiBEb3hpYSBhdCAyMDE1LTA3LTA5CisgfCBSZW5kZXJlZCB1c2luZyBBcGFjaGUgTWF2ZW4gRmx1aWRvIFNraW4gMS4zLjAKKy0tPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgorICA8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCIgLz4KKyAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCIgLz4KKyAgICA8bWV0YSBuYW1lPSJEYXRlLVJldmlzaW9uLXl5eXltbWRkIiBjb250ZW50PSIyMDE1MDcwOSIgLz4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbiIgLz4KKyAgICA8dGl0bGU+TWV0YWRhdGEgYW5kIEdvdmVybmFuY2UgLSBCdWlsZGluZyAmIEluc3RhbGxpbmcgQXBhY2hlIEF0bGFzPC90aXRsZT4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmNzcyIgLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3NpdGUuY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvcHJpbnQuY3NzIiBtZWRpYT0icHJpbnQiIC8+CisKKyAgICAgIAorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4vanMvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uanMiPjwvc2NyaXB0PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHsgJCggJy5jYXJvdXNlbCcgKS5jYXJvdXNlbCggeyBpbnRlcnZhbDogMzUwMCB9ICkgfSApOzwvc2NyaXB0PgorICAgICAgICAgIAorICAgICAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keSBjbGFzcz0idG9wQmFyRW5hYmxlZCI+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisKKyAgICA8ZGl2IGlkPSJ0b3BiYXIiIGNsYXNzPSJuYXZiYXIgbmF2YmFyLWZpeGVkLXRvcCAiPgorICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWlubmVyIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiIHN0eWxlPSJ3aWR0aDogNjglOyI+PGRpdiBjbGFzcz0ibmF2LWNvbGxhcHNlIj4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Im5hdiI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkF0bGFzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iQWJvdXQiPkFib3V0PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9Ildpa2kiPldpa2k8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iTmV3cyI+TmV3czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXQtd2lwLXVzLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci1hdGxhcy5naXQiICB0aXRsZT0iR2l0Ij5HaXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci9hdGxhcyIgIHRpdGxlPSJTdm4iPlN2bjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9BVExBUyIgIHRpdGxlPSJKaXJhIj5KaXJhPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTL1Bvd2VyZWRCeSIgIHRpdGxlPSJQb3dlcmVkIGJ5Ij5Qb3dlcmVkIGJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vYmxvZ3MuYXBhY2hlLm9yZy9hdGxhcy8iICB0aXRsZT0iQmxvZyI+QmxvZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlByb2plY3QgSW5mb3JtYXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0icHJvamVjdC1pbmZvLmh0bWwiICB0aXRsZT0iU3VtbWFyeSI+U3VtbWFyeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibWFpbC1saXN0cy5odG1sIiAgdGl0bGU9Ik1haWxpbmcgTGlzdHMiPk1haWxpbmcgTGlzdHM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93ZWJjaGF0LmZyZWVub2RlLm5ldD9jaGFubmVscz1hcGFjaGVhdGxhcyZ1aW89ZDQiICB0aXRsZT0iSVJDIj5JUkM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InRlYW0tbGlzdC5odG1sIiAgdGl0bGU9IlRlYW0iPlRlYW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imlzc3VlLXRyYWNraW5nLmh0bWwiICB0aXRsZT0iSXNzdWUgVHJhY2tpbmciPklzc3VlIFRyYWNraW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJzb3VyY2UtcmVwb3NpdG9yeS5odG1sIiAgdGl0bGU9IlNvdXJjZSBSZXBvc2l0b3J5Ij5Tb3VyY2UgUmVwb3NpdG9yeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibGljZW5zZS5odG1sIiAgdGl0bGU9IkxpY2Vuc2UiPkxpY2Vuc2U8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZWxlYXNlcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9IkNvbWluZyBzb29uIj5Db21pbmcgc29vbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkRvY3VtZW50YXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJjdXJyZW50Ij5jdXJyZW50PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UmVzb3VyY2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJRdWlja1N0YXJ0Lmh0bWwiICB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj5HZXR0aW5nIFN0YXJ0ZWQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkFyY2hpdGVjdHVyZS5odG1sIiAgdGl0bGU9IkFyY2hpdGVjdHVyZSI+QXJjaGl0ZWN0dXJlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJJbnN0YWxsYXRpb25TdGVwcy5odG1sIiAgdGl0bGU9Ikluc3RhbGxhdGlvbiI+SW5zdGFsbGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJUeXBlU3lzdGVtLmh0bWwiICB0aXRsZT0iVHlwZSBTeXN0ZW0iPlR5cGUgU3lzdGVtPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJDb25maWd1cmF0aW9uLmh0bWwiICB0aXRsZT0iQ29uZmlndXJhdGlvbiI+Q29uZmlndXJhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iU2VjdXJpdHkuaHRtbCIgIHRpdGxlPSJTZWN1cml0eSI+U2VjdXJpdHk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImFwaS9yZXN0Lmh0bWwiICB0aXRsZT0iUmVzdCBBUEkiPlJlc3QgQVBJPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QVNGIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL2hvdy1pdC13b3Jrcy5odG1sIiAgdGl0bGU9IkhvdyBBcGFjaGUgV29ya3MiPkhvdyBBcGFjaGUgV29ya3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uLyIgIHRpdGxlPSJGb3VuZGF0aW9uIj5Gb3VuZGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9zcG9uc29yc2hpcC5odG1sIiAgdGl0bGU9IlNwb25zb3JpbmcgQXBhY2hlIj5TcG9uc29yaW5nIEFwYWNoZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vdGhhbmtzLmh0bWwiICB0aXRsZT0iVGhhbmtzIj5UaGFua3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gaWQ9InNlYXJjaC1mb3JtIiBhY3Rpb249Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2giIG1ldGhvZD0iZ2V0IiAgY2xhc3M9Im5hdmJhci1zZWFyY2ggcHVsbC1yaWdodCIgPgorICAgIAorICA8aW5wdXQgdmFsdWU9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZyIgbmFtZT0ic2l0ZXNlYXJjaCIgdHlwZT0iaGlkZGVuIi8+CisgIDxpbnB1dCBjbGFzcz0ic2VhcmNoLXF1ZXJ5IiBuYW1lPSJxIiBpZD0icXVlcnkiIHR5cGU9InRleHQiIC8+Cis8L2Zvcm0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vY29vcC9jc2UvYnJhbmQ/Zm9ybT1zZWFyY2gtZm9ybSI+PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgPGlmcmFtZSBzcmM9Imh0dHA6Ly93d3cuZmFjZWJvb2suY29tL3BsdWdpbnMvbGlrZS5waHA/aHJlZj1odHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmcvYXRsYXMtZG9jcyZzZW5kPWZhbHNlJmxheW91dD1idXR0b25fY291bnQmc2hvdy1mYWNlcz1mYWxzZSZhY3Rpb249bGlrZSZjb2xvcnNjaGVtZT1kYXJrIgorICAgICAgICBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0iMCIKKyAgICAgICAgc3R5bGU9ImJvcmRlcjpub25lOyB3aWR0aDo4MHB4OyBoZWlnaHQ6MjBweDsgbWFyZ2luLXRvcDogMTBweDsiICBjbGFzcz0icHVsbC1yaWdodCIgPjwvaWZyYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9hcGlzLmdvb2dsZS5jb20vanMvcGx1c29uZS5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgPHVsIGNsYXNzPSJuYXYgcHVsbC1yaWdodCI+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CisgICAgCisgICAgPGRpdiBjbGFzcz0iZy1wbHVzb25lIiBkYXRhLWhyZWY9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzIiBkYXRhLXNpemU9Im1lZGl1bSIgIHdpZHRoPSI2MHB4IiBhbGlnbj0icmlnaHQiID48L2Rpdj4KKworICAgICAgICA8L2xpPjwvdWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAKKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICAKKyAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICA8ZGl2IGlkPSJiYW5uZXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLWxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLiIgaWQ9ImJhbm5lckxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hdGxhcy1sb2dvLnBuZyIgIGFsdD0iQXBhY2hlIEF0bGFzIiB3aWR0aD0iMjAwcHgiIGhlaWdodD0iNDVweCIvPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+ICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2luY3ViYXRvci5hcGFjaGUub3JnIiBpZD0iYmFubmVyUmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hcGFjaGUtaW5jdWJhdG9yLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgSW5jdWJhdG9yIi8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIj48aHIvPjwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImJyZWFkY3J1bWJzIj4KKyAgICAgICAgPHVsIGNsYXNzPSJicmVhZGNydW1iIj4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZyIgY2xhc3M9ImV4dGVybmFsTGluayIgdGl0bGU9IkFwYWNoZSI+CisgICAgICAgIEFwYWNoZTwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iQXRsYXMiPgorICAgICAgICBBdGxhczwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICA8bGkgY2xhc3M9IiI+QnVpbGRpbmcgJiBJbnN0YWxsaW5nIEFwYWNoZSBBdGxhczwvbGk+CisgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgIDxsaSBpZD0icHVibGlzaERhdGUiIGNsYXNzPSJwdWxsLXJpZ2h0Ij5MYXN0IFB1Ymxpc2hlZDogMjAxNS0wNy0wOTwvbGk+IDxsaSBjbGFzcz0iZGl2aWRlciBwdWxsLXJpZ2h0Ij58PC9saT4KKyAgICAgICAgICAgICAgPGxpIGlkPSJwcm9qZWN0VmVyc2lvbiIgY2xhc3M9InB1bGwtcmlnaHQiPlZlcnNpb246IDAuNS1pbmN1YmF0aW5nPC9saT4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2Rpdj4KKworICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgPGRpdiBpZD0iYm9keUNvbHVtbiIgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDM+QnVpbGRpbmcgJmFtcDsgSW5zdGFsbGluZyBBcGFjaGUgQXRsYXM8YSBuYW1lPSJCdWlsZGluZ19fSW5zdGFsbGluZ19BcGFjaGVfQXRsYXMiPjwvYT48L2gzPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDQ+QnVpbGRpbmcgQXRsYXM8YSBuYW1lPSJCdWlsZGluZ19BdGxhcyI+PC9hPjwvaDQ+Cis8ZGl2IGNsYXNzPSJzb3VyY2UiPgorPHByZT4KK2dpdCBjbG9uZSBodHRwczovL2dpdC13aXAtdXMuYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yLWF0bGFzLmdpdCBhdGxhcworCitjZCBhdGxhcworCitleHBvcnQgTUFWRU5fT1BUUz0mcXVvdDstWG14MTAyNG0gLVhYOk1heFBlcm1TaXplPTI1Nm0mcXVvdDsgJmFtcDsmYW1wOyBtdm4gY2xlYW4gaW5zdGFsbAorCis8L3ByZT48L2Rpdj4KKzxwPk9uY2UgdGhlIGJ1aWxkIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZXMsIGFydGlmYWN0cyBjYW4gYmUgcGFja2FnZWQgZm9yIGRlcGxveW1lbnQuPC9wPgorPGRpdiBjbGFzcz0ic291cmNlIj4KKzxwcmU+CisKK212biBjbGVhbiB2ZXJpZnkgYXNzZW1ibHk6YXNzZW1ibHkgLURza2lwVGVzdHMKKworCis8L3ByZT48L2Rpdj4KKzxwPlRhciBjYW4gYmUgZm91bmQgaW4gYXRsYXMvdGFyZ2V0L2FwYWNoZS1hdGxhcy0ke3Byb2plY3QudmVyc2lvbn0tYmluLnRhci5nejwvcD4KKzxwPlRhciBpcyBzdHJ1Y3R1cmVkIGFzIGZvbGxvd3M8L3A+Cis8ZGl2IGNsYXNzPSJzb3VyY2UiPgorPHByZT4KKworfC0gYmluCisgICB8LSBhdGxhc19zdGFydC5weQorICAgfC0gYXRsYXNfc3RvcC5weQorICAgfC0gYXRsYXNfY29uZmlnLnB5CisgICB8LSBxdWlja19zdGFydC5weQorICAgfC0gY3B1dGlsLnB5Cit8LSBjb25mCisgICB8LSBhcHBsaWNhdGlvbi5wcm9wZXJ0aWVzCisgICB8LSBjbGllbnQucHJvcGVydGllcworICAgfC0gYXRsYXMtZW52LnNoCisgICB8LSBsb2c0ai54bWwKK3wtIGRvY3MKK3wtIHNlcnZlcgorICAgfC0gd2ViYXBwCisgICAgICB8LSBhdGxhcy53YXIKK3wtIFJFQURNRQorfC0gTk9USUNFLnR4dAorfC0gTElDRU5TRS50eHQKK3wtIERJU0NMQUlNRVIudHh0Cit8LSBDSEFOR0VTLnR4dAorCisKKzwvcHJlPjwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDQ+SW5zdGFsbGluZyAmYW1wOyBSdW5uaW5nIEF0bGFzPGEgbmFtZT0iSW5zdGFsbGluZ19fUnVubmluZ19BdGxhcyI+PC9hPjwvaDQ+Cis8cD48Yj5JbnN0YWxsaW5nIEF0bGFzPC9iPjwvcD4KKzxkaXYgY2xhc3M9InNvdXJjZSI+Cis8cHJlPgordGFyIC14enZmIGFwYWNoZS1hdGxhcy0ke3Byb2plY3QudmVyc2lvbn0tYmluLnRhci5negorKiBjZCBhdGxhcy0ke3Byb2plY3QudmVyc2lvbn0KKworPC9wcmU+PC9kaXY+Cis8cD48Yj5Db25maWd1cmluZyBBdGxhczwvYj48L3A+Cis8cD5CeSBkZWZhdWx0IGNvbmZpZyBkaXJlY3RvcnkgdXNlZCBieSBBdGxhcyBpcyB7cGFja2FnZSBkaXJ9L2NvbmYuIFRvIG92ZXJyaWRlIHRoaXMgc2V0IGVudmlyb25tZW50IHZhcmlhYmxlIE1FVEFEQVRBX0NPTkYgdG8gdGhlIHBhdGggb2YgdGhlIGNvbmYgZGlyLjwvcD4KKzxwPmF0bGFzLWVudi5zaCBoYXMgYmVlbiBhZGRlZCB0byB0aGUgQXRsYXMgY29uZi4gVGhpcyBmaWxlIGNhbiBiZSB1c2VkIHRvIHNldCB2YXJpb3VzIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IHlvdSBuZWVkIGZvciB5b3Ugc2VydmljZXMuIEluIGFkZGl0aW9uIHlvdSBjYW4gc2V0IGFueSBvdGhlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgeW91IG1pZ2h0IG5lZWQuIFRoaXMgZmlsZSB3aWxsIGJlIHNvdXJjZWQgYnkgYXRsYXMgc2NyaXB0cyBiZWZvcmUgYW55IGNvbW1hbmRzIGFyZSBleGVjdXRlZC4gVGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGF2YWlsYWJsZSB0byBzZXQuPC9wPgorPGRpdiBjbGFzcz0ic291cmNlIj4KKzxwcmU+CisjIFRoZSBqYXZhIGltcGxlbWVudGF0aW9uIHRvIHVzZS4gSWYgSkFWQV9IT01FIGlzIG5vdCBmb3VuZCB3ZSBleHBlY3QgamF2YSBhbmQgamFyIHRvIGJlIGluIHBhdGgKKyNleHBvcnQgSkFWQV9IT01FPQorCisjIGFueSBhZGRpdGlvbmFsIGphdmEgb3B0cyB5b3Ugd2FudCB0byBzZXQuIFRoaXMgd2lsbCBhcHBseSB0byBib3RoIGNsaWVudCBhbmQgc2VydmVyIG9wZXJhdGlvbnMKKyNleHBvcnQgTUVUQURBVEFfT1BUUz0KKworIyBhbnkgYWRkaXRpb25hbCBqYXZhIG9wdHMgdGhhdCB5b3Ugd2FudCB0byBzZXQgZm9yIGNsaWVudCBvbmx5CisjZXhwb3J0IE1FVEFEQVRBX0NMSUVOVF9PUFRTPQorCisjIGphdmEgaGVhcCBzaXplIHdlIHdhbnQgdG8gc2V0IGZvciB0aGUgY2xpZW50LiBEZWZhdWx0IGlzIDEwMjRNQgorI2V4cG9ydCBNRVRBREFUQV9DTElFTlRfSEVBUD0KKworIyBhbnkgYWRkaXRpb25hbCBvcHRzIHlvdSB3YW50IHRvIHNldCBmb3IgYXRsYXMgc2VydmljZS4KKyNleHBvcnQgTUVUQURBVEFfU0VSVkVSX09QVFM9CisKKyMgamF2YSBoZWFwIHNpemUgd2Ugd2FudCB0byBzZXQgZm9yIHRoZSBhdGxhcyBzZXJ2ZXIuIERlZmF1bHQgaXMgMTAyNE1CCisjZXhwb3J0IE1FVEFEQVRBX1NFUlZFUl9IRUFQPQorCisjIFdoYXQgaXMgaXMgY29uc2lkZXJlZCBhcyBhdGxhcyBob21lIGRpci4gRGVmYXVsdCBpcyB0aGUgYmFzZSBsb2NhaW9uIG9mIHRoZSBpbnN0YWxsZWQgc29mdHdhcmUKKyNleHBvcnQgTUVUQURBVEFfSE9NRV9ESVI9CisKKyMgV2hlcmUgbG9nIGZpbGVzIGFyZSBzdG9yZWQuIERlZmF0dWx0IGlzIGxvZ3MgZGlyZWN0b3J5IHVuZGVyIHRoZSBiYXNlIGluc3RhbGwgbG9jYXRpb24KKyNleHBvcnQgTUVUQURBVEFfTE9HX0RJUj0KKworIyBXaGVyZSBwaWQgZmlsZXMgYXJlIHN0b3JlZC4gRGVmYXR1bHQgaXMgbG9ncyBkaXJlY3RvcnkgdW5kZXIgdGhlIGJhc2UgaW5zdGFsbCBsb2NhdGlvbgorI2V4cG9ydCBNRVRBREFUQV9QSURfRElSPQorCisjIHdoZXJlIHRoZSBhdGxhcyB0aXRhbiBkYiBkYXRhIGlzIHN0b3JlZC4gRGVmYXR1bHQgaXMgbG9ncy9kYXRhIGRpcmVjdG9yeSB1bmRlciB0aGUgYmFzZSBpbnN0YWxsIGxvY2F0aW9uCisjZXhwb3J0IE1FVEFEQVRBX0RBVEFfRElSPQorCisjIFdoZXJlIGRvIHlvdSB3YW50IHRvIGV4cGFuZCB0aGUgd2FyIGZpbGUuIEJ5IERlZmF1bHQgaXQgaXMgaW4gL3NlcnZlci93ZWJhcHAgZGlyIHVuZGVyIHRoZSBiYXNlIGluc3RhbGwgZGlyLgorI2V4cG9ydCBNRVRBREFUQV9FWFBBTkRFRF9XRUJBUFBfRElSPQorCis8L3ByZT48L2Rpdj4KKzxwPjxiPk5PVEUgZm9yIE1hYyBPUyB1c2VyczwvYj48L3A+Cis8ZGl2IGNsYXNzPSJzb3VyY2UiPgorPHByZT4KK0lmIHlvdSBhcmUgdXNpbmcgYSBNYWMgT1MsIHlvdSB3aWxsIG5lZWQgdG8gY29uZmlndXJlIHRoZSBNRVRBREFUQV9TRVJWRVJfT1BUUyAoZXhwbGFpbmVkIGFib3ZlKS4KKworSW4gIHtwYWNrYWdlIGRpcn0vY29uZi9hdGxhcy1lbnYuc2ggdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZQorI2V4cG9ydCBNRVRBREFUQV9TRVJWRVJfT1BUUz0KKworYW5kIGNoYW5nZSBpdCB0byBsb29rIGFzIGJlbG93CitleHBvcnQgTUVUQURBVEFfU0VSVkVSX09QVFM9JnF1b3Q7LURqYXZhLmF3dC5oZWFkbGVzcz10cnVlIC1EamF2YS5zZWN1cml0eS5rcmI1LnJlYWxtPSAtRGphdmEuc2VjdXJpdHkua3JiNS5rZGM9JnF1b3Q7CisKKzwvcHJlPjwvZGl2PgorPHA+PGI+U3RhcnRpbmcgQXRsYXMgU2VydmVyPC9iPjwvcD4KKzxkaXYgY2xhc3M9InNvdXJjZSI+Cis8cHJlPgorYmluL2F0bGFzX3N0YXJ0LnB5IFstcG9ydCAmbHQ7cG9ydCZndDtdCisKKzwvcHJlPjwvZGl2PgorPHA+QnkgZGVmYXVsdCwgKiBUbyBjaGFuZ2UgdGhlIHBvcnQsIHVzZSAtcG9ydCBvcHRpb24uICogYXRsYXMgc2VydmVyIHN0YXJ0cyB3aXRoIGNvbmYgZnJvbSB7cGFja2FnZSBkaXJ9L2NvbmYuIFRvIG92ZXJyaWRlIHRoaXMgKHRvIHVzZSB0aGUgc2FtZSBjb25mIHdpdGggbXVsdGlwbGUgYXRsYXMgdXBncmFkZXMpLCBzZXQgZW52aXJvbm1lbnQgdmFyaWFibGUgTUVUQURBVEFfQ09ORiB0byB0aGUgcGF0aCBvZiBjb25mIGRpcjwvcD4KKzxwPjxiPlVzaW5nIEF0bGFzPC9iPjwvcD4KKzxkaXYgY2xhc3M9InNvdXJjZSI+Cis8cHJlPgorKiBWZXJpZnkgaWYgdGhlIHNlcnZlciBpcyB1cCBhbmQgcnVubmluZworICBjdXJsIC12IGh0dHA6Ly9sb2NhbGhvc3Q6MjEwMDAvYXBpL2F0bGFzL2FkbWluL3ZlcnNpb24KKyAgeyZxdW90O1ZlcnNpb24mcXVvdDs6JnF1b3Q7djAuMSZxdW90O30KKworKiBMaXN0IHRoZSB0eXBlcyBpbiB0aGUgcmVwb3NpdG9yeQorICBjdXJsIC12IGh0dHA6Ly9sb2NhbGhvc3Q6MjEwMDAvYXBpL2F0bGFzL3R5cGVzCisgIHsmcXVvdDtsaXN0JnF1b3Q7OlsmcXVvdDtiaWdpbnRlZ2VyJnF1b3Q7LCZxdW90O3Nob3J0JnF1b3Q7LCZxdW90O2J5dGUmcXVvdDssJnF1b3Q7aW50JnF1b3Q7LCZxdW90O3N0cmluZyZxdW90OywmcXVvdDtiaWdkZWNpbWFsJnF1b3Q7LCZxdW90O2Jvb2xlYW4mcXVvdDssJnF1b3Q7ZGF0ZSZxdW90OywmcXVvdDtkb3VibGUmcXVvdDssJnF1b3Q7bG9uZyZxdW90OywmcXVvdDtmbG9hdCZxdW90O10sJnF1b3Q7cmVxdWVzdElkJnF1b3Q7OiZxdW90OzkwMjU4MDc4NkBxdHAtMTQ3OTc3MTMyOC0wJnF1b3Q7fQorCisqIExpc3QgdGhlIGluc3RhbmNlcyBmb3IgYSBnaXZlbiB0eXBlCisgIGN1cmwgLXYgaHR0cDovL2xvY2FsaG9zdDoyMTAwMC9hcGkvYXRsYXMvZW50aXRpZXM/dHlwZT1oaXZlX3RhYmxlCisgIHsmcXVvdDtyZXF1ZXN0SWQmcXVvdDs6JnF1b3Q7Nzg4NTU4MDA3QHF0cC00NDgwODY1NC01JnF1b3Q7LCZxdW90O2xpc3QmcXVvdDs6WyZxdW90O2NiOWI1NTEzLWM2NzItNDJjYi04NDc3LWI4ZjNlNTM3YTE2MiZxdW90OywmcXVvdDtlYzk4NTcxOS1hNzk0LTRjOTgtYjk4Zi0wNTA5YmQyM2FhYzAmcXVvdDssJnF1b3Q7NDg5OThmODEtZjFkMy00NWEyLTk4OWEtMjIzYWY1YzFlZDZlJnF1b3Q7LCZxdW90O2E1NGIzODZlLWM3NTktNDY1MS04Nzc5LWEwOTkyOTQyNDRjNCZxdW90O119CisKKyAgY3VybCAtdiBodHRwOi8vbG9jYWxob3N0OjIxMDAwL2FwaS9hdGxhcy9lbnRpdGllcy9saXN0L2hpdmVfZGIKKworKiBTZWFyY2ggZm9yIGVudGl0aWVzIChpbnN0YW5jZXMpIGluIHRoZSByZXBvc2l0b3J5CisgIGN1cmwgLXYgaHR0cDovL2xvY2FsaG9zdDoyMTAwMC9hcGkvYXRsYXMvZGlzY292ZXJ5L3NlYXJjaC9kc2w/cXVlcnk9JnF1b3Q7ZnJvbSBoaXZlX3RhYmxlJnF1b3Q7CisKKzwvcHJlPjwvZGl2PgorPHA+PGI+RGFzaGJvYXJkPC9iPjwvcD4KKzxwPk9uY2UgYXRsYXMgaXMgc3RhcnRlZCwgeW91IGNhbiB2aWV3IHRoZSBzdGF0dXMgb2YgYXRsYXMgZW50aXRpZXMgdXNpbmcgdGhlIFdlYi1iYXNlZCBkYXNoYm9hcmQuIFxZb3UgY2FuIG9wZW4geW91ciBicm93c2VyIGF0IHRoZSBjb3JyZXNwb25kaW5nIHBvcnQgdG8gdXNlIHRoZSB3ZWIgVUkuPC9wPgorPHA+PGI+U3RvcHBpbmcgQXRsYXMgU2VydmVyPC9iPjwvcD4KKzxkaXYgY2xhc3M9InNvdXJjZSI+Cis8cHJlPgorYmluL2F0bGFzX3N0b3AucHkKKworPC9wcmU+PC9kaXY+PC9kaXY+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKworICAgIDxoci8+CisKKyAgICA8Zm9vdGVyPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IHNwYW4xMiI+Q29weXJpZ2h0ICZjb3B5OyAgICAgICAgICAgICAgICAgICAgMjAxNQorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIj5BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbjwvYT4uCisgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxwIGlkPSJwb3dlcmVkQnkiIGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvIiB0aXRsZT0iQnVpbHQgYnkgTWF2ZW4iIGNsYXNzPSJwb3dlcmVkQnkiPgorICAgICAgICA8aW1nIGNsYXNzPSJidWlsdEJ5IiBhbHQ9IkJ1aWx0IGJ5IE1hdmVuIiBzcmM9Ii4vaW1hZ2VzL2xvZ29zL21hdmVuLWZlYXRoZXIucG5nIiAvPgorICAgICAgPC9hPgorICAgICAgICAgICAgICA8L3A+CisgICAgICAgIAorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgIDwvZm9vdGVyPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL1F1aWNrU3RhcnQuaHRtbCBiLzAuNS4wLWluY3ViYXRpbmcvUXVpY2tTdGFydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZjY1ZmUKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL1F1aWNrU3RhcnQuaHRtbApAQCAtMCwwICsxLDI3NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8IS0tCisgfCBHZW5lcmF0ZWQgYnkgQXBhY2hlIE1hdmVuIERveGlhIGF0IDIwMTUtMDctMDkKKyB8IFJlbmRlcmVkIHVzaW5nIEFwYWNoZSBNYXZlbiBGbHVpZG8gU2tpbiAxLjMuMAorLS0+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgorICAgIDxtZXRhIG5hbWU9IkRhdGUtUmV2aXNpb24teXl5eW1tZGQiIGNvbnRlbnQ9IjIwMTUwNzA5IiAvPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtTGFuZ3VhZ2UiIGNvbnRlbnQ9ImVuIiAvPgorICAgIDx0aXRsZT5NZXRhZGF0YSBhbmQgR292ZXJuYW5jZSAtIFF1aWNrIFN0YXJ0IEd1aWRlPC90aXRsZT4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmNzcyIgLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3NpdGUuY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvcHJpbnQuY3NzIiBtZWRpYT0icHJpbnQiIC8+CisKKyAgICAgIAorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4vanMvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uanMiPjwvc2NyaXB0PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHsgJCggJy5jYXJvdXNlbCcgKS5jYXJvdXNlbCggeyBpbnRlcnZhbDogMzUwMCB9ICkgfSApOzwvc2NyaXB0PgorICAgICAgICAgIAorICAgICAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keSBjbGFzcz0idG9wQmFyRW5hYmxlZCI+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisKKyAgICA8ZGl2IGlkPSJ0b3BiYXIiIGNsYXNzPSJuYXZiYXIgbmF2YmFyLWZpeGVkLXRvcCAiPgorICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWlubmVyIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiIHN0eWxlPSJ3aWR0aDogNjglOyI+PGRpdiBjbGFzcz0ibmF2LWNvbGxhcHNlIj4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Im5hdiI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkF0bGFzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iQWJvdXQiPkFib3V0PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9Ildpa2kiPldpa2k8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iTmV3cyI+TmV3czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXQtd2lwLXVzLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci1hdGxhcy5naXQiICB0aXRsZT0iR2l0Ij5HaXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci9hdGxhcyIgIHRpdGxlPSJTdm4iPlN2bjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9BVExBUyIgIHRpdGxlPSJKaXJhIj5KaXJhPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTL1Bvd2VyZWRCeSIgIHRpdGxlPSJQb3dlcmVkIGJ5Ij5Qb3dlcmVkIGJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vYmxvZ3MuYXBhY2hlLm9yZy9hdGxhcy8iICB0aXRsZT0iQmxvZyI+QmxvZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlByb2plY3QgSW5mb3JtYXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0icHJvamVjdC1pbmZvLmh0bWwiICB0aXRsZT0iU3VtbWFyeSI+U3VtbWFyeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibWFpbC1saXN0cy5odG1sIiAgdGl0bGU9Ik1haWxpbmcgTGlzdHMiPk1haWxpbmcgTGlzdHM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93ZWJjaGF0LmZyZWVub2RlLm5ldD9jaGFubmVscz1hcGFjaGVhdGxhcyZ1aW89ZDQiICB0aXRsZT0iSVJDIj5JUkM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InRlYW0tbGlzdC5odG1sIiAgdGl0bGU9IlRlYW0iPlRlYW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imlzc3VlLXRyYWNraW5nLmh0bWwiICB0aXRsZT0iSXNzdWUgVHJhY2tpbmciPklzc3VlIFRyYWNraW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJzb3VyY2UtcmVwb3NpdG9yeS5odG1sIiAgdGl0bGU9IlNvdXJjZSBSZXBvc2l0b3J5Ij5Tb3VyY2UgUmVwb3NpdG9yeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibGljZW5zZS5odG1sIiAgdGl0bGU9IkxpY2Vuc2UiPkxpY2Vuc2U8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZWxlYXNlcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9IkNvbWluZyBzb29uIj5Db21pbmcgc29vbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkRvY3VtZW50YXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJjdXJyZW50Ij5jdXJyZW50PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UmVzb3VyY2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJRdWlja1N0YXJ0Lmh0bWwiICB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj5HZXR0aW5nIFN0YXJ0ZWQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkFyY2hpdGVjdHVyZS5odG1sIiAgdGl0bGU9IkFyY2hpdGVjdHVyZSI+QXJjaGl0ZWN0dXJlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJJbnN0YWxsYXRpb25TdGVwcy5odG1sIiAgdGl0bGU9Ikluc3RhbGxhdGlvbiI+SW5zdGFsbGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJUeXBlU3lzdGVtLmh0bWwiICB0aXRsZT0iVHlwZSBTeXN0ZW0iPlR5cGUgU3lzdGVtPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJDb25maWd1cmF0aW9uLmh0bWwiICB0aXRsZT0iQ29uZmlndXJhdGlvbiI+Q29uZmlndXJhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iU2VjdXJpdHkuaHRtbCIgIHRpdGxlPSJTZWN1cml0eSI+U2VjdXJpdHk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImFwaS9yZXN0Lmh0bWwiICB0aXRsZT0iUmVzdCBBUEkiPlJlc3QgQVBJPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QVNGIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL2hvdy1pdC13b3Jrcy5odG1sIiAgdGl0bGU9IkhvdyBBcGFjaGUgV29ya3MiPkhvdyBBcGFjaGUgV29ya3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uLyIgIHRpdGxlPSJGb3VuZGF0aW9uIj5Gb3VuZGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9zcG9uc29yc2hpcC5odG1sIiAgdGl0bGU9IlNwb25zb3JpbmcgQXBhY2hlIj5TcG9uc29yaW5nIEFwYWNoZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vdGhhbmtzLmh0bWwiICB0aXRsZT0iVGhhbmtzIj5UaGFua3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gaWQ9InNlYXJjaC1mb3JtIiBhY3Rpb249Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2giIG1ldGhvZD0iZ2V0IiAgY2xhc3M9Im5hdmJhci1zZWFyY2ggcHVsbC1yaWdodCIgPgorICAgIAorICA8aW5wdXQgdmFsdWU9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZyIgbmFtZT0ic2l0ZXNlYXJjaCIgdHlwZT0iaGlkZGVuIi8+CisgIDxpbnB1dCBjbGFzcz0ic2VhcmNoLXF1ZXJ5IiBuYW1lPSJxIiBpZD0icXVlcnkiIHR5cGU9InRleHQiIC8+Cis8L2Zvcm0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vY29vcC9jc2UvYnJhbmQ/Zm9ybT1zZWFyY2gtZm9ybSI+PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgPGlmcmFtZSBzcmM9Imh0dHA6Ly93d3cuZmFjZWJvb2suY29tL3BsdWdpbnMvbGlrZS5waHA/aHJlZj1odHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmcvYXRsYXMtZG9jcyZzZW5kPWZhbHNlJmxheW91dD1idXR0b25fY291bnQmc2hvdy1mYWNlcz1mYWxzZSZhY3Rpb249bGlrZSZjb2xvcnNjaGVtZT1kYXJrIgorICAgICAgICBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0iMCIKKyAgICAgICAgc3R5bGU9ImJvcmRlcjpub25lOyB3aWR0aDo4MHB4OyBoZWlnaHQ6MjBweDsgbWFyZ2luLXRvcDogMTBweDsiICBjbGFzcz0icHVsbC1yaWdodCIgPjwvaWZyYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9hcGlzLmdvb2dsZS5jb20vanMvcGx1c29uZS5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgPHVsIGNsYXNzPSJuYXYgcHVsbC1yaWdodCI+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CisgICAgCisgICAgPGRpdiBjbGFzcz0iZy1wbHVzb25lIiBkYXRhLWhyZWY9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzIiBkYXRhLXNpemU9Im1lZGl1bSIgIHdpZHRoPSI2MHB4IiBhbGlnbj0icmlnaHQiID48L2Rpdj4KKworICAgICAgICA8L2xpPjwvdWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAKKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICAKKyAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICA8ZGl2IGlkPSJiYW5uZXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLWxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLiIgaWQ9ImJhbm5lckxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hdGxhcy1sb2dvLnBuZyIgIGFsdD0iQXBhY2hlIEF0bGFzIiB3aWR0aD0iMjAwcHgiIGhlaWdodD0iNDVweCIvPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+ICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2luY3ViYXRvci5hcGFjaGUub3JnIiBpZD0iYmFubmVyUmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hcGFjaGUtaW5jdWJhdG9yLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgSW5jdWJhdG9yIi8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIj48aHIvPjwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImJyZWFkY3J1bWJzIj4KKyAgICAgICAgPHVsIGNsYXNzPSJicmVhZGNydW1iIj4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZyIgY2xhc3M9ImV4dGVybmFsTGluayIgdGl0bGU9IkFwYWNoZSI+CisgICAgICAgIEFwYWNoZTwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iQXRsYXMiPgorICAgICAgICBBdGxhczwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICA8bGkgY2xhc3M9IiI+UXVpY2sgU3RhcnQgR3VpZGU8L2xpPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICA8bGkgaWQ9InB1Ymxpc2hEYXRlIiBjbGFzcz0icHVsbC1yaWdodCI+TGFzdCBQdWJsaXNoZWQ6IDIwMTUtMDctMDk8L2xpPiA8bGkgY2xhc3M9ImRpdmlkZXIgcHVsbC1yaWdodCI+fDwvbGk+CisgICAgICAgICAgICAgIDxsaSBpZD0icHJvamVjdFZlcnNpb24iIGNsYXNzPSJwdWxsLXJpZ2h0Ij5WZXJzaW9uOiAwLjUtaW5jdWJhdGluZzwvbGk+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9kaXY+CisKKyAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxkaXYgaWQ9ImJvZHlDb2x1bW4iID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPlF1aWNrIFN0YXJ0IEd1aWRlPGEgbmFtZT0iUXVpY2tfU3RhcnRfR3VpZGUiPjwvYT48L2gyPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDM+SW50cm9kdWN0aW9uPGEgbmFtZT0iSW50cm9kdWN0aW9uIj48L2E+PC9oMz4KKzxwPlRoaXMgcXVpY2sgc3RhcnQgdXNlciBndWlkZSBpcyBhIHNpbXBsZSBjbGllbnQgdGhhdCBhZGRzIGEgZmV3IHNhbXBsZSB0eXBlIGRlZmluaXRpb25zIG1vZGVsZWQgYWZ0ZXIgdGhlIGV4YW1wbGUgYXMgc2hvd24gYmVsb3cuIEl0IGFsc28gYWRkcyBleGFtcGxlIGVudGl0aWVzIGFsb25nIHdpdGggdHJhaXRzIGFzIHNob3duIGluIHRoZSBpbnN0YW5jZSBncmFwaCBiZWxvdy48L3A+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoND5FeGFtcGxlIFR5cGUgRGVmaW5pdGlvbnM8YSBuYW1lPSJFeGFtcGxlX1R5cGVfRGVmaW5pdGlvbnMiPjwvYT48L2g0PgorPHA+PGltZyBzcmM9Imd1aWRlLWNsYXNzLWRpYWdyYW0ucG5nIiBhbHQ9IiIgLz48L3A+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoND5FeGFtcGxlIEluc3RhbmNlIEdyYXBoPGEgbmFtZT0iRXhhbXBsZV9JbnN0YW5jZV9HcmFwaCI+PC9hPjwvaDQ+Cis8cD48aW1nIHNyYz0iZ3VpZGUtaW5zdGFuY2UtZ3JhcGgucG5nIiBhbHQ9IiIgLz48L3A+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5SdW5uaW5nIHRoZSBleGFtcGxlPGEgbmFtZT0iUnVubmluZ190aGVfZXhhbXBsZSI+PC9hPjwvaDM+Cis8cD5UaGlzIHdpbGwgYWRkIHNhbXBsZSB0eXBlcyBhbmQgaW5zdGFuY2VzIGFsb25nIHdpdGggdHJhaXRzIGFzIHNob3duIGluIHRoZSBpbnN0YW5jZSBncmFwaCBhYm92ZS48L3A+Cis8cD48L3A+Cis8dWw+Cis8bGk+YmluL3F1aWNrLXN0YXJ0LnNoPC9saT48L3VsPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDM+RGFzaGJvYXJkPGEgbmFtZT0iRGFzaGJvYXJkIj48L2E+PC9oMz4KKzxwPkEgc2ltcGxlIGRhc2hib2FyZCB3aXRoIHNlYXJjaCBpcyBhdmFpbGFibGUuPC9wPgorPHA+PC9wPgorPHVsPgorPGxpPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6MjEwMDAvZGFzaGJvYXJkIj5odHRwOi8vbG9jYWxob3N0OjIxMDAwL2Rhc2hib2FyZDwvYT48L2xpPjwvdWw+PC9kaXY+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKworICAgIDxoci8+CisKKyAgICA8Zm9vdGVyPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IHNwYW4xMiI+Q29weXJpZ2h0ICZjb3B5OyAgICAgICAgICAgICAgICAgICAgMjAxNQorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIj5BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbjwvYT4uCisgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxwIGlkPSJwb3dlcmVkQnkiIGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvIiB0aXRsZT0iQnVpbHQgYnkgTWF2ZW4iIGNsYXNzPSJwb3dlcmVkQnkiPgorICAgICAgICA8aW1nIGNsYXNzPSJidWlsdEJ5IiBhbHQ9IkJ1aWx0IGJ5IE1hdmVuIiBzcmM9Ii4vaW1hZ2VzL2xvZ29zL21hdmVuLWZlYXRoZXIucG5nIiAvPgorICAgICAgPC9hPgorICAgICAgICAgICAgICA8L3A+CisgICAgICAgIAorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgIDwvZm9vdGVyPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL1JlcG9zaXRvcnkuaHRtbCBiLzAuNS4wLWluY3ViYXRpbmcvUmVwb3NpdG9yeS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxYTBkZGUKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL1JlcG9zaXRvcnkuaHRtbApAQCAtMCwwICsxLDI1NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8IS0tCisgfCBHZW5lcmF0ZWQgYnkgQXBhY2hlIE1hdmVuIERveGlhIGF0IDIwMTUtMDctMDkKKyB8IFJlbmRlcmVkIHVzaW5nIEFwYWNoZSBNYXZlbiBGbHVpZG8gU2tpbiAxLjMuMAorLS0+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgorICAgIDxtZXRhIG5hbWU9IkRhdGUtUmV2aXNpb24teXl5eW1tZGQiIGNvbnRlbnQ9IjIwMTUwNzA5IiAvPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtTGFuZ3VhZ2UiIGNvbnRlbnQ9ImVuIiAvPgorICAgIDx0aXRsZT5NZXRhZGF0YSBhbmQgR292ZXJuYW5jZSAtIFJlcG9zaXRvcnk8L3RpdGxlPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3Mvc2l0ZS5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9wcmludC5jc3MiIG1lZGlhPSJwcmludCIgLz4KKworICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9qcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIAorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkgeyAkKCAnLmNhcm91c2VsJyApLmNhcm91c2VsKCB7IGludGVydmFsOiAzNTAwIH0gKSB9ICk7PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ0b3BCYXJFbmFibGVkIj4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKworICAgIDxkaXYgaWQ9InRvcGJhciIgY2xhc3M9Im5hdmJhciBuYXZiYXItZml4ZWQtdG9wICI+CisgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItaW5uZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciIgc3R5bGU9IndpZHRoOiA2OCU7Ij48ZGl2IGNsYXNzPSJuYXYtY29sbGFwc2UiPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QXRsYXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJBYm91dCI+QWJvdXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iV2lraSI+V2lraTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJOZXdzIj5OZXdzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2dpdC13aXAtdXMuYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yLWF0bGFzLmdpdCIgIHRpdGxlPSJHaXQiPkdpdDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yL2F0bGFzIiAgdGl0bGU9IlN2biI+U3ZuPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0FUTEFTIiAgdGl0bGU9IkppcmEiPkppcmE8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMvUG93ZXJlZEJ5IiAgdGl0bGU9IlBvd2VyZWQgYnkiPlBvd2VyZWQgYnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9ibG9ncy5hcGFjaGUub3JnL2F0bGFzLyIgIHRpdGxlPSJCbG9nIj5CbG9nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UHJvamVjdCBJbmZvcm1hdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJwcm9qZWN0LWluZm8uaHRtbCIgIHRpdGxlPSJTdW1tYXJ5Ij5TdW1tYXJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJtYWlsLWxpc3RzLmh0bWwiICB0aXRsZT0iTWFpbGluZyBMaXN0cyI+TWFpbGluZyBMaXN0czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3dlYmNoYXQuZnJlZW5vZGUubmV0P2NoYW5uZWxzPWFwYWNoZWF0bGFzJnVpbz1kNCIgIHRpdGxlPSJJUkMiPklSQzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0idGVhbS1saXN0Lmh0bWwiICB0aXRsZT0iVGVhbSI+VGVhbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaXNzdWUtdHJhY2tpbmcuaHRtbCIgIHRpdGxlPSJJc3N1ZSBUcmFja2luZyI+SXNzdWUgVHJhY2tpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InNvdXJjZS1yZXBvc2l0b3J5Lmh0bWwiICB0aXRsZT0iU291cmNlIFJlcG9zaXRvcnkiPlNvdXJjZSBSZXBvc2l0b3J5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJsaWNlbnNlLmh0bWwiICB0aXRsZT0iTGljZW5zZSI+TGljZW5zZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlbGVhc2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iQ29taW5nIHNvb24iPkNvbWluZyBzb29uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+RG9jdW1lbnRhdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9ImN1cnJlbnQiPmN1cnJlbnQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZXNvdXJjZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJPdmVydmlldyI+T3ZlcnZpZXc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlF1aWNrU3RhcnQuaHRtbCIgIHRpdGxlPSJHZXR0aW5nIFN0YXJ0ZWQiPkdldHRpbmcgU3RhcnRlZDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQXJjaGl0ZWN0dXJlLmh0bWwiICB0aXRsZT0iQXJjaGl0ZWN0dXJlIj5BcmNoaXRlY3R1cmU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Ikluc3RhbGxhdGlvblN0ZXBzLmh0bWwiICB0aXRsZT0iSW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlR5cGVTeXN0ZW0uaHRtbCIgIHRpdGxlPSJUeXBlIFN5c3RlbSI+VHlwZSBTeXN0ZW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkNvbmZpZ3VyYXRpb24uaHRtbCIgIHRpdGxlPSJDb25maWd1cmF0aW9uIj5Db25maWd1cmF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJTZWN1cml0eS5odG1sIiAgdGl0bGU9IlNlY3VyaXR5Ij5TZWN1cml0eTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iYXBpL3Jlc3QuaHRtbCIgIHRpdGxlPSJSZXN0IEFQSSI+UmVzdCBBUEk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BU0YgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vaG93LWl0LXdvcmtzLmh0bWwiICB0aXRsZT0iSG93IEFwYWNoZSBXb3JrcyI+SG93IEFwYWNoZSBXb3JrczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vIiAgdGl0bGU9IkZvdW5kYXRpb24iPkZvdW5kYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3Nwb25zb3JzaGlwLmh0bWwiICB0aXRsZT0iU3BvbnNvcmluZyBBcGFjaGUiPlNwb25zb3JpbmcgQXBhY2hlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi90aGFua3MuaHRtbCIgIHRpdGxlPSJUaGFua3MiPlRoYW5rczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBpZD0ic2VhcmNoLWZvcm0iIGFjdGlvbj0iaHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaCIgbWV0aG9kPSJnZXQiICBjbGFzcz0ibmF2YmFyLXNlYXJjaCBwdWxsLXJpZ2h0IiA+CisgICAgCisgIDxpbnB1dCB2YWx1ZT0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnIiBuYW1lPSJzaXRlc2VhcmNoIiB0eXBlPSJoaWRkZW4iLz4KKyAgPGlucHV0IGNsYXNzPSJzZWFyY2gtcXVlcnkiIG5hbWU9InEiIGlkPSJxdWVyeSIgdHlwZT0idGV4dCIgLz4KKzwvZm9ybT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9jb29wL2NzZS9icmFuZD9mb3JtPXNlYXJjaC1mb3JtIj48L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICA8aWZyYW1lIHNyYz0iaHR0cDovL3d3dy5mYWNlYm9vay5jb20vcGx1Z2lucy9saWtlLnBocD9ocmVmPWh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzJnNlbmQ9ZmFsc2UmbGF5b3V0PWJ1dHRvbl9jb3VudCZzaG93LWZhY2VzPWZhbHNlJmFjdGlvbj1saWtlJmNvbG9yc2NoZW1lPWRhcmsiCisgICAgICAgIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPSIwIgorICAgICAgICBzdHlsZT0iYm9yZGVyOm5vbmU7IHdpZHRoOjgwcHg7IGhlaWdodDoyMHB4OyBtYXJnaW4tdG9wOiAxMHB4OyIgIGNsYXNzPSJwdWxsLXJpZ2h0IiA+PC9pZnJhbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2FwaXMuZ29vZ2xlLmNvbS9qcy9wbHVzb25lLmpzIj48L3NjcmlwdD4KKworICAgICAgICA8dWwgY2xhc3M9Im5hdiBwdWxsLXJpZ2h0Ij48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij4KKyAgICAKKyAgICA8ZGl2IGNsYXNzPSJnLXBsdXNvbmUiIGRhdGEtaHJlZj0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3MiIGRhdGEtc2l6ZT0ibWVkaXVtIiAgd2lkdGg9IjYwcHgiIGFsaWduPSJyaWdodCIgPjwvZGl2PgorCisgICAgICAgIDwvbGk+PC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIAorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIAorICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgIDxkaXYgaWQ9ImJhbm5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtbGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uIiBpZD0iYmFubmVyTGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2F0bGFzLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgQXRsYXMiIHdpZHRoPSIyMDBweCIgaGVpZ2h0PSI0NXB4Ii8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4gICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vaW5jdWJhdG9yLmFwYWNoZS5vcmciIGlkPSJiYW5uZXJSaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2FwYWNoZS1pbmN1YmF0b3ItbG9nby5wbmciICBhbHQ9IkFwYWNoZSBJbmN1YmF0b3IiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiPjxoci8+PC9kaXY+CisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0iYnJlYWRjcnVtYnMiPgorICAgICAgICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiPgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iQXBhY2hlIj4KKyAgICAgICAgQXBhY2hlPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJBdGxhcyI+CisgICAgICAgIEF0bGFzPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0iIj5SZXBvc2l0b3J5PC9saT4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgPGxpIGlkPSJwdWJsaXNoRGF0ZSIgY2xhc3M9InB1bGwtcmlnaHQiPkxhc3QgUHVibGlzaGVkOiAyMDE1LTA3LTA5PC9saT4gPGxpIGNsYXNzPSJkaXZpZGVyIHB1bGwtcmlnaHQiPnw8L2xpPgorICAgICAgICAgICAgICA8bGkgaWQ9InByb2plY3RWZXJzaW9uIiBjbGFzcz0icHVsbC1yaWdodCI+VmVyc2lvbjogMC41LWluY3ViYXRpbmc8L2xpPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvZGl2PgorCisgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICA8ZGl2IGlkPSJib2R5Q29sdW1uIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj5SZXBvc2l0b3J5PGEgbmFtZT0iUmVwb3NpdG9yeSI+PC9hPjwvaDI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5JbnRyb2R1Y3Rpb248YSBuYW1lPSJJbnRyb2R1Y3Rpb24iPjwvYT48L2gzPjwvZGl2PgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisKKyAgICA8aHIvPgorCisgICAgPGZvb3Rlcj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyBzcGFuMTIiPkNvcHlyaWdodCAmY29weTsgICAgICAgICAgICAgICAgICAgIDIwMTUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZyI+QXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb248L2E+LgorICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8cCBpZD0icG93ZXJlZEJ5IiBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnLyIgdGl0bGU9IkJ1aWx0IGJ5IE1hdmVuIiBjbGFzcz0icG93ZXJlZEJ5Ij4KKyAgICAgICAgPGltZyBjbGFzcz0iYnVpbHRCeSIgYWx0PSJCdWlsdCBieSBNYXZlbiIgc3JjPSIuL2ltYWdlcy9sb2dvcy9tYXZlbi1mZWF0aGVyLnBuZyIgLz4KKyAgICAgIDwvYT4KKyAgICAgICAgICAgICAgPC9wPgorICAgICAgICAKKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICA8L2Zvb3Rlcj4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9TZWFyY2guaHRtbCBiLzAuNS4wLWluY3ViYXRpbmcvU2VhcmNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhkOTM2ZgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvU2VhcmNoLmh0bWwKQEAgLTAsMCArMSwzNDMgQEAKKzwhRE9DVFlQRSBodG1sPgorPCEtLQorIHwgR2VuZXJhdGVkIGJ5IEFwYWNoZSBNYXZlbiBEb3hpYSBhdCAyMDE1LTA3LTA5CisgfCBSZW5kZXJlZCB1c2luZyBBcGFjaGUgTWF2ZW4gRmx1aWRvIFNraW4gMS4zLjAKKy0tPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgorICA8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCIgLz4KKyAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCIgLz4KKyAgICA8bWV0YSBuYW1lPSJEYXRlLVJldmlzaW9uLXl5eXltbWRkIiBjb250ZW50PSIyMDE1MDcwOSIgLz4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbiIgLz4KKyAgICA8dGl0bGU+TWV0YWRhdGEgYW5kIEdvdmVybmFuY2UgLSBTZWFyY2g8L3RpdGxlPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3Mvc2l0ZS5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9wcmludC5jc3MiIG1lZGlhPSJwcmludCIgLz4KKworICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9qcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIAorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkgeyAkKCAnLmNhcm91c2VsJyApLmNhcm91c2VsKCB7IGludGVydmFsOiAzNTAwIH0gKSB9ICk7PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ0b3BCYXJFbmFibGVkIj4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKworICAgIDxkaXYgaWQ9InRvcGJhciIgY2xhc3M9Im5hdmJhciBuYXZiYXItZml4ZWQtdG9wICI+CisgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItaW5uZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciIgc3R5bGU9IndpZHRoOiA2OCU7Ij48ZGl2IGNsYXNzPSJuYXYtY29sbGFwc2UiPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QXRsYXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJBYm91dCI+QWJvdXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iV2lraSI+V2lraTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJOZXdzIj5OZXdzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2dpdC13aXAtdXMuYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yLWF0bGFzLmdpdCIgIHRpdGxlPSJHaXQiPkdpdDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yL2F0bGFzIiAgdGl0bGU9IlN2biI+U3ZuPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0FUTEFTIiAgdGl0bGU9IkppcmEiPkppcmE8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMvUG93ZXJlZEJ5IiAgdGl0bGU9IlBvd2VyZWQgYnkiPlBvd2VyZWQgYnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9ibG9ncy5hcGFjaGUub3JnL2F0bGFzLyIgIHRpdGxlPSJCbG9nIj5CbG9nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UHJvamVjdCBJbmZvcm1hdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJwcm9qZWN0LWluZm8uaHRtbCIgIHRpdGxlPSJTdW1tYXJ5Ij5TdW1tYXJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJtYWlsLWxpc3RzLmh0bWwiICB0aXRsZT0iTWFpbGluZyBMaXN0cyI+TWFpbGluZyBMaXN0czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3dlYmNoYXQuZnJlZW5vZGUubmV0P2NoYW5uZWxzPWFwYWNoZWF0bGFzJnVpbz1kNCIgIHRpdGxlPSJJUkMiPklSQzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0idGVhbS1saXN0Lmh0bWwiICB0aXRsZT0iVGVhbSI+VGVhbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaXNzdWUtdHJhY2tpbmcuaHRtbCIgIHRpdGxlPSJJc3N1ZSBUcmFja2luZyI+SXNzdWUgVHJhY2tpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InNvdXJjZS1yZXBvc2l0b3J5Lmh0bWwiICB0aXRsZT0iU291cmNlIFJlcG9zaXRvcnkiPlNvdXJjZSBSZXBvc2l0b3J5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJsaWNlbnNlLmh0bWwiICB0aXRsZT0iTGljZW5zZSI+TGljZW5zZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlbGVhc2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iQ29taW5nIHNvb24iPkNvbWluZyBzb29uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+RG9jdW1lbnRhdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9ImN1cnJlbnQiPmN1cnJlbnQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZXNvdXJjZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJPdmVydmlldyI+T3ZlcnZpZXc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlF1aWNrU3RhcnQuaHRtbCIgIHRpdGxlPSJHZXR0aW5nIFN0YXJ0ZWQiPkdldHRpbmcgU3RhcnRlZDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQXJjaGl0ZWN0dXJlLmh0bWwiICB0aXRsZT0iQXJjaGl0ZWN0dXJlIj5BcmNoaXRlY3R1cmU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Ikluc3RhbGxhdGlvblN0ZXBzLmh0bWwiICB0aXRsZT0iSW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlR5cGVTeXN0ZW0uaHRtbCIgIHRpdGxlPSJUeXBlIFN5c3RlbSI+VHlwZSBTeXN0ZW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkNvbmZpZ3VyYXRpb24uaHRtbCIgIHRpdGxlPSJDb25maWd1cmF0aW9uIj5Db25maWd1cmF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJTZWN1cml0eS5odG1sIiAgdGl0bGU9IlNlY3VyaXR5Ij5TZWN1cml0eTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iYXBpL3Jlc3QuaHRtbCIgIHRpdGxlPSJSZXN0IEFQSSI+UmVzdCBBUEk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BU0YgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vaG93LWl0LXdvcmtzLmh0bWwiICB0aXRsZT0iSG93IEFwYWNoZSBXb3JrcyI+SG93IEFwYWNoZSBXb3JrczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vIiAgdGl0bGU9IkZvdW5kYXRpb24iPkZvdW5kYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3Nwb25zb3JzaGlwLmh0bWwiICB0aXRsZT0iU3BvbnNvcmluZyBBcGFjaGUiPlNwb25zb3JpbmcgQXBhY2hlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi90aGFua3MuaHRtbCIgIHRpdGxlPSJUaGFua3MiPlRoYW5rczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBpZD0ic2VhcmNoLWZvcm0iIGFjdGlvbj0iaHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaCIgbWV0aG9kPSJnZXQiICBjbGFzcz0ibmF2YmFyLXNlYXJjaCBwdWxsLXJpZ2h0IiA+CisgICAgCisgIDxpbnB1dCB2YWx1ZT0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnIiBuYW1lPSJzaXRlc2VhcmNoIiB0eXBlPSJoaWRkZW4iLz4KKyAgPGlucHV0IGNsYXNzPSJzZWFyY2gtcXVlcnkiIG5hbWU9InEiIGlkPSJxdWVyeSIgdHlwZT0idGV4dCIgLz4KKzwvZm9ybT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9jb29wL2NzZS9icmFuZD9mb3JtPXNlYXJjaC1mb3JtIj48L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICA8aWZyYW1lIHNyYz0iaHR0cDovL3d3dy5mYWNlYm9vay5jb20vcGx1Z2lucy9saWtlLnBocD9ocmVmPWh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzJnNlbmQ9ZmFsc2UmbGF5b3V0PWJ1dHRvbl9jb3VudCZzaG93LWZhY2VzPWZhbHNlJmFjdGlvbj1saWtlJmNvbG9yc2NoZW1lPWRhcmsiCisgICAgICAgIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPSIwIgorICAgICAgICBzdHlsZT0iYm9yZGVyOm5vbmU7IHdpZHRoOjgwcHg7IGhlaWdodDoyMHB4OyBtYXJnaW4tdG9wOiAxMHB4OyIgIGNsYXNzPSJwdWxsLXJpZ2h0IiA+PC9pZnJhbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2FwaXMuZ29vZ2xlLmNvbS9qcy9wbHVzb25lLmpzIj48L3NjcmlwdD4KKworICAgICAgICA8dWwgY2xhc3M9Im5hdiBwdWxsLXJpZ2h0Ij48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij4KKyAgICAKKyAgICA8ZGl2IGNsYXNzPSJnLXBsdXNvbmUiIGRhdGEtaHJlZj0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3MiIGRhdGEtc2l6ZT0ibWVkaXVtIiAgd2lkdGg9IjYwcHgiIGFsaWduPSJyaWdodCIgPjwvZGl2PgorCisgICAgICAgIDwvbGk+PC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIAorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIAorICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgIDxkaXYgaWQ9ImJhbm5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtbGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uIiBpZD0iYmFubmVyTGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2F0bGFzLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgQXRsYXMiIHdpZHRoPSIyMDBweCIgaGVpZ2h0PSI0NXB4Ii8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4gICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vaW5jdWJhdG9yLmFwYWNoZS5vcmciIGlkPSJiYW5uZXJSaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2FwYWNoZS1pbmN1YmF0b3ItbG9nby5wbmciICBhbHQ9IkFwYWNoZSBJbmN1YmF0b3IiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiPjxoci8+PC9kaXY+CisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0iYnJlYWRjcnVtYnMiPgorICAgICAgICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiPgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iQXBhY2hlIj4KKyAgICAgICAgQXBhY2hlPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJBdGxhcyI+CisgICAgICAgIEF0bGFzPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0iIj5TZWFyY2g8L2xpPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICA8bGkgaWQ9InB1Ymxpc2hEYXRlIiBjbGFzcz0icHVsbC1yaWdodCI+TGFzdCBQdWJsaXNoZWQ6IDIwMTUtMDctMDk8L2xpPiA8bGkgY2xhc3M9ImRpdmlkZXIgcHVsbC1yaWdodCI+fDwvbGk+CisgICAgICAgICAgICAgIDxsaSBpZD0icHJvamVjdFZlcnNpb24iIGNsYXNzPSJwdWxsLXJpZ2h0Ij5WZXJzaW9uOiAwLjUtaW5jdWJhdGluZzwvbGk+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9kaXY+CisKKyAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxkaXYgaWQ9ImJvZHlDb2x1bW4iID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPlNlYXJjaDxhIG5hbWU9IlNlYXJjaCI+PC9hPjwvaDI+Cis8cD5BdGxhcyBleHBvc2VzIHNlYXJjaCBvdmVyIHRoZSBtZXRhZGF0YSBpbiB0d28gd2F5czo8L3A+Cis8dWw+Cis8bGk+U2VhcmNoIHVzaW5nIERTTDwvbGk+Cis8bGk+RnVsbC10ZXh0IHNlYXJjaDwvbGk+PC91bD48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzPlNlYXJjaCBEU0wgR3JhbW1hcjxhIG5hbWU9IlNlYXJjaF9EU0xfR3JhbW1hciI+PC9hPjwvaDM+Cis8cD5UaGUgRFNMIGV4cG9zZXMgYW4gU1FMIGxpa2UgcXVlcnkgbGFuZ3VhZ2UgZm9yIHNlYXJjaGluZyB0aGUgbWV0YWRhdGEgYmFzZWQgb24gdGhlIHR5cGUgc3lzdGVtLiBUaGUgZ3JhbW1hciBmb3IgdGhlIERTTCBpcyBiZWxvdy48L3A+Cis8ZGl2IGNsYXNzPSJzb3VyY2UiPgorPHByZT4KK3F1ZXJ5V2l0aFBhdGg6IHF1ZXJ5IH4gb3B0KFdJVEhQQVRIKQorCitxdWVyeTogcmVwMXNlcChzaW5nbGVRdWVyeSwgb3B0KENPTU1BKSkKKworc2luZ2xlUXVlcnk6IHNpbmdsZVFyeVNyYyB+IG9wdChsb29wRXhwcmVzc2lvbikgfiBvcHQoc2VsZWN0Q2xhdXNlKQorCitzaW5nbGVRcnlTcmMgPSBGUk9NIH4gZnJvbVNyYyB+IG9wdChXSEVSRSkgfiBvcHQoZXhwciBePyBub3RJZEV4cHJlc3Npb24pIHwKKyAgICAgICAgV0hFUkUgfiAoZXhwciBePyBub3RJZEV4cHJlc3Npb24pIHwKKyAgICAgICAgZXhwciBePyBub3RJZEV4cHJlc3Npb24gfAorICAgICAgICBmcm9tU3JjIH4gb3B0KFdIRVJFKSB+IG9wdChleHByIF4/IG5vdElkRXhwcmVzc2lvbikKKworZnJvbVNyYzogaWRlbnRpZmllciB+IEFTIH4gYWxpYXMgfCBpZGVudGlmaWVyCisKK2xvb3BFeHByZXNzaW9uOiBMT09QIH4gKExQQVJFTiB+Jmd0OyBxdWVyeSAmbHQ7fiBSUEFSRU4pIH4gb3B0KGludENvbnN0YW50ICZsdDt+IFRJTUVTKSB+IG9wdChBUyB+Jmd0OyBhbGlhcykKKworc2VsZWN0Q2xhdXNlOiBTRUxFQ1QgfiByZXAxc2VwKHNlbGVjdEV4cHJlc3Npb24sIENPTU1BKQorCitzZWxlY3RFeHByZXNzaW9uOiAgZXhwciB+IG9wdChBUyB+Jmd0OyBhbGlhcykKKworZXhwcjogIGNvbXBFIH4gb3B0KHJlcChleHByUmlnaHQpKQorCitleHByUmlnaHQ6IChBTkQgfCBPUikgfiBjb21wRQorCitjb21wRToKKyAgICAgICAgYXJpdGhFIH4gKExUIHwgTFRFIHwgRVEgfCBORVEgfCBHVCB8IEdURSkgfiBhcml0aEUgfAorICAgICAgICAgICAgYXJpdGhFIH4gKElTQSB8IElTKSB+IGlkZW50ICB8CisgICAgICAgICAgICBhcml0aEUgfiBIQVMgfiBpZGVudCAgfAorICAgICAgICAgICAgYXJpdGhFCisKK2FyaXRoRTogbXVsdGlFIH4gb3B0KHJlcChhcml0aEVSaWdodCkpCisKK2FyaXRoRVJpZ2h0OiAoUExVUyB8IE1JTlVTKSB+IG11bHRpRQorCittdWx0aUU6IGF0b21FIH4gb3B0KHJlcChtdWx0aUVSaWdodCkpCisKK211bHRpRVJpZ2h0OiAoU1RBUiB8IERJVikgfiBhdG9tRQorCithdG9tRTogbGl0ZXJhbCB8IGlkZW50aWZpZXIgfCBMUEFSRU4gfiZndDsgZXhwciAmbHQ7fiBSUEFSRU4KKworaWRlbnRpZmllcjogcmVwMXNlcChpZGVudCwgRE9UKQorCithbGlhczogaWRlbnQgfCBzdHJpbmdMaXQKKworbGl0ZXJhbDogYm9vbGVhbkNvbnN0YW50IHwKKyAgICAgICAgaW50Q29uc3RhbnQgIHwKKyAgICAgICAgbG9uZ0NvbnN0YW50ICB8CisgICAgICAgIGZsb2F0Q29uc3RhbnQgfAorICAgICAgICBkb3VibGVDb25zdGFudCAgfAorICAgICAgICBzdHJpbmdMaXQKKworPC9wcmU+PC9kaXY+Cis8cD5HcmFtbWFyIGxhbmd1YWdlOiB7bm9mb3JtYXR9IG9wdChhKSAgICAgPSZndDsgYSBpcyBvcHRpb25hbCB+ICAgICAgICAgICAgPSZndDsgYSBjb21iaW5hdG9yLiAnYSB+IGInIG1lYW5zIGEgZm9sbG93ZWQgYnkgYiByZXAgICAgICAgICA9Jmd0OyB6ZXJvIG9yIG1vcmUgcmVwMXNlcCA9Jmd0OyBvbmUgb3IgbW9yZSwgc2VwYXJhdGVkIGJ5IHNlY29uZCBhcmcuIHtub2Zvcm1hdH08L3A+Cis8cD5MYW5ndWFnZSBOb3Rlczo8L3A+Cis8dWw+Cis8bGk+QSA8Yj48YSBocmVmPSIuL1NpbmdsZVF1ZXJ5Lmh0bWwiPlNpbmdsZVF1ZXJ5PC9hPjwvYj4gZXhwcmVzc2lvbiBjYW4gYmUgdXNlZCB0byBzZWFyY2ggZm9yIGVudGl0aWVzIG9mIGEgPGk+VHJhaXQ8L2k+IG9yIDxpPkNsYXNzPC9pPi48L2xpPjwvdWw+RW50aXRpZXMgY2FuIGJlIGZpbHRlcmVkIGJhc2VkIG9uIGEgJ1doZXJlIENsYXVzZScgYW5kIEVudGl0eSBBdHRyaWJ1dGVzIGNhbiBiZSByZXRyaWV2ZWQgYmFzZWQgb24gYSAnU2VsZWN0IENsYXVzZScuCis8dWw+Cis8bGk+QW4gRW50aXR5IEdyYXBoIGNhbiBiZSB0cmF2ZXJzZWQvam9pbmVkIGJ5IGNvbWJpbmluZyBvbmUgb3IgbW9yZSA8YSBocmVmPSIuL1NpbmdsZVF1ZXJpZXMuaHRtbCI+U2luZ2xlUXVlcmllczwvYT4uPC9saT4KKzxsaT5BbiBhdHRlbXB0IGlzIG1hZGUgdG8gbWFrZSB0aGUgZXhwcmVzc2lvbnMgbG9vayBTUUwgbGlrZSBieSBhY2NlcHRpbmcga2V5d29yZHMgJnF1b3Q7U0VMRUNUJnF1b3Q7LDwvbGk+PC91bD4mcXVvdDtGUk9NJnF1b3Q7LCBhbmQgJnF1b3Q7V0hFUkUmcXVvdDs7IGJ1dCB0aGVzZSBhcmUgb3B0aW9uYWwgYW5kIHVzZXJzIGNhbiBzaW1wbHkgdGhpbmsgaW4gdGVybXMgb2YgRW50aXR5IEdyYXBoIFRyYXZlcnNhbHMuCis8dWw+Cis8bGk+VGhlIHRyYW5zaXRpdmUgY2xvc3VyZSBvZiBhbiBFbnRpdHkgcmVsYXRpb25zaGlwIGNhbiBiZSBleHByZXNzZWQgdmlhIHRoZSA8aT5Mb29wPC9pPiBleHByZXNzaW9uLiBBPC9saT48L3VsPjxpPkxvb3A8L2k+IGV4cHJlc3Npb24gY2FuIGJlIGFueSB0cmF2ZXJzYWwgKHJlY3Vyc2l2ZWx5IGEgcXVlcnkpIHRoYXQgcmVwcmVzZW50cyBhIDxpPlBhdGg8L2k+IHRoYXQgZW5kcyBpbiBhbiBFbnRpdHkgb2YgdGhlIHNhbWUgPGk+VHlwZTwvaT4gYXMgdGhlIHN0YXJ0aW5nIEVudGl0eS4KKzx1bD4KKzxsaT5UaGUgPGk+PGEgaHJlZj0iLi9XaXRoUGF0aC5odG1sIj5XaXRoUGF0aDwvYT48L2k+IGNsYXVzZSBjYW4gYmUgdXNlZCB3aXRoIHRyYW5zaXRpdmUgY2xvc3VyZSBxdWVyaWVzIHRvIHJldHJpZXZlIHRoZSBQYXRoIHRoYXQ8L2xpPjwvdWw+Y29ubmVjdHMgdGhlIHR3byByZWxhdGVkIEVudGl0aWVzLiAoV2UgYWxzbyBwcm92aWRlIGEgaGlnaGVyIGxldmVsIGludGVyZmFjZSBmb3IgQ2xvc3VyZSBRdWVyaWVzIHNlZSBzY2FsYWRvYyBmb3IgJ29yZy5hcGFjaGUubWV0YWRhdGEucXVlcnkuQ2xvc3VyZVF1ZXJ5JykKKzx1bD4KKzxsaT5UaGVyZSBhcmUgY291cGxlIG9mIFByZWRpY2F0ZSBmdW5jdGlvbnMgZGlmZmVyZW50IGZyb20gU1FMOgorPHVsPgorPGxpPjxpPmlzPC9pPiBvciA8aT5pc2E8L2k+Y2FuIGJlIHVzZWQgdG8gZmlsdGVyIEVudGl0aWVzIHRoYXQgaGF2ZSBhIHBhcnRpY3VsYXIgVHJhaXQuPC9saT4KKzxsaT48aT5oYXM8L2k+IGNhbiBiZSB1c2VkIHRvIGZpbHRlciBFbnRpdGllcyB0aGF0IGhhdmUgYSB2YWx1ZSBmb3IgYSBwYXJ0aWN1bGFyIEF0dHJpYnV0ZS48L2xpPjwvdWw+PC9saT48L3VsPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDQ+RFNMIEV4YW1wbGVzPGEgbmFtZT0iRFNMX0V4YW1wbGVzIj48L2E+PC9oND4KKzxwPjwvcD4KKzx1bD4KKzxsaT5mcm9tIERCPC9saT4KKzxsaT5EQiB3aGVyZSBuYW1lPSZxdW90O1JlcG9ydGluZyZxdW90OyBzZWxlY3QgbmFtZSwgb3duZXI8L2xpPgorPGxpPkRCIGhhcyBuYW1lPC9saT4KKzxsaT5EQiBpcyA8YSBocmVmPSIuL0pkYmNBY2Nlc3MuaHRtbCI+SmRiY0FjY2VzczwvYT48L2xpPgorPGxpPkNvbHVtbiB3aGVyZSBDb2x1bW4gaXNhIFBJSTwvbGk+Cis8bGk+VGFibGUgd2hlcmUgbmFtZT0mcXVvdDtzYWxlc19mYWN0JnF1b3Q7LCBjb2x1bW5zPC9saT4KKzxsaT5UYWJsZSB3aGVyZSBuYW1lPSZxdW90O3NhbGVzX2ZhY3QmcXVvdDssIGNvbHVtbnMgYXMgY29sdW1uIHNlbGVjdCBjb2x1bW4ubmFtZSwgY29sdW1uLmRhdGFUeXBlLCBjb2x1bW4uY29tbWVudDwvbGk+PC91bD48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzPkZ1bGwtdGV4dCBTZWFyY2g8YSBuYW1lPSJGdWxsLXRleHRfU2VhcmNoIj48L2E+PC9oMz4KKzxwPkF0bGFzIGFsc28gZXhwb3NlcyBhIGx1Y2VuZSBzdHlsZSBmdWxsLXRleHQgc2VhcmNoIGNhcGFiaWxpdHkuPC9wPjwvZGl2PgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisKKyAgICA8aHIvPgorCisgICAgPGZvb3Rlcj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyBzcGFuMTIiPkNvcHlyaWdodCAmY29weTsgICAgICAgICAgICAgICAgICAgIDIwMTUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZyI+QXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb248L2E+LgorICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8cCBpZD0icG93ZXJlZEJ5IiBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnLyIgdGl0bGU9IkJ1aWx0IGJ5IE1hdmVuIiBjbGFzcz0icG93ZXJlZEJ5Ij4KKyAgICAgICAgPGltZyBjbGFzcz0iYnVpbHRCeSIgYWx0PSJCdWlsdCBieSBNYXZlbiIgc3JjPSIuL2ltYWdlcy9sb2dvcy9tYXZlbi1mZWF0aGVyLnBuZyIgLz4KKyAgICAgIDwvYT4KKyAgICAgICAgICAgICAgPC9wPgorICAgICAgICAKKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICA8L2Zvb3Rlcj4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9TZWN1cml0eS5odG1sIGIvMC41LjAtaW5jdWJhdGluZy9TZWN1cml0eS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZjg3YmEKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL1NlY3VyaXR5Lmh0bWwKQEAgLTAsMCArMSwzMjMgQEAKKzwhRE9DVFlQRSBodG1sPgorPCEtLQorIHwgR2VuZXJhdGVkIGJ5IEFwYWNoZSBNYXZlbiBEb3hpYSBhdCAyMDE1LTA3LTA5CisgfCBSZW5kZXJlZCB1c2luZyBBcGFjaGUgTWF2ZW4gRmx1aWRvIFNraW4gMS4zLjAKKy0tPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgorICA8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCIgLz4KKyAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCIgLz4KKyAgICA8bWV0YSBuYW1lPSJEYXRlLVJldmlzaW9uLXl5eXltbWRkIiBjb250ZW50PSIyMDE1MDcwOSIgLz4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbiIgLz4KKyAgICA8dGl0bGU+TWV0YWRhdGEgYW5kIEdvdmVybmFuY2UgLSBTZWN1cml0eSBGZWF0dXJlcyBvZiBBcGFjaGUgQXRsYXM8L3RpdGxlPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3Mvc2l0ZS5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9wcmludC5jc3MiIG1lZGlhPSJwcmludCIgLz4KKworICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9qcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIAorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkgeyAkKCAnLmNhcm91c2VsJyApLmNhcm91c2VsKCB7IGludGVydmFsOiAzNTAwIH0gKSB9ICk7PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ0b3BCYXJFbmFibGVkIj4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKworICAgIDxkaXYgaWQ9InRvcGJhciIgY2xhc3M9Im5hdmJhciBuYXZiYXItZml4ZWQtdG9wICI+CisgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItaW5uZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciIgc3R5bGU9IndpZHRoOiA2OCU7Ij48ZGl2IGNsYXNzPSJuYXYtY29sbGFwc2UiPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QXRsYXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJBYm91dCI+QWJvdXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iV2lraSI+V2lraTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJOZXdzIj5OZXdzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2dpdC13aXAtdXMuYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yLWF0bGFzLmdpdCIgIHRpdGxlPSJHaXQiPkdpdDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yL2F0bGFzIiAgdGl0bGU9IlN2biI+U3ZuPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0FUTEFTIiAgdGl0bGU9IkppcmEiPkppcmE8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMvUG93ZXJlZEJ5IiAgdGl0bGU9IlBvd2VyZWQgYnkiPlBvd2VyZWQgYnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9ibG9ncy5hcGFjaGUub3JnL2F0bGFzLyIgIHRpdGxlPSJCbG9nIj5CbG9nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UHJvamVjdCBJbmZvcm1hdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJwcm9qZWN0LWluZm8uaHRtbCIgIHRpdGxlPSJTdW1tYXJ5Ij5TdW1tYXJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJtYWlsLWxpc3RzLmh0bWwiICB0aXRsZT0iTWFpbGluZyBMaXN0cyI+TWFpbGluZyBMaXN0czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3dlYmNoYXQuZnJlZW5vZGUubmV0P2NoYW5uZWxzPWFwYWNoZWF0bGFzJnVpbz1kNCIgIHRpdGxlPSJJUkMiPklSQzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0idGVhbS1saXN0Lmh0bWwiICB0aXRsZT0iVGVhbSI+VGVhbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaXNzdWUtdHJhY2tpbmcuaHRtbCIgIHRpdGxlPSJJc3N1ZSBUcmFja2luZyI+SXNzdWUgVHJhY2tpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InNvdXJjZS1yZXBvc2l0b3J5Lmh0bWwiICB0aXRsZT0iU291cmNlIFJlcG9zaXRvcnkiPlNvdXJjZSBSZXBvc2l0b3J5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJsaWNlbnNlLmh0bWwiICB0aXRsZT0iTGljZW5zZSI+TGljZW5zZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlbGVhc2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iQ29taW5nIHNvb24iPkNvbWluZyBzb29uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+RG9jdW1lbnRhdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9ImN1cnJlbnQiPmN1cnJlbnQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZXNvdXJjZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJPdmVydmlldyI+T3ZlcnZpZXc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlF1aWNrU3RhcnQuaHRtbCIgIHRpdGxlPSJHZXR0aW5nIFN0YXJ0ZWQiPkdldHRpbmcgU3RhcnRlZDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQXJjaGl0ZWN0dXJlLmh0bWwiICB0aXRsZT0iQXJjaGl0ZWN0dXJlIj5BcmNoaXRlY3R1cmU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Ikluc3RhbGxhdGlvblN0ZXBzLmh0bWwiICB0aXRsZT0iSW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlR5cGVTeXN0ZW0uaHRtbCIgIHRpdGxlPSJUeXBlIFN5c3RlbSI+VHlwZSBTeXN0ZW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkNvbmZpZ3VyYXRpb24uaHRtbCIgIHRpdGxlPSJDb25maWd1cmF0aW9uIj5Db25maWd1cmF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJTZWN1cml0eS5odG1sIiAgdGl0bGU9IlNlY3VyaXR5Ij5TZWN1cml0eTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iYXBpL3Jlc3QuaHRtbCIgIHRpdGxlPSJSZXN0IEFQSSI+UmVzdCBBUEk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BU0YgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vaG93LWl0LXdvcmtzLmh0bWwiICB0aXRsZT0iSG93IEFwYWNoZSBXb3JrcyI+SG93IEFwYWNoZSBXb3JrczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vIiAgdGl0bGU9IkZvdW5kYXRpb24iPkZvdW5kYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3Nwb25zb3JzaGlwLmh0bWwiICB0aXRsZT0iU3BvbnNvcmluZyBBcGFjaGUiPlNwb25zb3JpbmcgQXBhY2hlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi90aGFua3MuaHRtbCIgIHRpdGxlPSJUaGFua3MiPlRoYW5rczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBpZD0ic2VhcmNoLWZvcm0iIGFjdGlvbj0iaHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaCIgbWV0aG9kPSJnZXQiICBjbGFzcz0ibmF2YmFyLXNlYXJjaCBwdWxsLXJpZ2h0IiA+CisgICAgCisgIDxpbnB1dCB2YWx1ZT0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnIiBuYW1lPSJzaXRlc2VhcmNoIiB0eXBlPSJoaWRkZW4iLz4KKyAgPGlucHV0IGNsYXNzPSJzZWFyY2gtcXVlcnkiIG5hbWU9InEiIGlkPSJxdWVyeSIgdHlwZT0idGV4dCIgLz4KKzwvZm9ybT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9jb29wL2NzZS9icmFuZD9mb3JtPXNlYXJjaC1mb3JtIj48L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICA8aWZyYW1lIHNyYz0iaHR0cDovL3d3dy5mYWNlYm9vay5jb20vcGx1Z2lucy9saWtlLnBocD9ocmVmPWh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzJnNlbmQ9ZmFsc2UmbGF5b3V0PWJ1dHRvbl9jb3VudCZzaG93LWZhY2VzPWZhbHNlJmFjdGlvbj1saWtlJmNvbG9yc2NoZW1lPWRhcmsiCisgICAgICAgIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPSIwIgorICAgICAgICBzdHlsZT0iYm9yZGVyOm5vbmU7IHdpZHRoOjgwcHg7IGhlaWdodDoyMHB4OyBtYXJnaW4tdG9wOiAxMHB4OyIgIGNsYXNzPSJwdWxsLXJpZ2h0IiA+PC9pZnJhbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2FwaXMuZ29vZ2xlLmNvbS9qcy9wbHVzb25lLmpzIj48L3NjcmlwdD4KKworICAgICAgICA8dWwgY2xhc3M9Im5hdiBwdWxsLXJpZ2h0Ij48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij4KKyAgICAKKyAgICA8ZGl2IGNsYXNzPSJnLXBsdXNvbmUiIGRhdGEtaHJlZj0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3MiIGRhdGEtc2l6ZT0ibWVkaXVtIiAgd2lkdGg9IjYwcHgiIGFsaWduPSJyaWdodCIgPjwvZGl2PgorCisgICAgICAgIDwvbGk+PC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIAorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIAorICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgIDxkaXYgaWQ9ImJhbm5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtbGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uIiBpZD0iYmFubmVyTGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2F0bGFzLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgQXRsYXMiIHdpZHRoPSIyMDBweCIgaGVpZ2h0PSI0NXB4Ii8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4gICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vaW5jdWJhdG9yLmFwYWNoZS5vcmciIGlkPSJiYW5uZXJSaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2FwYWNoZS1pbmN1YmF0b3ItbG9nby5wbmciICBhbHQ9IkFwYWNoZSBJbmN1YmF0b3IiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiPjxoci8+PC9kaXY+CisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0iYnJlYWRjcnVtYnMiPgorICAgICAgICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiPgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iQXBhY2hlIj4KKyAgICAgICAgQXBhY2hlPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJBdGxhcyI+CisgICAgICAgIEF0bGFzPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0iIj5TZWN1cml0eSBGZWF0dXJlcyBvZiBBcGFjaGUgQXRsYXM8L2xpPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICA8bGkgaWQ9InB1Ymxpc2hEYXRlIiBjbGFzcz0icHVsbC1yaWdodCI+TGFzdCBQdWJsaXNoZWQ6IDIwMTUtMDctMDk8L2xpPiA8bGkgY2xhc3M9ImRpdmlkZXIgcHVsbC1yaWdodCI+fDwvbGk+CisgICAgICAgICAgICAgIDxsaSBpZD0icHJvamVjdFZlcnNpb24iIGNsYXNzPSJwdWxsLXJpZ2h0Ij5WZXJzaW9uOiAwLjUtaW5jdWJhdGluZzwvbGk+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9kaXY+CisKKyAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxkaXYgaWQ9ImJvZHlDb2x1bW4iID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPlNlY3VyaXR5IEZlYXR1cmVzIG9mIEFwYWNoZSBBdGxhczxhIG5hbWU9IlNlY3VyaXR5X0ZlYXR1cmVzX29mX0FwYWNoZV9BdGxhcyI+PC9hPjwvaDI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5PdmVydmlldzxhIG5hbWU9Ik92ZXJ2aWV3Ij48L2E+PC9oMz4KKzxwPlRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBmb3IgZW5oYW5jaW5nIHRoZSBzZWN1cml0eSBvZiB0aGUgcGxhdGZvcm06PC9wPgorPHVsPgorPGxpPlNTTDwvbGk+Cis8bGk+U2VydmljZSBBdXRoZW50aWNhdGlvbjwvbGk+Cis8bGk+U1BORUdPLWJhc2VkIEhUVFAgQXV0aGVudGljYXRpb248L2xpPjwvdWw+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoND5TU0w8YSBuYW1lPSJTU0wiPjwvYT48L2g0PgorPHA+Qm90aCBTU0wgb25lLXdheSAoc2VydmVyIGF1dGhlbnRpY2F0aW9uKSBhbmQgdHdvLXdheSAoc2VydmVyIGFuZCBjbGllbnQgYXV0aGVudGljYXRpb24pIGFyZSBzdXBwb3J0ZWQuICBUaGUgZm9sbG93aW5nIGFwcGxpY2F0aW9uIHByb3BlcnRpZXMgKHByb3BlcnRpZXMgY29uZmlndXJlZCBpbiB0aGUgYXBwbGljYXRpb24ucHJvcGVydGllcyBmaWxlKSBhcmUgYXZhaWxhYmxlIGZvciBjb25maWd1cmluZyBTU0w6PC9wPgorPHA+PC9wPgorPHVsPgorPGxpPjxjb2RlPmF0bGFzLmVuYWJsZVRMUzwvY29kZT4gKGZhbHNlfHRydWUpIFtkZWZhdWx0OiBmYWxzZV0gLSBlbmFibGUvZGlzYWJsZSB0aGUgU1NMIGxpc3RlbmVyPC9saT4KKzxsaT48Y29kZT5rZXlzdG9yZS5maWxlPC9jb2RlPiAtIHRoZSBwYXRoIHRvIHRoZSBrZXlzdG9yZSBmaWxlIGxldmVyYWdlZCBieSB0aGUgc2VydmVyLiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUuPC9saT4KKzxsaT48Y29kZT50cnVzdHN0b3JlLmZpbGU8L2NvZGU+IC0gdGhlIHBhdGggdG8gdGhlIHRydXN0c3RvcmUgZmlsZS4gVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjZXJ0aWZpY2F0ZXMgb2Ygb3RoZXIgdHJ1c3RlZCBlbnRpdGllcyAoZS5nLiB0aGUgY2VydGlmaWNhdGVzIGZvciBjbGllbnQgcHJvY2Vzc2VzIGlmIHR3by13YXkgU1NMIGlzIGVuYWJsZWQpLiAgSW4gbW9zdCBpbnN0YW5jZXMgdGhpcyBjYW4gYmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBrZXlzdG9yZS5maWxlIHByb3BlcnR5IChlc3BlY2lhbGx5IGlmIG9uZS13YXkgU1NMIGlzIGVuYWJsZWQpLjwvbGk+Cis8bGk+PGNvZGU+Y2xpZW50LmF1dGguZW5hYmxlZDwvY29kZT4gKGZhbHNlfHRydWUpIFtkZWZhdWx0OiBmYWxzZV0gLSBlbmFibGUvZGlzYWJsZSBjbGllbnQgYXV0aGVudGljYXRpb24uICBJZiBlbmFibGVkLCB0aGUgY2xpZW50IHdpbGwgaGF2ZSB0byBhdXRoZW50aWNhdGUgdG8gdGhlIHNlcnZlciBkdXJpbmcgdGhlIHRyYW5zcG9ydCBzZXNzaW9uIGtleSBjcmVhdGlvbiBwcm9jZXNzIChpLmUuIHR3by13YXkgU1NMIGlzIGluIGVmZmVjdCkuPC9saT4KKzxsaT48Y29kZT5jZXJ0LnN0b3Jlcy5jcmVkZW50aWFsLnByb3ZpZGVyLnBhdGg8L2NvZGU+IC0gdGhlIHBhdGggdG8gdGhlIENyZWRlbnRpYWwgUHJvdmlkZXIgc3RvcmUgZmlsZS4gIFRoZSBwYXNzd29yZHMgZm9yIHRoZSBrZXlzdG9yZSwgdHJ1c3RzdG9yZSwgYW5kIHNlcnZlciBjZXJ0aWZpY2F0ZSBhcmUgbWFpbnRhaW5lZCBpbiB0aGlzIHNlY3VyZSBmaWxlLiAgVXRpbGl6ZSB0aGUgY3B1dGlsIHNjcmlwdCBpbiB0aGUgJ2JpbicgZGlyZWN0b3kgKHNlZSBiZWxvdykgdG8gcG9wdWxhdGUgdGhpcyBmaWxlIHdpdGggdGhlIHBhc3N3b3JkcyByZXF1aXJlZC48L2xpPjwvdWw+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoNT5DcmVkZW50aWFsIFByb3ZpZGVyIFV0aWxpdHkgU2NyaXB0PGEgbmFtZT0iQ3JlZGVudGlhbF9Qcm92aWRlcl9VdGlsaXR5X1NjcmlwdCI+PC9hPjwvaDU+Cis8cD5JbiBvcmRlciB0byBwcmV2ZW50IHRoZSB1c2Ugb2YgY2xlYXItdGV4dCBwYXNzd29yZHMsIHRoZSBBdGxhcyBwbGF0b2ZybSBtYWtlcyB1c2Ugb2YgdGhlIENyZWRlbnRpYWwgUHJvdmlkZXIgZmFjaWxpdHkgZm9yIHNlY3VyZSBwYXNzd29yZCBzdG9yYWdlIChzZWUgPGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0iaHR0cDovL2hhZG9vcC5hcGFjaGUub3JnL2RvY3MvY3VycmVudC9oYWRvb3AtcHJvamVjdC1kaXN0L2hhZG9vcC1jb21tb24vQ29tbWFuZHNNYW51YWwuaHRtbCNjcmVkZW50aWFsIj5IYWRvb3AgQ3JlZGVudGlhbCBDb21tYW5kIFJlZmVyZW5jZTwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBmYWNpbGl0eSkuICBUaGUgY3B1dGlsIHNjcmlwdCBpbiB0aGUgJ2JpbicgZGlyZWN0b3J5IGNhbiBiZSBsZXZlcmFnZWQgdG8gY3JlYXRlIHRoZSBwYXNzd29yZCBzdG9yZSByZXF1aXJlZC48L3A+Cis8cD5UbyBjcmVhdGUgdGhlIGNyZWRlbnRpYWwgcHJvdmRpZXIgZm9yIEF0bGFzOjwvcD4KKzxwPjwvcD4KKzx1bD4KKzxsaT48Y29kZT5iaW48L2NvZGU+JyBkaXJlY3Rvcnk8L2xpPgorPGxpPjxjb2RlPi4vY3B1dGlsLnNoPC9jb2RlPic8L2xpPgorPGxpPkVudGVyIHRoZSBwYXRoIGZvciB0aGUgZ2VuZXJhdGVkIGNyZWRlbnRpYWwgcHJvdmlkZXIuICBUaGUgZm9ybWF0IGZvciB0aGUgcGF0aCBpczoKKzx1bD4KKzxsaT48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJqY2VrczovL2ZpbGUvbG9jYWwvZmlsZS9wYXRoL2ZpbGUuamNla3MiPmpjZWtzOi8vZmlsZS9sb2NhbC9maWxlL3BhdGgvZmlsZS5qY2VrczwvYT4gb3IgPGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0iamNla3M6Ly9oZGZzQG5hbWVub2RlaG9zdDpwb3J0L3BhdGgvaW4vaGRmcy90by9maWxlLmpjZWtzLiI+amNla3M6Ly9oZGZzQG5hbWVub2RlaG9zdDpwb3J0L3BhdGgvaW4vaGRmcy90by9maWxlLmpjZWtzLjwvYT4gIFRoZSBmaWxlcyBnZW5lcmFsbHkgdXNlIHRoZSAmcXVvdDsuamNla3MmcXVvdDsgZXh0ZW5zaW9uIChlLmcuIHRlc3QuamNla3MpPC9saT48L3VsPjwvbGk+Cis8bGk+RW50ZXIgdGhlIHBhc3N3b3JkcyBmb3IgdGhlIGtleXN0b3JlLCB0cnVzdHN0b3JlLCBhbmQgc2VydmVyIGtleSAodGhlc2UgcGFzc3dvcmRzIG5lZWQgdG8gbWF0Y2ggdGhlIG9uZXMgdXRpbGl6ZWQgZm9yIGFjdHVhbGx5IGNyZWF0aW5nIHRoZSBhc3NvY2lhdGVkIGNlcnRpZmljYXRlIHN0b3JlIGZpbGVzKS48L2xpPjwvdWw+Cis8cD5UaGUgY3JlZGVudGlhbCBwcm92aWRlciB3aWxsIGJlIGdlbmVyYXRlZCBhbmQgc2F2ZWQgdG8gdGhlIHBhdGggcHJvdmlkZWQuPC9wPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDQ+U2VydmljZSBBdXRoZW50aWNhdGlvbjxhIG5hbWU9IlNlcnZpY2VfQXV0aGVudGljYXRpb24iPjwvYT48L2g0PgorPHA+VGhlIEF0bGFzIHBsYXRmb3JtLCB1cG9uIHN0YXJ0dXAsIGlzIGFzc29jaWF0ZWQgdG8gYW4gYXV0aGVudGljYXRlZCBpZGVudGl0eS4gIEJ5IGRlZmF1bHQsIGluIGFuIGluc2VjdXJlIGVudmlyb25tZW50LCB0aGF0IGlkZW50aXR5IGlzIHRoZSBzYW1lIGFzIHRoZSBPUyBhdXRoZW50aWNhdGVkIHVzZXIgbGF1bmNoaW5nIHRoZSBzZXJ2ZXIuICBIb3dldmVyLCBpbiBhIHNlY3VyZSBjbHVzdGVyIGxldmVyYWdpbmcga2VyYmVyb3MsIGl0IGlzIGNvbnNpZGVyZWQgYSBiZXN0IHByYWN0aWNlIHRvIGNvbmZpZ3VyZSBhIGtleXRhYiBhbmQgcHJpbmNpcGFsIGluIG9yZGVyIGZvciB0aGUgcGxhdGZvcm0gdG8gYXV0aGVudGljYXRlIHRvIHRoZSBLREMuIFRoaXMgYWxsb3dzIHRoZSBzZXJ2aWNlIHRvIHN1YnNlcXVlbnRseSBpbnRlcmFjdCB3aXRoIG90aGVyIHNlY3VyZSBjbHVzdGVyIHNlcnZpY2VzIChlLmcuIEhERlMpLjwvcD4KKzxwPlRoZSBwcm9wZXJ0aWVzIGZvciBjb25maWd1cmluZyBzZXJ2aWNlIGF1dGhlbnRpY2F0aW9uIGFyZTo8L3A+Cis8cD48L3A+Cis8dWw+Cis8bGk+PGNvZGU+YXRsYXMuYXV0aGVudGljYXRpb24ubWV0aG9kPC9jb2RlPiAoc2ltcGxlfGtlcmJlcm9zKSBbZGVmYXVsdDogc2ltcGxlXSAtIHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2QgdG8gdXRpbGl6ZS4gIFNpbXBsZSB3aWxsIGxldmVyYWdlIHRoZSBPUyBhdXRoZW50aWNhdGVkIGlkZW50aXR5IGFuZCBpcyB0aGUgZGVmYXVsdCBtZWNoYW5pc20uICAna2VyYmVyb3MnIGluZGljYXRlcyB0aGF0IHRoZSBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRvIGF1dGhlbnRpY2F0ZSB0byB0aGUgS0RDIGxldmVyYWdpbmcgdGhlIGNvbmZpZ3VyZWQga2V5dGFiIGFuZCBwcmluY2lwYWwuPC9saT4KKzxsaT48Y29kZT5hdGxhcy5hdXRoZW50aWNhdGlvbi5rZXl0YWI8L2NvZGU+IC0gdGhlIHBhdGggdG8gdGhlIGtleXRhYiBmaWxlLjwvbGk+Cis8bGk+PGNvZGU+YXRsYXMuYXV0aGVudGljYXRpb24ucHJpbmNpcGFsPC9jb2RlPiAtIHRoZSBwcmluY2lwYWwgdG8gdXNlIGZvciBhdXRoZW50aWNhdGluZyB0byB0aGUgS0RDLiAgVGhlIHByaW5jaXBhbCBpcyBnZW5lcmFsbHkgb2YgdGhlIGZvcm0gJnF1b3Q7dXNlci9ob3N0QHJlYWxtJnF1b3Q7LiAgWW91IG1heSB1c2UgdGhlICdfSE9TVCcgdG9rZW4gZm9yIHRoZSBob3N0bmFtZSBhbmQgdGhlIGxvY2FsIGhvc3RuYW1lIHdpbGwgYmUgc3Vic3RpdHV0ZWQgaW4gYnkgdGhlIHJ1bnRpbWUgKGUuZy4gJnF1b3Q7QXRsYXMvX0hPU1RARVhBTVBMRS5DT00mcXVvdDspLjwvbGk+PC91bD48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGg0PlNQTkVHTy1iYXNlZCBIVFRQIEF1dGhlbnRpY2F0aW9uPGEgbmFtZT0iU1BORUdPLWJhc2VkX0hUVFBfQXV0aGVudGljYXRpb24iPjwvYT48L2g0PgorPHA+SFRUUCBhY2Nlc3MgdG8gdGhlIEF0bGFzIHBsYXRmb3JtIGNhbiBiZSBzZWN1cmVkIGJ5IGVuYWJsaW5nIHRoZSBwbGF0Zm9ybSdzIFNQTkVHTyBzdXBwb3J0LiAgVGhlcmUgYXJlIGN1cnJlbnRseSB0d28gc3VwcG9ydGVkIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXM6PC9wPgorPHA+PC9wPgorPHVsPgorPGxpPjxjb2RlPnNpbXBsZTwvY29kZT4gLSBhdXRoZW50aWNhdGlvbiBpcyBwZXJmb3JtZWQgdmlhIGEgcHJvdmlkZWQgdXNlciBuYW1lPC9saT4KKzxsaT48Y29kZT5rZXJiZXJvczwvY29kZT4gLSB0aGUgS0RDIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkgb2YgdGhlIGNsaWVudCBpcyBsZXZlcmFnZWQgdG8gYXV0aGVudGljYXRlIHRvIHRoZSBzZXJ2ZXI8L2xpPjwvdWw+Cis8cD5UaGUga2VyYmVyb3Mgc3VwcG9ydCByZXF1aXJlcyB0aGUgY2xpZW50IGFjY2Vzc2luZyB0aGUgc2VydmVyIHRvIGZpcnN0IGF1dGhlbnRpY2F0ZSB0byB0aGUgS0RDICh1c3VhbGx5IHRoaXMgaXMgZG9uZSB2aWEgdGhlICdraW5pdCcgY29tbWFuZCkuICBPbmNlIGF1dGhlbnRpY2F0ZWQsIHRoZSB1c2VyIG1heSBhY2Nlc3MgdGhlIHNlcnZlciAodGhlIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkgd2lsbCBiZSByZWxhdGVkIHRvIHRoZSBzZXJ2ZXIgdmlhIHRoZSBTUE5FR08gbmVnb3RpYXRpb24gbWVjaGFuaXNtKS48L3A+Cis8cD5UaGUgcHJvcGVydGllcyBmb3IgY29uZmlndXJpbmcgdGhlIFNQTkVHTyBzdXBwb3J0IGFyZTo8L3A+Cis8cD48L3A+Cis8dWw+Cis8bGk+PGNvZGU+YXRsYXMuaHR0cC5hdXRoZW50aWNhdGlvbi5lbmFibGVkPC9jb2RlPiAodHJ1ZXxmYWxzZSkgW2RlZmF1bHQ6IGZhbHNlXSAtIGEgcHJvcGVydHkgaW5kaWNhdGluZyB3aGV0aGVyIHRvIGVuYWJsZSBIVFRQIGF1dGhlbnRpY2F0aW9uPC9saT4KKzxsaT48Y29kZT5hdGxhcy5odHRwLmF1dGhlbnRpY2F0aW9uLnR5cGU8L2NvZGU+IChzaW1wbGV8a2VyYmVyb3MpIFtkZWZhdWx0OiBzaW1wbGVdIC0gdGhlIGF1dGhlbnRpY2F0aW9uIHR5cGU8L2xpPgorPGxpPjxjb2RlPmF0bGFzLmh0dHAuYXV0aGVudGljYXRpb24ua2VyYmVyb3MucHJpbmNpcGFsPC9jb2RlPiAtIHRoZSB3ZWItYXBwbGljYXRpb24gS2VyYmVyb3MgcHJpbmNpcGFsIG5hbWUuIFRoZSBLZXJiZXJvcyBwcmluY2lwYWwgbmFtZSBtdXN0IHN0YXJ0IHdpdGggJnF1b3Q7SFRUUC8uLi4mcXVvdDsuIEZvciBleGFtcGxlOiAmcXVvdDtIVFRQL2xvY2FsaG9zdEBMT0NBTEhPU1QmcXVvdDsuIFRoZXJlIGlzIG5vIGRlZmF1bHQgdmFsdWUuPC9saT4KKzxsaT48Y29kZT5hdGxhcy5odHRwLmF1dGhlbnRpY2F0aW9uLmtlcmJlcm9zLmtleXRhYjwvY29kZT4gLSB0aGUgcGF0aCB0byB0aGUga2V5dGFiIGZpbGUgY29udGFpbmluZyB0aGUgY3JlZGVudGlhbHMgZm9yIHRoZSBrZXJiZXJvcyBwcmluY2lwYWwuPC9saT48L3VsPgorPHA+Rm9yIGEgbW9yZSBkZXRhaWxlZCBkaXNjdXNzaW9uIG9mIHRoZSBIVFRQIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSByZWZlciB0byA8YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJodHRwOi8vaGFkb29wLmFwYWNoZS5vcmcvZG9jcy9zdGFibGUvaGFkb29wLWF1dGgvQ29uZmlndXJhdGlvbi5odG1sIj5IYWRvb3AgQXV0aCwgSmF2YSBIVFRQIFNQTkVHTyAyLjYuMCAtIFNlcnZlciBTaWRlIENvbmZpZ3VyYXRpb248L2E+LiAgVGhlIHByZWZpeCB0aGF0IGRvY3VtZW50IHJlZmVyZW5jZXMgaXMgJnF1b3Q7YXRsYXMuaHR0cC5hdXRoZW50aWNhdGlvbiZxdW90OyBpbiB0aGUgY2FzZSBvZiB0aGUgQXRsYXMgYXV0aGVudGljYXRpb24gaW1wbGVtZW50YXRpb24uPC9wPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDQ+Q2xpZW50IHNlY3VyaXR5IGNvbmZpZ3VyYXRpb248YSBuYW1lPSJDbGllbnRfc2VjdXJpdHlfY29uZmlndXJhdGlvbiI+PC9hPjwvaDQ+Cis8cD5XaGVuIGxldmVyYWdpbmcgQXRsYXMgY2xpZW50IGNvZGUgdG8gY29tbXVuaWNhdGUgd2l0aCBhbiBBdGxhcyBzZXJ2ZXIgY29uZmlndXJlZCBmb3IgU1NMIHRyYW5zcG9ydCBhbmQvb3IgS2VyYmVyb3MgYXV0aGVudGljYXRpb24sIHRoZXJlIGlzIGEgcmVxdWlyZW1lbnQgdG8gcHJvdmlkZSBhIGNsaWVudCBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCBwcm92aWRlcyB0aGUgc2VjdXJpdHkgcHJvcGVydGllcyB0aGF0IGFsbG93IGZvciBjb21tdW5pY2F0aW9uIHdpdGgsIG9yIGF1dGhlbnRpY2F0aW5nIHRvLCB0aGUgc2VydmVyLiBDcmVhdGUgYSBjbGllbnQucHJvcGVydGllcyBmaWxlIHdpdGggdGhlIGFwcHJvcHJpYXRlIHNldHRpbmdzIChzZWUgYmVsb3cpIGFuZCBwbGFjZSBpdCBvbiB0aGUgY2xpZW50J3MgY2xhc3NwYXRoIG9yIGluIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGJ5IHRoZSAmcXVvdDthdGxhcy5jb25mJnF1b3Q7IHN5c3RlbSBwcm9wZXJ0eS48L3A+Cis8cD5UaGUgY2xpZW50IHByb3BlcnRpZXMgZm9yIFNTTCBjb21tdW5pY2F0aW9uIGFyZTo8L3A+Cis8cD48L3A+Cis8dWw+Cis8bGk+PGNvZGU+YXRsYXMuZW5hYmxlVExTPC9jb2RlPiAoZmFsc2V8dHJ1ZSkgW2RlZmF1bHQ6IGZhbHNlXSAtIGVuYWJsZS9kaXNhYmxlIHRoZSBTU0wgY2xpZW50IGNvbW11bmljYXRpb24gaW5mcmFzdHJ1Y3R1cmUuPC9saT4KKzxsaT48Y29kZT5rZXlzdG9yZS5maWxlPC9jb2RlPiAtIHRoZSBwYXRoIHRvIHRoZSBrZXlzdG9yZSBmaWxlIGxldmVyYWdlZCBieSB0aGUgY2xpZW50LiAgVGhpcyBmaWxlIGlzIG9ubHkgcmVxdWlyZWQgaWYgMi1XYXkgU1NMIGlzIGVuYWJsZWQgYXQgdGhlIHNlcnZlciBhbmQgY29udGFpbnMgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZS48L2xpPgorPGxpPjxjb2RlPnRydXN0c3RvcmUuZmlsZTwvY29kZT4gLSB0aGUgcGF0aCB0byB0aGUgdHJ1c3RzdG9yZSBmaWxlLiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNlcnRpZmljYXRlcyBvZiB0cnVzdGVkIGVudGl0aWVzIChlLmcuIHRoZSBjZXJ0aWZpY2F0ZXMgZm9yIHRoZSBzZXJ2ZXIgb3IgYSBzaGFyZWQgY2VydGlmaWNhdGlvbiBhdXRob3JpdHkpLiBUaGlzIGZpbGUgaXMgcmVxdWlyZWQgZm9yIGJvdGggb25lLXdheSBvciB0d28td2F5IFNTTC48L2xpPgorPGxpPjxjb2RlPmNlcnQuc3RvcmVzLmNyZWRlbnRpYWwucHJvdmlkZXIucGF0aDwvY29kZT4gLSB0aGUgcGF0aCB0byB0aGUgQ3JlZGVudGlhbCBQcm92aWRlciBzdG9yZSBmaWxlLiAgVGhlIHBhc3N3b3JkcyBmb3IgdGhlIGtleXN0b3JlLCB0cnVzdHN0b3JlLCBhbmQgY2xpZW50IGNlcnRpZmljYXRlIGFyZSBtYWludGFpbmVkIGluIHRoaXMgc2VjdXJlIGZpbGUuPC9saT48L3VsPgorPHA+VGhlIHByb3BlcnR5IHJlcXVpcmVkIGZvciBhdXRoZW50aWNhdGluZyB0byB0aGUgc2VydmVyIChpZiBhdXRoZW50aWNhdGlvbiBpcyBlbmFibGVkKTo8L3A+Cis8cD48L3A+Cis8dWw+Cis8bGk+PGNvZGU+YXRsYXMuaHR0cC5hdXRoZW50aWNhdGlvbi50eXBlPC9jb2RlPiAoc2ltcGxlfGtlcmJlcm9zKSBbZGVmYXVsdDogc2ltcGxlXSAtIHRoZSBhdXRoZW50aWNhdGlvbiB0eXBlPC9saT48L3VsPgorPHA+SWYgdGhlIGF1dGhlbnRpY2F0aW9uIHR5cGUgc3BlY2lmaWVkIGlzICdrZXJiZXJvcycsIHRoZW4gdGhlIGtlcmJlcm9zIHRpY2tldCBjYWNoZSB3aWxsIGJlIGFjY2Vzc2VkIGZvciBhdXRoZW50aWNhdGluZyB0byB0aGUgc2VydmVyIChUaGVyZWZvcmUgdGhlIGNsaWVudCBpcyByZXF1aXJlZCB0byBhdXRoZW50aWNhdGUgdG8gdGhlIEtEQyBwcmlvciB0byBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHNlcnZlciB1c2luZyAna2luaXQnIG9yIGEgc2ltaWxhciBtZWNoYW5pc20pLjwvcD48L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorCisgICAgPGhyLz4KKworICAgIDxmb290ZXI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgc3BhbjEyIj5Db3B5cmlnaHQgJmNvcHk7ICAgICAgICAgICAgICAgICAgICAyMDE1CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciPkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9hPi4KKyAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPHAgaWQ9InBvd2VyZWRCeSIgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy8iIHRpdGxlPSJCdWlsdCBieSBNYXZlbiIgY2xhc3M9InBvd2VyZWRCeSI+CisgICAgICAgIDxpbWcgY2xhc3M9ImJ1aWx0QnkiIGFsdD0iQnVpbHQgYnkgTWF2ZW4iIHNyYz0iLi9pbWFnZXMvbG9nb3MvbWF2ZW4tZmVhdGhlci5wbmciIC8+CisgICAgICA8L2E+CisgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgPC9mb290ZXI+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvVHlwZVN5c3RlbS5odG1sIGIvMC41LjAtaW5jdWJhdGluZy9UeXBlU3lzdGVtLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBhM2Q4NAotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvVHlwZVN5c3RlbS5odG1sCkBAIC0wLDAgKzEsMjc4IEBACis8IURPQ1RZUEUgaHRtbD4KKzwhLS0KKyB8IEdlbmVyYXRlZCBieSBBcGFjaGUgTWF2ZW4gRG94aWEgYXQgMjAxNS0wNy0wOQorIHwgUmVuZGVyZWQgdXNpbmcgQXBhY2hlIE1hdmVuIEZsdWlkbyBTa2luIDEuMy4wCistLT4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CisgICAgPG1ldGEgbmFtZT0iRGF0ZS1SZXZpc2lvbi15eXl5bW1kZCIgY29udGVudD0iMjAxNTA3MDkiIC8+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4iIC8+CisgICAgPHRpdGxlPk1ldGFkYXRhIGFuZCBHb3Zlcm5hbmNlIC0gVHlwZSBTeXN0ZW08L3RpdGxlPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3Mvc2l0ZS5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9wcmludC5jc3MiIG1lZGlhPSJwcmludCIgLz4KKworICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9qcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIAorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkgeyAkKCAnLmNhcm91c2VsJyApLmNhcm91c2VsKCB7IGludGVydmFsOiAzNTAwIH0gKSB9ICk7PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ0b3BCYXJFbmFibGVkIj4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKworICAgIDxkaXYgaWQ9InRvcGJhciIgY2xhc3M9Im5hdmJhciBuYXZiYXItZml4ZWQtdG9wICI+CisgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItaW5uZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciIgc3R5bGU9IndpZHRoOiA2OCU7Ij48ZGl2IGNsYXNzPSJuYXYtY29sbGFwc2UiPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QXRsYXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJBYm91dCI+QWJvdXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iV2lraSI+V2lraTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJOZXdzIj5OZXdzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2dpdC13aXAtdXMuYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yLWF0bGFzLmdpdCIgIHRpdGxlPSJHaXQiPkdpdDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yL2F0bGFzIiAgdGl0bGU9IlN2biI+U3ZuPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0FUTEFTIiAgdGl0bGU9IkppcmEiPkppcmE8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMvUG93ZXJlZEJ5IiAgdGl0bGU9IlBvd2VyZWQgYnkiPlBvd2VyZWQgYnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9ibG9ncy5hcGFjaGUub3JnL2F0bGFzLyIgIHRpdGxlPSJCbG9nIj5CbG9nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UHJvamVjdCBJbmZvcm1hdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJwcm9qZWN0LWluZm8uaHRtbCIgIHRpdGxlPSJTdW1tYXJ5Ij5TdW1tYXJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJtYWlsLWxpc3RzLmh0bWwiICB0aXRsZT0iTWFpbGluZyBMaXN0cyI+TWFpbGluZyBMaXN0czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3dlYmNoYXQuZnJlZW5vZGUubmV0P2NoYW5uZWxzPWFwYWNoZWF0bGFzJnVpbz1kNCIgIHRpdGxlPSJJUkMiPklSQzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0idGVhbS1saXN0Lmh0bWwiICB0aXRsZT0iVGVhbSI+VGVhbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaXNzdWUtdHJhY2tpbmcuaHRtbCIgIHRpdGxlPSJJc3N1ZSBUcmFja2luZyI+SXNzdWUgVHJhY2tpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InNvdXJjZS1yZXBvc2l0b3J5Lmh0bWwiICB0aXRsZT0iU291cmNlIFJlcG9zaXRvcnkiPlNvdXJjZSBSZXBvc2l0b3J5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJsaWNlbnNlLmh0bWwiICB0aXRsZT0iTGljZW5zZSI+TGljZW5zZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlbGVhc2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iQ29taW5nIHNvb24iPkNvbWluZyBzb29uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+RG9jdW1lbnRhdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9ImN1cnJlbnQiPmN1cnJlbnQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZXNvdXJjZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJPdmVydmlldyI+T3ZlcnZpZXc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlF1aWNrU3RhcnQuaHRtbCIgIHRpdGxlPSJHZXR0aW5nIFN0YXJ0ZWQiPkdldHRpbmcgU3RhcnRlZDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQXJjaGl0ZWN0dXJlLmh0bWwiICB0aXRsZT0iQXJjaGl0ZWN0dXJlIj5BcmNoaXRlY3R1cmU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Ikluc3RhbGxhdGlvblN0ZXBzLmh0bWwiICB0aXRsZT0iSW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlR5cGVTeXN0ZW0uaHRtbCIgIHRpdGxlPSJUeXBlIFN5c3RlbSI+VHlwZSBTeXN0ZW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkNvbmZpZ3VyYXRpb24uaHRtbCIgIHRpdGxlPSJDb25maWd1cmF0aW9uIj5Db25maWd1cmF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJTZWN1cml0eS5odG1sIiAgdGl0bGU9IlNlY3VyaXR5Ij5TZWN1cml0eTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iYXBpL3Jlc3QuaHRtbCIgIHRpdGxlPSJSZXN0IEFQSSI+UmVzdCBBUEk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BU0YgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vaG93LWl0LXdvcmtzLmh0bWwiICB0aXRsZT0iSG93IEFwYWNoZSBXb3JrcyI+SG93IEFwYWNoZSBXb3JrczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vIiAgdGl0bGU9IkZvdW5kYXRpb24iPkZvdW5kYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3Nwb25zb3JzaGlwLmh0bWwiICB0aXRsZT0iU3BvbnNvcmluZyBBcGFjaGUiPlNwb25zb3JpbmcgQXBhY2hlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi90aGFua3MuaHRtbCIgIHRpdGxlPSJUaGFua3MiPlRoYW5rczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBpZD0ic2VhcmNoLWZvcm0iIGFjdGlvbj0iaHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaCIgbWV0aG9kPSJnZXQiICBjbGFzcz0ibmF2YmFyLXNlYXJjaCBwdWxsLXJpZ2h0IiA+CisgICAgCisgIDxpbnB1dCB2YWx1ZT0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnIiBuYW1lPSJzaXRlc2VhcmNoIiB0eXBlPSJoaWRkZW4iLz4KKyAgPGlucHV0IGNsYXNzPSJzZWFyY2gtcXVlcnkiIG5hbWU9InEiIGlkPSJxdWVyeSIgdHlwZT0idGV4dCIgLz4KKzwvZm9ybT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9jb29wL2NzZS9icmFuZD9mb3JtPXNlYXJjaC1mb3JtIj48L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICA8aWZyYW1lIHNyYz0iaHR0cDovL3d3dy5mYWNlYm9vay5jb20vcGx1Z2lucy9saWtlLnBocD9ocmVmPWh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzJnNlbmQ9ZmFsc2UmbGF5b3V0PWJ1dHRvbl9jb3VudCZzaG93LWZhY2VzPWZhbHNlJmFjdGlvbj1saWtlJmNvbG9yc2NoZW1lPWRhcmsiCisgICAgICAgIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPSIwIgorICAgICAgICBzdHlsZT0iYm9yZGVyOm5vbmU7IHdpZHRoOjgwcHg7IGhlaWdodDoyMHB4OyBtYXJnaW4tdG9wOiAxMHB4OyIgIGNsYXNzPSJwdWxsLXJpZ2h0IiA+PC9pZnJhbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2FwaXMuZ29vZ2xlLmNvbS9qcy9wbHVzb25lLmpzIj48L3NjcmlwdD4KKworICAgICAgICA8dWwgY2xhc3M9Im5hdiBwdWxsLXJpZ2h0Ij48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij4KKyAgICAKKyAgICA8ZGl2IGNsYXNzPSJnLXBsdXNvbmUiIGRhdGEtaHJlZj0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3MiIGRhdGEtc2l6ZT0ibWVkaXVtIiAgd2lkdGg9IjYwcHgiIGFsaWduPSJyaWdodCIgPjwvZGl2PgorCisgICAgICAgIDwvbGk+PC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIAorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIAorICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgIDxkaXYgaWQ9ImJhbm5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtbGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uIiBpZD0iYmFubmVyTGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2F0bGFzLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgQXRsYXMiIHdpZHRoPSIyMDBweCIgaGVpZ2h0PSI0NXB4Ii8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4gICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vaW5jdWJhdG9yLmFwYWNoZS5vcmciIGlkPSJiYW5uZXJSaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2FwYWNoZS1pbmN1YmF0b3ItbG9nby5wbmciICBhbHQ9IkFwYWNoZSBJbmN1YmF0b3IiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiPjxoci8+PC9kaXY+CisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0iYnJlYWRjcnVtYnMiPgorICAgICAgICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiPgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iQXBhY2hlIj4KKyAgICAgICAgQXBhY2hlPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJBdGxhcyI+CisgICAgICAgIEF0bGFzPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0iIj5UeXBlIFN5c3RlbTwvbGk+CisgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgIDxsaSBpZD0icHVibGlzaERhdGUiIGNsYXNzPSJwdWxsLXJpZ2h0Ij5MYXN0IFB1Ymxpc2hlZDogMjAxNS0wNy0wOTwvbGk+IDxsaSBjbGFzcz0iZGl2aWRlciBwdWxsLXJpZ2h0Ij58PC9saT4KKyAgICAgICAgICAgICAgPGxpIGlkPSJwcm9qZWN0VmVyc2lvbiIgY2xhc3M9InB1bGwtcmlnaHQiPlZlcnNpb246IDAuNS1pbmN1YmF0aW5nPC9saT4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2Rpdj4KKworICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgPGRpdiBpZD0iYm9keUNvbHVtbiIgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDI+VHlwZSBTeXN0ZW08YSBuYW1lPSJUeXBlX1N5c3RlbSI+PC9hPjwvaDI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5JbnRyb2R1Y3Rpb248YSBuYW1lPSJJbnRyb2R1Y3Rpb24iPjwvYT48L2gzPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDM+T3ZlcnZpZXc8YSBuYW1lPSJPdmVydmlldyI+PC9hPjwvaDM+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoND5EYXRhIFR5cGVzIE92ZXJ2aWV3PGEgbmFtZT0iRGF0YV9UeXBlc19PdmVydmlldyI+PC9hPjwvaDQ+Cis8cD48aW1nIHNyYz0iZGF0YS10eXBlcy5wbmciIGFsdD0iIiAvPjwvcD48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGg0PlR5cGVzIEluc3RhbmNlcyBPdmVydmlldzxhIG5hbWU9IlR5cGVzX0luc3RhbmNlc19PdmVydmlldyI+PC9hPjwvaDQ+Cis8cD48aW1nIHNyYz0idHlwZXMtaW5zdGFuY2VzLnBuZyIgYWx0PSIiIC8+PC9wPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDM+RGV0YWlsczxhIG5hbWU9IkRldGFpbHMiPjwvYT48L2gzPgorPHA+IyMjIFN0cnVjdHMgYXJlIGxpa2UgQyBzdHJ1Y3RzIC0gdGhleSBkb24ndCBoYXZlIGFuIGlkZW50aXR5IC0gbm8gaW5kZXBlbmRlbnQgbGlmZWN5Y2xlIC0gbGlrZSBhIGJhZyBvZiBwcm9wZXJ0aWVzIC0gbGlrZSBpbiBoaXZlLCBhbHNvPC9wPgorPHA+IyMjIENsYXNzZXMgYXJlIGNsYXNzZXMgLSBsaWtlIGFueSBPTyBjbGFzcyAtIGhhdmUgaWRlbnRpdHkgLSBjYW4gaGF2ZSBpbmhlcml0ZW5jZSAtIGNhbiBjb250YWluIHN0cnVjdHMgLSBkb24ndCBuZWNlc3NhcmlseSBuZWVkIHRvIHVzZSBhIHN0cnVjdCBpbnNpZGUgdGhlIGNsYXNzIHRvIGRlZmluZSBwcm9wcyAtIGNhbiBhbHNvIGRlZmluZSBwcm9wcyB1c2luZyA8YSBocmVmPSIuL0F0dHJpYnV0ZURlZmluaXRpb24uaHRtbCI+QXR0cmlidXRlRGVmaW5pdGlvbjwvYT4gdXNpbmcgdGhlIGJhc2ljIGRhdGEgdHlwZXMgLSBjbGFzc2VzIGFyZSBpbW11dGFibGUgb25jZSBjcmVhdGVkPC9wPgorPHA+IyMjIE9uIHNlYXJjaCBpbnRlcmZhY2U6IC0gY2FuIHNlYXJjaCBmb3IgYWxsIGluc3RhbmNlcyBvZiBhIGNsYXNzIC0gY2xhc3NlcyBjb3VsZCBiZWNvbWUgdGFibGVzIGluIGEgcmVsYXRpb25hbCBzeXN0ZW0sIGZvciBpbnN0YW5jZSAJLSBhbHNvIGRhdGFiYXNlcywgY29sdW1ucywgZXRjLjwvcD4KKzxwPiMjIyBUcmFpdHMgaXMgc2ltaWxhciB0byBzY2FsYSAtIHRyYWl0cyBtb3JlIGxpa2UgZGVjb3JhdG9ycyAoPykgLSB0cmFpdHMgZ2V0IGFwcGxpZWQgdG8gaW5zdGFuY2VzIC0gbm90IGNsYXNzZXMgCS0gdGhpcyBzYXRpc2ZpZXMgdGhlIGNsYXNzaWZpY2F0aW9uIG1lY2hhbmlzbSAoaXNoKSAtIGNhbiBoYXZlIGEgY2xhc3MgaW5zdGFuY2UgaGF2ZSBhbnkgbnVtYmVyIG9mIHRyYWl0cyAtIGUuZy4gc2VjdXJpdHkgY2xlYXJhbmNlIC0gYW55IFBlcnNvbiBjbGFzcyBjb3VsZCBoYXZlIGl0OyBzbyB3ZSBhZGQgaXQgYXMgYSBtaXhpbiB0byB0aGUgUGVyc29uIGNsYXNzIAktIHNlY3VyaXR5IGNsZWFyYW5jZSB0cmFpdCBoYXMgYSBsZXZlbCBhdHRyaWJ1dGUgCS0gdHJhaXRzIGFyZSBsYWJlbHMgCS0gZWFjaCBsYWJlbCBjYW4gaGF2ZSBpdHMgb3duIGF0dHJpYnV0ZSAtIHJlYXNvbiBmb3IgZG9pbmcgdGhpcyBpczogCS0gbW9kZWxlZCBzZWN1cml0eSBjbGVhcmFuY2UgdHJhaXQgCS0gd2FudCB0byBwcmVzY3JpYmUgaXQgdG8gb3RoZXIgdGhpbmdzLCB0b28gCS0gY2FuIG5vdyBzZWFyY2ggZm9yIGFueXRoaW5nIHRoYXQgaGFzIHNlY3VyaXR5IGNsZWFyYW5jZSBsZXZlbCA9IDEsIGZvciBpbnN0YW5jZTwvcD4KKzxwPiMjIyBPbiBJbnN0YW5jZXM6IC0gY2xhc3MsIHRyYWl0LCBzdHJ1Y3QgYWxsIGhhdmUgYmFncyBvZiBhdHRyaWJ1dGVzIC0gY2FuIGdldCBuYW1lIG9mIHR5cGUgYXNzb2NpYXRlZCB3aXRoIGF0dHJpYnV0ZSAtIGNhbiBnZXQgb3Igc2V0IHRoZSBhdHRyaWJ1dGUgaW4gdGhhdCBiYWcgZm9yIGVhY2ggaW5zdGFuY2U8L3A+Cis8cD4jIyMgT24gQ2xhc3NpZmljYXRpb246IC0gY3JlYXRlIGNvbHVtbiBhcyBhIGNsYXNzIC0gY3JlYXRlIGEgdHJhaXQgdG8gY2xhc3NpZnkgYXMgJnF1b3Q7UEhJJnF1b3Q7IC0gd291bGQgY3JlYXRlIHRoZSBpbnN0YW5jZSBvZiB0aGUgY29sdW1uIHdpdGggdGhlIFBISSB0cmFpdCAtIGFwcGx5IHRyYWl0cyB0byBpbnN0YW5jZXMgLSBDQU4nVCBhcHBseSB0cmFpdHMgdG8gY2xhc3M8L3A+Cis8cD4jIyMgT3RoZXIgdXNlZnVsIGluZm9ybWF0aW9uPC9wPgorPHA+PGEgaHJlZj0iLi9IaWVyYXJjaGljYWxDbGFzc1R5cGUuaHRtbCI+SGllcmFyY2hpY2FsQ2xhc3NUeXBlPC9hPiAtIGJhc2UgdHlwZSBmb3IgPGEgaHJlZj0iLi9DbGFzc1R5cGUuaHRtbCI+Q2xhc3NUeXBlPC9hPiBhbmQgPGEgaHJlZj0iLi9UcmFpdFR5cGUuaHRtbCI+VHJhaXRUeXBlPC9hPiBJbnN0YW5jZXMgY3JlYXRlZCBmcm9tIERlZmluaXRpb25zPC9wPgorPHA+RXZlcnkgaW5zdGFuY2UgaXMgcmVmZXJlbmNlYWJsZSAtIGkuZS4gc29tZXRoaW5nIGNhbiBwb2ludCB0byBpdCBpbiB0aGUgZ3JhcGggZGIgPGEgaHJlZj0iLi9NZXRhZGF0YVNlcnZpY2UuaHRtbCI+TWV0YWRhdGFTZXJ2aWNlPC9hPiBtYXkgbm90IGJlIHVzZWQgbG9uZ3Rlcm0gLSBpdCBpcyBjdXJyZW50bHkgdXNlZCBmb3IgYm9vdHN0cmFwcGluZyB0aGUgcmVwbyAmYW1wOyB0eXBlIHN5c3RlbTwvcD4KKzxwPklkIGNsYXNzIC0gcmVwcmVzZW50cyB0aGUgSWQgb2YgYW4gaW5zdGFuY2U8L3A+Cis8cD5XaGVuIHRoZSB3ZWIgc2VydmljZSByZWNlaXZlcyBhbiBvYmplY3QgZ3JhcGgsIHRoZSA8YSBocmVmPSIuL09iamVjdEdyYXBoV2Fsa2VyLmh0bWwiPk9iamVjdEdyYXBoV2Fsa2VyPC9hPiBpcyB1c2VkIHRvIHVwZGF0ZSB0aGluZ3MgCS0gPGEgaHJlZj0iLi9EaXNjb3Zlckluc3RhbmNlcy5odG1sIj5EaXNjb3Zlckluc3RhbmNlczwvYT4gaXMgdXNlZCB0byBkaXNjb3ZlciB0aGUgaW5zdGFuY2VzIGluIHRoZSBvYmplY3QgZ3JhcGggcmVjZWl2ZWQgYnkgdGhlIHdlYiBzZXJ2aWNlPC9wPgorPHA+PGEgaHJlZj0iLi9NYXBJZHMuaHRtbCI+TWFwSWRzPC9hPiBhc3NpZ25zIG5ldyBpZHMgdG8gdGhlIGRpc2NvdmVyZWQgaW5zdGFuY2VzIGluIHRoZSBvYmplY3QgZ3JhcGg8L3A+Cis8cD5Bbnl0aGluZyB1bmRlciB0aGUgc3RvcmFnZSBwYWNrYWdlIGlzIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlPC9wPjwvZGl2PgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisKKyAgICA8aHIvPgorCisgICAgPGZvb3Rlcj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyBzcGFuMTIiPkNvcHlyaWdodCAmY29weTsgICAgICAgICAgICAgICAgICAgIDIwMTUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZyI+QXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb248L2E+LgorICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8cCBpZD0icG93ZXJlZEJ5IiBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnLyIgdGl0bGU9IkJ1aWx0IGJ5IE1hdmVuIiBjbGFzcz0icG93ZXJlZEJ5Ij4KKyAgICAgICAgPGltZyBjbGFzcz0iYnVpbHRCeSIgYWx0PSJCdWlsdCBieSBNYXZlbiIgc3JjPSIuL2ltYWdlcy9sb2dvcy9tYXZlbi1mZWF0aGVyLnBuZyIgLz4KKyAgICAgIDwvYT4KKyAgICAgICAgICAgICAgPC9wPgorICAgICAgICAKKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICA8L2Zvb3Rlcj4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9hcGkvYXBwbGUtdG91Y2gtaWNvbi5wbmcgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9hcHBsZS10b3VjaC1pY29uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDJmYzM5Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvYXBwbGUtdG91Y2gtaWNvbi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9hcGkvYXBwbGljYXRpb24ud2FkbCBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL2FwcGxpY2F0aW9uLndhZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ2ODVjYgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL2FwcGxpY2F0aW9uLndhZGwKQEAgLTAsMCArMSw0MDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8d2FkbDphcHBsaWNhdGlvbiB4bWxuczp3YWRsPSJodHRwOi8vd2FkbC5kZXYuamF2YS5uZXQvMjAwOS8wMiIgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKyAgPHdhZGw6ZG9jIHhtbG5zOmVudW5jaWF0ZT0iaHR0cDovL2VudW5jaWF0ZS5jb2RlaGF1cy5vcmcvIiBlbnVuY2lhdGU6Z2VuZXJhdGVkQnk9IkVudW5jaWF0ZS0xLjI5Ii8+CisgIDx3YWRsOmdyYW1tYXJzLz4KKyAgPHdhZGw6cmVzb3VyY2VzIGJhc2U9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9hdGxhcy13ZWJhcHAiPgorICAgIDx3YWRsOnJlc291cmNlIHBhdGg9Ii9hcGkvYXRsYXMvZW50aXRpZXMiPgorICAgICAgPHdhZGw6bWV0aG9kIG5hbWU9IlBPU1QiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbU3VibWl0cyBhbiBlbnRpdHkgZGVmaW5pdGlvbiAoaW5zdGFuY2UpIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiB0eXBlLl1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXNwb25zZT4KKyAgICAgICAgICA8d2FkbDpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz4KKyAgICAgICAgPC93YWRsOnJlc3BvbnNlPgorICAgICAgPC93YWRsOm1ldGhvZD4KKyAgICAgIDx3YWRsOm1ldGhvZCBuYW1lPSJHRVQiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbR2V0cyB0aGUgbGlzdCBvZiBlbnRpdGllcyBmb3IgYSBnaXZlbiBlbnRpdHkgdHlwZS5dXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgPHdhZGw6cmVxdWVzdD4KKyAgICAgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJ0eXBlIiBzdHlsZT0icXVlcnkiPgorICAgICAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgICAgICA8IVtDREFUQVtuYW1lIG9mIGEgdHlwZSB3aGljaCBpcyB1bmlxdWVdXT4KKyAgICAgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgICAgPC93YWRsOnBhcmFtPgorICAgICAgICA8L3dhZGw6cmVxdWVzdD4KKyAgICAgICAgPHdhZGw6cmVzcG9uc2U+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgPC93YWRsOnJlc291cmNlPgorICAgIDx3YWRsOnJlc291cmNlIHBhdGg9Ii9hcGkvYXRsYXMvdHlwZXMiPgorICAgICAgPHdhZGw6bWV0aG9kIG5hbWU9IlBPU1QiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbU3VibWl0cyBhIHR5cGUgZGVmaW5pdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gdHlwZSByZXByZXNlbnRpbmcgYSBtZXRhIG1vZGVsIG9mIGEKK2RvbWFpbi4gQ291bGQgcmVwcmVzZW50IHRoaW5ncyBsaWtlIEhpdmUgRGF0YWJhc2UsIEhpdmUgVGFibGUsIGV0Yy5dXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgPHdhZGw6cmVzcG9uc2U+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgICA8d2FkbDptZXRob2QgbmFtZT0iR0VUIj4KKyAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgIDwhW0NEQVRBW0dldHMgdGhlIGxpc3Qgb2YgdHJhaXQgdHlwZSBuYW1lcyByZWdpc3RlcmVkIGluIHRoZSB0eXBlIHN5c3RlbS5dXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgPHdhZGw6cmVxdWVzdD4KKyAgICAgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJ0eXBlIiBzdHlsZT0icXVlcnkiPgorICAgICAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgICAgICA8IVtDREFUQVt0eXBlIHNob3VsZCBiZSB0aGUgbmFtZSBvZiBlbnVtCitvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0udHlwZXMuRGF0YVR5cGVzLlR5cGVDYXRlZ29yeQorVHlwaWNhbGx5LCB3b3VsZCBiZSBvbmUgb2YgYWxsLCBUUkFJVCwgQ0xBU1MsIEVOVU0sIFNUUlVDVF1dPgorICAgICAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgICA8L3dhZGw6cGFyYW0+CisgICAgICAgIDwvd2FkbDpyZXF1ZXN0PgorICAgICAgICA8d2FkbDpyZXNwb25zZT4KKyAgICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgICA8IVtDREFUQVtlbnRpdHkgbmFtZXMgcmVzcG9uc2UgcGF5bG9hZCBhcyBqc29uXV0+CisgICAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgICA8d2FkbDpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz4KKyAgICAgICAgPC93YWRsOnJlc3BvbnNlPgorICAgICAgPC93YWRsOm1ldGhvZD4KKyAgICA8L3dhZGw6cmVzb3VyY2U+CisgICAgPHdhZGw6cmVzb3VyY2UgcGF0aD0iL2FwaS9hdGxhcy9hZG1pbi9zdGFjayI+CisgICAgICA8d2FkbDptZXRob2QgbmFtZT0iR0VUIj4KKyAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgIDwhW0NEQVRBW0ZldGNoZXMgdGhlIHRocmVhZCBzdGFjayBkdW1wIGZvciB0aGlzIGFwcGxpY2F0aW9uLl1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXNwb25zZT4KKyAgICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgICA8IVtDREFUQVtqc29uIHJlcHJlc2VudGluZyB0aGUgdGhyZWFkIHN0YWNrIGR1bXAuXV0+CisgICAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgICA8d2FkbDpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9InRleHQvcGxhaW4iLz4KKyAgICAgICAgPC93YWRsOnJlc3BvbnNlPgorICAgICAgPC93YWRsOm1ldGhvZD4KKyAgICA8L3dhZGw6cmVzb3VyY2U+CisgICAgPHdhZGw6cmVzb3VyY2UgcGF0aD0iL2FwaS9hdGxhcy9hZG1pbi92ZXJzaW9uIj4KKyAgICAgIDx3YWRsOm1ldGhvZCBuYW1lPSJHRVQiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbRmV0Y2hlcyB0aGUgdmVyc2lvbiBmb3IgdGhpcyBhcHBsaWNhdGlvbi5dXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgPHdhZGw6cmVzcG9uc2U+CisgICAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgICAgPCFbQ0RBVEFbanNvbiByZXByZXNlbnRpbmcgdGhlIHZlcnNpb24uXV0+CisgICAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgICA8d2FkbDpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz4KKyAgICAgICAgPC93YWRsOnJlc3BvbnNlPgorICAgICAgPC93YWRsOm1ldGhvZD4KKyAgICA8L3dhZGw6cmVzb3VyY2U+CisgICAgPHdhZGw6cmVzb3VyY2UgcGF0aD0iL2FwaS9hdGxhcy9kaXNjb3Zlcnkvc2VhcmNoIj4KKyAgICAgIDx3YWRsOm1ldGhvZCBuYW1lPSJHRVQiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbU2VhcmNoIHVzaW5nIGEgZ2l2ZW4gcXVlcnkuXV0+CisgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgIDx3YWRsOnJlcXVlc3Q+CisgICAgICAgICAgPHdhZGw6cGFyYW0gbmFtZT0icXVlcnkiIHN0eWxlPSJxdWVyeSI+CisgICAgICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgICAgIDwhW0NEQVRBW3NlYXJjaCBxdWVyeSBpbiByYXcgZ3JlbWxpbiBvciBEU0wgZm9ybWF0IGZhbGxpbmcgYmFjayB0byBmdWxsIHRleHQuXV0+CisgICAgICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICAgIDwvd2FkbDpwYXJhbT4KKyAgICAgICAgPC93YWRsOnJlcXVlc3Q+CisgICAgICAgIDx3YWRsOnJlc3BvbnNlPgorICAgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICAgIDwhW0NEQVRBW0pTT04gcmVwcmVzZW50aW5nIHRoZSB0eXBlIGFuZCByZXN1bHRzLl1dPgorICAgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgPC93YWRsOnJlc291cmNlPgorICAgIDx3YWRsOnJlc291cmNlIHBhdGg9Ii9hcGkvYXRsYXMvZW50aXRpZXMve2d1aWR9Ij4KKyAgICAgIDx3YWRsOnBhcmFtIG5hbWU9Imd1aWQiIHN0eWxlPSJ0ZW1wbGF0ZSI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtHVUlEIGZvciB0aGUgZW50aXR5XV0+CisgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICA8L3dhZGw6cGFyYW0+CisgICAgICA8d2FkbDptZXRob2QgbmFtZT0iR0VUIj4KKyAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgIDwhW0NEQVRBW0ZldGNoIHRoZSBjb21wbGV0ZSBkZWZpbml0aW9uIG9mIGFuIGVudGl0eSBnaXZlbiBpdHMgR1VJRC5dXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgPHdhZGw6cmVxdWVzdC8+CisgICAgICAgIDx3YWRsOnJlc3BvbnNlPgorICAgICAgICAgIDx3YWRsOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPgorICAgICAgICA8L3dhZGw6cmVzcG9uc2U+CisgICAgICA8L3dhZGw6bWV0aG9kPgorICAgICAgPHdhZGw6bWV0aG9kIG5hbWU9IlBVVCI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtBZGRzIHByb3BlcnR5IHRvIHRoZSBnaXZlbiBlbnRpdHkgaWRdXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgPHdhZGw6cmVxdWVzdD4KKyAgICAgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJwcm9wZXJ0eSIgc3R5bGU9InF1ZXJ5Ij4KKyAgICAgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICAgICAgPCFbQ0RBVEFbcHJvcGVydHkgdG8gYWRkXV0+CisgICAgICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICAgIDwvd2FkbDpwYXJhbT4KKyAgICAgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJ2YWx1ZSIgc3R5bGU9InF1ZXJ5Ij4KKyAgICAgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICAgICAgPCFbQ0RBVEFbcHJvcGVydHkncyB2YWx1ZV1dPgorICAgICAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgICA8L3dhZGw6cGFyYW0+CisgICAgICAgIDwvd2FkbDpyZXF1ZXN0PgorICAgICAgICA8d2FkbDpyZXNwb25zZT4KKyAgICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgICA8IVtDREFUQVtyZXNwb25zZSBwYXlsb2FkIGFzIGpzb25dXT4KKyAgICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICAgIDx3YWRsOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPgorICAgICAgICA8L3dhZGw6cmVzcG9uc2U+CisgICAgICA8L3dhZGw6bWV0aG9kPgorICAgIDwvd2FkbDpyZXNvdXJjZT4KKyAgICA8d2FkbDpyZXNvdXJjZSBwYXRoPSIvYXBpL2F0bGFzL2dyYXBoL3ZlcnRpY2VzIj4KKyAgICAgIDx3YWRsOm1ldGhvZCBuYW1lPSJHRVQiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbR2V0IGEgbGlzdCBvZiB2ZXJ0aWNlcyBtYXRjaGluZyBhIHByb3BlcnR5IGtleSBhbmQgYSB2YWx1ZS4KKzxwLz4KK0dFVCBodHRwOi8vaG9zdC9tZXRhZGF0YS9saW5lYWdlL3ZlcnRpY2VzP2tleT08a2V5PiZ2YWx1ZT08dmFsdWU+CitncmFwaC5nZXRWZXJ0aWNlcyhrZXksIHZhbHVlKTtdXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgPHdhZGw6cmVxdWVzdD4KKyAgICAgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJrZXkiIHN0eWxlPSJxdWVyeSIvPgorICAgICAgICAgIDx3YWRsOnBhcmFtIG5hbWU9InZhbHVlIiBzdHlsZT0icXVlcnkiLz4KKyAgICAgICAgPC93YWRsOnJlcXVlc3Q+CisgICAgICAgIDx3YWRsOnJlc3BvbnNlPgorICAgICAgICAgIDx3YWRsOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPgorICAgICAgICA8L3dhZGw6cmVzcG9uc2U+CisgICAgICA8L3dhZGw6bWV0aG9kPgorICAgIDwvd2FkbDpyZXNvdXJjZT4KKyAgICA8d2FkbDpyZXNvdXJjZSBwYXRoPSIvYXBpL2F0bGFzL3R5cGVzL3t0eXBlTmFtZX0iPgorICAgICAgPHdhZGw6cGFyYW0gbmFtZT0idHlwZU5hbWUiIHN0eWxlPSJ0ZW1wbGF0ZSI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtuYW1lIG9mIGEgdHlwZSB3aGljaCBpcyB1bmlxdWUuXV0+CisgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICA8L3dhZGw6cGFyYW0+CisgICAgICA8d2FkbDptZXRob2QgbmFtZT0iR0VUIj4KKyAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgIDwhW0NEQVRBW0ZldGNoIHRoZSBjb21wbGV0ZSBkZWZpbml0aW9uIG9mIGEgZ2l2ZW4gdHlwZSBuYW1lIHdoaWNoIGlzIHVuaXF1ZS5dXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgPHdhZGw6cmVxdWVzdC8+CisgICAgICAgIDx3YWRsOnJlc3BvbnNlPgorICAgICAgICAgIDx3YWRsOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPgorICAgICAgICA8L3dhZGw6cmVzcG9uc2U+CisgICAgICA8L3dhZGw6bWV0aG9kPgorICAgIDwvd2FkbDpyZXNvdXJjZT4KKyAgICA8d2FkbDpyZXNvdXJjZSBwYXRoPSIvYXBpL2F0bGFzL2Rpc2NvdmVyeS9zZWFyY2gvZHNsIj4KKyAgICAgIDx3YWRsOm1ldGhvZCBuYW1lPSJHRVQiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbU2VhcmNoIHVzaW5nIHF1ZXJ5IERTTCBmb3JtYXQuXV0+CisgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgIDx3YWRsOnJlcXVlc3Q+CisgICAgICAgICAgPHdhZGw6cGFyYW0gbmFtZT0icXVlcnkiIHN0eWxlPSJxdWVyeSI+CisgICAgICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgICAgIDwhW0NEQVRBW3NlYXJjaCBxdWVyeSBpbiBEU0wgZm9ybWF0Ll1dPgorICAgICAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgICA8L3dhZGw6cGFyYW0+CisgICAgICAgIDwvd2FkbDpyZXF1ZXN0PgorICAgICAgICA8d2FkbDpyZXNwb25zZT4KKyAgICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgICA8IVtDREFUQVtKU09OIHJlcHJlc2VudGluZyB0aGUgdHlwZSBhbmQgcmVzdWx0cy5dXT4KKyAgICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICAgIDx3YWRsOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPgorICAgICAgICA8L3dhZGw6cmVzcG9uc2U+CisgICAgICA8L3dhZGw6bWV0aG9kPgorICAgIDwvd2FkbDpyZXNvdXJjZT4KKyAgICA8d2FkbDpyZXNvdXJjZSBwYXRoPSIvYXBpL2F0bGFzL2Rpc2NvdmVyeS9zZWFyY2gvZnVsbHRleHQiPgorICAgICAgPHdhZGw6bWV0aG9kIG5hbWU9IkdFVCI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtTZWFyY2ggdXNpbmcgZnVsbCB0ZXh0IHNlYXJjaC5dXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgPHdhZGw6cmVxdWVzdD4KKyAgICAgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJxdWVyeSIgc3R5bGU9InF1ZXJ5Ij4KKyAgICAgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICAgICAgPCFbQ0RBVEFbc2VhcmNoIHF1ZXJ5Ll1dPgorICAgICAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgICA8L3dhZGw6cGFyYW0+CisgICAgICAgIDwvd2FkbDpyZXF1ZXN0PgorICAgICAgICA8d2FkbDpyZXNwb25zZT4KKyAgICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgICA8IVtDREFUQVtKU09OIHJlcHJlc2VudGluZyB0aGUgdHlwZSBhbmQgcmVzdWx0cy5dXT4KKyAgICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICAgIDx3YWRsOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPgorICAgICAgICA8L3dhZGw6cmVzcG9uc2U+CisgICAgICA8L3dhZGw6bWV0aG9kPgorICAgIDwvd2FkbDpyZXNvdXJjZT4KKyAgICA8d2FkbDpyZXNvdXJjZSBwYXRoPSIvYXBpL2F0bGFzL2Rpc2NvdmVyeS9zZWFyY2gvZ3JlbWxpbiI+CisgICAgICA8d2FkbDptZXRob2QgbmFtZT0iR0VUIj4KKyAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgIDwhW0NEQVRBW1NlYXJjaCB1c2luZyByYXcgZ3JlbWxpbiBxdWVyeSBmb3JtYXQuXV0+CisgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgIDx3YWRsOnJlcXVlc3Q+CisgICAgICAgICAgPHdhZGw6cGFyYW0gbmFtZT0icXVlcnkiIHN0eWxlPSJxdWVyeSI+CisgICAgICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgICAgIDwhW0NEQVRBW3NlYXJjaCBxdWVyeSBpbiByYXcgZ3JlbWxpbiBmb3JtYXQuXV0+CisgICAgICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICAgIDwvd2FkbDpwYXJhbT4KKyAgICAgICAgPC93YWRsOnJlcXVlc3Q+CisgICAgICAgIDx3YWRsOnJlc3BvbnNlPgorICAgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICAgIDwhW0NEQVRBW0pTT04gcmVwcmVzZW50aW5nIHRoZSB0eXBlIGFuZCByZXN1bHRzLl1dPgorICAgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgPC93YWRsOnJlc291cmNlPgorICAgIDx3YWRsOnJlc291cmNlIHBhdGg9Ii9hcGkvYXRsYXMvZW50aXRpZXMve2d1aWR9L3RyYWl0cyI+CisgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJndWlkIiBzdHlsZT0idGVtcGxhdGUiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbZ2xvYmFsbHkgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBlbnRpdHldXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgIDwvd2FkbDpwYXJhbT4KKyAgICAgIDx3YWRsOm1ldGhvZCBuYW1lPSJHRVQiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbR2V0cyB0aGUgbGlzdCBvZiB0cmFpdCBuYW1lcyBmb3IgYSBnaXZlbiBlbnRpdHkgcmVwcmVzZW50ZWQgYnkgYSBndWlkLl1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXF1ZXN0Lz4KKyAgICAgICAgPHdhZGw6cmVzcG9uc2U+CisgICAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgICAgPCFbQ0RBVEFbYSBsaXN0IG9mIHRyYWl0IG5hbWVzIGZvciB0aGUgZ2l2ZW4gZW50aXR5IGd1aWRdXT4KKyAgICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICAgIDx3YWRsOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPgorICAgICAgICA8L3dhZGw6cmVzcG9uc2U+CisgICAgICA8L3dhZGw6bWV0aG9kPgorICAgICAgPHdhZGw6bWV0aG9kIG5hbWU9IlBPU1QiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbQWRkcyBhIG5ldyB0cmFpdCB0byBhbiBleGlzdGluZyBlbnRpdHkgcmVwcmVzZW50ZWQgYnkgYSBndWlkLl1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXF1ZXN0Lz4KKyAgICAgICAgPHdhZGw6cmVzcG9uc2U+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgPC93YWRsOnJlc291cmNlPgorICAgIDx3YWRsOnJlc291cmNlIHBhdGg9Ii9hcGkvYXRsYXMvZ3JhcGgvZWRnZXMve2lkfSI+CisgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJpZCIgc3R5bGU9InRlbXBsYXRlIi8+CisgICAgICA8d2FkbDptZXRob2QgbmFtZT0iR0VUIj4KKyAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgIDwhW0NEQVRBW0dldCBhIHNpbmdsZSBlZGdlIHdpdGggYSB1bmlxdWUgaWQuCisKK0dFVCBodHRwOi8vaG9zdC9tZXRhZGF0YS9saW5lYWdlL2VkZ2VzL2lkCitncmFwaC5nZXRFZGdlKGlkKTtdXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgPHdhZGw6cmVxdWVzdC8+CisgICAgICAgIDx3YWRsOnJlc3BvbnNlPgorICAgICAgICAgIDx3YWRsOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPgorICAgICAgICA8L3dhZGw6cmVzcG9uc2U+CisgICAgICA8L3dhZGw6bWV0aG9kPgorICAgIDwvd2FkbDpyZXNvdXJjZT4KKyAgICA8d2FkbDpyZXNvdXJjZSBwYXRoPSIvYXBpL2F0bGFzL2dyYXBoL3ZlcnRpY2VzL3tpZH0iPgorICAgICAgPHdhZGw6cGFyYW0gbmFtZT0iaWQiIHN0eWxlPSJ0ZW1wbGF0ZSIvPgorICAgICAgPHdhZGw6bWV0aG9kIG5hbWU9IkdFVCI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtHZXQgYSBzaW5nbGUgdmVydGV4IHdpdGggYSB1bmlxdWUgaWQuCisKK0dFVCBodHRwOi8vaG9zdC9tZXRhZGF0YS9saW5lYWdlL3ZlcnRpY2VzL2lkCitncmFwaC5nZXRWZXJ0ZXgoaWQpO11dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXF1ZXN0Lz4KKyAgICAgICAgPHdhZGw6cmVzcG9uc2U+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgPC93YWRsOnJlc291cmNlPgorICAgIDx3YWRsOnJlc291cmNlIHBhdGg9Ii9hcGkvYXRsYXMvZW50aXRpZXMve2d1aWR9L3RyYWl0cy97dHJhaXROYW1lfSI+CisgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJndWlkIiBzdHlsZT0idGVtcGxhdGUiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbZ2xvYmFsbHkgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBlbnRpdHldXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgIDwvd2FkbDpwYXJhbT4KKyAgICAgIDx3YWRsOnBhcmFtIG5hbWU9InRyYWl0TmFtZSIgc3R5bGU9InRlbXBsYXRlIj4KKyAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgIDwhW0NEQVRBW25hbWUgb2YgdGhlIHRyYWl0XV0+CisgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICA8L3dhZGw6cGFyYW0+CisgICAgICA8d2FkbDptZXRob2QgbmFtZT0iREVMRVRFIj4KKyAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgIDwhW0NEQVRBW0RlbGV0ZXMgYSBnaXZlbiB0cmFpdCBmcm9tIGFuIGV4aXN0aW5nIGVudGl0eSByZXByZXNlbnRlZCBieSBhIGd1aWQuXV0+CisgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgIDx3YWRsOnJlcXVlc3QvPgorICAgICAgICA8d2FkbDpyZXNwb25zZT4KKyAgICAgICAgICA8d2FkbDpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz4KKyAgICAgICAgPC93YWRsOnJlc3BvbnNlPgorICAgICAgPC93YWRsOm1ldGhvZD4KKyAgICA8L3dhZGw6cmVzb3VyY2U+CisgICAgPHdhZGw6cmVzb3VyY2UgcGF0aD0iL2FwaS9hdGxhcy9ncmFwaC92ZXJ0aWNlcy9wcm9wZXJ0aWVzL3tpZH0iPgorICAgICAgPHdhZGw6cGFyYW0gbmFtZT0iaWQiIHN0eWxlPSJ0ZW1wbGF0ZSIvPgorICAgICAgPHdhZGw6bWV0aG9kIG5hbWU9IkdFVCI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtHZXQgcHJvcGVydGllcyBmb3IgYSBzaW5nbGUgdmVydGV4IHdpdGggYSB1bmlxdWUgaWQuCitUaGlzIGlzIE5PVCBhIHJleHN0ZXIgQVBJLgorPHAvPgorR0VUIGh0dHA6Ly9ob3N0L21ldGFkYXRhL2xpbmVhZ2UvdmVydGljZXMvcHJvcGVydGllcy9pZF1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXF1ZXN0PgorICAgICAgICAgIDx3YWRsOnBhcmFtIG5hbWU9InJlbGF0aW9uc2hpcHMiIHN0eWxlPSJxdWVyeSIvPgorICAgICAgICA8L3dhZGw6cmVxdWVzdD4KKyAgICAgICAgPHdhZGw6cmVzcG9uc2U+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgPC93YWRsOnJlc291cmNlPgorICAgIDx3YWRsOnJlc291cmNlIHBhdGg9Ii9hcGkvYXRsYXMvZ3JhcGgvdmVydGljZXMve2lkfS97ZGlyZWN0aW9ufSI+CisgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJpZCIgc3R5bGU9InRlbXBsYXRlIi8+CisgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJkaXJlY3Rpb24iIHN0eWxlPSJ0ZW1wbGF0ZSIvPgorICAgICAgPHdhZGw6bWV0aG9kIG5hbWU9IkdFVCI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtHZXQgYSBsaXN0IG9mIGFkamFjZW50IGVkZ2VzIHdpdGggYSBkaXJlY3Rpb24uCisKK0dFVCBodHRwOi8vaG9zdC9tZXRhZGF0YS9saW5lYWdlL3ZlcnRpY2VzL2lkL2RpcmVjdGlvbgorZ3JhcGguZ2V0VmVydGV4KGlkKS5nZXR7RGlyZWN0aW9ufUVkZ2VzKCk7CitkaXJlY3Rpb246IHsoPyFvdXRFKSg/IWJvdGhFKSg/IWluRSkoPyFvdXQpKD8hYm90aCkoPyFpbikoPyFxdWVyeSkuK31dXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgPHdhZGw6cmVxdWVzdC8+CisgICAgICAgIDx3YWRsOnJlc3BvbnNlPgorICAgICAgICAgIDx3YWRsOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPgorICAgICAgICA8L3dhZGw6cmVzcG9uc2U+CisgICAgICA8L3dhZGw6bWV0aG9kPgorICAgIDwvd2FkbDpyZXNvdXJjZT4KKyAgICA8d2FkbDpyZXNvdXJjZSBwYXRoPSIvYXBpL2F0bGFzL2xpbmVhZ2UvaGl2ZS90YWJsZS97dGFibGVOYW1lfS9zY2hlbWEiPgorICAgICAgPHdhZGw6cGFyYW0gbmFtZT0idGFibGVOYW1lIiBzdHlsZT0idGVtcGxhdGUiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbdGFibGUgbmFtZV1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgPC93YWRsOnBhcmFtPgorICAgICAgPHdhZGw6bWV0aG9kIG5hbWU9IkdFVCI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtSZXR1cm4gdGhlIHNjaGVtYSBmb3IgdGhlIGdpdmVuIHRhYmxlTmFtZS5dXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgPHdhZGw6cmVxdWVzdC8+CisgICAgICAgIDx3YWRsOnJlc3BvbnNlPgorICAgICAgICAgIDx3YWRsOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPgorICAgICAgICA8L3dhZGw6cmVzcG9uc2U+CisgICAgICA8L3dhZGw6bWV0aG9kPgorICAgIDwvd2FkbDpyZXNvdXJjZT4KKyAgICA8d2FkbDpyZXNvdXJjZSBwYXRoPSIvYXBpL2F0bGFzL2xpbmVhZ2UvaGl2ZS90YWJsZS97dGFibGVOYW1lfS9pbnB1dHMvZ3JhcGgiPgorICAgICAgPHdhZGw6cGFyYW0gbmFtZT0idGFibGVOYW1lIiBzdHlsZT0idGVtcGxhdGUiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbdGFibGUgbmFtZV1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgPC93YWRsOnBhcmFtPgorICAgICAgPHdhZGw6bWV0aG9kIG5hbWU9IkdFVCI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtSZXR1cm5zIHRoZSBpbnB1dHMgZ3JhcGggZm9yIGEgZ2l2ZW4gZW50aXR5Ll1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXF1ZXN0Lz4KKyAgICAgICAgPHdhZGw6cmVzcG9uc2U+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgPC93YWRsOnJlc291cmNlPgorICAgIDx3YWRsOnJlc291cmNlIHBhdGg9Ii9hcGkvYXRsYXMvbGluZWFnZS9oaXZlL3RhYmxlL3t0YWJsZU5hbWV9L291dHB1dHMvZ3JhcGgiPgorICAgICAgPHdhZGw6cGFyYW0gbmFtZT0idGFibGVOYW1lIiBzdHlsZT0idGVtcGxhdGUiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbdGFibGUgbmFtZV1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgPC93YWRsOnBhcmFtPgorICAgICAgPHdhZGw6bWV0aG9kIG5hbWU9IkdFVCI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtSZXR1cm5zIHRoZSBvdXRwdXRzIGdyYXBoIGZvciBhIGdpdmVuIGVudGl0eS5dXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgPHdhZGw6cmVxdWVzdC8+CisgICAgICAgIDx3YWRsOnJlc3BvbnNlPgorICAgICAgICAgIDx3YWRsOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPgorICAgICAgICA8L3dhZGw6cmVzcG9uc2U+CisgICAgICA8L3dhZGw6bWV0aG9kPgorICAgIDwvd2FkbDpyZXNvdXJjZT4KKyAgPC93YWRsOnJlc291cmNlcz4KKzwvd2FkbDphcHBsaWNhdGlvbj4KZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvYXBpL2Nyb3NzZG9tYWluLnhtbCBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL2Nyb3NzZG9tYWluLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDQyOTI5Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvY3Jvc3Nkb21haW4ueG1sCkBAIC0wLDAgKzEsMjUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIGNyb3NzLWRvbWFpbi1wb2xpY3kgU1lTVEVNICJodHRwOi8vd3d3LmFkb2JlLmNvbS94bWwvZHRkcy9jcm9zcy1kb21haW4tcG9saWN5LmR0ZCI+Cis8Y3Jvc3MtZG9tYWluLXBvbGljeT4KKyAgCisgIAorPCEtLSBSZWFkIHRoaXM6IHd3dy5hZG9iZS5jb20vZGV2bmV0L2FydGljbGVzL2Nyb3NzZG9tYWluX3BvbGljeV9maWxlX3NwZWMuaHRtbCAtLT4KKworPCEtLSBNb3N0IHJlc3RyaWN0aXZlIHBvbGljeTogLS0+CisJPHNpdGUtY29udHJvbCBwZXJtaXR0ZWQtY3Jvc3MtZG9tYWluLXBvbGljaWVzPSJub25lIi8+CisJCisJCisJCis8IS0tIExlYXN0IHJlc3RyaWN0aXZlIHBvbGljeTogLS0+Cis8IS0tCisJPHNpdGUtY29udHJvbCBwZXJtaXR0ZWQtY3Jvc3MtZG9tYWluLXBvbGljaWVzPSJhbGwiLz4KKwk8YWxsb3ctYWNjZXNzLWZyb20gZG9tYWluPSIqIiB0by1wb3J0cz0iKiIgc2VjdXJlPSJmYWxzZSIvPgorCTxhbGxvdy1odHRwLXJlcXVlc3QtaGVhZGVycy1mcm9tIGRvbWFpbj0iKiIgaGVhZGVycz0iKiIgc2VjdXJlPSJmYWxzZSIvPgorLS0+Cis8IS0tCisgIElmIHlvdSBob3N0IGEgY3Jvc3Nkb21haW4ueG1sIGZpbGUgd2l0aCBhbGxvdy1hY2Nlc3MtZnJvbSBkb21haW494oCcKuKAnSAJIAkKKyAgYW5kIGRvbuKAmXQgdW5kZXJzdGFuZCBhbGwgb2YgdGhlIHBvaW50cyBkZXNjcmliZWQgaGVyZSwgeW91IHByb2JhYmx5IAkgCQorICBoYXZlIGEgbmFzdHkgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eS4gfiBzaW1vbiB3aWxsaXNvbgorLS0+CisKKzwvY3Jvc3MtZG9tYWluLXBvbGljeT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2FwaS9jc3MvaG9tZS5naWYgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9jc3MvaG9tZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlhYTMwNgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL2Nzcy9ob21lLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2FwaS9jc3MvcHJldHRpZnkuY3NzIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvY3NzL3ByZXR0aWZ5LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDRiM2EyCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvY3NzL3ByZXR0aWZ5LmNzcwpAQCAtMCwwICsxIEBACisucGxue2NvbG9yOiMwMDB9QG1lZGlhIHNjcmVlbnsuc3Rye2NvbG9yOiMwODB9Lmt3ZHtjb2xvcjojMDA4fS5jb217Y29sb3I6IzgwMH0udHlwe2NvbG9yOiM2MDZ9LmxpdHtjb2xvcjojMDY2fS5wdW4sLm9wbiwuY2xve2NvbG9yOiM2NjB9LnRhZ3tjb2xvcjojMDA4fS5hdG57Y29sb3I6IzYwNn0uYXR2e2NvbG9yOiMwODB9LmRlYywudmFye2NvbG9yOiM2MDZ9LmZ1bntjb2xvcjpyZWR9fUBtZWRpYSBwcmludCxwcm9qZWN0aW9uey5zdHJ7Y29sb3I6IzA2MH0ua3dke2NvbG9yOiMwMDY7Zm9udC13ZWlnaHQ6Ym9sZH0uY29te2NvbG9yOiM2MDA7Zm9udC1zdHlsZTppdGFsaWN9LnR5cHtjb2xvcjojNDA0O2ZvbnQtd2VpZ2h0OmJvbGR9LmxpdHtjb2xvcjojMDQ0fS5wdW4sLm9wbiwuY2xve2NvbG9yOiM0NDB9LnRhZ3tjb2xvcjojMDA2O2ZvbnQtd2VpZ2h0OmJvbGR9LmF0bntjb2xvcjojNDA0fS5hdHZ7Y29sb3I6IzA2MH19cHJlLnByZXR0eXByaW50e3BhZGRpbmc6MnB4O2JvcmRlcjoxcHggc29saWQgIzg4OH1vbC5saW5lbnVtc3ttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfWxpLkwwLGxpLkwxLGxpLkwyLGxpLkwzLGxpLkw1LGxpLkw2LGxpLkw3LGxpLkw4e2xpc3Qtc3R5bGUtdHlwZTpub25lfWxpLkwxLGxpLkwzLGxpLkw1LGxpLkw3LGxpLkw5e2JhY2tncm91bmQ6I2VlZX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2FwaS9jc3Mvc3R5bGUuY3NzIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvY3NzL3N0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGUyOWNjCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvY3NzL3N0eWxlLmNzcwpAQCAtMCwwICsxLDc1OSBAQAorLyoqCisgKiBIVE1MNSDinLAgQm9pbGVycGxhdGUKKyAqCisgKiBzdHlsZS5jc3MgY29udGFpbnMgYSByZXNldCwgZm9udCBub3JtYWxpemF0aW9uIGFuZCBzb21lIGJhc2Ugc3R5bGVzLgorICoKKyAqIENyZWRpdCBpcyBsZWZ0IHdoZXJlIGNyZWRpdCBpcyBkdWUuCisgKiBNdWNoIGluc3BpcmF0aW9uIHdhcyB0YWtlbiBmcm9tIHRoZXNlIHByb2plY3RzOgorICogLSB5dWkueWFob29hcGlzLmNvbS8yLjguMS9idWlsZC9iYXNlL2Jhc2UuY3NzCisgKiAtIGNhbWVuZGVzaWduLmNvbS9kZXNpZ24vCisgKiAtIHByYWVnbmFuei5kZS93ZWJsb2cvaHRtbGNzc2pzLWtpY2tzdGFydAorICovCisKKworLyoqCisgKiBodG1sNWRvY3Rvci5jb20gUmVzZXQgU3R5bGVzaGVldCAoRXJpYyBNZXllcidzIFJlc2V0IFJlbG9hZGVkICsgSFRNTDUgYmFzZWxpbmUpCisgKiB2MS42LjEgMjAxMC0wOS0xNyB8IEF1dGhvcnM6IEVyaWMgTWV5ZXIgJiBSaWNoYXJkIENsYXJrCisgKiBodG1sNWRvY3Rvci5jb20vaHRtbC01LXJlc2V0LXN0eWxlc2hlZXQvCisgKi8KKworaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBvYmplY3QsIGlmcmFtZSwKK2gxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSwKK2FiYnIsIGFkZHJlc3MsIGNpdGUsIGNvZGUsIGRlbCwgZGZuLCBlbSwgaW1nLCBpbnMsIGtiZCwgcSwgc2FtcCwKK3NtYWxsLCBzdHJvbmcsIHN1Yiwgc3VwLCB2YXIsIGIsIGksIGRsLCBkdCwgZGQsIG9sLCB1bCwgbGksCitmaWVsZHNldCwgZm9ybSwgbGFiZWwsIGxlZ2VuZCwKK3RhYmxlLCBjYXB0aW9uLCB0Ym9keSwgdGZvb3QsIHRoZWFkLCB0ciwgdGgsIHRkLAorYXJ0aWNsZSwgYXNpZGUsIGNhbnZhcywgZGV0YWlscywgZmlnY2FwdGlvbiwgZmlndXJlLAorZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWVudSwgbmF2LCBzZWN0aW9uLCBzdW1tYXJ5LAordGltZSwgbWFyaywgYXVkaW8sIHZpZGVvIHsKKyAgbWFyZ2luOiAwOworICBwYWRkaW5nOiAwOworICBib3JkZXI6IDA7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgZm9udDogaW5oZXJpdDsKKyAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOworfQorCithcnRpY2xlLCBhc2lkZSwgZGV0YWlscywgZmlnY2FwdGlvbiwgZmlndXJlLAorZm9vdGVyLCBoZWFkZXIsIGhncm91cCwgbWVudSwgbmF2LCBzZWN0aW9uIHsKKyAgZGlzcGxheTogYmxvY2s7Cit9CisKK2Jsb2NrcXVvdGUsIHEgeyBxdW90ZXM6IG5vbmU7IH0KKworYmxvY2txdW90ZTpiZWZvcmUsIGJsb2NrcXVvdGU6YWZ0ZXIsCitxOmJlZm9yZSwgcTphZnRlciB7IGNvbnRlbnQ6ICIiOyBjb250ZW50OiBub25lOyB9CisKK2lucyB7IGJhY2tncm91bmQtY29sb3I6ICNmZjk7IGNvbG9yOiAjMDAwOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0KKworbWFyayB7IGJhY2tncm91bmQtY29sb3I6ICNmZjk7IGNvbG9yOiAjMDAwOyBmb250LXN0eWxlOiBpdGFsaWM7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CisKK2RlbCB7IHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyB9CisKK2FiYnJbdGl0bGVdLCBkZm5bdGl0bGVdIHsgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZDsgY3Vyc29yOiBoZWxwOyB9CisKK3RhYmxlIHsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgYm9yZGVyLXNwYWNpbmc6IDA7IH0KKworaHIgeyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxcHg7IGJvcmRlcjogMDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7IG1hcmdpbjogMWVtIDA7IHBhZGRpbmc6IDA7IH0KKworaW5wdXQsIHNlbGVjdCB7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0KKworCisvKioKKyAqIEZvbnQgbm9ybWFsaXphdGlvbiBpbnNwaXJlZCBieSBZVUkgTGlicmFyeSdzIGZvbnRzLmNzczogZGV2ZWxvcGVyLnlhaG9vLmNvbS95dWkvCisgKi8KKworYm9keSB7IGZvbnQ6MTNweC8xLjIzMSBzYW5zLXNlcmlmOyAqZm9udC1zaXplOnNtYWxsOyB9IC8qIEhhY2sgcmV0YWluZWQgdG8gcHJlc2VydmUgc3BlY2lmaWNpdHkgKi8KK3NlbGVjdCwgaW5wdXQsIHRleHRhcmVhLCBidXR0b24geyBmb250Ojk5JSBzYW5zLXNlcmlmOyB9CisKKy8qIE5vcm1hbGl6ZSBtb25vc3BhY2Ugc2l6aW5nOgorICAgZW4ud2lraXBlZGlhLm9yZy93aWtpL01lZGlhV2lraV90YWxrOkNvbW1vbi5jc3MvQXJjaGl2ZV8xMSNUZWxldHlwZV9zdHlsZV9maXhfZm9yX0Nocm9tZSAqLworcHJlLCBjb2RlLCBrYmQsIHNhbXAgeyBmb250LWZhbWlseTogbW9ub3NwYWNlLCBzYW5zLXNlcmlmOyB9CisKKworLyoqCisgKiBNaW5pbWFsIGJhc2Ugc3R5bGVzLgorICovCisKKy8qIEFsd2F5cyBmb3JjZSBhIHNjcm9sbGJhciBpbiBub24tSUUgKi8KK2h0bWwgeyBvdmVyZmxvdy15OiBzY3JvbGw7IH0KKworLyogQWNjZXNzaWJsZSBmb2N1cyB0cmVhdG1lbnQ6IHBlb3BsZS5vcGVyYS5jb20vcGF0cmlja2wvZXhwZXJpbWVudHMva2V5Ym9hcmQvdGVzdCAqLworYTpob3ZlciwgYTphY3RpdmUgeyBvdXRsaW5lOiBub25lOyB9CisKK3VsLCBvbCB7IG1hcmdpbi1sZWZ0OiAyZW07IH0KK29sIHsgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsOyB9CisKKy8qIFJlbW92ZSBtYXJnaW5zIGZvciBuYXZpZ2F0aW9uIGxpc3RzICovCituYXYgdWwsIG5hdiBsaSB7IG1hcmdpbjogMDsgbGlzdC1zdHlsZTpub25lOyBsaXN0LXN0eWxlLWltYWdlOiBub25lOyB9CisKK3NtYWxsIHsgZm9udC1zaXplOiA4NSU7IH0KK3N0cm9uZywgdGggeyBmb250LXdlaWdodDogYm9sZDsgfQorCit0ZCB7IHZlcnRpY2FsLWFsaWduOiB0b3A7IH0KKworLyogU2V0IHN1Yiwgc3VwIHdpdGhvdXQgYWZmZWN0aW5nIGxpbmUtaGVpZ2h0OiBnaXN0LmdpdGh1Yi5jb20vNDEzOTMwICovCitzdWIsIHN1cCB7IGZvbnQtc2l6ZTogNzUlOyBsaW5lLWhlaWdodDogMDsgcG9zaXRpb246IHJlbGF0aXZlOyB9CitzdXAgeyB0b3A6IC0wLjVlbTsgfQorc3ViIHsgYm90dG9tOiAtMC4yNWVtOyB9CisKK3ByZSB7CisgIC8qIHd3dy5wYXRoZi5jb20vYmxvZ3MvMjAwOC8wNS9mb3JtYXR0aW5nLXF1b3RlZC1jb2RlLWluLWJsb2ctcG9zdHMtY3NzMjEtd2hpdGUtc3BhY2UtcHJlLXdyYXAvICovCisgIHBhZGRpbmc6IDE1cHg7Cit9CisKK3RleHRhcmVhIHsgb3ZlcmZsb3c6IGF1dG87IH0gLyogd3d3LnNpdGVwb2ludC5jb20vYmxvZ3MvMjAxMC8wOC8yMC9pZS1yZW1vdmUtdGV4dGFyZWEtc2Nyb2xsYmFycy8gKi8KKworLmllNiBsZWdlbmQsIC5pZTcgbGVnZW5kIHsgbWFyZ2luLWxlZnQ6IC03cHg7IH0gCisKKy8qIEFsaWduIGNoZWNrYm94ZXMsIHJhZGlvcywgdGV4dCBpbnB1dHMgd2l0aCB0aGVpciBsYWJlbCBieTogVGhpZXJyeSBLb2JsZW50eiB0amtkZXNpZ24uY29tL2V6LWNzcy9jc3MvYmFzZS5jc3MgICovCitpbnB1dFt0eXBlPSJyYWRpbyJdIHsgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOyB9CitpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsgdmVydGljYWwtYWxpZ246IGJvdHRvbTsgfQorLmllNyBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lOyB9CisuaWU2IGlucHV0IHsgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOyB9CisKKy8qIEhhbmQgY3Vyc29yIG9uIGNsaWNrYWJsZSBpbnB1dCBlbGVtZW50cyAqLworbGFiZWwsIGlucHV0W3R5cGU9ImJ1dHRvbiJdLCBpbnB1dFt0eXBlPSJzdWJtaXQiXSwgaW5wdXRbdHlwZT0iaW1hZ2UiXSwgYnV0dG9uIHsgY3Vyc29yOiBwb2ludGVyOyB9CisKKy8qIFdlYmtpdCBicm93c2VycyBhZGQgYSAycHggbWFyZ2luIG91dHNpZGUgdGhlIGNocm9tZSBvZiBmb3JtIGVsZW1lbnRzICovCitidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhIHsgbWFyZ2luOiAwOyB9CisKKy8qIENvbG9ycyBmb3IgZm9ybSB2YWxpZGl0eSAqLworaW5wdXQ6dmFsaWQsIHRleHRhcmVhOnZhbGlkICAgeyAgfQoraW5wdXQ6aW52YWxpZCwgdGV4dGFyZWE6aW52YWxpZCB7CisgICBib3JkZXItcmFkaXVzOiAxcHg7IC1tb3otYm94LXNoYWRvdzogMHB4IDBweCA1cHggcmVkOyAtd2Via2l0LWJveC1zaGFkb3c6IDBweCAwcHggNXB4IHJlZDsgYm94LXNoYWRvdzogMHB4IDBweCA1cHggcmVkOworfQorLm5vLWJveHNoYWRvdyBpbnB1dDppbnZhbGlkLCAubm8tYm94c2hhZG93IHRleHRhcmVhOmludmFsaWQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBkZGRkOyB9CisKKworLyogVGhlc2Ugc2VsZWN0aW9uIGRlY2xhcmF0aW9ucyBoYXZlIHRvIGJlIHNlcGFyYXRlCisgICBObyB0ZXh0LXNoYWRvdzogdHdpdHRlci5jb20vbWlrZXRheWxyL3N0YXR1cy8xMjIyODgwNTMwMQorICAgQWxzbzogaG90IHBpbmshICovCis6Oi1tb3otc2VsZWN0aW9ueyBiYWNrZ3JvdW5kOiAjRkY1RTk5OyBjb2xvcjojZmZmOyB0ZXh0LXNoYWRvdzogbm9uZTsgfQorOjpzZWxlY3Rpb24geyBiYWNrZ3JvdW5kOiNGRjVFOTk7IGNvbG9yOiNmZmY7IHRleHQtc2hhZG93OiBub25lOyB9CisKKy8qIGoubXAvd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IgKi8KK2E6bGluayB7IC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogI0ZGNUU5OTsgfQorCisvKiBNYWtlIGJ1dHRvbnMgcGxheSBuaWNlIGluIElFOgorICAgd3d3LnZpZ2V0LmNvbS9pbnNwaXJlL3N0eWxpbmctdGhlLWJ1dHRvbi1lbGVtZW50LWluLWludGVybmV0LWV4cGxvcmVyLyAqLworYnV0dG9uIHsgIHdpZHRoOiBhdXRvOyBvdmVyZmxvdzogdmlzaWJsZTsgfQorCisvKiBCaWN1YmljIHJlc2l6aW5nIGZvciBub24tbmF0aXZlIHNpemVkIElNRzoKKyAgIGNvZGUuZmxpY2tyLmNvbS9ibG9nLzIwMDgvMTEvMTIvb24tdWktcXVhbGl0eS10aGUtbGl0dGxlLXRoaW5ncy1jbGllbnQtc2lkZS1pbWFnZS1yZXNpemluZy8gKi8KKy5pZTcgaW1nIHsgLW1zLWludGVycG9sYXRpb24tbW9kZTogYmljdWJpYzsgfQorCisvKioKKyAqIFlvdSBtaWdodCB0d2VhayB0aGVzZS4uCisgKi8KKworYm9keSwgc2VsZWN0LCBpbnB1dCwgdGV4dGFyZWEgeworICAvKiAjNDQ0IGxvb2tzIGJldHRlciB0aGFuIGJsYWNrOiB0d2l0dGVyLmNvbS9IX0ZKL3N0YXR1c2VzLzExODAwNzE5ODU5ICovCisgIGNvbG9yOiAjNDQ0OworICAvKiBTZXQgeW91ciBiYXNlIGZvbnQgaGVyZSwgdG8gYXBwbHkgZXZlbmx5ICovCisgIC8qIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBzZXJpZjsgICovCit9CisKKy8qIEhlYWRlcnMgKGgxLCBoMiwgZXRjKSBoYXZlIG5vIGRlZmF1bHQgZm9udC1zaXplIG9yIG1hcmdpbjsgZGVmaW5lIHRob3NlIHlvdXJzZWxmICovCitoMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KKworYSwgYTphY3RpdmUsIGE6dmlzaXRlZCB7IGNvbG9yOiAjNjA3ODkwOyB9CithOmhvdmVyIHsgY29sb3I6ICMwMzY7IH0KKworCisvKioKKyAqIFByaW1hcnkgc3R5bGVzCisgKgorICogQXV0aG9yOiAKKyAqLworCisKK2JvZHl7dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luOjB9CisuY29udGFpbmVye3RleHQtYWxpZ246bGVmdDtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOjA7bWFyZ2luOjAgYXV0bzt3aWR0aDo4MDBweH0KKy5jb2x1bW57ZmxvYXQ6bGVmdDttYXJnaW46MCA1cHggMCAwO3BhZGRpbmc6MH0KKyogaHRtbCAuY29sdW1ue292ZXJmbG93LXg6aGlkZGVufQorLmJvcmRlcntwYWRkaW5nLXJpZ2h0OjJweDttYXJnaW4tcmlnaHQ6MnB4O2JvcmRlci1yaWdodDoxcHggc29saWQgI2RkZH0KKy5zcGFuLTF7d2lkdGg6MzVweH0KKy5zcGFuLTJ7d2lkdGg6NzVweH0KKy5zcGFuLTN7d2lkdGg6MTE1cHh9Cisuc3Bhbi00e3dpZHRoOjE1NXB4fQorLnNwYW4tNXt3aWR0aDoxOTVweH0KKy5zcGFuLTZ7d2lkdGg6MjM1cHh9Cisuc3Bhbi03e3dpZHRoOjI3NXB4fQorLnNwYW4tOHt3aWR0aDozMTVweH0KKy5zcGFuLTl7d2lkdGg6MzU1cHh9Cisuc3Bhbi0xMHt3aWR0aDozOTVweH0KKy5zcGFuLTExe3dpZHRoOjQzNXB4fQorLnNwYW4tMTJ7d2lkdGg6NDc1cHh9Cisuc3Bhbi0xM3t3aWR0aDo1MTVweH0KKy5zcGFuLTE0e3dpZHRoOjU1NXB4fQorLnNwYW4tMTV7d2lkdGg6NTk1cHh9Cisuc3Bhbi0xNnt3aWR0aDo2MzVweH0KKy5zcGFuLTE3e3dpZHRoOjY3NXB4fQorLnNwYW4tMTh7d2lkdGg6NzE1cHh9Cisuc3Bhbi0xOXt3aWR0aDo3NTVweH0KKy5zcGFuLTIwe3dpZHRoOjc5NXB4fQorLnNwYW4tMjF7d2lkdGg6ODM1cHh9Cisuc3Bhbi0yMnt3aWR0aDo4NzVweH0KKy5zcGFuLTIze3dpZHRoOjkxNXB4fQorLnNwYW4tMjR7d2lkdGg6OTU1cHg7bWFyZ2luOjB9CisubGFzdHttYXJnaW4tcmlnaHQ6MH0KKy5hcHBlbmQtMXtwYWRkaW5nLXJpZ2h0OjQwcHh9CisuYXBwZW5kLTJ7cGFkZGluZy1yaWdodDo4MHB4fQorLmFwcGVuZC0ze3BhZGRpbmctcmlnaHQ6MTIwcHh9CisuYXBwZW5kLTR7cGFkZGluZy1yaWdodDoxNjBweH0KKy5hcHBlbmQtNXtwYWRkaW5nLXJpZ2h0OjIwMHB4fQorLnByZXBlbmQtMXtwYWRkaW5nLWxlZnQ6NDBweH0KKy5wcmVwZW5kLTJ7cGFkZGluZy1sZWZ0OjgwcHh9CisucHJlcGVuZC0ze3BhZGRpbmctbGVmdDoxMjBweH0KKy5wcmVwZW5kLTR7cGFkZGluZy1sZWZ0OjE2MHB4fQorLnByZXBlbmQtNXtwYWRkaW5nLWxlZnQ6MjAwcHh9CisuY2xlYXJ7ZGlzcGxheTppbmxpbmUtYmxvY2t9CisuY2xlYXI6YWZ0ZXIsLmNvbnRhaW5lcjphZnRlcntjb250ZW50OiIuIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO2NsZWFyOmJvdGg7dmlzaWJpbGl0eTpoaWRkZW59CisqIGh0bWwgLmNsZWFye2hlaWdodDoxJX0KKy5jbGVhcntkaXNwbGF5OmJsb2NrfQoraDEsaDIsaDMsaDQsaDUsaDYsIHAsdWwsb2wsZGwscHJlLGZvcm17cGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLXJpZ2h0OjVweH0KK3RhYmxle21hcmdpbi1sZWZ0OjVweDttYXJnaW4tcmlnaHQ6NXB4fQoraW1ne21hcmdpbjowIDAgMThweCAwfQorLnB1bGwtMXttYXJnaW4tbGVmdDotNzBweH0KKy5wdWxsLTJ7bWFyZ2luLWxlZnQ6LTE0MHB4fQorLnB1bGwtM3ttYXJnaW4tbGVmdDotMjEwcHh9CisucHVzaC0we21hcmdpbjowIDAgMCAxOHB4O2Zsb2F0OnJpZ2h0fQorLnB1c2gtMXttYXJnaW46MCAtNzBweCAwIDE4cHg7ZmxvYXQ6cmlnaHR9CisucHVzaC0ye21hcmdpbjowIC0xNDBweCAwIDE4cHg7ZmxvYXQ6cmlnaHR9CisucHVzaC0ze21hcmdpbjowIC0yMTBweCAwIDE4cHg7ZmxvYXQ6cmlnaHR9CisuZGVwcmVjYXRlZHt0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaH0KKworLyogQGVuZCAqLworCisvKiBAZ3JvdXAgdHlwb2dyYXBoeS5jc3MgKi8KKworYm9keSB7CisgIGZvbnQtc2l6ZTogMTJweDsKKyAgbGluZS1oZWlnaHQ6IDE4cHg7IC8qIERvIGEgY29tcGxldGUgZmluZC9yZXBsYWNlIG9uICIxOHB4IiB0byBjaGFuZ2UgdGhpcyAqLworfQorCisKKy8qIERlZmF1bHQgZm9udHMgKi8KK2gxLGgyLGgzLAoraDQsaDUsaDYgIHsgZm9udC1mYW1pbHk6ICJIZWx2ZXRpY2EgTmV1ZSIsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsgfQorYm9keSAgICAgIHsgZm9udC1mYW1pbHk6ICJMdWNpZGEgR3JhbmRlIiwgQ2FsaWJyaSwgQXJpYWwsIHNhbnMtc2VyaWY7IH0KK3ByZSAgICAgICB7IGZvbnQtZmFtaWx5OiBNb25hY28sICJDb3VyaWVyIE5ldyIsIG1vbm9zcGFjZTsgfQorY29kZSAgICAgIHsgZm9udC1mYW1pbHk6IENvbnNvbGFzLCAiQml0c3RyZWFtIFZlcmEgU2FucyBNb25vIiwgIkNvdXJpZXIgTmV3IiwgTW9uYWNvLCBDb3VyaWVyLCBtb25vc3BhY2U7IH0KKworCisvKiBIZWFkaW5ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworaDEsaDIsaDMsaDQsaDUsaDYgeworICBjb2xvcjojMTExOworICBjbGVhcjpib3RoOworfQorCitoMSBhLCBoMiBhLCBoMyBhLCBoNCBhLCBoNSBhLCBoNiBhIHsKKyAgICBjb2xvcjogIzExMTsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKK2gxIHsgZm9udC1zaXplOiAzMHB4OyBsaW5lLWhlaWdodDozNnB4OyBwYWRkaW5nOjEwcHggMCAxOHB4IDA7IH0KK2gyIHsgZm9udC1zaXplOiAyMHB4OyBsaW5lLWhlaWdodDozNnB4OyB9CitoMyB7IGZvbnQtc2l6ZTogMTJweDsgbGluZS1oZWlnaHQ6MjRweDsgfQoraDQgeyBmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KK2g1IHsgZm9udC1zaXplOiAxMnB4OyBmb250LXdlaWdodDpib2xkOyB9CitoNiB7IGZvbnQtc2l6ZTogMTJweDsgfQorCisKKy8qIFRleHQgZWxlbWVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3AgICAgICAgICAgIHsgbWFyZ2luOiAwIDAgMThweCAwOyB0ZXh0LWFsaWduOmp1c3RpZnk7IH0KK3AubGFzdCAgICAgIHsgbWFyZ2luLWJvdHRvbTowOyB9CitwIGltZyAgICAgICB7IGZsb2F0OiBsZWZ0OyBtYXJnaW46MThweCAxOHB4IDE4cHggMDsgcGFkZGluZzowOyB9CitwIGltZy50b3AgICB7IG1hcmdpbi10b3A6MDsgfSAvKiBVc2UgdGhpcyBpZiB0aGUgaW1hZ2UgaXMgYXQgdGhlIHRvcCBvZiB0aGUgPHA+LiAqLworCit1bCwgb2wgICAgICB7IG1hcmdpbjogMCAwIDE4cHggMDsgfQordWwgICAgICAgICAgeyBsaXN0LXN0eWxlLXR5cGU6Y2lyY2xlOyB9CitvbCAgICAgICAgICB7IGxpc3Qtc3R5bGUtdHlwZTogZGVjaW1hbDsgfQorZGwgICAgICAgICAgeyBtYXJnaW46IDAgMCAxOHB4IDA7IH0KK2RsIGR0ICAgICAgIHsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KKworYSAgICAgICAgICAgeyBjb2xvcjogI0E2ODAwMDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IG91dGxpbmU6IG5vbmU7IH0KK2E6aG92ZXIgICAgIHsgY29sb3I6ICMwMDA7IH0KKworYmxvY2txdW90ZSAgeyBtYXJnaW46IDAgMCAxOHB4IDE4cHg7IGNvbG9yOiAjNjY2OyBmb250LXN0eWxlOiBpdGFsaWM7IH0KK3N0cm9uZyAgICAgIHsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KK2VtICAgICAgICAgIHsgZm9udC1zdHlsZTogaXRhbGljOyB9CitwcmUgICAgICAgICB7IG1hcmdpbi1ib3R0b206IDE4cHg7IGJhY2tncm91bmQ6ICNlZWU7IGJvcmRlcjoxcHggc29saWQgI2RkZDsgcGFkZGluZzoxNnB4OyB9Citjb2RlIHsKKyAgICBiYWNrZ3JvdW5kOiAjZWVlOworICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CisgICAgY29sb3I6ICM1NTU7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgZm9udDogbm9ybWFsIDEuMWVtICJMdWNpZGEgU2FucyBVbmljb2RlIixzZXJpZjsKKyAgICBtYXJnaW4tYm90dG9tOiAxMnB4OworICAgIHBhZGRpbmc6IDhweCAxMHB4OworICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgb3ZlcmZsb3c6IGF1dG87CisgICAgbWF4LWhlaWdodDogMzAwcHg7Cit9CisKKy8qIFVzZSB0aGlzIHRvIGNyZWF0ZSBhIGhvcml6b250YWwgcnVsZXIgYWNyb3NzIGEgY29sdW1uLiAqLworaHIgeworICBiYWNrZ3JvdW5kOiAjRkZERjczOworICBjb2xvcjogI0ZGREY3MzsKKyAgY2xlYXI6IGJvdGg7CisgIGZsb2F0OiBub25lOworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAycHg7CisgIG1hcmdpbjogMCAwIDE2cHggMDsKKyAgYm9yZGVyOiBub25lOworfQorCisKKy8qIFRhYmxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordGFibGUgICB7IG1hcmdpbi1ib3R0b206IDE2cHg7IGJvcmRlci10b3A6MXB4IHNvbGlkICNkZGQ7IGJvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGRkOyB9Cit0aCx0ZCAgIHsgaGVpZ2h0OiAxM3B4OyBwYWRkaW5nOjJweCA0cHg7IGJvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZGQ7IGJvcmRlci1yaWdodDoxcHggc29saWQgI2RkZDsgfQordGggICAgICB7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KKworCisvKiBTb21lIGRlZmF1bHQgY2xhc3NlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworcC5zbWFsbCAgIHsgZm9udC1zaXplOiAxMHB4OyBtYXJnaW4tYm90dG9tOiAxOHB4OyB9CitwLmxhcmdlICAgeyBmb250LXNpemU6IDE0cHg7IGxpbmUtaGVpZ2h0OjM2cHg7IH0KK3AucXVpZXQgICB7IGNvbG9yOiAjNjY2OyB9CisuaGlkZSAgICAgeyBkaXNwbGF5OiBub25lOyB9CisKKworLmNhcHMgeworICBmb250LXZhcmlhbnQ6IHNtYWxsLWNhcHM7CisgIGxldHRlci1zcGFjaW5nOiAxcHg7CisgIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2U7Cit9CisKKy8qIEBlbmQgKi8KKworLyogQGdyb3VwIHN0eWxlcyAqLworCisvKiBAZ3JvdXAgSGVhZGVyICovCisKKyNoZWFkZXIgeworCXBhZGRpbmctdG9wOiAxLjhlbTsKKwltYXJnaW4tYm90dG9tOiAxLjhlbTsKK30KKyNzaXRlLW5hbWUgeworICAgIGxpbmUtaGVpZ2h0OiAzNnB4OworfQorI3NpdGUtbmFtZSBhIHsKKyAgICBmb250LXZhcmlhbnQ6IHNtYWxsLWNhcHM7CisgICAgZm9udC1zaXplOiAzZW07CisgICAgbGV0dGVyLXNwYWNpbmc6IDNweDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgY29sb3I6ICM0NDQ7Cit9Cisjc2l0ZS1uYW1lIGE6dmlzaXRlZCB7CisgICAgY29sb3I6ICM0NDQ7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorI3NpdGUtbmFtZSBhIHN0cm9uZyB7CisgICAgY29sb3I6IGJsYWNrOworfQorI3NpdGUtZGVzY3JpcHRpb24geworCXBhZGRpbmctdG9wOiAxLjRlbTsKKwlwYWRkaW5nLWJvdHRvbTogMS40ZW07Cit9Cisjc2l0ZS1kZXNjcmlwdGlvbiBoMyB7CisJZm9udC1zaXplOiAyZW07CisJbWFyZ2luOiAwOworCWZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9Cisjc2l0ZS1kZXNjcmlwdGlvbiBwI3JlYWQtbW9yZSB7CisJdGV4dC1hbGlnbjogcmlnaHQ7CisJbWFyZ2luOiA2cHggMCAwOworfQorI3NpdGUtZGVzY3JpcHRpb24gcCNyZWFkLW1vcmUgYSwgI3NpdGUtZGVzY3JpcHRpb24gcCNyZWFkLW1vcmUgYTp2aXNpdGVkIHsKKwlmb250LXNpemU6IDEuNGVtOworCWNvbG9yOiAjNTE1MTUxOworfQorI3NpdGUtZGVzY3JpcHRpb24gcCNyZWFkLW1vcmUgYTpob3ZlciB7CisJY29sb3I6ICM5MTkxOTE7Cit9Cisjc2l0ZS1kZXNjcmlwdGlvbiB7CisJYmFja2dyb3VuZC1jb2xvcjogIzQxODhEMjsKKwlib3JkZXItdG9wOiAycHggc29saWQgI2ZmZjsKKwljb2xvcjogIzQ0NDsKK30KKy8qIEBlbmQgKi8KKworLyogQGdyb3VwIE5hdmlnYXRpb24gKi8KKwordWwubmF2aWdhdGlvbiwgdWwubmF2aWdhdGlvbiBsaSB7CisgIGxpc3Qtc3R5bGU6IG5vbmU7Cit9Cit1bC5uYXZpZ2F0aW9uIGxpIHsKKyAgZGlzcGxheTogaW5saW5lOworICBtYXJnaW4tcmlnaHQ6IDEuM2VtOworfQorCisjcHJpbWFyeSB7CisJbGluZS1oZWlnaHQ6IDcycHg7CisJbWFyZ2luLWJvdHRvbTogLTI0cHg7CisJdGV4dC1hbGlnbjogcmlnaHQ7Cit9CisjcHJpbWFyeSBsaSB7CisJcGFkZGluZy1ib3R0b206IDVweDsKK30KKyNwcmltYXJ5IGEgeworCWNvbG9yOiAjNDQ0OworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKwlmb250LXNpemU6IDEuMmVtOworfQorI3ByaW1hcnkgbGk6aG92ZXIgeworCWJvcmRlci1ib3R0b206IDZweCBzb2xpZCAjRkZERjczOworfQorI3NlY29uZGFyeSB7CisJcGFkZGluZy10b3A6IDdweDsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjRkZERjczOworfQorI3NlY29uZGFyeSB1bCB7CisgICAgbGlzdC1zdHlsZTogbm9uZTsKKwltYXJnaW4tYm90dG9tOiA3cHg7Cit9Cisjc2Vjb25kYXJ5IHVsIGxpIHsKKyAgICBkaXNwbGF5OiBpbmxpbmU7CisgICAgbGlzdC1zdHlsZTogbm9uZTsKKwltYXJnaW4tcmlnaHQ6IDA7Cit9Cisjc2Vjb25kYXJ5IHVsIGxpIGEgeworCWNvbG9yOiAjNTE1MTUxOworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKwlwYWRkaW5nOiA4cHggMjRweCA4cHggMjRweDsKKwltYXJnaW4tbGVmdDogLTRweDsKK30KKyNzZWNvbmRhcnkgdWwgbGkgYS5zZWxlY3RlZCB7CisJYmFja2dyb3VuZC1jb2xvcjogIzUxNTE1MTsKKwljb2xvcjogI2ZmZjsKK30KKyNzZWNvbmRhcnkgdWwgYTpob3ZlciB7CisJYmFja2dyb3VuZDogI2ZmZjRkMDsKK30KKy8qCisJeEJyZWFkY3J1bWJzIChFeHRlbmRlZCBCcmVhZGNydW1icykgalF1ZXJ5IFBsdWdpbgorCe+/vSAyMDA5IGFqYXhCbGVuZGVyLmNvbQorCUZvciBhbnkgcXVlc3Rpb25zIHBsZWFzZSB2aXNpdCB3d3cuYWpheGJsZW5kZXIuY29tCisJb3IgZW1haWwgdXMgYXQgc3VwcG9ydEBhamF4YmxlbmRlci5jb20KKyovCisueGJyZWFkY3J1bWJzIHsKKwlwb3NpdGlvbjogcmVsYXRpdmU7CisJei1pbmRleDogMTAwMDsKK30KKy54YnJlYWRjcnVtYnMgTEkgVUwgeworCXBvc2l0aW9uOiBhYnNvbHV0ZTsKKwlmbG9hdDogbGVmdDsKK30KKy54YnJlYWRjcnVtYnMsIC54YnJlYWRjcnVtYnMgTEksIC54YnJlYWRjcnVtYnMgVUwsIC54YnJlYWRjcnVtYnMgVUwgTEkgeworCWxpc3Qtc3R5bGU6IG5vbmU7CisJbWFyZ2luOiAwOworCXBhZGRpbmc6IDA7Cit9CisueGJyZWFkY3J1bWJzIHsgY2xlYXI6IGJvdGg7IH0KKy54YnJlYWRjcnVtYnMsIC54YnJlYWRjcnVtYnMgTEkgeworCWZsb2F0OiBsZWZ0OworfQorLnhicmVhZGNydW1icyBVTCB7CisJZGlzcGxheTogbm9uZTsKK30KKworLyogIEJhc2Ugc3R5bGUgb2YgeEJyZWFkY3J1bWJzICAqLworLyogIFRvcCBMZXZlbCAgKi8KKy54YnJlYWRjcnVtYnMgeworCWJhY2tncm91bmQ6ICNGRkRGNzM7CisJd2lkdGg6IDEwMCU7Cit9CisueGJyZWFkY3J1bWJzIExJIHsKKyAgICBib3JkZXItcmlnaHQ6IG5vbmU7CisgICAgcGFkZGluZzogNXB4IDE1cHggNXB4IDEwcHg7CisJaGVpZ2h0OiAxNnB4OworfQorLnhicmVhZGNydW1icyBMSS5jdXJyZW50IHsKKwliYWNrZ3JvdW5kOiBub25lOworfQorLnhicmVhZGNydW1icyBMSSBVTCBMSSB7CisgICAgYmFja2dyb3VuZDogbm9uZTsKK30KKy54YnJlYWRjcnVtYnMgTEkgQSB7CisJZm9udC1zaXplOiAxMXB4OworCWNvbG9yOiAjNTE1MTUxOworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBwYWRkaW5nLXJpZ2h0OiAyZW07Cit9CisueGJyZWFkY3J1bWJzIExJIEEuaG9tZSB7CisgICAgYmFja2dyb3VuZDogdXJsKCBob21lLmdpZiApIG5vLXJlcGVhdCBsZWZ0IGNlbnRlcjsKKyAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7Cit9CisueGJyZWFkY3J1bWJzIExJIEE6SE9WRVIsIC54YnJlYWRjcnVtYnMgTEkuaG92ZXIgQSB7CisJY29sb3I6ICMwMDA7Cit9CisvKiAgVG9wIExldmVsIC0gQ3VycmVudCBQYWdlICAqLworLnhicmVhZGNydW1icyBMSS5jdXJyZW50IEEgeworCWNvbG9yOiAjMzMzMzMzOworCWZvbnQtd2VpZ2h0OiBib2xkOworfQorLyogIFN1Yi1sZXZlbCAgKi8KKy54YnJlYWRjcnVtYnMgTEkgVUwgeworCXBhZGRpbmc6IDNweDsKKwliYWNrZ3JvdW5kOiAjZmZmNGQwOworCWZvbnQtc2l6ZTogMTFweDsKKwltaW4td2lkdGg6IDE4MHB4OworICAgIG1heC1oZWlnaHQ6IDUwMHB4OworICAgIG92ZXJmbG93OiBhdXRvOworCXRvcDogMjVweDsKK30KKy54YnJlYWRjcnVtYnMgTEkgVUwgTEkgeworCWZsb2F0OiBsZWZ0OworCXdpZHRoOiAxMDAlOworCWJvcmRlci1yaWdodDogbm9uZTsKKwloZWlnaHQ6IGF1dG87Cit9CisueGJyZWFkY3J1bWJzIExJIFVMIExJIEEgeworCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKKwljb2xvcjogIzY2NjY2NiAhaW1wb3J0YW50OworCWRpc3BsYXk6IGJsb2NrOworCXBhZGRpbmc6IDRweDsKKwlib3JkZXItYm90dG9tOiAxcHggZG90dGVkICM2NjY2NjY7Cit9CisueGJyZWFkY3J1bWJzIExJIFVMIExJOmxhc3QtY2hpbGQgQSB7CisJYm9yZGVyLWJvdHRvbTogbm9uZTsKK30KKy54YnJlYWRjcnVtYnMgTEkgVUwgTEkgQTpIT1ZFUiB7CisgICAgYmFja2dyb3VuZDogI2ZmZmJlZTsKK30KK2JvZHkuYWR2aXNvcmllcyAjbmF2LWFkdmlzb3JpZXMsYm9keS5jb21tdW5pdHkgI25hdi1jb21tdW5pdHksYm9keS5ibG9nICNuYXYtYmxvZyxib2R5LmNvZGUgI25hdi1jb2RlLGJvZHkuYWJvdXQgI25hdi1hYm91dCxib2R5LmRvY3VtZW50YXRpb24gI25hdi1kb2N1bWVudGF0aW9ue2JvcmRlci1ib3R0b206IDZweCBzb2xpZCAjRkZERjczO30KKy8qIEBlbmQgKi8KKworLyogQGdyb3VwIE1haW4gKi8KKworI21haW4geworCWZvbnQtc2l6ZTogMS4yZW07CisJbGluZS1oZWlnaHQ6IDEuNWVtOworCWNvbG9yOiAjMUUyNTBEOworfQorI21haW4gaDIgeworCWZvbnQtc2l6ZTogMS44ZW07CisJZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgICBib3JkZXItYm90dG9tOiAzcHggc29saWQgI2MyYjJkNDsKKyAgICBwYWRkaW5nLXRvcDogMTBweDsKKwlwYWRkaW5nLWxlZnQ6IDA7CisJcGFkZGluZy1yaWdodDogMDsKKwltYXJnaW4tYm90dG9tOiA2cHg7Cit9CisjbWFpbiBoMyB7CisJZm9udC1zaXplOiAxLjRlbTsKKwlmb250LXdlaWdodDogbm9ybWFsOworCWJvcmRlci1ib3R0b206IDRweCBzb2xpZCAjZjdmN2Y3OworCXBhZGRpbmc6IDAgMCA1cHg7CisJbWFyZ2luLWJvdHRvbTogMC40ZW07Cit9CisjbWFpbiBoMyAuY2FwcyB7CisJZm9udC1zaXplOiAxLjNlbTsKK30KKyNtYWluIC5oZmVlZCAuaGVudHJ5IHsKKwlsaXN0LXN0eWxlOiBub25lOworCWxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKKwltYXJnaW4tYm90dG9tOiAyZW07CisJYm9yZGVyLWJvdHRvbTogNHB4IHNvbGlkICNlZWU7CisJcGFkZGluZy1ib3R0b206IDFlbTsKKwljbGVhcjogYm90aDsKK30KKyNtYWluIC5oZmVlZCAuaGVudHJ5Omxhc3QtY2hpbGQgeworCWJvcmRlci1ib3R0b206IG5vbmU7Cit9I21haW4gLmhmZWVkIC5oZW50cnkgLmVudHJ5LXRpdGxlIHsKKwlib3JkZXItYm90dG9tOiBub25lOworfQorI21haW4gaHIgeworCWNvbG9yOiAjRkZERjczOworCWJhY2tncm91bmQtY29sb3I6ICNGRkRGNzM7CisJYm9yZGVyLWNvbG9yOiAjRkZERjczOworfQorI21haW4gcCB7CisJdGV4dC1hbGlnbjogbGVmdDsKKwlwYWRkaW5nLWxlZnQ6IDA7CisJcGFkZGluZy1yaWdodDogMDsKK30KKyNtYWluIGltZyB7CisJbWF4LXdpZHRoOiA3NDBweDsKK30KKyNtYWluIG9sIHsKKwltYXJnaW4tbGVmdDogMS41ZW07Cit9CisjbWFpbiB1bCB7CisJbWFyZ2luLWxlZnQ6IDEuMmVtOworCWxpc3Qtc3R5bGU6IGRpc2M7Cit9CisjbWFpbiAuaW50cm8geworCWZvbnQtc2l6ZTogMS4yZW07CisJY29sb3I6ICM1MTUxNTE7CisJYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkICNmOGZiZmQ7Cit9CisjbWFpbiAuZ2V0LXN0YXJ0ZWQgYSB7CisJdGV4dC1hbGlnbjogY2VudGVyOworCWJhY2tncm91bmQtY29sb3I6ICM4OTQyRDY7CisJY29sb3I6ICNmZmY7CisJZGlzcGxheTogYmxvY2s7CisJYm9yZGVyLXJhZGl1czogMTJweDsKKwktd2Via2l0LWJvcmRlci1yYWRpdXM6IDEycHg7CisJLW1vei1ib3JkZXItcmFkaXVzOiAxMnB4OworCXBhZGRpbmc6IDhweCA2cHg7CisJd2lkdGg6IDEwZW07CisJZm9udC1zaXplOiAxLjRlbTsKKwltYXJnaW4tbGVmdDogYXV0bzsKKwltYXJnaW4tcmlnaHQ6IGF1dG87CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorI21haW4gLmdldC1zdGFydGVkIGE6aG92ZXIgeworCWJhY2tncm91bmQtY29sb3I6ICM5RDY5RDY7Cit9CisjbWFpbiBwcmUgeworICAgIG1heC1oZWlnaHQ6IDYwMHB4OworCW92ZXJmbG93OiBhdXRvOworfQorCisvKiBAZW5kICovCisvKiBAZ3JvdXAgRm9vdGVyICovCisKKyNmb290ZXIgeworCWNvbG9yOiAjNjY2OworCWZvbnQtc2l6ZTogMTFweDsKKwlib3JkZXItdG9wOiA0cHggZG91YmxlICNlN2U3ZTc7CisJbWFyZ2luLXRvcDogMmVtOworCXBhZGRpbmctdG9wOiAxLjJlbTsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisvKiNmb290ZXIgYSB7CisJY29sb3I6ICM3ODc4Nzg7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworCWJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgIzc4Nzg3ODsKK30KKyNmb290ZXIgYTpob3ZlciB7CisJYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM3ODc4Nzg7Cit9Ki8KKworLyogQGVuZCAqLworCisudXBkYXRlLCAubm90ZSwgLm5vdGljZSwgLmFsZXJ0IHsKK21hcmdpbjogMTBweCAwIDIwcHg7CitwYWRkaW5nOiA1cHggMjBweCA1cHggMjBweDsKK2NsZWFyOiBib3RoOworfQorLm5vdGUgeworCWJhY2tncm91bmQ6ICNlNmVjZjI7CisJYm9yZGVyLXRvcDogMnB4IHNvbGlkICM4OTk2YWQ7CisJYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM4OTk2YWQ7Cit9CisudXBkYXRlLCAubm90aWNlIHsKKwliYWNrZ3JvdW5kOiAjOTJFRDZCOworCWJvcmRlci10b3A6IDJweCBzb2xpZCAjMkI4RTAwOworCWJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjMkI4RTAwOworfQorLmFsZXJ0IHsKKwliYWNrZ3JvdW5kOiAjZmZiZmJmOworCWJvcmRlci10b3A6IDJweCBzb2xpZCAjZjMzOworCWJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZjMzOworfQorLmFsZXJ0IGEgeworCWNvbG9yOiNmMDA7Cit9CisuYWxlcnQgYTp2aXNpdGVkIHsKKwljb2xvcjogI2YzMzsKK30KKworLyogSmF2YURvYy1TcGVjaWZpYyBTdHlsZXMgKi8KKy5UYWJsZUhlYWRpbmdDb2xvciAgICAgeyB0ZXh0LWFsaWduOiBsZWZ0OyBib3JkZXItd2lkdGg6IDAgfQorLlRhYmxlU3ViSGVhZGluZ0NvbG9yICB7IHRleHQtYWxpZ246IGxlZnQ7IGJvcmRlci13aWR0aDogMCB9CisuVGFibGVSb3dDb2xvciAgICAgICAgIHsgdGV4dC1hbGlnbjogbGVmdDsgYm9yZGVyLXdpZHRoOiAwIH0KKy5OYXZCYXJDZWxsMSAgICB7IHRleHQtYWxpZ246IGxlZnQ7IGJvcmRlci13aWR0aDogMCB9CisuTmF2QmFyQ2VsbDFSZXYgeyB0ZXh0LWFsaWduOiBsZWZ0OyBib3JkZXItd2lkdGg6IDAgfQorLkZyYW1lSXRlbUZvbnQgeyB0ZXh0LWFsaWduOiBsZWZ0OyB9CisKKy8qIEBlbmQgKi8KKworCisKKy8qKgorICogTm9uLXNlbWFudGljIGhlbHBlciBjbGFzc2VzOiBwbGVhc2UgZGVmaW5lIHlvdXIgc3R5bGVzIGJlZm9yZSB0aGlzIHNlY3Rpb24uCisgKi8KKworLyogRm9yIGltYWdlIHJlcGxhY2VtZW50ICovCisuaXIgeyBkaXNwbGF5OiBibG9jazsgdGV4dC1pbmRlbnQ6IC05OTllbTsgb3ZlcmZsb3c6IGhpZGRlbjsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgdGV4dC1hbGlnbjogbGVmdDsgZGlyZWN0aW9uOiBsdHI7IH0KKworLyogSGlkZSBmb3IgYm90aCBzY3JlZW5yZWFkZXJzIGFuZCBicm93c2VyczoKKyAgIGNzcy1kaXNjdXNzLmluY3V0aW8uY29tL3dpa2kvU2NyZWVucmVhZGVyX1Zpc2liaWxpdHkgKi8KKy5oaWRkZW4geyBkaXNwbGF5OiBub25lOyB2aXNpYmlsaXR5OiBoaWRkZW47IH0KKworLyogSGlkZSBvbmx5IHZpc3VhbGx5LCBidXQgaGF2ZSBpdCBhdmFpbGFibGUgZm9yIHNjcmVlbnJlYWRlcnM6IGJ5IEpvbiBOZWFsLgorICB3d3cud2ViYWltLm9yZy90ZWNobmlxdWVzL2Nzcy9pbnZpc2libGVjb250ZW50LyAgJiAgai5tcC92aXN1YWxseWhpZGRlbiAqLworLnZpc3VhbGx5aGlkZGVuIHsgYm9yZGVyOiAwOyBjbGlwOiByZWN0KDAgMCAwIDApOyBoZWlnaHQ6IDFweDsgbWFyZ2luOiAtMXB4OyBvdmVyZmxvdzogaGlkZGVuOyBwYWRkaW5nOiAwOyBwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAxcHg7IH0KKy8qIEV4dGVuZHMgdGhlIC52aXN1YWxseWhpZGRlbiBjbGFzcyB0byBhbGxvdyB0aGUgZWxlbWVudCB0byBiZSBmb2N1c2FibGUgd2hlbiBuYXZpZ2F0ZWQgdG8gdmlhIHRoZSBrZXlib2FyZDogZHJ1cGFsLm9yZy9ub2RlLzg5NzYzOCAqLworLnZpc3VhbGx5aGlkZGVuLmZvY3VzYWJsZTphY3RpdmUsCisudmlzdWFsbHloaWRkZW4uZm9jdXNhYmxlOmZvY3VzIHsgY2xpcDogYXV0bzsgaGVpZ2h0OiBhdXRvOyBtYXJnaW46IDA7IG92ZXJmbG93OiB2aXNpYmxlOyBwb3NpdGlvbjogc3RhdGljOyB3aWR0aDogYXV0bzsgfQorCisvKiBIaWRlIHZpc3VhbGx5IGFuZCBmcm9tIHNjcmVlbnJlYWRlcnMsIGJ1dCBtYWludGFpbiBsYXlvdXQgKi8KKy5pbnZpc2libGUgeyB2aXNpYmlsaXR5OiBoaWRkZW47IH0KKworLyogVGhlIE1hZ25pZmljZW50IENsZWFyZml4OiBVcGRhdGVkIHRvIHByZXZlbnQgbWFyZ2luLWNvbGxhcHNpbmcgb24gY2hpbGQgZWxlbWVudHMuCisgICBqLm1wL2Jlc3RjbGVhcmZpeCAqLworLmNsZWFyZml4OmJlZm9yZSwgLmNsZWFyZml4OmFmdGVyIHsgY29udGVudDogIlwwMDIwIjsgZGlzcGxheTogYmxvY2s7IGhlaWdodDogMDsgb3ZlcmZsb3c6IGhpZGRlbjsgfQorLmNsZWFyZml4OmFmdGVyIHsgY2xlYXI6IGJvdGg7IH0KKy8qIEZpeCBjbGVhcmZpeDogYmx1ZXByaW50Y3NzLmxpZ2h0aG91c2VhcHAuY29tL3Byb2plY3RzLzE1MzE4L3RpY2tldHMvNS1leHRyYS1tYXJnaW4tcGFkZGluZy1ib3R0b20tb2YtcGFnZSAqLworLmNsZWFyZml4IHsgem9vbTogMTsgfQorCisKKworLyoqCisgKiBNZWRpYSBxdWVyaWVzIGZvciByZXNwb25zaXZlIGRlc2lnbi4KKyAqCisgKiBUaGVzZSBmb2xsb3cgYWZ0ZXIgcHJpbWFyeSBzdHlsZXMgc28gdGhleSB3aWxsIHN1Y2Nlc3NmdWxseSBvdmVycmlkZS4KKyAqLworCitAbWVkaWEgYWxsIGFuZCAob3JpZW50YXRpb246cG9ydHJhaXQpIHsKKyAgLyogU3R5bGUgYWRqdXN0bWVudHMgZm9yIHBvcnRyYWl0IG1vZGUgZ29lcyBoZXJlICovCisKK30KKworQG1lZGlhIGFsbCBhbmQgKG9yaWVudGF0aW9uOmxhbmRzY2FwZSkgeworICAvKiBTdHlsZSBhZGp1c3RtZW50cyBmb3IgbGFuZHNjYXBlIG1vZGUgZ29lcyBoZXJlICovCisKK30KKworLyogR3JhZGUtQSBNb2JpbGUgQnJvd3NlcnMgKE9wZXJhIE1vYmlsZSwgTW9iaWxlIFNhZmFyaSwgQW5kcm9pZCBDaHJvbWUpCisgICBjb25zaWRlciB0aGlzOiB3d3cuY2xvdWRmb3VyLmNvbS9jc3MtbWVkaWEtcXVlcnktZm9yLW1vYmlsZS1pcy1mb29scy1nb2xkLyAqLworQG1lZGlhIHNjcmVlbiBhbmQgKG1heC1kZXZpY2Utd2lkdGg6IDQ4MHB4KSB7CisKKworICAvKiBVbmNvbW1lbnQgaWYgeW91IGRvbid0IHdhbnQgaU9TIGFuZCBXaW5Nb2JpbGUgdG8gbW9iaWxlLW9wdGltaXplIHRoZSB0ZXh0IGZvciB5b3U6IGoubXAvdGV4dHNpemVhZGp1c3QgKi8KKyAgLyogaHRtbCB7IC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDpub25lOyAtbXMtdGV4dC1zaXplLWFkanVzdDpub25lOyB9ICovCit9CisKKworLyoqCisgKiBQcmludCBzdHlsZXMuCisgKgorICogSW5saW5lZCB0byBhdm9pZCByZXF1aXJlZCBIVFRQIGNvbm5lY3Rpb246IHd3dy5waHBpZWQuY29tL2RlbGF5LWxvYWRpbmcteW91ci1wcmludC1jc3MvCisgKi8KK0BtZWRpYSBwcmludCB7CisgICogeyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OyBjb2xvcjogYmxhY2sgIWltcG9ydGFudDsgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsgZmlsdGVyOm5vbmUgIWltcG9ydGFudDsKKyAgLW1zLWZpbHRlcjogbm9uZSAhaW1wb3J0YW50OyB9IC8qIEJsYWNrIHByaW50cyBmYXN0ZXI6IHNhbmJlaWppLmNvbS9hcmNoaXZlcy85NTMgKi8KKyAgYSwgYTp2aXNpdGVkIHsgY29sb3I6ICM0NDQgIWltcG9ydGFudDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IH0KKyAgYVtocmVmXTphZnRlciB7IGNvbnRlbnQ6ICIgKCIgYXR0cihocmVmKSAiKSI7IH0KKyAgYWJiclt0aXRsZV06YWZ0ZXIgeyBjb250ZW50OiAiICgiIGF0dHIodGl0bGUpICIpIjsgfQorICAuaXIgYTphZnRlciwgYVtocmVmXj0iamF2YXNjcmlwdDoiXTphZnRlciwgYVtocmVmXj0iIyJdOmFmdGVyIHsgY29udGVudDogIiI7IH0gIC8qIERvbid0IHNob3cgbGlua3MgZm9yIGltYWdlcywgb3IgamF2YXNjcmlwdC9pbnRlcm5hbCBsaW5rcyAqLworICBwcmUsIGJsb2NrcXVvdGUgeyBib3JkZXI6IDFweCBzb2xpZCAjOTk5OyBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7IH0KKyAgdGhlYWQgeyBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7IH0gLyogY3NzLWRpc2N1c3MuaW5jdXRpby5jb20vd2lraS9QcmludGluZ19UYWJsZXMgKi8KKyAgdHIsIGltZyB7IHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsgfQorICBAcGFnZSB7IG1hcmdpbjogMC41Y207IH0KKyAgcCwgaDIsIGgzIHsgb3JwaGFuczogMzsgd2lkb3dzOiAzOyB9CisgIGgyLCBoM3sgcGFnZS1icmVhay1hZnRlcjogYXZvaWQ7IH0KK30KKwpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9hcGkvZmF2aWNvbi5pY28gYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9mYXZpY29uLmljbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWMwZDI5Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvZmF2aWNvbi5pY28KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9hcGkvaW5kZXguaHRtbCBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIzZTJlMwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwxMjMgQEAKKzwhZG9jdHlwZSBodG1sPgorPCEtLSBwYXVsaXJpc2guY29tLzIwMDgvY29uZGl0aW9uYWwtc3R5bGVzaGVldHMtdnMtY3NzLWhhY2tzLWFuc3dlci1uZWl0aGVyLyAtLT4KKzwhLS1baWYgbHQgSUUgNyBdPiA8aHRtbCBjbGFzcz0ibm8tanMgaWU2IiBsYW5nPSJlbiI+IDwhW2VuZGlmXS0tPgorPCEtLVtpZiBJRSA3IF0+ICAgIDxodG1sIGNsYXNzPSJuby1qcyBpZTciIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cis8IS0tW2lmIElFIDggXT4gICAgPGh0bWwgY2xhc3M9Im5vLWpzIGllOCIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4KKzwhLS1baWYgKGd0ZSBJRSA5KXwhKElFKV0+PCEtLT4gPGh0bWwgY2xhc3M9Im5vLWpzIiBsYW5nPSJlbiI+IDwhLS08IVtlbmRpZl0tLT4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisKKyAgPCEtLSBBbHdheXMgZm9yY2UgbGF0ZXN0IElFIHJlbmRlcmluZyBlbmdpbmUgKGV2ZW4gaW4gaW50cmFuZXQpICYgQ2hyb21lIEZyYW1lCisgICAgICAgUmVtb3ZlIHRoaXMgaWYgeW91IHVzZSB0aGUgLmh0YWNjZXNzIC0tPgorICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiPgorCisgIDx0aXRsZT5BcGFjaGUgRGF0YSBHb3Zlcm5hbmNlIEFQSXM8L3RpdGxlPgorCisgIDwhLS0gTW9iaWxlIHZpZXdwb3J0IG9wdGltaXplZDogai5tcC9icGxhdGV2aWV3cG9ydCAtLT4KKyAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgorCisgIDwhLS0gQ1NTOiBpbXBsaWVkIG1lZGlhPSJhbGwiIC0tPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9zdHlsZS5jc3M/dj0yIj4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvcHJldHRpZnkuY3NzIj4KKworICA8IS0tIEFsbCBKYXZhU2NyaXB0IGF0IHRoZSBib3R0b20sIGV4Y2VwdCBmb3IgTW9kZXJuaXpyIHdoaWNoIGVuYWJsZXMgSFRNTDUgZWxlbWVudHMgJiBmZWF0dXJlIGRldGVjdHMgLS0+CisgIDxzY3JpcHQgc3JjPSJqcy9saWJzL21vZGVybml6ci0xLjcubWluLmpzIj48L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBjbGFzcz0iaG9tZSI+CisKKyAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICA8aGVhZGVyPgorICAgICAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iY29sdW1uIGZpcnN0IGxhc3Qgc3Bhbi0yMCI+CisgICAgICAgIDxkaXYgaWQ9InNpdGUtbmFtZSIgY2xhc3M9ImNvbHVtbiBzcGFuLTE4IGFwcGVuZC0xIHByZXBlbmQtMSBmaXJzdCBsYXN0Ij48YSBocmVmPSJpbmRleC5odG1sIj5BcGFjaGUgRGF0YSBHb3Zlcm5hbmNlIEFQSXM8L2E+PC9kaXY+CisgICAgICAgIDxkaXYgaWQ9InByaW1hcnkiIGNsYXNzPSJjb2x1bW4gc3Bhbi0xOCBhcHBlbmQtMSBwcmVwZW5kLTEgZmlyc3QgbGFzdCI+CisgICAgICAgICAgPHVsIGNsYXNzPSJuYXZpZ2F0aW9uIj4KKyAgICAgICAgICAgIDxsaSBpZD0ibmF2LXJlc3QiPjxhIGhyZWY9InJlc3QuaHRtbCI+UkVTVDwvYT48L2xpPgorICAgICAgICAgICAgPGxpIGlkPSJuYXYtZGF0YSI+PGEgaHJlZj0ibW9kZWwuaHRtbCI+RGF0YSBNb2RlbDwvYT48L2xpPgorICAgICAgICAgIDwvdWw+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2PgorICAgICAgICAgIDx1bCBjbGFzcz0ieGJyZWFkY3J1bWJzIiBpZD0iYnJlYWRjcnVtYnMiPgorICAgICAgICAgICAgPGxpIGNsYXNzPSJjdXJyZW50Ij4KKyAgICAgICAgICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgY2xhc3M9ImhvbWUiPkhvbWU8L2E+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgIDwvdWw+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9oZWFkZXI+CisgICAgPGRpdiBpZD0ibWFpbiIgY2xhc3M9ImNvbHVtbiBmaXJzdCBsYXN0IHNwYW4tMjAiPgorCisgICAgICA8aDE+UkVTVCBSZXNvdXJjZXM8L2gxPgorICAgICAgPHA+CisgICAgICAgIFRoaXMgQVBJIHN1cHBvcnRzIGEgPGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SZXByZXNlbnRhdGlvbmFsX1N0YXRlX1RyYW5zZmVyIj5SZXByZXNlbnRhdGlvbmFsIFN0YXRlIFRyYW5zZmVyIChSRVNUKTwvYT4KKyAgICAgICAgbW9kZWwgZm9yIGFjY2Vzc2luZyBhIHNldCBvZiByZXNvdXJjZXMgdGhyb3VnaCBhIGZpeGVkIHNldCBvZiBvcGVyYXRpb25zLiBUaGUgZm9sbG93aW5nIHJlc291cmNlcyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBSRVNUZnVsIG1vZGVsOgorICAgICAgPC9wPgorICAgICAgPHVsPgorICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfQWRtaW5SZXNvdXJjZS5odG1sIj5BZG1pblJlc291cmNlPC9hPjwvbGk+CisgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9FbnRpdHlSZXNvdXJjZS5odG1sIj5FbnRpdHlSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfSGl2ZUxpbmVhZ2VSZXNvdXJjZS5odG1sIj5IaXZlTGluZWFnZVJlc291cmNlPC9hPjwvbGk+CisgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9NZXRhZGF0YURpc2NvdmVyeVJlc291cmNlLmh0bWwiPk1ldGFkYXRhRGlzY292ZXJ5UmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX1JleHN0ZXJHcmFwaFJlc291cmNlLmh0bWwiPlJleHN0ZXJHcmFwaFJlc291cmNlPC9hPjwvbGk+CisgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9UeXBlc1Jlc291cmNlLmh0bWwiPlR5cGVzUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgIDwvdWw+CisgICAgICA8cD4KKyAgICAgICAgVGhlcmUgaXMgYWxzbyBhIDxhIGhyZWY9ImFwcGxpY2F0aW9uLndhZGwiPldBREwgZG9jdW1lbnQ8L2E+IGRlc2NyaWJpbmcgdGhlIFJFU1QgQVBJLgorICAgICAgPC9wPgorCisgICAgPGgxPkRhdGEgTW9kZWw8L2gxPgorCisgICAgPHA+CisgICAgICBBbGwgZW5kcG9pbnRzIGFjdCBvbiBhIGNvbW1vbiBzZXQgb2YgZGF0YS4gVGhlIGRhdGEgY2FuIGJlIHJlcHJlc2VudGVkIHdpdGggZGlmZmVyZW5jZSBtZWRpYSAoaS5lLiAiTUlNRSIpIHR5cGVzLCBkZXBlbmRpbmcgb24gdGhlIGVuZHBvaW50CisgICAgICB0aGF0IGNvbnN1bWVzIGFuZC9vciBwcm9kdWNlcyB0aGUgZGF0YS4gVGhlIGRhdGEgY2FuIGRlc2NyaWJlZCBieSA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvU2NoZW1hIj5YTUwgU2NoZW1hPC9hPiwgd2hpY2ggZGVmaW5pdGl2ZWx5CisgICAgICBkZXNjcmliZXMgdGhlIFhNTCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0YSwgYnV0IGlzIGFsc28gdXNlZnVsIGZvciBkZXNjcmliaW5nIHRoZSBvdGhlciBmb3JtYXRzIG9mIHRoZSBkYXRhLCBzdWNoIGFzIDxhIGhyZWY9Imh0dHA6Ly9qc29uLm9yZyI+SlNPTjwvYT4uCisgICAgPC9wPgorCisgICAgPHA+CisgICAgICBUaGlzIGRvY3VtZW50IHdpbGwgZGVzY3JpYmUgdGhlIGRhdGEgdXNpbmcgdGVybXMgYmFzZWQgb24gPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvWE1ML1NjaGVtYSI+WE1MIFNjaGVtYTwvYT4uCisgICAgICBEYXRhIGNhbiBiZSBncm91cGVkIGJ5IG5hbWVzcGFjZSwgd2l0aCBhIHNjaGVtYSBkb2N1bWVudCBkZXNjcmliaW5nIHRoZSA8aT5lbGVtZW50czwvaT4gYW5kIDxpPnR5cGVzPC9pPiBvZiB0aGUgbmFtZXNwYWNlLgorICAgICAgR2VuZXJhbGx5IHNwZWFraW5nLCA8aT50eXBlczwvaT4gZGVmaW5lIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGRhdGEgYW5kIDxpPmVsZW1lbnRzPC9pPiBhcmUgPGk+aW5zdGFuY2VzPC9pPiBvZiBhIHR5cGUuIEZvciBleGFtcGxlLAorICAgICAgPGk+ZWxlbWVudHM8L2k+IGFyZSB1c3VhbGx5IHByb2R1Y2VkIGJ5IChvciBjb25zdW1lZCBieSkgYSBSRVNUIGVuZHBvaW50LCBhbmQgdGhlIHN0cnVjdHVyZSBvZiBlYWNoIGVsZW1lbnQgaXMgZGVzY3JpYmVkIGJ5CisgICAgICBpdHMgPGk+dHlwZTwvaT4uCisgICAgPC9wPgorCisKKyAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIiAvPgorICAgIDwvZGl2PgorICAgIDxmb290ZXI+CisgICAgICA8ZGl2IGlkPSJmb290ZXIiPgorICAgICAgICBHZW5lcmF0ZWQgYnkgPGEgaHJlZj0iaHR0cDovL2VudW5jaWF0ZS5jb2RlaGF1cy5vcmciPkVudW5jaWF0ZTwvYT4uCisgICAgICA8L2Rpdj4KKyAgICA8L2Zvb3Rlcj4KKyAgPC9kaXY+IDwhLS0hIGVuZCBvZiAjY29udGFpbmVyIC0tPgorCisgIDwhLS0gSmF2YVNjcmlwdCBhdCB0aGUgYm90dG9tIGZvciBmYXN0IHBhZ2UgbG9hZGluZyAtLT4KKworICA8IS0tIEdyYWIgR29vZ2xlIENETidzIGpRdWVyeSwgd2l0aCBhIHByb3RvY29sIHJlbGF0aXZlIFVSTDsgZmFsbCBiYWNrIHRvIGxvY2FsIGlmIG5lY2Vzc2FyeSAtLT4KKyAgPHNjcmlwdCBzcmM9Ii8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuNS4xL2pxdWVyeS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+d2luZG93LmpRdWVyeSB8fCBkb2N1bWVudC53cml0ZSgiPHNjcmlwdCBzcmM9J2pzL2xpYnMvanF1ZXJ5LTEuNS4xLm1pbi5qcyc+XHgzQy9zY3JpcHQ+Iik8L3NjcmlwdD4KKworICA8IS0tbWFuYWdlIHRoZSBuYXZpZ2F0aW9uIG1lbnUtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMveGJyZWFkY3J1bWJzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD4KKyAgICAkKGZ1bmN0aW9uKCkgeworICAgICAgJCgnI2JyZWFkY3J1bWJzJykueEJyZWFkY3J1bWJzKCk7CisgICAgfSk7CisgIDwvc2NyaXB0PgorCisKKyAgPCEtLSBwcmV0dGlmeSBjb2RlIGJsb2Nrcy4gc2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nb29nbGUtY29kZS1wcmV0dGlmeS8gLS0+CisgIDxzY3JpcHQgc3JjPSJqcy9saWJzL3ByZXR0aWZ5L3ByZXR0aWZ5LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD4KKyAgICAkKGZ1bmN0aW9uKCkgeworICAgICAgcHJldHR5UHJpbnQoKTsKKyAgICB9KTsKKyAgPC9zY3JpcHQ+CisKKyAgPCEtLVtpZiBsdCBJRSA3IF0+CisgICAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvZGRfYmVsYXRlZHBuZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD5ERF9iZWxhdGVkUE5HLmZpeCgiaW1nLCAucG5nX2JnIik7IC8vIEZpeCBhbnkgPGltZz4gb3IgLnBuZ19iZyBiZy1pbWFnZXMuIEFsc28sIHBsZWFzZSByZWFkIGdvby5nbC9tWml5YiA8L3NjcmlwdD4KKyAgPCFbZW5kaWZdLS0+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvZGRfYmVsYXRlZHBuZy5qcyBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvZGRfYmVsYXRlZHBuZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDYyZmIzCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9kZF9iZWxhdGVkcG5nLmpzCkBAIC0wLDAgKzEsMTMgQEAKKy8qKgorKiBERF9iZWxhdGVkUE5HOiBBZGRzIElFNiBzdXBwb3J0OiBQTkcgaW1hZ2VzIGZvciBDU1MgYmFja2dyb3VuZC1pbWFnZSBhbmQgSFRNTCA8SU1HLz4uCisqIEF1dGhvcjogRHJldyBEaWxsZXIKKyogRW1haWw6IGRyZXcuZGlsbGVyQGdtYWlsLmNvbQorKiBVUkw6IGh0dHA6Ly93d3cuZGlsbGVyZGVzaWduLmNvbS9leHBlcmltZW50L0REX2JlbGF0ZWRQTkcvCisqIFZlcnNpb246IDAuMC44YQorKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2U6IGh0dHA6Ly9kaWxsZXJkZXNpZ24uY29tL2V4cGVyaW1lbnQvRERfYmVsYXRlZFBORy8jbGljZW5zZQorKgorKiBFeGFtcGxlIHVzYWdlOgorKiBERF9iZWxhdGVkUE5HLmZpeCgnLnBuZ19iZycpOyAvLyBhcmd1bWVudCBpcyBhIENTUyBzZWxlY3RvcgorKiBERF9iZWxhdGVkUE5HLmZpeFBuZyggc29tZU5vZGUgKTsgLy8gYXJndW1lbnQgaXMgYW4gSFRNTERvbUVsZW1lbnQKKyoqLwordmFyIEREX2JlbGF0ZWRQTkc9e25zOiJERF9iZWxhdGVkUE5HIixpbWdTaXplOnt9LGRlbGF5OjEwLG5vZGVzRml4ZWQ6MCxjcmVhdGVWbWxOYW1lU3BhY2U6ZnVuY3Rpb24oKXtpZihkb2N1bWVudC5uYW1lc3BhY2VzJiYhZG9jdW1lbnQubmFtZXNwYWNlc1t0aGlzLm5zXSl7ZG9jdW1lbnQubmFtZXNwYWNlcy5hZGQodGhpcy5ucywidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiKX19LGNyZWF0ZVZtbFN0eWxlU2hlZXQ6ZnVuY3Rpb24oKXt2YXIgYixhO2I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtiLnNldEF0dHJpYnV0ZSgibWVkaWEiLCJzY3JlZW4iKTtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZmlyc3RDaGlsZC5pbnNlcnRCZWZvcmUoYixkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZmlyc3RDaGlsZC5maXJzdENoaWxkKTtpZihiLnN0eWxlU2hlZXQpe2I9Yi5zdHlsZVNoZWV0O2IuYWRkUnVsZSh0aGlzLm5zKyJcXDoqIiwie2JlaGF2aW9yOnVybCgjZGVmYXVsdCNWTUwpfSIpO2IuYWRkUnVsZSh0aGlzLm5zKyJcXDpzaGFwZSIsInBvc2l0aW9uOmFic29sdXRlOyIpO2IuYWRkUnVsZSgiaW1nLiIrdGhpcy5ucysiX3NpemVGaW5kZXIiLCJiZWhhdmlvcjpub25lOyBib3JkZXI6bm9uZTsgcG9zaXRpb246YWJzb2x1dGU7IHotaW5kZXg6LTE7IHRvcDotMTAwMDBweDsgdmlzaWJpbGl0eTpoaWRkZW47Iik7dGhpcy5zY3JlZW5TdHlsZVNoZWV0PWI7YT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2Euc2V0QXR0cmlidXRlKCJtZWRpYSIsInByaW50Iik7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmZpcnN0Q2hpbGQuaW5zZXJ0QmVmb3JlKGEsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCk7YT1hLnN0eWxlU2hlZXQ7YS5hZGRSdWxlKHRoaXMubnMrIlxcOioiLCJ7ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O30iKTthLmFkZFJ1bGUoImltZy4iK3RoaXMubnMrIl9zaXplRmluZGVyIiwie2Rpc3BsYXk6IG5vbmUgIWltcG9ydGFudDt9Iil9fSxyZWFkUHJvcGVydHlDaGFuZ2U6ZnVuY3Rpb24oKXt2YXIgYixjLGE7Yj1ldmVudC5zcmNFbGVtZW50O2lmKCFiLnZtbEluaXRpYXRlZCl7cmV0dXJufWlmKGV2ZW50LnByb3BlcnR5TmFtZS5zZWFyY2goImJhY2tncm91bmQiKSE9LTF8fGV2ZW50LnByb3BlcnR5TmFtZS5zZWFyY2goImJvcmRlciIpIT0tMSl7RERfYmVsYXRlZFBORy5hcHBseVZNTChiKX1pZihldmVudC5wcm9wZXJ0eU5hbWU9PSJzdHlsZS5kaXNwbGF5Iil7Yz0oYi5jdXJyZW50U3R5bGUuZGlzcGxheT09Im5vbmUiKT8ibm9uZSI6ImJsb2NrIjtmb3IoYSBpbiBiLnZtbCl7aWYoYi52bWwuaGFzT3duUHJvcGVydHkoYSkpe2Iudm1sW2FdLnNoYXBlLnN0eWxlLmRpc3BsYXk9Y319fWlmKGV2ZW50LnByb3BlcnR5TmFtZS5zZWFyY2goImZpbHRlciIpIT0tMSl7RERfYmVsYXRlZFBORy52bWxPcGFjaXR5KGIpfX0sdm1sT3BhY2l0eTpmdW5jdGlvbihiKXtpZihiLmN1cnJlbnRTdHlsZS5maWx0ZXIuc2VhcmNoKCJscGhhIikhPS0xKXt2YXIgYT1iLmN1cnJlbnRTdHlsZS5maWx0ZXI7YT1wYXJzZUludChhLnN1YnN0cmluZyhhLmxhc3RJbmRleE9mKCI9IikrMSxhLmxhc3RJbmRleE9mKCIpIikpLDEwKS8xMDA7Yi52bWwuY29sb3Iuc2hhcGUuc3R5bGUuZmlsdGVyPWIuY3VycmVudFN0eWxlLmZpbHRlcjtiLnZtbC5pbWFnZS5maWxsLm9wYWNpdHk9YX19LGhhbmRsZVBzZXVkb0hvdmVyOmZ1bmN0aW9uKGEpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtERF9iZWxhdGVkUE5HLmFwcGx5Vk1MKGEpfSwxKX0sZml4OmZ1bmN0aW9uKGEpe2lmKHRoaXMuc2NyZWVuU3R5bGVTaGVldCl7dmFyIGMsYjtjPWEuc3BsaXQoIiwiKTtmb3IoYj0wO2I8Yy5sZW5ndGg7YisrKXt0aGlzLnNjcmVlblN0eWxlU2hlZXQuYWRkUnVsZShjW2JdLCJiZWhhdmlvcjpleHByZXNzaW9uKEREX2JlbGF0ZWRQTkcuZml4UG5nKHRoaXMpKSIpfX19LGFwcGx5Vk1MOmZ1bmN0aW9uKGEpe2EucnVudGltZVN0eWxlLmNzc1RleHQ9IiI7dGhpcy52bWxGaWxsKGEpO3RoaXMudm1sT2Zmc2V0cyhhKTt0aGlzLnZtbE9wYWNpdHkoYSk7aWYoYS5pc0ltZyl7dGhpcy5jb3B5SW1hZ2VCb3JkZXJzKGEpfX0sYXR0YWNoSGFuZGxlcnM6ZnVuY3Rpb24oaSl7dmFyIGQsYyxnLGUsYixmO2Q9dGhpcztjPXtyZXNpemU6InZtbE9mZnNldHMiLG1vdmU6InZtbE9mZnNldHMifTtpZihpLm5vZGVOYW1lPT0iQSIpe2U9e21vdXNlbGVhdmU6ImhhbmRsZVBzZXVkb0hvdmVyIixtb3VzZWVudGVyOiJoYW5kbGVQc2V1ZG9Ib3ZlciIsZm9jdXM6ImhhbmRsZVBzZXVkb0hvdmVyIixibHVyOiJoYW5kbGVQc2V1ZG9Ib3ZlciJ9O2ZvcihiIGluIGUpe2lmKGUuaGFzT3duUHJvcGVydHkoYikpe2NbYl09ZVtiXX19fWZvcihmIGluIGMpe2lmKGMuaGFzT3duUHJvcGVydHkoZikpe2c9ZnVuY3Rpb24oKXtkW2NbZl1dKGkpfTtpLmF0dGFjaEV2ZW50KCJvbiIrZixnKX19aS5hdHRhY2hFdmVudCgib25wcm9wZXJ0eWNoYW5nZSIsdGhpcy5yZWFkUHJvcGVydHlDaGFuZ2UpfSxnaXZlTGF5b3V0OmZ1bmN0aW9uKGEpe2Euc3R5bGUuem9vbT0xO2lmKGEuY3VycmVudFN0eWxlLnBvc2l0aW9uPT0ic3RhdGljIil7YS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUifX0sY29weUltYWdlQm9yZGVyczpmdW5jdGlvbihiKXt2YXIgYyxhO2M9e2JvcmRlclN0eWxlOnRydWUsYm9yZGVyV2lkdGg6dHJ1ZSxib3JkZXJDb2xvcjp0cnVlfTtmb3IoYSBpbiBjKXtpZihjLmhhc093blByb3BlcnR5KGEpKXtiLnZtbC5jb2xvci5zaGFwZS5zdHlsZVthXT1iLmN1cnJlbnRTdHlsZVthXX19fSx2bWxGaWxsOmZ1bmN0aW9uKGUpe2lmKCFlLmN1cnJlbnRTdHlsZSl7cmV0dXJufWVsc2V7dmFyIGQsZixnLGIsYSxjO2Q9ZS5jdXJyZW50U3R5bGV9Zm9yKGIgaW4gZS52bWwpe2lmKGUudm1sLmhhc093blByb3BlcnR5KGIpKXtlLnZtbFtiXS5zaGFwZS5zdHlsZS56SW5kZXg9ZC56SW5kZXh9fWUucnVudGltZVN0eWxlLmJhY2tncm91bmRDb2xvcj0iIjtlLnJ1bnRpbWVTdHlsZS5iYWNrZ3JvdW5kSW1hZ2U9IiI7Zj10cnVlO2lmKGQuYmFja2dyb3VuZEltYWdlIT0ibm9uZSJ8fGUuaXNJbWcpe2lmKCFlLmlzSW1nKXtlLnZtbEJnPWQuYmFja2dyb3VuZEltYWdlO2Uudm1sQmc9ZS52bWxCZy5zdWJzdHIoNSxlLnZtbEJnLmxhc3RJbmRleE9mKCciKScpLTUpfWVsc2V7ZS52bWxCZz1lLnNyY31nPXRoaXM7aWYoIWcuaW1nU2l6ZVtlLnZtbEJnXSl7YT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTtnLmltZ1NpemVbZS52bWxCZ109YTthLmNsYXNzTmFtZT1nLm5zKyJfc2l6ZUZpbmRlciI7YS5ydW50aW1lU3R5bGUuY3NzVGV4dD0iYmVoYXZpb3I6bm9uZTsgcG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6LTEwMDAwcHg7IHRvcDotMTAwMDBweDsgYm9yZGVyOm5vbmU7IG1hcmdpbjowOyBwYWRkaW5nOjA7IjtjPWZ1bmN0aW9uKCl7dGhpcy53aWR0aD10aGlzLm9mZnNldFdpZHRoO3RoaXMuaGVpZ2h0PXRoaXMub2Zmc2V0SGVpZ2h0O2cudm1sT2Zmc2V0cyhlKX07YS5hdHRhY2hFdmVudCgib25sb2FkIixjKTthLnNyYz1lLnZtbEJnO2EucmVtb3ZlQXR0cmlidXRlKCJ3aWR0aCIpO2EucmVtb3ZlQXR0cmlidXRlKCJoZWlnaHQiKTtkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShhLGRvY3VtZW50LmJvZHkuZmlyc3RDaGlsZCl9ZS52bWwuaW1hZ2UuZmlsbC5zcmM9ZS52bWxCZztmPWZhbHNlfWUudm1sLmltYWdlLmZpbGwub249IWY7ZS52bWwuaW1hZ2UuZmlsbC5jb2xvcj0ibm9uZSI7ZS52bWwuY29sb3Iuc2hhcGUuc3R5bGUuYmFja2dyb3VuZENvbG9yPWQuYmFja2dyb3VuZENvbG9yO2UucnVudGltZVN0eWxlLmJhY2tncm91bmRJbWFnZT0ibm9uZSI7ZS5ydW50aW1lU3R5bGUuYmFja2dyb3VuZENvbG9yPSJ0cmFuc3BhcmVudCJ9LHZtbE9mZnNldHM6ZnVuY3Rpb24oZCl7dmFyIGgsbixhLGUsZyxtLGYsbCxqLGksaztoPWQuY3VycmVudFN0eWxlO249e1c6ZC5jbGllbnRXaWR0aCsxLEg6ZC5jbGllbnRIZWlnaHQrMSx3OnRoaXMuaW1nU2l6ZVtkLnZtbEJnXS53aWR0aCxoOnRoaXMuaW1nU2l6ZVtkLnZtbEJnXS5oZWlnaHQsTDpkLm9mZnNldExlZnQsVDpkLm9mZnNldFRvcCxiTFc6ZC5jbGllbnRMZWZ0LGJUVzpkLmNsaWVudFRvcH07YT0obi5MK24uYkxXPT0xKT8xOjA7ZT1mdW5jdGlvbihiLHAscSxjLHMsdSl7Yi5jb29yZHNpemU9YysiLCIrcztiLmNvb3Jkb3JpZ2luPXUrIiwiK3U7Yi5wYXRoPSJtMCwwbCIrYysiLDBsIitjKyIsIitzKyJsMCwiK3MrIiB4ZSI7Yi5zdHlsZS53aWR0aD1jKyJweCI7Yi5zdHlsZS5oZWlnaHQ9cysicHgiO2Iuc3R5bGUubGVmdD1wKyJweCI7Yi5zdHlsZS50b3A9cSsicHgifTtlKGQudm1sLmNvbG9yLnNoYXBlLChuLkwrKGQuaXNJbWc/MDpuLmJMVykpLChuLlQrKGQuaXNJbWc/MDpuLmJUVykpLChuLlctMSksKG4uSC0xKSwwKTtlKGQudm1sLmltYWdlLnNoYXBlLChuLkwrbi5iTFcpLChuLlQrbi5iVFcpLChuLlcpLChuLkgpLDEpO2c9e1g6MCxZOjB9O2lmKGQuaXNJbWcpe2cuWD1wYXJzZUludChoLnBhZGRpbmdMZWZ0LDEwKSsxO2cuWT1wYXJzZUludChoLnBhZGRpbmdUb3AsMTApKzF9ZWxzZXtmb3IoaiBpbiBnKXtpZihnLmhhc093blByb3BlcnR5KGopKXt0aGlzLmZpZ3VyZVBlcmNlbnRhZ2UoZyxuLGosaFsiYmFja2dyb3VuZFBvc2l0aW9uIitqXSl9fX1kLnZtbC5pbWFnZS5maWxsLnBvc2l0aW9uPShnLlgvbi5XKSsiLCIrKGcuWS9uLkgpO209aC5iYWNrZ3JvdW5kUmVwZWF0O2Y9e1Q6MSxSOm4uVythLEI6bi5ILEw6MSthfTtsPXtYOntiMToiTCIsYjI6IlIiLGQ6IlcifSxZOntiMToiVCIsYjI6IkIiLGQ6IkgifX07aWYobSE9InJlcGVhdCJ8fGQuaXNJbWcpe2k9e1Q6KGcuWSksUjooZy5YK24udyksQjooZy5ZK24uaCksTDooZy5YKX07aWYobS5zZWFyY2goInJlcGVhdC0iKSE9LTEpe2s9bS5zcGxpdCgicmVwZWF0LSIpWzFdLnRvVXBwZXJDYXNlKCk7aVtsW2tdLmIxXT0xO2lbbFtrXS5iMl09bltsW2tdLmRdfWlmKGkuQj5uLkgpe2kuQj1uLkh9ZC52bWwuaW1hZ2Uuc2hhcGUuc3R5bGUuY2xpcD0icmVjdCgiK2kuVCsicHggIisoaS5SK2EpKyJweCAiK2kuQisicHggIisoaS5MK2EpKyJweCkifWVsc2V7ZC52bWwuaW1hZ2Uuc2hhcGUuc3R5bGUuY2xpcD0icmVjdCgiK2YuVCsicHggIitmLlIrInB4ICIrZi5CKyJweCAiK2YuTCsicHgpIn19LGZpZ3VyZVBlcmNlbnRhZ2U6ZnVuY3Rpb24oZCxjLGYsYSl7dmFyIGIsZTtlPXRydWU7Yj0oZj09IlgiKTtzd2l0Y2goYSl7Y2FzZSJsZWZ0IjpjYXNlInRvcCI6ZFtmXT0wO2JyZWFrO2Nhc2UiY2VudGVyIjpkW2ZdPTAuNTticmVhaztjYXNlInJpZ2h0IjpjYXNlImJvdHRvbSI6ZFtmXT0xO2JyZWFrO2RlZmF1bHQ6aWYoYS5zZWFyY2goIiUiKSE9LTEpe2RbZl09cGFyc2VJbnQoYSwxMCkvMTAwfWVsc2V7ZT1mYWxzZX19ZFtmXT1NYXRoLmNlaWwoZT8oKGNbYj8iVyI6IkgiXSpkW2ZdKS0oY1tiPyJ3IjoiaCJdKmRbZl0pKTpwYXJzZUludChhLDEwKSk7aWYoZFtmXSUyPT09MCl7ZFtmXSsrfXJldHVybiBkW2ZdfSxmaXhQbmc6ZnVuY3Rpb24oYyl7Yy5zdHlsZS5iZWhhdmlvcj0ibm9uZSI7dmFyIGcsYixmLGEsZDtpZihjLm5vZGVOYW1lPT0iQk9EWSJ8fGMubm9kZU5hbWU9PSJURCJ8fGMubm9kZU5hbWU9PSJUUiIpe3JldHVybn1jLmlzSW1nPWZhbHNlO2lmKGMubm9kZU5hbWU9PSJJTUciKXtpZihjLnNyYy50b0xvd2VyQ2FzZSgpLnNlYXJjaCgvXC5wbmckLykhPS0xKXtjLmlzSW1nPXRydWU7Yy5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4ifWVsc2V7cmV0dXJufX1lbHNle2lmKGMuY3VycmVudFN0eWxlLmJhY2tncm91bmRJbWFnZS50b0xvd2VyQ2FzZSgpLnNlYXJjaCgiLnBuZyIpPT0tMSl7cmV0dXJufX1nPUREX2JlbGF0ZWRQTkc7Yy52bWw9e2NvbG9yOnt9LGltYWdlOnt9fTtiPXtzaGFwZTp7fSxmaWxsOnt9fTtmb3IoYSBpbiBjLnZtbCl7aWYoYy52bWwuaGFzT3duUHJvcGVydHkoYSkpe2ZvcihkIGluIGIpe2lmKGIuaGFzT3duUHJvcGVydHkoZCkpe2Y9Zy5ucysiOiIrZDtjLnZtbFthXVtkXT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGYpfX1jLnZtbFthXS5zaGFwZS5zdHJva2VkPWZhbHNlO2Mudm1sW2FdLnNoYXBlLmFwcGVuZENoaWxkKGMudm1sW2FdLmZpbGwpO2MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYy52bWxbYV0uc2hhcGUsYyl9fWMudm1sLmltYWdlLnNoYXBlLmZpbGxjb2xvcj0ibm9uZSI7Yy52bWwuaW1hZ2UuZmlsbC50eXBlPSJ0aWxlIjtjLnZtbC5jb2xvci5maWxsLm9uPWZhbHNlO2cuYXR0YWNoSGFuZGxlcnMoYyk7Zy5naXZlTGF5b3V0KGMpO2cuZ2l2ZUxheW91dChjLm9mZnNldFBhcmVudCk7Yy52bWxJbml0aWF0ZWQ9dHJ1ZTtnLmFwcGx5Vk1MKGMpfX07dHJ5e2RvY3VtZW50LmV4ZWNDb21tYW5kKCJCYWNrZ3JvdW5kSW1hZ2VDYWNoZSIsZmFsc2UsdHJ1ZSl9Y2F0Y2gocil7fUREX2JlbGF0ZWRQTkcuY3JlYXRlVm1sTmFtZVNwYWNlKCk7RERfYmVsYXRlZFBORy5jcmVhdGVWbWxTdHlsZVNoZWV0KCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9qcXVlcnktMS41LjEubWluLmpzIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9qcXVlcnktMS41LjEubWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZmQ2NDcKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL2pxdWVyeS0xLjUuMS5taW4uanMKQEAgLTAsMCArMSwxNiBAQAorLyohCisgKiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYxLjUuMQorICogaHR0cDovL2pxdWVyeS5jb20vCisgKgorICogQ29weXJpZ2h0IDIwMTEsIEpvaG4gUmVzaWcKKyAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLgorICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQorICoKKyAqIEluY2x1ZGVzIFNpenpsZS5qcworICogaHR0cDovL3NpenpsZWpzLmNvbS8KKyAqIENvcHlyaWdodCAyMDExLCBUaGUgRG9qbyBGb3VuZGF0aW9uCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlULCBCU0QsIGFuZCBHUEwgTGljZW5zZXMuCisgKgorICogRGF0ZTogV2VkIEZlYiAyMyAxMzo1NToyOSAyMDExIC0wNTAwCisgKi8KKyhmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGNnKGEpe3JldHVybiBkLmlzV2luZG93KGEpP2E6YS5ub2RlVHlwZT09PTk/YS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3c6ITF9ZnVuY3Rpb24gY2QoYSl7aWYoIWJaW2FdKXt2YXIgYj1kKCI8IithKyI+IikuYXBwZW5kVG8oImJvZHkiKSxjPWIuY3NzKCJkaXNwbGF5Iik7Yi5yZW1vdmUoKTtpZihjPT09Im5vbmUifHxjPT09IiIpYz0iYmxvY2siO2JaW2FdPWN9cmV0dXJuIGJaW2FdfWZ1bmN0aW9uIGNjKGEsYil7dmFyIGM9e307ZC5lYWNoKGNiLmNvbmNhdC5hcHBseShbXSxjYi5zbGljZSgwLGIpKSxmdW5jdGlvbigpe2NbdGhpc109YX0pO3JldHVybiBjfWZ1bmN0aW9uIGJZKCl7dHJ5e3JldHVybiBuZXcgYS5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKGIpe319ZnVuY3Rpb24gYlgoKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gYlcoKXtkKGEpLnVubG9hZChmdW5jdGlvbigpe2Zvcih2YXIgYSBpbiBiVSliVVthXSgwLDEpfSl9ZnVuY3Rpb24gYlEoYSxjKXthLmRhdGFGaWx0ZXImJihjPWEuZGF0YUZpbHRlcihjLGEuZGF0YVR5cGUpKTt2YXIgZT1hLmRhdGFUeXBlcyxmPXt9LGcsaCxpPWUubGVuZ3RoLGosaz1lWzBdLGwsbSxuLG8scDtmb3IoZz0xO2c8aTtnKyspe2lmKGc9PT0xKWZvcihoIGluIGEuY29udmVydGVycyl0eXBlb2YgaD09PSJzdHJpbmciJiYoZltoLnRvTG93ZXJDYXNlKCldPWEuY29udmVydGVyc1toXSk7bD1rLGs9ZVtnXTtpZihrPT09IioiKWs9bDtlbHNlIGlmKGwhPT0iKiImJmwhPT1rKXttPWwrIiAiK2ssbj1mW21dfHxmWyIqICIra107aWYoIW4pe3A9Yjtmb3IobyBpbiBmKXtqPW8uc3BsaXQoIiAiKTtpZihqWzBdPT09bHx8alswXT09PSIqIil7cD1mW2pbMV0rIiAiK2tdO2lmKHApe289ZltvXSxvPT09ITA/bj1wOnA9PT0hMCYmKG49byk7YnJlYWt9fX19IW4mJiFwJiZkLmVycm9yKCJObyBjb252ZXJzaW9uIGZyb20gIittLnJlcGxhY2UoIiAiLCIgdG8gIikpLG4hPT0hMCYmKGM9bj9uKGMpOnAobyhjKSkpfX1yZXR1cm4gY31mdW5jdGlvbiBiUChhLGMsZCl7dmFyIGU9YS5jb250ZW50cyxmPWEuZGF0YVR5cGVzLGc9YS5yZXNwb25zZUZpZWxkcyxoLGksaixrO2ZvcihpIGluIGcpaSBpbiBkJiYoY1tnW2ldXT1kW2ldKTt3aGlsZShmWzBdPT09IioiKWYuc2hpZnQoKSxoPT09YiYmKGg9YS5taW1lVHlwZXx8Yy5nZXRSZXNwb25zZUhlYWRlcigiY29udGVudC10eXBlIikpO2lmKGgpZm9yKGkgaW4gZSlpZihlW2ldJiZlW2ldLnRlc3QoaCkpe2YudW5zaGlmdChpKTticmVha31pZihmWzBdaW4gZClqPWZbMF07ZWxzZXtmb3IoaSBpbiBkKXtpZighZlswXXx8YS5jb252ZXJ0ZXJzW2krIiAiK2ZbMF1dKXtqPWk7YnJlYWt9a3x8KGs9aSl9aj1qfHxrfWlmKGope2ohPT1mWzBdJiZmLnVuc2hpZnQoaik7cmV0dXJuIGRbal19fWZ1bmN0aW9uIGJPKGEsYixjLGUpe2lmKGQuaXNBcnJheShiKSYmYi5sZW5ndGgpZC5lYWNoKGIsZnVuY3Rpb24oYixmKXtjfHxicS50ZXN0KGEpP2UoYSxmKTpiTyhhKyJbIisodHlwZW9mIGY9PT0ib2JqZWN0Inx8ZC5pc0FycmF5KGYpP2I6IiIpKyJdIixmLGMsZSl9KTtlbHNlIGlmKGN8fGI9PW51bGx8fHR5cGVvZiBiIT09Im9iamVjdCIpZShhLGIpO2Vsc2UgaWYoZC5pc0FycmF5KGIpfHxkLmlzRW1wdHlPYmplY3QoYikpZShhLCIiKTtlbHNlIGZvcih2YXIgZiBpbiBiKWJPKGErIlsiK2YrIl0iLGJbZl0sYyxlKX1mdW5jdGlvbiBiTihhLGMsZCxlLGYsZyl7Zj1mfHxjLmRhdGFUeXBlc1swXSxnPWd8fHt9LGdbZl09ITA7dmFyIGg9YVtmXSxpPTAsaj1oP2gubGVuZ3RoOjAsaz1hPT09YkgsbDtmb3IoO2k8aiYmKGt8fCFsKTtpKyspbD1oW2ldKGMsZCxlKSx0eXBlb2YgbD09PSJzdHJpbmciJiYoIWt8fGdbbF0/bD1iOihjLmRhdGFUeXBlcy51bnNoaWZ0KGwpLGw9Yk4oYSxjLGQsZSxsLGcpKSk7KGt8fCFsKSYmIWdbIioiXSYmKGw9Yk4oYSxjLGQsZSwiKiIsZykpO3JldHVybiBsfWZ1bmN0aW9uIGJNKGEpe3JldHVybiBmdW5jdGlvbihiLGMpe3R5cGVvZiBiIT09InN0cmluZyImJihjPWIsYj0iKiIpO2lmKGQuaXNGdW5jdGlvbihjKSl7dmFyIGU9Yi50b0xvd2VyQ2FzZSgpLnNwbGl0KGJCKSxmPTAsZz1lLmxlbmd0aCxoLGksajtmb3IoO2Y8ZztmKyspaD1lW2ZdLGo9L15cKy8udGVzdChoKSxqJiYoaD1oLnN1YnN0cigxKXx8IioiKSxpPWFbaF09YVtoXXx8W10saVtqPyJ1bnNoaWZ0IjoicHVzaCJdKGMpfX19ZnVuY3Rpb24gYm8oYSxiLGMpe3ZhciBlPWI9PT0id2lkdGgiP2JpOmJqLGY9Yj09PSJ3aWR0aCI/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhlaWdodDtpZihjPT09ImJvcmRlciIpcmV0dXJuIGY7ZC5lYWNoKGUsZnVuY3Rpb24oKXtjfHwoZi09cGFyc2VGbG9hdChkLmNzcyhhLCJwYWRkaW5nIit0aGlzKSl8fDApLGM9PT0ibWFyZ2luIj9mKz1wYXJzZUZsb2F0KGQuY3NzKGEsIm1hcmdpbiIrdGhpcykpfHwwOmYtPXBhcnNlRmxvYXQoZC5jc3MoYSwiYm9yZGVyIit0aGlzKyJXaWR0aCIpKXx8MH0pO3JldHVybiBmfWZ1bmN0aW9uIGJhKGEsYil7Yi5zcmM/ZC5hamF4KHt1cmw6Yi5zcmMsYXN5bmM6ITEsZGF0YVR5cGU6InNjcmlwdCJ9KTpkLmdsb2JhbEV2YWwoYi50ZXh0fHxiLnRleHRDb250ZW50fHxiLmlubmVySFRNTHx8IiIpLGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpfWZ1bmN0aW9uIF8oYSl7cmV0dXJuImdldEVsZW1lbnRzQnlUYWdOYW1lImluIGE/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOiJxdWVyeVNlbGVjdG9yQWxsImluIGE/YS5xdWVyeVNlbGVjdG9yQWxsKCIqIik6W119ZnVuY3Rpb24gJChhLGIpe2lmKGIubm9kZVR5cGU9PT0xKXt2YXIgYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Yi5jbGVhckF0dHJpYnV0ZXMoKSxiLm1lcmdlQXR0cmlidXRlcyhhKTtpZihjPT09Im9iamVjdCIpYi5vdXRlckhUTUw9YS5vdXRlckhUTUw7ZWxzZSBpZihjIT09ImlucHV0Inx8YS50eXBlIT09ImNoZWNrYm94IiYmYS50eXBlIT09InJhZGlvIil7aWYoYz09PSJvcHRpb24iKWIuc2VsZWN0ZWQ9YS5kZWZhdWx0U2VsZWN0ZWQ7ZWxzZSBpZihjPT09ImlucHV0Inx8Yz09PSJ0ZXh0YXJlYSIpYi5kZWZhdWx0VmFsdWU9YS5kZWZhdWx0VmFsdWV9ZWxzZSBhLmNoZWNrZWQmJihiLmRlZmF1bHRDaGVja2VkPWIuY2hlY2tlZD1hLmNoZWNrZWQpLGIudmFsdWUhPT1hLnZhbHVlJiYoYi52YWx1ZT1hLnZhbHVlKTtiLnJlbW92ZUF0dHJpYnV0ZShkLmV4cGFuZG8pfX1mdW5jdGlvbiBaKGEsYil7aWYoYi5ub2RlVHlwZT09PTEmJmQuaGFzRGF0YShhKSl7dmFyIGM9ZC5leHBhbmRvLGU9ZC5kYXRhKGEpLGY9ZC5kYXRhKGIsZSk7aWYoZT1lW2NdKXt2YXIgZz1lLmV2ZW50cztmPWZbY109ZC5leHRlbmQoe30sZSk7aWYoZyl7ZGVsZXRlIGYuaGFuZGxlLGYuZXZlbnRzPXt9O2Zvcih2YXIgaCBpbiBnKWZvcih2YXIgaT0wLGo9Z1toXS5sZW5ndGg7aTxqO2krKylkLmV2ZW50LmFkZChiLGgrKGdbaF1baV0ubmFtZXNwYWNlPyIuIjoiIikrZ1toXVtpXS5uYW1lc3BhY2UsZ1toXVtpXSxnW2hdW2ldLmRhdGEpfX19fWZ1bmN0aW9uIFkoYSxiKXtyZXR1cm4gZC5ub2RlTmFtZShhLCJ0YWJsZSIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fGEuYXBwZW5kQ2hpbGQoYS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpOmF9ZnVuY3Rpb24gTyhhLGIsYyl7aWYoZC5pc0Z1bmN0aW9uKGIpKXJldHVybiBkLmdyZXAoYSxmdW5jdGlvbihhLGQpe3ZhciBlPSEhYi5jYWxsKGEsZCxhKTtyZXR1cm4gZT09PWN9KTtpZihiLm5vZGVUeXBlKXJldHVybiBkLmdyZXAoYSxmdW5jdGlvbihhLGQpe3JldHVybiBhPT09Yj09PWN9KTtpZih0eXBlb2YgYj09PSJzdHJpbmciKXt2YXIgZT1kLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlVHlwZT09PTF9KTtpZihKLnRlc3QoYikpcmV0dXJuIGQuZmlsdGVyKGIsZSwhYyk7Yj1kLmZpbHRlcihiLGUpfXJldHVybiBkLmdyZXAoYSxmdW5jdGlvbihhLGUpe3JldHVybiBkLmluQXJyYXkoYSxiKT49MD09PWN9KX1mdW5jdGlvbiBOKGEpe3JldHVybiFhfHwhYS5wYXJlbnROb2RlfHxhLnBhcmVudE5vZGUubm9kZVR5cGU9PT0xMX1mdW5jdGlvbiBGKGEsYil7cmV0dXJuKGEmJmEhPT0iKiI/YSsiLiI6IiIpK2IucmVwbGFjZShyLCJgIikucmVwbGFjZShzLCImIil9ZnVuY3Rpb24gRShhKXt2YXIgYixjLGUsZixnLGgsaSxqLGssbCxtLG4sbyxxPVtdLHI9W10scz1kLl9kYXRhKHRoaXMsImV2ZW50cyIpO2lmKGEubGl2ZUZpcmVkIT09dGhpcyYmcyYmcy5saXZlJiYhYS50YXJnZXQuZGlzYWJsZWQmJighYS5idXR0b258fGEudHlwZSE9PSJjbGljayIpKXthLm5hbWVzcGFjZSYmKG49bmV3IFJlZ0V4cCgiKF58XFwuKSIrYS5uYW1lc3BhY2Uuc3BsaXQoIi4iKS5qb2luKCJcXC4oPzouKlxcLik/IikrIihcXC58JCkiKSksYS5saXZlRmlyZWQ9dGhpczt2YXIgdD1zLmxpdmUuc2xpY2UoMCk7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKylnPXRbaV0sZy5vcmlnVHlwZS5yZXBsYWNlKHAsIiIpPT09YS50eXBlP3IucHVzaChnLnNlbGVjdG9yKTp0LnNwbGljZShpLS0sMSk7Zj1kKGEudGFyZ2V0KS5jbG9zZXN0KHIsYS5jdXJyZW50VGFyZ2V0KTtmb3Ioaj0wLGs9Zi5sZW5ndGg7ajxrO2orKyl7bT1mW2pdO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2c9dFtpXTtpZihtLnNlbGVjdG9yPT09Zy5zZWxlY3RvciYmKCFufHxuLnRlc3QoZy5uYW1lc3BhY2UpKSYmIW0uZWxlbS5kaXNhYmxlZCl7aD1tLmVsZW0sZT1udWxsO2lmKGcucHJlVHlwZT09PSJtb3VzZWVudGVyInx8Zy5wcmVUeXBlPT09Im1vdXNlbGVhdmUiKWEudHlwZT1nLnByZVR5cGUsZT1kKGEucmVsYXRlZFRhcmdldCkuY2xvc2VzdChnLnNlbGVjdG9yKVswXTsoIWV8fGUhPT1oKSYmcS5wdXNoKHtlbGVtOmgsaGFuZGxlT2JqOmcsbGV2ZWw6bS5sZXZlbH0pfX19Zm9yKGo9MCxrPXEubGVuZ3RoO2o8aztqKyspe2Y9cVtqXTtpZihjJiZmLmxldmVsPmMpYnJlYWs7YS5jdXJyZW50VGFyZ2V0PWYuZWxlbSxhLmRhdGE9Zi5oYW5kbGVPYmouZGF0YSxhLmhhbmRsZU9iaj1mLmhhbmRsZU9iaixvPWYuaGFuZGxlT2JqLm9yaWdIYW5kbGVyLmFwcGx5KGYuZWxlbSxhcmd1bWVudHMpO2lmKG89PT0hMXx8YS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXtjPWYubGV2ZWwsbz09PSExJiYoYj0hMSk7aWYoYS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKWJyZWFrfX1yZXR1cm4gYn19ZnVuY3Rpb24gQyhhLGMsZSl7dmFyIGY9ZC5leHRlbmQoe30sZVswXSk7Zi50eXBlPWEsZi5vcmlnaW5hbEV2ZW50PXt9LGYubGl2ZUZpcmVkPWIsZC5ldmVudC5oYW5kbGUuY2FsbChjLGYpLGYuaXNEZWZhdWx0UHJldmVudGVkKCkmJmVbMF0ucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiB3KCl7cmV0dXJuITB9ZnVuY3Rpb24gdigpe3JldHVybiExfWZ1bmN0aW9uIGcoYSl7Zm9yKHZhciBiIGluIGEpaWYoYiE9PSJ0b0pTT04iKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGYoYSxjLGYpe2lmKGY9PT1iJiZhLm5vZGVUeXBlPT09MSl7Zj1hLmdldEF0dHJpYnV0ZSgiZGF0YS0iK2MpO2lmKHR5cGVvZiBmPT09InN0cmluZyIpe3RyeXtmPWY9PT0idHJ1ZSI/ITA6Zj09PSJmYWxzZSI/ITE6Zj09PSJudWxsIj9udWxsOmQuaXNOYU4oZik/ZS50ZXN0KGYpP2QucGFyc2VKU09OKGYpOmY6cGFyc2VGbG9hdChmKX1jYXRjaChnKXt9ZC5kYXRhKGEsYyxmKX1lbHNlIGY9Yn1yZXR1cm4gZn12YXIgYz1hLmRvY3VtZW50LGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBJKCl7aWYoIWQuaXNSZWFkeSl7dHJ5e2MuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goYSl7c2V0VGltZW91dChJLDEpO3JldHVybn1kLnJlYWR5KCl9fXZhciBkPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBkLmZuLmluaXQoYSxiLGcpfSxlPWEualF1ZXJ5LGY9YS4kLGcsaD0vXig/OltePF0qKDxbXHdcV10rPilbXj5dKiR8IyhbXHdcLV0rKSQpLyxpPS9cUy8saj0vXlxzKy8saz0vXHMrJC8sbD0vXGQvLG09L148KFx3KylccypcLz8+KD86PFwvXDE+KT8kLyxuPS9eW1xdLDp7fVxzXSokLyxvPS9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0pL2cscD0vIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxkKik/KD86W2VFXVsrXC1dP1xkKyk/L2cscT0vKD86Xnw6fCwpKD86XHMqXFspKy9nLHI9Lyh3ZWJraXQpWyBcL10oW1x3Ll0rKS8scz0vKG9wZXJhKSg/Oi4qdmVyc2lvbik/WyBcL10oW1x3Ll0rKS8sdD0vKG1zaWUpIChbXHcuXSspLyx1PS8obW96aWxsYSkoPzouKj8gcnY6KFtcdy5dKykpPy8sdj1uYXZpZ2F0b3IudXNlckFnZW50LHcseD0hMSx5LHo9InRoZW4gZG9uZSBmYWlsIGlzUmVzb2x2ZWQgaXNSZWplY3RlZCBwcm9taXNlIi5zcGxpdCgiICIpLEEsQj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxEPUFycmF5LnByb3RvdHlwZS5wdXNoLEU9QXJyYXkucHJvdG90eXBlLnNsaWNlLEY9U3RyaW5nLnByb3RvdHlwZS50cmltLEc9QXJyYXkucHJvdG90eXBlLmluZGV4T2YsSD17fTtkLmZuPWQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpkLGluaXQ6ZnVuY3Rpb24oYSxlLGYpe3ZhciBnLGksaixrO2lmKCFhKXJldHVybiB0aGlzO2lmKGEubm9kZVR5cGUpe3RoaXMuY29udGV4dD10aGlzWzBdPWEsdGhpcy5sZW5ndGg9MTtyZXR1cm4gdGhpc31pZihhPT09ImJvZHkiJiYhZSYmYy5ib2R5KXt0aGlzLmNvbnRleHQ9Yyx0aGlzWzBdPWMuYm9keSx0aGlzLnNlbGVjdG9yPSJib2R5Iix0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKHR5cGVvZiBhPT09InN0cmluZyIpe2c9aC5leGVjKGEpO2lmKCFnfHwhZ1sxXSYmZSlyZXR1cm4hZXx8ZS5qcXVlcnk/KGV8fGYpLmZpbmQoYSk6dGhpcy5jb25zdHJ1Y3RvcihlKS5maW5kKGEpO2lmKGdbMV0pe2U9ZSBpbnN0YW5jZW9mIGQ/ZVswXTplLGs9ZT9lLm93bmVyRG9jdW1lbnR8fGU6YyxqPW0uZXhlYyhhKSxqP2QuaXNQbGFpbk9iamVjdChlKT8oYT1bYy5jcmVhdGVFbGVtZW50KGpbMV0pXSxkLmZuLmF0dHIuY2FsbChhLGUsITApKTphPVtrLmNyZWF0ZUVsZW1lbnQoalsxXSldOihqPWQuYnVpbGRGcmFnbWVudChbZ1sxXV0sW2tdKSxhPShqLmNhY2hlYWJsZT9kLmNsb25lKGouZnJhZ21lbnQpOmouZnJhZ21lbnQpLmNoaWxkTm9kZXMpO3JldHVybiBkLm1lcmdlKHRoaXMsYSl9aT1jLmdldEVsZW1lbnRCeUlkKGdbMl0pO2lmKGkmJmkucGFyZW50Tm9kZSl7aWYoaS5pZCE9PWdbMl0pcmV0dXJuIGYuZmluZChhKTt0aGlzLmxlbmd0aD0xLHRoaXNbMF09aX10aGlzLmNvbnRleHQ9Yyx0aGlzLnNlbGVjdG9yPWE7cmV0dXJuIHRoaXN9aWYoZC5pc0Z1bmN0aW9uKGEpKXJldHVybiBmLnJlYWR5KGEpO2Euc2VsZWN0b3IhPT1iJiYodGhpcy5zZWxlY3Rvcj1hLnNlbGVjdG9yLHRoaXMuY29udGV4dD1hLmNvbnRleHQpO3JldHVybiBkLm1ha2VBcnJheShhLHRoaXMpfSxzZWxlY3RvcjoiIixqcXVlcnk6IjEuNS4xIixsZW5ndGg6MCxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIEUuY2FsbCh0aGlzLDApfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/dGhpcy50b0FycmF5KCk6YTwwP3RoaXNbdGhpcy5sZW5ndGgrYV06dGhpc1thXX0scHVzaFN0YWNrOmZ1bmN0aW9uKGEsYixjKXt2YXIgZT10aGlzLmNvbnN0cnVjdG9yKCk7ZC5pc0FycmF5KGEpP0QuYXBwbHkoZSxhKTpkLm1lcmdlKGUsYSksZS5wcmV2T2JqZWN0PXRoaXMsZS5jb250ZXh0PXRoaXMuY29udGV4dCxiPT09ImZpbmQiP2Uuc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisodGhpcy5zZWxlY3Rvcj8iICI6IiIpK2M6YiYmKGUuc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisiLiIrYisiKCIrYysiKSIpO3JldHVybiBlfSxlYWNoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuZWFjaCh0aGlzLGEsYil9LHJlYWR5OmZ1bmN0aW9uKGEpe2QuYmluZFJlYWR5KCkseS5kb25lKGEpO3JldHVybiB0aGlzfSxlcTpmdW5jdGlvbihhKXtyZXR1cm4gYT09PS0xP3RoaXMuc2xpY2UoYSk6dGhpcy5zbGljZShhLCthKzEpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhFLmFwcGx5KHRoaXMsYXJndW1lbnRzKSwic2xpY2UiLEUuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9LG1hcDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZC5tYXAodGhpcyxmdW5jdGlvbihiLGMpe3JldHVybiBhLmNhbGwoYixjLGIpfSkpfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKG51bGwpfSxwdXNoOkQsc29ydDpbXS5zb3J0LHNwbGljZTpbXS5zcGxpY2V9LGQuZm4uaW5pdC5wcm90b3R5cGU9ZC5mbixkLmV4dGVuZD1kLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBhLGMsZSxmLGcsaCxpPWFyZ3VtZW50c1swXXx8e30saj0xLGs9YXJndW1lbnRzLmxlbmd0aCxsPSExO3R5cGVvZiBpPT09ImJvb2xlYW4iJiYobD1pLGk9YXJndW1lbnRzWzFdfHx7fSxqPTIpLHR5cGVvZiBpIT09Im9iamVjdCImJiFkLmlzRnVuY3Rpb24oaSkmJihpPXt9KSxrPT09aiYmKGk9dGhpcywtLWopO2Zvcig7ajxrO2orKylpZigoYT1hcmd1bWVudHNbal0pIT1udWxsKWZvcihjIGluIGEpe2U9aVtjXSxmPWFbY107aWYoaT09PWYpY29udGludWU7bCYmZiYmKGQuaXNQbGFpbk9iamVjdChmKXx8KGc9ZC5pc0FycmF5KGYpKSk/KGc/KGc9ITEsaD1lJiZkLmlzQXJyYXkoZSk/ZTpbXSk6aD1lJiZkLmlzUGxhaW5PYmplY3QoZSk/ZTp7fSxpW2NdPWQuZXh0ZW5kKGwsaCxmKSk6ZiE9PWImJihpW2NdPWYpfXJldHVybiBpfSxkLmV4dGVuZCh7bm9Db25mbGljdDpmdW5jdGlvbihiKXthLiQ9ZixiJiYoYS5qUXVlcnk9ZSk7cmV0dXJuIGR9LGlzUmVhZHk6ITEscmVhZHlXYWl0OjEscmVhZHk6ZnVuY3Rpb24oYSl7YT09PSEwJiZkLnJlYWR5V2FpdC0tO2lmKCFkLnJlYWR5V2FpdHx8YSE9PSEwJiYhZC5pc1JlYWR5KXtpZighYy5ib2R5KXJldHVybiBzZXRUaW1lb3V0KGQucmVhZHksMSk7ZC5pc1JlYWR5PSEwO2lmKGEhPT0hMCYmLS1kLnJlYWR5V2FpdD4wKXJldHVybjt5LnJlc29sdmVXaXRoKGMsW2RdKSxkLmZuLnRyaWdnZXImJmQoYykudHJpZ2dlcigicmVhZHkiKS51bmJpbmQoInJlYWR5Iil9fSxiaW5kUmVhZHk6ZnVuY3Rpb24oKXtpZigheCl7eD0hMDtpZihjLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKXJldHVybiBzZXRUaW1lb3V0KGQucmVhZHksMSk7aWYoYy5hZGRFdmVudExpc3RlbmVyKWMuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQSwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixkLnJlYWR5LCExKTtlbHNlIGlmKGMuYXR0YWNoRXZlbnQpe2MuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQSksYS5hdHRhY2hFdmVudCgib25sb2FkIixkLnJlYWR5KTt2YXIgYj0hMTt0cnl7Yj1hLmZyYW1lRWxlbWVudD09bnVsbH1jYXRjaChlKXt9Yy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwmJmImJkkoKX19fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiBkLnR5cGUoYSk9PT0iZnVuY3Rpb24ifSxpc0FycmF5OkFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVybiBkLnR5cGUoYSk9PT0iYXJyYXkifSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gYSYmdHlwZW9mIGE9PT0ib2JqZWN0IiYmInNldEludGVydmFsImluIGF9LGlzTmFOOmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsfHwhbC50ZXN0KGEpfHxpc05hTihhKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD9TdHJpbmcoYSk6SFtCLmNhbGwoYSldfHwib2JqZWN0In0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihhKXtpZighYXx8ZC50eXBlKGEpIT09Im9iamVjdCJ8fGEubm9kZVR5cGV8fGQuaXNXaW5kb3coYSkpcmV0dXJuITE7aWYoYS5jb25zdHJ1Y3RvciYmIUMuY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhQy5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITE7dmFyIGM7Zm9yKGMgaW4gYSl7fXJldHVybiBjPT09Ynx8Qy5jYWxsKGEsYyl9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiIGluIGEpcmV0dXJuITE7cmV0dXJuITB9LGVycm9yOmZ1bmN0aW9uKGEpe3Rocm93IGF9LHBhcnNlSlNPTjpmdW5jdGlvbihiKXtpZih0eXBlb2YgYiE9PSJzdHJpbmcifHwhYilyZXR1cm4gbnVsbDtiPWQudHJpbShiKTtpZihuLnRlc3QoYi5yZXBsYWNlKG8sIkAiKS5yZXBsYWNlKHAsIl0iKS5yZXBsYWNlKHEsIiIpKSlyZXR1cm4gYS5KU09OJiZhLkpTT04ucGFyc2U/YS5KU09OLnBhcnNlKGIpOihuZXcgRnVuY3Rpb24oInJldHVybiAiK2IpKSgpO2QuZXJyb3IoIkludmFsaWQgSlNPTjogIitiKX0scGFyc2VYTUw6ZnVuY3Rpb24oYixjLGUpe2EuRE9NUGFyc2VyPyhlPW5ldyBET01QYXJzZXIsYz1lLnBhcnNlRnJvbVN0cmluZyhiLCJ0ZXh0L3htbCIpKTooYz1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLGMuYXN5bmM9ImZhbHNlIixjLmxvYWRYTUwoYikpLGU9Yy5kb2N1bWVudEVsZW1lbnQsKCFlfHwhZS5ub2RlTmFtZXx8ZS5ub2RlTmFtZT09PSJwYXJzZXJlcnJvciIpJiZkLmVycm9yKCJJbnZhbGlkIFhNTDogIitiKTtyZXR1cm4gY30sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihhKXtpZihhJiZpLnRlc3QoYSkpe3ZhciBiPWMuaGVhZHx8Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdfHxjLmRvY3VtZW50RWxlbWVudCxlPWMuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7ZC5zdXBwb3J0LnNjcmlwdEV2YWwoKT9lLmFwcGVuZENoaWxkKGMuY3JlYXRlVGV4dE5vZGUoYSkpOmUudGV4dD1hLGIuaW5zZXJ0QmVmb3JlKGUsYi5maXJzdENoaWxkKSxiLnJlbW92ZUNoaWxkKGUpfX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT09Yi50b1VwcGVyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYyxlKXt2YXIgZixnPTAsaD1hLmxlbmd0aCxpPWg9PT1ifHxkLmlzRnVuY3Rpb24oYSk7aWYoZSl7aWYoaSl7Zm9yKGYgaW4gYSlpZihjLmFwcGx5KGFbZl0sZSk9PT0hMSlicmVha31lbHNlIGZvcig7ZzxoOylpZihjLmFwcGx5KGFbZysrXSxlKT09PSExKWJyZWFrfWVsc2UgaWYoaSl7Zm9yKGYgaW4gYSlpZihjLmNhbGwoYVtmXSxmLGFbZl0pPT09ITEpYnJlYWt9ZWxzZSBmb3IodmFyIGo9YVswXTtnPGgmJmMuY2FsbChqLGcsaikhPT0hMTtqPWFbKytnXSl7fXJldHVybiBhfSx0cmltOkY/ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6Ri5jYWxsKGEpfTpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjooYSsiIikucmVwbGFjZShqLCIiKS5yZXBsYWNlKGssIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oYSxiKXt2YXIgYz1ifHxbXTtpZihhIT1udWxsKXt2YXIgZT1kLnR5cGUoYSk7YS5sZW5ndGg9PW51bGx8fGU9PT0ic3RyaW5nInx8ZT09PSJmdW5jdGlvbiJ8fGU9PT0icmVnZXhwInx8ZC5pc1dpbmRvdyhhKT9ELmNhbGwoYyxhKTpkLm1lcmdlKGMsYSl9cmV0dXJuIGN9LGluQXJyYXk6ZnVuY3Rpb24oYSxiKXtpZihiLmluZGV4T2YpcmV0dXJuIGIuaW5kZXhPZihhKTtmb3IodmFyIGM9MCxkPWIubGVuZ3RoO2M8ZDtjKyspaWYoYltjXT09PWEpcmV0dXJuIGM7cmV0dXJuLTF9LG1lcmdlOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9YS5sZW5ndGgsZT0wO2lmKHR5cGVvZiBjLmxlbmd0aD09PSJudW1iZXIiKWZvcih2YXIgZj1jLmxlbmd0aDtlPGY7ZSsrKWFbZCsrXT1jW2VdO2Vsc2Ugd2hpbGUoY1tlXSE9PWIpYVtkKytdPWNbZSsrXTthLmxlbmd0aD1kO3JldHVybiBhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlO2M9ISFjO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGg7ZjxnO2YrKyllPSEhYihhW2ZdLGYpLGMhPT1lJiZkLnB1c2goYVtmXSk7cmV0dXJuIGR9LG1hcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9W10sZTtmb3IodmFyIGY9MCxnPWEubGVuZ3RoO2Y8ZztmKyspZT1iKGFbZl0sZixjKSxlIT1udWxsJiYoZFtkLmxlbmd0aF09ZSk7cmV0dXJuIGQuY29uY2F0LmFwcGx5KFtdLGQpfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oYSxjLGUpe2FyZ3VtZW50cy5sZW5ndGg9PT0yJiYodHlwZW9mIGM9PT0ic3RyaW5nIj8oZT1hLGE9ZVtjXSxjPWIpOmMmJiFkLmlzRnVuY3Rpb24oYykmJihlPWMsYz1iKSksIWMmJmEmJihjPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoZXx8dGhpcyxhcmd1bWVudHMpfSksYSYmKGMuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxjLmd1aWR8fGQuZ3VpZCsrKTtyZXR1cm4gY30sYWNjZXNzOmZ1bmN0aW9uKGEsYyxlLGYsZyxoKXt2YXIgaT1hLmxlbmd0aDtpZih0eXBlb2YgYz09PSJvYmplY3QiKXtmb3IodmFyIGogaW4gYylkLmFjY2VzcyhhLGosY1tqXSxmLGcsZSk7cmV0dXJuIGF9aWYoZSE9PWIpe2Y9IWgmJmYmJmQuaXNGdW5jdGlvbihlKTtmb3IodmFyIGs9MDtrPGk7aysrKWcoYVtrXSxjLGY/ZS5jYWxsKGFba10sayxnKGFba10sYykpOmUsaCk7cmV0dXJuIGF9cmV0dXJuIGk/ZyhhWzBdLGMpOmJ9LG5vdzpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfSxfRGVmZXJyZWQ6ZnVuY3Rpb24oKXt2YXIgYT1bXSxiLGMsZSxmPXtkb25lOmZ1bmN0aW9uKCl7aWYoIWUpe3ZhciBjPWFyZ3VtZW50cyxnLGgsaSxqLGs7YiYmKGs9YixiPTApO2ZvcihnPTAsaD1jLmxlbmd0aDtnPGg7ZysrKWk9Y1tnXSxqPWQudHlwZShpKSxqPT09ImFycmF5Ij9mLmRvbmUuYXBwbHkoZixpKTpqPT09ImZ1bmN0aW9uIiYmYS5wdXNoKGkpO2smJmYucmVzb2x2ZVdpdGgoa1swXSxrWzFdKX1yZXR1cm4gdGhpc30scmVzb2x2ZVdpdGg6ZnVuY3Rpb24oZCxmKXtpZighZSYmIWImJiFjKXtjPTE7dHJ5e3doaWxlKGFbMF0pYS5zaGlmdCgpLmFwcGx5KGQsZil9Y2F0Y2goZyl7dGhyb3cgZ31maW5hbGx5e2I9W2QsZl0sYz0wfX1yZXR1cm4gdGhpc30scmVzb2x2ZTpmdW5jdGlvbigpe2YucmVzb2x2ZVdpdGgoZC5pc0Z1bmN0aW9uKHRoaXMucHJvbWlzZSk/dGhpcy5wcm9taXNlKCk6dGhpcyxhcmd1bWVudHMpO3JldHVybiB0aGlzfSxpc1Jlc29sdmVkOmZ1bmN0aW9uKCl7cmV0dXJuIGN8fGJ9LGNhbmNlbDpmdW5jdGlvbigpe2U9MSxhPVtdO3JldHVybiB0aGlzfX07cmV0dXJuIGZ9LERlZmVycmVkOmZ1bmN0aW9uKGEpe3ZhciBiPWQuX0RlZmVycmVkKCksYz1kLl9EZWZlcnJlZCgpLGU7ZC5leHRlbmQoYix7dGhlbjpmdW5jdGlvbihhLGMpe2IuZG9uZShhKS5mYWlsKGMpO3JldHVybiB0aGlzfSxmYWlsOmMuZG9uZSxyZWplY3RXaXRoOmMucmVzb2x2ZVdpdGgscmVqZWN0OmMucmVzb2x2ZSxpc1JlamVjdGVkOmMuaXNSZXNvbHZlZCxwcm9taXNlOmZ1bmN0aW9uKGEpe2lmKGE9PW51bGwpe2lmKGUpcmV0dXJuIGU7ZT1hPXt9fXZhciBjPXoubGVuZ3RoO3doaWxlKGMtLSlhW3pbY11dPWJbeltjXV07cmV0dXJuIGF9fSksYi5kb25lKGMuY2FuY2VsKS5mYWlsKGIuY2FuY2VsKSxkZWxldGUgYi5jYW5jZWwsYSYmYS5jYWxsKGIsYik7cmV0dXJuIGJ9LHdoZW46ZnVuY3Rpb24oYSl7dmFyIGI9YXJndW1lbnRzLmxlbmd0aCxjPWI8PTEmJmEmJmQuaXNGdW5jdGlvbihhLnByb21pc2UpP2E6ZC5EZWZlcnJlZCgpLGU9Yy5wcm9taXNlKCk7aWYoYj4xKXt2YXIgZj1FLmNhbGwoYXJndW1lbnRzLDApLGc9YixoPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtmW2FdPWFyZ3VtZW50cy5sZW5ndGg+MT9FLmNhbGwoYXJndW1lbnRzLDApOmIsLS1nfHxjLnJlc29sdmVXaXRoKGUsZil9fTt3aGlsZShiLS0pYT1mW2JdLGEmJmQuaXNGdW5jdGlvbihhLnByb21pc2UpP2EucHJvbWlzZSgpLnRoZW4oaChiKSxjLnJlamVjdCk6LS1nO2d8fGMucmVzb2x2ZVdpdGgoZSxmKX1lbHNlIGMhPT1hJiZjLnJlc29sdmUoYSk7cmV0dXJuIGV9LHVhTWF0Y2g6ZnVuY3Rpb24oYSl7YT1hLnRvTG93ZXJDYXNlKCk7dmFyIGI9ci5leGVjKGEpfHxzLmV4ZWMoYSl8fHQuZXhlYyhhKXx8YS5pbmRleE9mKCJjb21wYXRpYmxlIik8MCYmdS5leGVjKGEpfHxbXTtyZXR1cm57YnJvd3NlcjpiWzFdfHwiIix2ZXJzaW9uOmJbMl18fCIwIn19LHN1YjpmdW5jdGlvbigpe2Z1bmN0aW9uIGEoYixjKXtyZXR1cm4gbmV3IGEuZm4uaW5pdChiLGMpfWQuZXh0ZW5kKCEwLGEsdGhpcyksYS5zdXBlcmNsYXNzPXRoaXMsYS5mbj1hLnByb3RvdHlwZT10aGlzKCksYS5mbi5jb25zdHJ1Y3Rvcj1hLGEuc3ViY2xhc3M9dGhpcy5zdWJjbGFzcyxhLmZuLmluaXQ9ZnVuY3Rpb24gYihiLGMpe2MmJmMgaW5zdGFuY2VvZiBkJiYhKGMgaW5zdGFuY2VvZiBhKSYmKGM9YShjKSk7cmV0dXJuIGQuZm4uaW5pdC5jYWxsKHRoaXMsYixjLGUpfSxhLmZuLmluaXQucHJvdG90eXBlPWEuZm47dmFyIGU9YShjKTtyZXR1cm4gYX0sYnJvd3Nlcjp7fX0pLHk9ZC5fRGVmZXJyZWQoKSxkLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtIWyJbb2JqZWN0ICIrYisiXSJdPWIudG9Mb3dlckNhc2UoKX0pLHc9ZC51YU1hdGNoKHYpLHcuYnJvd3NlciYmKGQuYnJvd3Nlclt3LmJyb3dzZXJdPSEwLGQuYnJvd3Nlci52ZXJzaW9uPXcudmVyc2lvbiksZC5icm93c2VyLndlYmtpdCYmKGQuYnJvd3Nlci5zYWZhcmk9ITApLEcmJihkLmluQXJyYXk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gRy5jYWxsKGIsYSl9KSxpLnRlc3QoIiAiKSYmKGo9L15bXHNceEEwXSsvLGs9L1tcc1x4QTBdKyQvKSxnPWQoYyksYy5hZGRFdmVudExpc3RlbmVyP0E9ZnVuY3Rpb24oKXtjLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEEsITEpLGQucmVhZHkoKX06Yy5hdHRhY2hFdmVudCYmKEE9ZnVuY3Rpb24oKXtjLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiJiYoYy5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixBKSxkLnJlYWR5KCkpfSk7cmV0dXJuIGR9KCk7KGZ1bmN0aW9uKCl7ZC5zdXBwb3J0PXt9O3ZhciBiPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yi5zdHlsZS5kaXNwbGF5PSJub25lIixiLmlubmVySFRNTD0iICAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJyBzdHlsZT0nY29sb3I6cmVkO2Zsb2F0OmxlZnQ7b3BhY2l0eTouNTU7Jz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiI7dmFyIGU9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLGY9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdLGc9Yy5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxoPWcuYXBwZW5kQ2hpbGQoYy5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSksaT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdO2lmKGUmJmUubGVuZ3RoJiZmKXtkLnN1cHBvcnQ9e2xlYWRpbmdXaGl0ZXNwYWNlOmIuZmlyc3RDaGlsZC5ub2RlVHlwZT09PTMsdGJvZHk6IWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikubGVuZ3RoLGh0bWxTZXJpYWxpemU6ISFiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJsaW5rIikubGVuZ3RoLHN0eWxlOi9yZWQvLnRlc3QoZi5nZXRBdHRyaWJ1dGUoInN0eWxlIikpLGhyZWZOb3JtYWxpemVkOmYuZ2V0QXR0cmlidXRlKCJocmVmIik9PT0iL2EiLG9wYWNpdHk6L14wLjU1JC8udGVzdChmLnN0eWxlLm9wYWNpdHkpLGNzc0Zsb2F0OiEhZi5zdHlsZS5jc3NGbG9hdCxjaGVja09uOmkudmFsdWU9PT0ib24iLG9wdFNlbGVjdGVkOmguc2VsZWN0ZWQsZGVsZXRlRXhwYW5kbzohMCxvcHREaXNhYmxlZDohMSxjaGVja0Nsb25lOiExLG5vQ2xvbmVFdmVudDohMCxub0Nsb25lQ2hlY2tlZDohMCxib3hNb2RlbDpudWxsLGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6ITEsc2hyaW5rV3JhcEJsb2NrczohMSxyZWxpYWJsZUhpZGRlbk9mZnNldHM6ITB9LGkuY2hlY2tlZD0hMCxkLnN1cHBvcnQubm9DbG9uZUNoZWNrZWQ9aS5jbG9uZU5vZGUoITApLmNoZWNrZWQsZy5kaXNhYmxlZD0hMCxkLnN1cHBvcnQub3B0RGlzYWJsZWQ9IWguZGlzYWJsZWQ7dmFyIGo9bnVsbDtkLnN1cHBvcnQuc2NyaXB0RXZhbD1mdW5jdGlvbigpe2lmKGo9PT1udWxsKXt2YXIgYj1jLmRvY3VtZW50RWxlbWVudCxlPWMuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksZj0ic2NyaXB0IitkLm5vdygpO3RyeXtlLmFwcGVuZENoaWxkKGMuY3JlYXRlVGV4dE5vZGUoIndpbmRvdy4iK2YrIj0xOyIpKX1jYXRjaChnKXt9Yi5pbnNlcnRCZWZvcmUoZSxiLmZpcnN0Q2hpbGQpLGFbZl0/KGo9ITAsZGVsZXRlIGFbZl0pOmo9ITEsYi5yZW1vdmVDaGlsZChlKSxiPWU9Zj1udWxsfXJldHVybiBqfTt0cnl7ZGVsZXRlIGIudGVzdH1jYXRjaChrKXtkLnN1cHBvcnQuZGVsZXRlRXhwYW5kbz0hMX0hYi5hZGRFdmVudExpc3RlbmVyJiZiLmF0dGFjaEV2ZW50JiZiLmZpcmVFdmVudCYmKGIuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGZ1bmN0aW9uIGwoKXtkLnN1cHBvcnQubm9DbG9uZUV2ZW50PSExLGIuZGV0YWNoRXZlbnQoIm9uY2xpY2siLGwpfSksYi5jbG9uZU5vZGUoITApLmZpcmVFdmVudCgib25jbGljayIpKSxiPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksYi5pbm5lckhUTUw9IjxpbnB1dCB0eXBlPSdyYWRpbycgbmFtZT0ncmFkaW90ZXN0JyBjaGVja2VkPSdjaGVja2VkJy8+Ijt2YXIgbT1jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTttLmFwcGVuZENoaWxkKGIuZmlyc3RDaGlsZCksZC5zdXBwb3J0LmNoZWNrQ2xvbmU9bS5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsZChmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksYj1jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07aWYoYil7YS5zdHlsZS53aWR0aD1hLnN0eWxlLnBhZGRpbmdMZWZ0PSIxcHgiLGIuYXBwZW5kQ2hpbGQoYSksZC5ib3hNb2RlbD1kLnN1cHBvcnQuYm94TW9kZWw9YS5vZmZzZXRXaWR0aD09PTIsInpvb20iaW4gYS5zdHlsZSYmKGEuc3R5bGUuZGlzcGxheT0iaW5saW5lIixhLnN0eWxlLnpvb209MSxkLnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dD1hLm9mZnNldFdpZHRoPT09MixhLnN0eWxlLmRpc3BsYXk9IiIsYS5pbm5lckhUTUw9IjxkaXYgc3R5bGU9J3dpZHRoOjRweDsnPjwvZGl2PiIsZC5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3M9YS5vZmZzZXRXaWR0aCE9PTIpLGEuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZCBzdHlsZT0ncGFkZGluZzowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSc+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiI7dmFyIGU9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGQiKTtkLnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzPWVbMF0ub2Zmc2V0SGVpZ2h0PT09MCxlWzBdLnN0eWxlLmRpc3BsYXk9IiIsZVsxXS5zdHlsZS5kaXNwbGF5PSJub25lIixkLnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzPWQuc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMmJmVbMF0ub2Zmc2V0SGVpZ2h0PT09MCxhLmlubmVySFRNTD0iIixiLnJlbW92ZUNoaWxkKGEpLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGE9ZT1udWxsfX0pO3ZhciBuPWZ1bmN0aW9uKGEpe3ZhciBiPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YT0ib24iK2E7aWYoIWIuYXR0YWNoRXZlbnQpcmV0dXJuITA7dmFyIGQ9YSBpbiBiO2R8fChiLnNldEF0dHJpYnV0ZShhLCJyZXR1cm47IiksZD10eXBlb2YgYlthXT09PSJmdW5jdGlvbiIpLGI9bnVsbDtyZXR1cm4gZH07ZC5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXM9bigic3VibWl0IiksZC5zdXBwb3J0LmNoYW5nZUJ1YmJsZXM9bigiY2hhbmdlIiksYj1lPWY9bnVsbH19KSgpO3ZhciBlPS9eKD86XHsuKlx9fFxbLipcXSkkLztkLmV4dGVuZCh7Y2FjaGU6e30sdXVpZDowLGV4cGFuZG86ImpRdWVyeSIrKGQuZm4uanF1ZXJ5K01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLG5vRGF0YTp7ZW1iZWQ6ITAsb2JqZWN0OiJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLGFwcGxldDohMH0saGFzRGF0YTpmdW5jdGlvbihhKXthPWEubm9kZVR5cGU/ZC5jYWNoZVthW2QuZXhwYW5kb11dOmFbZC5leHBhbmRvXTtyZXR1cm4hIWEmJiFnKGEpfSxkYXRhOmZ1bmN0aW9uKGEsYyxlLGYpe2lmKGQuYWNjZXB0RGF0YShhKSl7dmFyIGc9ZC5leHBhbmRvLGg9dHlwZW9mIGM9PT0ic3RyaW5nIixpLGo9YS5ub2RlVHlwZSxrPWo/ZC5jYWNoZTphLGw9aj9hW2QuZXhwYW5kb106YVtkLmV4cGFuZG9dJiZkLmV4cGFuZG87aWYoKCFsfHxmJiZsJiYha1tsXVtnXSkmJmgmJmU9PT1iKXJldHVybjtsfHwoaj9hW2QuZXhwYW5kb109bD0rK2QudXVpZDpsPWQuZXhwYW5kbyksa1tsXXx8KGtbbF09e30sanx8KGtbbF0udG9KU09OPWQubm9vcCkpO2lmKHR5cGVvZiBjPT09Im9iamVjdCJ8fHR5cGVvZiBjPT09ImZ1bmN0aW9uIilmP2tbbF1bZ109ZC5leHRlbmQoa1tsXVtnXSxjKTprW2xdPWQuZXh0ZW5kKGtbbF0sYyk7aT1rW2xdLGYmJihpW2ddfHwoaVtnXT17fSksaT1pW2ddKSxlIT09YiYmKGlbY109ZSk7aWYoYz09PSJldmVudHMiJiYhaVtjXSlyZXR1cm4gaVtnXSYmaVtnXS5ldmVudHM7cmV0dXJuIGg/aVtjXTppfX0scmVtb3ZlRGF0YTpmdW5jdGlvbihiLGMsZSl7aWYoZC5hY2NlcHREYXRhKGIpKXt2YXIgZj1kLmV4cGFuZG8saD1iLm5vZGVUeXBlLGk9aD9kLmNhY2hlOmIsaj1oP2JbZC5leHBhbmRvXTpkLmV4cGFuZG87aWYoIWlbal0pcmV0dXJuO2lmKGMpe3ZhciBrPWU/aVtqXVtmXTppW2pdO2lmKGspe2RlbGV0ZSBrW2NdO2lmKCFnKGspKXJldHVybn19aWYoZSl7ZGVsZXRlIGlbal1bZl07aWYoIWcoaVtqXSkpcmV0dXJufXZhciBsPWlbal1bZl07ZC5zdXBwb3J0LmRlbGV0ZUV4cGFuZG98fGkhPWE/ZGVsZXRlIGlbal06aVtqXT1udWxsLGw/KGlbal09e30saHx8KGlbal0udG9KU09OPWQubm9vcCksaVtqXVtmXT1sKTpoJiYoZC5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8/ZGVsZXRlIGJbZC5leHBhbmRvXTpiLnJlbW92ZUF0dHJpYnV0ZT9iLnJlbW92ZUF0dHJpYnV0ZShkLmV4cGFuZG8pOmJbZC5leHBhbmRvXT1udWxsKX19LF9kYXRhOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZC5kYXRhKGEsYixjLCEwKX0sYWNjZXB0RGF0YTpmdW5jdGlvbihhKXtpZihhLm5vZGVOYW1lKXt2YXIgYj1kLm5vRGF0YVthLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldO2lmKGIpcmV0dXJuIGIhPT0hMCYmYS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKT09PWJ9cmV0dXJuITB9fSksZC5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oYSxjKXt2YXIgZT1udWxsO2lmKHR5cGVvZiBhPT09InVuZGVmaW5lZCIpe2lmKHRoaXMubGVuZ3RoKXtlPWQuZGF0YSh0aGlzWzBdKTtpZih0aGlzWzBdLm5vZGVUeXBlPT09MSl7dmFyIGc9dGhpc1swXS5hdHRyaWJ1dGVzLGg7Zm9yKHZhciBpPTAsaj1nLmxlbmd0aDtpPGo7aSsrKWg9Z1tpXS5uYW1lLGguaW5kZXhPZigiZGF0YS0iKT09PTAmJihoPWguc3Vic3RyKDUpLGYodGhpc1swXSxoLGVbaF0pKX19cmV0dXJuIGV9aWYodHlwZW9mIGE9PT0ib2JqZWN0IilyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZC5kYXRhKHRoaXMsYSl9KTt2YXIgaz1hLnNwbGl0KCIuIik7a1sxXT1rWzFdPyIuIitrWzFdOiIiO2lmKGM9PT1iKXtlPXRoaXMudHJpZ2dlckhhbmRsZXIoImdldERhdGEiK2tbMV0rIiEiLFtrWzBdXSksZT09PWImJnRoaXMubGVuZ3RoJiYoZT1kLmRhdGEodGhpc1swXSxhKSxlPWYodGhpc1swXSxhLGUpKTtyZXR1cm4gZT09PWImJmtbMV0/dGhpcy5kYXRhKGtbMF0pOmV9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWQodGhpcyksZT1ba1swXSxjXTtiLnRyaWdnZXJIYW5kbGVyKCJzZXREYXRhIitrWzFdKyIhIixlKSxkLmRhdGEodGhpcyxhLGMpLGIudHJpZ2dlckhhbmRsZXIoImNoYW5nZURhdGEiK2tbMV0rIiEiLGUpfSl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2QucmVtb3ZlRGF0YSh0aGlzLGEpfSl9fSksZC5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGEsYixjKXtpZihhKXtiPShifHwiZngiKSsicXVldWUiO3ZhciBlPWQuX2RhdGEoYSxiKTtpZighYylyZXR1cm4gZXx8W107IWV8fGQuaXNBcnJheShjKT9lPWQuX2RhdGEoYSxiLGQubWFrZUFycmF5KGMpKTplLnB1c2goYyk7cmV0dXJuIGV9fSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPWQucXVldWUoYSxiKSxlPWMuc2hpZnQoKTtlPT09ImlucHJvZ3Jlc3MiJiYoZT1jLnNoaWZ0KCkpLGUmJihiPT09ImZ4IiYmYy51bnNoaWZ0KCJpbnByb2dyZXNzIiksZS5jYWxsKGEsZnVuY3Rpb24oKXtkLmRlcXVldWUoYSxiKX0pKSxjLmxlbmd0aHx8ZC5yZW1vdmVEYXRhKGEsYisicXVldWUiLCEwKX19KSxkLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxjKXt0eXBlb2YgYSE9PSJzdHJpbmciJiYoYz1hLGE9ImZ4Iik7aWYoYz09PWIpcmV0dXJuIGQucXVldWUodGhpc1swXSxhKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBlPWQucXVldWUodGhpcyxhLGMpO2E9PT0iZngiJiZlWzBdIT09ImlucHJvZ3Jlc3MiJiZkLmRlcXVldWUodGhpcyxhKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkLmRlcXVldWUodGhpcyxhKX0pfSxkZWxheTpmdW5jdGlvbihhLGIpe2E9ZC5meD9kLmZ4LnNwZWVkc1thXXx8YTphLGI9Ynx8ImZ4IjtyZXR1cm4gdGhpcy5xdWV1ZShiLGZ1bmN0aW9uKCl7dmFyIGM9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5kZXF1ZXVlKGMsYil9LGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9fSk7dmFyIGg9L1tcblx0XHJdL2csaT0vXHMrLyxqPS9cci9nLGs9L14oPzpocmVmfHNyY3xzdHlsZSkkLyxsPS9eKD86YnV0dG9ufGlucHV0KSQvaSxtPS9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLG49L15hKD86cmVhKT8kL2ksbz0vXig/OnJhZGlvfGNoZWNrYm94KSQvaTtkLnByb3BzPXsiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIixyZWFkb25seToicmVhZE9ubHkiLG1heGxlbmd0aDoibWF4TGVuZ3RoIixjZWxsc3BhY2luZzoiY2VsbFNwYWNpbmciLHJvd3NwYW46InJvd1NwYW4iLGNvbHNwYW46ImNvbFNwYW4iLHRhYmluZGV4OiJ0YWJJbmRleCIsdXNlbWFwOiJ1c2VNYXAiLGZyYW1lYm9yZGVyOiJmcmFtZUJvcmRlciJ9LGQuZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGQuYWNjZXNzKHRoaXMsYSxiLCEwLGQuYXR0cil9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZC5hdHRyKHRoaXMsYSwiIiksdGhpcy5ub2RlVHlwZT09PTEmJnRoaXMucmVtb3ZlQXR0cmlidXRlKGEpfSl9LGFkZENsYXNzOmZ1bmN0aW9uKGEpe2lmKGQuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWQodGhpcyk7Yy5hZGRDbGFzcyhhLmNhbGwodGhpcyxiLGMuYXR0cigiY2xhc3MiKSkpfSk7aWYoYSYmdHlwZW9mIGE9PT0ic3RyaW5nIil7dmFyIGI9KGF8fCIiKS5zcGxpdChpKTtmb3IodmFyIGM9MCxlPXRoaXMubGVuZ3RoO2M8ZTtjKyspe3ZhciBmPXRoaXNbY107aWYoZi5ub2RlVHlwZT09PTEpaWYoZi5jbGFzc05hbWUpe3ZhciBnPSIgIitmLmNsYXNzTmFtZSsiICIsaD1mLmNsYXNzTmFtZTtmb3IodmFyIGo9MCxrPWIubGVuZ3RoO2o8aztqKyspZy5pbmRleE9mKCIgIitiW2pdKyIgIik8MCYmKGgrPSIgIitiW2pdKTtmLmNsYXNzTmFtZT1kLnRyaW0oaCl9ZWxzZSBmLmNsYXNzTmFtZT1hfX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oYSl7aWYoZC5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9ZCh0aGlzKTtjLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsYy5hdHRyKCJjbGFzcyIpKSl9KTtpZihhJiZ0eXBlb2YgYT09PSJzdHJpbmcifHxhPT09Yil7dmFyIGM9KGF8fCIiKS5zcGxpdChpKTtmb3IodmFyIGU9MCxmPXRoaXMubGVuZ3RoO2U8ZjtlKyspe3ZhciBnPXRoaXNbZV07aWYoZy5ub2RlVHlwZT09PTEmJmcuY2xhc3NOYW1lKWlmKGEpe3ZhciBqPSgiICIrZy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKGgsIiAiKTtmb3IodmFyIGs9MCxsPWMubGVuZ3RoO2s8bDtrKyspaj1qLnJlcGxhY2UoIiAiK2Nba10rIiAiLCIgIik7Zy5jbGFzc05hbWU9ZC50cmltKGopfWVsc2UgZy5jbGFzc05hbWU9IiJ9fXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhLGU9dHlwZW9mIGI9PT0iYm9vbGVhbiI7aWYoZC5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7dmFyIGU9ZCh0aGlzKTtlLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsZS5hdHRyKCJjbGFzcyIpLGIpLGIpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKGM9PT0ic3RyaW5nIil7dmFyIGYsZz0wLGg9ZCh0aGlzKSxqPWIsaz1hLnNwbGl0KGkpO3doaWxlKGY9a1tnKytdKWo9ZT9qOiFoLmhhc0NsYXNzKGYpLGhbaj8iYWRkQ2xhc3MiOiJyZW1vdmVDbGFzcyJdKGYpfWVsc2UgaWYoYz09PSJ1bmRlZmluZWQifHxjPT09ImJvb2xlYW4iKXRoaXMuY2xhc3NOYW1lJiZkLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8YT09PSExPyIiOmQuX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIn0pfSxoYXNDbGFzczpmdW5jdGlvbihhKXt2YXIgYj0iICIrYSsiICI7Zm9yKHZhciBjPTAsZD10aGlzLmxlbmd0aDtjPGQ7YysrKWlmKCgiICIrdGhpc1tjXS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKGgsIiAiKS5pbmRleE9mKGIpPi0xKXJldHVybiEwO3JldHVybiExfSx2YWw6ZnVuY3Rpb24oYSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBjPXRoaXNbMF07aWYoYyl7aWYoZC5ub2RlTmFtZShjLCJvcHRpb24iKSl7dmFyIGU9Yy5hdHRyaWJ1dGVzLnZhbHVlO3JldHVybiFlfHxlLnNwZWNpZmllZD9jLnZhbHVlOmMudGV4dH1pZihkLm5vZGVOYW1lKGMsInNlbGVjdCIpKXt2YXIgZj1jLnNlbGVjdGVkSW5kZXgsZz1bXSxoPWMub3B0aW9ucyxpPWMudHlwZT09PSJzZWxlY3Qtb25lIjtpZihmPDApcmV0dXJuIG51bGw7Zm9yKHZhciBrPWk/ZjowLGw9aT9mKzE6aC5sZW5ndGg7azxsO2srKyl7dmFyIG09aFtrXTtpZihtLnNlbGVjdGVkJiYoZC5zdXBwb3J0Lm9wdERpc2FibGVkPyFtLmRpc2FibGVkOm0uZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpPT09bnVsbCkmJighbS5wYXJlbnROb2RlLmRpc2FibGVkfHwhZC5ub2RlTmFtZShtLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXthPWQobSkudmFsKCk7aWYoaSlyZXR1cm4gYTtnLnB1c2goYSl9fWlmKGkmJiFnLmxlbmd0aCYmaC5sZW5ndGgpcmV0dXJuIGQoaFtmXSkudmFsKCk7cmV0dXJuIGd9aWYoby50ZXN0KGMudHlwZSkmJiFkLnN1cHBvcnQuY2hlY2tPbilyZXR1cm4gYy5nZXRBdHRyaWJ1dGUoInZhbHVlIik9PT1udWxsPyJvbiI6Yy52YWx1ZTtyZXR1cm4oYy52YWx1ZXx8IiIpLnJlcGxhY2UoaiwiIil9cmV0dXJuIGJ9dmFyIG49ZC5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9ZCh0aGlzKSxlPWE7aWYodGhpcy5ub2RlVHlwZT09PTEpe24mJihlPWEuY2FsbCh0aGlzLGIsYy52YWwoKSkpLGU9PW51bGw/ZT0iIjp0eXBlb2YgZT09PSJudW1iZXIiP2UrPSIiOmQuaXNBcnJheShlKSYmKGU9ZC5tYXAoZSxmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjphKyIifSkpO2lmKGQuaXNBcnJheShlKSYmby50ZXN0KHRoaXMudHlwZSkpdGhpcy5jaGVja2VkPWQuaW5BcnJheShjLnZhbCgpLGUpPj0wO2Vsc2UgaWYoZC5ub2RlTmFtZSh0aGlzLCJzZWxlY3QiKSl7dmFyIGY9ZC5tYWtlQXJyYXkoZSk7ZCgib3B0aW9uIix0aGlzKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD1kLmluQXJyYXkoZCh0aGlzKS52YWwoKSxmKT49MH0pLGYubGVuZ3RofHwodGhpcy5zZWxlY3RlZEluZGV4PS0xKX1lbHNlIHRoaXMudmFsdWU9ZX19KX19KSxkLmV4dGVuZCh7YXR0ckZuOnt2YWw6ITAsY3NzOiEwLGh0bWw6ITAsdGV4dDohMCxkYXRhOiEwLHdpZHRoOiEwLGhlaWdodDohMCxvZmZzZXQ6ITB9LGF0dHI6ZnVuY3Rpb24oYSxjLGUsZil7aWYoIWF8fGEubm9kZVR5cGU9PT0zfHxhLm5vZGVUeXBlPT09OHx8YS5ub2RlVHlwZT09PTIpcmV0dXJuIGI7aWYoZiYmYyBpbiBkLmF0dHJGbilyZXR1cm4gZChhKVtjXShlKTt2YXIgZz1hLm5vZGVUeXBlIT09MXx8IWQuaXNYTUxEb2MoYSksaD1lIT09YjtjPWcmJmQucHJvcHNbY118fGM7aWYoYS5ub2RlVHlwZT09PTEpe3ZhciBpPWsudGVzdChjKTtpZihjPT09InNlbGVjdGVkIiYmIWQuc3VwcG9ydC5vcHRTZWxlY3RlZCl7dmFyIGo9YS5wYXJlbnROb2RlO2omJihqLnNlbGVjdGVkSW5kZXgsai5wYXJlbnROb2RlJiZqLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCl9aWYoKGMgaW4gYXx8YVtjXSE9PWIpJiZnJiYhaSl7aCYmKGM9PT0idHlwZSImJmwudGVzdChhLm5vZGVOYW1lKSYmYS5wYXJlbnROb2RlJiZkLmVycm9yKCJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiKSxlPT09bnVsbD9hLm5vZGVUeXBlPT09MSYmYS5yZW1vdmVBdHRyaWJ1dGUoYyk6YVtjXT1lKTtpZihkLm5vZGVOYW1lKGEsImZvcm0iKSYmYS5nZXRBdHRyaWJ1dGVOb2RlKGMpKXJldHVybiBhLmdldEF0dHJpYnV0ZU5vZGUoYykubm9kZVZhbHVlO2lmKGM9PT0idGFiSW5kZXgiKXt2YXIgbz1hLmdldEF0dHJpYnV0ZU5vZGUoInRhYkluZGV4Iik7cmV0dXJuIG8mJm8uc3BlY2lmaWVkP28udmFsdWU6bS50ZXN0KGEubm9kZU5hbWUpfHxuLnRlc3QoYS5ub2RlTmFtZSkmJmEuaHJlZj8wOmJ9cmV0dXJuIGFbY119aWYoIWQuc3VwcG9ydC5zdHlsZSYmZyYmYz09PSJzdHlsZSIpe2gmJihhLnN0eWxlLmNzc1RleHQ9IiIrZSk7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dH1oJiZhLnNldEF0dHJpYnV0ZShjLCIiK2UpO2lmKCFhLmF0dHJpYnV0ZXNbY10mJihhLmhhc0F0dHJpYnV0ZSYmIWEuaGFzQXR0cmlidXRlKGMpKSlyZXR1cm4gYjt2YXIgcD0hZC5zdXBwb3J0LmhyZWZOb3JtYWxpemVkJiZnJiZpP2EuZ2V0QXR0cmlidXRlKGMsMik6YS5nZXRBdHRyaWJ1dGUoYyk7cmV0dXJuIHA9PT1udWxsP2I6cH1oJiYoYVtjXT1lKTtyZXR1cm4gYVtjXX19KTt2YXIgcD0vXC4oLiopJC8scT0vXig/OnRleHRhcmVhfGlucHV0fHNlbGVjdCkkL2kscj0vXC4vZyxzPS8gL2csdD0vW15cd1xzLnxgXS9nLHU9ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZSh0LCJcXCQmIil9O2QuZXZlbnQ9e2FkZDpmdW5jdGlvbihjLGUsZixnKXtpZihjLm5vZGVUeXBlIT09MyYmYy5ub2RlVHlwZSE9PTgpe3RyeXtkLmlzV2luZG93KGMpJiYoYyE9PWEmJiFjLmZyYW1lRWxlbWVudCkmJihjPWEpfWNhdGNoKGgpe31pZihmPT09ITEpZj12O2Vsc2UgaWYoIWYpcmV0dXJuO3ZhciBpLGo7Zi5oYW5kbGVyJiYoaT1mLGY9aS5oYW5kbGVyKSxmLmd1aWR8fChmLmd1aWQ9ZC5ndWlkKyspO3ZhciBrPWQuX2RhdGEoYyk7aWYoIWspcmV0dXJuO3ZhciBsPWsuZXZlbnRzLG09ay5oYW5kbGU7bHx8KGsuZXZlbnRzPWw9e30pLG18fChrLmhhbmRsZT1tPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBkIT09InVuZGVmaW5lZCImJiFkLmV2ZW50LnRyaWdnZXJlZD9kLmV2ZW50LmhhbmRsZS5hcHBseShtLmVsZW0sYXJndW1lbnRzKTpifSksbS5lbGVtPWMsZT1lLnNwbGl0KCIgIik7dmFyIG4sbz0wLHA7d2hpbGUobj1lW28rK10pe2o9aT9kLmV4dGVuZCh7fSxpKTp7aGFuZGxlcjpmLGRhdGE6Z30sbi5pbmRleE9mKCIuIik+LTE/KHA9bi5zcGxpdCgiLiIpLG49cC5zaGlmdCgpLGoubmFtZXNwYWNlPXAuc2xpY2UoMCkuc29ydCgpLmpvaW4oIi4iKSk6KHA9W10sai5uYW1lc3BhY2U9IiIpLGoudHlwZT1uLGouZ3VpZHx8KGouZ3VpZD1mLmd1aWQpO3ZhciBxPWxbbl0scj1kLmV2ZW50LnNwZWNpYWxbbl18fHt9O2lmKCFxKXtxPWxbbl09W107aWYoIXIuc2V0dXB8fHIuc2V0dXAuY2FsbChjLGcscCxtKT09PSExKWMuYWRkRXZlbnRMaXN0ZW5lcj9jLmFkZEV2ZW50TGlzdGVuZXIobixtLCExKTpjLmF0dGFjaEV2ZW50JiZjLmF0dGFjaEV2ZW50KCJvbiIrbixtKX1yLmFkZCYmKHIuYWRkLmNhbGwoYyxqKSxqLmhhbmRsZXIuZ3VpZHx8KGouaGFuZGxlci5ndWlkPWYuZ3VpZCkpLHEucHVzaChqKSxkLmV2ZW50Lmdsb2JhbFtuXT0hMH1jPW51bGx9fSxnbG9iYWw6e30scmVtb3ZlOmZ1bmN0aW9uKGEsYyxlLGYpe2lmKGEubm9kZVR5cGUhPT0zJiZhLm5vZGVUeXBlIT09OCl7ZT09PSExJiYoZT12KTt2YXIgZyxoLGksaixrPTAsbCxtLG4sbyxwLHEscixzPWQuaGFzRGF0YShhKSYmZC5fZGF0YShhKSx0PXMmJnMuZXZlbnRzO2lmKCFzfHwhdClyZXR1cm47YyYmYy50eXBlJiYoZT1jLmhhbmRsZXIsYz1jLnR5cGUpO2lmKCFjfHx0eXBlb2YgYz09PSJzdHJpbmciJiZjLmNoYXJBdCgwKT09PSIuIil7Yz1jfHwiIjtmb3IoaCBpbiB0KWQuZXZlbnQucmVtb3ZlKGEsaCtjKTtyZXR1cm59Yz1jLnNwbGl0KCIgIik7d2hpbGUoaD1jW2srK10pe3I9aCxxPW51bGwsbD1oLmluZGV4T2YoIi4iKTwwLG09W10sbHx8KG09aC5zcGxpdCgiLiIpLGg9bS5zaGlmdCgpLG49bmV3IFJlZ0V4cCgiKF58XFwuKSIrZC5tYXAobS5zbGljZSgwKS5zb3J0KCksdSkuam9pbigiXFwuKD86LipcXC4pPyIpKyIoXFwufCQpIikpLHA9dFtoXTtpZighcCljb250aW51ZTtpZighZSl7Zm9yKGo9MDtqPHAubGVuZ3RoO2orKyl7cT1wW2pdO2lmKGx8fG4udGVzdChxLm5hbWVzcGFjZSkpZC5ldmVudC5yZW1vdmUoYSxyLHEuaGFuZGxlcixqKSxwLnNwbGljZShqLS0sMSl9Y29udGludWV9bz1kLmV2ZW50LnNwZWNpYWxbaF18fHt9O2ZvcihqPWZ8fDA7ajxwLmxlbmd0aDtqKyspe3E9cFtqXTtpZihlLmd1aWQ9PT1xLmd1aWQpe2lmKGx8fG4udGVzdChxLm5hbWVzcGFjZSkpZj09bnVsbCYmcC5zcGxpY2Uoai0tLDEpLG8ucmVtb3ZlJiZvLnJlbW92ZS5jYWxsKGEscSk7aWYoZiE9bnVsbClicmVha319aWYocC5sZW5ndGg9PT0wfHxmIT1udWxsJiZwLmxlbmd0aD09PTEpKCFvLnRlYXJkb3dufHxvLnRlYXJkb3duLmNhbGwoYSxtKT09PSExKSYmZC5yZW1vdmVFdmVudChhLGgscy5oYW5kbGUpLGc9bnVsbCxkZWxldGUgdFtoXX1pZihkLmlzRW1wdHlPYmplY3QodCkpe3ZhciB3PXMuaGFuZGxlO3cmJih3LmVsZW09bnVsbCksZGVsZXRlIHMuZXZlbnRzLGRlbGV0ZSBzLmhhbmRsZSxkLmlzRW1wdHlPYmplY3QocykmJmQucmVtb3ZlRGF0YShhLGIsITApfX19LHRyaWdnZXI6ZnVuY3Rpb24oYSxjLGUpe3ZhciBmPWEudHlwZXx8YSxnPWFyZ3VtZW50c1szXTtpZighZyl7YT10eXBlb2YgYT09PSJvYmplY3QiP2FbZC5leHBhbmRvXT9hOmQuZXh0ZW5kKGQuRXZlbnQoZiksYSk6ZC5FdmVudChmKSxmLmluZGV4T2YoIiEiKT49MCYmKGEudHlwZT1mPWYuc2xpY2UoMCwtMSksYS5leGNsdXNpdmU9ITApLGV8fChhLnN0b3BQcm9wYWdhdGlvbigpLGQuZXZlbnQuZ2xvYmFsW2ZdJiZkLmVhY2goZC5jYWNoZSxmdW5jdGlvbigpe3ZhciBiPWQuZXhwYW5kbyxlPXRoaXNbYl07ZSYmZS5ldmVudHMmJmUuZXZlbnRzW2ZdJiZkLmV2ZW50LnRyaWdnZXIoYSxjLGUuaGFuZGxlLmVsZW0pfSkpO2lmKCFlfHxlLm5vZGVUeXBlPT09M3x8ZS5ub2RlVHlwZT09PTgpcmV0dXJuIGI7YS5yZXN1bHQ9YixhLnRhcmdldD1lLGM9ZC5tYWtlQXJyYXkoYyksYy51bnNoaWZ0KGEpfWEuY3VycmVudFRhcmdldD1lO3ZhciBoPWQuX2RhdGEoZSwiaGFuZGxlIik7aCYmaC5hcHBseShlLGMpO3ZhciBpPWUucGFyZW50Tm9kZXx8ZS5vd25lckRvY3VtZW50O3RyeXtlJiZlLm5vZGVOYW1lJiZkLm5vRGF0YVtlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldfHxlWyJvbiIrZl0mJmVbIm9uIitmXS5hcHBseShlLGMpPT09ITEmJihhLnJlc3VsdD0hMSxhLnByZXZlbnREZWZhdWx0KCkpfWNhdGNoKGope31pZighYS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZpKWQuZXZlbnQudHJpZ2dlcihhLGMsaSwhMCk7ZWxzZSBpZighYS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIGssbD1hLnRhcmdldCxtPWYucmVwbGFjZShwLCIiKSxuPWQubm9kZU5hbWUobCwiYSIpJiZtPT09ImNsaWNrIixvPWQuZXZlbnQuc3BlY2lhbFttXXx8e307aWYoKCFvLl9kZWZhdWx0fHxvLl9kZWZhdWx0LmNhbGwoZSxhKT09PSExKSYmIW4mJiEobCYmbC5ub2RlTmFtZSYmZC5ub0RhdGFbbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkpe3RyeXtsW21dJiYoaz1sWyJvbiIrbV0sayYmKGxbIm9uIittXT1udWxsKSxkLmV2ZW50LnRyaWdnZXJlZD0hMCxsW21dKCkpfWNhdGNoKHEpe31rJiYobFsib24iK21dPWspLGQuZXZlbnQudHJpZ2dlcmVkPSExfX19LGhhbmRsZTpmdW5jdGlvbihjKXt2YXIgZSxmLGcsaCxpLGo9W10saz1kLm1ha2VBcnJheShhcmd1bWVudHMpO2M9a1swXT1kLmV2ZW50LmZpeChjfHxhLmV2ZW50KSxjLmN1cnJlbnRUYXJnZXQ9dGhpcyxlPWMudHlwZS5pbmRleE9mKCIuIik8MCYmIWMuZXhjbHVzaXZlLGV8fChnPWMudHlwZS5zcGxpdCgiLiIpLGMudHlwZT1nLnNoaWZ0KCksaj1nLnNsaWNlKDApLnNvcnQoKSxoPW5ldyBSZWdFeHAoIihefFxcLikiK2ouam9pbigiXFwuKD86LipcXC4pPyIpKyIoXFwufCQpIikpLGMubmFtZXNwYWNlPWMubmFtZXNwYWNlfHxqLmpvaW4oIi4iKSxpPWQuX2RhdGEodGhpcywiZXZlbnRzIiksZj0oaXx8e30pW2MudHlwZV07aWYoaSYmZil7Zj1mLnNsaWNlKDApO2Zvcih2YXIgbD0wLG09Zi5sZW5ndGg7bDxtO2wrKyl7dmFyIG49ZltsXTtpZihlfHxoLnRlc3Qobi5uYW1lc3BhY2UpKXtjLmhhbmRsZXI9bi5oYW5kbGVyLGMuZGF0YT1uLmRhdGEsYy5oYW5kbGVPYmo9bjt2YXIgbz1uLmhhbmRsZXIuYXBwbHkodGhpcyxrKTtvIT09YiYmKGMucmVzdWx0PW8sbz09PSExJiYoYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCkpKTtpZihjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWt9fX1yZXR1cm4gYy5yZXN1bHR9LHByb3BzOiJhbHRLZXkgYXR0ckNoYW5nZSBhdHRyTmFtZSBidWJibGVzIGJ1dHRvbiBjYW5jZWxhYmxlIGNoYXJDb2RlIGNsaWVudFggY2xpZW50WSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZGF0YSBkZXRhaWwgZXZlbnRQaGFzZSBmcm9tRWxlbWVudCBoYW5kbGVyIGtleUNvZGUgbGF5ZXJYIGxheWVyWSBtZXRhS2V5IG5ld1ZhbHVlIG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBwcmV2VmFsdWUgcmVsYXRlZE5vZGUgcmVsYXRlZFRhcmdldCBzY3JlZW5YIHNjcmVlblkgc2hpZnRLZXkgc3JjRWxlbWVudCB0YXJnZXQgdG9FbGVtZW50IHZpZXcgd2hlZWxEZWx0YSB3aGljaCIuc3BsaXQoIiAiKSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtkLmV4cGFuZG9dKXJldHVybiBhO3ZhciBlPWE7YT1kLkV2ZW50KGUpO2Zvcih2YXIgZj10aGlzLnByb3BzLmxlbmd0aCxnO2Y7KWc9dGhpcy5wcm9wc1stLWZdLGFbZ109ZVtnXTthLnRhcmdldHx8KGEudGFyZ2V0PWEuc3JjRWxlbWVudHx8YyksYS50YXJnZXQubm9kZVR5cGU9PT0zJiYoYS50YXJnZXQ9YS50YXJnZXQucGFyZW50Tm9kZSksIWEucmVsYXRlZFRhcmdldCYmYS5mcm9tRWxlbWVudCYmKGEucmVsYXRlZFRhcmdldD1hLmZyb21FbGVtZW50PT09YS50YXJnZXQ/YS50b0VsZW1lbnQ6YS5mcm9tRWxlbWVudCk7aWYoYS5wYWdlWD09bnVsbCYmYS5jbGllbnRYIT1udWxsKXt2YXIgaD1jLmRvY3VtZW50RWxlbWVudCxpPWMuYm9keTthLnBhZ2VYPWEuY2xpZW50WCsoaCYmaC5zY3JvbGxMZWZ0fHxpJiZpLnNjcm9sbExlZnR8fDApLShoJiZoLmNsaWVudExlZnR8fGkmJmkuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1hLmNsaWVudFkrKGgmJmguc2Nyb2xsVG9wfHxpJiZpLnNjcm9sbFRvcHx8MCktKGgmJmguY2xpZW50VG9wfHxpJiZpLmNsaWVudFRvcHx8MCl9YS53aGljaD09bnVsbCYmKGEuY2hhckNvZGUhPW51bGx8fGEua2V5Q29kZSE9bnVsbCkmJihhLndoaWNoPWEuY2hhckNvZGUhPW51bGw/YS5jaGFyQ29kZTphLmtleUNvZGUpLCFhLm1ldGFLZXkmJmEuY3RybEtleSYmKGEubWV0YUtleT1hLmN0cmxLZXkpLCFhLndoaWNoJiZhLmJ1dHRvbiE9PWImJihhLndoaWNoPWEuYnV0dG9uJjE/MTphLmJ1dHRvbiYyPzM6YS5idXR0b24mND8yOjApO3JldHVybiBhfSxndWlkOjFlOCxwcm94eTpkLnByb3h5LHNwZWNpYWw6e3JlYWR5OntzZXR1cDpkLmJpbmRSZWFkeSx0ZWFyZG93bjpkLm5vb3B9LGxpdmU6e2FkZDpmdW5jdGlvbihhKXtkLmV2ZW50LmFkZCh0aGlzLEYoYS5vcmlnVHlwZSxhLnNlbGVjdG9yKSxkLmV4dGVuZCh7fSxhLHtoYW5kbGVyOkUsZ3VpZDphLmhhbmRsZXIuZ3VpZH0pKX0scmVtb3ZlOmZ1bmN0aW9uKGEpe2QuZXZlbnQucmVtb3ZlKHRoaXMsRihhLm9yaWdUeXBlLGEuc2VsZWN0b3IpLGEpfX0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihhLGIsYyl7ZC5pc1dpbmRvdyh0aGlzKSYmKHRoaXMub25iZWZvcmV1bmxvYWQ9Yyl9LHRlYXJkb3duOmZ1bmN0aW9uKGEsYil7dGhpcy5vbmJlZm9yZXVubG9hZD09PWImJih0aGlzLm9uYmVmb3JldW5sb2FkPW51bGwpfX19fSxkLnJlbW92ZUV2ZW50PWMucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihhLGIsYyl7YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixjLCExKX06ZnVuY3Rpb24oYSxiLGMpe2EuZGV0YWNoRXZlbnQmJmEuZGV0YWNoRXZlbnQoIm9uIitiLGMpfSxkLkV2ZW50PWZ1bmN0aW9uKGEpe2lmKCF0aGlzLnByZXZlbnREZWZhdWx0KXJldHVybiBuZXcgZC5FdmVudChhKTthJiZhLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1hLHRoaXMudHlwZT1hLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9YS5kZWZhdWx0UHJldmVudGVkfHxhLnJldHVyblZhbHVlPT09ITF8fGEuZ2V0UHJldmVudERlZmF1bHQmJmEuZ2V0UHJldmVudERlZmF1bHQoKT93OnYpOnRoaXMudHlwZT1hLHRoaXMudGltZVN0YW1wPWQubm93KCksdGhpc1tkLmV4cGFuZG9dPSEwfSxkLkV2ZW50LnByb3RvdHlwZT17cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD13O3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDthJiYoYS5wcmV2ZW50RGVmYXVsdD9hLnByZXZlbnREZWZhdWx0KCk6YS5yZXR1cm5WYWx1ZT0hMSl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9dzt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7YSYmKGEuc3RvcFByb3BhZ2F0aW9uJiZhLnN0b3BQcm9wYWdhdGlvbigpLGEuY2FuY2VsQnViYmxlPSEwKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD13LHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9LGlzRGVmYXVsdFByZXZlbnRlZDp2LGlzUHJvcGFnYXRpb25TdG9wcGVkOnYsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6dn07dmFyIHg9ZnVuY3Rpb24oYSl7dmFyIGI9YS5yZWxhdGVkVGFyZ2V0O3RyeXtpZihiIT09YyYmIWIucGFyZW50Tm9kZSlyZXR1cm47d2hpbGUoYiYmYiE9PXRoaXMpYj1iLnBhcmVudE5vZGU7YiE9PXRoaXMmJihhLnR5cGU9YS5kYXRhLGQuZXZlbnQuaGFuZGxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9Y2F0Y2goZSl7fX0seT1mdW5jdGlvbihhKXthLnR5cGU9YS5kYXRhLGQuZXZlbnQuaGFuZGxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZC5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0sZnVuY3Rpb24oYSxiKXtkLmV2ZW50LnNwZWNpYWxbYV09e3NldHVwOmZ1bmN0aW9uKGMpe2QuZXZlbnQuYWRkKHRoaXMsYixjJiZjLnNlbGVjdG9yP3k6eCxhKX0sdGVhcmRvd246ZnVuY3Rpb24oYSl7ZC5ldmVudC5yZW1vdmUodGhpcyxiLGEmJmEuc2VsZWN0b3I/eTp4KX19fSksZC5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXN8fChkLmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbihhLGIpe2lmKHRoaXMubm9kZU5hbWUmJnRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJmb3JtIilkLmV2ZW50LmFkZCh0aGlzLCJjbGljay5zcGVjaWFsU3VibWl0IixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxjPWIudHlwZTsoYz09PSJzdWJtaXQifHxjPT09ImltYWdlIikmJmQoYikuY2xvc2VzdCgiZm9ybSIpLmxlbmd0aCYmQygic3VibWl0Iix0aGlzLGFyZ3VtZW50cyl9KSxkLmV2ZW50LmFkZCh0aGlzLCJrZXlwcmVzcy5zcGVjaWFsU3VibWl0IixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxjPWIudHlwZTsoYz09PSJ0ZXh0Inx8Yz09PSJwYXNzd29yZCIpJiZkKGIpLmNsb3Nlc3QoImZvcm0iKS5sZW5ndGgmJmEua2V5Q29kZT09PTEzJiZDKCJzdWJtaXQiLHRoaXMsYXJndW1lbnRzKX0pO2Vsc2UgcmV0dXJuITF9LHRlYXJkb3duOmZ1bmN0aW9uKGEpe2QuZXZlbnQucmVtb3ZlKHRoaXMsIi5zcGVjaWFsU3VibWl0Iil9fSk7aWYoIWQuc3VwcG9ydC5jaGFuZ2VCdWJibGVzKXt2YXIgeixBPWZ1bmN0aW9uKGEpe3ZhciBiPWEudHlwZSxjPWEudmFsdWU7Yj09PSJyYWRpbyJ8fGI9PT0iY2hlY2tib3giP2M9YS5jaGVja2VkOmI9PT0ic2VsZWN0LW11bHRpcGxlIj9jPWEuc2VsZWN0ZWRJbmRleD4tMT9kLm1hcChhLm9wdGlvbnMsZnVuY3Rpb24oYSl7cmV0dXJuIGEuc2VsZWN0ZWR9KS5qb2luKCItIik6IiI6YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09InNlbGVjdCImJihjPWEuc2VsZWN0ZWRJbmRleCk7cmV0dXJuIGN9LEI9ZnVuY3Rpb24gQihhKXt2YXIgYz1hLnRhcmdldCxlLGY7aWYocS50ZXN0KGMubm9kZU5hbWUpJiYhYy5yZWFkT25seSl7ZT1kLl9kYXRhKGMsIl9jaGFuZ2VfZGF0YSIpLGY9QShjKSwoYS50eXBlIT09ImZvY3Vzb3V0Inx8Yy50eXBlIT09InJhZGlvIikmJmQuX2RhdGEoYywiX2NoYW5nZV9kYXRhIixmKTtpZihlPT09Ynx8Zj09PWUpcmV0dXJuO2lmKGUhPW51bGx8fGYpYS50eXBlPSJjaGFuZ2UiLGEubGl2ZUZpcmVkPWIsZC5ldmVudC50cmlnZ2VyKGEsYXJndW1lbnRzWzFdLGMpfX07ZC5ldmVudC5zcGVjaWFsLmNoYW5nZT17ZmlsdGVyczp7Zm9jdXNvdXQ6QixiZWZvcmVkZWFjdGl2YXRlOkIsY2xpY2s6ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQsYz1iLnR5cGU7KGM9PT0icmFkaW8ifHxjPT09ImNoZWNrYm94Inx8Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09InNlbGVjdCIpJiZCLmNhbGwodGhpcyxhKX0sa2V5ZG93bjpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxjPWIudHlwZTsoYS5rZXlDb2RlPT09MTMmJmIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJ0ZXh0YXJlYSJ8fGEua2V5Q29kZT09PTMyJiYoYz09PSJjaGVja2JveCJ8fGM9PT0icmFkaW8iKXx8Yz09PSJzZWxlY3QtbXVsdGlwbGUiKSYmQi5jYWxsKHRoaXMsYSl9LGJlZm9yZWFjdGl2YXRlOmZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0O2QuX2RhdGEoYiwiX2NoYW5nZV9kYXRhIixBKGIpKX19LHNldHVwOmZ1bmN0aW9uKGEsYil7aWYodGhpcy50eXBlPT09ImZpbGUiKXJldHVybiExO2Zvcih2YXIgYyBpbiB6KWQuZXZlbnQuYWRkKHRoaXMsYysiLnNwZWNpYWxDaGFuZ2UiLHpbY10pO3JldHVybiBxLnRlc3QodGhpcy5ub2RlTmFtZSl9LHRlYXJkb3duOmZ1bmN0aW9uKGEpe2QuZXZlbnQucmVtb3ZlKHRoaXMsIi5zcGVjaWFsQ2hhbmdlIik7cmV0dXJuIHEudGVzdCh0aGlzLm5vZGVOYW1lKX19LHo9ZC5ldmVudC5zcGVjaWFsLmNoYW5nZS5maWx0ZXJzLHouZm9jdXM9ei5iZWZvcmVhY3RpdmF0ZX1jLmFkZEV2ZW50TGlzdGVuZXImJmQuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEpe2E9ZC5ldmVudC5maXgoYSksYS50eXBlPWI7cmV0dXJuIGQuZXZlbnQuaGFuZGxlLmNhbGwodGhpcyxhKX1kLmV2ZW50LnNwZWNpYWxbYl09e3NldHVwOmZ1bmN0aW9uKCl7dGhpcy5hZGRFdmVudExpc3RlbmVyKGEsYywhMCl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGEsYywhMCl9fX0pLGQuZWFjaChbImJpbmQiLCJvbmUiXSxmdW5jdGlvbihhLGMpe2QuZm5bY109ZnVuY3Rpb24oYSxlLGYpe2lmKHR5cGVvZiBhPT09Im9iamVjdCIpe2Zvcih2YXIgZyBpbiBhKXRoaXNbY10oZyxlLGFbZ10sZik7cmV0dXJuIHRoaXN9aWYoZC5pc0Z1bmN0aW9uKGUpfHxlPT09ITEpZj1lLGU9Yjt2YXIgaD1jPT09Im9uZSI/ZC5wcm94eShmLGZ1bmN0aW9uKGEpe2QodGhpcykudW5iaW5kKGEsaCk7cmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSk6ZjtpZihhPT09InVubG9hZCImJmMhPT0ib25lIil0aGlzLm9uZShhLGUsZik7ZWxzZSBmb3IodmFyIGk9MCxqPXRoaXMubGVuZ3RoO2k8ajtpKyspZC5ldmVudC5hZGQodGhpc1tpXSxhLGgsZSk7cmV0dXJuIHRoaXN9fSksZC5mbi5leHRlbmQoe3VuYmluZDpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBhIT09Im9iamVjdCJ8fGEucHJldmVudERlZmF1bHQpZm9yKHZhciBlPTAsZj10aGlzLmxlbmd0aDtlPGY7ZSsrKWQuZXZlbnQucmVtb3ZlKHRoaXNbZV0sYSxiKTtlbHNlIGZvcih2YXIgYyBpbiBhKXRoaXMudW5iaW5kKGMsYVtjXSk7cmV0dXJuIHRoaXN9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmxpdmUoYixjLGQsYSl9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MD90aGlzLnVuYmluZCgibGl2ZSIpOnRoaXMuZGllKGIsbnVsbCxjLGEpfSx0cmlnZ2VyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2QuZXZlbnQudHJpZ2dlcihhLGIsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oYSxiKXtpZih0aGlzWzBdKXt2YXIgYz1kLkV2ZW50KGEpO2MucHJldmVudERlZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpLGQuZXZlbnQudHJpZ2dlcihjLGIsdGhpc1swXSk7cmV0dXJuIGMucmVzdWx0fX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3ZhciBiPWFyZ3VtZW50cyxjPTE7d2hpbGUoYzxiLmxlbmd0aClkLnByb3h5KGEsYltjKytdKTtyZXR1cm4gdGhpcy5jbGljayhkLnByb3h5KGEsZnVuY3Rpb24oZSl7dmFyIGY9KGQuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkKXx8MCklYztkLl9kYXRhKHRoaXMsImxhc3RUb2dnbGUiK2EuZ3VpZCxmKzEpLGUucHJldmVudERlZmF1bHQoKTtyZXR1cm4gYltmXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fCExfSkpfSxob3ZlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoYSkubW91c2VsZWF2ZShifHxhKX19KTt2YXIgRD17Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0Iixtb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In07ZC5lYWNoKFsibGl2ZSIsImRpZSJdLGZ1bmN0aW9uKGEsYyl7ZC5mbltjXT1mdW5jdGlvbihhLGUsZixnKXt2YXIgaCxpPTAsaixrLGwsbT1nfHx0aGlzLnNlbGVjdG9yLG49Zz90aGlzOmQodGhpcy5jb250ZXh0KTtpZih0eXBlb2YgYT09PSJvYmplY3QiJiYhYS5wcmV2ZW50RGVmYXVsdCl7Zm9yKHZhciBvIGluIGEpbltjXShvLGUsYVtvXSxtKTtyZXR1cm4gdGhpc31kLmlzRnVuY3Rpb24oZSkmJihmPWUsZT1iKSxhPShhfHwiIikuc3BsaXQoIiAiKTt3aGlsZSgoaD1hW2krK10pIT1udWxsKXtqPXAuZXhlYyhoKSxrPSIiLGomJihrPWpbMF0saD1oLnJlcGxhY2UocCwiIikpO2lmKGg9PT0iaG92ZXIiKXthLnB1c2goIm1vdXNlZW50ZXIiK2ssIm1vdXNlbGVhdmUiK2spO2NvbnRpbnVlfWw9aCxoPT09ImZvY3VzInx8aD09PSJibHVyIj8oYS5wdXNoKERbaF0rayksaD1oK2spOmg9KERbaF18fGgpK2s7aWYoYz09PSJsaXZlIilmb3IodmFyIHE9MCxyPW4ubGVuZ3RoO3E8cjtxKyspZC5ldmVudC5hZGQobltxXSwibGl2ZS4iK0YoaCxtKSx7ZGF0YTplLHNlbGVjdG9yOm0saGFuZGxlcjpmLG9yaWdUeXBlOmgsb3JpZ0hhbmRsZXI6ZixwcmVUeXBlOmx9KTtlbHNlIG4udW5iaW5kKCJsaXZlLiIrRihoLG0pLGYpfXJldHVybiB0aGlzfX0pLGQuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2QuZm5bYl09ZnVuY3Rpb24oYSxjKXtjPT1udWxsJiYoYz1hLGE9bnVsbCk7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLmJpbmQoYixhLGMpOnRoaXMudHJpZ2dlcihiKX0sZC5hdHRyRm4mJihkLmF0dHJGbltiXT0hMCl9KSxmdW5jdGlvbigpe2Z1bmN0aW9uIHUoYSxiLGMsZCxlLGYpe2Zvcih2YXIgZz0wLGg9ZC5sZW5ndGg7ZzxoO2crKyl7dmFyIGk9ZFtnXTtpZihpKXt2YXIgaj0hMTtpPWlbYV07d2hpbGUoaSl7aWYoaS5zaXpjYWNoZT09PWMpe2o9ZFtpLnNpenNldF07YnJlYWt9aWYoaS5ub2RlVHlwZT09PTEpe2Z8fChpLnNpemNhY2hlPWMsaS5zaXpzZXQ9Zyk7aWYodHlwZW9mIGIhPT0ic3RyaW5nIil7aWYoaT09PWIpe2o9ITA7YnJlYWt9fWVsc2UgaWYoay5maWx0ZXIoYixbaV0pLmxlbmd0aD4wKXtqPWk7YnJlYWt9fWk9aVthXX1kW2ddPWp9fX1mdW5jdGlvbiB0KGEsYixjLGQsZSxmKXtmb3IodmFyIGc9MCxoPWQubGVuZ3RoO2c8aDtnKyspe3ZhciBpPWRbZ107aWYoaSl7dmFyIGo9ITE7aT1pW2FdO3doaWxlKGkpe2lmKGkuc2l6Y2FjaGU9PT1jKXtqPWRbaS5zaXpzZXRdO2JyZWFrfWkubm9kZVR5cGU9PT0xJiYhZiYmKGkuc2l6Y2FjaGU9YyxpLnNpenNldD1nKTtpZihpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iKXtqPWk7YnJlYWt9aT1pW2FdfWRbZ109an19fXZhciBhPS8oKD86XCgoPzpcKFteKCldK1wpfFteKCldKykrXCl8XFsoPzpcW1teXFtcXV0qXF18WyciXVteJyJdKlsnIl18W15cW1xdJyJdKykrXF18XFwufFteID4rfiwoXFtcXF0rKSt8Wz4rfl0pKFxzKixccyopPygoPzoufFxyfFxuKSopL2csZT0wLGY9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxnPSExLGg9ITAsaT0vXFwvZyxqPS9cVy87WzAsMF0uc29ydChmdW5jdGlvbigpe2g9ITE7cmV0dXJuIDB9KTt2YXIgaz1mdW5jdGlvbihiLGQsZSxnKXtlPWV8fFtdLGQ9ZHx8Yzt2YXIgaD1kO2lmKGQubm9kZVR5cGUhPT0xJiZkLm5vZGVUeXBlIT09OSlyZXR1cm5bXTtpZighYnx8dHlwZW9mIGIhPT0ic3RyaW5nIilyZXR1cm4gZTt2YXIgaSxqLG4sbyxxLHIscyx0LHU9ITAsdz1rLmlzWE1MKGQpLHg9W10seT1iO2Rve2EuZXhlYygiIiksaT1hLmV4ZWMoeSk7aWYoaSl7eT1pWzNdLHgucHVzaChpWzFdKTtpZihpWzJdKXtvPWlbM107YnJlYWt9fX13aGlsZShpKTtpZih4Lmxlbmd0aD4xJiZtLmV4ZWMoYikpaWYoeC5sZW5ndGg9PT0yJiZsLnJlbGF0aXZlW3hbMF1dKWo9dih4WzBdK3hbMV0sZCk7ZWxzZXtqPWwucmVsYXRpdmVbeFswXV0/W2RdOmsoeC5zaGlmdCgpLGQpO3doaWxlKHgubGVuZ3RoKWI9eC5zaGlmdCgpLGwucmVsYXRpdmVbYl0mJihiKz14LnNoaWZ0KCkpLGo9dihiLGopfWVsc2V7IWcmJngubGVuZ3RoPjEmJmQubm9kZVR5cGU9PT05JiYhdyYmbC5tYXRjaC5JRC50ZXN0KHhbMF0pJiYhbC5tYXRjaC5JRC50ZXN0KHhbeC5sZW5ndGgtMV0pJiYocT1rLmZpbmQoeC5zaGlmdCgpLGQsdyksZD1xLmV4cHI/ay5maWx0ZXIocS5leHByLHEuc2V0KVswXTpxLnNldFswXSk7aWYoZCl7cT1nP3tleHByOngucG9wKCksc2V0OnAoZyl9OmsuZmluZCh4LnBvcCgpLHgubGVuZ3RoPT09MSYmKHhbMF09PT0ifiJ8fHhbMF09PT0iKyIpJiZkLnBhcmVudE5vZGU/ZC5wYXJlbnROb2RlOmQsdyksaj1xLmV4cHI/ay5maWx0ZXIocS5leHByLHEuc2V0KTpxLnNldCx4Lmxlbmd0aD4wP249cChqKTp1PSExO3doaWxlKHgubGVuZ3RoKXI9eC5wb3AoKSxzPXIsbC5yZWxhdGl2ZVtyXT9zPXgucG9wKCk6cj0iIixzPT1udWxsJiYocz1kKSxsLnJlbGF0aXZlW3JdKG4scyx3KX1lbHNlIG49eD1bXX1ufHwobj1qKSxufHxrLmVycm9yKHJ8fGIpO2lmKGYuY2FsbChuKT09PSJbb2JqZWN0IEFycmF5XSIpaWYodSlpZihkJiZkLm5vZGVUeXBlPT09MSlmb3IodD0wO25bdF0hPW51bGw7dCsrKW5bdF0mJihuW3RdPT09ITB8fG5bdF0ubm9kZVR5cGU9PT0xJiZrLmNvbnRhaW5zKGQsblt0XSkpJiZlLnB1c2goalt0XSk7ZWxzZSBmb3IodD0wO25bdF0hPW51bGw7dCsrKW5bdF0mJm5bdF0ubm9kZVR5cGU9PT0xJiZlLnB1c2goalt0XSk7ZWxzZSBlLnB1c2guYXBwbHkoZSxuKTtlbHNlIHAobixlKTtvJiYoayhvLGgsZSxnKSxrLnVuaXF1ZVNvcnQoZSkpO3JldHVybiBlfTtrLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7aWYocil7Zz1oLGEuc29ydChyKTtpZihnKWZvcih2YXIgYj0xO2I8YS5sZW5ndGg7YisrKWFbYl09PT1hW2ItMV0mJmEuc3BsaWNlKGItLSwxKX1yZXR1cm4gYX0say5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGsoYSxudWxsLG51bGwsYil9LGsubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGsoYixudWxsLG51bGwsW2FdKS5sZW5ndGg+MH0say5maW5kPWZ1bmN0aW9uKGEsYixjKXt2YXIgZDtpZighYSlyZXR1cm5bXTtmb3IodmFyIGU9MCxmPWwub3JkZXIubGVuZ3RoO2U8ZjtlKyspe3ZhciBnLGg9bC5vcmRlcltlXTtpZihnPWwubGVmdE1hdGNoW2hdLmV4ZWMoYSkpe3ZhciBqPWdbMV07Zy5zcGxpY2UoMSwxKTtpZihqLnN1YnN0cihqLmxlbmd0aC0xKSE9PSJcXCIpe2dbMV09KGdbMV18fCIiKS5yZXBsYWNlKGksIiIpLGQ9bC5maW5kW2hdKGcsYixjKTtpZihkIT1udWxsKXthPWEucmVwbGFjZShsLm1hdGNoW2hdLCIiKTticmVha319fX1kfHwoZD10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PSJ1bmRlZmluZWQiP2IuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTpbXSk7cmV0dXJue3NldDpkLGV4cHI6YX19LGsuZmlsdGVyPWZ1bmN0aW9uKGEsYyxkLGUpe3ZhciBmLGcsaD1hLGk9W10saj1jLG09YyYmY1swXSYmay5pc1hNTChjWzBdKTt3aGlsZShhJiZjLmxlbmd0aCl7Zm9yKHZhciBuIGluIGwuZmlsdGVyKWlmKChmPWwubGVmdE1hdGNoW25dLmV4ZWMoYSkpIT1udWxsJiZmWzJdKXt2YXIgbyxwLHE9bC5maWx0ZXJbbl0scj1mWzFdO2c9ITEsZi5zcGxpY2UoMSwxKTtpZihyLnN1YnN0cihyLmxlbmd0aC0xKT09PSJcXCIpY29udGludWU7aj09PWkmJihpPVtdKTtpZihsLnByZUZpbHRlcltuXSl7Zj1sLnByZUZpbHRlcltuXShmLGosZCxpLGUsbSk7aWYoZil7aWYoZj09PSEwKWNvbnRpbnVlfWVsc2UgZz1vPSEwfWlmKGYpZm9yKHZhciBzPTA7KHA9altzXSkhPW51bGw7cysrKWlmKHApe289cShwLGYscyxqKTt2YXIgdD1lXiEhbztkJiZvIT1udWxsP3Q/Zz0hMDpqW3NdPSExOnQmJihpLnB1c2gocCksZz0hMCl9aWYobyE9PWIpe2R8fChqPWkpLGE9YS5yZXBsYWNlKGwubWF0Y2hbbl0sIiIpO2lmKCFnKXJldHVybltdO2JyZWFrfX1pZihhPT09aClpZihnPT1udWxsKWsuZXJyb3IoYSk7ZWxzZSBicmVhaztoPWF9cmV0dXJuIGp9LGsuZXJyb3I9ZnVuY3Rpb24oYSl7dGhyb3ciU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIithfTt2YXIgbD1rLnNlbGVjdG9ycz17b3JkZXI6WyJJRCIsIk5BTUUiLCJUQUciXSxtYXRjaDp7SUQ6LyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLENMQVNTOi9cLigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sTkFNRTovXFtuYW1lPVsnIl0qKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspWyciXSpcXS8sQVRUUjovXFtccyooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylccyooPzooXFM/PSlccyooPzooWyciXSkoLio/KVwzfCgjPyg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSopfCl8KVxzKlxdLyxUQUc6L14oKD86W1x3XHUwMGMwLVx1RkZGRlwqXC1dfFxcLikrKS8sQ0hJTEQ6Lzoob25seXxudGh8bGFzdHxmaXJzdCktY2hpbGQoPzpcKFxzKihldmVufG9kZHwoPzpbK1wtXT9cZCt8KD86WytcLV0/XGQqKT9uXHMqKD86WytcLV1ccypcZCspPykpXHMqXCkpPy8sUE9TOi86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W15cLV18JCkvLFBTRVVETzovOigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKSg/OlwoKFsnIl0/KSgoPzpcKFteXCldK1wpfFteXChcKV0qKSspXDJcKSk/L30sbGVmdE1hdGNoOnt9LGF0dHJNYXA6eyJjbGFzcyI6ImNsYXNzTmFtZSIsImZvciI6Imh0bWxGb3IifSxhdHRySGFuZGxlOntocmVmOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgidHlwZSIpfX0scmVsYXRpdmU6eyIrIjpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBiPT09InN0cmluZyIsZD1jJiYhai50ZXN0KGIpLGU9YyYmIWQ7ZCYmKGI9Yi50b0xvd2VyQ2FzZSgpKTtmb3IodmFyIGY9MCxnPWEubGVuZ3RoLGg7ZjxnO2YrKylpZihoPWFbZl0pe3doaWxlKChoPWgucHJldmlvdXNTaWJsaW5nKSYmaC5ub2RlVHlwZSE9PTEpe31hW2ZdPWV8fGgmJmgubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWI/aHx8ITE6aD09PWJ9ZSYmay5maWx0ZXIoYixhLCEwKX0sIj4iOmZ1bmN0aW9uKGEsYil7dmFyIGMsZD10eXBlb2YgYj09PSJzdHJpbmciLGU9MCxmPWEubGVuZ3RoO2lmKGQmJiFqLnRlc3QoYikpe2I9Yi50b0xvd2VyQ2FzZSgpO2Zvcig7ZTxmO2UrKyl7Yz1hW2VdO2lmKGMpe3ZhciBnPWMucGFyZW50Tm9kZTthW2VdPWcubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWI/ZzohMX19fWVsc2V7Zm9yKDtlPGY7ZSsrKWM9YVtlXSxjJiYoYVtlXT1kP2MucGFyZW50Tm9kZTpjLnBhcmVudE5vZGU9PT1iKTtkJiZrLmZpbHRlcihiLGEsITApfX0sIiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9dTt0eXBlb2YgYj09PSJzdHJpbmciJiYhai50ZXN0KGIpJiYoYj1iLnRvTG93ZXJDYXNlKCksZD1iLGc9dCksZygicGFyZW50Tm9kZSIsYixmLGEsZCxjKX0sIn4iOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxmPWUrKyxnPXU7dHlwZW9mIGI9PT0ic3RyaW5nIiYmIWoudGVzdChiKSYmKGI9Yi50b0xvd2VyQ2FzZSgpLGQ9YixnPXQpLGcoInByZXZpb3VzU2libGluZyIsYixmLGEsZCxjKX19LGZpbmQ6e0lEOmZ1bmN0aW9uKGEsYixjKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50QnlJZCE9PSJ1bmRlZmluZWQiJiYhYyl7dmFyIGQ9Yi5nZXRFbGVtZW50QnlJZChhWzFdKTtyZXR1cm4gZCYmZC5wYXJlbnROb2RlP1tkXTpbXX19LE5BTUU6ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5TmFtZSE9PSJ1bmRlZmluZWQiKXt2YXIgYz1bXSxkPWIuZ2V0RWxlbWVudHNCeU5hbWUoYVsxXSk7Zm9yKHZhciBlPTAsZj1kLmxlbmd0aDtlPGY7ZSsrKWRbZV0uZ2V0QXR0cmlidXRlKCJuYW1lIik9PT1hWzFdJiZjLnB1c2goZFtlXSk7cmV0dXJuIGMubGVuZ3RoPT09MD9udWxsOmN9fSxUQUc6ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PSJ1bmRlZmluZWQiKXJldHVybiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGFbMV0pfX0scHJlRmlsdGVyOntDTEFTUzpmdW5jdGlvbihhLGIsYyxkLGUsZil7YT0iICIrYVsxXS5yZXBsYWNlKGksIiIpKyIgIjtpZihmKXJldHVybiBhO2Zvcih2YXIgZz0wLGg7KGg9YltnXSkhPW51bGw7ZysrKWgmJihlXihoLmNsYXNzTmFtZSYmKCIgIitoLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoL1tcdFxuXHJdL2csIiAiKS5pbmRleE9mKGEpPj0wKT9jfHxkLnB1c2goaCk6YyYmKGJbZ109ITEpKTtyZXR1cm4hMX0sSUQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV0ucmVwbGFjZShpLCIiKX0sVEFHOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGFbMV0ucmVwbGFjZShpLCIiKS50b0xvd2VyQ2FzZSgpfSxDSElMRDpmdW5jdGlvbihhKXtpZihhWzFdPT09Im50aCIpe2FbMl18fGsuZXJyb3IoYVswXSksYVsyXT1hWzJdLnJlcGxhY2UoL15cK3xccyovZywiIik7dmFyIGI9LygtPykoXGQqKSg/Om4oWytcLV0/XGQqKSk/Ly5leGVjKGFbMl09PT0iZXZlbiImJiIybiJ8fGFbMl09PT0ib2RkIiYmIjJuKzEifHwhL1xELy50ZXN0KGFbMl0pJiYiMG4rIithWzJdfHxhWzJdKTthWzJdPWJbMV0rKGJbMl18fDEpLTAsYVszXT1iWzNdLTB9ZWxzZSBhWzJdJiZrLmVycm9yKGFbMF0pO2FbMF09ZSsrO3JldHVybiBhfSxBVFRSOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1hWzFdPWFbMV0ucmVwbGFjZShpLCIiKTshZiYmbC5hdHRyTWFwW2ddJiYoYVsxXT1sLmF0dHJNYXBbZ10pLGFbNF09KGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKGksIiIpLGFbMl09PT0ifj0iJiYoYVs0XT0iICIrYVs0XSsiICIpO3JldHVybiBhfSxQU0VVRE86ZnVuY3Rpb24oYixjLGQsZSxmKXtpZihiWzFdPT09Im5vdCIpaWYoKGEuZXhlYyhiWzNdKXx8IiIpLmxlbmd0aD4xfHwvXlx3Ly50ZXN0KGJbM10pKWJbM109ayhiWzNdLG51bGwsbnVsbCxjKTtlbHNle3ZhciBnPWsuZmlsdGVyKGJbM10sYyxkLCEwXmYpO2R8fGUucHVzaC5hcHBseShlLGcpO3JldHVybiExfWVsc2UgaWYobC5tYXRjaC5QT1MudGVzdChiWzBdKXx8bC5tYXRjaC5DSElMRC50ZXN0KGJbMF0pKXJldHVybiEwO3JldHVybiBifSxQT1M6ZnVuY3Rpb24oYSl7YS51bnNoaWZ0KCEwKTtyZXR1cm4gYX19LGZpbHRlcnM6e2VuYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMSYmYS50eXBlIT09ImhpZGRlbiJ9LGRpc2FibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY2hlY2tlZD09PSEwfSxzZWxlY3RlZDpmdW5jdGlvbihhKXthLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O3JldHVybiBhLnNlbGVjdGVkPT09ITB9LHBhcmVudDpmdW5jdGlvbihhKXtyZXR1cm4hIWEuZmlyc3RDaGlsZH0sZW1wdHk6ZnVuY3Rpb24oYSl7cmV0dXJuIWEuZmlyc3RDaGlsZH0saGFzOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4hIWsoY1szXSxhKS5sZW5ndGh9LGhlYWRlcjpmdW5jdGlvbihhKXtyZXR1cm4vaFxkL2kudGVzdChhLm5vZGVOYW1lKX0sdGV4dDpmdW5jdGlvbihhKXtyZXR1cm4idGV4dCI9PT1hLmdldEF0dHJpYnV0ZSgidHlwZSIpfSxyYWRpbzpmdW5jdGlvbihhKXtyZXR1cm4icmFkaW8iPT09YS50eXBlfSxjaGVja2JveDpmdW5jdGlvbihhKXtyZXR1cm4iY2hlY2tib3giPT09YS50eXBlfSxmaWxlOmZ1bmN0aW9uKGEpe3JldHVybiJmaWxlIj09PWEudHlwZX0scGFzc3dvcmQ6ZnVuY3Rpb24oYSl7cmV0dXJuInBhc3N3b3JkIj09PWEudHlwZX0sc3VibWl0OmZ1bmN0aW9uKGEpe3JldHVybiJzdWJtaXQiPT09YS50eXBlfSxpbWFnZTpmdW5jdGlvbihhKXtyZXR1cm4iaW1hZ2UiPT09YS50eXBlfSxyZXNldDpmdW5jdGlvbihhKXtyZXR1cm4icmVzZXQiPT09YS50eXBlfSxidXR0b246ZnVuY3Rpb24oYSl7cmV0dXJuImJ1dHRvbiI9PT1hLnR5cGV8fGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJidXR0b24ifSxpbnB1dDpmdW5jdGlvbihhKXtyZXR1cm4vaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbi9pLnRlc3QoYS5ub2RlTmFtZSl9fSxzZXRGaWx0ZXJzOntmaXJzdDpmdW5jdGlvbihhLGIpe3JldHVybiBiPT09MH0sbGFzdDpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYj09PWQubGVuZ3RoLTF9LGV2ZW46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYiUyPT09MH0sb2RkOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIlMj09PTF9LGx0OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYjxjWzNdLTB9LGd0OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYj5jWzNdLTB9LG50aDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGNbM10tMD09PWJ9LGVxOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gY1szXS0wPT09Yn19LGZpbHRlcjp7UFNFVURPOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWJbMV0sZj1sLmZpbHRlcnNbZV07aWYoZilyZXR1cm4gZihhLGMsYixkKTtpZihlPT09ImNvbnRhaW5zIilyZXR1cm4oYS50ZXh0Q29udGVudHx8YS5pbm5lclRleHR8fGsuZ2V0VGV4dChbYV0pfHwiIikuaW5kZXhPZihiWzNdKT49MDtpZihlPT09Im5vdCIpe3ZhciBnPWJbM107Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKWlmKGdbaF09PT1hKXJldHVybiExO3JldHVybiEwfWsuZXJyb3IoZSl9LENISUxEOmZ1bmN0aW9uKGEsYil7dmFyIGM9YlsxXSxkPWE7c3dpdGNoKGMpe2Nhc2Uib25seSI6Y2FzZSJmaXJzdCI6d2hpbGUoZD1kLnByZXZpb3VzU2libGluZylpZihkLm5vZGVUeXBlPT09MSlyZXR1cm4hMTtpZihjPT09ImZpcnN0IilyZXR1cm4hMDtkPWE7Y2FzZSJsYXN0Ijp3aGlsZShkPWQubmV4dFNpYmxpbmcpaWYoZC5ub2RlVHlwZT09PTEpcmV0dXJuITE7cmV0dXJuITA7Y2FzZSJudGgiOnZhciBlPWJbMl0sZj1iWzNdO2lmKGU9PT0xJiZmPT09MClyZXR1cm4hMDt2YXIgZz1iWzBdLGg9YS5wYXJlbnROb2RlO2lmKGgmJihoLnNpemNhY2hlIT09Z3x8IWEubm9kZUluZGV4KSl7dmFyIGk9MDtmb3IoZD1oLmZpcnN0Q2hpbGQ7ZDtkPWQubmV4dFNpYmxpbmcpZC5ub2RlVHlwZT09PTEmJihkLm5vZGVJbmRleD0rK2kpO2guc2l6Y2FjaGU9Z312YXIgaj1hLm5vZGVJbmRleC1mO3JldHVybiBlPT09MD9qPT09MDpqJWU9PT0wJiZqL2U+PTB9fSxJRDpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVUeXBlPT09MSYmYS5nZXRBdHRyaWJ1dGUoImlkIik9PT1ifSxUQUc6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj09PSIqIiYmYS5ub2RlVHlwZT09PTF8fGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWJ9LENMQVNTOmZ1bmN0aW9uKGEsYil7cmV0dXJuKCIgIisoYS5jbGFzc05hbWV8fGEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSsiICIpLmluZGV4T2YoYik+LTF9LEFUVFI6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iWzFdLGQ9bC5hdHRySGFuZGxlW2NdP2wuYXR0ckhhbmRsZVtjXShhKTphW2NdIT1udWxsP2FbY106YS5nZXRBdHRyaWJ1dGUoYyksZT1kKyIiLGY9YlsyXSxnPWJbNF07cmV0dXJuIGQ9PW51bGw/Zj09PSIhPSI6Zj09PSI9Ij9lPT09ZzpmPT09Iio9Ij9lLmluZGV4T2YoZyk+PTA6Zj09PSJ+PSI/KCIgIitlKyIgIikuaW5kZXhPZihnKT49MDpnP2Y9PT0iIT0iP2UhPT1nOmY9PT0iXj0iP2UuaW5kZXhPZihnKT09PTA6Zj09PSIkPSI/ZS5zdWJzdHIoZS5sZW5ndGgtZy5sZW5ndGgpPT09ZzpmPT09Inw9Ij9lPT09Z3x8ZS5zdWJzdHIoMCxnLmxlbmd0aCsxKT09PWcrIi0iOiExOmUmJmQhPT0hMX0sUE9TOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPWJbMl0sZj1sLnNldEZpbHRlcnNbZV07aWYoZilyZXR1cm4gZihhLGMsYixkKX19fSxtPWwubWF0Y2guUE9TLG49ZnVuY3Rpb24oYSxiKXtyZXR1cm4iXFwiKyhiLTArMSl9O2Zvcih2YXIgbyBpbiBsLm1hdGNoKWwubWF0Y2hbb109bmV3IFJlZ0V4cChsLm1hdGNoW29dLnNvdXJjZSsvKD8hW15cW10qXF0pKD8hW15cKF0qXCkpLy5zb3VyY2UpLGwubGVmdE1hdGNoW29dPW5ldyBSZWdFeHAoLyheKD86LnxccnxcbikqPykvLnNvdXJjZStsLm1hdGNoW29dLnNvdXJjZS5yZXBsYWNlKC9cXChcZCspL2csbikpO3ZhciBwPWZ1bmN0aW9uKGEsYil7YT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhLDApO2lmKGIpe2IucHVzaC5hcHBseShiLGEpO3JldHVybiBifXJldHVybiBhfTt0cnl7QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYy5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2RlcywwKVswXS5ub2RlVHlwZX1jYXRjaChxKXtwPWZ1bmN0aW9uKGEsYil7dmFyIGM9MCxkPWJ8fFtdO2lmKGYuY2FsbChhKT09PSJbb2JqZWN0IEFycmF5XSIpQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZCxhKTtlbHNlIGlmKHR5cGVvZiBhLmxlbmd0aD09PSJudW1iZXIiKWZvcih2YXIgZT1hLmxlbmd0aDtjPGU7YysrKWQucHVzaChhW2NdKTtlbHNlIGZvcig7YVtjXTtjKyspZC5wdXNoKGFbY10pO3JldHVybiBkfX12YXIgcixzO2MuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP3I9ZnVuY3Rpb24oYSxiKXtpZihhPT09Yil7Zz0hMDtyZXR1cm4gMH1pZighYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbnx8IWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24pcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24/LTE6MTtyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSY0Py0xOjF9OihyPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPVtdLGY9W10saD1hLnBhcmVudE5vZGUsaT1iLnBhcmVudE5vZGUsaj1oO2lmKGE9PT1iKXtnPSEwO3JldHVybiAwfWlmKGg9PT1pKXJldHVybiBzKGEsYik7aWYoIWgpcmV0dXJuLTE7aWYoIWkpcmV0dXJuIDE7d2hpbGUoaillLnVuc2hpZnQoaiksaj1qLnBhcmVudE5vZGU7aj1pO3doaWxlKGopZi51bnNoaWZ0KGopLGo9ai5wYXJlbnROb2RlO2M9ZS5sZW5ndGgsZD1mLmxlbmd0aDtmb3IodmFyIGs9MDtrPGMmJms8ZDtrKyspaWYoZVtrXSE9PWZba10pcmV0dXJuIHMoZVtrXSxmW2tdKTtyZXR1cm4gaz09PWM/cyhhLGZba10sLTEpOnMoZVtrXSxiLDEpfSxzPWZ1bmN0aW9uKGEsYixjKXtpZihhPT09YilyZXR1cm4gYzt2YXIgZD1hLm5leHRTaWJsaW5nO3doaWxlKGQpe2lmKGQ9PT1iKXJldHVybi0xO2Q9ZC5uZXh0U2libGluZ31yZXR1cm4gMX0pLGsuZ2V0VGV4dD1mdW5jdGlvbihhKXt2YXIgYj0iIixjO2Zvcih2YXIgZD0wO2FbZF07ZCsrKWM9YVtkXSxjLm5vZGVUeXBlPT09M3x8Yy5ub2RlVHlwZT09PTQ/Yis9Yy5ub2RlVmFsdWU6Yy5ub2RlVHlwZSE9PTgmJihiKz1rLmdldFRleHQoYy5jaGlsZE5vZGVzKSk7cmV0dXJuIGJ9LGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPSJzY3JpcHQiKyhuZXcgRGF0ZSkuZ2V0VGltZSgpLGU9Yy5kb2N1bWVudEVsZW1lbnQ7YS5pbm5lckhUTUw9IjxhIG5hbWU9JyIrZCsiJy8+IixlLmluc2VydEJlZm9yZShhLGUuZmlyc3RDaGlsZCksYy5nZXRFbGVtZW50QnlJZChkKSYmKGwuZmluZC5JRD1mdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGMuZ2V0RWxlbWVudEJ5SWQhPT0idW5kZWZpbmVkIiYmIWQpe3ZhciBlPWMuZ2V0RWxlbWVudEJ5SWQoYVsxXSk7cmV0dXJuIGU/ZS5pZD09PWFbMV18fHR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUhPT0idW5kZWZpbmVkIiYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLm5vZGVWYWx1ZT09PWFbMV0/W2VdOmI6W119fSxsLmZpbHRlci5JRD1mdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhLmdldEF0dHJpYnV0ZU5vZGUhPT0idW5kZWZpbmVkIiYmYS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBhLm5vZGVUeXBlPT09MSYmYyYmYy5ub2RlVmFsdWU9PT1ifSksZS5yZW1vdmVDaGlsZChhKSxlPWE9bnVsbH0oKSxmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5hcHBlbmRDaGlsZChjLmNyZWF0ZUNvbW1lbnQoIiIpKSxhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RoPjAmJihsLmZpbmQuVEFHPWZ1bmN0aW9uKGEsYil7dmFyIGM9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShhWzFdKTtpZihhWzFdPT09IioiKXt2YXIgZD1bXTtmb3IodmFyIGU9MDtjW2VdO2UrKyljW2VdLm5vZGVUeXBlPT09MSYmZC5wdXNoKGNbZV0pO2M9ZH1yZXR1cm4gY30pLGEuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+IixhLmZpcnN0Q2hpbGQmJnR5cGVvZiBhLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlIT09InVuZGVmaW5lZCImJmEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSE9PSIjIiYmKGwuYXR0ckhhbmRsZS5ocmVmPWZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaHJlZiIsMil9KSxhPW51bGx9KCksYy5xdWVyeVNlbGVjdG9yQWxsJiZmdW5jdGlvbigpe3ZhciBhPWssYj1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9Il9fc2l6emxlX18iO2IuaW5uZXJIVE1MPSI8cCBjbGFzcz0nVEVTVCc+PC9wPiI7aWYoIWIucXVlcnlTZWxlY3RvckFsbHx8Yi5xdWVyeVNlbGVjdG9yQWxsKCIuVEVTVCIpLmxlbmd0aCE9PTApe2s9ZnVuY3Rpb24oYixlLGYsZyl7ZT1lfHxjO2lmKCFnJiYhay5pc1hNTChlKSl7dmFyIGg9L14oXHcrJCl8XlwuKFtcd1wtXSskKXxeIyhbXHdcLV0rJCkvLmV4ZWMoYik7aWYoaCYmKGUubm9kZVR5cGU9PT0xfHxlLm5vZGVUeXBlPT09OSkpe2lmKGhbMV0pcmV0dXJuIHAoZS5nZXRFbGVtZW50c0J5VGFnTmFtZShiKSxmKTtpZihoWzJdJiZsLmZpbmQuQ0xBU1MmJmUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSlyZXR1cm4gcChlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaFsyXSksZil9aWYoZS5ub2RlVHlwZT09PTkpe2lmKGI9PT0iYm9keSImJmUuYm9keSlyZXR1cm4gcChbZS5ib2R5XSxmKTtpZihoJiZoWzNdKXt2YXIgaT1lLmdldEVsZW1lbnRCeUlkKGhbM10pO2lmKCFpfHwhaS5wYXJlbnROb2RlKXJldHVybiBwKFtdLGYpO2lmKGkuaWQ9PT1oWzNdKXJldHVybiBwKFtpXSxmKX10cnl7cmV0dXJuIHAoZS5xdWVyeVNlbGVjdG9yQWxsKGIpLGYpfWNhdGNoKGope319ZWxzZSBpZihlLm5vZGVUeXBlPT09MSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09Im9iamVjdCIpe3ZhciBtPWUsbj1lLmdldEF0dHJpYnV0ZSgiaWQiKSxvPW58fGQscT1lLnBhcmVudE5vZGUscj0vXlxzKlsrfl0vLnRlc3QoYik7bj9vPW8ucmVwbGFjZSgvJy9nLCJcXCQmIik6ZS5zZXRBdHRyaWJ1dGUoImlkIixvKSxyJiZxJiYoZT1lLnBhcmVudE5vZGUpO3RyeXtpZighcnx8cSlyZXR1cm4gcChlLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZD0nIitvKyInXSAiK2IpLGYpfWNhdGNoKHMpe31maW5hbGx5e258fG0ucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGEoYixlLGYsZyl9O2Zvcih2YXIgZSBpbiBhKWtbZV09YVtlXTtiPW51bGx9fSgpLGZ1bmN0aW9uKCl7dmFyIGE9Yy5kb2N1bWVudEVsZW1lbnQsYj1hLm1hdGNoZXNTZWxlY3Rvcnx8YS5tb3pNYXRjaGVzU2VsZWN0b3J8fGEud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxhLm1zTWF0Y2hlc1NlbGVjdG9yLGQ9ITE7dHJ5e2IuY2FsbChjLmRvY3VtZW50RWxlbWVudCwiW3Rlc3QhPScnXTpzaXp6bGUiKX1jYXRjaChlKXtkPSEwfWImJihrLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihhLGMpe2M9Yy5yZXBsYWNlKC9cPVxzKihbXiciXF1dKilccypcXS9nLCI9JyQxJ10iKTtpZighay5pc1hNTChhKSl0cnl7aWYoZHx8IWwubWF0Y2guUFNFVURPLnRlc3QoYykmJiEvIT0vLnRlc3QoYykpcmV0dXJuIGIuY2FsbChhLGMpfWNhdGNoKGUpe31yZXR1cm4gayhjLG51bGwsbnVsbCxbYV0pLmxlbmd0aD4wfSl9KCksZnVuY3Rpb24oKXt2YXIgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2EuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSd0ZXN0IGUnPjwvZGl2PjxkaXYgY2xhc3M9J3Rlc3QnPjwvZGl2PiI7aWYoYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGghPT0wKXthLmxhc3RDaGlsZC5jbGFzc05hbWU9ImUiO2lmKGEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aD09PTEpcmV0dXJuO2wub3JkZXIuc3BsaWNlKDEsMCwiQ0xBU1MiKSxsLmZpbmQuQ0xBU1M9ZnVuY3Rpb24oYSxiLGMpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT0idW5kZWZpbmVkIiYmIWMpcmV0dXJuIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhWzFdKX0sYT1udWxsfX0oKSxjLmRvY3VtZW50RWxlbWVudC5jb250YWlucz9rLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEhPT1iJiYoYS5jb250YWlucz9hLmNvbnRhaW5zKGIpOiEwKX06Yy5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ay5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybiEhKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmMTYpfTprLmNvbnRhaW5zPWZ1bmN0aW9uKCl7cmV0dXJuITF9LGsuaXNYTUw9ZnVuY3Rpb24oYSl7dmFyIGI9KGE/YS5vd25lckRvY3VtZW50fHxhOjApLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj9iLm5vZGVOYW1lIT09IkhUTUwiOiExfTt2YXIgdj1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT0iIixmPWIubm9kZVR5cGU/W2JdOmI7d2hpbGUoYz1sLm1hdGNoLlBTRVVETy5leGVjKGEpKWUrPWNbMF0sYT1hLnJlcGxhY2UobC5tYXRjaC5QU0VVRE8sIiIpO2E9bC5yZWxhdGl2ZVthXT9hKyIqIjphO2Zvcih2YXIgZz0wLGg9Zi5sZW5ndGg7ZzxoO2crKylrKGEsZltnXSxkKTtyZXR1cm4gay5maWx0ZXIoZSxkKX07ZC5maW5kPWssZC5leHByPWsuc2VsZWN0b3JzLGQuZXhwclsiOiJdPWQuZXhwci5maWx0ZXJzLGQudW5pcXVlPWsudW5pcXVlU29ydCxkLnRleHQ9ay5nZXRUZXh0LGQuaXNYTUxEb2M9ay5pc1hNTCxkLmNvbnRhaW5zPWsuY29udGFpbnN9KCk7dmFyIEc9L1VudGlsJC8sSD0vXig/OnBhcmVudHN8cHJldlVudGlsfHByZXZBbGwpLyxJPS8sLyxKPS9eLlteOiNcW1wuLF0qJC8sSz1BcnJheS5wcm90b3R5cGUuc2xpY2UsTD1kLmV4cHIubWF0Y2guUE9TLE09e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07ZC5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpLGM9MDtmb3IodmFyIGU9MCxmPXRoaXMubGVuZ3RoO2U8ZjtlKyspe2M9Yi5sZW5ndGgsZC5maW5kKGEsdGhpc1tlXSxiKTtpZihlPjApZm9yKHZhciBnPWM7ZzxiLmxlbmd0aDtnKyspZm9yKHZhciBoPTA7aDxjO2grKylpZihiW2hdPT09YltnXSl7Yi5zcGxpY2UoZy0tLDEpO2JyZWFrfX1yZXR1cm4gYn0saGFzOmZ1bmN0aW9uKGEpe3ZhciBiPWQoYSk7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsYz1iLmxlbmd0aDthPGM7YSsrKWlmKGQuY29udGFpbnModGhpcyxiW2FdKSlyZXR1cm4hMH0pfSxub3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKE8odGhpcyxhLCExKSwibm90IixhKX0sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhPKHRoaXMsYSwhMCksImZpbHRlciIsYSl9LGlzOmZ1bmN0aW9uKGEpe3JldHVybiEhYSYmZC5maWx0ZXIoYSx0aGlzKS5sZW5ndGg+MH0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe3ZhciBjPVtdLGUsZixnPXRoaXNbMF07aWYoZC5pc0FycmF5KGEpKXt2YXIgaCxpLGo9e30saz0xO2lmKGcmJmEubGVuZ3RoKXtmb3IoZT0wLGY9YS5sZW5ndGg7ZTxmO2UrKylpPWFbZV0saltpXXx8KGpbaV09ZC5leHByLm1hdGNoLlBPUy50ZXN0KGkpP2QoaSxifHx0aGlzLmNvbnRleHQpOmkpO3doaWxlKGcmJmcub3duZXJEb2N1bWVudCYmZyE9PWIpe2ZvcihpIGluIGopaD1qW2ldLChoLmpxdWVyeT9oLmluZGV4KGcpPi0xOmQoZykuaXMoaCkpJiZjLnB1c2goe3NlbGVjdG9yOmksZWxlbTpnLGxldmVsOmt9KTtnPWcucGFyZW50Tm9kZSxrKyt9fXJldHVybiBjfXZhciBsPUwudGVzdChhKT9kKGEsYnx8dGhpcy5jb250ZXh0KTpudWxsO2ZvcihlPTAsZj10aGlzLmxlbmd0aDtlPGY7ZSsrKXtnPXRoaXNbZV07d2hpbGUoZyl7aWYobD9sLmluZGV4KGcpPi0xOmQuZmluZC5tYXRjaGVzU2VsZWN0b3IoZyxhKSl7Yy5wdXNoKGcpO2JyZWFrfWc9Zy5wYXJlbnROb2RlO2lmKCFnfHwhZy5vd25lckRvY3VtZW50fHxnPT09YilicmVha319Yz1jLmxlbmd0aD4xP2QudW5pcXVlKGMpOmM7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGMsImNsb3Nlc3QiLGEpfSxpbmRleDpmdW5jdGlvbihhKXtpZighYXx8dHlwZW9mIGE9PT0ic3RyaW5nIilyZXR1cm4gZC5pbkFycmF5KHRoaXNbMF0sYT9kKGEpOnRoaXMucGFyZW50KCkuY2hpbGRyZW4oKSk7cmV0dXJuIGQuaW5BcnJheShhLmpxdWVyeT9hWzBdOmEsdGhpcyl9LGFkZDpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhPT09InN0cmluZyI/ZChhLGIpOmQubWFrZUFycmF5KGEpLGU9ZC5tZXJnZSh0aGlzLmdldCgpLGMpO3JldHVybiB0aGlzLnB1c2hTdGFjayhOKGNbMF0pfHxOKGVbMF0pP2U6ZC51bmlxdWUoZSkpfSxhbmRTZWxmOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWRkKHRoaXMucHJldk9iamVjdCl9fSksZC5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiZiLm5vZGVUeXBlIT09MTE/YjpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBkLmRpcihhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGQuZGlyKGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBkLm50aChhLDIsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIGQubnRoKGEsMiwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIGQuZGlyKGEsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIGQuZGlyKGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBkLmRpcihhLCJuZXh0U2libGluZyIsYyl9LHByZXZVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGQuZGlyKGEsInByZXZpb3VzU2libGluZyIsYyl9LHNpYmxpbmdzOmZ1bmN0aW9uKGEpe3JldHVybiBkLnNpYmxpbmcoYS5wYXJlbnROb2RlLmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGEpe3JldHVybiBkLnNpYmxpbmcoYS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGQubm9kZU5hbWUoYSwiaWZyYW1lIik/YS5jb250ZW50RG9jdW1lbnR8fGEuY29udGVudFdpbmRvdy5kb2N1bWVudDpkLm1ha2VBcnJheShhLmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oYSxiKXtkLmZuW2FdPWZ1bmN0aW9uKGMsZSl7dmFyIGY9ZC5tYXAodGhpcyxiLGMpLGc9Sy5jYWxsKGFyZ3VtZW50cyk7Ry50ZXN0KGEpfHwoZT1jKSxlJiZ0eXBlb2YgZT09PSJzdHJpbmciJiYoZj1kLmZpbHRlcihlLGYpKSxmPXRoaXMubGVuZ3RoPjEmJiFNW2FdP2QudW5pcXVlKGYpOmYsKHRoaXMubGVuZ3RoPjF8fEkudGVzdChlKSkmJkgudGVzdChhKSYmKGY9Zi5yZXZlcnNlKCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhmLGEsZy5qb2luKCIsIikpfX0pLGQuZXh0ZW5kKHtmaWx0ZXI6ZnVuY3Rpb24oYSxiLGMpe2MmJihhPSI6bm90KCIrYSsiKSIpO3JldHVybiBiLmxlbmd0aD09PTE/ZC5maW5kLm1hdGNoZXNTZWxlY3RvcihiWzBdLGEpP1tiWzBdXTpbXTpkLmZpbmQubWF0Y2hlcyhhLGIpfSxkaXI6ZnVuY3Rpb24oYSxjLGUpe3ZhciBmPVtdLGc9YVtjXTt3aGlsZShnJiZnLm5vZGVUeXBlIT09OSYmKGU9PT1ifHxnLm5vZGVUeXBlIT09MXx8IWQoZykuaXMoZSkpKWcubm9kZVR5cGU9PT0xJiZmLnB1c2goZyksZz1nW2NdO3JldHVybiBmfSxudGg6ZnVuY3Rpb24oYSxiLGMsZCl7Yj1ifHwxO3ZhciBlPTA7Zm9yKDthO2E9YVtjXSlpZihhLm5vZGVUeXBlPT09MSYmKytlPT09YilicmVhaztyZXR1cm4gYX0sc2libGluZzpmdW5jdGlvbihhLGIpe3ZhciBjPVtdO2Zvcig7YTthPWEubmV4dFNpYmxpbmcpYS5ub2RlVHlwZT09PTEmJmEhPT1iJiZjLnB1c2goYSk7cmV0dXJuIGN9fSk7dmFyIFA9LyBqUXVlcnlcZCs9Iig/OlxkK3xudWxsKSIvZyxRPS9eXHMrLyxSPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vaWcsUz0vPChbXHc6XSspLyxUPS88dGJvZHkvaSxVPS88fCYjP1x3KzsvLFY9LzwoPzpzY3JpcHR8b2JqZWN0fGVtYmVkfG9wdGlvbnxzdHlsZSkvaSxXPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLFg9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX07WC5vcHRncm91cD1YLm9wdGlvbixYLnRib2R5PVgudGZvb3Q9WC5jb2xncm91cD1YLmNhcHRpb249WC50aGVhZCxYLnRoPVgudGQsZC5zdXBwb3J0Lmh0bWxTZXJpYWxpemV8fChYLl9kZWZhdWx0PVsxLCJkaXY8ZGl2PiIsIjwvZGl2PiJdKSxkLmZuLmV4dGVuZCh7dGV4dDpmdW5jdGlvbihhKXtpZihkLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1kKHRoaXMpO2MudGV4dChhLmNhbGwodGhpcyxiLGMudGV4dCgpKSl9KTtpZih0eXBlb2YgYSE9PSJvYmplY3QiJiZhIT09YilyZXR1cm4gdGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHxjKS5jcmVhdGVUZXh0Tm9kZShhKSk7cmV0dXJuIGQudGV4dCh0aGlzKX0sd3JhcEFsbDpmdW5jdGlvbihhKXtpZihkLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtkKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsYikpfSk7aWYodGhpc1swXSl7dmFyIGI9ZChhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApO3RoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1swXSksYi5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RDaGlsZCYmYS5maXJzdENoaWxkLm5vZGVUeXBlPT09MSlhPWEuZmlyc3RDaGlsZDtyZXR1cm4gYX0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGEpe2lmKGQuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2QodGhpcykud3JhcElubmVyKGEuY2FsbCh0aGlzLGIpKX0pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1kKHRoaXMpLGM9Yi5jb250ZW50cygpO2MubGVuZ3RoP2Mud3JhcEFsbChhKTpiLmFwcGVuZChhKX0pfSx3cmFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkKHRoaXMpLndyYXBBbGwoYSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe2Qubm9kZU5hbWUodGhpcywiYm9keSIpfHxkKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9uKGEpe3RoaXMubm9kZVR5cGU9PT0xJiZ0aGlzLmFwcGVuZENoaWxkKGEpfSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuaW5zZXJ0QmVmb3JlKGEsdGhpcy5maXJzdENoaWxkKX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCExLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPWQoYXJndW1lbnRzWzBdKTthLnB1c2guYXBwbHkoYSx0aGlzLnRvQXJyYXkoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGEsImJlZm9yZSIsYXJndW1lbnRzKX19LGFmdGVyOmZ1bmN0aW9uKCl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMSxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KTtpZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgYT10aGlzLnB1c2hTdGFjayh0aGlzLCJhZnRlciIsYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSxkKGFyZ3VtZW50c1swXSkudG9BcnJheSgpKTtyZXR1cm4gYX19LHJlbW92ZTpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz0wLGU7KGU9dGhpc1tjXSkhPW51bGw7YysrKWlmKCFhfHxkLmZpbHRlcihhLFtlXSkubGVuZ3RoKSFiJiZlLm5vZGVUeXBlPT09MSYmKGQuY2xlYW5EYXRhKGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSksZC5jbGVhbkRhdGEoW2VdKSksZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSk7cmV0dXJuIHRoaXN9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsYjsoYj10aGlzW2FdKSE9bnVsbDthKyspe2Iubm9kZVR5cGU9PT0xJiZkLmNsZWFuRGF0YShiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpO3doaWxlKGIuZmlyc3RDaGlsZCliLnJlbW92ZUNoaWxkKGIuZmlyc3RDaGlsZCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGEsYil7YT1hPT1udWxsPyExOmEsYj1iPT1udWxsP2E6YjtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZC5jbG9uZSh0aGlzLGEsYil9KX0saHRtbDpmdW5jdGlvbihhKXtpZihhPT09YilyZXR1cm4gdGhpc1swXSYmdGhpc1swXS5ub2RlVHlwZT09PTE/dGhpc1swXS5pbm5lckhUTUwucmVwbGFjZShQLCIiKTpudWxsO2lmKHR5cGVvZiBhIT09InN0cmluZyJ8fFYudGVzdChhKXx8IWQuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSYmUS50ZXN0KGEpfHxYWyhTLmV4ZWMoYSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKWQuaXNGdW5jdGlvbihhKT90aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9ZCh0aGlzKTtjLmh0bWwoYS5jYWxsKHRoaXMsYixjLmh0bWwoKSkpfSk6dGhpcy5lbXB0eSgpLmFwcGVuZChhKTtlbHNle2E9YS5yZXBsYWNlKFIsIjwkMT48LyQyPiIpO3RyeXtmb3IodmFyIGM9MCxlPXRoaXMubGVuZ3RoO2M8ZTtjKyspdGhpc1tjXS5ub2RlVHlwZT09PTEmJihkLmNsZWFuRGF0YSh0aGlzW2NdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLHRoaXNbY10uaW5uZXJIVE1MPWEpfWNhdGNoKGYpe3RoaXMuZW1wdHkoKS5hcHBlbmQoYSl9fXJldHVybiB0aGlzfSxyZXBsYWNlV2l0aDpmdW5jdGlvbihhKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpe2lmKGQuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWQodGhpcyksZT1jLmh0bWwoKTtjLnJlcGxhY2VXaXRoKGEuY2FsbCh0aGlzLGIsZSkpfSk7dHlwZW9mIGEhPT0ic3RyaW5nIiYmKGE9ZChhKS5kZXRhY2goKSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPXRoaXMubmV4dFNpYmxpbmcsYz10aGlzLnBhcmVudE5vZGU7ZCh0aGlzKS5yZW1vdmUoKSxiP2QoYikuYmVmb3JlKGEpOmQoYykuYXBwZW5kKGEpfSl9cmV0dXJuIHRoaXMucHVzaFN0YWNrKGQoZC5pc0Z1bmN0aW9uKGEpP2EoKTphKSwicmVwbGFjZVdpdGgiLGEpfSxkZXRhY2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucmVtb3ZlKGEsITApfSxkb21NYW5pcDpmdW5jdGlvbihhLGMsZSl7dmFyIGYsZyxoLGksaj1hWzBdLGs9W107aWYoIWQuc3VwcG9ydC5jaGVja0Nsb25lJiZhcmd1bWVudHMubGVuZ3RoPT09MyYmdHlwZW9mIGo9PT0ic3RyaW5nIiYmVy50ZXN0KGopKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkKHRoaXMpLmRvbU1hbmlwKGEsYyxlLCEwKX0pO2lmKGQuaXNGdW5jdGlvbihqKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGYpe3ZhciBnPWQodGhpcyk7YVswXT1qLmNhbGwodGhpcyxmLGM/Zy5odG1sKCk6YiksZy5kb21NYW5pcChhLGMsZSl9KTtpZih0aGlzWzBdKXtpPWomJmoucGFyZW50Tm9kZSxkLnN1cHBvcnQucGFyZW50Tm9kZSYmaSYmaS5ub2RlVHlwZT09PTExJiZpLmNoaWxkTm9kZXMubGVuZ3RoPT09dGhpcy5sZW5ndGg/Zj17ZnJhZ21lbnQ6aX06Zj1kLmJ1aWxkRnJhZ21lbnQoYSx0aGlzLGspLGg9Zi5mcmFnbWVudCxoLmNoaWxkTm9kZXMubGVuZ3RoPT09MT9nPWg9aC5maXJzdENoaWxkOmc9aC5maXJzdENoaWxkO2lmKGcpe2M9YyYmZC5ub2RlTmFtZShnLCJ0ciIpO2Zvcih2YXIgbD0wLG09dGhpcy5sZW5ndGgsbj1tLTE7bDxtO2wrKyllLmNhbGwoYz9ZKHRoaXNbbF0sZyk6dGhpc1tsXSxmLmNhY2hlYWJsZXx8bT4xJiZsPG4/ZC5jbG9uZShoLCEwLCEwKTpoKX1rLmxlbmd0aCYmZC5lYWNoKGssYmEpfXJldHVybiB0aGlzfX0pLGQuYnVpbGRGcmFnbWVudD1mdW5jdGlvbihhLGIsZSl7dmFyIGYsZyxoLGk9YiYmYlswXT9iWzBdLm93bmVyRG9jdW1lbnR8fGJbMF06YzthLmxlbmd0aD09PTEmJnR5cGVvZiBhWzBdPT09InN0cmluZyImJmFbMF0ubGVuZ3RoPDUxMiYmaT09PWMmJmFbMF0uY2hhckF0KDApPT09IjwiJiYhVi50ZXN0KGFbMF0pJiYoZC5zdXBwb3J0LmNoZWNrQ2xvbmV8fCFXLnRlc3QoYVswXSkpJiYoZz0hMCxoPWQuZnJhZ21lbnRzW2FbMF1dLGgmJihoIT09MSYmKGY9aCkpKSxmfHwoZj1pLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxkLmNsZWFuKGEsaSxmLGUpKSxnJiYoZC5mcmFnbWVudHNbYVswXV09aD9mOjEpO3JldHVybntmcmFnbWVudDpmLGNhY2hlYWJsZTpnfX0sZC5mcmFnbWVudHM9e30sZC5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXtkLmZuW2FdPWZ1bmN0aW9uKGMpe3ZhciBlPVtdLGY9ZChjKSxnPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO2lmKGcmJmcubm9kZVR5cGU9PT0xMSYmZy5jaGlsZE5vZGVzLmxlbmd0aD09PTEmJmYubGVuZ3RoPT09MSl7ZltiXSh0aGlzWzBdKTtyZXR1cm4gdGhpc31mb3IodmFyIGg9MCxpPWYubGVuZ3RoO2g8aTtoKyspe3ZhciBqPShoPjA/dGhpcy5jbG9uZSghMCk6dGhpcykuZ2V0KCk7ZChmW2hdKVtiXShqKSxlPWUuY29uY2F0KGopfXJldHVybiB0aGlzLnB1c2hTdGFjayhlLGEsZi5zZWxlY3Rvcil9fSksZC5leHRlbmQoe2Nsb25lOmZ1bmN0aW9uKGEsYixjKXt2YXIgZT1hLmNsb25lTm9kZSghMCksZixnLGg7aWYoKCFkLnN1cHBvcnQubm9DbG9uZUV2ZW50fHwhZC5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSYmKGEubm9kZVR5cGU9PT0xfHxhLm5vZGVUeXBlPT09MTEpJiYhZC5pc1hNTERvYyhhKSl7JChhLGUpLGY9XyhhKSxnPV8oZSk7Zm9yKGg9MDtmW2hdOysraCkkKGZbaF0sZ1toXSl9aWYoYil7WihhLGUpO2lmKGMpe2Y9XyhhKSxnPV8oZSk7Zm9yKGg9MDtmW2hdOysraClaKGZbaF0sZ1toXSl9fXJldHVybiBlfSxjbGVhbjpmdW5jdGlvbihhLGIsZSxmKXtiPWJ8fGMsdHlwZW9mIGIuY3JlYXRlRWxlbWVudD09PSJ1bmRlZmluZWQiJiYoYj1iLm93bmVyRG9jdW1lbnR8fGJbMF0mJmJbMF0ub3duZXJEb2N1bWVudHx8Yyk7dmFyIGc9W107Zm9yKHZhciBoPTAsaTsoaT1hW2hdKSE9bnVsbDtoKyspe3R5cGVvZiBpPT09Im51bWJlciImJihpKz0iIik7aWYoIWkpY29udGludWU7aWYodHlwZW9mIGkhPT0ic3RyaW5nInx8VS50ZXN0KGkpKXtpZih0eXBlb2YgaT09PSJzdHJpbmciKXtpPWkucmVwbGFjZShSLCI8JDE+PC8kMj4iKTt2YXIgaj0oUy5leGVjKGkpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLGs9WFtqXXx8WC5fZGVmYXVsdCxsPWtbMF0sbT1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpO20uaW5uZXJIVE1MPWtbMV0raStrWzJdO3doaWxlKGwtLSltPW0ubGFzdENoaWxkO2lmKCFkLnN1cHBvcnQudGJvZHkpe3ZhciBuPVQudGVzdChpKSxvPWo9PT0idGFibGUiJiYhbj9tLmZpcnN0Q2hpbGQmJm0uZmlyc3RDaGlsZC5jaGlsZE5vZGVzOmtbMV09PT0iPHRhYmxlPiImJiFuP20uY2hpbGROb2RlczpbXTtmb3IodmFyIHA9by5sZW5ndGgtMTtwPj0wOy0tcClkLm5vZGVOYW1lKG9bcF0sInRib2R5IikmJiFvW3BdLmNoaWxkTm9kZXMubGVuZ3RoJiZvW3BdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob1twXSl9IWQuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSYmUS50ZXN0KGkpJiZtLmluc2VydEJlZm9yZShiLmNyZWF0ZVRleHROb2RlKFEuZXhlYyhpKVswXSksbS5maXJzdENoaWxkKSxpPW0uY2hpbGROb2Rlc319ZWxzZSBpPWIuY3JlYXRlVGV4dE5vZGUoaSk7aS5ub2RlVHlwZT9nLnB1c2goaSk6Zz1kLm1lcmdlKGcsaSl9aWYoZSlmb3IoaD0wO2dbaF07aCsrKSFmfHwhZC5ub2RlTmFtZShnW2hdLCJzY3JpcHQiKXx8Z1toXS50eXBlJiZnW2hdLnR5cGUudG9Mb3dlckNhc2UoKSE9PSJ0ZXh0L2phdmFzY3JpcHQiPyhnW2hdLm5vZGVUeXBlPT09MSYmZy5zcGxpY2UuYXBwbHkoZyxbaCsxLDBdLmNvbmNhdChkLm1ha2VBcnJheShnW2hdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSkpKSxlLmFwcGVuZENoaWxkKGdbaF0pKTpmLnB1c2goZ1toXS5wYXJlbnROb2RlP2dbaF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChnW2hdKTpnW2hdKTtyZXR1cm4gZ30sY2xlYW5EYXRhOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZT1kLmNhY2hlLGY9ZC5leHBhbmRvLGc9ZC5ldmVudC5zcGVjaWFsLGg9ZC5zdXBwb3J0LmRlbGV0ZUV4cGFuZG87Zm9yKHZhciBpPTAsajsoaj1hW2ldKSE9bnVsbDtpKyspe2lmKGoubm9kZU5hbWUmJmQubm9EYXRhW2oubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pY29udGludWU7Yz1qW2QuZXhwYW5kb107aWYoYyl7Yj1lW2NdJiZlW2NdW2ZdO2lmKGImJmIuZXZlbnRzKXtmb3IodmFyIGsgaW4gYi5ldmVudHMpZ1trXT9kLmV2ZW50LnJlbW92ZShqLGspOmQucmVtb3ZlRXZlbnQoaixrLGIuaGFuZGxlKTtiLmhhbmRsZSYmKGIuaGFuZGxlLmVsZW09bnVsbCl9aD9kZWxldGUgaltkLmV4cGFuZG9dOmoucmVtb3ZlQXR0cmlidXRlJiZqLnJlbW92ZUF0dHJpYnV0ZShkLmV4cGFuZG8pLGRlbGV0ZSBlW2NdfX19fSk7dmFyIGJiPS9hbHBoYVwoW14pXSpcKS9pLGJjPS9vcGFjaXR5PShbXildKikvLGJkPS8tKFthLXpdKS9pZyxiZT0vKFtBLVpdKS9nLGJmPS9eLT9cZCsoPzpweCk/JC9pLGJnPS9eLT9cZC8sYmg9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LGJpPVsiTGVmdCIsIlJpZ2h0Il0sYmo9WyJUb3AiLCJCb3R0b20iXSxiayxibCxibSxibj1mdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9O2QuZm4uY3NzPWZ1bmN0aW9uKGEsYyl7aWYoYXJndW1lbnRzLmxlbmd0aD09PTImJmM9PT1iKXJldHVybiB0aGlzO3JldHVybiBkLmFjY2Vzcyh0aGlzLGEsYywhMCxmdW5jdGlvbihhLGMsZSl7cmV0dXJuIGUhPT1iP2Quc3R5bGUoYSxjLGUpOmQuY3NzKGEsYyl9KX0sZC5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oYSxiKXtpZihiKXt2YXIgYz1iayhhLCJvcGFjaXR5Iiwib3BhY2l0eSIpO3JldHVybiBjPT09IiI/IjEiOmN9cmV0dXJuIGEuc3R5bGUub3BhY2l0eX19fSxjc3NOdW1iZXI6e3pJbmRleDohMCxmb250V2VpZ2h0OiEwLG9wYWNpdHk6ITAsem9vbTohMCxsaW5lSGVpZ2h0OiEwfSxjc3NQcm9wczp7ImZsb2F0IjpkLnN1cHBvcnQuY3NzRmxvYXQ/ImNzc0Zsb2F0Ijoic3R5bGVGbG9hdCJ9LHN0eWxlOmZ1bmN0aW9uKGEsYyxlLGYpe2lmKGEmJmEubm9kZVR5cGUhPT0zJiZhLm5vZGVUeXBlIT09OCYmYS5zdHlsZSl7dmFyIGcsaD1kLmNhbWVsQ2FzZShjKSxpPWEuc3R5bGUsaj1kLmNzc0hvb2tzW2hdO2M9ZC5jc3NQcm9wc1toXXx8aDtpZihlPT09Yil7aWYoaiYmImdldCJpbiBqJiYoZz1qLmdldChhLCExLGYpKSE9PWIpcmV0dXJuIGc7cmV0dXJuIGlbY119aWYodHlwZW9mIGU9PT0ibnVtYmVyIiYmaXNOYU4oZSl8fGU9PW51bGwpcmV0dXJuO3R5cGVvZiBlPT09Im51bWJlciImJiFkLmNzc051bWJlcltoXSYmKGUrPSJweCIpO2lmKCFqfHwhKCJzZXQiaW4gail8fChlPWouc2V0KGEsZSkpIT09Yil0cnl7aVtjXT1lfWNhdGNoKGspe319fSxjc3M6ZnVuY3Rpb24oYSxjLGUpe3ZhciBmLGc9ZC5jYW1lbENhc2UoYyksaD1kLmNzc0hvb2tzW2ddO2M9ZC5jc3NQcm9wc1tnXXx8ZztpZihoJiYiZ2V0ImluIGgmJihmPWguZ2V0KGEsITAsZSkpIT09YilyZXR1cm4gZjtpZihiaylyZXR1cm4gYmsoYSxjLGcpfSxzd2FwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD17fTtmb3IodmFyIGUgaW4gYilkW2VdPWEuc3R5bGVbZV0sYS5zdHlsZVtlXT1iW2VdO2MuY2FsbChhKTtmb3IoZSBpbiBiKWEuc3R5bGVbZV09ZFtlXX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoYmQsYm4pfX0pLGQuY3VyQ1NTPWQuY3NzLGQuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oYSxiKXtkLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGUpe3ZhciBmO2lmKGMpe2Eub2Zmc2V0V2lkdGghPT0wP2Y9Ym8oYSxiLGUpOmQuc3dhcChhLGJoLGZ1bmN0aW9uKCl7Zj1ibyhhLGIsZSl9KTtpZihmPD0wKXtmPWJrKGEsYixiKSxmPT09IjBweCImJmJtJiYoZj1ibShhLGIsYikpO2lmKGYhPW51bGwpcmV0dXJuIGY9PT0iInx8Zj09PSJhdXRvIj8iMHB4IjpmfWlmKGY8MHx8Zj09bnVsbCl7Zj1hLnN0eWxlW2JdO3JldHVybiBmPT09IiJ8fGY9PT0iYXV0byI/IjBweCI6Zn1yZXR1cm4gdHlwZW9mIGY9PT0ic3RyaW5nIj9mOmYrInB4In19LHNldDpmdW5jdGlvbihhLGIpe2lmKCFiZi50ZXN0KGIpKXJldHVybiBiO2I9cGFyc2VGbG9hdChiKTtpZihiPj0wKXJldHVybiBiKyJweCJ9fX0pLGQuc3VwcG9ydC5vcGFjaXR5fHwoZC5jc3NIb29rcy5vcGFjaXR5PXtnZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYmMudGVzdCgoYiYmYS5jdXJyZW50U3R5bGU/YS5jdXJyZW50U3R5bGUuZmlsdGVyOmEuc3R5bGUuZmlsdGVyKXx8IiIpP3BhcnNlRmxvYXQoUmVnRXhwLiQxKS8xMDArIiI6Yj8iMSI6IiJ9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPWEuc3R5bGU7Yy56b29tPTE7dmFyIGU9ZC5pc05hTihiKT8iIjoiYWxwaGEob3BhY2l0eT0iK2IqMTAwKyIpIixmPWMuZmlsdGVyfHwiIjtjLmZpbHRlcj1iYi50ZXN0KGYpP2YucmVwbGFjZShiYixlKTpjLmZpbHRlcisiICIrZX19KSxjLmRlZmF1bHRWaWV3JiZjLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihibD1mdW5jdGlvbihhLGMsZSl7dmFyIGYsZyxoO2U9ZS5yZXBsYWNlKGJlLCItJDEiKS50b0xvd2VyQ2FzZSgpO2lmKCEoZz1hLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpKXJldHVybiBiO2lmKGg9Zy5nZXRDb21wdXRlZFN0eWxlKGEsbnVsbCkpZj1oLmdldFByb3BlcnR5VmFsdWUoZSksZj09PSIiJiYhZC5jb250YWlucyhhLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGEpJiYoZj1kLnN0eWxlKGEsZSkpO3JldHVybiBmfSksYy5kb2N1bWVudEVsZW1lbnQuY3VycmVudFN0eWxlJiYoYm09ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPWEuY3VycmVudFN0eWxlJiZhLmN1cnJlbnRTdHlsZVtiXSxlPWEucnVudGltZVN0eWxlJiZhLnJ1bnRpbWVTdHlsZVtiXSxmPWEuc3R5bGU7IWJmLnRlc3QoZCkmJmJnLnRlc3QoZCkmJihjPWYubGVmdCxlJiYoYS5ydW50aW1lU3R5bGUubGVmdD1hLmN1cnJlbnRTdHlsZS5sZWZ0KSxmLmxlZnQ9Yj09PSJmb250U2l6ZSI/IjFlbSI6ZHx8MCxkPWYucGl4ZWxMZWZ0KyJweCIsZi5sZWZ0PWMsZSYmKGEucnVudGltZVN0eWxlLmxlZnQ9ZSkpO3JldHVybiBkPT09IiI/ImF1dG8iOmR9KSxiaz1ibHx8Ym0sZC5leHByJiZkLmV4cHIuZmlsdGVycyYmKGQuZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihhKXt2YXIgYj1hLm9mZnNldFdpZHRoLGM9YS5vZmZzZXRIZWlnaHQ7cmV0dXJuIGI9PT0wJiZjPT09MHx8IWQuc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMmJihhLnN0eWxlLmRpc3BsYXl8fGQuY3NzKGEsImRpc3BsYXkiKSk9PT0ibm9uZSJ9LGQuZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oYSl7cmV0dXJuIWQuZXhwci5maWx0ZXJzLmhpZGRlbihhKX0pO3ZhciBicD0vJTIwL2csYnE9L1xbXF0kLyxicj0vXHI/XG4vZyxicz0vIy4qJC8sYnQ9L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZyxidT0vXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZW1haWx8aGlkZGVufG1vbnRofG51bWJlcnxwYXNzd29yZHxyYW5nZXxzZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8d2VlaykkL2ksYnY9Lyg/Ol5maWxlfF53aWRnZXR8XC1leHRlbnNpb24pOiQvLGJ3PS9eKD86R0VUfEhFQUQpJC8sYng9L15cL1wvLyxieT0vXD8vLGJ6PS88c2NyaXB0XGJbXjxdKig/Oig/ITxcL3NjcmlwdD4pPFtePF0qKSo8XC9zY3JpcHQ+L2dpLGJBPS9eKD86c2VsZWN0fHRleHRhcmVhKS9pLGJCPS9ccysvLGJDPS8oWz8mXSlfPVteJl0qLyxiRD0vKF58XC0pKFthLXpdKS9nLGJFPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYitjLnRvVXBwZXJDYXNlKCl9LGJGPS9eKFtcd1wrXC5cLV0rOilcL1wvKFteXC8/IzpdKikoPzo6KFxkKykpPy8sYkc9ZC5mbi5sb2FkLGJIPXt9LGJJPXt9LGJKLGJLO3RyeXtiSj1jLmxvY2F0aW9uLmhyZWZ9Y2F0Y2goYkwpe2JKPWMuY3JlYXRlRWxlbWVudCgiYSIpLGJKLmhyZWY9IiIsYko9YkouaHJlZn1iSz1iRi5leGVjKGJKLnRvTG93ZXJDYXNlKCkpLGQuZm4uZXh0ZW5kKHtsb2FkOmZ1bmN0aW9uKGEsYyxlKXtpZih0eXBlb2YgYSE9PSJzdHJpbmciJiZiRylyZXR1cm4gYkcuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZj1hLmluZGV4T2YoIiAiKTtpZihmPj0wKXt2YXIgZz1hLnNsaWNlKGYsYS5sZW5ndGgpO2E9YS5zbGljZSgwLGYpfXZhciBoPSJHRVQiO2MmJihkLmlzRnVuY3Rpb24oYyk/KGU9YyxjPWIpOnR5cGVvZiBjPT09Im9iamVjdCImJihjPWQucGFyYW0oYyxkLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCksaD0iUE9TVCIpKTt2YXIgaT10aGlzO2QuYWpheCh7dXJsOmEsdHlwZTpoLGRhdGFUeXBlOiJodG1sIixkYXRhOmMsY29tcGxldGU6ZnVuY3Rpb24oYSxiLGMpe2M9YS5yZXNwb25zZVRleHQsYS5pc1Jlc29sdmVkKCkmJihhLmRvbmUoZnVuY3Rpb24oYSl7Yz1hfSksaS5odG1sKGc/ZCgiPGRpdj4iKS5hcHBlbmQoYy5yZXBsYWNlKGJ6LCIiKSkuZmluZChnKTpjKSksZSYmaS5lYWNoKGUsW2MsYixhXSl9fSk7cmV0dXJuIHRoaXN9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiBkLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudHM/ZC5tYWtlQXJyYXkodGhpcy5lbGVtZW50cyk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWUmJiF0aGlzLmRpc2FibGVkJiYodGhpcy5jaGVja2VkfHxiQS50ZXN0KHRoaXMubm9kZU5hbWUpfHxidS50ZXN0KHRoaXMudHlwZSkpfSkubWFwKGZ1bmN0aW9uKGEsYil7dmFyIGM9ZCh0aGlzKS52YWwoKTtyZXR1cm4gYz09bnVsbD9udWxsOmQuaXNBcnJheShjKT9kLm1hcChjLGZ1bmN0aW9uKGEsYyl7cmV0dXJue25hbWU6Yi5uYW1lLHZhbHVlOmEucmVwbGFjZShiciwiXHJcbiIpfX0pOntuYW1lOmIubmFtZSx2YWx1ZTpjLnJlcGxhY2UoYnIsIlxyXG4iKX19KS5nZXQoKX19KSxkLmVhY2goImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFqYXhTdWNjZXNzIGFqYXhTZW5kIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7ZC5mbltiXT1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5iaW5kKGIsYSl9fSksZC5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGEsYyl7ZFtjXT1mdW5jdGlvbihhLGUsZixnKXtkLmlzRnVuY3Rpb24oZSkmJihnPWd8fGYsZj1lLGU9Yik7cmV0dXJuIGQuYWpheCh7dHlwZTpjLHVybDphLGRhdGE6ZSxzdWNjZXNzOmYsZGF0YVR5cGU6Z30pfX0pLGQuZXh0ZW5kKHtnZXRTY3JpcHQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gZC5nZXQoYSxiLGMsInNjcmlwdCIpfSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZC5nZXQoYSxiLGMsImpzb24iKX0sYWpheFNldHVwOmZ1bmN0aW9uKGEsYil7Yj9kLmV4dGVuZCghMCxhLGQuYWpheFNldHRpbmdzLGIpOihiPWEsYT1kLmV4dGVuZCghMCxkLmFqYXhTZXR0aW5ncyxiKSk7Zm9yKHZhciBjIGluIHtjb250ZXh0OjEsdXJsOjF9KWMgaW4gYj9hW2NdPWJbY106YyBpbiBkLmFqYXhTZXR0aW5ncyYmKGFbY109ZC5hamF4U2V0dGluZ3NbY10pO3JldHVybiBhfSxhamF4U2V0dGluZ3M6e3VybDpiSixpc0xvY2FsOmJ2LnRlc3QoYktbMV0pLGdsb2JhbDohMCx0eXBlOiJHRVQiLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGFjY2VwdHM6e3htbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsaHRtbDoidGV4dC9odG1sIix0ZXh0OiJ0ZXh0L3BsYWluIixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiLCIqIjoiKi8qIn0sY29udGVudHM6e3htbDoveG1sLyxodG1sOi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOmEuU3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOmQucGFyc2VKU09OLCJ0ZXh0IHhtbCI6ZC5wYXJzZVhNTH19LGFqYXhQcmVmaWx0ZXI6Yk0oYkgpLGFqYXhUcmFuc3BvcnQ6Yk0oYkkpLGFqYXg6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiB2KGEsYyxsLG4pe2lmKHIhPT0yKXtyPTIscCYmY2xlYXJUaW1lb3V0KHApLG89YixtPW58fCIiLHUucmVhZHlTdGF0ZT1hPzQ6MDt2YXIgcSx0LHYsdz1sP2JQKGUsdSxsKTpiLHgseTtpZihhPj0yMDAmJmE8MzAwfHxhPT09MzA0KXtpZihlLmlmTW9kaWZpZWQpe2lmKHg9dS5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpKWQubGFzdE1vZGlmaWVkW2tdPXg7aWYoeT11LmdldFJlc3BvbnNlSGVhZGVyKCJFdGFnIikpZC5ldGFnW2tdPXl9aWYoYT09PTMwNCljPSJub3Rtb2RpZmllZCIscT0hMDtlbHNlIHRyeXt0PWJRKGUsdyksYz0ic3VjY2VzcyIscT0hMH1jYXRjaCh6KXtjPSJwYXJzZXJlcnJvciIsdj16fX1lbHNle3Y9YztpZighY3x8YSljPSJlcnJvciIsYTwwJiYoYT0wKX11LnN0YXR1cz1hLHUuc3RhdHVzVGV4dD1jLHE/aC5yZXNvbHZlV2l0aChmLFt0LGMsdV0pOmgucmVqZWN0V2l0aChmLFt1LGMsdl0pLHUuc3RhdHVzQ29kZShqKSxqPWIscyYmZy50cmlnZ2VyKCJhamF4IisocT8iU3VjY2VzcyI6IkVycm9yIiksW3UsZSxxP3Q6dl0pLGkucmVzb2x2ZVdpdGgoZixbdSxjXSkscyYmKGcudHJpZ2dlcigiYWpheENvbXBsZXRlIixbdSxlXSksLS1kLmFjdGl2ZXx8ZC5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKX19dHlwZW9mIGE9PT0ib2JqZWN0IiYmKGM9YSxhPWIpLGM9Y3x8e307dmFyIGU9ZC5hamF4U2V0dXAoe30sYyksZj1lLmNvbnRleHR8fGUsZz1mIT09ZSYmKGYubm9kZVR5cGV8fGYgaW5zdGFuY2VvZiBkKT9kKGYpOmQuZXZlbnQsaD1kLkRlZmVycmVkKCksaT1kLl9EZWZlcnJlZCgpLGo9ZS5zdGF0dXNDb2RlfHx7fSxrLGw9e30sbSxuLG8scCxxLHI9MCxzLHQsdT17cmVhZHlTdGF0ZTowLHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oYSxiKXtyfHwobFthLnRvTG93ZXJDYXNlKCkucmVwbGFjZShiRCxiRSldPWIpO3JldHVybiB0aGlzfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gcj09PTI/bTpudWxsfSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihhKXt2YXIgYztpZihyPT09Mil7aWYoIW4pe249e307d2hpbGUoYz1idC5leGVjKG0pKW5bY1sxXS50b0xvd2VyQ2FzZSgpXT1jWzJdfWM9blthLnRvTG93ZXJDYXNlKCldfXJldHVybiBjPT09Yj9udWxsOmN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oYSl7cnx8KGUubWltZVR5cGU9YSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGEpe2E9YXx8ImFib3J0IixvJiZvLmFib3J0KGEpLHYoMCxhKTtyZXR1cm4gdGhpc319O2gucHJvbWlzZSh1KSx1LnN1Y2Nlc3M9dS5kb25lLHUuZXJyb3I9dS5mYWlsLHUuY29tcGxldGU9aS5kb25lLHUuc3RhdHVzQ29kZT1mdW5jdGlvbihhKXtpZihhKXt2YXIgYjtpZihyPDIpZm9yKGIgaW4gYSlqW2JdPVtqW2JdLGFbYl1dO2Vsc2UgYj1hW3Uuc3RhdHVzXSx1LnRoZW4oYixiKX1yZXR1cm4gdGhpc30sZS51cmw9KChhfHxlLnVybCkrIiIpLnJlcGxhY2UoYnMsIiIpLnJlcGxhY2UoYngsYktbMV0rIi8vIiksZS5kYXRhVHlwZXM9ZC50cmltKGUuZGF0YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5zcGxpdChiQiksZS5jcm9zc0RvbWFpbnx8KHE9YkYuZXhlYyhlLnVybC50b0xvd2VyQ2FzZSgpKSxlLmNyb3NzRG9tYWluPXEmJihxWzFdIT1iS1sxXXx8cVsyXSE9YktbMl18fChxWzNdfHwocVsxXT09PSJodHRwOiI/ODA6NDQzKSkhPShiS1szXXx8KGJLWzFdPT09Imh0dHA6Ij84MDo0NDMpKSkpLGUuZGF0YSYmZS5wcm9jZXNzRGF0YSYmdHlwZW9mIGUuZGF0YSE9PSJzdHJpbmciJiYoZS5kYXRhPWQucGFyYW0oZS5kYXRhLGUudHJhZGl0aW9uYWwpKSxiTihiSCxlLGMsdSk7aWYocj09PTIpcmV0dXJuITE7cz1lLmdsb2JhbCxlLnR5cGU9ZS50eXBlLnRvVXBwZXJDYXNlKCksZS5oYXNDb250ZW50PSFidy50ZXN0KGUudHlwZSkscyYmZC5hY3RpdmUrKz09PTAmJmQuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iik7aWYoIWUuaGFzQ29udGVudCl7ZS5kYXRhJiYoZS51cmwrPShieS50ZXN0KGUudXJsKT8iJiI6Ij8iKStlLmRhdGEpLGs9ZS51cmw7aWYoZS5jYWNoZT09PSExKXt2YXIgdz1kLm5vdygpLHg9ZS51cmwucmVwbGFjZShiQywiJDFfPSIrdyk7ZS51cmw9eCsoeD09PWUudXJsPyhieS50ZXN0KGUudXJsKT8iJiI6Ij8iKSsiXz0iK3c6IiIpfX1pZihlLmRhdGEmJmUuaGFzQ29udGVudCYmZS5jb250ZW50VHlwZSE9PSExfHxjLmNvbnRlbnRUeXBlKWxbIkNvbnRlbnQtVHlwZSJdPWUuY29udGVudFR5cGU7ZS5pZk1vZGlmaWVkJiYoaz1rfHxlLnVybCxkLmxhc3RNb2RpZmllZFtrXSYmKGxbIklmLU1vZGlmaWVkLVNpbmNlIl09ZC5sYXN0TW9kaWZpZWRba10pLGQuZXRhZ1trXSYmKGxbIklmLU5vbmUtTWF0Y2giXT1kLmV0YWdba10pKSxsLkFjY2VwdD1lLmRhdGFUeXBlc1swXSYmZS5hY2NlcHRzW2UuZGF0YVR5cGVzWzBdXT9lLmFjY2VwdHNbZS5kYXRhVHlwZXNbMF1dKyhlLmRhdGFUeXBlc1swXSE9PSIqIj8iLCAqLyo7IHE9MC4wMSI6IiIpOmUuYWNjZXB0c1siKiJdO2Zvcih0IGluIGUuaGVhZGVycyl1LnNldFJlcXVlc3RIZWFkZXIodCxlLmhlYWRlcnNbdF0pO2lmKGUuYmVmb3JlU2VuZCYmKGUuYmVmb3JlU2VuZC5jYWxsKGYsdSxlKT09PSExfHxyPT09Mikpe3UuYWJvcnQoKTtyZXR1cm4hMX1mb3IodCBpbiB7c3VjY2VzczoxLGVycm9yOjEsY29tcGxldGU6MX0pdVt0XShlW3RdKTtvPWJOKGJJLGUsYyx1KTtpZihvKXt1LnJlYWR5U3RhdGU9MSxzJiZnLnRyaWdnZXIoImFqYXhTZW5kIixbdSxlXSksZS5hc3luYyYmZS50aW1lb3V0PjAmJihwPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt1LmFib3J0KCJ0aW1lb3V0Iil9LGUudGltZW91dCkpO3RyeXtyPTEsby5zZW5kKGwsdil9Y2F0Y2goeSl7c3RhdHVzPDI/digtMSx5KTpkLmVycm9yKHkpfX1lbHNlIHYoLTEsIk5vIFRyYW5zcG9ydCIpO3JldHVybiB1fSxwYXJhbTpmdW5jdGlvbihhLGMpe3ZhciBlPVtdLGY9ZnVuY3Rpb24oYSxiKXtiPWQuaXNGdW5jdGlvbihiKT9iKCk6YixlW2UubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoYSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChiKX07Yz09PWImJihjPWQuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKTtpZihkLmlzQXJyYXkoYSl8fGEuanF1ZXJ5JiYhZC5pc1BsYWluT2JqZWN0KGEpKWQuZWFjaChhLGZ1bmN0aW9uKCl7Zih0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcih2YXIgZyBpbiBhKWJPKGcsYVtnXSxjLGYpO3JldHVybiBlLmpvaW4oIiYiKS5yZXBsYWNlKGJwLCIrIil9fSksZC5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9fSk7dmFyIGJSPWQubm93KCksYlM9LyhcPSlcPygmfCQpfCgpXD9cPygpL2k7ZC5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3JldHVybiBkLmV4cGFuZG8rIl8iK2JSKyt9fSksZC5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihiLGMsZSl7dmFyIGY9dHlwZW9mIGIuZGF0YT09PSJzdHJpbmciO2lmKGIuZGF0YVR5cGVzWzBdPT09Impzb25wInx8Yy5qc29ucENhbGxiYWNrfHxjLmpzb25wIT1udWxsfHxiLmpzb25wIT09ITEmJihiUy50ZXN0KGIudXJsKXx8ZiYmYlMudGVzdChiLmRhdGEpKSl7dmFyIGcsaD1iLmpzb25wQ2FsbGJhY2s9ZC5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29ucENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGk9YVtoXSxqPWIudXJsLGs9Yi5kYXRhLGw9IiQxIitoKyIkMiIsbT1mdW5jdGlvbigpe2FbaF09aSxnJiZkLmlzRnVuY3Rpb24oaSkmJmFbaF0oZ1swXSl9O2IuanNvbnAhPT0hMSYmKGo9ai5yZXBsYWNlKGJTLGwpLGIudXJsPT09aiYmKGYmJihrPWsucmVwbGFjZShiUyxsKSksYi5kYXRhPT09ayYmKGorPSgvXD8vLnRlc3Qoaik/IiYiOiI/IikrYi5qc29ucCsiPSIraCkpKSxiLnVybD1qLGIuZGF0YT1rLGFbaF09ZnVuY3Rpb24oYSl7Zz1bYV19LGUudGhlbihtLG0pLGIuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe2d8fGQuZXJyb3IoaCsiIHdhcyBub3QgY2FsbGVkIik7cmV0dXJuIGdbMF19LGIuZGF0YVR5cGVzWzBdPSJqc29uIjtyZXR1cm4ic2NyaXB0In19KSxkLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L2phdmFzY3JpcHR8ZWNtYXNjcmlwdC99LGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oYSl7ZC5nbG9iYWxFdmFsKGEpO3JldHVybiBhfX19KSxkLmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsZnVuY3Rpb24oYSl7YS5jYWNoZT09PWImJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPSJHRVQiLGEuZ2xvYmFsPSExKX0pLGQuYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihhKXtpZihhLmNyb3NzRG9tYWluKXt2YXIgZCxlPWMuaGVhZHx8Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdfHxjLmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihmLGcpe2Q9Yy5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxkLmFzeW5jPSJhc3luYyIsYS5zY3JpcHRDaGFyc2V0JiYoZC5jaGFyc2V0PWEuc2NyaXB0Q2hhcnNldCksZC5zcmM9YS51cmwsZC5vbmxvYWQ9ZC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oYSxjKXtpZighZC5yZWFkeVN0YXRlfHwvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KGQucmVhZHlTdGF0ZSkpZC5vbmxvYWQ9ZC5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxlJiZkLnBhcmVudE5vZGUmJmUucmVtb3ZlQ2hpbGQoZCksZD1iLGN8fGcoMjAwLCJzdWNjZXNzIil9LGUuaW5zZXJ0QmVmb3JlKGQsZS5maXJzdENoaWxkKX0sYWJvcnQ6ZnVuY3Rpb24oKXtkJiZkLm9ubG9hZCgwLDEpfX19fSk7dmFyIGJUPWQubm93KCksYlUsYlY7ZC5hamF4U2V0dGluZ3MueGhyPWEuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzTG9jYWwmJmJYKCl8fGJZKCl9OmJYLGJWPWQuYWpheFNldHRpbmdzLnhocigpLGQuc3VwcG9ydC5hamF4PSEhYlYsZC5zdXBwb3J0LmNvcnM9YlYmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gYlYsYlY9YixkLnN1cHBvcnQuYWpheCYmZC5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGEpe2lmKCFhLmNyb3NzRG9tYWlufHxkLnN1cHBvcnQuY29ycyl7dmFyIGM7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSxmKXt2YXIgZz1hLnhocigpLGgsaTthLnVzZXJuYW1lP2cub3BlbihhLnR5cGUsYS51cmwsYS5hc3luYyxhLnVzZXJuYW1lLGEucGFzc3dvcmQpOmcub3BlbihhLnR5cGUsYS51cmwsYS5hc3luYyk7aWYoYS54aHJGaWVsZHMpZm9yKGkgaW4gYS54aHJGaWVsZHMpZ1tpXT1hLnhockZpZWxkc1tpXTthLm1pbWVUeXBlJiZnLm92ZXJyaWRlTWltZVR5cGUmJmcub3ZlcnJpZGVNaW1lVHlwZShhLm1pbWVUeXBlKSwoIWEuY3Jvc3NEb21haW58fGEuaGFzQ29udGVudCkmJiFlWyJYLVJlcXVlc3RlZC1XaXRoIl0mJihlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7dHJ5e2ZvcihpIGluIGUpZy5zZXRSZXF1ZXN0SGVhZGVyKGksZVtpXSl9Y2F0Y2goail7fWcuc2VuZChhLmhhc0NvbnRlbnQmJmEuZGF0YXx8bnVsbCksYz1mdW5jdGlvbihlLGkpe3ZhciBqLGssbCxtLG47dHJ5e2lmKGMmJihpfHxnLnJlYWR5U3RhdGU9PT00KSl7Yz1iLGgmJihnLm9ucmVhZHlzdGF0ZWNoYW5nZT1kLm5vb3AsZGVsZXRlIGJVW2hdKTtpZihpKWcucmVhZHlTdGF0ZSE9PTQmJmcuYWJvcnQoKTtlbHNle2o9Zy5zdGF0dXMsbD1nLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLG09e30sbj1nLnJlc3BvbnNlWE1MLG4mJm4uZG9jdW1lbnRFbGVtZW50JiYobS54bWw9biksbS50ZXh0PWcucmVzcG9uc2VUZXh0O3RyeXtrPWcuc3RhdHVzVGV4dH1jYXRjaChvKXtrPSIifWp8fCFhLmlzTG9jYWx8fGEuY3Jvc3NEb21haW4/aj09PTEyMjMmJihqPTIwNCk6aj1tLnRleHQ/MjAwOjQwNH19fWNhdGNoKHApe2l8fGYoLTEscCl9bSYmZihqLGssbSxsKX0sYS5hc3luYyYmZy5yZWFkeVN0YXRlIT09ND8oYlV8fChiVT17fSxiVygpKSxoPWJUKyssZy5vbnJlYWR5c3RhdGVjaGFuZ2U9YlVbaF09Yyk6YygpfSxhYm9ydDpmdW5jdGlvbigpe2MmJmMoMCwxKX19fX0pO3ZhciBiWj17fSxiJD0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sYl89L14oWytcLV09KT8oW1xkKy5cLV0rKShbYS16JV0qKSQvaSxjYSxjYj1bWyJoZWlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLFsid2lkdGgiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCJdLFsib3BhY2l0eSJdXTtkLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbihhLGIsYyl7dmFyIGUsZjtpZihhfHxhPT09MClyZXR1cm4gdGhpcy5hbmltYXRlKGNjKCJzaG93IiwzKSxhLGIsYyk7Zm9yKHZhciBnPTAsaD10aGlzLmxlbmd0aDtnPGg7ZysrKWU9dGhpc1tnXSxmPWUuc3R5bGUuZGlzcGxheSwhZC5fZGF0YShlLCJvbGRkaXNwbGF5IikmJmY9PT0ibm9uZSImJihmPWUuc3R5bGUuZGlzcGxheT0iIiksZj09PSIiJiZkLmNzcyhlLCJkaXNwbGF5Iik9PT0ibm9uZSImJmQuX2RhdGEoZSwib2xkZGlzcGxheSIsY2QoZS5ub2RlTmFtZSkpO2ZvcihnPTA7ZzxoO2crKyl7ZT10aGlzW2ddLGY9ZS5zdHlsZS5kaXNwbGF5O2lmKGY9PT0iInx8Zj09PSJub25lIillLnN0eWxlLmRpc3BsYXk9ZC5fZGF0YShlLCJvbGRkaXNwbGF5Iil8fCIifXJldHVybiB0aGlzfSxoaWRlOmZ1bmN0aW9uKGEsYixjKXtpZihhfHxhPT09MClyZXR1cm4gdGhpcy5hbmltYXRlKGNjKCJoaWRlIiwzKSxhLGIsYyk7Zm9yKHZhciBlPTAsZj10aGlzLmxlbmd0aDtlPGY7ZSsrKXt2YXIgZz1kLmNzcyh0aGlzW2VdLCJkaXNwbGF5Iik7ZyE9PSJub25lIiYmIWQuX2RhdGEodGhpc1tlXSwib2xkZGlzcGxheSIpJiZkLl9kYXRhKHRoaXNbZV0sIm9sZGRpc3BsYXkiLGcpfWZvcihlPTA7ZTxmO2UrKyl0aGlzW2VdLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3JldHVybiB0aGlzfSxfdG9nZ2xlOmQuZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbihhLGIsYyl7dmFyIGU9dHlwZW9mIGE9PT0iYm9vbGVhbiI7ZC5pc0Z1bmN0aW9uKGEpJiZkLmlzRnVuY3Rpb24oYik/dGhpcy5fdG9nZ2xlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTphPT1udWxsfHxlP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWU/YTpkKHRoaXMpLmlzKCI6aGlkZGVuIik7ZCh0aGlzKVtiPyJzaG93IjoiaGlkZSJdKCl9KTp0aGlzLmFuaW1hdGUoY2MoInRvZ2dsZSIsMyksYSxiLGMpO3JldHVybiB0aGlzfSxmYWRlVG86ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuZmlsdGVyKCI6aGlkZGVuIikuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGY9ZC5zcGVlZChiLGMsZSk7aWYoZC5pc0VtcHR5T2JqZWN0KGEpKXJldHVybiB0aGlzLmVhY2goZi5jb21wbGV0ZSk7cmV0dXJuIHRoaXNbZi5xdWV1ZT09PSExPyJlYWNoIjoicXVldWUiXShmdW5jdGlvbigpe3ZhciBiPWQuZXh0ZW5kKHt9LGYpLGMsZT10aGlzLm5vZGVUeXBlPT09MSxnPWUmJmQodGhpcykuaXMoIjpoaWRkZW4iKSxoPXRoaXM7Zm9yKGMgaW4gYSl7dmFyIGk9ZC5jYW1lbENhc2UoYyk7YyE9PWkmJihhW2ldPWFbY10sZGVsZXRlIGFbY10sYz1pKTtpZihhW2NdPT09ImhpZGUiJiZnfHxhW2NdPT09InNob3ciJiYhZylyZXR1cm4gYi5jb21wbGV0ZS5jYWxsKHRoaXMpO2lmKGUmJihjPT09ImhlaWdodCJ8fGM9PT0id2lkdGgiKSl7Yi5vdmVyZmxvdz1bdGhpcy5zdHlsZS5vdmVyZmxvdyx0aGlzLnN0eWxlLm92ZXJmbG93WCx0aGlzLnN0eWxlLm92ZXJmbG93WV07aWYoZC5jc3ModGhpcywiZGlzcGxheSIpPT09ImlubGluZSImJmQuY3NzKHRoaXMsImZsb2F0Iik9PT0ibm9uZSIpaWYoZC5zdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXQpe3ZhciBqPWNkKHRoaXMubm9kZU5hbWUpO2o9PT0iaW5saW5lIj90aGlzLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayI6KHRoaXMuc3R5bGUuZGlzcGxheT0iaW5saW5lIix0aGlzLnN0eWxlLnpvb209MSl9ZWxzZSB0aGlzLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayJ9ZC5pc0FycmF5KGFbY10pJiYoKGIuc3BlY2lhbEVhc2luZz1iLnNwZWNpYWxFYXNpbmd8fHt9KVtjXT1hW2NdWzFdLGFbY109YVtjXVswXSl9Yi5vdmVyZmxvdyE9bnVsbCYmKHRoaXMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpLGIuY3VyQW5pbT1kLmV4dGVuZCh7fSxhKSxkLmVhY2goYSxmdW5jdGlvbihjLGUpe3ZhciBmPW5ldyBkLmZ4KGgsYixjKTtpZihiJC50ZXN0KGUpKWZbZT09PSJ0b2dnbGUiP2c/InNob3ciOiJoaWRlIjplXShhKTtlbHNle3ZhciBpPWJfLmV4ZWMoZSksaj1mLmN1cigpO2lmKGkpe3ZhciBrPXBhcnNlRmxvYXQoaVsyXSksbD1pWzNdfHwoZC5jc3NOdW1iZXJbY10/IiI6InB4Iik7bCE9PSJweCImJihkLnN0eWxlKGgsYywoa3x8MSkrbCksaj0oa3x8MSkvZi5jdXIoKSpqLGQuc3R5bGUoaCxjLGorbCkpLGlbMV0mJihrPShpWzFdPT09Ii09Ij8tMToxKSprK2opLGYuY3VzdG9tKGosayxsKX1lbHNlIGYuY3VzdG9tKGosZSwiIil9fSk7cmV0dXJuITB9KX0sc3RvcDpmdW5jdGlvbihhLGIpe3ZhciBjPWQudGltZXJzO2EmJnRoaXMucXVldWUoW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe2Zvcih2YXIgYT1jLmxlbmd0aC0xO2E+PTA7YS0tKWNbYV0uZWxlbT09PXRoaXMmJihiJiZjW2FdKCEwKSxjLnNwbGljZShhLDEpKX0pLGJ8fHRoaXMuZGVxdWV1ZSgpO3JldHVybiB0aGlzfX0pLGQuZWFjaCh7c2xpZGVEb3duOmNjKCJzaG93IiwxKSxzbGlkZVVwOmNjKCJoaWRlIiwxKSxzbGlkZVRvZ2dsZTpjYygidG9nZ2xlIiwxKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7ZC5mblthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxkLmV4dGVuZCh7c3BlZWQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPWEmJnR5cGVvZiBhPT09Im9iamVjdCI/ZC5leHRlbmQoe30sYSk6e2NvbXBsZXRlOmN8fCFjJiZifHxkLmlzRnVuY3Rpb24oYSkmJmEsZHVyYXRpb246YSxlYXNpbmc6YyYmYnx8YiYmIWQuaXNGdW5jdGlvbihiKSYmYn07ZS5kdXJhdGlvbj1kLmZ4Lm9mZj8wOnR5cGVvZiBlLmR1cmF0aW9uPT09Im51bWJlciI/ZS5kdXJhdGlvbjplLmR1cmF0aW9uIGluIGQuZnguc3BlZWRzP2QuZnguc3BlZWRzW2UuZHVyYXRpb25dOmQuZnguc3BlZWRzLl9kZWZhdWx0LGUub2xkPWUuY29tcGxldGUsZS5jb21wbGV0ZT1mdW5jdGlvbigpe2UucXVldWUhPT0hMSYmZCh0aGlzKS5kZXF1ZXVlKCksZC5pc0Z1bmN0aW9uKGUub2xkKSYmZS5vbGQuY2FsbCh0aGlzKX07cmV0dXJuIGV9LGVhc2luZzp7bGluZWFyOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBjK2QqYX0sc3dpbmc6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuKC1NYXRoLmNvcyhhKk1hdGguUEkpLzIrLjUpKmQrY319LHRpbWVyczpbXSxmeDpmdW5jdGlvbihhLGIsYyl7dGhpcy5vcHRpb25zPWIsdGhpcy5lbGVtPWEsdGhpcy5wcm9wPWMsYi5vcmlnfHwoYi5vcmlnPXt9KX19KSxkLmZ4LnByb3RvdHlwZT17dXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLChkLmZ4LnN0ZXBbdGhpcy5wcm9wXXx8ZC5meC5zdGVwLl9kZWZhdWx0KSh0aGlzKX0sY3VyOmZ1bmN0aW9uKCl7aWYodGhpcy5lbGVtW3RoaXMucHJvcF0hPW51bGwmJighdGhpcy5lbGVtLnN0eWxlfHx0aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXT09bnVsbCkpcmV0dXJuIHRoaXMuZWxlbVt0aGlzLnByb3BdO3ZhciBhLGI9ZC5jc3ModGhpcy5lbGVtLHRoaXMucHJvcCk7cmV0dXJuIGlzTmFOKGE9cGFyc2VGbG9hdChiKSk/IWJ8fGI9PT0iYXV0byI/MDpiOmF9LGN1c3RvbTpmdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gZyhhKXtyZXR1cm4gZS5zdGVwKGEpfXZhciBlPXRoaXMsZj1kLmZ4O3RoaXMuc3RhcnRUaW1lPWQubm93KCksdGhpcy5zdGFydD1hLHRoaXMuZW5kPWIsdGhpcy51bml0PWN8fHRoaXMudW5pdHx8KGQuY3NzTnVtYmVyW3RoaXMucHJvcF0/IiI6InB4IiksdGhpcy5ub3c9dGhpcy5zdGFydCx0aGlzLnBvcz10aGlzLnN0YXRlPTAsZy5lbGVtPXRoaXMuZWxlbSxnKCkmJmQudGltZXJzLnB1c2goZykmJiFjYSYmKGNhPXNldEludGVydmFsKGYudGljayxmLmludGVydmFsKSl9LHNob3c6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPWQuc3R5bGUodGhpcy5lbGVtLHRoaXMucHJvcCksdGhpcy5vcHRpb25zLnNob3c9ITAsdGhpcy5jdXN0b20odGhpcy5wcm9wPT09IndpZHRoInx8dGhpcy5wcm9wPT09ImhlaWdodCI/MTowLHRoaXMuY3VyKCkpLGQodGhpcy5lbGVtKS5zaG93KCl9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMub3JpZ1t0aGlzLnByb3BdPWQuc3R5bGUodGhpcy5lbGVtLHRoaXMucHJvcCksdGhpcy5vcHRpb25zLmhpZGU9ITAsdGhpcy5jdXN0b20odGhpcy5jdXIoKSwwKX0sc3RlcDpmdW5jdGlvbihhKXt2YXIgYj1kLm5vdygpLGM9ITA7aWYoYXx8Yj49dGhpcy5vcHRpb25zLmR1cmF0aW9uK3RoaXMuc3RhcnRUaW1lKXt0aGlzLm5vdz10aGlzLmVuZCx0aGlzLnBvcz10aGlzLnN0YXRlPTEsdGhpcy51cGRhdGUoKSx0aGlzLm9wdGlvbnMuY3VyQW5pbVt0aGlzLnByb3BdPSEwO2Zvcih2YXIgZSBpbiB0aGlzLm9wdGlvbnMuY3VyQW5pbSl0aGlzLm9wdGlvbnMuY3VyQW5pbVtlXSE9PSEwJiYoYz0hMSk7aWYoYyl7aWYodGhpcy5vcHRpb25zLm92ZXJmbG93IT1udWxsJiYhZC5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3Mpe3ZhciBmPXRoaXMuZWxlbSxnPXRoaXMub3B0aW9ucztkLmVhY2goWyIiLCJYIiwiWSJdLGZ1bmN0aW9uKGEsYil7Zi5zdHlsZVsib3ZlcmZsb3ciK2JdPWcub3ZlcmZsb3dbYV19KX10aGlzLm9wdGlvbnMuaGlkZSYmZCh0aGlzLmVsZW0pLmhpZGUoKTtpZih0aGlzLm9wdGlvbnMuaGlkZXx8dGhpcy5vcHRpb25zLnNob3cpZm9yKHZhciBoIGluIHRoaXMub3B0aW9ucy5jdXJBbmltKWQuc3R5bGUodGhpcy5lbGVtLGgsdGhpcy5vcHRpb25zLm9yaWdbaF0pO3RoaXMub3B0aW9ucy5jb21wbGV0ZS5jYWxsKHRoaXMuZWxlbSl9cmV0dXJuITF9dmFyIGk9Yi10aGlzLnN0YXJ0VGltZTt0aGlzLnN0YXRlPWkvdGhpcy5vcHRpb25zLmR1cmF0aW9uO3ZhciBqPXRoaXMub3B0aW9ucy5zcGVjaWFsRWFzaW5nJiZ0aGlzLm9wdGlvbnMuc3BlY2lhbEVhc2luZ1t0aGlzLnByb3BdLGs9dGhpcy5vcHRpb25zLmVhc2luZ3x8KGQuZWFzaW5nLnN3aW5nPyJzd2luZyI6ImxpbmVhciIpO3RoaXMucG9zPWQuZWFzaW5nW2p8fGtdKHRoaXMuc3RhdGUsaSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKSx0aGlzLm5vdz10aGlzLnN0YXJ0Kyh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0aGlzLnBvcyx0aGlzLnVwZGF0ZSgpO3JldHVybiEwfX0sZC5leHRlbmQoZC5meCx7dGljazpmdW5jdGlvbigpe3ZhciBhPWQudGltZXJzO2Zvcih2YXIgYj0wO2I8YS5sZW5ndGg7YisrKWFbYl0oKXx8YS5zcGxpY2UoYi0tLDEpO2EubGVuZ3RofHxkLmZ4LnN0b3AoKX0saW50ZXJ2YWw6MTMsc3RvcDpmdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoY2EpLGNhPW51bGx9LHNwZWVkczp7c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxzdGVwOntvcGFjaXR5OmZ1bmN0aW9uKGEpe2Quc3R5bGUoYS5lbGVtLCJvcGFjaXR5IixhLm5vdyl9LF9kZWZhdWx0OmZ1bmN0aW9uKGEpe2EuZWxlbS5zdHlsZSYmYS5lbGVtLnN0eWxlW2EucHJvcF0hPW51bGw/YS5lbGVtLnN0eWxlW2EucHJvcF09KGEucHJvcD09PSJ3aWR0aCJ8fGEucHJvcD09PSJoZWlnaHQiP01hdGgubWF4KDAsYS5ub3cpOmEubm93KSthLnVuaXQ6YS5lbGVtW2EucHJvcF09YS5ub3d9fX0pLGQuZXhwciYmZC5leHByLmZpbHRlcnMmJihkLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gZC5ncmVwKGQudGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofSk7dmFyIGNlPS9edCg/OmFibGV8ZHxoKSQvaSxjZj0vXig/OmJvZHl8aHRtbCkkL2k7ImdldEJvdW5kaW5nQ2xpZW50UmVjdCJpbiBjLmRvY3VtZW50RWxlbWVudD9kLmZuLm9mZnNldD1mdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdLGM7aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2Qub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGQub2Zmc2V0LmJvZHlPZmZzZXQoYik7dHJ5e2M9Yi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jYXRjaChlKXt9dmFyIGY9Yi5vd25lckRvY3VtZW50LGc9Zi5kb2N1bWVudEVsZW1lbnQ7aWYoIWN8fCFkLmNvbnRhaW5zKGcsYikpcmV0dXJuIGM/e3RvcDpjLnRvcCxsZWZ0OmMubGVmdH06e3RvcDowLGxlZnQ6MH07dmFyIGg9Zi5ib2R5LGk9Y2coZiksaj1nLmNsaWVudFRvcHx8aC5jbGllbnRUb3B8fDAsaz1nLmNsaWVudExlZnR8fGguY2xpZW50TGVmdHx8MCxsPWkucGFnZVlPZmZzZXR8fGQuc3VwcG9ydC5ib3hNb2RlbCYmZy5zY3JvbGxUb3B8fGguc2Nyb2xsVG9wLG09aS5wYWdlWE9mZnNldHx8ZC5zdXBwb3J0LmJveE1vZGVsJiZnLnNjcm9sbExlZnR8fGguc2Nyb2xsTGVmdCxuPWMudG9wK2wtaixvPWMubGVmdCttLWs7cmV0dXJue3RvcDpuLGxlZnQ6b319OmQuZm4ub2Zmc2V0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF07aWYoYSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2Qub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTtpZighYnx8IWIub3duZXJEb2N1bWVudClyZXR1cm4gbnVsbDtpZihiPT09Yi5vd25lckRvY3VtZW50LmJvZHkpcmV0dXJuIGQub2Zmc2V0LmJvZHlPZmZzZXQoYik7ZC5vZmZzZXQuaW5pdGlhbGl6ZSgpO3ZhciBjLGU9Yi5vZmZzZXRQYXJlbnQsZj1iLGc9Yi5vd25lckRvY3VtZW50LGg9Zy5kb2N1bWVudEVsZW1lbnQsaT1nLmJvZHksaj1nLmRlZmF1bHRWaWV3LGs9aj9qLmdldENvbXB1dGVkU3R5bGUoYixudWxsKTpiLmN1cnJlbnRTdHlsZSxsPWIub2Zmc2V0VG9wLG09Yi5vZmZzZXRMZWZ0O3doaWxlKChiPWIucGFyZW50Tm9kZSkmJmIhPT1pJiZiIT09aCl7aWYoZC5vZmZzZXQuc3VwcG9ydHNGaXhlZFBvc2l0aW9uJiZrLnBvc2l0aW9uPT09ImZpeGVkIilicmVhaztjPWo/ai5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCk6Yi5jdXJyZW50U3R5bGUsbC09Yi5zY3JvbGxUb3AsbS09Yi5zY3JvbGxMZWZ0LGI9PT1lJiYobCs9Yi5vZmZzZXRUb3AsbSs9Yi5vZmZzZXRMZWZ0LGQub2Zmc2V0LmRvZXNOb3RBZGRCb3JkZXImJighZC5vZmZzZXQuZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHN8fCFjZS50ZXN0KGIubm9kZU5hbWUpKSYmKGwrPXBhcnNlRmxvYXQoYy5ib3JkZXJUb3BXaWR0aCl8fDAsbSs9cGFyc2VGbG9hdChjLmJvcmRlckxlZnRXaWR0aCl8fDApLGY9ZSxlPWIub2Zmc2V0UGFyZW50KSxkLm9mZnNldC5zdWJ0cmFjdHNCb3JkZXJGb3JPdmVyZmxvd05vdFZpc2libGUmJmMub3ZlcmZsb3chPT0idmlzaWJsZSImJihsKz1wYXJzZUZsb2F0KGMuYm9yZGVyVG9wV2lkdGgpfHwwLG0rPXBhcnNlRmxvYXQoYy5ib3JkZXJMZWZ0V2lkdGgpfHwwKSxrPWN9aWYoay5wb3NpdGlvbj09PSJyZWxhdGl2ZSJ8fGsucG9zaXRpb249PT0ic3RhdGljIilsKz1pLm9mZnNldFRvcCxtKz1pLm9mZnNldExlZnQ7ZC5vZmZzZXQuc3VwcG9ydHNGaXhlZFBvc2l0aW9uJiZrLnBvc2l0aW9uPT09ImZpeGVkIiYmKGwrPU1hdGgubWF4KGguc2Nyb2xsVG9wLGkuc2Nyb2xsVG9wKSxtKz1NYXRoLm1heChoLnNjcm9sbExlZnQsaS5zY3JvbGxMZWZ0KSk7cmV0dXJue3RvcDpsLGxlZnQ6bX19LGQub2Zmc2V0PXtpbml0aWFsaXplOmZ1bmN0aW9uKCl7dmFyIGE9Yy5ib2R5LGI9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxlLGYsZyxoLGk9cGFyc2VGbG9hdChkLmNzcyhhLCJtYXJnaW5Ub3AiKSl8fDAsaj0iPGRpdiBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO21hcmdpbjowO2JvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7Jz48ZGl2PjwvZGl2PjwvZGl2Pjx0YWJsZSBzdHlsZT0ncG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO21hcmdpbjowO2JvcmRlcjo1cHggc29saWQgIzAwMDtwYWRkaW5nOjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7JyBjZWxscGFkZGluZz0nMCcgY2VsbHNwYWNpbmc9JzAnPjx0cj48dGQ+PC90ZD48L3RyPjwvdGFibGU+IjtkLmV4dGVuZChiLnN0eWxlLHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxib3JkZXI6MCx3aWR0aDoiMXB4IixoZWlnaHQ6IjFweCIsdmlzaWJpbGl0eToiaGlkZGVuIn0pLGIuaW5uZXJIVE1MPWosYS5pbnNlcnRCZWZvcmUoYixhLmZpcnN0Q2hpbGQpLGU9Yi5maXJzdENoaWxkLGY9ZS5maXJzdENoaWxkLGg9ZS5uZXh0U2libGluZy5maXJzdENoaWxkLmZpcnN0Q2hpbGQsdGhpcy5kb2VzTm90QWRkQm9yZGVyPWYub2Zmc2V0VG9wIT09NSx0aGlzLmRvZXNBZGRCb3JkZXJGb3JUYWJsZUFuZENlbGxzPWgub2Zmc2V0VG9wPT09NSxmLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsZi5zdHlsZS50b3A9IjIwcHgiLHRoaXMuc3VwcG9ydHNGaXhlZFBvc2l0aW9uPWYub2Zmc2V0VG9wPT09MjB8fGYub2Zmc2V0VG9wPT09MTUsZi5zdHlsZS5wb3NpdGlvbj1mLnN0eWxlLnRvcD0iIixlLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIix0aGlzLnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZT1mLm9mZnNldFRvcD09PS01LHRoaXMuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQ9YS5vZmZzZXRUb3AhPT1pLGEucmVtb3ZlQ2hpbGQoYiksYT1iPWU9Zj1nPWg9bnVsbCxkLm9mZnNldC5pbml0aWFsaXplPWQubm9vcH0sYm9keU9mZnNldDpmdW5jdGlvbihhKXt2YXIgYj1hLm9mZnNldFRvcCxjPWEub2Zmc2V0TGVmdDtkLm9mZnNldC5pbml0aWFsaXplKCksZC5vZmZzZXQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQmJihiKz1wYXJzZUZsb2F0KGQuY3NzKGEsIm1hcmdpblRvcCIpKXx8MCxjKz1wYXJzZUZsb2F0KGQuY3NzKGEsIm1hcmdpbkxlZnQiKSl8fDApO3JldHVybnt0b3A6YixsZWZ0OmN9fSxzZXRPZmZzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPWQuY3NzKGEsInBvc2l0aW9uIik7ZT09PSJzdGF0aWMiJiYoYS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKTt2YXIgZj1kKGEpLGc9Zi5vZmZzZXQoKSxoPWQuY3NzKGEsInRvcCIpLGk9ZC5jc3MoYSwibGVmdCIpLGo9ZT09PSJhYnNvbHV0ZSImJmQuaW5BcnJheSgiYXV0byIsW2gsaV0pPi0xLGs9e30sbD17fSxtLG47aiYmKGw9Zi5wb3NpdGlvbigpKSxtPWo/bC50b3A6cGFyc2VJbnQoaCwxMCl8fDAsbj1qP2wubGVmdDpwYXJzZUludChpLDEwKXx8MCxkLmlzRnVuY3Rpb24oYikmJihiPWIuY2FsbChhLGMsZykpLGIudG9wIT1udWxsJiYoay50b3A9Yi50b3AtZy50b3ArbSksYi5sZWZ0IT1udWxsJiYoay5sZWZ0PWIubGVmdC1nLmxlZnQrbiksInVzaW5nImluIGI/Yi51c2luZy5jYWxsKGEsayk6Zi5jc3Moayl9fSxkLmZuLmV4dGVuZCh7cG9zaXRpb246ZnVuY3Rpb24oKXtpZighdGhpc1swXSlyZXR1cm4gbnVsbDt2YXIgYT10aGlzWzBdLGI9dGhpcy5vZmZzZXRQYXJlbnQoKSxjPXRoaXMub2Zmc2V0KCksZT1jZi50ZXN0KGJbMF0ubm9kZU5hbWUpP3t0b3A6MCxsZWZ0OjB9OmIub2Zmc2V0KCk7Yy50b3AtPXBhcnNlRmxvYXQoZC5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMubGVmdC09cGFyc2VGbG9hdChkLmNzcyhhLCJtYXJnaW5MZWZ0IikpfHwwLGUudG9wKz1wYXJzZUZsb2F0KGQuY3NzKGJbMF0sImJvcmRlclRvcFdpZHRoIikpfHwwLGUubGVmdCs9cGFyc2VGbG9hdChkLmNzcyhiWzBdLCJib3JkZXJMZWZ0V2lkdGgiKSl8fDA7cmV0dXJue3RvcDpjLnRvcC1lLnRvcCxsZWZ0OmMubGVmdC1lLmxlZnR9fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldFBhcmVudHx8Yy5ib2R5O3doaWxlKGEmJighY2YudGVzdChhLm5vZGVOYW1lKSYmZC5jc3MoYSwicG9zaXRpb24iKT09PSJzdGF0aWMiKSlhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfSl9fSksZC5lYWNoKFsiTGVmdCIsIlRvcCJdLGZ1bmN0aW9uKGEsYyl7dmFyIGU9InNjcm9sbCIrYztkLmZuW2VdPWZ1bmN0aW9uKGMpe3ZhciBmPXRoaXNbMF0sZztpZighZilyZXR1cm4gbnVsbDtpZihjIT09YilyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zz1jZyh0aGlzKSxnP2cuc2Nyb2xsVG8oYT9kKGcpLnNjcm9sbExlZnQoKTpjLGE/YzpkKGcpLnNjcm9sbFRvcCgpKTp0aGlzW2VdPWN9KTtnPWNnKGYpO3JldHVybiBnPyJwYWdlWE9mZnNldCJpbiBnP2dbYT8icGFnZVlPZmZzZXQiOiJwYWdlWE9mZnNldCJdOmQuc3VwcG9ydC5ib3hNb2RlbCYmZy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbZV18fGcuZG9jdW1lbnQuYm9keVtlXTpmW2VdfX0pLGQuZWFjaChbIkhlaWdodCIsIldpZHRoIl0sZnVuY3Rpb24oYSxjKXt2YXIgZT1jLnRvTG93ZXJDYXNlKCk7ZC5mblsiaW5uZXIiK2NdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbMF0/cGFyc2VGbG9hdChkLmNzcyh0aGlzWzBdLGUsInBhZGRpbmciKSk6bnVsbH0sZC5mblsib3V0ZXIiK2NdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzWzBdP3BhcnNlRmxvYXQoZC5jc3ModGhpc1swXSxlLGE/Im1hcmdpbiI6ImJvcmRlciIpKTpudWxsfSxkLmZuW2VdPWZ1bmN0aW9uKGEpe3ZhciBmPXRoaXNbMF07aWYoIWYpcmV0dXJuIGE9PW51bGw/bnVsbDp0aGlzO2lmKGQuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWQodGhpcyk7Y1tlXShhLmNhbGwodGhpcyxiLGNbZV0oKSkpfSk7aWYoZC5pc1dpbmRvdyhmKSl7dmFyIGc9Zi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrY107cmV0dXJuIGYuZG9jdW1lbnQuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IiYmZ3x8Zi5kb2N1bWVudC5ib2R5WyJjbGllbnQiK2NdfHxnfWlmKGYubm9kZVR5cGU9PT05KXJldHVybiBNYXRoLm1heChmLmRvY3VtZW50RWxlbWVudFsiY2xpZW50IitjXSxmLmJvZHlbInNjcm9sbCIrY10sZi5kb2N1bWVudEVsZW1lbnRbInNjcm9sbCIrY10sZi5ib2R5WyJvZmZzZXQiK2NdLGYuZG9jdW1lbnRFbGVtZW50WyJvZmZzZXQiK2NdKTtpZihhPT09Yil7dmFyIGg9ZC5jc3MoZixlKSxpPXBhcnNlRmxvYXQoaCk7cmV0dXJuIGQuaXNOYU4oaSk/aDppfXJldHVybiB0aGlzLmNzcyhlLHR5cGVvZiBhPT09InN0cmluZyI/YTphKyJweCIpfX0pLGEualF1ZXJ5PWEuJD1kfSkod2luZG93KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL21vZGVybml6ci0xLjcubWluLmpzIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9tb2Rlcm5penItMS43Lm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjU0ODUwCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9tb2Rlcm5penItMS43Lm1pbi5qcwpAQCAtMCwwICsxLDIgQEAKKy8vIE1vZGVybml6ciB2MS43ICB3d3cubW9kZXJuaXpyLmNvbQord2luZG93Lk1vZGVybml6cj1mdW5jdGlvbihhLGIsYyl7ZnVuY3Rpb24gRygpe2UuaW5wdXQ9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aDtiPGM7YisrKXRbYVtiXV09ISEoYVtiXWluIGwpO3JldHVybiB0fSgiYXV0b2NvbXBsZXRlIGF1dG9mb2N1cyBsaXN0IHBsYWNlaG9sZGVyIG1heCBtaW4gbXVsdGlwbGUgcGF0dGVybiByZXF1aXJlZCBzdGVwIi5zcGxpdCgiICIpKSxlLmlucHV0dHlwZXM9ZnVuY3Rpb24oYSl7Zm9yKHZhciBkPTAsZSxmLGgsaT1hLmxlbmd0aDtkPGk7ZCsrKWwuc2V0QXR0cmlidXRlKCJ0eXBlIixmPWFbZF0pLGU9bC50eXBlIT09InRleHQiLGUmJihsLnZhbHVlPW0sbC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTt2aXNpYmlsaXR5OmhpZGRlbjsiLC9ecmFuZ2UkLy50ZXN0KGYpJiZsLnN0eWxlLldlYmtpdEFwcGVhcmFuY2UhPT1jPyhnLmFwcGVuZENoaWxkKGwpLGg9Yi5kZWZhdWx0VmlldyxlPWguZ2V0Q29tcHV0ZWRTdHlsZSYmaC5nZXRDb21wdXRlZFN0eWxlKGwsbnVsbCkuV2Via2l0QXBwZWFyYW5jZSE9PSJ0ZXh0ZmllbGQiJiZsLm9mZnNldEhlaWdodCE9PTAsZy5yZW1vdmVDaGlsZChsKSk6L14oc2VhcmNofHRlbCkkLy50ZXN0KGYpfHwoL14odXJsfGVtYWlsKSQvLnRlc3QoZik/ZT1sLmNoZWNrVmFsaWRpdHkmJmwuY2hlY2tWYWxpZGl0eSgpPT09ITE6L15jb2xvciQvLnRlc3QoZik/KGcuYXBwZW5kQ2hpbGQobCksZy5vZmZzZXRXaWR0aCxlPWwudmFsdWUhPW0sZy5yZW1vdmVDaGlsZChsKSk6ZT1sLnZhbHVlIT1tKSksc1thW2RdXT0hIWU7cmV0dXJuIHN9KCJzZWFyY2ggdGVsIHVybCBlbWFpbCBkYXRldGltZSBkYXRlIG1vbnRoIHdlZWsgdGltZSBkYXRldGltZS1sb2NhbCBudW1iZXIgcmFuZ2UgY29sb3IiLnNwbGl0KCIgIikpfWZ1bmN0aW9uIEYoYSxiKXt2YXIgYz1hLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Euc3Vic3RyKDEpLGQ9KGErIiAiK3Auam9pbihjKyIgIikrYykuc3BsaXQoIiAiKTtyZXR1cm4hIUUoZCxiKX1mdW5jdGlvbiBFKGEsYil7Zm9yKHZhciBkIGluIGEpaWYoa1thW2RdXSE9PWMmJighYnx8YihhW2RdLGopKSlyZXR1cm4hMH1mdW5jdGlvbiBEKGEsYil7cmV0dXJuKCIiK2EpLmluZGV4T2YoYikhPT0tMX1mdW5jdGlvbiBDKGEsYil7cmV0dXJuIHR5cGVvZiBhPT09Yn1mdW5jdGlvbiBCKGEsYil7cmV0dXJuIEEoby5qb2luKGErIjsiKSsoYnx8IiIpKX1mdW5jdGlvbiBBKGEpe2suY3NzVGV4dD1hfXZhciBkPSIxLjciLGU9e30sZj0hMCxnPWIuZG9jdW1lbnRFbGVtZW50LGg9Yi5oZWFkfHxiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0saT0ibW9kZXJuaXpyIixqPWIuY3JlYXRlRWxlbWVudChpKSxrPWouc3R5bGUsbD1iLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksbT0iOikiLG49T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxvPSIgLXdlYmtpdC0gLW1vei0gLW8tIC1tcy0gLWtodG1sLSAiLnNwbGl0KCIgIikscD0iV2Via2l0IE1veiBPIG1zIEtodG1sIi5zcGxpdCgiICIpLHE9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcifSxyPXt9LHM9e30sdD17fSx1PVtdLHYsdz1mdW5jdGlvbihhKXt2YXIgYz1iLmNyZWF0ZUVsZW1lbnQoInN0eWxlIiksZD1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGU7Yy50ZXh0Q29udGVudD1hKyJ7I21vZGVybml6cntoZWlnaHQ6M3B4fX0iLGguYXBwZW5kQ2hpbGQoYyksZC5pZD0ibW9kZXJuaXpyIixnLmFwcGVuZENoaWxkKGQpLGU9ZC5vZmZzZXRIZWlnaHQ9PT0zLGMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjKSxkLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZCk7cmV0dXJuISFlfSx4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZChkLGUpe2U9ZXx8Yi5jcmVhdGVFbGVtZW50KGFbZF18fCJkaXYiKTt2YXIgZj0oZD0ib24iK2QpaW4gZTtmfHwoZS5zZXRBdHRyaWJ1dGV8fChlPWIuY3JlYXRlRWxlbWVudCgiZGl2IikpLGUuc2V0QXR0cmlidXRlJiZlLnJlbW92ZUF0dHJpYnV0ZSYmKGUuc2V0QXR0cmlidXRlKGQsIiIpLGY9QyhlW2RdLCJmdW5jdGlvbiIpLEMoZVtkXSxjKXx8KGVbZF09YyksZS5yZW1vdmVBdHRyaWJ1dGUoZCkpKSxlPW51bGw7cmV0dXJuIGZ9dmFyIGE9e3NlbGVjdDoiaW5wdXQiLGNoYW5nZToiaW5wdXQiLHN1Ym1pdDoiZm9ybSIscmVzZXQ6ImZvcm0iLGVycm9yOiJpbWciLGxvYWQ6ImltZyIsYWJvcnQ6ImltZyJ9O3JldHVybiBkfSgpLHk9KHt9KS5oYXNPd25Qcm9wZXJ0eSx6O0MoeSxjKXx8Qyh5LmNhbGwsYyk/ej1mdW5jdGlvbihhLGIpe3JldHVybiBiIGluIGEmJkMoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGVbYl0sYyl9Ono9ZnVuY3Rpb24oYSxiKXtyZXR1cm4geS5jYWxsKGEsYil9LHIuZmxleGJveD1mdW5jdGlvbigpe2Z1bmN0aW9uIGMoYSxiLGMsZCl7YS5zdHlsZS5jc3NUZXh0PW8uam9pbihiKyI6IitjKyI7IikrKGR8fCIiKX1mdW5jdGlvbiBhKGEsYixjLGQpe2IrPSI6IixhLnN0eWxlLmNzc1RleHQ9KGIrby5qb2luKGMrIjsiK2IpKS5zbGljZSgwLC1iLmxlbmd0aCkrKGR8fCIiKX12YXIgZD1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGU9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKTthKGQsImRpc3BsYXkiLCJib3giLCJ3aWR0aDo0MnB4O3BhZGRpbmc6MDsiKSxjKGUsImJveC1mbGV4IiwiMSIsIndpZHRoOjEwcHg7IiksZC5hcHBlbmRDaGlsZChlKSxnLmFwcGVuZENoaWxkKGQpO3ZhciBmPWUub2Zmc2V0V2lkdGg9PT00MjtkLnJlbW92ZUNoaWxkKGUpLGcucmVtb3ZlQ2hpbGQoZCk7cmV0dXJuIGZ9LHIuY2FudmFzPWZ1bmN0aW9uKCl7dmFyIGE9Yi5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtyZXR1cm4gYS5nZXRDb250ZXh0JiZhLmdldENvbnRleHQoIjJkIil9LHIuY2FudmFzdGV4dD1mdW5jdGlvbigpe3JldHVybiBlLmNhbnZhcyYmQyhiLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIikuZmlsbFRleHQsImZ1bmN0aW9uIil9LHIud2ViZ2w9ZnVuY3Rpb24oKXtyZXR1cm4hIWEuV2ViR0xSZW5kZXJpbmdDb250ZXh0fSxyLnRvdWNoPWZ1bmN0aW9uKCl7cmV0dXJuIm9udG91Y2hzdGFydCJpbiBhfHx3KCJAbWVkaWEgKCIrby5qb2luKCJ0b3VjaC1lbmFibGVkKSwoIikrIm1vZGVybml6cikiKX0sci5nZW9sb2NhdGlvbj1mdW5jdGlvbigpe3JldHVybiEhbmF2aWdhdG9yLmdlb2xvY2F0aW9ufSxyLnBvc3RtZXNzYWdlPWZ1bmN0aW9uKCl7cmV0dXJuISFhLnBvc3RNZXNzYWdlfSxyLndlYnNxbGRhdGFiYXNlPWZ1bmN0aW9uKCl7dmFyIGI9ISFhLm9wZW5EYXRhYmFzZTtyZXR1cm4gYn0sci5pbmRleGVkREI9ZnVuY3Rpb24oKXtmb3IodmFyIGI9LTEsYz1wLmxlbmd0aDsrK2I8Yzspe3ZhciBkPXBbYl0udG9Mb3dlckNhc2UoKTtpZihhW2QrIl9pbmRleGVkREIiXXx8YVtkKyJJbmRleGVkREIiXSlyZXR1cm4hMH1yZXR1cm4hMX0sci5oYXNoY2hhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHgoImhhc2hjaGFuZ2UiLGEpJiYoYi5kb2N1bWVudE1vZGU9PT1jfHxiLmRvY3VtZW50TW9kZT43KX0sci5oaXN0b3J5PWZ1bmN0aW9uKCl7cmV0dXJuICEhKGEuaGlzdG9yeSYmaGlzdG9yeS5wdXNoU3RhdGUpfSxyLmRyYWdhbmRkcm9wPWZ1bmN0aW9uKCl7cmV0dXJuIHgoImRyYWdzdGFydCIpJiZ4KCJkcm9wIil9LHIud2Vic29ja2V0cz1mdW5jdGlvbigpe3JldHVybiJXZWJTb2NrZXQiaW4gYX0sci5yZ2JhPWZ1bmN0aW9uKCl7QSgiYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE1MCwyNTUsMTUwLC41KSIpO3JldHVybiBEKGsuYmFja2dyb3VuZENvbG9yLCJyZ2JhIil9LHIuaHNsYT1mdW5jdGlvbigpe0EoImJhY2tncm91bmQtY29sb3I6aHNsYSgxMjAsNDAlLDEwMCUsLjUpIik7cmV0dXJuIEQoay5iYWNrZ3JvdW5kQ29sb3IsInJnYmEiKXx8RChrLmJhY2tncm91bmRDb2xvciwiaHNsYSIpfSxyLm11bHRpcGxlYmdzPWZ1bmN0aW9uKCl7QSgiYmFja2dyb3VuZDp1cmwoLy86KSx1cmwoLy86KSxyZWQgdXJsKC8vOikiKTtyZXR1cm4obmV3IFJlZ0V4cCgiKHVybFxccypcXCguKj8pezN9IikpLnRlc3Qoay5iYWNrZ3JvdW5kKX0sci5iYWNrZ3JvdW5kc2l6ZT1mdW5jdGlvbigpe3JldHVybiBGKCJiYWNrZ3JvdW5kU2l6ZSIpfSxyLmJvcmRlcmltYWdlPWZ1bmN0aW9uKCl7cmV0dXJuIEYoImJvcmRlckltYWdlIil9LHIuYm9yZGVycmFkaXVzPWZ1bmN0aW9uKCl7cmV0dXJuIEYoImJvcmRlclJhZGl1cyIsIiIsZnVuY3Rpb24oYSl7cmV0dXJuIEQoYSwib3JkZXJSYWRpdXMiKX0pfSxyLmJveHNoYWRvdz1mdW5jdGlvbigpe3JldHVybiBGKCJib3hTaGFkb3ciKX0sci50ZXh0c2hhZG93PWZ1bmN0aW9uKCl7cmV0dXJuIGIuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUudGV4dFNoYWRvdz09PSIifSxyLm9wYWNpdHk9ZnVuY3Rpb24oKXtCKCJvcGFjaXR5Oi41NSIpO3JldHVybi9eMC41NSQvLnRlc3Qoay5vcGFjaXR5KX0sci5jc3NhbmltYXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIEYoImFuaW1hdGlvbk5hbWUiKX0sci5jc3Njb2x1bW5zPWZ1bmN0aW9uKCl7cmV0dXJuIEYoImNvbHVtbkNvdW50Iil9LHIuY3NzZ3JhZGllbnRzPWZ1bmN0aW9uKCl7dmFyIGE9ImJhY2tncm91bmQtaW1hZ2U6IixiPSJncmFkaWVudChsaW5lYXIsbGVmdCB0b3AscmlnaHQgYm90dG9tLGZyb20oIzlmOSksdG8od2hpdGUpKTsiLGM9ImxpbmVhci1ncmFkaWVudChsZWZ0IHRvcCwjOWY5LCB3aGl0ZSk7IjtBKChhK28uam9pbihiK2EpK28uam9pbihjK2EpKS5zbGljZSgwLC1hLmxlbmd0aCkpO3JldHVybiBEKGsuYmFja2dyb3VuZEltYWdlLCJncmFkaWVudCIpfSxyLmNzc3JlZmxlY3Rpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIEYoImJveFJlZmxlY3QiKX0sci5jc3N0cmFuc2Zvcm1zPWZ1bmN0aW9uKCl7cmV0dXJuISFFKFsidHJhbnNmb3JtUHJvcGVydHkiLCJXZWJraXRUcmFuc2Zvcm0iLCJNb3pUcmFuc2Zvcm0iLCJPVHJhbnNmb3JtIiwibXNUcmFuc2Zvcm0iXSl9LHIuY3NzdHJhbnNmb3JtczNkPWZ1bmN0aW9uKCl7dmFyIGE9ISFFKFsicGVyc3BlY3RpdmVQcm9wZXJ0eSIsIldlYmtpdFBlcnNwZWN0aXZlIiwiTW96UGVyc3BlY3RpdmUiLCJPUGVyc3BlY3RpdmUiLCJtc1BlcnNwZWN0aXZlIl0pO2EmJiJ3ZWJraXRQZXJzcGVjdGl2ZSJpbiBnLnN0eWxlJiYoYT13KCJAbWVkaWEgKCIrby5qb2luKCJ0cmFuc2Zvcm0tM2QpLCgiKSsibW9kZXJuaXpyKSIpKTtyZXR1cm4gYX0sci5jc3N0cmFuc2l0aW9ucz1mdW5jdGlvbigpe3JldHVybiBGKCJ0cmFuc2l0aW9uUHJvcGVydHkiKX0sci5mb250ZmFjZT1mdW5jdGlvbigpe3ZhciBhLGMsZD1ofHxnLGU9Yi5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLGY9Yi5pbXBsZW1lbnRhdGlvbnx8e2hhc0ZlYXR1cmU6ZnVuY3Rpb24oKXtyZXR1cm4hMX19O2UudHlwZT0idGV4dC9jc3MiLGQuaW5zZXJ0QmVmb3JlKGUsZC5maXJzdENoaWxkKSxhPWUuc2hlZXR8fGUuc3R5bGVTaGVldDt2YXIgaT1mLmhhc0ZlYXR1cmUoIkNTUzIiLCIiKT9mdW5jdGlvbihiKXtpZighYXx8IWIpcmV0dXJuITE7dmFyIGM9ITE7dHJ5e2EuaW5zZXJ0UnVsZShiLDApLGM9L3NyYy9pLnRlc3QoYS5jc3NSdWxlc1swXS5jc3NUZXh0KSxhLmRlbGV0ZVJ1bGUoYS5jc3NSdWxlcy5sZW5ndGgtMSl9Y2F0Y2goZCl7fXJldHVybiBjfTpmdW5jdGlvbihiKXtpZighYXx8IWIpcmV0dXJuITE7YS5jc3NUZXh0PWI7cmV0dXJuIGEuY3NzVGV4dC5sZW5ndGghPT0wJiYvc3JjL2kudGVzdChhLmNzc1RleHQpJiZhLmNzc1RleHQucmVwbGFjZSgvXHIrfFxuKy9nLCIiKS5pbmRleE9mKGIuc3BsaXQoIiAiKVswXSk9PT0wfTtjPWkoJ0Bmb250LWZhY2UgeyBmb250LWZhbWlseTogImZvbnQiOyBzcmM6IHVybChkYXRhOiwpOyB9JyksZC5yZW1vdmVDaGlsZChlKTtyZXR1cm4gY30sci52aWRlbz1mdW5jdGlvbigpe3ZhciBhPWIuY3JlYXRlRWxlbWVudCgidmlkZW8iKSxjPSEhYS5jYW5QbGF5VHlwZTtpZihjKXtjPW5ldyBCb29sZWFuKGMpLGMub2dnPWEuY2FuUGxheVR5cGUoJ3ZpZGVvL29nZzsgY29kZWNzPSJ0aGVvcmEiJyk7dmFyIGQ9J3ZpZGVvL21wNDsgY29kZWNzPSJhdmMxLjQyRTAxRSc7Yy5oMjY0PWEuY2FuUGxheVR5cGUoZCsnIicpfHxhLmNhblBsYXlUeXBlKGQrJywgbXA0YS40MC4yIicpLGMud2VibT1hLmNhblBsYXlUeXBlKCd2aWRlby93ZWJtOyBjb2RlY3M9InZwOCwgdm9yYmlzIicpfXJldHVybiBjfSxyLmF1ZGlvPWZ1bmN0aW9uKCl7dmFyIGE9Yi5jcmVhdGVFbGVtZW50KCJhdWRpbyIpLGM9ISFhLmNhblBsYXlUeXBlO2MmJihjPW5ldyBCb29sZWFuKGMpLGMub2dnPWEuY2FuUGxheVR5cGUoJ2F1ZGlvL29nZzsgY29kZWNzPSJ2b3JiaXMiJyksYy5tcDM9YS5jYW5QbGF5VHlwZSgiYXVkaW8vbXBlZzsiKSxjLndhdj1hLmNhblBsYXlUeXBlKCdhdWRpby93YXY7IGNvZGVjcz0iMSInKSxjLm00YT1hLmNhblBsYXlUeXBlKCJhdWRpby94LW00YTsiKXx8YS5jYW5QbGF5VHlwZSgiYXVkaW8vYWFjOyIpKTtyZXR1cm4gY30sci5sb2NhbHN0b3JhZ2U9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuISFsb2NhbFN0b3JhZ2UuZ2V0SXRlbX1jYXRjaChhKXtyZXR1cm4hMX19LHIuc2Vzc2lvbnN0b3JhZ2U9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuISFzZXNzaW9uU3RvcmFnZS5nZXRJdGVtfWNhdGNoKGEpe3JldHVybiExfX0sci53ZWJXb3JrZXJzPWZ1bmN0aW9uKCl7cmV0dXJuISFhLldvcmtlcn0sci5hcHBsaWNhdGlvbmNhY2hlPWZ1bmN0aW9uKCl7cmV0dXJuISFhLmFwcGxpY2F0aW9uQ2FjaGV9LHIuc3ZnPWZ1bmN0aW9uKCl7cmV0dXJuISFiLmNyZWF0ZUVsZW1lbnROUyYmISFiLmNyZWF0ZUVsZW1lbnROUyhxLnN2Zywic3ZnIikuY3JlYXRlU1ZHUmVjdH0sci5pbmxpbmVzdmc9ZnVuY3Rpb24oKXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2EuaW5uZXJIVE1MPSI8c3ZnLz4iO3JldHVybihhLmZpcnN0Q2hpbGQmJmEuZmlyc3RDaGlsZC5uYW1lc3BhY2VVUkkpPT1xLnN2Z30sci5zbWlsPWZ1bmN0aW9uKCl7cmV0dXJuISFiLmNyZWF0ZUVsZW1lbnROUyYmL1NWRy8udGVzdChuLmNhbGwoYi5jcmVhdGVFbGVtZW50TlMocS5zdmcsImFuaW1hdGUiKSkpfSxyLnN2Z2NsaXBwYXRocz1mdW5jdGlvbigpe3JldHVybiEhYi5jcmVhdGVFbGVtZW50TlMmJi9TVkcvLnRlc3Qobi5jYWxsKGIuY3JlYXRlRWxlbWVudE5TKHEuc3ZnLCJjbGlwUGF0aCIpKSl9O2Zvcih2YXIgSCBpbiByKXoocixIKSYmKHY9SC50b0xvd2VyQ2FzZSgpLGVbdl09cltIXSgpLHUucHVzaCgoZVt2XT8iIjoibm8tIikrdikpO2UuaW5wdXR8fEcoKSxlLmNyb3Nzd2luZG93bWVzc2FnaW5nPWUucG9zdG1lc3NhZ2UsZS5oaXN0b3J5bWFuYWdlbWVudD1lLmhpc3RvcnksZS5hZGRUZXN0PWZ1bmN0aW9uKGEsYil7YT1hLnRvTG93ZXJDYXNlKCk7aWYoIWVbYV0pe2I9ISFiKCksZy5jbGFzc05hbWUrPSIgIisoYj8iIjoibm8tIikrYSxlW2FdPWI7cmV0dXJuIGV9fSxBKCIiKSxqPWw9bnVsbCxmJiZhLmF0dGFjaEV2ZW50JiZmdW5jdGlvbigpe3ZhciBhPWIuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5pbm5lckhUTUw9IjxlbGVtPjwvZWxlbT4iO3JldHVybiBhLmNoaWxkTm9kZXMubGVuZ3RoIT09MX0oKSYmZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBwKGEsYil7dmFyIGM9LTEsZD1hLmxlbmd0aCxlLGY9W107d2hpbGUoKytjPGQpZT1hW2NdLChiPWUubWVkaWF8fGIpIT0ic2NyZWVuIiYmZi5wdXNoKHAoZS5pbXBvcnRzLGIpLGUuY3NzVGV4dCk7cmV0dXJuIGYuam9pbigiIil9ZnVuY3Rpb24gbyhhKXt2YXIgYj0tMTt3aGlsZSgrK2I8ZSlhLmNyZWF0ZUVsZW1lbnQoZFtiXSl9dmFyIGM9ImFiYnJ8YXJ0aWNsZXxhc2lkZXxhdWRpb3xjYW52YXN8ZGV0YWlsc3xmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8aGVhZGVyfGhncm91cHxtYXJrfG1ldGVyfG5hdnxvdXRwdXR8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRpbWV8dmlkZW8iLGQ9Yy5zcGxpdCgifCIpLGU9ZC5sZW5ndGgsZj1uZXcgUmVnRXhwKCIoXnxcXHMpKCIrYysiKSIsImdpIiksZz1uZXcgUmVnRXhwKCI8KC8qKSgiK2MrIikiLCJnaSIpLGg9bmV3IFJlZ0V4cCgiKF58W15cXG5dKj9cXHMpKCIrYysiKShbXlxcbl0qKSh7W1xcblxcd1xcV10qP30pIiwiZ2kiKSxpPWIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGo9Yi5kb2N1bWVudEVsZW1lbnQsaz1qLmZpcnN0Q2hpbGQsbD1iLmNyZWF0ZUVsZW1lbnQoImJvZHkiKSxtPWIuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxuO28oYiksbyhpKSxrLmluc2VydEJlZm9yZShtLGsuZmlyc3RDaGlsZCksbS5tZWRpYT0icHJpbnQiLGEuYXR0YWNoRXZlbnQoIm9uYmVmb3JlcHJpbnQiLGZ1bmN0aW9uKCl7dmFyIGE9LTEsYz1wKGIuc3R5bGVTaGVldHMsImFsbCIpLGs9W10sbztuPW58fGIuYm9keTt3aGlsZSgobz1oLmV4ZWMoYykpIT1udWxsKWsucHVzaCgob1sxXStvWzJdK29bM10pLnJlcGxhY2UoZiwiJDEuaWVwcF8kMiIpK29bNF0pO20uc3R5bGVTaGVldC5jc3NUZXh0PWsuam9pbigiXG4iKTt3aGlsZSgrK2E8ZSl7dmFyIHE9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShkW2FdKSxyPXEubGVuZ3RoLHM9LTE7d2hpbGUoKytzPHIpcVtzXS5jbGFzc05hbWUuaW5kZXhPZigiaWVwcF8iKTwwJiYocVtzXS5jbGFzc05hbWUrPSIgaWVwcF8iK2RbYV0pfWkuYXBwZW5kQ2hpbGQobiksai5hcHBlbmRDaGlsZChsKSxsLmNsYXNzTmFtZT1uLmNsYXNzTmFtZSxsLmlubmVySFRNTD1uLmlubmVySFRNTC5yZXBsYWNlKGcsIjwkMWZvbnQiKX0pLGEuYXR0YWNoRXZlbnQoIm9uYWZ0ZXJwcmludCIsZnVuY3Rpb24oKXtsLmlubmVySFRNTD0iIixqLnJlbW92ZUNoaWxkKGwpLGouYXBwZW5kQ2hpbGQobiksbS5zdHlsZVNoZWV0LmNzc1RleHQ9IiJ9KX0oYSxiKSxlLl9lbmFibGVIVE1MNT1mLGUuX3ZlcnNpb249ZCxnLmNsYXNzTmFtZT1nLmNsYXNzTmFtZS5yZXBsYWNlKC9cYm5vLWpzXGIvLCIiKSsiIGpzICIrdS5qb2luKCIgIik7cmV0dXJuIGV9KHRoaXMsdGhpcy5kb2N1bWVudCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctYXBvbGxvLmpzIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLWFwb2xsby5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDk4YmFmCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLWFwb2xsby5qcwpAQCAtMCwwICsxLDIgQEAKK1BSLnJlZ2lzdGVyTGFuZ0hhbmRsZXIoUFIuY3JlYXRlU2ltcGxlTGV4ZXIoW1siY29tIiwvXiNbXlxuXHJdKi8sbnVsbCwiIyJdLFsicGxuIiwvXltcdFxuXHIgXHhhMF0rLyxudWxsLCJcdFxuXHIgwlx4YTAiXSxbInN0ciIsL14iKD86W14iXFxdfFxcW1xTXHNdKSooPzoifCQpLyxudWxsLCciJ11dLFtbImt3ZCIsL14oPzpBRFN8QUR8QVVHfEJaRnxCWk1GfENBRXxDQUZ8Q0F8Q0NTfENPTXxDU3xEQVN8RENBfERDT018RENTfERET1VCTHxESU18RE9VQkxFfERUQ0J8RFRDRnxEVnxEWENIfEVEUlVQVHxFWFRFTkR8SU5DUnxJTkRFWHxORFh8SU5ISU5UfExYQ0h8TUFTS3xNU0t8TVB8TVNVfE5PT1B8T1ZTS3xRWENIfFJBTkR8UkVBRHxSRUxJTlR8UkVTVU1FfFJFVFVSTnxST1J8UlhPUnxTUVVBUkV8U1V8VENSfFRDQUF8T1ZTS3xUQ0Z8VEN8VFN8V0FORHxXT1J8V1JJVEV8WENIfFhMUXxYWEFMUXxaTHxaUXxBRER8QURafFNVQnxTVVp8TVBZfE1QUnxNUFp8RFZQfENPTXxBQlN8Q0xBfENMWnxMRFF8U1RPfFNUUXxBTFN8TExTfExSU3xUUkF8VFNRfFRNSXxUT1Z8QVhUfFRJWHxETFl8SU5QfE9VVClccy8sCitudWxsXSxbInR5cCIsL14oPzotP0dFTkFEUnw9TUlOVVN8MkJDQURSfFZOfEJPRnxNTXwtPzJDQURSfC0/WzEtNl1ETkFEUnxBRFJFU3xCQkNPTnxbRVNdP0JBTks9P3xCTE9DS3xCTktTVU18RT9DQURSfENPVU5UXCo/fDI/REVDXCo/fC0/RE5DSEFOfC0/RE5QVFJ8RVFVQUxTfEVSQVNFfE1FTU9SWXwyP09DVHxSRU1BRFJ8U0VUTE9DfFNVQlJPfE9SR3xCU1N8QkVTfFNZTnxFUVV8REVGSU5FfEVORClccy8sbnVsbF0sWyJsaXQiLC9eJyg/Oi0qKD86XHd8XFxbIS1+XSkoPzpbXHctXSp8XFxbIS1+XSlbIT0/XT8pPy9dLFsicGxuIiwvXi0qKD86WyEtel18XFxbIS1+XSkoPzpbXHctXSp8XFxbIS1+XSlbIT0/XT8vXSxbInB1biIsL15bXlx3XHRcblxyICInLSk7XFxceGEwXSsvXV0pLFsiYXBvbGxvIiwiYWdjIiwiYWVhIl0pOwpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLWNsai5qcyBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1jbGouanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyYTIyMAotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1jbGouanMKQEAgLTAsMCArMSwxOCBAQAorLyoKKyBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4KKworIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKi8KK3ZhciBhPW51bGw7CitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbIm9wbiIsL15bKFt7XSsvLGEsIihbeyJdLFsiY2xvIiwvXlspXF19XSsvLGEsIildfSJdLFsiY29tIiwvXjtbXlxuXHJdKi8sYSwiOyJdLFsicGxuIiwvXltcdFxuXHIgXHhhMF0rLyxhLCJcdFxuXHIgXHhhMCJdLFsic3RyIiwvXiIoPzpbXiJcXF18XFxbXFNcc10pKig/OiJ8JCkvLGEsJyInXV0sW1sia3dkIiwvXig/OmRlZnxpZnxkb3xsZXR8cXVvdGV8dmFyfGZufGxvb3B8cmVjdXJ8dGhyb3d8dHJ5fG1vbml0b3ItZW50ZXJ8bW9uaXRvci1leGl0fGRlZm1hY3JvfGRlZm58ZGVmbi18bWFjcm9leHBhbmR8bWFjcm9leHBhbmQtMXxmb3J8ZG9zZXF8ZG9zeW5jfGRvdGltZXN8YW5kfG9yfHdoZW58bm90fGFzc2VydHxkb3RvfHByb3h5fGRlZnN0cnVjdHxmaXJzdHxyZXN0fGNvbnN8ZGVmcHJvdG9jb2x8ZGVmdHlwZXxkZWZyZWNvcmR8cmVpZnl8ZGVmbXVsdGl8ZGVmbWV0aG9kfG1ldGF8d2l0aC1tZXRhfG5zfGluLW5zfGNyZWF0ZS1uc3xpbXBvcnR8aW50ZXJufHJlZmVyfGFsaWFzfG5hbWVzcGFjZXxyZXNvbHZlfHJlZnxkZXJlZnxyZWZzZXR8bmV3fHNldCF8bWVtZm58dG8tYXJyYXl8aW50by1hcnJheXxhc2V0fGdlbi1jbGFzc3xyZWR1Y2V8bWFwfGZpbHRlcnxmaW5kfG5pbD98ZW1wdHk/fGhhc2gtbWFwfGhhc2gtc2V0fHZlY3x2ZWN0b3J8c2VxfGZsYXR0ZW58cmV2ZXJzZXxhc3NvY3xkaXNzb2N8bGlzdHxsaXN0P3xkaXNqfGdldHx1bmlvbnxkaWZmZXJlbmNlfGludGVyc2VjdGlvbnxleHRlbmR8ZXh0ZW5kLXR5cGV8ZXh0ZW5kLXByb3RvY29sfHBybilcYi8sYV0sCitbInR5cCIsL146W1xkQS1aYS16LV0rL11dKSxbImNsaiJdKTsKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1jc3MuanMgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctY3NzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MWUxZjUKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctY3NzLmpzCkBAIC0wLDAgKzEsMiBAQAorUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbWyJwbG4iLC9eW1x0XG5cZlxyIF0rLyxudWxsLCIgXHRcclxuDCJdXSxbWyJzdHIiLC9eIig/OlteXG5cZlxyIlxcXXxcXCg/OlxyXG4/fFxufFxmKXxcXFtcU1xzXSkqIi8sbnVsbF0sWyJzdHIiLC9eJyg/OlteXG5cZlxyJ1xcXXxcXCg/OlxyXG4/fFxufFxmKXxcXFtcU1xzXSkqJy8sbnVsbF0sWyJsYW5nLWNzcy1zdHIiLC9edXJsXCgoW14iJyldKilcKS9pXSxbImt3ZCIsL14oPzp1cmx8cmdifCFpbXBvcnRhbnR8QGltcG9ydHxAcGFnZXxAbWVkaWF8QGNoYXJzZXR8aW5oZXJpdCkoPz1bXlx3LV18JCkvaSxudWxsXSxbImxhbmctY3NzLWt3IiwvXigtPyg/OltfYS16XXxcXFtcZGEtZl0rID8pKD86W1x3LV18XFxcXFtcZGEtZl0rID8pKilccyo6L2ldLFsiY29tIiwvXlwvXCpbXipdKlwqKyg/OlteKi9dW14qXSpcKispKlwvL10sWyJjb20iLAorL14oPzo8XCEtLXwtLVw+KS9dLFsibGl0IiwvXig/OlxkK3xcZCpcLlxkKykoPzolfFthLXpdKyk/L2ldLFsibGl0IiwvXiNbXGRhLWZdezMsNn0vaV0sWyJwbG4iLC9eLT8oPzpbX2Etel18XFxbXGRhLWZdKyA/KSg/Oltcdy1dfFxcXFxbXGRhLWZdKyA/KSovaV0sWyJwdW4iLC9eW15cc1x3IiddKy9dXSksWyJjc3MiXSk7UFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbXSxbWyJrd2QiLC9eLT8oPzpbX2Etel18XFxbXGRhLWZdKyA/KSg/Oltcdy1dfFxcXFxbXGRhLWZdKyA/KSovaV1dKSxbImNzcy1rdyJdKTtQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtdLFtbInN0ciIsL15bXiInKV0rL11dKSxbImNzcy1zdHIiXSk7CmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctZ28uanMgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctZ28uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMxOGRjMAotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1nby5qcwpAQCAtMCwwICsxIEBACitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbInBsbiIsL15bXHRcblxyIFx4YTBdKy8sbnVsbCwiXHRcblxyIMJceGEwIl0sWyJwbG4iLC9eKD86Iig/OlteIlxcXXxcXFtcU1xzXSkqKD86InwkKXwnKD86W14nXFxdfFxcW1xTXHNdKSsoPzonfCQpfGBbXmBdKig/OmB8JCkpLyxudWxsLCJcIiciXV0sW1siY29tIiwvXig/OlwvXC9bXlxuXHJdKnxcL1wqW1xTXHNdKj9cKlwvKS9dLFsicGxuIiwvXig/OlteIicvYF18XC8oPyFbKi9dKSkrL11dKSxbImdvIl0pOwpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLWhzLmpzIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLWhzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNzdiMDgKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctaHMuanMKQEAgLTAsMCArMSwyIEBACitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbInBsbiIsL15bXHQtXHIgXSsvLG51bGwsIlx0XG4LDFxyICJdLFsic3RyIiwvXiIoPzpbXlxuXGZcciJcXF18XFxbXFNcc10pKig/OiJ8JCkvLG51bGwsJyInXSxbInN0ciIsL14nKD86W15cblxmXHInXFxdfFxcW14mXSknPy8sbnVsbCwiJyJdLFsibGl0IiwvXig/OjBvWzAtN10rfDB4W1xkYS1mXSt8XGQrKD86XC5cZCspPyg/OmVbKy1dP1xkKyk/KS9pLG51bGwsIjAxMjM0NTY3ODkiXV0sW1siY29tIiwvXig/Oi0tK1teXG5cZlxyXSp8ey0oPzpbXi1dfC0rW159LV0pKi19KS9dLFsia3dkIiwvXig/OmNhc2V8Y2xhc3N8ZGF0YXxkZWZhdWx0fGRlcml2aW5nfGRvfGVsc2V8aWZ8aW1wb3J0fGlufGluZml4fGluZml4bHxpbmZpeHJ8aW5zdGFuY2V8bGV0fG1vZHVsZXxuZXd0eXBlfG9mfHRoZW58dHlwZXx3aGVyZXxfKSg/PVteXGQnQS1aYS16XXwkKS8sCitudWxsXSxbInBsbiIsL14oPzpbQS1aXVtcdyddKlwuKSpbQS1aYS16XVtcdyddKi9dLFsicHVuIiwvXlteXGRcdC1cciAiJ0EtWmEtel0rL11dKSxbImhzIl0pOwpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLWxpc3AuanMgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctbGlzcC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmEzMGU4Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLWxpc3AuanMKQEAgLTAsMCArMSwzIEBACit2YXIgYT1udWxsOworUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbWyJvcG4iLC9eXCgrLyxhLCIoIl0sWyJjbG8iLC9eXCkrLyxhLCIpIl0sWyJjb20iLC9eO1teXG5ccl0qLyxhLCI7Il0sWyJwbG4iLC9eW1x0XG5cciBceGEwXSsvLGEsIlx0XG5cciBceGEwIl0sWyJzdHIiLC9eIig/OlteIlxcXXxcXFtcU1xzXSkqKD86InwkKS8sYSwnIiddXSxbWyJrd2QiLC9eKD86YmxvY2t8Y1thZF0rcnxjYXRjaHxjb25bZHNdfGRlZig/OmluZXx1bil8ZG98ZXF8ZXFsfGVxdWFsfGVxdWFscHxldmFsLXdoZW58ZmxldHxmb3JtYXR8Z298aWZ8bGFiZWxzfGxhbWJkYXxsZXR8bG9hZC10aW1lLXZhbHVlfGxvY2FsbHl8bWFjcm9sZXR8bXVsdGlwbGUtdmFsdWUtY2FsbHxuaWx8cHJvZ258cHJvZ3Z8cXVvdGV8cmVxdWlyZXxyZXR1cm4tZnJvbXxzZXRxfHN5bWJvbC1tYWNyb2xldHx0fHRhZ2JvZHl8dGhlfHRocm93fHVud2luZClcYi8sYV0sCitbImxpdCIsL15bKy1dPyg/OlsjMF14W1xkYS1mXSt8XGQrXC9cZCt8KD86XC5cZCt8XGQrKD86XC5cZCopPykoPzpbZGVdWystXT9cZCspPykvaV0sWyJsaXQiLC9eJyg/Oi0qKD86XHd8XFxbIS1+XSkoPzpbXHctXSp8XFxbIS1+XSlbIT0/XT8pPy9dLFsicGxuIiwvXi0qKD86W19hLXpdfFxcWyEtfl0pKD86W1x3LV0qfFxcWyEtfl0pWyE9P10/L2ldLFsicHVuIiwvXlteXHdcdFxuXHIgIictKTtcXFx4YTBdKy9dXSksWyJjbCIsImVsIiwibGlzcCIsInNjbSJdKTsKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1sdWEuanMgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctbHVhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4M2EzYzQKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctbHVhLmpzCkBAIC0wLDAgKzEsMiBAQAorUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbWyJwbG4iLC9eW1x0XG5cciBceGEwXSsvLG51bGwsIlx0XG5cciDCXHhhMCJdLFsic3RyIiwvXig/OiIoPzpbXiJcXF18XFxbXFNcc10pKig/OiJ8JCl8Jyg/OlteJ1xcXXxcXFtcU1xzXSkqKD86J3wkKSkvLG51bGwsIlwiJyJdXSxbWyJjb20iLC9eLS0oPzpcWyg9KilcW1tcU1xzXSo/KD86XVwxXXwkKXxbXlxuXHJdKikvXSxbInN0ciIsL15cWyg9KilcW1tcU1xzXSo/KD86XVwxXXwkKS9dLFsia3dkIiwvXig/OmFuZHxicmVha3xkb3xlbHNlfGVsc2VpZnxlbmR8ZmFsc2V8Zm9yfGZ1bmN0aW9ufGlmfGlufGxvY2FsfG5pbHxub3R8b3J8cmVwZWF0fHJldHVybnx0aGVufHRydWV8dW50aWx8d2hpbGUpXGIvLG51bGxdLFsibGl0IiwvXlsrLV0/KD86MHhbXGRhLWZdK3woPzpcLlxkK3xcZCsoPzpcLlxkKik/KSg/OmVbKy1dP1xkKyk/KS9pXSwKK1sicGxuIiwvXltfYS16XVx3Ki9pXSxbInB1biIsL15bXlx3XHRcblxyIFx4YTBdW15cd1x0XG5cciAiJys9XHhhMC1dKi9dXSksWyJsdWEiXSk7CmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctbWwuanMgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctbWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRmMDJkNwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1tbC5qcwpAQCAtMCwwICsxLDIgQEAKK1BSLnJlZ2lzdGVyTGFuZ0hhbmRsZXIoUFIuY3JlYXRlU2ltcGxlTGV4ZXIoW1sicGxuIiwvXltcdFxuXHIgXHhhMF0rLyxudWxsLCJcdFxuXHIgwlx4YTAiXSxbImNvbSIsL14jKD86aWZbXHRcblxyIFx4YTBdKyg/OlskX2Etel1bXHcnXSp8YGBbXlx0XG5ccmBdKig/OmBgfCQpKXxlbHNlfGVuZGlmfGxpZ2h0KS9pLG51bGwsIiMiXSxbInN0ciIsL14oPzoiKD86W14iXFxdfFxcW1xTXHNdKSooPzoifCQpfCcoPzpbXidcXF18XFxbXFNcc10pKD86J3wkKSkvLG51bGwsIlwiJyJdXSxbWyJjb20iLC9eKD86XC9cL1teXG5ccl0qfFwoXCpbXFNcc10qP1wqXCkpL10sWyJrd2QiLC9eKD86YWJzdHJhY3R8YW5kfGFzfGFzc2VydHxiZWdpbnxjbGFzc3xkZWZhdWx0fGRlbGVnYXRlfGRvfGRvbmV8ZG93bmNhc3R8ZG93bnRvfGVsaWZ8ZWxzZXxlbmR8ZXhjZXB0aW9ufGV4dGVybnxmYWxzZXxmaW5hbGx5fGZvcnxmdW58ZnVuY3Rpb258aWZ8aW58aW5oZXJpdHxpbmxpbmV8aW50ZXJmYWNlfGludGVybmFsfGxhenl8bGV0fG1hdGNofG1lbWJlcnxtb2R1bGV8bXV0YWJsZXxuYW1lc3BhY2V8bmV3fG51bGx8b2Z8b3BlbnxvcnxvdmVycmlkZXxwcml2YXRlfHB1YmxpY3xyZWN8cmV0dXJufHN0YXRpY3xzdHJ1Y3R8dGhlbnx0b3x0cnVlfHRyeXx0eXBlfHVwY2FzdHx1c2V8dmFsfHZvaWR8d2hlbnx3aGlsZXx3aXRofHlpZWxkfGFzcnxsYW5kfGxvcnxsc2x8bHNyfGx4b3J8bW9kfHNpZ3xhdG9taWN8YnJlYWt8Y2hlY2tlZHxjb21wb25lbnR8Y29uc3R8Y29uc3RyYWludHxjb25zdHJ1Y3Rvcnxjb250aW51ZXxlYWdlcnxldmVudHxleHRlcm5hbHxmaXhlZHxmdW5jdG9yfGdsb2JhbHxpbmNsdWRlfG1ldGhvZHxtaXhpbnxvYmplY3R8cGFyYWxsZWx8cHJvY2Vzc3xwcm90ZWN0ZWR8cHVyZXxzZWFsZWR8dHJhaXR8dmlydHVhbHx2b2xhdGlsZSlcYi9dLAorWyJsaXQiLC9eWystXT8oPzoweFtcZGEtZl0rfCg/OlwuXGQrfFxkKyg/OlwuXGQqKT8pKD86ZVsrLV0/XGQrKT8pL2ldLFsicGxuIiwvXig/OltfYS16XVtcdyddKlshIz9dP3xgYFteXHRcblxyYF0qKD86YGB8JCkpL2ldLFsicHVuIiwvXlteXHdcdFxuXHIgIidceGEwXSsvXV0pLFsiZnMiLCJtbCJdKTsKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1uLmpzIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyZTg1YgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1uLmpzCkBAIC0wLDAgKzEsNCBAQAordmFyIGE9bnVsbDsKK1BSLnJlZ2lzdGVyTGFuZ0hhbmRsZXIoUFIuY3JlYXRlU2ltcGxlTGV4ZXIoW1sic3RyIiwvXig/OicoPzpbXlxuXHInXFxdfFxcLikqJ3wiKD86W15cblxyIlxcXXxcXC4pKig/OiJ8JCkpLyxhLCciJ10sWyJjb20iLC9eIyg/Oig/OmRlZmluZXxlbGlmfGVsc2V8ZW5kaWZ8ZXJyb3J8aWZkZWZ8aW5jbHVkZXxpZm5kZWZ8bGluZXxwcmFnbWF8dW5kZWZ8d2FybmluZylcYnxbXlxuXHJdKikvLGEsIiMiXSxbInBsbiIsL15ccysvLGEsIiBcclxuXHRceGEwIl1dLFtbInN0ciIsL15AIig/OlteIl18IiIpKig/OiJ8JCkvLGFdLFsic3RyIiwvXjwjW14jPl0qKD86Iz58JCkvLGFdLFsic3RyIiwvXjwoPzooPzooPzpcLlwuXC8pKnxcLz8pKD86W1x3LV0rKD86XC9bXHctXSspKyk/W1x3LV0rXC5ofFthLXpdXHcqKT4vLGFdLFsiY29tIiwvXlwvXC9bXlxuXHJdKi8sYV0sWyJjb20iLC9eXC9cKltcU1xzXSo/KD86XCpcL3wkKS8sCithXSxbImt3ZCIsL14oPzphYnN0cmFjdHxhbmR8YXN8YmFzZXxjYXRjaHxjbGFzc3xkZWZ8ZGVsZWdhdGV8ZW51bXxldmVudHxleHRlcm58ZmFsc2V8ZmluYWxseXxmdW58aW1wbGVtZW50c3xpbnRlcmZhY2V8aW50ZXJuYWx8aXN8bWFjcm98bWF0Y2h8bWF0Y2hlc3xtb2R1bGV8bXV0YWJsZXxuYW1lc3BhY2V8bmV3fG51bGx8b3V0fG92ZXJyaWRlfHBhcmFtc3xwYXJ0aWFsfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZWZ8c2VhbGVkfHN0YXRpY3xzdHJ1Y3R8c3ludGF4fHRoaXN8dGhyb3d8dHJ1ZXx0cnl8dHlwZXx0eXBlb2Z8dXNpbmd8dmFyaWFudHx2aXJ0dWFsfHZvbGF0aWxlfHdoZW58d2hlcmV8d2l0aHxhc3NlcnR8YXNzZXJ0Mnxhc3luY3xicmVha3xjaGVja2VkfGNvbnRpbnVlfGRvfGVsc2V8ZW5zdXJlc3xmb3J8Zm9yZWFjaHxpZnxsYXRlfGxvY2t8bmV3fG5vbGF0ZXxvdGhlcndpc2V8cmVnZXhwfHJlcGVhdHxyZXF1aXJlc3xyZXR1cm58c3Vycm91bmR3aXRofHVuY2hlY2tlZHx1bmxlc3N8dXNpbmd8d2hpbGV8eWllbGQpXGIvLAorYV0sWyJ0eXAiLC9eKD86YXJyYXl8Ym9vbHxieXRlfGNoYXJ8ZGVjaW1hbHxkb3VibGV8ZmxvYXR8aW50fGxpc3R8bG9uZ3xvYmplY3R8c2J5dGV8c2hvcnR8c3RyaW5nfHVsb25nfHVpbnR8dWZsb2F0fHVsb25nfHVzaG9ydHx2b2lkKVxiLyxhXSxbImxpdCIsL15AWyRfYS16XVtcdyRAXSovaSxhXSxbInR5cCIsL15AW0EtWl0rW2Etel1bXHckQF0qLyxhXSxbInBsbiIsL14nP1skX2Etel1bXHckQF0qL2ksYV0sWyJsaXQiLC9eKD86MHhbXGRhLWZdK3woPzpcZCg/Ol9cZCspKlxkKig/OlwuXGQqKT98XC5cZFwrKSg/OmVbKy1dP1xkKyk/KVthLXpdKi9pLGEsIjAxMjM0NTY3ODkiXSxbInB1biIsL14uW15cc1x3Ii0kJy4vQGBdKi8sYV1dKSxbIm4iLCJuZW1lcmxlIl0pOwpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXByb3RvLmpzIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXByb3RvLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMDZhZDgKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctcHJvdG8uanMKQEAgLTAsMCArMSBAQAorUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5zb3VyY2VEZWNvcmF0b3Ioe2tleXdvcmRzOiJieXRlcyxkZWZhdWx0LGRvdWJsZSxlbnVtLGV4dGVuZCxleHRlbnNpb25zLGZhbHNlLGdyb3VwLGltcG9ydCxtYXgsbWVzc2FnZSxvcHRpb24sb3B0aW9uYWwscGFja2FnZSxyZXBlYXRlZCxyZXF1aXJlZCxyZXR1cm5zLHJwYyxzZXJ2aWNlLHN5bnRheCx0byx0cnVlIix0eXBlczovXihib29sfChkb3VibGV8cz9maXhlZHxbc3VdP2ludCkoMzJ8NjQpfGZsb2F0fHN0cmluZylcYi8sY1N0eWxlQ29tbWVudHM6ITB9KSxbInByb3RvIl0pOwpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXNjYWxhLmpzIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXNjYWxhLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZDAzNGQKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctc2NhbGEuanMKQEAgLTAsMCArMSwyIEBACitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbInBsbiIsL15bXHRcblxyIFx4YTBdKy8sbnVsbCwiXHRcblxyIMJceGEwIl0sWyJzdHIiLC9eIig/OiIiKD86IiI/KD8hIil8W14iXFxdfFxcLikqInswLDN9fCg/OlteXG5cciJcXF18XFwuKSoiPykvLG51bGwsJyInXSxbImxpdCIsL15gKD86W15cblxyXFxgXXxcXC4pKmA/LyxudWxsLCJgIl0sWyJwdW4iLC9eWyEjJSYoLS06LUBbLV57LX5dKy8sbnVsbCwiISMlJigpKissLTo7PD0+P0BbXFxdXnt8fX4iXV0sW1sic3RyIiwvXicoPzpbXlxuXHInXFxdfFxcKD86J3xbXlxuXHInXSspKScvXSxbImxpdCIsL14nWyRBLVpfYS16XVtcdyRdKig/IVtcdyQnXSkvXSxbImt3ZCIsL14oPzphYnN0cmFjdHxjYXNlfGNhdGNofGNsYXNzfGRlZnxkb3xlbHNlfGV4dGVuZHN8ZmluYWx8ZmluYWxseXxmb3J8Zm9yU29tZXxpZnxpbXBsaWNpdHxpbXBvcnR8bGF6eXxtYXRjaHxuZXd8b2JqZWN0fG92ZXJyaWRlfHBhY2thZ2V8cHJpdmF0ZXxwcm90ZWN0ZWR8cmVxdWlyZXN8cmV0dXJufHNlYWxlZHxzdXBlcnx0aHJvd3x0cmFpdHx0cnl8dHlwZXx2YWx8dmFyfHdoaWxlfHdpdGh8eWllbGQpXGIvXSwKK1sibGl0IiwvXig/OnRydWV8ZmFsc2V8bnVsbHx0aGlzKVxiL10sWyJsaXQiLC9eKD86MCg/OlswLTddK3x4W1xkYS1mXSspbD98KD86MHxbMS05XVxkKikoPzooPzpcLlxkKyk/KD86ZVsrLV0/XGQrKT9mP3xsPyl8XFwuXGQrKD86ZVsrLV0/XGQrKT9mPykvaV0sWyJ0eXAiLC9eWyRfXSpbQS1aXVtcZCRBLVpfXSpbYS16XVtcdyRdKi9dLFsicGxuIiwvXlskQS1aX2Etel1bXHckXSovXSxbImNvbSIsL15cLyg/OlwvLip8XCooPzpcL3xcKipbXiovXSkqKD86XCorXC8/KT8pL10sWyJwdW4iLC9eKD86XC4rfFwvKS9dXSksWyJzY2FsYSJdKTsKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1zcWwuanMgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctc3FsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNzA1YjAKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctc3FsLmpzCkBAIC0wLDAgKzEsMiBAQAorUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbWyJwbG4iLC9eW1x0XG5cciBceGEwXSsvLG51bGwsIlx0XG5cciDCXHhhMCJdLFsic3RyIiwvXig/OiIoPzpbXiJcXF18XFwuKSoifCcoPzpbXidcXF18XFwuKSonKS8sbnVsbCwiXCInIl1dLFtbImNvbSIsL14oPzotLVteXG5ccl0qfFwvXCpbXFNcc10qPyg/OlwqXC98JCkpL10sWyJrd2QiLC9eKD86YWRkfGFsbHxhbHRlcnxhbmR8YW55fGFzfGFzY3xhdXRob3JpemF0aW9ufGJhY2t1cHxiZWdpbnxiZXR3ZWVufGJyZWFrfGJyb3dzZXxidWxrfGJ5fGNhc2NhZGV8Y2FzZXxjaGVja3xjaGVja3BvaW50fGNsb3NlfGNsdXN0ZXJlZHxjb2FsZXNjZXxjb2xsYXRlfGNvbHVtbnxjb21taXR8Y29tcHV0ZXxjb25zdHJhaW50fGNvbnRhaW5zfGNvbnRhaW5zdGFibGV8Y29udGludWV8Y29udmVydHxjcmVhdGV8Y3Jvc3N8Y3VycmVudHxjdXJyZW50X2RhdGV8Y3VycmVudF90aW1lfGN1cnJlbnRfdGltZXN0YW1wfGN1cnJlbnRfdXNlcnxjdXJzb3J8ZGF0YWJhc2V8ZGJjY3xkZWFsbG9jYXRlfGRlY2xhcmV8ZGVmYXVsdHxkZWxldGV8ZGVueXxkZXNjfGRpc2t8ZGlzdGluY3R8ZGlzdHJpYnV0ZWR8ZG91YmxlfGRyb3B8ZHVtbXl8ZHVtcHxlbHNlfGVuZHxlcnJsdmx8ZXNjYXBlfGV4Y2VwdHxleGVjfGV4ZWN1dGV8ZXhpc3RzfGV4aXR8ZmV0Y2h8ZmlsZXxmaWxsZmFjdG9yfGZvcnxmb3JlaWdufGZyZWV0ZXh0fGZyZWV0ZXh0dGFibGV8ZnJvbXxmdWxsfGZ1bmN0aW9ufGdvdG98Z3JhbnR8Z3JvdXB8aGF2aW5nfGhvbGRsb2NrfGlkZW50aXR5fGlkZW50aXR5Y29sfGlkZW50aXR5X2luc2VydHxpZnxpbnxpbmRleHxpbm5lcnxpbnNlcnR8aW50ZXJzZWN0fGludG98aXN8am9pbnxrZXl8a2lsbHxsZWZ0fGxpa2V8bGluZW5vfGxvYWR8bWF0Y2h8bWVyZ2V8bmF0aW9uYWx8bm9jaGVja3xub25jbHVzdGVyZWR8bm90fG51bGx8bnVsbGlmfG9mfG9mZnxvZmZzZXRzfG9ufG9wZW58b3BlbmRhdGFzb3VyY2V8b3BlbnF1ZXJ5fG9wZW5yb3dzZXR8b3BlbnhtbHxvcHRpb258b3J8b3JkZXJ8b3V0ZXJ8b3ZlcnxwZXJjZW50fHBsYW58cHJlY2lzaW9ufHByaW1hcnl8cHJpbnR8cHJvY3xwcm9jZWR1cmV8cHVibGljfHJhaXNlcnJvcnxyZWFkfHJlYWR0ZXh0fHJlY29uZmlndXJlfHJlZmVyZW5jZXN8cmVwbGljYXRpb258cmVzdG9yZXxyZXN0cmljdHxyZXR1cm58cmV2b2tlfHJpZ2h0fHJvbGxiYWNrfHJvd2NvdW50fHJvd2d1aWRjb2x8cnVsZXxzYXZlfHNjaGVtYXxzZWxlY3R8c2Vzc2lvbl91c2VyfHNldHxzZXR1c2VyfHNodXRkb3dufHNvbWV8c3RhdGlzdGljc3xzeXN0ZW1fdXNlcnx0YWJsZXx0ZXh0c2l6ZXx0aGVufHRvfHRvcHx0cmFufHRyYW5zYWN0aW9ufHRyaWdnZXJ8dHJ1bmNhdGV8dHNlcXVhbHx1bmlvbnx1bmlxdWV8dXBkYXRlfHVwZGF0ZXRleHR8dXNlfHVzZXJ8dXNpbmd8dmFsdWVzfHZhcnlpbmd8dmlld3x3YWl0Zm9yfHdoZW58d2hlcmV8d2hpbGV8d2l0aHx3cml0ZXRleHQpKD89W15cdy1dfCQpL2ksCitudWxsXSxbImxpdCIsL15bKy1dPyg/OjB4W1xkYS1mXSt8KD86XC5cZCt8XGQrKD86XC5cZCopPykoPzplWystXT9cZCspPykvaV0sWyJwbG4iLC9eW19hLXpdW1x3LV0qL2ldLFsicHVuIiwvXlteXHdcdFxuXHIgIidceGEwXVteXHdcdFxuXHIgIicrXHhhMC1dKi9dXSksWyJzcWwiXSk7CmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctdGV4LmpzIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXRleC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTk2ZmJiCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXRleC5qcwpAQCAtMCwwICsxIEBACitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbInBsbiIsL15bXHRcblxyIFx4YTBdKy8sbnVsbCwiXHRcblxyIMJceGEwIl0sWyJjb20iLC9eJVteXG5ccl0qLyxudWxsLCIlIl1dLFtbImt3ZCIsL15cXFtALVphLXpdKy9dLFsia3dkIiwvXlxcLi9dLFsidHlwIiwvXlskJl0vXSxbImxpdCIsL1srLV0/KD86XC5cZCt8XGQrKD86XC5cZCopPykoY218ZW18ZXh8aW58cGN8cHR8YnB8bW0pL2ldLFsicHVuIiwvXlsoKT1bXF17fV0rL11dKSxbImxhdGV4IiwidGV4Il0pOwpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXZiLmpzIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXZiLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NTA2YjAKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctdmIuanMKQEAgLTAsMCArMSwyIEBACitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbInBsbiIsL15bXHRcblxyIFx4YTBcdTIwMjhcdTIwMjldKy8sbnVsbCwiXHRcblxyIMJceGEw4oCo4oCpIl0sWyJzdHIiLC9eKD86WyJcdTIwMWNcdTIwMWRdKD86W14iXHUyMDFjXHUyMDFkXXxbIlx1MjAxY1x1MjAxZF17Mn0pKD86WyJcdTIwMWNcdTIwMWRdY3wkKXxbIlx1MjAxY1x1MjAxZF0oPzpbXiJcdTIwMWNcdTIwMWRdfFsiXHUyMDFjXHUyMDFkXXsyfSkqKD86WyJcdTIwMWNcdTIwMWRdfCQpKS9pLG51bGwsJyLigJzigJ0nXSxbImNvbSIsL15bJ1x1MjAxOFx1MjAxOV0uKi8sbnVsbCwiJ+KAmOKAmSJdXSxbWyJrd2QiLC9eKD86YWRkaGFuZGxlcnxhZGRyZXNzb2Z8YWxpYXN8YW5kfGFuZGFsc298YW5zaXxhc3xhc3NlbWJseXxhdXRvfGJvb2xlYW58YnlyZWZ8Ynl0ZXxieXZhbHxjYWxsfGNhc2V8Y2F0Y2h8Y2Jvb2x8Y2J5dGV8Y2NoYXJ8Y2RhdGV8Y2RibHxjZGVjfGNoYXJ8Y2ludHxjbGFzc3xjbG5nfGNvYmp8Y29uc3R8Y3Nob3J0fGNzbmd8Y3N0cnxjdHlwZXxkYXRlfGRlY2ltYWx8ZGVjbGFyZXxkZWZhdWx0fGRlbGVnYXRlfGRpbXxkaXJlY3RjYXN0fGRvfGRvdWJsZXxlYWNofGVsc2V8ZWxzZWlmfGVuZHxlbmRpZnxlbnVtfGVyYXNlfGVycm9yfGV2ZW50fGV4aXR8ZmluYWxseXxmb3J8ZnJpZW5kfGZ1bmN0aW9ufGdldHxnZXR0eXBlfGdvc3VifGdvdG98aGFuZGxlc3xpZnxpbXBsZW1lbnRzfGltcG9ydHN8aW58aW5oZXJpdHN8aW50ZWdlcnxpbnRlcmZhY2V8aXN8bGV0fGxpYnxsaWtlfGxvbmd8bG9vcHxtZXxtb2R8bW9kdWxlfG11c3Rpbmhlcml0fG11c3RvdmVycmlkZXxteWJhc2V8bXljbGFzc3xuYW1lc3BhY2V8bmV3fG5leHR8bm90fG5vdGluaGVyaXRhYmxlfG5vdG92ZXJyaWRhYmxlfG9iamVjdHxvbnxvcHRpb258b3B0aW9uYWx8b3J8b3JlbHNlfG92ZXJsb2Fkc3xvdmVycmlkYWJsZXxvdmVycmlkZXN8cGFyYW1hcnJheXxwcmVzZXJ2ZXxwcml2YXRlfHByb3BlcnR5fHByb3RlY3RlZHxwdWJsaWN8cmFpc2VldmVudHxyZWFkb25seXxyZWRpbXxyZW1vdmVoYW5kbGVyfHJlc3VtZXxyZXR1cm58c2VsZWN0fHNldHxzaGFkb3dzfHNoYXJlZHxzaG9ydHxzaW5nbGV8c3RhdGljfHN0ZXB8c3RvcHxzdHJpbmd8c3RydWN0dXJlfHN1YnxzeW5jbG9ja3x0aGVufHRocm93fHRvfHRyeXx0eXBlb2Z8dW5pY29kZXx1bnRpbHx2YXJpYW50fHdlbmR8d2hlbnx3aGlsZXx3aXRofHdpdGhldmVudHN8d3JpdGVvbmx5fHhvcnxlbmRpZnxnb3N1YnxsZXR8dmFyaWFudHx3ZW5kKVxiL2ksCitudWxsXSxbImNvbSIsL15yZW0uKi9pXSxbImxpdCIsL14oPzp0cnVlXGJ8ZmFsc2VcYnxub3RoaW5nXGJ8XGQrKD86ZVsrLV0/XGQrW2Rmcl0/fFtkZmlscnNdKT98KD86JmhbXGRhLWZdK3wmb1swLTddKylbaWxzXT98XGQqXC5cZCsoPzplWystXT9cZCspP1tkZnJdP3wjXHMrKD86XGQrWy8tXVxkK1svLV1cZCsoPzpccytcZCs6XGQrKD86OlxkKyk/KFxzKig/OmFtfHBtKSk/KT98XGQrOlxkKyg/OjpcZCspPyhccyooPzphbXxwbSkpPylccysjKS9pXSxbInBsbiIsL14oPzooPzpbYS16XXxfXHcpXHcqfFxbKD86W2Etel18X1x3KVx3Kl0pL2ldLFsicHVuIiwvXlteXHdcdFxuXHIgIidbXF1ceGEwXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDI4XHUyMDI5XSsvXSxbInB1biIsL14oPzpcW3xdKS9dXSksWyJ2YiIsInZicyJdKTsKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy12aGRsLmpzIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXZoZGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4YjViNgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy12aGRsLmpzCkBAIC0wLDAgKzEsMyBAQAorUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbWyJwbG4iLC9eW1x0XG5cciBceGEwXSsvLG51bGwsIlx0XG5cciDCXHhhMCJdXSxbWyJzdHIiLC9eKD86W2JveF0/Iig/OlteIl18IiIpKiJ8Jy4nKS9pXSxbImNvbSIsL14tLVteXG5ccl0qL10sWyJrd2QiLC9eKD86YWJzfGFjY2Vzc3xhZnRlcnxhbGlhc3xhbGx8YW5kfGFyY2hpdGVjdHVyZXxhcnJheXxhc3NlcnR8YXR0cmlidXRlfGJlZ2lufGJsb2NrfGJvZHl8YnVmZmVyfGJ1c3xjYXNlfGNvbXBvbmVudHxjb25maWd1cmF0aW9ufGNvbnN0YW50fGRpc2Nvbm5lY3R8ZG93bnRvfGVsc2V8ZWxzaWZ8ZW5kfGVudGl0eXxleGl0fGZpbGV8Zm9yfGZ1bmN0aW9ufGdlbmVyYXRlfGdlbmVyaWN8Z3JvdXB8Z3VhcmRlZHxpZnxpbXB1cmV8aW58aW5lcnRpYWx8aW5vdXR8aXN8bGFiZWx8bGlicmFyeXxsaW5rYWdlfGxpdGVyYWx8bG9vcHxtYXB8bW9kfG5hbmR8bmV3fG5leHR8bm9yfG5vdHxudWxsfG9mfG9ufG9wZW58b3J8b3RoZXJzfG91dHxwYWNrYWdlfHBvcnR8cG9zdHBvbmVkfHByb2NlZHVyZXxwcm9jZXNzfHB1cmV8cmFuZ2V8cmVjb3JkfHJlZ2lzdGVyfHJlamVjdHxyZW18cmVwb3J0fHJldHVybnxyb2x8cm9yfHNlbGVjdHxzZXZlcml0eXxzaGFyZWR8c2lnbmFsfHNsYXxzbGx8c3JhfHNybHxzdWJ0eXBlfHRoZW58dG98dHJhbnNwb3J0fHR5cGV8dW5hZmZlY3RlZHx1bml0c3x1bnRpbHx1c2V8dmFyaWFibGV8d2FpdHx3aGVufHdoaWxlfHdpdGh8eG5vcnx4b3IpKD89W15cdy1dfCQpL2ksCitudWxsXSxbInR5cCIsL14oPzpiaXR8Yml0X3ZlY3RvcnxjaGFyYWN0ZXJ8Ym9vbGVhbnxpbnRlZ2VyfHJlYWx8dGltZXxzdHJpbmd8c2V2ZXJpdHlfbGV2ZWx8cG9zaXRpdmV8bmF0dXJhbHxzaWduZWR8dW5zaWduZWR8bGluZXx0ZXh0fHN0ZF91P2xvZ2ljKD86X3ZlY3Rvcik/KSg/PVteXHctXXwkKS9pLG51bGxdLFsidHlwIiwvXicoPzphY3RpdmV8YXNjZW5kaW5nfGJhc2V8ZGVsYXllZHxkcml2aW5nfGRyaXZpbmdfdmFsdWV8ZXZlbnR8aGlnaHxpbWFnZXxpbnN0YW5jZV9uYW1lfGxhc3RfYWN0aXZlfGxhc3RfZXZlbnR8bGFzdF92YWx1ZXxsZWZ0fGxlZnRvZnxsZW5ndGh8bG93fHBhdGhfbmFtZXxwb3N8cHJlZHxxdWlldHxyYW5nZXxyZXZlcnNlX3JhbmdlfHJpZ2h0fHJpZ2h0b2Z8c2ltcGxlX25hbWV8c3RhYmxlfHN1Y2N8dHJhbnNhY3Rpb258dmFsfHZhbHVlKSg/PVteXHctXXwkKS9pLG51bGxdLFsibGl0IiwvXlxkKyg/Ol9cZCspKig/OiNbXHcuXFxdKyMoPzpbKy1dP1xkKyg/Ol9cZCspKik/fCg/OlwuXGQrKD86X1xkKykqKT8oPzplWystXT9cZCsoPzpfXGQrKSopPykvaV0sCitbInBsbiIsL14oPzpbYS16XVx3KnxcXFteXFxdKlxcKS9pXSxbInB1biIsL15bXlx3XHRcblxyICInXHhhMF1bXlx3XHRcblxyICInXHhhMC1dKi9dXSksWyJ2aGRsIiwidmhkIl0pOwpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXdpa2kuanMgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctd2lraS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjBiNDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXdpa2kuanMKQEAgLTAsMCArMSwyIEBACitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbInBsbiIsL15bXGRcdCBhLWdpLXpceGEwXSsvLG51bGwsIlx0IMJceGEwYWJjZGVmZ2lqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiXSxbInB1biIsL15bKj1bXF1efl0rLyxudWxsLCI9Kn5eW10iXV0sW1sibGFuZy13aWtpLm1ldGEiLC8oPzpeXnxcclxuP3xcbikoI1thLXpdKylcYi9dLFsibGl0IiwvXltBLVpdW2Etel1bXGRhLXpdK1tBLVpdW2Etel1bXlxXX10rXGIvXSxbImxhbmctIiwvXnt7eyhbXFNcc10rPyl9fX0vXSxbImxhbmctIiwvXmAoW15cblxyYF0rKWAvXSxbInN0ciIsL15odHRwcz86XC9cL1teXHMjLz9dKig/OlwvW15ccyM/XSopPyg/Olw/W15ccyNdKik/KD86I1xTKik/L2ldLFsicGxuIiwvXig/OlxyXG58W1xTXHNdKVteXG5cciMqPUEtW15gaHt+XSovXV0pLFsid2lraSJdKTsKK1BSLnJlZ2lzdGVyTGFuZ0hhbmRsZXIoUFIuY3JlYXRlU2ltcGxlTGV4ZXIoW1sia3dkIiwvXiNbYS16XSsvaSxudWxsLCIjIl1dLFtdKSxbIndpa2kubWV0YSJdKTsKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy14cS5qcyBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy14cS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzIzYWUzCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXhxLmpzCkBAIC0wLDAgKzEsMyBAQAorUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbWyJ2YXIgcGxuIiwvXlwkW1x3LV0rLyxudWxsLCIkIl1dLFtbInBsbiIsL15bXHM9XVs8Pl1bXHM9XS9dLFsibGl0IiwvXkBbXHctXSsvXSxbInRhZyIsL148XC8/W2Etel0oPzpbXHctLjpdKlx3KT98XC8/PiQvaV0sWyJjb20iLC9eXCg6W1xTXHNdKj86XCkvXSxbInBsbiIsL15bKCksLztbXF17fV0kL10sWyJzdHIiLC9eKD86Iig/OlteIlxce118XFxbXFNcc10pKig/OiJ8JCl8Jyg/OlteJ1xce118XFxbXFNcc10pKig/Oid8JCkpLyxudWxsLCJcIiciXSxbImt3ZCIsL14oPzp4cXVlcnl8d2hlcmV8dmVyc2lvbnx2YXJpYWJsZXx1bmlvbnx0eXBlc3dpdGNofHRyZWF0fHRvfHRoZW58dGV4dHxzdGFibGV8c29ydGJ5fHNvbWV8c2VsZnxzY2hlbWF8c2F0aXNmaWVzfHJldHVybnN8cmV0dXJufHJlZnxwcm9jZXNzaW5nLWluc3RydWN0aW9ufHByZWNlZGluZy1zaWJsaW5nfHByZWNlZGluZ3xwcmVjZWRlc3xwYXJlbnR8b25seXxvZnxub2RlfG5hbWVzcGFjZXxtb2R1bGV8bGV0fGl0ZW18aW50ZXJzZWN0fGluc3RhbmNlfGlufGltcG9ydHxpZnxmdW5jdGlvbnxmb3J8Zm9sbG93c3xmb2xsb3dpbmctc2libGluZ3xmb2xsb3dpbmd8ZXh0ZXJuYWx8ZXhjZXB0fGV2ZXJ5fGVsc2V8ZWxlbWVudHxkZXNjZW5kaW5nfGRlc2NlbmRhbnQtb3Itc2VsZnxkZXNjZW5kYW50fGRlZmluZXxkZWZhdWx0fGRlY2xhcmV8Y29tbWVudHxjaGlsZHxjYXN0fGNhc2V8YmVmb3JlfGF0dHJpYnV0ZXxhc3NlcnR8YXNjZW5kaW5nfGFzfGFuY2VzdG9yLW9yLXNlbGZ8YW5jZXN0b3J8YWZ0ZXJ8ZXF8b3JkZXJ8Ynl8b3J8YW5kfHNjaGVtYS1lbGVtZW50fGRvY3VtZW50LW5vZGV8bm9kZXxhdClcYi9dLAorWyJ0eXAiLC9eKD86eHM6eWVhck1vbnRoRHVyYXRpb258eHM6dW5zaWduZWRMb25nfHhzOnRpbWV8eHM6c3RyaW5nfHhzOnNob3J0fHhzOlFOYW1lfHhzOk5hbWV8eHM6bG9uZ3x4czppbnRlZ2VyfHhzOmludHx4czpnWWVhck1vbnRofHhzOmdZZWFyfHhzOmdNb250aERheXx4czpnRGF5fHhzOmZsb2F0fHhzOmR1cmF0aW9ufHhzOmRvdWJsZXx4czpkZWNpbWFsfHhzOmRheVRpbWVEdXJhdGlvbnx4czpkYXRlVGltZXx4czpkYXRlfHhzOmJ5dGV8eHM6Ym9vbGVhbnx4czphbnlVUkl8eGY6eWVhck1vbnRoRHVyYXRpb24pXGIvLG51bGxdLFsiZnVuIHBsbiIsL14oPzp4cDpkZXJlZmVyZW5jZXx4aW5jOm5vZGUtZXhwYW5kfHhpbmM6bGluay1yZWZlcmVuY2VzfHhpbmM6bGluay1leHBhbmR8eGh0bWw6cmVzdHJ1Y3R1cmV8eGh0bWw6Y2xlYW58eGh0bWw6YWRkLWxpc3RzfHhkbXA6emlwLW1hbmlmZXN0fHhkbXA6emlwLWdldHx4ZG1wOnppcC1jcmVhdGV8eGRtcDp4cXVlcnktdmVyc2lvbnx4ZG1wOndvcmQtY29udmVydHx4ZG1wOndpdGgtbmFtZXNwYWNlc3x4ZG1wOnZlcnNpb258eGRtcDp2YWx1ZXx4ZG1wOnVzZXItcm9sZXN8eGRtcDp1c2VyLWxhc3QtbG9naW58eGRtcDp1c2VyfHhkbXA6dXJsLWVuY29kZXx4ZG1wOnVybC1kZWNvZGV8eGRtcDp1cmktaXMtZmlsZXx4ZG1wOnVyaS1mb3JtYXR8eGRtcDp1cmktY29udGVudC10eXBlfHhkbXA6dW5xdW90ZXx4ZG1wOnVucGF0aHx4ZG1wOnRyaWdnZXJzLWRhdGFiYXNlfHhkbXA6dHJhY2V8eGRtcDp0by1qc29ufHhkbXA6dGlkeXx4ZG1wOnN1YmJpbmFyeXx4ZG1wOnN0cmZ0aW1lfHhkbXA6c3Bhd24taW58eGRtcDpzcGF3bnx4ZG1wOnNsZWVwfHhkbXA6c2h1dGRvd258eGRtcDpzZXQtc2Vzc2lvbi1maWVsZHx4ZG1wOnNldC1yZXNwb25zZS1lbmNvZGluZ3x4ZG1wOnNldC1yZXNwb25zZS1jb250ZW50LXR5cGV8eGRtcDpzZXQtcmVzcG9uc2UtY29kZXx4ZG1wOnNldC1yZXF1ZXN0LXRpbWUtbGltaXR8eGRtcDpzZXR8eGRtcDpzZXJ2ZXJzfHhkbXA6c2VydmVyLXN0YXR1c3x4ZG1wOnNlcnZlci1uYW1lfHhkbXA6c2VydmVyfHhkbXA6c2VjdXJpdHktZGF0YWJhc2V8eGRtcDpzZWN1cml0eS1hc3NlcnR8eGRtcDpzY2hlbWEtZGF0YWJhc2V8eGRtcDpzYXZlfHhkbXA6cm9sZS1yb2xlc3x4ZG1wOnJvbGV8eGRtcDpyZXRocm93fHhkbXA6cmVzdGFydHx4ZG1wOnJlcXVlc3QtdGltZXN0YW1wfHhkbXA6cmVxdWVzdC1zdGF0dXN8eGRtcDpyZXF1ZXN0LWNhbmNlbHx4ZG1wOnJlcXVlc3R8eGRtcDpyZWRpcmVjdC1yZXNwb25zZXx4ZG1wOnJhbmRvbXx4ZG1wOnF1b3RlfHhkbXA6cXVlcnktdHJhY2V8eGRtcDpxdWVyeS1tZXRlcnN8eGRtcDpwcm9kdWN0LWVkaXRpb258eGRtcDpwcml2aWxlZ2Utcm9sZXN8eGRtcDpwcml2aWxlZ2V8eGRtcDpwcmV0dHktcHJpbnR8eGRtcDpwb3dlcnBvaW50LWNvbnZlcnR8eGRtcDpwbGF0Zm9ybXx4ZG1wOnBlcm1pc3Npb258eGRtcDpwZGYtY29udmVydHx4ZG1wOnBhdGh8eGRtcDpvY3RhbC10by1pbnRlZ2VyfHhkbXA6bm9kZS11cml8eGRtcDpub2RlLXJlcGxhY2V8eGRtcDpub2RlLWtpbmR8eGRtcDpub2RlLWluc2VydC1jaGlsZHx4ZG1wOm5vZGUtaW5zZXJ0LWJlZm9yZXx4ZG1wOm5vZGUtaW5zZXJ0LWFmdGVyfHhkbXA6bm9kZS1kZWxldGV8eGRtcDpub2RlLWRhdGFiYXNlfHhkbXA6bXVsNjR8eGRtcDptb2R1bGVzLXJvb3R8eGRtcDptb2R1bGVzLWRhdGFiYXNlfHhkbXA6bWVyZ2luZ3x4ZG1wOm1lcmdlLWNhbmNlbHx4ZG1wOm1lcmdlfHhkbXA6bWQ1fHhkbXA6bG9nb3V0fHhkbXA6bG9naW58eGRtcDpsb2ctbGV2ZWx8eGRtcDpsb2d8eGRtcDpsb2NrLXJlbGVhc2V8eGRtcDpsb2NrLWFjcXVpcmV8eGRtcDpsb2FkfHhkbXA6aW52b2tlLWlufHhkbXA6aW52b2tlfHhkbXA6aW50ZWdlci10by1vY3RhbHx4ZG1wOmludGVnZXItdG8taGV4fHhkbXA6aHR0cC1wdXR8eGRtcDpodHRwLXBvc3R8eGRtcDpodHRwLW9wdGlvbnN8eGRtcDpodHRwLWhlYWR8eGRtcDpodHRwLWdldHx4ZG1wOmh0dHAtZGVsZXRlfHhkbXA6aG9zdHN8eGRtcDpob3N0LXN0YXR1c3x4ZG1wOmhvc3QtbmFtZXx4ZG1wOmhvc3R8eGRtcDpoZXgtdG8taW50ZWdlcnx4ZG1wOmhhc2g2NHx4ZG1wOmhhc2gzMnx4ZG1wOmhhcy1wcml2aWxlZ2V8eGRtcDpncm91cHN8eGRtcDpncm91cC1zZXJ2ZXN8eGRtcDpncm91cC1zZXJ2ZXJzfHhkbXA6Z3JvdXAtbmFtZXx4ZG1wOmdyb3VwLWhvc3RzfHhkbXA6Z3JvdXB8eGRtcDpnZXQtc2Vzc2lvbi1maWVsZC1uYW1lc3x4ZG1wOmdldC1zZXNzaW9uLWZpZWxkfHhkbXA6Z2V0LXJlc3BvbnNlLWVuY29kaW5nfHhkbXA6Z2V0LXJlc3BvbnNlLWNvZGV8eGRtcDpnZXQtcmVxdWVzdC11c2VybmFtZXx4ZG1wOmdldC1yZXF1ZXN0LXVzZXJ8eGRtcDpnZXQtcmVxdWVzdC11cmx8eGRtcDpnZXQtcmVxdWVzdC1wcm90b2NvbHx4ZG1wOmdldC1yZXF1ZXN0LXBhdGh8eGRtcDpnZXQtcmVxdWVzdC1tZXRob2R8eGRtcDpnZXQtcmVxdWVzdC1oZWFkZXItbmFtZXN8eGRtcDpnZXQtcmVxdWVzdC1oZWFkZXJ8eGRtcDpnZXQtcmVxdWVzdC1maWVsZC1uYW1lc3x4ZG1wOmdldC1yZXF1ZXN0LWZpZWxkLWZpbGVuYW1lfHhkbXA6Z2V0LXJlcXVlc3QtZmllbGQtY29udGVudC10eXBlfHhkbXA6Z2V0LXJlcXVlc3QtZmllbGR8eGRtcDpnZXQtcmVxdWVzdC1jbGllbnQtY2VydGlmaWNhdGV8eGRtcDpnZXQtcmVxdWVzdC1jbGllbnQtYWRkcmVzc3x4ZG1wOmdldC1yZXF1ZXN0LWJvZHl8eGRtcDpnZXQtY3VycmVudC11c2VyfHhkbXA6Z2V0LWN1cnJlbnQtcm9sZXN8eGRtcDpnZXR8eGRtcDpmdW5jdGlvbi1uYW1lfHhkbXA6ZnVuY3Rpb24tbW9kdWxlfHhkbXA6ZnVuY3Rpb258eGRtcDpmcm9tLWpzb258eGRtcDpmb3Jlc3RzfHhkbXA6Zm9yZXN0LXN0YXR1c3x4ZG1wOmZvcmVzdC1yZXN0b3JlfHhkbXA6Zm9yZXN0LXJlc3RhcnR8eGRtcDpmb3Jlc3QtbmFtZXx4ZG1wOmZvcmVzdC1kZWxldGV8eGRtcDpmb3Jlc3QtZGF0YWJhc2VzfHhkbXA6Zm9yZXN0LWNvdW50c3x4ZG1wOmZvcmVzdC1jbGVhcnx4ZG1wOmZvcmVzdC1iYWNrdXB8eGRtcDpmb3Jlc3R8eGRtcDpmaWxlc3lzdGVtLWZpbGV8eGRtcDpmaWxlc3lzdGVtLWRpcmVjdG9yeXx4ZG1wOmV4aXN0c3x4ZG1wOmV4Y2VsLWNvbnZlcnR8eGRtcDpldmFsLWlufHhkbXA6ZXZhbHx4ZG1wOmVzdGltYXRlfHhkbXA6ZW1haWx8eGRtcDplbGVtZW50LWNvbnRlbnQtdHlwZXx4ZG1wOmVsYXBzZWQtdGltZXx4ZG1wOmRvY3VtZW50LXNldC1xdWFsaXR5fHhkbXA6ZG9jdW1lbnQtc2V0LXByb3BlcnR5fHhkbXA6ZG9jdW1lbnQtc2V0LXByb3BlcnRpZXN8eGRtcDpkb2N1bWVudC1zZXQtcGVybWlzc2lvbnN8eGRtcDpkb2N1bWVudC1zZXQtY29sbGVjdGlvbnN8eGRtcDpkb2N1bWVudC1yZW1vdmUtcHJvcGVydGllc3x4ZG1wOmRvY3VtZW50LXJlbW92ZS1wZXJtaXNzaW9uc3x4ZG1wOmRvY3VtZW50LXJlbW92ZS1jb2xsZWN0aW9uc3x4ZG1wOmRvY3VtZW50LXByb3BlcnRpZXN8eGRtcDpkb2N1bWVudC1sb2Nrc3x4ZG1wOmRvY3VtZW50LWxvYWR8eGRtcDpkb2N1bWVudC1pbnNlcnR8eGRtcDpkb2N1bWVudC1nZXQtcXVhbGl0eXx4ZG1wOmRvY3VtZW50LWdldC1wcm9wZXJ0aWVzfHhkbXA6ZG9jdW1lbnQtZ2V0LXBlcm1pc3Npb25zfHhkbXA6ZG9jdW1lbnQtZ2V0LWNvbGxlY3Rpb25zfHhkbXA6ZG9jdW1lbnQtZ2V0fHhkbXA6ZG9jdW1lbnQtZm9yZXN0fHhkbXA6ZG9jdW1lbnQtZGVsZXRlfHhkbXA6ZG9jdW1lbnQtYWRkLXByb3BlcnRpZXN8eGRtcDpkb2N1bWVudC1hZGQtcGVybWlzc2lvbnN8eGRtcDpkb2N1bWVudC1hZGQtY29sbGVjdGlvbnN8eGRtcDpkaXJlY3RvcnktcHJvcGVydGllc3x4ZG1wOmRpcmVjdG9yeS1sb2Nrc3x4ZG1wOmRpcmVjdG9yeS1kZWxldGV8eGRtcDpkaXJlY3RvcnktY3JlYXRlfHhkbXA6ZGlyZWN0b3J5fHhkbXA6ZGlhY3JpdGljLWxlc3N8eGRtcDpkZXNjcmliZXx4ZG1wOmRlZmF1bHQtcGVybWlzc2lvbnN8eGRtcDpkZWZhdWx0LWNvbGxlY3Rpb25zfHhkbXA6ZGF0YWJhc2VzfHhkbXA6ZGF0YWJhc2UtcmVzdG9yZS12YWxpZGF0ZXx4ZG1wOmRhdGFiYXNlLXJlc3RvcmUtc3RhdHVzfHhkbXA6ZGF0YWJhc2UtcmVzdG9yZS1jYW5jZWx8eGRtcDpkYXRhYmFzZS1yZXN0b3JlfHhkbXA6ZGF0YWJhc2UtbmFtZXx4ZG1wOmRhdGFiYXNlLWZvcmVzdHN8eGRtcDpkYXRhYmFzZS1iYWNrdXAtdmFsaWRhdGV8eGRtcDpkYXRhYmFzZS1iYWNrdXAtc3RhdHVzfHhkbXA6ZGF0YWJhc2UtYmFja3VwLXB1cmdlfHhkbXA6ZGF0YWJhc2UtYmFja3VwLWNhbmNlbHx4ZG1wOmRhdGFiYXNlLWJhY2t1cHx4ZG1wOmRhdGFiYXNlfHhkbXA6Y29sbGVjdGlvbi1wcm9wZXJ0aWVzfHhkbXA6Y29sbGVjdGlvbi1sb2Nrc3x4ZG1wOmNvbGxlY3Rpb24tZGVsZXRlfHhkbXA6Y29sbGF0aW9uLWNhbm9uaWNhbC11cml8eGRtcDpjYXN0YWJsZS1hc3x4ZG1wOmNhbi1ncmFudC1yb2xlc3x4ZG1wOmJhc2U2NC1lbmNvZGV8eGRtcDpiYXNlNjQtZGVjb2RlfHhkbXA6YXJjaGl0ZWN0dXJlfHhkbXA6YXBwbHl8eGRtcDphbXAtcm9sZXN8eGRtcDphbXB8eGRtcDphZGQ2NHx4ZG1wOmFkZC1yZXNwb25zZS1oZWFkZXJ8eGRtcDphY2Nlc3N8dHJncjp0cmlnZ2VyLXNldC1yZWN1cnNpdmV8dHJncjp0cmlnZ2VyLXNldC1wZXJtaXNzaW9uc3x0cmdyOnRyaWdnZXItc2V0LW5hbWV8dHJncjp0cmlnZ2VyLXNldC1tb2R1bGV8dHJncjp0cmlnZ2VyLXNldC1ldmVudHx0cmdyOnRyaWdnZXItc2V0LWRlc2NyaXB0aW9ufHRyZ3I6dHJpZ2dlci1yZW1vdmUtcGVybWlzc2lvbnN8dHJncjp0cmlnZ2VyLW1vZHVsZXx0cmdyOnRyaWdnZXItZ2V0LXBlcm1pc3Npb25zfHRyZ3I6dHJpZ2dlci1lbmFibGV8dHJncjp0cmlnZ2VyLWRpc2FibGV8dHJncjp0cmlnZ2VyLWRhdGFiYXNlLW9ubGluZS1ldmVudHx0cmdyOnRyaWdnZXItZGF0YS1ldmVudHx0cmdyOnRyaWdnZXItYWRkLXBlcm1pc3Npb25zfHRyZ3I6cmVtb3ZlLXRyaWdnZXJ8dHJncjpwcm9wZXJ0eS1jb250ZW50fHRyZ3I6cHJlLWNvbW1pdHx0cmdyOnBvc3QtY29tbWl0fHRyZ3I6Z2V0LXRyaWdnZXItYnktaWR8dHJncjpnZXQtdHJpZ2dlcnx0cmdyOmRvY3VtZW50LXNjb3BlfHRyZ3I6ZG9jdW1lbnQtY29udGVudHx0cmdyOmRpcmVjdG9yeS1zY29wZXx0cmdyOmNyZWF0ZS10cmlnZ2VyfHRyZ3I6Y29sbGVjdGlvbi1zY29wZXx0cmdyOmFueS1wcm9wZXJ0eS1jb250ZW50fHRoc3I6c2V0LWVudHJ5fHRoc3I6cmVtb3ZlLXRlcm18dGhzcjpyZW1vdmUtc3lub255bXx0aHNyOnJlbW92ZS1lbnRyeXx0aHNyOnF1ZXJ5LWxvb2t1cHx0aHNyOmxvb2t1cHx0aHNyOmxvYWR8dGhzcjppbnNlcnR8dGhzcjpleHBhbmR8dGhzcjphZGQtc3lub255bXxzcGVsbDpzdWdnZXN0LWRldGFpbGVkfHNwZWxsOnN1Z2dlc3R8c3BlbGw6cmVtb3ZlLXdvcmR8c3BlbGw6bWFrZS1kaWN0aW9uYXJ5fHNwZWxsOmxvYWR8c3BlbGw6bGV2ZW5zaHRlaW4tZGlzdGFuY2V8c3BlbGw6aXMtY29ycmVjdHxzcGVsbDppbnNlcnR8c3BlbGw6ZG91YmxlLW1ldGFwaG9uZXxzcGVsbDphZGQtd29yZHxzZWM6dXNlcnMtY29sbGVjdGlvbnxzZWM6dXNlci1zZXQtcm9sZXN8c2VjOnVzZXItc2V0LXBhc3N3b3JkfHNlYzp1c2VyLXNldC1uYW1lfHNlYzp1c2VyLXNldC1kZXNjcmlwdGlvbnxzZWM6dXNlci1zZXQtZGVmYXVsdC1wZXJtaXNzaW9uc3xzZWM6dXNlci1zZXQtZGVmYXVsdC1jb2xsZWN0aW9uc3xzZWM6dXNlci1yZW1vdmUtcm9sZXN8c2VjOnVzZXItcHJpdmlsZWdlc3xzZWM6dXNlci1nZXQtcm9sZXN8c2VjOnVzZXItZ2V0LWRlc2NyaXB0aW9ufHNlYzp1c2VyLWdldC1kZWZhdWx0LXBlcm1pc3Npb25zfHNlYzp1c2VyLWdldC1kZWZhdWx0LWNvbGxlY3Rpb25zfHNlYzp1c2VyLWRvYy1wZXJtaXNzaW9uc3xzZWM6dXNlci1kb2MtY29sbGVjdGlvbnN8c2VjOnVzZXItYWRkLXJvbGVzfHNlYzp1bnByb3RlY3QtY29sbGVjdGlvbnxzZWM6dWlkLWZvci1uYW1lfHNlYzpzZXQtcmVhbG18c2VjOnNlY3VyaXR5LXZlcnNpb258c2VjOnNlY3VyaXR5LW5hbWVzcGFjZXxzZWM6c2VjdXJpdHktaW5zdGFsbGVkfHNlYzpzZWN1cml0eS1jb2xsZWN0aW9ufHNlYzpyb2xlcy1jb2xsZWN0aW9ufHNlYzpyb2xlLXNldC1yb2xlc3xzZWM6cm9sZS1zZXQtbmFtZXxzZWM6cm9sZS1zZXQtZGVzY3JpcHRpb258c2VjOnJvbGUtc2V0LWRlZmF1bHQtcGVybWlzc2lvbnN8c2VjOnJvbGUtc2V0LWRlZmF1bHQtY29sbGVjdGlvbnN8c2VjOnJvbGUtcmVtb3ZlLXJvbGVzfHNlYzpyb2xlLXByaXZpbGVnZXN8c2VjOnJvbGUtZ2V0LXJvbGVzfHNlYzpyb2xlLWdldC1kZXNjcmlwdGlvbnxzZWM6cm9sZS1nZXQtZGVmYXVsdC1wZXJtaXNzaW9uc3xzZWM6cm9sZS1nZXQtZGVmYXVsdC1jb2xsZWN0aW9uc3xzZWM6cm9sZS1kb2MtcGVybWlzc2lvbnN8c2VjOnJvbGUtZG9jLWNvbGxlY3Rpb25zfHNlYzpyb2xlLWFkZC1yb2xlc3xzZWM6cmVtb3ZlLXVzZXJ8c2VjOnJlbW92ZS1yb2xlLWZyb20tdXNlcnN8c2VjOnJlbW92ZS1yb2xlLWZyb20tcm9sZXxzZWM6cmVtb3ZlLXJvbGUtZnJvbS1wcml2aWxlZ2VzfHNlYzpyZW1vdmUtcm9sZS1mcm9tLWFtcHN8c2VjOnJlbW92ZS1yb2xlfHNlYzpyZW1vdmUtcHJpdmlsZWdlfHNlYzpyZW1vdmUtYW1wfHNlYzpwcm90ZWN0LWNvbGxlY3Rpb258c2VjOnByaXZpbGVnZXMtY29sbGVjdGlvbnxzZWM6cHJpdmlsZWdlLXNldC1yb2xlc3xzZWM6cHJpdmlsZWdlLXNldC1uYW1lfHNlYzpwcml2aWxlZ2UtcmVtb3ZlLXJvbGVzfHNlYzpwcml2aWxlZ2UtZ2V0LXJvbGVzfHNlYzpwcml2aWxlZ2UtYWRkLXJvbGVzfHNlYzpwcml2LWRvYy1wZXJtaXNzaW9uc3xzZWM6cHJpdi1kb2MtY29sbGVjdGlvbnN8c2VjOmdldC11c2VyLW5hbWVzfHNlYzpnZXQtdW5pcXVlLWVsZW0taWR8c2VjOmdldC1yb2xlLW5hbWVzfHNlYzpnZXQtcm9sZS1pZHN8c2VjOmdldC1wcml2aWxlZ2V8c2VjOmdldC1kaXN0aW5jdC1wZXJtaXNzaW9uc3xzZWM6Z2V0LWNvbGxlY3Rpb258c2VjOmdldC1hbXB8c2VjOmNyZWF0ZS11c2VyLXdpdGgtcm9sZXxzZWM6Y3JlYXRlLXVzZXJ8c2VjOmNyZWF0ZS1yb2xlfHNlYzpjcmVhdGUtcHJpdmlsZWdlfHNlYzpjcmVhdGUtYW1wfHNlYzpjb2xsZWN0aW9ucy1jb2xsZWN0aW9ufHNlYzpjb2xsZWN0aW9uLXNldC1wZXJtaXNzaW9uc3xzZWM6Y29sbGVjdGlvbi1yZW1vdmUtcGVybWlzc2lvbnN8c2VjOmNvbGxlY3Rpb24tZ2V0LXBlcm1pc3Npb25zfHNlYzpjb2xsZWN0aW9uLWFkZC1wZXJtaXNzaW9uc3xzZWM6Y2hlY2stYWRtaW58c2VjOmFtcHMtY29sbGVjdGlvbnxzZWM6YW1wLXNldC1yb2xlc3xzZWM6YW1wLXJlbW92ZS1yb2xlc3xzZWM6YW1wLWdldC1yb2xlc3xzZWM6YW1wLWRvYy1wZXJtaXNzaW9uc3xzZWM6YW1wLWRvYy1jb2xsZWN0aW9uc3xzZWM6YW1wLWFkZC1yb2xlc3xzZWFyY2g6dW5wYXJzZXxzZWFyY2g6c3VnZ2VzdHxzZWFyY2g6c25pcHBldHxzZWFyY2g6c2VhcmNofHNlYXJjaDpyZXNvbHZlLW5vZGVzfHNlYXJjaDpyZXNvbHZlfHNlYXJjaDpyZW1vdmUtY29uc3RyYWludHxzZWFyY2g6cGFyc2V8c2VhcmNoOmdldC1kZWZhdWx0LW9wdGlvbnN8c2VhcmNoOmVzdGltYXRlfHNlYXJjaDpjaGVjay1vcHRpb25zfHByb2Y6dmFsdWV8cHJvZjpyZXNldHxwcm9mOnJlcG9ydHxwcm9mOmludm9rZXxwcm9mOmV2YWx8cHJvZjplbmFibGV8cHJvZjpkaXNhYmxlfHByb2Y6YWxsb3dlZHxwcHQ6Y2xlYW58cGtpOnRlbXBsYXRlLXNldC1yZXF1ZXN0fHBraTp0ZW1wbGF0ZS1zZXQtbmFtZXxwa2k6dGVtcGxhdGUtc2V0LWtleS10eXBlfHBraTp0ZW1wbGF0ZS1zZXQta2V5LW9wdGlvbnN8cGtpOnRlbXBsYXRlLXNldC1kZXNjcmlwdGlvbnxwa2k6dGVtcGxhdGUtaW4tdXNlfHBraTp0ZW1wbGF0ZS1nZXQtdmVyc2lvbnxwa2k6dGVtcGxhdGUtZ2V0LXJlcXVlc3R8cGtpOnRlbXBsYXRlLWdldC1uYW1lfHBraTp0ZW1wbGF0ZS1nZXQta2V5LXR5cGV8cGtpOnRlbXBsYXRlLWdldC1rZXktb3B0aW9uc3xwa2k6dGVtcGxhdGUtZ2V0LWlkfHBraTp0ZW1wbGF0ZS1nZXQtZGVzY3JpcHRpb258cGtpOm5lZWQtY2VydGlmaWNhdGV8cGtpOmlzLXRlbXBvcmFyeXxwa2k6aW5zZXJ0LXRydXN0ZWQtY2VydGlmaWNhdGVzfHBraTppbnNlcnQtdGVtcGxhdGV8cGtpOmluc2VydC1zaWduZWQtY2VydGlmaWNhdGVzfHBraTppbnNlcnQtY2VydGlmaWNhdGUtcmV2b2NhdGlvbi1saXN0fHBraTpnZXQtdHJ1c3RlZC1jZXJ0aWZpY2F0ZS1pZHN8cGtpOmdldC10ZW1wbGF0ZS1pZHN8cGtpOmdldC10ZW1wbGF0ZS1jZXJ0aWZpY2F0ZS1hdXRob3JpdHl8cGtpOmdldC10ZW1wbGF0ZS1ieS1uYW1lfHBraTpnZXQtdGVtcGxhdGV8cGtpOmdldC1wZW5kaW5nLWNlcnRpZmljYXRlLXJlcXVlc3RzLXhtbHxwa2k6Z2V0LXBlbmRpbmctY2VydGlmaWNhdGUtcmVxdWVzdHMtcGVtfHBraTpnZXQtcGVuZGluZy1jZXJ0aWZpY2F0ZS1yZXF1ZXN0fHBraTpnZXQtY2VydGlmaWNhdGVzLWZvci10ZW1wbGF0ZS14bWx8cGtpOmdldC1jZXJ0aWZpY2F0ZXMtZm9yLXRlbXBsYXRlfHBraTpnZXQtY2VydGlmaWNhdGVzfHBraTpnZXQtY2VydGlmaWNhdGUteG1sfHBraTpnZXQtY2VydGlmaWNhdGUtcGVtfHBraTpnZXQtY2VydGlmaWNhdGV8cGtpOmdlbmVyYXRlLXRlbXBvcmFyeS1jZXJ0aWZpY2F0ZS1pZi1uZWNlc3Nhcnl8cGtpOmdlbmVyYXRlLXRlbXBvcmFyeS1jZXJ0aWZpY2F0ZXxwa2k6Z2VuZXJhdGUtdGVtcGxhdGUtY2VydGlmaWNhdGUtYXV0aG9yaXR5fHBraTpnZW5lcmF0ZS1jZXJ0aWZpY2F0ZS1yZXF1ZXN0fHBraTpkZWxldGUtdGVtcGxhdGV8cGtpOmRlbGV0ZS1jZXJ0aWZpY2F0ZXxwa2k6Y3JlYXRlLXRlbXBsYXRlfHBkZjptYWtlLXRvY3xwZGY6aW5zZXJ0LXRvYy1oZWFkZXJzfHBkZjpnZXQtdG9jfHBkZjpjbGVhbnxwOnN0YXR1cy10cmFuc2l0aW9ufHA6c3RhdGUtdHJhbnNpdGlvbnxwOnJlbW92ZXxwOnBpcGVsaW5lc3xwOmluc2VydHxwOmdldC1ieS1pZHxwOmdldHxwOmV4ZWN1dGV8cDpjcmVhdGV8cDpjb25kaXRpb258cDpjb2xsZWN0aW9ufHA6YWN0aW9ufG9veG1sOnJ1bnMtbWVyZ2V8b294bWw6cGFja2FnZS11cmlzfG9veG1sOnBhY2thZ2UtcGFydHMtaW5zZXJ0fG9veG1sOnBhY2thZ2UtcGFydHN8bXN3b3JkOmNsZWFufG1jZ206cG9seWdvbnxtY2dtOnBvaW50fG1jZ206Z2Vvc3BhdGlhbC1xdWVyeS1mcm9tLWVsZW1lbnRzfG1jZ206Z2Vvc3BhdGlhbC1xdWVyeXxtY2dtOmNpcmNsZXxtYXRoOnRhbmh8bWF0aDp0YW58bWF0aDpzcXJ0fG1hdGg6c2luaHxtYXRoOnNpbnxtYXRoOnBvd3xtYXRoOm1vZGZ8bWF0aDpsb2cxMHxtYXRoOmxvZ3xtYXRoOmxkZXhwfG1hdGg6ZnJleHB8bWF0aDpmbW9kfG1hdGg6Zmxvb3J8bWF0aDpmYWJzfG1hdGg6ZXhwfG1hdGg6Y29zaHxtYXRoOmNvc3xtYXRoOmNlaWx8bWF0aDphdGFuMnxtYXRoOmF0YW58bWF0aDphc2lufG1hdGg6YWNvc3xtYXA6cHV0fG1hcDptYXB8bWFwOmtleXN8bWFwOmdldHxtYXA6ZGVsZXRlfG1hcDpjb3VudHxtYXA6Y2xlYXJ8bG5rOnRvfGxuazpyZW1vdmV8bG5rOmluc2VydHxsbms6Z2V0fGxuazpmcm9tfGxuazpjcmVhdGV8a21sOnBvbHlnb258a21sOnBvaW50fGttbDppbnRlcmlvci1wb2x5Z29ufGttbDpnZW9zcGF0aWFsLXF1ZXJ5LWZyb20tZWxlbWVudHN8a21sOmdlb3NwYXRpYWwtcXVlcnl8a21sOmNpcmNsZXxrbWw6Ym94fGdtbDpwb2x5Z29ufGdtbDpwb2ludHxnbWw6aW50ZXJpb3ItcG9seWdvbnxnbWw6Z2Vvc3BhdGlhbC1xdWVyeS1mcm9tLWVsZW1lbnRzfGdtbDpnZW9zcGF0aWFsLXF1ZXJ5fGdtbDpjaXJjbGV8Z21sOmJveHxnZW9yc3M6cG9pbnR8Z2VvcnNzOmdlb3NwYXRpYWwtcXVlcnl8Z2VvcnNzOmNpcmNsZXxnZW86cG9seWdvbnxnZW86cG9pbnR8Z2VvOmludGVyaW9yLXBvbHlnb258Z2VvOmdlb3NwYXRpYWwtcXVlcnktZnJvbS1lbGVtZW50c3xnZW86Z2Vvc3BhdGlhbC1xdWVyeXxnZW86Y2lyY2xlfGdlbzpib3h8Zm46emVyby1vci1vbmV8Zm46eWVhcnMtZnJvbS1kdXJhdGlvbnxmbjp5ZWFyLWZyb20tZGF0ZVRpbWV8Zm46eWVhci1mcm9tLWRhdGV8Zm46dXBwZXItY2FzZXxmbjp1bm9yZGVyZWR8Zm46dHJ1ZXxmbjp0cmFuc2xhdGV8Zm46dHJhY2V8Zm46dG9rZW5pemV8Zm46dGltZXpvbmUtZnJvbS10aW1lfGZuOnRpbWV6b25lLWZyb20tZGF0ZVRpbWV8Zm46dGltZXpvbmUtZnJvbS1kYXRlfGZuOnN1bXxmbjpzdWJ0cmFjdC1kYXRlVGltZXMteWllbGRpbmcteWVhck1vbnRoRHVyYXRpb258Zm46c3VidHJhY3QtZGF0ZVRpbWVzLXlpZWxkaW5nLWRheVRpbWVEdXJhdGlvbnxmbjpzdWJzdHJpbmctYmVmb3JlfGZuOnN1YnN0cmluZy1hZnRlcnxmbjpzdWJzdHJpbmd8Zm46c3Vic2VxdWVuY2V8Zm46c3RyaW5nLXRvLWNvZGVwb2ludHN8Zm46c3RyaW5nLXBhZHxmbjpzdHJpbmctbGVuZ3RofGZuOnN0cmluZy1qb2lufGZuOnN0cmluZ3xmbjpzdGF0aWMtYmFzZS11cml8Zm46c3RhcnRzLXdpdGh8Zm46c2Vjb25kcy1mcm9tLXRpbWV8Zm46c2Vjb25kcy1mcm9tLWR1cmF0aW9ufGZuOnNlY29uZHMtZnJvbS1kYXRlVGltZXxmbjpyb3VuZC1oYWxmLXRvLWV2ZW58Zm46cm91bmR8Zm46cm9vdHxmbjpyZXZlcnNlfGZuOnJlc29sdmUtdXJpfGZuOnJlc29sdmUtUU5hbWV8Zm46cmVwbGFjZXxmbjpyZW1vdmV8Zm46UU5hbWV8Zm46cHJlZml4LWZyb20tUU5hbWV8Zm46cG9zaXRpb258Zm46b25lLW9yLW1vcmV8Zm46bnVtYmVyfGZuOm5vdHxmbjpub3JtYWxpemUtdW5pY29kZXxmbjpub3JtYWxpemUtc3BhY2V8Zm46bm9kZS1uYW1lfGZuOm5vZGUta2luZHxmbjpuaWxsZWR8Zm46bmFtZXNwYWNlLXVyaS1mcm9tLVFOYW1lfGZuOm5hbWVzcGFjZS11cmktZm9yLXByZWZpeHxmbjpuYW1lc3BhY2UtdXJpfGZuOm5hbWV8Zm46bW9udGhzLWZyb20tZHVyYXRpb258Zm46bW9udGgtZnJvbS1kYXRlVGltZXxmbjptb250aC1mcm9tLWRhdGV8Zm46bWludXRlcy1mcm9tLXRpbWV8Zm46bWludXRlcy1mcm9tLWR1cmF0aW9ufGZuOm1pbnV0ZXMtZnJvbS1kYXRlVGltZXxmbjptaW58Zm46bWF4fGZuOm1hdGNoZXN8Zm46bG93ZXItY2FzZXxmbjpsb2NhbC1uYW1lLWZyb20tUU5hbWV8Zm46bG9jYWwtbmFtZXxmbjpsYXN0fGZuOmxhbmd8Zm46aXJpLXRvLXVyaXxmbjppbnNlcnQtYmVmb3JlfGZuOmluZGV4LW9mfGZuOmluLXNjb3BlLXByZWZpeGVzfGZuOmltcGxpY2l0LXRpbWV6b25lfGZuOmlkcmVmfGZuOmlkfGZuOmhvdXJzLWZyb20tdGltZXxmbjpob3Vycy1mcm9tLWR1cmF0aW9ufGZuOmhvdXJzLWZyb20tZGF0ZVRpbWV8Zm46Zmxvb3J8Zm46ZmFsc2V8Zm46ZXhwYW5kZWQtUU5hbWV8Zm46ZXhpc3RzfGZuOmV4YWN0bHktb25lfGZuOmVzY2FwZS11cml8Zm46ZXNjYXBlLWh0bWwtdXJpfGZuOmVycm9yfGZuOmVuZHMtd2l0aHxmbjplbmNvZGUtZm9yLXVyaXxmbjplbXB0eXxmbjpkb2N1bWVudC11cml8Zm46ZG9jLWF2YWlsYWJsZXxmbjpkb2N8Zm46ZGlzdGluY3QtdmFsdWVzfGZuOmRpc3RpbmN0LW5vZGVzfGZuOmRlZmF1bHQtY29sbGF0aW9ufGZuOmRlZXAtZXF1YWx8Zm46ZGF5cy1mcm9tLWR1cmF0aW9ufGZuOmRheS1mcm9tLWRhdGVUaW1lfGZuOmRheS1mcm9tLWRhdGV8Zm46ZGF0YXxmbjpjdXJyZW50LXRpbWV8Zm46Y3VycmVudC1kYXRlVGltZXxmbjpjdXJyZW50LWRhdGV8Zm46Y291bnR8Zm46Y29udGFpbnN8Zm46Y29uY2F0fGZuOmNvbXBhcmV8Zm46Y29sbGVjdGlvbnxmbjpjb2RlcG9pbnRzLXRvLXN0cmluZ3xmbjpjb2RlcG9pbnQtZXF1YWx8Zm46Y2VpbGluZ3xmbjpib29sZWFufGZuOmJhc2UtdXJpfGZuOmF2Z3xmbjphZGp1c3QtdGltZS10by10aW1lem9uZXxmbjphZGp1c3QtZGF0ZVRpbWUtdG8tdGltZXpvbmV8Zm46YWRqdXN0LWRhdGUtdG8tdGltZXpvbmV8Zm46YWJzfGZlZWQ6dW5zdWJzY3JpYmV8ZmVlZDpzdWJzY3JpcHRpb258ZmVlZDpzdWJzY3JpYmV8ZmVlZDpyZXF1ZXN0fGZlZWQ6aXRlbXxmZWVkOmRlc2NyaXB0aW9ufGV4Y2VsOmNsZWFufGVudGl0eTplbnJpY2h8ZG9tOnNldC1waXBlbGluZXN8ZG9tOnNldC1wZXJtaXNzaW9uc3xkb206c2V0LW5hbWV8ZG9tOnNldC1ldmFsdWF0aW9uLWNvbnRleHR8ZG9tOnNldC1kb21haW4tc2NvcGV8ZG9tOnNldC1kZXNjcmlwdGlvbnxkb206cmVtb3ZlLXBpcGVsaW5lfGRvbTpyZW1vdmUtcGVybWlzc2lvbnN8ZG9tOnJlbW92ZXxkb206Z2V0fGRvbTpldmFsdWF0aW9uLWNvbnRleHR8ZG9tOmRvbWFpbnN8ZG9tOmRvbWFpbi1zY29wZXxkb206Y3JlYXRlfGRvbTpjb25maWd1cmF0aW9uLXNldC1yZXN0YXJ0LXVzZXJ8ZG9tOmNvbmZpZ3VyYXRpb24tc2V0LXBlcm1pc3Npb25zfGRvbTpjb25maWd1cmF0aW9uLXNldC1ldmFsdWF0aW9uLWNvbnRleHR8ZG9tOmNvbmZpZ3VyYXRpb24tc2V0LWRlZmF1bHQtZG9tYWlufGRvbTpjb25maWd1cmF0aW9uLWdldHxkb206Y29uZmlndXJhdGlvbi1jcmVhdGV8ZG9tOmNvbGxlY3Rpb258ZG9tOmFkZC1waXBlbGluZXxkb206YWRkLXBlcm1pc3Npb25zfGRsczpyZXRlbnRpb24tcnVsZXN8ZGxzOnJldGVudGlvbi1ydWxlLXJlbW92ZXxkbHM6cmV0ZW50aW9uLXJ1bGUtaW5zZXJ0fGRsczpyZXRlbnRpb24tcnVsZXxkbHM6cHVyZ2V8ZGxzOm5vZGUtZXhwYW5kfGRsczpsaW5rLXJlZmVyZW5jZXN8ZGxzOmxpbmstZXhwYW5kfGRsczpkb2N1bWVudHMtcXVlcnl8ZGxzOmRvY3VtZW50LXZlcnNpb25zLXF1ZXJ5fGRsczpkb2N1bWVudC12ZXJzaW9uLXVyaXxkbHM6ZG9jdW1lbnQtdmVyc2lvbi1xdWVyeXxkbHM6ZG9jdW1lbnQtdmVyc2lvbi1kZWxldGV8ZGxzOmRvY3VtZW50LXZlcnNpb24tYXMtb2Z8ZGxzOmRvY3VtZW50LXZlcnNpb258ZGxzOmRvY3VtZW50LXVwZGF0ZXxkbHM6ZG9jdW1lbnQtdW5tYW5hZ2V8ZGxzOmRvY3VtZW50LXNldC1xdWFsaXR5fGRsczpkb2N1bWVudC1zZXQtcHJvcGVydHl8ZGxzOmRvY3VtZW50LXNldC1wcm9wZXJ0aWVzfGRsczpkb2N1bWVudC1zZXQtcGVybWlzc2lvbnN8ZGxzOmRvY3VtZW50LXNldC1jb2xsZWN0aW9uc3xkbHM6ZG9jdW1lbnQtcmV0ZW50aW9uLXJ1bGVzfGRsczpkb2N1bWVudC1yZW1vdmUtcHJvcGVydGllc3xkbHM6ZG9jdW1lbnQtcmVtb3ZlLXBlcm1pc3Npb25zfGRsczpkb2N1bWVudC1yZW1vdmUtY29sbGVjdGlvbnN8ZGxzOmRvY3VtZW50LXB1cmdlfGRsczpkb2N1bWVudC1tYW5hZ2V8ZGxzOmRvY3VtZW50LWlzLW1hbmFnZWR8ZGxzOmRvY3VtZW50LWluc2VydC1hbmQtbWFuYWdlfGRsczpkb2N1bWVudC1pbmNsdWRlLXF1ZXJ5fGRsczpkb2N1bWVudC1oaXN0b3J5fGRsczpkb2N1bWVudC1nZXQtcGVybWlzc2lvbnN8ZGxzOmRvY3VtZW50LWV4dHJhY3QtcGFydHxkbHM6ZG9jdW1lbnQtZGVsZXRlfGRsczpkb2N1bWVudC1jaGVja291dC1zdGF0dXN8ZGxzOmRvY3VtZW50LWNoZWNrb3V0fGRsczpkb2N1bWVudC1jaGVja2lufGRsczpkb2N1bWVudC1hZGQtcHJvcGVydGllc3xkbHM6ZG9jdW1lbnQtYWRkLXBlcm1pc3Npb25zfGRsczpkb2N1bWVudC1hZGQtY29sbGVjdGlvbnN8ZGxzOmJyZWFrLWNoZWNrb3V0fGRsczphdXRob3ItcXVlcnl8ZGxzOmFzLW9mLXF1ZXJ5fGRiazpjb252ZXJ0fGRiZzp3YWl0fGRiZzp2YWx1ZXxkYmc6c3RvcHBlZHxkYmc6c3RvcHxkYmc6c3RlcHxkYmc6c3RhdHVzfGRiZzpzdGFja3xkYmc6b3V0fGRiZzpuZXh0fGRiZzpsaW5lfGRiZzppbnZva2V8ZGJnOmZ1bmN0aW9ufGRiZzpmaW5pc2h8ZGJnOmV4cHJ8ZGJnOmV2YWx8ZGJnOmRpc2Nvbm5lY3R8ZGJnOmRldGFjaHxkYmc6Y29udGludWV8ZGJnOmNvbm5lY3R8ZGJnOmNsZWFyfGRiZzpicmVha3BvaW50c3xkYmc6YnJlYWt8ZGJnOmF0dGFjaGVkfGRiZzphdHRhY2h8Y3Z0OnNhdmUtY29udmVydGVkLWRvY3VtZW50c3xjdnQ6cGFydC11cml8Y3Z0OmRlc3RpbmF0aW9uLXVyaXxjdnQ6YmFzZXBhdGh8Y3Z0OmJhc2VuYW1lfGN0czp3b3Jkc3xjdHM6d29yZC1xdWVyeS13ZWlnaHR8Y3RzOndvcmQtcXVlcnktdGV4dHxjdHM6d29yZC1xdWVyeS1vcHRpb25zfGN0czp3b3JkLXF1ZXJ5fGN0czp3b3JkLW1hdGNofGN0czp3YWxrfGN0czp1cmlzfGN0czp1cmktbWF0Y2h8Y3RzOnRyYWlufGN0czp0b2tlbml6ZXxjdHM6dGhyZXNob2xkc3xjdHM6c3RlbXxjdHM6c2ltaWxhci1xdWVyeS13ZWlnaHR8Y3RzOnNpbWlsYXItcXVlcnktbm9kZXN8Y3RzOnNpbWlsYXItcXVlcnl8Y3RzOnNob3J0ZXN0LWRpc3RhbmNlfGN0czpzZWFyY2h8Y3RzOnNjb3JlfGN0czpyZXZlcnNlLXF1ZXJ5LXdlaWdodHxjdHM6cmV2ZXJzZS1xdWVyeS1ub2Rlc3xjdHM6cmV2ZXJzZS1xdWVyeXxjdHM6cmVtYWluZGVyfGN0czpyZWdpc3RlcmVkLXF1ZXJ5LXdlaWdodHxjdHM6cmVnaXN0ZXJlZC1xdWVyeS1vcHRpb25zfGN0czpyZWdpc3RlcmVkLXF1ZXJ5LWlkc3xjdHM6cmVnaXN0ZXJlZC1xdWVyeXxjdHM6cmVnaXN0ZXJ8Y3RzOnF1ZXJ5fGN0czpxdWFsaXR5fGN0czpwcm9wZXJ0aWVzLXF1ZXJ5LXF1ZXJ5fGN0czpwcm9wZXJ0aWVzLXF1ZXJ5fGN0czpwb2x5Z29uLXZlcnRpY2VzfGN0czpwb2x5Z29ufGN0czpwb2ludC1sb25naXR1ZGV8Y3RzOnBvaW50LWxhdGl0dWRlfGN0czpwb2ludHxjdHM6b3ItcXVlcnktcXVlcmllc3xjdHM6b3ItcXVlcnl8Y3RzOm5vdC1xdWVyeS13ZWlnaHR8Y3RzOm5vdC1xdWVyeS1xdWVyeXxjdHM6bm90LXF1ZXJ5fGN0czpuZWFyLXF1ZXJ5LXdlaWdodHxjdHM6bmVhci1xdWVyeS1xdWVyaWVzfGN0czpuZWFyLXF1ZXJ5LW9wdGlvbnN8Y3RzOm5lYXItcXVlcnktZGlzdGFuY2V8Y3RzOm5lYXItcXVlcnl8Y3RzOmhpZ2hsaWdodHxjdHM6Z2Vvc3BhdGlhbC1jby1vY2N1cnJlbmNlc3xjdHM6ZnJlcXVlbmN5fGN0czpmaXRuZXNzfGN0czpmaWVsZC13b3Jkc3xjdHM6ZmllbGQtd29yZC1xdWVyeS13ZWlnaHR8Y3RzOmZpZWxkLXdvcmQtcXVlcnktdGV4dHxjdHM6ZmllbGQtd29yZC1xdWVyeS1vcHRpb25zfGN0czpmaWVsZC13b3JkLXF1ZXJ5LWZpZWxkLW5hbWV8Y3RzOmZpZWxkLXdvcmQtcXVlcnl8Y3RzOmZpZWxkLXdvcmQtbWF0Y2h8Y3RzOmVudGl0eS1oaWdobGlnaHR8Y3RzOmVsZW1lbnQtd29yZHN8Y3RzOmVsZW1lbnQtd29yZC1xdWVyeS13ZWlnaHR8Y3RzOmVsZW1lbnQtd29yZC1xdWVyeS10ZXh0fGN0czplbGVtZW50LXdvcmQtcXVlcnktb3B0aW9uc3xjdHM6ZWxlbWVudC13b3JkLXF1ZXJ5LWVsZW1lbnQtbmFtZXxjdHM6ZWxlbWVudC13b3JkLXF1ZXJ5fGN0czplbGVtZW50LXdvcmQtbWF0Y2h8Y3RzOmVsZW1lbnQtdmFsdWVzfGN0czplbGVtZW50LXZhbHVlLXJhbmdlc3xjdHM6ZWxlbWVudC12YWx1ZS1xdWVyeS13ZWlnaHR8Y3RzOmVsZW1lbnQtdmFsdWUtcXVlcnktdGV4dHxjdHM6ZWxlbWVudC12YWx1ZS1xdWVyeS1vcHRpb25zfGN0czplbGVtZW50LXZhbHVlLXF1ZXJ5LWVsZW1lbnQtbmFtZXxjdHM6ZWxlbWVudC12YWx1ZS1xdWVyeXxjdHM6ZWxlbWVudC12YWx1ZS1tYXRjaHxjdHM6ZWxlbWVudC12YWx1ZS1nZW9zcGF0aWFsLWNvLW9jY3VycmVuY2VzfGN0czplbGVtZW50LXZhbHVlLWNvLW9jY3VycmVuY2VzfGN0czplbGVtZW50LXJhbmdlLXF1ZXJ5LXdlaWdodHxjdHM6ZWxlbWVudC1yYW5nZS1xdWVyeS12YWx1ZXxjdHM6ZWxlbWVudC1yYW5nZS1xdWVyeS1vcHRpb25zfGN0czplbGVtZW50LXJhbmdlLXF1ZXJ5LW9wZXJhdG9yfGN0czplbGVtZW50LXJhbmdlLXF1ZXJ5LWVsZW1lbnQtbmFtZXxjdHM6ZWxlbWVudC1yYW5nZS1xdWVyeXxjdHM6ZWxlbWVudC1xdWVyeS1xdWVyeXxjdHM6ZWxlbWVudC1xdWVyeS1lbGVtZW50LW5hbWV8Y3RzOmVsZW1lbnQtcXVlcnl8Y3RzOmVsZW1lbnQtcGFpci1nZW9zcGF0aWFsLXZhbHVlc3xjdHM6ZWxlbWVudC1wYWlyLWdlb3NwYXRpYWwtdmFsdWUtbWF0Y2h8Y3RzOmVsZW1lbnQtcGFpci1nZW9zcGF0aWFsLXF1ZXJ5LXdlaWdodHxjdHM6ZWxlbWVudC1wYWlyLWdlb3NwYXRpYWwtcXVlcnktcmVnaW9ufGN0czplbGVtZW50LXBhaXItZ2Vvc3BhdGlhbC1xdWVyeS1vcHRpb25zfGN0czplbGVtZW50LXBhaXItZ2Vvc3BhdGlhbC1xdWVyeS1sb25naXR1ZGUtbmFtZXxjdHM6ZWxlbWVudC1wYWlyLWdlb3NwYXRpYWwtcXVlcnktbGF0aXR1ZGUtbmFtZXxjdHM6ZWxlbWVudC1wYWlyLWdlb3NwYXRpYWwtcXVlcnktZWxlbWVudC1uYW1lfGN0czplbGVtZW50LXBhaXItZ2Vvc3BhdGlhbC1xdWVyeXxjdHM6ZWxlbWVudC1wYWlyLWdlb3NwYXRpYWwtYm94ZXN8Y3RzOmVsZW1lbnQtZ2Vvc3BhdGlhbC12YWx1ZXN8Y3RzOmVsZW1lbnQtZ2Vvc3BhdGlhbC12YWx1ZS1tYXRjaHxjdHM6ZWxlbWVudC1nZW9zcGF0aWFsLXF1ZXJ5LXdlaWdodHxjdHM6ZWxlbWVudC1nZW9zcGF0aWFsLXF1ZXJ5LXJlZ2lvbnxjdHM6ZWxlbWVudC1nZW9zcGF0aWFsLXF1ZXJ5LW9wdGlvbnN8Y3RzOmVsZW1lbnQtZ2Vvc3BhdGlhbC1xdWVyeS1lbGVtZW50LW5hbWV8Y3RzOmVsZW1lbnQtZ2Vvc3BhdGlhbC1xdWVyeXxjdHM6ZWxlbWVudC1nZW9zcGF0aWFsLWJveGVzfGN0czplbGVtZW50LWNoaWxkLWdlb3NwYXRpYWwtdmFsdWVzfGN0czplbGVtZW50LWNoaWxkLWdlb3NwYXRpYWwtdmFsdWUtbWF0Y2h8Y3RzOmVsZW1lbnQtY2hpbGQtZ2Vvc3BhdGlhbC1xdWVyeS13ZWlnaHR8Y3RzOmVsZW1lbnQtY2hpbGQtZ2Vvc3BhdGlhbC1xdWVyeS1yZWdpb258Y3RzOmVsZW1lbnQtY2hpbGQtZ2Vvc3BhdGlhbC1xdWVyeS1vcHRpb25zfGN0czplbGVtZW50LWNoaWxkLWdlb3NwYXRpYWwtcXVlcnktZWxlbWVudC1uYW1lfGN0czplbGVtZW50LWNoaWxkLWdlb3NwYXRpYWwtcXVlcnktY2hpbGQtbmFtZXxjdHM6ZWxlbWVudC1jaGlsZC1nZW9zcGF0aWFsLXF1ZXJ5fGN0czplbGVtZW50LWNoaWxkLWdlb3NwYXRpYWwtYm94ZXN8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXdvcmRzfGN0czplbGVtZW50LWF0dHJpYnV0ZS13b3JkLXF1ZXJ5LXdlaWdodHxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtd29yZC1xdWVyeS10ZXh0fGN0czplbGVtZW50LWF0dHJpYnV0ZS13b3JkLXF1ZXJ5LW9wdGlvbnN8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXdvcmQtcXVlcnktZWxlbWVudC1uYW1lfGN0czplbGVtZW50LWF0dHJpYnV0ZS13b3JkLXF1ZXJ5LWF0dHJpYnV0ZS1uYW1lfGN0czplbGVtZW50LWF0dHJpYnV0ZS13b3JkLXF1ZXJ5fGN0czplbGVtZW50LWF0dHJpYnV0ZS13b3JkLW1hdGNofGN0czplbGVtZW50LWF0dHJpYnV0ZS12YWx1ZXN8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXZhbHVlLXJhbmdlc3xjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtdmFsdWUtcXVlcnktd2VpZ2h0fGN0czplbGVtZW50LWF0dHJpYnV0ZS12YWx1ZS1xdWVyeS10ZXh0fGN0czplbGVtZW50LWF0dHJpYnV0ZS12YWx1ZS1xdWVyeS1vcHRpb25zfGN0czplbGVtZW50LWF0dHJpYnV0ZS12YWx1ZS1xdWVyeS1lbGVtZW50LW5hbWV8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXZhbHVlLXF1ZXJ5LWF0dHJpYnV0ZS1uYW1lfGN0czplbGVtZW50LWF0dHJpYnV0ZS12YWx1ZS1xdWVyeXxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtdmFsdWUtbWF0Y2h8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXZhbHVlLWdlb3NwYXRpYWwtY28tb2NjdXJyZW5jZXN8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXZhbHVlLWNvLW9jY3VycmVuY2VzfGN0czplbGVtZW50LWF0dHJpYnV0ZS1yYW5nZS1xdWVyeS13ZWlnaHR8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXJhbmdlLXF1ZXJ5LXZhbHVlfGN0czplbGVtZW50LWF0dHJpYnV0ZS1yYW5nZS1xdWVyeS1vcHRpb25zfGN0czplbGVtZW50LWF0dHJpYnV0ZS1yYW5nZS1xdWVyeS1vcGVyYXRvcnxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcmFuZ2UtcXVlcnktZWxlbWVudC1uYW1lfGN0czplbGVtZW50LWF0dHJpYnV0ZS1yYW5nZS1xdWVyeS1hdHRyaWJ1dGUtbmFtZXxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcmFuZ2UtcXVlcnl8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXBhaXItZ2Vvc3BhdGlhbC12YWx1ZXN8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXBhaXItZ2Vvc3BhdGlhbC12YWx1ZS1tYXRjaHxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcGFpci1nZW9zcGF0aWFsLXF1ZXJ5LXdlaWdodHxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcGFpci1nZW9zcGF0aWFsLXF1ZXJ5LXJlZ2lvbnxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcGFpci1nZW9zcGF0aWFsLXF1ZXJ5LW9wdGlvbnN8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXBhaXItZ2Vvc3BhdGlhbC1xdWVyeS1sb25naXR1ZGUtbmFtZXxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcGFpci1nZW9zcGF0aWFsLXF1ZXJ5LWxhdGl0dWRlLW5hbWV8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXBhaXItZ2Vvc3BhdGlhbC1xdWVyeS1lbGVtZW50LW5hbWV8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXBhaXItZ2Vvc3BhdGlhbC1xdWVyeXxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcGFpci1nZW9zcGF0aWFsLWJveGVzfGN0czpkb2N1bWVudC1xdWVyeS11cmlzfGN0czpkb2N1bWVudC1xdWVyeXxjdHM6ZGlzdGFuY2V8Y3RzOmRpcmVjdG9yeS1xdWVyeS11cmlzfGN0czpkaXJlY3RvcnktcXVlcnktZGVwdGh8Y3RzOmRpcmVjdG9yeS1xdWVyeXxjdHM6ZGVzdGluYXRpb258Y3RzOmRlcmVnaXN0ZXJ8Y3RzOmNvbnRhaW5zfGN0czpjb25maWRlbmNlfGN0czpjb2xsZWN0aW9uc3xjdHM6Y29sbGVjdGlvbi1xdWVyeS11cmlzfGN0czpjb2xsZWN0aW9uLXF1ZXJ5fGN0czpjb2xsZWN0aW9uLW1hdGNofGN0czpjbGFzc2lmeXxjdHM6Y2lyY2xlLXJhZGl1c3xjdHM6Y2lyY2xlLWNlbnRlcnxjdHM6Y2lyY2xlfGN0czpib3gtd2VzdHxjdHM6Ym94LXNvdXRofGN0czpib3gtbm9ydGh8Y3RzOmJveC1lYXN0fGN0czpib3h8Y3RzOmJlYXJpbmd8Y3RzOmFyYy1pbnRlcnNlY3Rpb258Y3RzOmFuZC1xdWVyeS1xdWVyaWVzfGN0czphbmQtcXVlcnktb3B0aW9uc3xjdHM6YW5kLXF1ZXJ5fGN0czphbmQtbm90LXF1ZXJ5LXBvc2l0aXZlLXF1ZXJ5fGN0czphbmQtbm90LXF1ZXJ5LW5lZ2F0aXZlLXF1ZXJ5fGN0czphbmQtbm90LXF1ZXJ5fGNzczpnZXR8Y3NzOmNvbnZlcnR8Y3BmOnN1Y2Nlc3N8Y3BmOmZhaWx1cmV8Y3BmOmRvY3VtZW50LXNldC1zdGF0ZXxjcGY6ZG9jdW1lbnQtc2V0LXByb2Nlc3Npbmctc3RhdHVzfGNwZjpkb2N1bWVudC1zZXQtbGFzdC11cGRhdGVkfGNwZjpkb2N1bWVudC1zZXQtZXJyb3J8Y3BmOmRvY3VtZW50LWdldC1zdGF0ZXxjcGY6ZG9jdW1lbnQtZ2V0LXByb2Nlc3Npbmctc3RhdHVzfGNwZjpkb2N1bWVudC1nZXQtbGFzdC11cGRhdGVkfGNwZjpkb2N1bWVudC1nZXQtZXJyb3J8Y3BmOmNoZWNrLXRyYW5zaXRpb258YWxlcnQ6c3Bhd24tbWF0Y2hpbmctYWN0aW9uc3xhbGVydDpydWxlLXVzZXItaWQtcXVlcnl8YWxlcnQ6cnVsZS1zZXQtdXNlci1pZHxhbGVydDpydWxlLXNldC1xdWVyeXxhbGVydDpydWxlLXNldC1vcHRpb25zfGFsZXJ0OnJ1bGUtc2V0LW5hbWV8YWxlcnQ6cnVsZS1zZXQtZGVzY3JpcHRpb258YWxlcnQ6cnVsZS1zZXQtYWN0aW9ufGFsZXJ0OnJ1bGUtcmVtb3ZlfGFsZXJ0OnJ1bGUtbmFtZS1xdWVyeXxhbGVydDpydWxlLWluc2VydHxhbGVydDpydWxlLWlkLXF1ZXJ5fGFsZXJ0OnJ1bGUtZ2V0LXVzZXItaWR8YWxlcnQ6cnVsZS1nZXQtcXVlcnl8YWxlcnQ6cnVsZS1nZXQtb3B0aW9uc3xhbGVydDpydWxlLWdldC1uYW1lfGFsZXJ0OnJ1bGUtZ2V0LWlkfGFsZXJ0OnJ1bGUtZ2V0LWRlc2NyaXB0aW9ufGFsZXJ0OnJ1bGUtZ2V0LWFjdGlvbnxhbGVydDpydWxlLWFjdGlvbi1xdWVyeXxhbGVydDpyZW1vdmUtdHJpZ2dlcnN8YWxlcnQ6bWFrZS1ydWxlfGFsZXJ0Om1ha2UtbG9nLWFjdGlvbnxhbGVydDptYWtlLWNvbmZpZ3xhbGVydDptYWtlLWFjdGlvbnxhbGVydDppbnZva2UtbWF0Y2hpbmctYWN0aW9uc3xhbGVydDpnZXQtbXktcnVsZXN8YWxlcnQ6Z2V0LWFsbC1ydWxlc3xhbGVydDpnZXQtYWN0aW9uc3xhbGVydDpmaW5kLW1hdGNoaW5nLXJ1bGVzfGFsZXJ0OmNyZWF0ZS10cmlnZ2Vyc3xhbGVydDpjb25maWctc2V0LXVyaXxhbGVydDpjb25maWctc2V0LXRyaWdnZXItaWRzfGFsZXJ0OmNvbmZpZy1zZXQtb3B0aW9uc3xhbGVydDpjb25maWctc2V0LW5hbWV8YWxlcnQ6Y29uZmlnLXNldC1kZXNjcmlwdGlvbnxhbGVydDpjb25maWctc2V0LWNwZi1kb21haW4tbmFtZXN8YWxlcnQ6Y29uZmlnLXNldC1jcGYtZG9tYWluLWlkc3xhbGVydDpjb25maWctaW5zZXJ0fGFsZXJ0OmNvbmZpZy1nZXQtdXJpfGFsZXJ0OmNvbmZpZy1nZXQtdHJpZ2dlci1pZHN8YWxlcnQ6Y29uZmlnLWdldC1vcHRpb25zfGFsZXJ0OmNvbmZpZy1nZXQtbmFtZXxhbGVydDpjb25maWctZ2V0LWlkfGFsZXJ0OmNvbmZpZy1nZXQtZGVzY3JpcHRpb258YWxlcnQ6Y29uZmlnLWdldC1jcGYtZG9tYWluLW5hbWVzfGFsZXJ0OmNvbmZpZy1nZXQtY3BmLWRvbWFpbi1pZHN8YWxlcnQ6Y29uZmlnLWdldHxhbGVydDpjb25maWctZGVsZXRlfGFsZXJ0OmFjdGlvbi1zZXQtb3B0aW9uc3xhbGVydDphY3Rpb24tc2V0LW5hbWV8YWxlcnQ6YWN0aW9uLXNldC1tb2R1bGUtcm9vdHxhbGVydDphY3Rpb24tc2V0LW1vZHVsZS1kYnxhbGVydDphY3Rpb24tc2V0LW1vZHVsZXxhbGVydDphY3Rpb24tc2V0LWRlc2NyaXB0aW9ufGFsZXJ0OmFjdGlvbi1yZW1vdmV8YWxlcnQ6YWN0aW9uLWluc2VydHxhbGVydDphY3Rpb24tZ2V0LW9wdGlvbnN8YWxlcnQ6YWN0aW9uLWdldC1uYW1lfGFsZXJ0OmFjdGlvbi1nZXQtbW9kdWxlLXJvb3R8YWxlcnQ6YWN0aW9uLWdldC1tb2R1bGUtZGJ8YWxlcnQ6YWN0aW9uLWdldC1tb2R1bGV8YWxlcnQ6YWN0aW9uLWdldC1kZXNjcmlwdGlvbnx6ZXJvLW9yLW9uZXx5ZWFycy1mcm9tLWR1cmF0aW9ufHllYXItZnJvbS1kYXRlVGltZXx5ZWFyLWZyb20tZGF0ZXx1cHBlci1jYXNlfHVub3JkZXJlZHx0cnVlfHRyYW5zbGF0ZXx0cmFjZXx0b2tlbml6ZXx0aW1lem9uZS1mcm9tLXRpbWV8dGltZXpvbmUtZnJvbS1kYXRlVGltZXx0aW1lem9uZS1mcm9tLWRhdGV8c3VtfHN1YnRyYWN0LWRhdGVUaW1lcy15aWVsZGluZy15ZWFyTW9udGhEdXJhdGlvbnxzdWJ0cmFjdC1kYXRlVGltZXMteWllbGRpbmctZGF5VGltZUR1cmF0aW9ufHN1YnN0cmluZy1iZWZvcmV8c3Vic3RyaW5nLWFmdGVyfHN1YnN0cmluZ3xzdWJzZXF1ZW5jZXxzdHJpbmctdG8tY29kZXBvaW50c3xzdHJpbmctcGFkfHN0cmluZy1sZW5ndGh8c3RyaW5nLWpvaW58c3RyaW5nfHN0YXRpYy1iYXNlLXVyaXxzdGFydHMtd2l0aHxzZWNvbmRzLWZyb20tdGltZXxzZWNvbmRzLWZyb20tZHVyYXRpb258c2Vjb25kcy1mcm9tLWRhdGVUaW1lfHJvdW5kLWhhbGYtdG8tZXZlbnxyb3VuZHxyb290fHJldmVyc2V8cmVzb2x2ZS11cml8cmVzb2x2ZS1RTmFtZXxyZXBsYWNlfHJlbW92ZXxRTmFtZXxwcmVmaXgtZnJvbS1RTmFtZXxwb3NpdGlvbnxvbmUtb3ItbW9yZXxudW1iZXJ8bm90fG5vcm1hbGl6ZS11bmljb2RlfG5vcm1hbGl6ZS1zcGFjZXxub2RlLW5hbWV8bm9kZS1raW5kfG5pbGxlZHxuYW1lc3BhY2UtdXJpLWZyb20tUU5hbWV8bmFtZXNwYWNlLXVyaS1mb3ItcHJlZml4fG5hbWVzcGFjZS11cml8bmFtZXxtb250aHMtZnJvbS1kdXJhdGlvbnxtb250aC1mcm9tLWRhdGVUaW1lfG1vbnRoLWZyb20tZGF0ZXxtaW51dGVzLWZyb20tdGltZXxtaW51dGVzLWZyb20tZHVyYXRpb258bWludXRlcy1mcm9tLWRhdGVUaW1lfG1pbnxtYXh8bWF0Y2hlc3xsb3dlci1jYXNlfGxvY2FsLW5hbWUtZnJvbS1RTmFtZXxsb2NhbC1uYW1lfGxhc3R8bGFuZ3xpcmktdG8tdXJpfGluc2VydC1iZWZvcmV8aW5kZXgtb2Z8aW4tc2NvcGUtcHJlZml4ZXN8aW1wbGljaXQtdGltZXpvbmV8aWRyZWZ8aWR8aG91cnMtZnJvbS10aW1lfGhvdXJzLWZyb20tZHVyYXRpb258aG91cnMtZnJvbS1kYXRlVGltZXxmbG9vcnxmYWxzZXxleHBhbmRlZC1RTmFtZXxleGlzdHN8ZXhhY3RseS1vbmV8ZXNjYXBlLXVyaXxlc2NhcGUtaHRtbC11cml8ZXJyb3J8ZW5kcy13aXRofGVuY29kZS1mb3ItdXJpfGVtcHR5fGRvY3VtZW50LXVyaXxkb2MtYXZhaWxhYmxlfGRvY3xkaXN0aW5jdC12YWx1ZXN8ZGlzdGluY3Qtbm9kZXN8ZGVmYXVsdC1jb2xsYXRpb258ZGVlcC1lcXVhbHxkYXlzLWZyb20tZHVyYXRpb258ZGF5LWZyb20tZGF0ZVRpbWV8ZGF5LWZyb20tZGF0ZXxkYXRhfGN1cnJlbnQtdGltZXxjdXJyZW50LWRhdGVUaW1lfGN1cnJlbnQtZGF0ZXxjb3VudHxjb250YWluc3xjb25jYXR8Y29tcGFyZXxjb2xsZWN0aW9ufGNvZGVwb2ludHMtdG8tc3RyaW5nfGNvZGVwb2ludC1lcXVhbHxjZWlsaW5nfGJvb2xlYW58YmFzZS11cml8YXZnfGFkanVzdC10aW1lLXRvLXRpbWV6b25lfGFkanVzdC1kYXRlVGltZS10by10aW1lem9uZXxhZGp1c3QtZGF0ZS10by10aW1lem9uZXxhYnMpXGIvXSwKK1sicGxuIiwvXltcdzotXSsvXSxbInBsbiIsL15bXHRcblxyIFx4YTBdKy9dXSksWyJ4cSIsInhxdWVyeSJdKTsKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy15YW1sLmpzIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXlhbWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM4NzI5YgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy15YW1sLmpzCkBAIC0wLDAgKzEsMiBAQAordmFyIGE9bnVsbDsKK1BSLnJlZ2lzdGVyTGFuZ0hhbmRsZXIoUFIuY3JlYXRlU2ltcGxlTGV4ZXIoW1sicHVuIiwvXls6Pj98XSsvLGEsIjp8Pj8iXSxbImRlYyIsL14lKD86WUFNTHxUQUcpW15cblxyI10rLyxhLCIlIl0sWyJ0eXAiLC9eJlxTKy8sYSwiJiJdLFsidHlwIiwvXiFcUyovLGEsIiEiXSxbInN0ciIsL14iKD86W14iXFxdfFxcLikqKD86InwkKS8sYSwnIiddLFsic3RyIiwvXicoPzpbXiddfCcnKSooPzonfCQpLyxhLCInIl0sWyJjb20iLC9eI1teXG5ccl0qLyxhLCIjIl0sWyJwbG4iLC9eXHMrLyxhLCIgXHRcclxuIl1dLFtbImRlYyIsL14oPzotLS18XC5cLlwuKSg/OltcblxyXXwkKS9dLFsicHVuIiwvXi0vXSxbImt3ZCIsL15cdys6W1xuXHIgXS9dLFsicGxuIiwvXlx3Ky9dXSksWyJ5YW1sIiwieW1sIl0pOwpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy9wcmV0dGlmeS9wcmV0dGlmeS5qcyBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvcHJldHRpZnkvcHJldHRpZnkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVmNWFkNwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMvcHJldHRpZnkvcHJldHRpZnkuanMKQEAgLTAsMCArMSwyOCBAQAordmFyIHE9bnVsbDt3aW5kb3cuUFJfU0hPVUxEX1VTRV9DT05USU5VQVRJT049ITA7CisoZnVuY3Rpb24oKXtmdW5jdGlvbiBMKGEpe2Z1bmN0aW9uIG0oYSl7dmFyIGY9YS5jaGFyQ29kZUF0KDApO2lmKGYhPT05MilyZXR1cm4gZjt2YXIgYj1hLmNoYXJBdCgxKTtyZXR1cm4oZj1yW2JdKT9mOiIwIjw9YiYmYjw9IjciP3BhcnNlSW50KGEuc3Vic3RyaW5nKDEpLDgpOmI9PT0idSJ8fGI9PT0ieCI/cGFyc2VJbnQoYS5zdWJzdHJpbmcoMiksMTYpOmEuY2hhckNvZGVBdCgxKX1mdW5jdGlvbiBlKGEpe2lmKGE8MzIpcmV0dXJuKGE8MTY/IlxceDAiOiJcXHgiKSthLnRvU3RyaW5nKDE2KTthPVN0cmluZy5mcm9tQ2hhckNvZGUoYSk7aWYoYT09PSJcXCJ8fGE9PT0iLSJ8fGE9PT0iWyJ8fGE9PT0iXSIpYT0iXFwiK2E7cmV0dXJuIGF9ZnVuY3Rpb24gaChhKXtmb3IodmFyIGY9YS5zdWJzdHJpbmcoMSxhLmxlbmd0aC0xKS5tYXRjaCgvXFx1W1xkQS1GYS1mXXs0fXxcXHhbXGRBLUZhLWZdezJ9fFxcWzAtM11bMC03XXswLDJ9fFxcWzAtN117MSwyfXxcXFtcU1xzXXxbXlxcXS9nKSxhPQorW10sYj1bXSxvPWZbMF09PT0iXiIsYz1vPzE6MCxpPWYubGVuZ3RoO2M8aTsrK2Mpe3ZhciBqPWZbY107aWYoL1xcW2Jkc3ddL2kudGVzdChqKSlhLnB1c2goaik7ZWxzZXt2YXIgaj1tKGopLGQ7YysyPGkmJiItIj09PWZbYysxXT8oZD1tKGZbYysyXSksYys9Mik6ZD1qO2IucHVzaChbaixkXSk7ZDw2NXx8aj4xMjJ8fChkPDY1fHxqPjkwfHxiLnB1c2goW01hdGgubWF4KDY1LGopfDMyLE1hdGgubWluKGQsOTApfDMyXSksZDw5N3x8aj4xMjJ8fGIucHVzaChbTWF0aC5tYXgoOTcsaikmLTMzLE1hdGgubWluKGQsMTIyKSYtMzNdKSl9fWIuc29ydChmdW5jdGlvbihhLGYpe3JldHVybiBhWzBdLWZbMF18fGZbMV0tYVsxXX0pO2Y9W107aj1bTmFOLE5hTl07Zm9yKGM9MDtjPGIubGVuZ3RoOysrYylpPWJbY10saVswXTw9alsxXSsxP2pbMV09TWF0aC5tYXgoalsxXSxpWzFdKTpmLnB1c2goaj1pKTtiPVsiWyJdO28mJmIucHVzaCgiXiIpO2IucHVzaC5hcHBseShiLGEpO2ZvcihjPTA7YzwKK2YubGVuZ3RoOysrYylpPWZbY10sYi5wdXNoKGUoaVswXSkpLGlbMV0+aVswXSYmKGlbMV0rMT5pWzBdJiZiLnB1c2goIi0iKSxiLnB1c2goZShpWzFdKSkpO2IucHVzaCgiXSIpO3JldHVybiBiLmpvaW4oIiIpfWZ1bmN0aW9uIHkoYSl7Zm9yKHZhciBmPWEuc291cmNlLm1hdGNoKC9cWyg/OlteXFxcXV18XFxbXFNcc10pKl18XFx1W1xkQS1GYS1mXXs0fXxcXHhbXGRBLUZhLWZdezJ9fFxcXGQrfFxcW15cZHV4XXxcKFw/WyE6PV18WygpXl18W14oKVtcXF5dKy9nKSxiPWYubGVuZ3RoLGQ9W10sYz0wLGk9MDtjPGI7KytjKXt2YXIgaj1mW2NdO2o9PT0iKCI/KytpOiJcXCI9PT1qLmNoYXJBdCgwKSYmKGo9K2ouc3Vic3RyaW5nKDEpKSYmajw9aSYmKGRbal09LTEpfWZvcihjPTE7YzxkLmxlbmd0aDsrK2MpLTE9PT1kW2NdJiYoZFtjXT0rK3QpO2ZvcihpPWM9MDtjPGI7KytjKWo9ZltjXSxqPT09IigiPygrK2ksZFtpXT09PXZvaWQgMCYmKGZbY109Iig/OiIpKToiXFwiPT09ai5jaGFyQXQoMCkmJgorKGo9K2ouc3Vic3RyaW5nKDEpKSYmajw9aSYmKGZbY109IlxcIitkW2ldKTtmb3IoaT1jPTA7YzxiOysrYykiXiI9PT1mW2NdJiYiXiIhPT1mW2MrMV0mJihmW2NdPSIiKTtpZihhLmlnbm9yZUNhc2UmJnMpZm9yKGM9MDtjPGI7KytjKWo9ZltjXSxhPWouY2hhckF0KDApLGoubGVuZ3RoPj0yJiZhPT09IlsiP2ZbY109aChqKTphIT09IlxcIiYmKGZbY109ai5yZXBsYWNlKC9bQS1aYS16XS9nLGZ1bmN0aW9uKGEpe2E9YS5jaGFyQ29kZUF0KDApO3JldHVybiJbIitTdHJpbmcuZnJvbUNoYXJDb2RlKGEmLTMzLGF8MzIpKyJdIn0pKTtyZXR1cm4gZi5qb2luKCIiKX1mb3IodmFyIHQ9MCxzPSExLGw9ITEscD0wLGQ9YS5sZW5ndGg7cDxkOysrcCl7dmFyIGc9YVtwXTtpZihnLmlnbm9yZUNhc2UpbD0hMDtlbHNlIGlmKC9bYS16XS9pLnRlc3QoZy5zb3VyY2UucmVwbGFjZSgvXFx1W1xkYS1mXXs0fXxcXHhbXGRhLWZdezJ9fFxcW15VWHV4XS9naSwiIikpKXtzPSEwO2w9ITE7YnJlYWt9fWZvcih2YXIgcj0KK3tiOjgsdDo5LG46MTAsdjoxMSxmOjEyLHI6MTN9LG49W10scD0wLGQ9YS5sZW5ndGg7cDxkOysrcCl7Zz1hW3BdO2lmKGcuZ2xvYmFsfHxnLm11bHRpbGluZSl0aHJvdyBFcnJvcigiIitnKTtuLnB1c2goIig/OiIreShnKSsiKSIpfXJldHVybiBSZWdFeHAobi5qb2luKCJ8IiksbD8iZ2kiOiJnIil9ZnVuY3Rpb24gTShhKXtmdW5jdGlvbiBtKGEpe3N3aXRjaChhLm5vZGVUeXBlKXtjYXNlIDE6aWYoZS50ZXN0KGEuY2xhc3NOYW1lKSlicmVhaztmb3IodmFyIGc9YS5maXJzdENoaWxkO2c7Zz1nLm5leHRTaWJsaW5nKW0oZyk7Zz1hLm5vZGVOYW1lO2lmKCJCUiI9PT1nfHwiTEkiPT09ZyloW3NdPSJcbiIsdFtzPDwxXT15KyssdFtzKys8PDF8MV09YTticmVhaztjYXNlIDM6Y2FzZSA0Omc9YS5ub2RlVmFsdWUsZy5sZW5ndGgmJihnPXA/Zy5yZXBsYWNlKC9cclxuPy9nLCJcbiIpOmcucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIiksaFtzXT1nLHRbczw8MV09eSx5Kz1nLmxlbmd0aCwKK3RbcysrPDwxfDFdPWEpfX12YXIgZT0vKD86Xnxccylub2NvZGUoPzpcc3wkKS8saD1bXSx5PTAsdD1bXSxzPTAsbDthLmN1cnJlbnRTdHlsZT9sPWEuY3VycmVudFN0eWxlLndoaXRlU3BhY2U6d2luZG93LmdldENvbXB1dGVkU3R5bGUmJihsPWRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYSxxKS5nZXRQcm9wZXJ0eVZhbHVlKCJ3aGl0ZS1zcGFjZSIpKTt2YXIgcD1sJiYicHJlIj09PWwuc3Vic3RyaW5nKDAsMyk7bShhKTtyZXR1cm57YTpoLmpvaW4oIiIpLnJlcGxhY2UoL1xuJC8sIiIpLGM6dH19ZnVuY3Rpb24gQihhLG0sZSxoKXttJiYoYT17YTptLGQ6YX0sZShhKSxoLnB1c2guYXBwbHkoaCxhLmUpKX1mdW5jdGlvbiB4KGEsbSl7ZnVuY3Rpb24gZShhKXtmb3IodmFyIGw9YS5kLHA9W2wsInBsbiJdLGQ9MCxnPWEuYS5tYXRjaCh5KXx8W10scj17fSxuPTAsej1nLmxlbmd0aDtuPHo7KytuKXt2YXIgZj1nW25dLGI9cltmXSxvPXZvaWQgMCxjO2lmKHR5cGVvZiBiPT09Cisic3RyaW5nIiljPSExO2Vsc2V7dmFyIGk9aFtmLmNoYXJBdCgwKV07aWYoaSlvPWYubWF0Y2goaVsxXSksYj1pWzBdO2Vsc2V7Zm9yKGM9MDtjPHQ7KytjKWlmKGk9bVtjXSxvPWYubWF0Y2goaVsxXSkpe2I9aVswXTticmVha31vfHwoYj0icGxuIil9aWYoKGM9Yi5sZW5ndGg+PTUmJiJsYW5nLSI9PT1iLnN1YnN0cmluZygwLDUpKSYmIShvJiZ0eXBlb2Ygb1sxXT09PSJzdHJpbmciKSljPSExLGI9InNyYyI7Y3x8KHJbZl09Yil9aT1kO2QrPWYubGVuZ3RoO2lmKGMpe2M9b1sxXTt2YXIgaj1mLmluZGV4T2YoYyksaz1qK2MubGVuZ3RoO29bMl0mJihrPWYubGVuZ3RoLW9bMl0ubGVuZ3RoLGo9ay1jLmxlbmd0aCk7Yj1iLnN1YnN0cmluZyg1KTtCKGwraSxmLnN1YnN0cmluZygwLGopLGUscCk7QihsK2kraixjLEMoYixjKSxwKTtCKGwraStrLGYuc3Vic3RyaW5nKGspLGUscCl9ZWxzZSBwLnB1c2gobCtpLGIpfWEuZT1wfXZhciBoPXt9LHk7KGZ1bmN0aW9uKCl7Zm9yKHZhciBlPWEuY29uY2F0KG0pLAorbD1bXSxwPXt9LGQ9MCxnPWUubGVuZ3RoO2Q8ZzsrK2Qpe3ZhciByPWVbZF0sbj1yWzNdO2lmKG4pZm9yKHZhciBrPW4ubGVuZ3RoOy0taz49MDspaFtuLmNoYXJBdChrKV09cjtyPXJbMV07bj0iIityO3AuaGFzT3duUHJvcGVydHkobil8fChsLnB1c2gocikscFtuXT1xKX1sLnB1c2goL1tcU1xzXS8pO3k9TChsKX0pKCk7dmFyIHQ9bS5sZW5ndGg7cmV0dXJuIGV9ZnVuY3Rpb24gdShhKXt2YXIgbT1bXSxlPVtdO2EudHJpcGxlUXVvdGVkU3RyaW5ncz9tLnB1c2goWyJzdHIiLC9eKD86JycnKD86W14nXFxdfFxcW1xTXHNdfCcnPyg/PVteJ10pKSooPzonJyd8JCl8IiIiKD86W14iXFxdfFxcW1xTXHNdfCIiPyg/PVteIl0pKSooPzoiIiJ8JCl8Jyg/OlteJ1xcXXxcXFtcU1xzXSkqKD86J3wkKXwiKD86W14iXFxdfFxcW1xTXHNdKSooPzoifCQpKS8scSwiJ1wiIl0pOmEubXVsdGlMaW5lU3RyaW5ncz9tLnB1c2goWyJzdHIiLC9eKD86Jyg/OlteJ1xcXXxcXFtcU1xzXSkqKD86J3wkKXwiKD86W14iXFxdfFxcW1xTXHNdKSooPzoifCQpfGAoPzpbXlxcYF18XFxbXFNcc10pKig/OmB8JCkpLywKK3EsIidcImAiXSk6bS5wdXNoKFsic3RyIiwvXig/OicoPzpbXlxuXHInXFxdfFxcLikqKD86J3wkKXwiKD86W15cblxyIlxcXXxcXC4pKig/OiJ8JCkpLyxxLCJcIiciXSk7YS52ZXJiYXRpbVN0cmluZ3MmJmUucHVzaChbInN0ciIsL15AIig/OlteIl18IiIpKig/OiJ8JCkvLHFdKTt2YXIgaD1hLmhhc2hDb21tZW50cztoJiYoYS5jU3R5bGVDb21tZW50cz8oaD4xP20ucHVzaChbImNvbSIsL14jKD86IyMoPzpbXiNdfCMoPyEjIykpKig/OiMjI3wkKXwuKikvLHEsIiMiXSk6bS5wdXNoKFsiY29tIiwvXiMoPzooPzpkZWZpbmV8ZWxpZnxlbHNlfGVuZGlmfGVycm9yfGlmZGVmfGluY2x1ZGV8aWZuZGVmfGxpbmV8cHJhZ21hfHVuZGVmfHdhcm5pbmcpXGJ8W15cblxyXSopLyxxLCIjIl0pLGUucHVzaChbInN0ciIsL148KD86KD86KD86XC5cLlwvKSp8XC8/KSg/Oltcdy1dKyg/OlwvW1x3LV0rKSspP1tcdy1dK1wuaHxbYS16XVx3Kik+LyxxXSkpOm0ucHVzaChbImNvbSIsL14jW15cblxyXSovLAorcSwiIyJdKSk7YS5jU3R5bGVDb21tZW50cyYmKGUucHVzaChbImNvbSIsL15cL1wvW15cblxyXSovLHFdKSxlLnB1c2goWyJjb20iLC9eXC9cKltcU1xzXSo/KD86XCpcL3wkKS8scV0pKTthLnJlZ2V4TGl0ZXJhbHMmJmUucHVzaChbImxhbmctcmVnZXgiLC9eKD86Xl5cLj98WyErLV18IT18IT09fCN8JXwlPXwmfCYmfCYmPXwmPXxcKHxcKnxcKj18XCs9fCx8LT18LT58XC98XC89fDp8Ojp8O3w8fDw8fDw8PXw8PXw9fD09fD09PXw+fD49fD4+fD4+PXw+Pj58Pj4+PXxbP0BbXl18XF49fFxeXF58XF5cXj18e3xcfHxcfD18XHxcfHxcfFx8PXx+fGJyZWFrfGNhc2V8Y29udGludWV8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxpbnN0YW5jZW9mfHJldHVybnx0aHJvd3x0cnl8dHlwZW9mKVxzKihcLyg/PVteKi9dKSg/OlteL1tcXF18XFxbXFNcc118XFsoPzpbXlxcXF1dfFxcW1xTXHNdKSooPzpdfCQpKStcLykvXSk7KGg9YS50eXBlcykmJmUucHVzaChbInR5cCIsaF0pO2E9KCIiK2Eua2V5d29yZHMpLnJlcGxhY2UoL14gfCAkL2csCisiIik7YS5sZW5ndGgmJmUucHVzaChbImt3ZCIsUmVnRXhwKCJeKD86IithLnJlcGxhY2UoL1tccyxdKy9nLCJ8IikrIilcXGIiKSxxXSk7bS5wdXNoKFsicGxuIiwvXlxzKy8scSwiIFxyXG5cdFx4YTAiXSk7ZS5wdXNoKFsibGl0IiwvXkBbJF9hLXpdW1x3JEBdKi9pLHFdLFsidHlwIiwvXig/OltAX10/W0EtWl0rW2Etel1bXHckQF0qfFx3K190XGIpLyxxXSxbInBsbiIsL15bJF9hLXpdW1x3JEBdKi9pLHFdLFsibGl0IiwvXig/OjB4W1xkYS1mXSt8KD86XGQoPzpfXGQrKSpcZCooPzpcLlxkKik/fFwuXGRcKykoPzplWystXT9cZCspPylbYS16XSovaSxxLCIwMTIzNDU2Nzg5Il0sWyJwbG4iLC9eXFxbXFNcc10/LyxxXSxbInB1biIsL14uW15cc1x3Ii0kJy4vQFxcYF0qLyxxXSk7cmV0dXJuIHgobSxlKX1mdW5jdGlvbiBEKGEsbSl7ZnVuY3Rpb24gZShhKXtzd2l0Y2goYS5ub2RlVHlwZSl7Y2FzZSAxOmlmKGsudGVzdChhLmNsYXNzTmFtZSkpYnJlYWs7aWYoIkJSIj09PWEubm9kZU5hbWUpaChhKSwKK2EucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpO2Vsc2UgZm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWUoYSk7YnJlYWs7Y2FzZSAzOmNhc2UgNDppZihwKXt2YXIgYj1hLm5vZGVWYWx1ZSxkPWIubWF0Y2godCk7aWYoZCl7dmFyIGM9Yi5zdWJzdHJpbmcoMCxkLmluZGV4KTthLm5vZGVWYWx1ZT1jOyhiPWIuc3Vic3RyaW5nKGQuaW5kZXgrZFswXS5sZW5ndGgpKSYmYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzLmNyZWF0ZVRleHROb2RlKGIpLGEubmV4dFNpYmxpbmcpO2goYSk7Y3x8YS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpfX19fWZ1bmN0aW9uIGgoYSl7ZnVuY3Rpb24gYihhLGQpe3ZhciBlPWQ/YS5jbG9uZU5vZGUoITEpOmEsZj1hLnBhcmVudE5vZGU7aWYoZil7dmFyIGY9YihmLDEpLGc9YS5uZXh0U2libGluZztmLmFwcGVuZENoaWxkKGUpO2Zvcih2YXIgaD1nO2g7aD1nKWc9aC5uZXh0U2libGluZyxmLmFwcGVuZENoaWxkKGgpfXJldHVybiBlfQorZm9yKDshYS5uZXh0U2libGluZzspaWYoYT1hLnBhcmVudE5vZGUsIWEpcmV0dXJuO2Zvcih2YXIgYT1iKGEubmV4dFNpYmxpbmcsMCksZTsoZT1hLnBhcmVudE5vZGUpJiZlLm5vZGVUeXBlPT09MTspYT1lO2QucHVzaChhKX12YXIgaz0vKD86Xnxccylub2NvZGUoPzpcc3wkKS8sdD0vXHJcbj98XG4vLHM9YS5vd25lckRvY3VtZW50LGw7YS5jdXJyZW50U3R5bGU/bD1hLmN1cnJlbnRTdHlsZS53aGl0ZVNwYWNlOndpbmRvdy5nZXRDb21wdXRlZFN0eWxlJiYobD1zLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYSxxKS5nZXRQcm9wZXJ0eVZhbHVlKCJ3aGl0ZS1zcGFjZSIpKTt2YXIgcD1sJiYicHJlIj09PWwuc3Vic3RyaW5nKDAsMyk7Zm9yKGw9cy5jcmVhdGVFbGVtZW50KCJMSSIpO2EuZmlyc3RDaGlsZDspbC5hcHBlbmRDaGlsZChhLmZpcnN0Q2hpbGQpO2Zvcih2YXIgZD1bbF0sZz0wO2c8ZC5sZW5ndGg7KytnKWUoZFtnXSk7bT09PShtfDApJiZkWzBdLnNldEF0dHJpYnV0ZSgidmFsdWUiLAorbSk7dmFyIHI9cy5jcmVhdGVFbGVtZW50KCJPTCIpO3IuY2xhc3NOYW1lPSJsaW5lbnVtcyI7Zm9yKHZhciBuPU1hdGgubWF4KDAsbS0xfDApfHwwLGc9MCx6PWQubGVuZ3RoO2c8ejsrK2cpbD1kW2ddLGwuY2xhc3NOYW1lPSJMIisoZytuKSUxMCxsLmZpcnN0Q2hpbGR8fGwuYXBwZW5kQ2hpbGQocy5jcmVhdGVUZXh0Tm9kZSgiXHhhMCIpKSxyLmFwcGVuZENoaWxkKGwpO2EuYXBwZW5kQ2hpbGQocil9ZnVuY3Rpb24gayhhLG0pe2Zvcih2YXIgZT1tLmxlbmd0aDstLWU+PTA7KXt2YXIgaD1tW2VdO0EuaGFzT3duUHJvcGVydHkoaCk/d2luZG93LmNvbnNvbGUmJmNvbnNvbGUud2FybigiY2Fubm90IG92ZXJyaWRlIGxhbmd1YWdlIGhhbmRsZXIgJXMiLGgpOkFbaF09YX19ZnVuY3Rpb24gQyhhLG0pe2lmKCFhfHwhQS5oYXNPd25Qcm9wZXJ0eShhKSlhPS9eXHMqPC8udGVzdChtKT8iZGVmYXVsdC1tYXJrdXAiOiJkZWZhdWx0LWNvZGUiO3JldHVybiBBW2FdfWZ1bmN0aW9uIEUoYSl7dmFyIG09CithLmc7dHJ5e3ZhciBlPU0oYS5oKSxoPWUuYTthLmE9aDthLmM9ZS5jO2EuZD0wO0MobSxoKShhKTt2YXIgaz0vXGJNU0lFXGIvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksbT0vXG4vZyx0PWEuYSxzPXQubGVuZ3RoLGU9MCxsPWEuYyxwPWwubGVuZ3RoLGg9MCxkPWEuZSxnPWQubGVuZ3RoLGE9MDtkW2ddPXM7dmFyIHIsbjtmb3Iobj1yPTA7bjxnOylkW25dIT09ZFtuKzJdPyhkW3IrK109ZFtuKytdLGRbcisrXT1kW24rK10pOm4rPTI7Zz1yO2ZvcihuPXI9MDtuPGc7KXtmb3IodmFyIHo9ZFtuXSxmPWRbbisxXSxiPW4rMjtiKzI8PWcmJmRbYisxXT09PWY7KWIrPTI7ZFtyKytdPXo7ZFtyKytdPWY7bj1ifWZvcihkLmxlbmd0aD1yO2g8cDspe3ZhciBvPWxbaCsyXXx8cyxjPWRbYSsyXXx8cyxiPU1hdGgubWluKG8sYyksaT1sW2grMV0sajtpZihpLm5vZGVUeXBlIT09MSYmKGo9dC5zdWJzdHJpbmcoZSxiKSkpe2smJihqPWoucmVwbGFjZShtLCJcciIpKTtpLm5vZGVWYWx1ZT0KK2o7dmFyIHU9aS5vd25lckRvY3VtZW50LHY9dS5jcmVhdGVFbGVtZW50KCJTUEFOIik7di5jbGFzc05hbWU9ZFthKzFdO3ZhciB4PWkucGFyZW50Tm9kZTt4LnJlcGxhY2VDaGlsZCh2LGkpO3YuYXBwZW5kQ2hpbGQoaSk7ZTxvJiYobFtoKzFdPWk9dS5jcmVhdGVUZXh0Tm9kZSh0LnN1YnN0cmluZyhiLG8pKSx4Lmluc2VydEJlZm9yZShpLHYubmV4dFNpYmxpbmcpKX1lPWI7ZT49byYmKGgrPTIpO2U+PWMmJihhKz0yKX19Y2F0Y2godyl7ImNvbnNvbGUiaW4gd2luZG93JiZjb25zb2xlLmxvZyh3JiZ3LnN0YWNrP3cuc3RhY2s6dyl9fXZhciB2PVsiYnJlYWssY29udGludWUsZG8sZWxzZSxmb3IsaWYscmV0dXJuLHdoaWxlIl0sdz1bW3YsImF1dG8sY2FzZSxjaGFyLGNvbnN0LGRlZmF1bHQsZG91YmxlLGVudW0sZXh0ZXJuLGZsb2F0LGdvdG8saW50LGxvbmcscmVnaXN0ZXIsc2hvcnQsc2lnbmVkLHNpemVvZixzdGF0aWMsc3RydWN0LHN3aXRjaCx0eXBlZGVmLHVuaW9uLHVuc2lnbmVkLHZvaWQsdm9sYXRpbGUiXSwKKyJjYXRjaCxjbGFzcyxkZWxldGUsZmFsc2UsaW1wb3J0LG5ldyxvcGVyYXRvcixwcml2YXRlLHByb3RlY3RlZCxwdWJsaWMsdGhpcyx0aHJvdyx0cnVlLHRyeSx0eXBlb2YiXSxGPVt3LCJhbGlnbm9mLGFsaWduX3VuaW9uLGFzbSxheGlvbSxib29sLGNvbmNlcHQsY29uY2VwdF9tYXAsY29uc3RfY2FzdCxjb25zdGV4cHIsZGVjbHR5cGUsZHluYW1pY19jYXN0LGV4cGxpY2l0LGV4cG9ydCxmcmllbmQsaW5saW5lLGxhdGVfY2hlY2ssbXV0YWJsZSxuYW1lc3BhY2UsbnVsbHB0cixyZWludGVycHJldF9jYXN0LHN0YXRpY19hc3NlcnQsc3RhdGljX2Nhc3QsdGVtcGxhdGUsdHlwZWlkLHR5cGVuYW1lLHVzaW5nLHZpcnR1YWwsd2hlcmUiXSxHPVt3LCJhYnN0cmFjdCxib29sZWFuLGJ5dGUsZXh0ZW5kcyxmaW5hbCxmaW5hbGx5LGltcGxlbWVudHMsaW1wb3J0LGluc3RhbmNlb2YsbnVsbCxuYXRpdmUscGFja2FnZSxzdHJpY3RmcCxzdXBlcixzeW5jaHJvbml6ZWQsdGhyb3dzLHRyYW5zaWVudCJdLAorSD1bRywiYXMsYmFzZSxieSxjaGVja2VkLGRlY2ltYWwsZGVsZWdhdGUsZGVzY2VuZGluZyxkeW5hbWljLGV2ZW50LGZpeGVkLGZvcmVhY2gsZnJvbSxncm91cCxpbXBsaWNpdCxpbixpbnRlcmZhY2UsaW50ZXJuYWwsaW50byxpcyxsb2NrLG9iamVjdCxvdXQsb3ZlcnJpZGUsb3JkZXJieSxwYXJhbXMscGFydGlhbCxyZWFkb25seSxyZWYsc2J5dGUsc2VhbGVkLHN0YWNrYWxsb2Msc3RyaW5nLHNlbGVjdCx1aW50LHVsb25nLHVuY2hlY2tlZCx1bnNhZmUsdXNob3J0LHZhciJdLHc9W3csImRlYnVnZ2VyLGV2YWwsZXhwb3J0LGZ1bmN0aW9uLGdldCxudWxsLHNldCx1bmRlZmluZWQsdmFyLHdpdGgsSW5maW5pdHksTmFOIl0sST1bdiwiYW5kLGFzLGFzc2VydCxjbGFzcyxkZWYsZGVsLGVsaWYsZXhjZXB0LGV4ZWMsZmluYWxseSxmcm9tLGdsb2JhbCxpbXBvcnQsaW4saXMsbGFtYmRhLG5vbmxvY2FsLG5vdCxvcixwYXNzLHByaW50LHJhaXNlLHRyeSx3aXRoLHlpZWxkLEZhbHNlLFRydWUsTm9uZSJdLAorSj1bdiwiYWxpYXMsYW5kLGJlZ2luLGNhc2UsY2xhc3MsZGVmLGRlZmluZWQsZWxzaWYsZW5kLGVuc3VyZSxmYWxzZSxpbixtb2R1bGUsbmV4dCxuaWwsbm90LG9yLHJlZG8scmVzY3VlLHJldHJ5LHNlbGYsc3VwZXIsdGhlbix0cnVlLHVuZGVmLHVubGVzcyx1bnRpbCx3aGVuLHlpZWxkLEJFR0lOLEVORCJdLHY9W3YsImNhc2UsZG9uZSxlbGlmLGVzYWMsZXZhbCxmaSxmdW5jdGlvbixpbixsb2NhbCxzZXQsdGhlbix1bnRpbCJdLEs9L14oRElSfEZJTEV8dmVjdG9yfChkZXxwcmlvcml0eV8pP3F1ZXVlfGxpc3R8c3RhY2t8KGNvbnN0Xyk/aXRlcmF0b3J8KG11bHRpKT8oc2V0fG1hcCl8Yml0c2V0fHU/KGludHxmbG9hdClcZCopLyxOPS9cUy8sTz11KHtrZXl3b3JkczpbRixILHcsImNhbGxlcixkZWxldGUsZGllLGRvLGR1bXAsZWxzaWYsZXZhbCxleGl0LGZvcmVhY2gsZm9yLGdvdG8saWYsaW1wb3J0LGxhc3QsbG9jYWwsbXksbmV4dCxubyxvdXIscHJpbnQscGFja2FnZSxyZWRvLHJlcXVpcmUsc3ViLHVuZGVmLHVubGVzcyx1bnRpbCx1c2Usd2FudGFycmF5LHdoaWxlLEJFR0lOLEVORCIrCitJLEosdl0saGFzaENvbW1lbnRzOiEwLGNTdHlsZUNvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITAscmVnZXhMaXRlcmFsczohMH0pLEE9e307ayhPLFsiZGVmYXVsdC1jb2RlIl0pO2soeChbXSxbWyJwbG4iLC9eW148P10rL10sWyJkZWMiLC9ePCFcd1tePl0qKD86PnwkKS9dLFsiY29tIiwvXjxcIS0tW1xTXHNdKj8oPzotLVw+fCQpL10sWyJsYW5nLSIsL148XD8oW1xTXHNdKz8pKD86XD8+fCQpL10sWyJsYW5nLSIsL148JShbXFNcc10rPykoPzolPnwkKS9dLFsicHVuIiwvXig/OjxbJT9dfFslP10+KS9dLFsibGFuZy0iLC9ePHhtcFxiW14+XSo+KFtcU1xzXSs/KTxcL3htcFxiW14+XSo+L2ldLFsibGFuZy1qcyIsL148c2NyaXB0XGJbXj5dKj4oW1xTXHNdKj8pKDxcL3NjcmlwdFxiW14+XSo+KS9pXSxbImxhbmctY3NzIiwvXjxzdHlsZVxiW14+XSo+KFtcU1xzXSo/KSg8XC9zdHlsZVxiW14+XSo+KS9pXSxbImxhbmctaW4udGFnIiwvXig8XC8/W2Etel1bXjw+XSo+KS9pXV0pLAorWyJkZWZhdWx0LW1hcmt1cCIsImh0bSIsImh0bWwiLCJteG1sIiwieGh0bWwiLCJ4bWwiLCJ4c2wiXSk7ayh4KFtbInBsbiIsL15ccysvLHEsIiBcdFxyXG4iXSxbImF0diIsL14oPzoiW14iXSoiP3wnW14nXSonPykvLHEsIlwiJyJdXSxbWyJ0YWciLC9eXjxcLz9bYS16XSg/Oltcdy0uOl0qXHcpP3xcLz8+JC9pXSxbImF0biIsL14oPyFzdHlsZVtccz1dfG9uKVthLXpdKD86W1x3Oi1dKlx3KT8vaV0sWyJsYW5nLXVxLnZhbCIsL149XHMqKFteXHMiJz5dKig/OlteXHMiJy8+XXxcLyg/PVxzKSkpL10sWyJwdW4iLC9eWy88LT5dKy9dLFsibGFuZy1qcyIsL15vblx3K1xzKj1ccyoiKFteIl0rKSIvaV0sWyJsYW5nLWpzIiwvXm9uXHcrXHMqPVxzKicoW14nXSspJy9pXSxbImxhbmctanMiLC9eb25cdytccyo9XHMqKFteXHMiJz5dKykvaV0sWyJsYW5nLWNzcyIsL15zdHlsZVxzKj1ccyoiKFteIl0rKSIvaV0sWyJsYW5nLWNzcyIsL15zdHlsZVxzKj1ccyonKFteJ10rKScvaV0sWyJsYW5nLWNzcyIsCisvXnN0eWxlXHMqPVxzKihbXlxzIic+XSspL2ldXSksWyJpbi50YWciXSk7ayh4KFtdLFtbImF0diIsL15bXFNcc10rL11dKSxbInVxLnZhbCJdKTtrKHUoe2tleXdvcmRzOkYsaGFzaENvbW1lbnRzOiEwLGNTdHlsZUNvbW1lbnRzOiEwLHR5cGVzOkt9KSxbImMiLCJjYyIsImNwcCIsImN4eCIsImN5YyIsIm0iXSk7ayh1KHtrZXl3b3JkczoibnVsbCx0cnVlLGZhbHNlIn0pLFsianNvbiJdKTtrKHUoe2tleXdvcmRzOkgsaGFzaENvbW1lbnRzOiEwLGNTdHlsZUNvbW1lbnRzOiEwLHZlcmJhdGltU3RyaW5nczohMCx0eXBlczpLfSksWyJjcyJdKTtrKHUoe2tleXdvcmRzOkcsY1N0eWxlQ29tbWVudHM6ITB9KSxbImphdmEiXSk7ayh1KHtrZXl3b3Jkczp2LGhhc2hDb21tZW50czohMCxtdWx0aUxpbmVTdHJpbmdzOiEwfSksWyJic2giLCJjc2giLCJzaCJdKTtrKHUoe2tleXdvcmRzOkksaGFzaENvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITAsdHJpcGxlUXVvdGVkU3RyaW5nczohMH0pLAorWyJjdiIsInB5Il0pO2sodSh7a2V5d29yZHM6ImNhbGxlcixkZWxldGUsZGllLGRvLGR1bXAsZWxzaWYsZXZhbCxleGl0LGZvcmVhY2gsZm9yLGdvdG8saWYsaW1wb3J0LGxhc3QsbG9jYWwsbXksbmV4dCxubyxvdXIscHJpbnQscGFja2FnZSxyZWRvLHJlcXVpcmUsc3ViLHVuZGVmLHVubGVzcyx1bnRpbCx1c2Usd2FudGFycmF5LHdoaWxlLEJFR0lOLEVORCIsaGFzaENvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITAscmVnZXhMaXRlcmFsczohMH0pLFsicGVybCIsInBsIiwicG0iXSk7ayh1KHtrZXl3b3JkczpKLGhhc2hDb21tZW50czohMCxtdWx0aUxpbmVTdHJpbmdzOiEwLHJlZ2V4TGl0ZXJhbHM6ITB9KSxbInJiIl0pO2sodSh7a2V5d29yZHM6dyxjU3R5bGVDb21tZW50czohMCxyZWdleExpdGVyYWxzOiEwfSksWyJqcyJdKTtrKHUoe2tleXdvcmRzOiJhbGwsYW5kLGJ5LGNhdGNoLGNsYXNzLGVsc2UsZXh0ZW5kcyxmYWxzZSxmaW5hbGx5LGZvcixpZixpbixpcyxpc250LGxvb3AsbmV3LG5vLG5vdCxudWxsLG9mLG9mZixvbixvcixyZXR1cm4sc3VwZXIsdGhlbix0cnVlLHRyeSx1bmxlc3MsdW50aWwsd2hlbix3aGlsZSx5ZXMiLAoraGFzaENvbW1lbnRzOjMsY1N0eWxlQ29tbWVudHM6ITAsbXVsdGlsaW5lU3RyaW5nczohMCx0cmlwbGVRdW90ZWRTdHJpbmdzOiEwLHJlZ2V4TGl0ZXJhbHM6ITB9KSxbImNvZmZlZSJdKTtrKHgoW10sW1sic3RyIiwvXltcU1xzXSsvXV0pLFsicmVnZXgiXSk7d2luZG93LnByZXR0eVByaW50T25lPWZ1bmN0aW9uKGEsbSxlKXt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQUkUiKTtoLmlubmVySFRNTD1hO2UmJkQoaCxlKTtFKHtnOm0saTplLGg6aH0pO3JldHVybiBoLmlubmVySFRNTH07d2luZG93LnByZXR0eVByaW50PWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIG0oKXtmb3IodmFyIGU9d2luZG93LlBSX1NIT1VMRF9VU0VfQ09OVElOVUFUSU9OP2wubm93KCkrMjUwOkluZmluaXR5O3A8aC5sZW5ndGgmJmwubm93KCk8ZTtwKyspe3ZhciBuPWhbcF0saz1uLmNsYXNzTmFtZTtpZihrLmluZGV4T2YoInByZXR0eXByaW50Iik+PTApe3ZhciBrPWsubWF0Y2goZyksZixiO2lmKGI9Cishayl7Yj1uO2Zvcih2YXIgbz12b2lkIDAsYz1iLmZpcnN0Q2hpbGQ7YztjPWMubmV4dFNpYmxpbmcpdmFyIGk9Yy5ub2RlVHlwZSxvPWk9PT0xP28/YjpjOmk9PT0zP04udGVzdChjLm5vZGVWYWx1ZSk/YjpvOm87Yj0oZj1vPT09Yj92b2lkIDA6bykmJiJDT0RFIj09PWYudGFnTmFtZX1iJiYoaz1mLmNsYXNzTmFtZS5tYXRjaChnKSk7ayYmKGs9a1sxXSk7Yj0hMTtmb3Iobz1uLnBhcmVudE5vZGU7bztvPW8ucGFyZW50Tm9kZSlpZigoby50YWdOYW1lPT09InByZSJ8fG8udGFnTmFtZT09PSJjb2RlInx8by50YWdOYW1lPT09InhtcCIpJiZvLmNsYXNzTmFtZSYmby5jbGFzc05hbWUuaW5kZXhPZigicHJldHR5cHJpbnQiKT49MCl7Yj0hMDticmVha31ifHwoKGI9KGI9bi5jbGFzc05hbWUubWF0Y2goL1xibGluZW51bXNcYig/OjooXGQrKSk/LykpP2JbMV0mJmJbMV0ubGVuZ3RoPytiWzFdOiEwOiExKSYmRChuLGIpLGQ9e2c6ayxoOm4saTpifSxFKGQpKX19cDxoLmxlbmd0aD9zZXRUaW1lb3V0KG0sCisyNTApOmEmJmEoKX1mb3IodmFyIGU9W2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwcmUiKSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY29kZSIpLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ4bXAiKV0saD1bXSxrPTA7azxlLmxlbmd0aDsrK2spZm9yKHZhciB0PTAscz1lW2tdLmxlbmd0aDt0PHM7Kyt0KWgucHVzaChlW2tdW3RdKTt2YXIgZT1xLGw9RGF0ZTtsLm5vd3x8KGw9e25vdzpmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX19KTt2YXIgcD0wLGQsZz0vXGJsYW5nKD86dWFnZSk/LShbXHcuXSspKD8hXFMpLzttKCl9O3dpbmRvdy5QUj17Y3JlYXRlU2ltcGxlTGV4ZXI6eCxyZWdpc3RlckxhbmdIYW5kbGVyOmssc291cmNlRGVjb3JhdG9yOnUsUFJfQVRUUklCX05BTUU6ImF0biIsUFJfQVRUUklCX1ZBTFVFOiJhdHYiLFBSX0NPTU1FTlQ6ImNvbSIsUFJfREVDTEFSQVRJT046ImRlYyIsUFJfS0VZV09SRDoia3dkIixQUl9MSVRFUkFMOiJsaXQiLAorUFJfTk9DT0RFOiJub2NvZGUiLFBSX1BMQUlOOiJwbG4iLFBSX1BVTkNUVUFUSU9OOiJwdW4iLFBSX1NPVVJDRToic3JjIixQUl9TVFJJTkc6InN0ciIsUFJfVEFHOiJ0YWciLFBSX1RZUEU6InR5cCJ9fSkoKTsKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMveGJyZWFkY3J1bWJzLmpzIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvanMvbGlicy94YnJlYWRjcnVtYnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTNiNmUyNQotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL2pzL2xpYnMveGJyZWFkY3J1bWJzLmpzCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisJeEJyZWFkY3J1bWJzIChFeHRlbmRlZCBCcmVhZGNydW1zKSBqUXVlcnkgUGx1Z2luCisJqSAyMDA5IGFqYXhCbGVuZGVyLmNvbQorCUZvciBhbnkgcXVlc3Rpb25zIHBsZWFzZSB2aXNpdCB3d3cuYWpheGJsZW5kZXIuY29tIAorCW9yIGVtYWlsIHVzIGF0IHN1cHBvcnRAYWpheGJsZW5kZXIuY29tCisqLworCis7KGZ1bmN0aW9uKCQpeworCS8qICBWYXJpYWJsZXMgICovCisJJC5mbi54QnJlYWRjcnVtYnMgPSBmdW5jdGlvbihzZXR0aW5ncyl7CisJCXZhciBlbGVtZW50ID0gJCh0aGlzKTsKKwkJdmFyIAorCQkKKwkJc2V0dGluZ3MgPSAkLmV4dGVuZCh7fSwgJC5mbi54QnJlYWRjcnVtYnMuZGVmYXVsdHMsIHNldHRpbmdzKTsKKworCQlmdW5jdGlvbiBfYnVpbGQoKXsKKwkJCWlmKHNldHRpbmdzLmNvbGxhcHNpYmxlKXsKKwkJCQl2YXIgc3ogPSBlbGVtZW50LmNoaWxkcmVuKCdMSScpLmxlbmd0aDsKKwkJCQllbGVtZW50LmNoaWxkcmVuKCdMSScpLmNoaWxkcmVuKCdBJykuY3NzKCd3aGl0ZS1zcGFjZScsICdub3dyYXAnKS5jc3MoJ2Zsb2F0JywgJ2xlZnQnKTsKKwkJCQllbGVtZW50LmNoaWxkcmVuKCdMSScpLmNoaWxkcmVuKCdBJykuZWFjaChmdW5jdGlvbihpLCBlbCl7CisJCQkJCWlmKGkgIT0gc3ogLSAxKXsKKwkJCQkJCSQodGhpcykuY3NzKCdvdmVyZmxvdycsICdoaWRkZW4nKTsKKwkJCQkJCSQodGhpcykuYXR0cignaW5pdC13aWR0aCcsICQodGhpcykud2lkdGgoKSk7CisJCQkJCQkkKHRoaXMpLndpZHRoKHNldHRpbmdzLmNvbGxhcHNlZFdpZHRoKTsKKwkJCQkJfQorCQkJCX0pOworCQkJfQorCQkJCisgICAgICAgICAgICBlbGVtZW50LmNoaWxkcmVuKCdMSScpLm1vdXNlZW50ZXIoZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICBpZigkKHRoaXMpLmhhc0NsYXNzKCdob3ZlcicpKXsgcmV0dXJuOyB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAJX2hpZGVBbGxTdWJMZXZlbHMoKTsKKyAgICAgICAgICAgIAlpZighX3N1YkxldmVsRXhpc3RzKCQodGhpcykpKXsgcmV0dXJuOyB9CisKKyAgICAgICAgICAgIAkvLyBTaG93IHN1Yi1sZXZlbAorICAgICAgICAgICAgCXZhciBzdWJMZXZlbCA9ICQodGhpcykuY2hpbGRyZW4oJ1VMJyk7CisgICAgICAgICAgICAJX3Nob3dIaWRlU3ViTGV2ZWwoc3ViTGV2ZWwsIHRydWUpOworICAgICAgICAgICAgCQorICAgICAgICAgICAgCWlmKHNldHRpbmdzLmNvbGxhcHNpYmxlICYmICEkKHRoaXMpLmhhc0NsYXNzKCdjdXJyZW50JykpeworICAgICAgICAgICAgCQl2YXIgaW5pdFdpZHRoID0gJCh0aGlzKS5jaGlsZHJlbignQScpLmF0dHIoJ2luaXQtd2lkdGgnKTsKKyAgICAgICAgICAgIAkJJCh0aGlzKS5jaGlsZHJlbignQScpLmFuaW1hdGUoe3dpZHRoOiBpbml0V2lkdGh9LCAnbm9ybWFsJyk7CisgICAgICAgICAgICAJfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGVsZW1lbnQuY2hpbGRyZW4oJ0xJJykubW91c2VsZWF2ZShmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIHZhciBzdWJMZXZlbCA9ICQodGhpcykuY2hpbGRyZW4oJ1VMJyk7CisgICAgICAgICAgICAgICAgX3Nob3dIaWRlU3ViTGV2ZWwoc3ViTGV2ZWwsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZihzZXR0aW5ncy5jb2xsYXBzaWJsZSAmJiAhJCh0aGlzKS5oYXNDbGFzcygnY3VycmVudCcpKXsKKyAgICAgICAgICAgICAgICAJJCh0aGlzKS5jaGlsZHJlbignQScpLmFuaW1hdGUoe3dpZHRoOiBzZXR0aW5ncy5jb2xsYXBzZWRXaWR0aH0sICdmYXN0Jyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisJCX07CisJCQorCQlmdW5jdGlvbiBfaGlkZUFsbFN1YkxldmVscygpeworCQkJZWxlbWVudC5jaGlsZHJlbignTEknKS5jaGlsZHJlbignVUwnKS5lYWNoKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgJCh0aGlzKS5oaWRlKCk7CisgICAgICAgICAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaG92ZXInKTsKKwkJCX0pOworCQl9OworCQkKKwkJZnVuY3Rpb24gX3Nob3dIaWRlU3ViTGV2ZWwoc3ViTGV2ZWwsIGlzU2hvdyl7CisJCQlpZihpc1Nob3cpeworICAgICAgICAgICAgICAgIHN1YkxldmVsLnBhcmVudCgpLmFkZENsYXNzKCdob3ZlcicpOworICAgICAgICAgICAgICAgIGlmKCQuYnJvd3Nlci5tc2llKXsKKyAgICAgICAgICAgICAgICAJdmFyIHBvcyA9IHN1YkxldmVsLnBhcmVudCgpLnBvc2l0aW9uKCk7CisgICAgICAgICAgICAgICAgCXN1YkxldmVsLmNzcygnbGVmdCcsIHBhcnNlSW50KHBvc1snbGVmdCddKSk7CisgICAgICAgICAgICAgICAgfQorCQkJCWlmKHNldHRpbmdzLnNob3dTcGVlZCAhPSAnJyl7IHN1YkxldmVsLmZhZGVJbiggc2V0dGluZ3Muc2hvd1NwZWVkICk7IH0gCisJCQkJZWxzZSB7IHN1YkxldmVsLnNob3coKTsgfQorCQkJfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdWJMZXZlbC5wYXJlbnQoKS5yZW1vdmVDbGFzcygnaG92ZXInKTsKKyAgICAgICAgICAgICAgICBpZihzZXR0aW5ncy5oaWRlU3BlZWQgIT0gJycpeyBzdWJMZXZlbC5mYWRlT3V0KCBzZXR0aW5ncy5oaWRlU3BlZWQgKTsgfSAKKyAgICAgICAgICAgICAgICBlbHNlIHsgc3ViTGV2ZWwuaGlkZSgpOyB9CisJCQl9CisJCX07CisJCQorCQlmdW5jdGlvbiBfc3ViTGV2ZWxFeGlzdHMob2JqKXsKKwkJCXJldHVybiBvYmouY2hpbGRyZW4oJ1VMJykubGVuZ3RoID4gMDsKKwkJfTsKKwkJCisJCS8vICAgIEVudHJ5IHBvaW50CisJCV9idWlsZCgpOworCX07CisJCisJLyogIERlZmF1bHQgU2V0dGluZ3MgICovCisJJC5mbi54QnJlYWRjcnVtYnMuZGVmYXVsdHMgPSB7CisJCXNob3dTcGVlZDogICAgICAgICdmYXN0JywKKwkJaGlkZVNwZWVkOiAgICAgICAgJycsCisJCWNvbGxhcHNpYmxlOiAgICAgIGZhbHNlLAorCQljb2xsYXBzZWRXaWR0aDogICAxMAorCX07Cit9KShqUXVlcnkpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvYXBpL21vZGVsLmh0bWwgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9tb2RlbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MGJmZGEKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9tb2RlbC5odG1sCkBAIC0wLDAgKzEsMTExIEBACis8IWRvY3R5cGUgaHRtbD4KKzwhLS0gcGF1bGlyaXNoLmNvbS8yMDA4L2NvbmRpdGlvbmFsLXN0eWxlc2hlZXRzLXZzLWNzcy1oYWNrcy1hbnN3ZXItbmVpdGhlci8gLS0+Cis8IS0tW2lmIGx0IElFIDcgXT4gPGh0bWwgY2xhc3M9Im5vLWpzIGllNiIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4KKzwhLS1baWYgSUUgNyBdPiAgICA8aHRtbCBjbGFzcz0ibm8tanMgaWU3IiBsYW5nPSJlbiI+IDwhW2VuZGlmXS0tPgorPCEtLVtpZiBJRSA4IF0+ICAgIDxodG1sIGNsYXNzPSJuby1qcyBpZTgiIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cis8IS0tW2lmIChndGUgSUUgOSl8IShJRSldPjwhLS0+IDxodG1sIGNsYXNzPSJuby1qcyIgbGFuZz0iZW4iPiA8IS0tPCFbZW5kaWZdLS0+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorCisgIDwhLS0gQWx3YXlzIGZvcmNlIGxhdGVzdCBJRSByZW5kZXJpbmcgZW5naW5lIChldmVuIGluIGludHJhbmV0KSAmIENocm9tZSBGcmFtZQorICAgICAgIFJlbW92ZSB0aGlzIGlmIHlvdSB1c2UgdGhlIC5odGFjY2VzcyAtLT4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlLGNocm9tZT0xIj4KKworICA8dGl0bGU+RGF0YSBNb2RlbDwvdGl0bGU+CisKKyAgPCEtLSBNb2JpbGUgdmlld3BvcnQgb3B0aW1pemVkOiBqLm1wL2JwbGF0ZXZpZXdwb3J0IC0tPgorICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CisKKyAgPCEtLSBDU1M6IGltcGxpZWQgbWVkaWE9ImFsbCIgLS0+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3N0eWxlLmNzcz92PTIiPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9wcmV0dGlmeS5jc3MiPgorCisgIDwhLS0gQWxsIEphdmFTY3JpcHQgYXQgdGhlIGJvdHRvbSwgZXhjZXB0IGZvciBNb2Rlcm5penIgd2hpY2ggZW5hYmxlcyBIVE1MNSBlbGVtZW50cyAmIGZlYXR1cmUgZGV0ZWN0cyAtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvbW9kZXJuaXpyLTEuNy5taW4uanMiPjwvc2NyaXB0PgorCis8L2hlYWQ+CisKKzxib2R5IGNsYXNzPSJob21lIj4KKworICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgIDxoZWFkZXI+CisgICAgICA8ZGl2IGlkPSJoZWFkZXIiIGNsYXNzPSJjb2x1bW4gZmlyc3QgbGFzdCBzcGFuLTIwIj4KKyAgICAgICAgPGRpdiBpZD0ic2l0ZS1uYW1lIiBjbGFzcz0iY29sdW1uIHNwYW4tMTggYXBwZW5kLTEgcHJlcGVuZC0xIGZpcnN0IGxhc3QiPjxhIGhyZWY9ImluZGV4Lmh0bWwiPkRhdGEgTW9kZWw8L2E+PC9kaXY+CisgICAgICAgIDxkaXYgaWQ9InByaW1hcnkiIGNsYXNzPSJjb2x1bW4gc3Bhbi0xOCBhcHBlbmQtMSBwcmVwZW5kLTEgZmlyc3QgbGFzdCI+CisgICAgICAgICAgPHVsIGNsYXNzPSJuYXZpZ2F0aW9uIj4KKyAgICAgICAgICAgIDxsaSBpZD0ibmF2LXJlc3QiPjxhIGhyZWY9InJlc3QuaHRtbCI+UkVTVDwvYT48L2xpPgorICAgICAgICAgICAgPGxpIGlkPSJuYXYtZGF0YSI+PGEgaHJlZj0ibW9kZWwuaHRtbCI+RGF0YSBNb2RlbDwvYT48L2xpPgorICAgICAgICAgIDwvdWw+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2PgorICAgICAgICAgIDx1bCBjbGFzcz0ieGJyZWFkY3J1bWJzIiBpZD0iYnJlYWRjcnVtYnMiPgorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICA8YSBocmVmPSJpbmRleC5odG1sIiBjbGFzcz0iaG9tZSI+SG9tZTwvYT4gJmd0OworICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0iY3VycmVudCI+CisgICAgICAgICAgICAgIDxhIGhyZWY9Im1vZGVsLmh0bWwiPkRhdGEgTW9kZWw8L2E+CisgICAgICAgICAgICAgIDx1bD4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ibW9kZWwuaHRtbCI+RGF0YSBNb2RlbDwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXN0Lmh0bWwiPlJFU1Q8L2E+PC9saT4KKyAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2hlYWRlcj4KKyAgICA8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29sdW1uIGZpcnN0IGxhc3Qgc3Bhbi0yMCI+CisgICAgPGgxPkRhdGEgTW9kZWw8L2gxPgorCisgICAgPHA+CisgICAgICBBbGwgZW5kcG9pbnRzIGFjdCBvbiBhIGNvbW1vbiBzZXQgb2YgZGF0YS4gVGhlIGRhdGEgY2FuIGJlIHJlcHJlc2VudGVkIHdpdGggZGlmZmVyZW5jZSBtZWRpYSAoaS5lLiAiTUlNRSIpIHR5cGVzLCBkZXBlbmRpbmcgb24gdGhlIGVuZHBvaW50CisgICAgICB0aGF0IGNvbnN1bWVzIGFuZC9vciBwcm9kdWNlcyB0aGUgZGF0YS4gVGhlIGRhdGEgY2FuIGRlc2NyaWJlZCBieSA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvU2NoZW1hIj5YTUwgU2NoZW1hPC9hPiwgd2hpY2ggZGVmaW5pdGl2ZWx5CisgICAgICBkZXNjcmliZXMgdGhlIFhNTCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF0YSwgYnV0IGlzIGFsc28gdXNlZnVsIGZvciBkZXNjcmliaW5nIHRoZSBvdGhlciBmb3JtYXRzIG9mIHRoZSBkYXRhLCBzdWNoIGFzIDxhIGhyZWY9Imh0dHA6Ly9qc29uLm9yZyI+SlNPTjwvYT4uCisgICAgPC9wPgorCisgICAgPHA+CisgICAgICBUaGlzIGRvY3VtZW50IHdpbGwgZGVzY3JpYmUgdGhlIGRhdGEgdXNpbmcgdGVybXMgYmFzZWQgb24gPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvWE1ML1NjaGVtYSI+WE1MIFNjaGVtYTwvYT4uCisgICAgICBEYXRhIGNhbiBiZSBncm91cGVkIGJ5IG5hbWVzcGFjZSwgd2l0aCBhIHNjaGVtYSBkb2N1bWVudCBkZXNjcmliaW5nIHRoZSA8aT5lbGVtZW50czwvaT4gYW5kIDxpPnR5cGVzPC9pPiBvZiB0aGUgbmFtZXNwYWNlLgorICAgICAgR2VuZXJhbGx5IHNwZWFraW5nLCA8aT50eXBlczwvaT4gZGVmaW5lIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGRhdGEgYW5kIDxpPmVsZW1lbnRzPC9pPiBhcmUgPGk+aW5zdGFuY2VzPC9pPiBvZiBhIHR5cGUuIEZvciBleGFtcGxlLAorICAgICAgPGk+ZWxlbWVudHM8L2k+IGFyZSB1c3VhbGx5IHByb2R1Y2VkIGJ5IChvciBjb25zdW1lZCBieSkgYSBSRVNUIGVuZHBvaW50LCBhbmQgdGhlIHN0cnVjdHVyZSBvZiBlYWNoIGVsZW1lbnQgaXMgZGVzY3JpYmVkIGJ5CisgICAgICBpdHMgPGk+dHlwZTwvaT4uCisgICAgPC9wPgorCisgICAgICA8ZGl2IGNsYXNzPSJjbGVhciIgLz4KKyAgICA8L2Rpdj4KKyAgICA8Zm9vdGVyPgorICAgICAgPGRpdiBpZD0iZm9vdGVyIj4KKyAgICAgICAgR2VuZXJhdGVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly9lbnVuY2lhdGUuY29kZWhhdXMub3JnIj5FbnVuY2lhdGU8L2E+LgorICAgICAgPC9kaXY+CisgICAgPC9mb290ZXI+CisgIDwvZGl2PiA8IS0tISBlbmQgb2YgI2NvbnRhaW5lciAtLT4KKworICA8IS0tIEphdmFTY3JpcHQgYXQgdGhlIGJvdHRvbSBmb3IgZmFzdCBwYWdlIGxvYWRpbmcgLS0+CisKKyAgPCEtLSBHcmFiIEdvb2dsZSBDRE4ncyBqUXVlcnksIHdpdGggYSBwcm90b2NvbCByZWxhdGl2ZSBVUkw7IGZhbGwgYmFjayB0byBsb2NhbCBpZiBuZWNlc3NhcnkgLS0+CisgIDxzY3JpcHQgc3JjPSIvL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjUuMS9qcXVlcnkuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PndpbmRvdy5qUXVlcnkgfHwgZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgc3JjPSdqcy9saWJzL2pxdWVyeS0xLjUuMS5taW4uanMnPlx4M0Mvc2NyaXB0PiIpPC9zY3JpcHQ+CisKKyAgPCEtLW1hbmFnZSB0aGUgbmF2aWdhdGlvbiBtZW51LS0+CisgIDxzY3JpcHQgc3JjPSJqcy9saWJzL3hicmVhZGNydW1icy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+CisgICAgJChmdW5jdGlvbigpIHsKKyAgICAgICQoJyNicmVhZGNydW1icycpLnhCcmVhZGNydW1icygpOworICAgIH0pOworICA8L3NjcmlwdD4KKworCisgIDwhLS0gcHJldHRpZnkgY29kZSBibG9ja3MuIHNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ29vZ2xlLWNvZGUtcHJldHRpZnkvIC0tPgorICA8c2NyaXB0IHNyYz0ianMvbGlicy9wcmV0dGlmeS9wcmV0dGlmeS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+CisgICAgJChmdW5jdGlvbigpIHsKKyAgICAgIHByZXR0eVByaW50KCk7CisgICAgfSk7CisgIDwvc2NyaXB0PgorCisgIDwhLS1baWYgbHQgSUUgNyBdPgorICAgIDxzY3JpcHQgc3JjPSJqcy9saWJzL2RkX2JlbGF0ZWRwbmcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+RERfYmVsYXRlZFBORy5maXgoImltZywgLnBuZ19iZyIpOyAvLyBGaXggYW55IDxpbWc+IG9yIC5wbmdfYmcgYmctaW1hZ2VzLiBBbHNvLCBwbGVhc2UgcmVhZCBnb28uZ2wvbVppeWIgPC9zY3JpcHQ+CisgIDwhW2VuZGlmXS0tPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2FwaS9yZXNvdXJjZV9BZG1pblJlc291cmNlLmh0bWwgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9yZXNvdXJjZV9BZG1pblJlc291cmNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThhYjEwYQotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL3Jlc291cmNlX0FkbWluUmVzb3VyY2UuaHRtbApAQCAtMCwwICsxLDE1NyBAQAorPCFkb2N0eXBlIGh0bWw+Cis8IS0tIHBhdWxpcmlzaC5jb20vMjAwOC9jb25kaXRpb25hbC1zdHlsZXNoZWV0cy12cy1jc3MtaGFja3MtYW5zd2VyLW5laXRoZXIvIC0tPgorPCEtLVtpZiBsdCBJRSA3IF0+IDxodG1sIGNsYXNzPSJuby1qcyBpZTYiIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cis8IS0tW2lmIElFIDcgXT4gICAgPGh0bWwgY2xhc3M9Im5vLWpzIGllNyIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4KKzwhLS1baWYgSUUgOCBdPiAgICA8aHRtbCBjbGFzcz0ibm8tanMgaWU4IiBsYW5nPSJlbiI+IDwhW2VuZGlmXS0tPgorPCEtLVtpZiAoZ3RlIElFIDkpfCEoSUUpXT48IS0tPiA8aHRtbCBjbGFzcz0ibm8tanMiIGxhbmc9ImVuIj4gPCEtLTwhW2VuZGlmXS0tPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKworICA8IS0tIEFsd2F5cyBmb3JjZSBsYXRlc3QgSUUgcmVuZGVyaW5nIGVuZ2luZSAoZXZlbiBpbiBpbnRyYW5ldCkgJiBDaHJvbWUgRnJhbWUKKyAgICAgICBSZW1vdmUgdGhpcyBpZiB5b3UgdXNlIHRoZSAuaHRhY2Nlc3MgLS0+CisgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+CisKKyAgPHRpdGxlPkFkbWluUmVzb3VyY2U8L3RpdGxlPgorCisgIDwhLS0gTW9iaWxlIHZpZXdwb3J0IG9wdGltaXplZDogai5tcC9icGxhdGV2aWV3cG9ydCAtLT4KKyAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgorCisgIDwhLS0gQ1NTOiBpbXBsaWVkIG1lZGlhPSJhbGwiIC0tPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9zdHlsZS5jc3M/dj0yIj4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvcHJldHRpZnkuY3NzIj4KKworICA8IS0tIEFsbCBKYXZhU2NyaXB0IGF0IHRoZSBib3R0b20sIGV4Y2VwdCBmb3IgTW9kZXJuaXpyIHdoaWNoIGVuYWJsZXMgSFRNTDUgZWxlbWVudHMgJiBmZWF0dXJlIGRldGVjdHMgLS0+CisgIDxzY3JpcHQgc3JjPSJqcy9saWJzL21vZGVybml6ci0xLjcubWluLmpzIj48L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBjbGFzcz0iaG9tZSI+CisKKyAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICA8aGVhZGVyPgorICAgICAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iY29sdW1uIGZpcnN0IGxhc3Qgc3Bhbi0yMCI+CisgICAgICAgIDxkaXYgaWQ9InNpdGUtbmFtZSIgY2xhc3M9ImNvbHVtbiBzcGFuLTE4IGFwcGVuZC0xIHByZXBlbmQtMSBmaXJzdCBsYXN0Ij48YSBocmVmPSJpbmRleC5odG1sIj5BZG1pblJlc291cmNlPC9hPjwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJwcmltYXJ5IiBjbGFzcz0iY29sdW1uIHNwYW4tMTggYXBwZW5kLTEgcHJlcGVuZC0xIGZpcnN0IGxhc3QiPgorICAgICAgICAgIDx1bCBjbGFzcz0ibmF2aWdhdGlvbiI+CisgICAgICAgICAgICA8bGkgaWQ9Im5hdi1yZXN0Ij48YSBocmVmPSJyZXN0Lmh0bWwiPlJFU1Q8L2E+PC9saT4KKyAgICAgICAgICAgIDxsaSBpZD0ibmF2LWRhdGEiPjxhIGhyZWY9Im1vZGVsLmh0bWwiPkRhdGEgTW9kZWw8L2E+PC9saT4KKyAgICAgICAgICA8L3VsPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdj4KKyAgICAgICAgICA8dWwgY2xhc3M9InhicmVhZGNydW1icyIgaWQ9ImJyZWFkY3J1bWJzIj4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgY2xhc3M9ImhvbWUiPkhvbWU8L2E+ICZndDsKKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgIDxhIGhyZWY9InJlc3QuaHRtbCI+UkVTVDwvYT4gJmd0OworICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Im1vZGVsLmh0bWwiPkRhdGEgTW9kZWw8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzdC5odG1sIj5SRVNUPC9hPjwvbGk+CisgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPGxpIGNsYXNzPSJjdXJyZW50Ij4KKyAgICAgICAgICAgICAgPGEgaHJlZj0icmVzb3VyY2VfQWRtaW5SZXNvdXJjZS5odG1sIj5BZG1pblJlc291cmNlPC9hPgorICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX0FkbWluUmVzb3VyY2UuaHRtbCI+QWRtaW5SZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9FbnRpdHlSZXNvdXJjZS5odG1sIj5FbnRpdHlSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9IaXZlTGluZWFnZVJlc291cmNlLmh0bWwiPkhpdmVMaW5lYWdlUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfTWV0YWRhdGFEaXNjb3ZlcnlSZXNvdXJjZS5odG1sIj5NZXRhZGF0YURpc2NvdmVyeVJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX1JleHN0ZXJHcmFwaFJlc291cmNlLmh0bWwiPlJleHN0ZXJHcmFwaFJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX1R5cGVzUmVzb3VyY2UuaHRtbCI+VHlwZXNSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICA8L3VsPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvaGVhZGVyPgorICAgIDxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb2x1bW4gZmlyc3QgbGFzdCBzcGFuLTIwIj4KKyAgICAgIDxoMT5BZG1pblJlc291cmNlPC9oMT4KKworICAgICAgPHA+SmVyc2V5IFJlc291cmNlIGZvciBhZG1pbiBvcGVyYXRpb25zLjwvcD4KKyAgICAgIDxwPlRoZSBmb2xsb3dpbmcgcmVzb3VyY2VzIGFyZSBhcHBsaWNhYmxlOjwvcD4KKyAgICAgIDx1bD4KKyAgICAgICAgPGxpPgorICAgICAgICA8YSBocmVmPSIjcGF0aF9fYWRtaW5fc3RhY2suaHRtbCI+L2FkbWluL3N0YWNrPC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGk+CisgICAgICAgIDxhIGhyZWY9IiNwYXRoX19hZG1pbl92ZXJzaW9uLmh0bWwiPi9hZG1pbi92ZXJzaW9uPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPC91bD4KKyAgICAgICAgPGEgbmFtZT0icGF0aF9fYWRtaW5fc3RhY2suaHRtbCI+PC9hPgorICAgICAgPGgxPi9hZG1pbi9zdGFjazwvaDE+CisgICAgICA8YSBuYW1lPSJHRVQiPjwvYT4KKyAgICAgIDxoMj5HRVQ8L2gyPgorICAgICAgPHA+CisgICAgICAgICAgICBGZXRjaGVzIHRoZSB0aHJlYWQgc3RhY2sgZHVtcCBmb3IgdGhpcyBhcHBsaWNhdGlvbi4KKyAgICAgICAgICA8L3A+CisgICAgICA8aDM+UmVzcG9uc2UgQm9keTwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5lbGVtZW50OjwvdGQ+CisgICAgICAgICAgPHRkPihjdXN0b20pPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPm1lZGlhIHR5cGVzOjwvdGQ+CisgICAgICAgICAgPHRkPnRleHQvcGxhaW48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxwPmpzb24gcmVwcmVzZW50aW5nIHRoZSB0aHJlYWQgc3RhY2sgZHVtcC48L3A+CisgICAgICAgIDxhIG5hbWU9InBhdGhfX2FkbWluX3ZlcnNpb24uaHRtbCI+PC9hPgorICAgICAgPGgxPi9hZG1pbi92ZXJzaW9uPC9oMT4KKyAgICAgIDxhIG5hbWU9IkdFVCI+PC9hPgorICAgICAgPGgyPkdFVDwvaDI+CisgICAgICA8cD4KKyAgICAgICAgICAgIEZldGNoZXMgdGhlIHZlcnNpb24gZm9yIHRoaXMgYXBwbGljYXRpb24uCisgICAgICAgICAgPC9wPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD5qc29uIHJlcHJlc2VudGluZyB0aGUgdmVyc2lvbi48L3A+CisKKyAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIiAvPgorICAgIDwvZGl2PgorICAgIDxmb290ZXI+CisgICAgICA8ZGl2IGlkPSJmb290ZXIiPgorICAgICAgICBHZW5lcmF0ZWQgYnkgPGEgaHJlZj0iaHR0cDovL2VudW5jaWF0ZS5jb2RlaGF1cy5vcmciPkVudW5jaWF0ZTwvYT4uCisgICAgICA8L2Rpdj4KKyAgICA8L2Zvb3Rlcj4KKyAgPC9kaXY+IDwhLS0hIGVuZCBvZiAjY29udGFpbmVyIC0tPgorCisgIDwhLS0gSmF2YVNjcmlwdCBhdCB0aGUgYm90dG9tIGZvciBmYXN0IHBhZ2UgbG9hZGluZyAtLT4KKworICA8IS0tIEdyYWIgR29vZ2xlIENETidzIGpRdWVyeSwgd2l0aCBhIHByb3RvY29sIHJlbGF0aXZlIFVSTDsgZmFsbCBiYWNrIHRvIGxvY2FsIGlmIG5lY2Vzc2FyeSAtLT4KKyAgPHNjcmlwdCBzcmM9Ii8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuNS4xL2pxdWVyeS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+d2luZG93LmpRdWVyeSB8fCBkb2N1bWVudC53cml0ZSgiPHNjcmlwdCBzcmM9J2pzL2xpYnMvanF1ZXJ5LTEuNS4xLm1pbi5qcyc+XHgzQy9zY3JpcHQ+Iik8L3NjcmlwdD4KKworICA8IS0tbWFuYWdlIHRoZSBuYXZpZ2F0aW9uIG1lbnUtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMveGJyZWFkY3J1bWJzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD4KKyAgICAkKGZ1bmN0aW9uKCkgeworICAgICAgJCgnI2JyZWFkY3J1bWJzJykueEJyZWFkY3J1bWJzKCk7CisgICAgfSk7CisgIDwvc2NyaXB0PgorCisKKyAgPCEtLSBwcmV0dGlmeSBjb2RlIGJsb2Nrcy4gc2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nb29nbGUtY29kZS1wcmV0dGlmeS8gLS0+CisgIDxzY3JpcHQgc3JjPSJqcy9saWJzL3ByZXR0aWZ5L3ByZXR0aWZ5LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD4KKyAgICAkKGZ1bmN0aW9uKCkgeworICAgICAgcHJldHR5UHJpbnQoKTsKKyAgICB9KTsKKyAgPC9zY3JpcHQ+CisKKyAgPCEtLVtpZiBsdCBJRSA3IF0+CisgICAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvZGRfYmVsYXRlZHBuZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD5ERF9iZWxhdGVkUE5HLmZpeCgiaW1nLCAucG5nX2JnIik7IC8vIEZpeCBhbnkgPGltZz4gb3IgLnBuZ19iZyBiZy1pbWFnZXMuIEFsc28sIHBsZWFzZSByZWFkIGdvby5nbC9tWml5YiA8L3NjcmlwdD4KKyAgPCFbZW5kaWZdLS0+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvYXBpL3Jlc291cmNlX0VudGl0eVJlc291cmNlLmh0bWwgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9yZXNvdXJjZV9FbnRpdHlSZXNvdXJjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViOWI3NDgKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9yZXNvdXJjZV9FbnRpdHlSZXNvdXJjZS5odG1sCkBAIC0wLDAgKzEsMzgxIEBACis8IWRvY3R5cGUgaHRtbD4KKzwhLS0gcGF1bGlyaXNoLmNvbS8yMDA4L2NvbmRpdGlvbmFsLXN0eWxlc2hlZXRzLXZzLWNzcy1oYWNrcy1hbnN3ZXItbmVpdGhlci8gLS0+Cis8IS0tW2lmIGx0IElFIDcgXT4gPGh0bWwgY2xhc3M9Im5vLWpzIGllNiIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4KKzwhLS1baWYgSUUgNyBdPiAgICA8aHRtbCBjbGFzcz0ibm8tanMgaWU3IiBsYW5nPSJlbiI+IDwhW2VuZGlmXS0tPgorPCEtLVtpZiBJRSA4IF0+ICAgIDxodG1sIGNsYXNzPSJuby1qcyBpZTgiIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cis8IS0tW2lmIChndGUgSUUgOSl8IShJRSldPjwhLS0+IDxodG1sIGNsYXNzPSJuby1qcyIgbGFuZz0iZW4iPiA8IS0tPCFbZW5kaWZdLS0+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorCisgIDwhLS0gQWx3YXlzIGZvcmNlIGxhdGVzdCBJRSByZW5kZXJpbmcgZW5naW5lIChldmVuIGluIGludHJhbmV0KSAmIENocm9tZSBGcmFtZQorICAgICAgIFJlbW92ZSB0aGlzIGlmIHlvdSB1c2UgdGhlIC5odGFjY2VzcyAtLT4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlLGNocm9tZT0xIj4KKworICA8dGl0bGU+RW50aXR5UmVzb3VyY2U8L3RpdGxlPgorCisgIDwhLS0gTW9iaWxlIHZpZXdwb3J0IG9wdGltaXplZDogai5tcC9icGxhdGV2aWV3cG9ydCAtLT4KKyAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgorCisgIDwhLS0gQ1NTOiBpbXBsaWVkIG1lZGlhPSJhbGwiIC0tPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9zdHlsZS5jc3M/dj0yIj4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvcHJldHRpZnkuY3NzIj4KKworICA8IS0tIEFsbCBKYXZhU2NyaXB0IGF0IHRoZSBib3R0b20sIGV4Y2VwdCBmb3IgTW9kZXJuaXpyIHdoaWNoIGVuYWJsZXMgSFRNTDUgZWxlbWVudHMgJiBmZWF0dXJlIGRldGVjdHMgLS0+CisgIDxzY3JpcHQgc3JjPSJqcy9saWJzL21vZGVybml6ci0xLjcubWluLmpzIj48L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBjbGFzcz0iaG9tZSI+CisKKyAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICA8aGVhZGVyPgorICAgICAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iY29sdW1uIGZpcnN0IGxhc3Qgc3Bhbi0yMCI+CisgICAgICAgIDxkaXYgaWQ9InNpdGUtbmFtZSIgY2xhc3M9ImNvbHVtbiBzcGFuLTE4IGFwcGVuZC0xIHByZXBlbmQtMSBmaXJzdCBsYXN0Ij48YSBocmVmPSJpbmRleC5odG1sIj5FbnRpdHlSZXNvdXJjZTwvYT48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0icHJpbWFyeSIgY2xhc3M9ImNvbHVtbiBzcGFuLTE4IGFwcGVuZC0xIHByZXBlbmQtMSBmaXJzdCBsYXN0Ij4KKyAgICAgICAgICA8dWwgY2xhc3M9Im5hdmlnYXRpb24iPgorICAgICAgICAgICAgPGxpIGlkPSJuYXYtcmVzdCI+PGEgaHJlZj0icmVzdC5odG1sIj5SRVNUPC9hPjwvbGk+CisgICAgICAgICAgICA8bGkgaWQ9Im5hdi1kYXRhIj48YSBocmVmPSJtb2RlbC5odG1sIj5EYXRhIE1vZGVsPC9hPjwvbGk+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXY+CisgICAgICAgICAgPHVsIGNsYXNzPSJ4YnJlYWRjcnVtYnMiIGlkPSJicmVhZGNydW1icyI+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIGNsYXNzPSJob21lIj5Ib21lPC9hPiAmZ3Q7CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICA8YSBocmVmPSJyZXN0Lmh0bWwiPlJFU1Q8L2E+ICZndDsKKyAgICAgICAgICAgICAgPHVsPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJtb2RlbC5odG1sIj5EYXRhIE1vZGVsPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc3QuaHRtbCI+UkVTVDwvYT48L2xpPgorICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0iY3VycmVudCI+CisgICAgICAgICAgICAgIDxhIGhyZWY9InJlc291cmNlX0VudGl0eVJlc291cmNlLmh0bWwiPkVudGl0eVJlc291cmNlPC9hPgorICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX0FkbWluUmVzb3VyY2UuaHRtbCI+QWRtaW5SZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9FbnRpdHlSZXNvdXJjZS5odG1sIj5FbnRpdHlSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9IaXZlTGluZWFnZVJlc291cmNlLmh0bWwiPkhpdmVMaW5lYWdlUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfTWV0YWRhdGFEaXNjb3ZlcnlSZXNvdXJjZS5odG1sIj5NZXRhZGF0YURpc2NvdmVyeVJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX1JleHN0ZXJHcmFwaFJlc291cmNlLmh0bWwiPlJleHN0ZXJHcmFwaFJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX1R5cGVzUmVzb3VyY2UuaHRtbCI+VHlwZXNSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICA8L3VsPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvaGVhZGVyPgorICAgIDxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb2x1bW4gZmlyc3QgbGFzdCBzcGFuLTIwIj4KKyAgICAgIDxoMT5FbnRpdHlSZXNvdXJjZTwvaDE+CisKKyAgICAgIDxwPkVudGl0eSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMgYXMgUkVTVCBBUEkuCisKK0FuIGVudGl0eSBpcyBhbiAiaW5zdGFuY2UiIG9mIGEgVHlwZS4gIEVudGl0aWVzIGNvbmZvcm0gdG8gdGhlIGRlZmluaXRpb24KK29mIHRoZSBUeXBlIHRoZXkgY29ycmVzcG9uZCB3aXRoLjwvcD4KKyAgICAgIDxwPlRoZSBmb2xsb3dpbmcgcmVzb3VyY2VzIGFyZSBhcHBsaWNhYmxlOjwvcD4KKyAgICAgIDx1bD4KKyAgICAgICAgPGxpPgorICAgICAgICA8YSBocmVmPSIjcGF0aF9fZW50aXRpZXMuaHRtbCI+L2VudGl0aWVzPC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGk+CisgICAgICAgIDxhIGhyZWY9IiNwYXRoX19lbnRpdGllc18tZ3VpZC0uaHRtbCI+L2VudGl0aWVzL3tndWlkfTwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPgorICAgICAgICA8YSBocmVmPSIjcGF0aF9fZW50aXRpZXNfLWd1aWQtX3RyYWl0cy5odG1sIj4vZW50aXRpZXMve2d1aWR9L3RyYWl0czwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPgorICAgICAgICA8YSBocmVmPSIjcGF0aF9fZW50aXRpZXNfLWd1aWQtX3RyYWl0c18tdHJhaXROYW1lLS5odG1sIj4vZW50aXRpZXMve2d1aWR9L3RyYWl0cy97dHJhaXROYW1lfTwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDwvdWw+CisgICAgICAgIDxhIG5hbWU9InBhdGhfX2VudGl0aWVzLmh0bWwiPjwvYT4KKyAgICAgIDxoMT4vZW50aXRpZXM8L2gxPgorICAgICAgPGEgbmFtZT0iUE9TVCI+PC9hPgorICAgICAgPGgyPlBPU1Q8L2gyPgorICAgICAgPHA+CisgICAgICAgICAgICBTdWJtaXRzIGFuIGVudGl0eSBkZWZpbml0aW9uIChpbnN0YW5jZSkgY29ycmVzcG9uZGluZyB0byBhIGdpdmVuIHR5cGUuCisgICAgICAgICAgPC9wPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD4obm8gZG9jdW1lbnRhdGlvbiBwcm92aWRlZCk8L3A+CisgICAgICA8YSBuYW1lPSJHRVQiPjwvYT4KKyAgICAgIDxoMj5HRVQ8L2gyPgorICAgICAgPHA+CisgICAgICAgICAgICBHZXRzIHRoZSBsaXN0IG9mIGVudGl0aWVzIGZvciBhIGdpdmVuIGVudGl0eSB0eXBlLgorICAgICAgICAgIDwvcD4KKyAgICAgIDxoMz5QYXJhbWV0ZXJzPC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aD5uYW1lPC90aD4KKyAgICAgICAgICA8dGg+ZGVzY3JpcHRpb248L3RoPgorICAgICAgICAgIDx0aD50eXBlPC90aD4KKyAgICAgICAgICA8dGg+ZGVmYXVsdDwvdGg+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+dHlwZTwvdGQ+CisgICAgICAgICAgPHRkPgorICAgICAgICAgICAgbmFtZSBvZiBhIHR5cGUgd2hpY2ggaXMgdW5pcXVlCisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cXVlcnk8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxoMz5SZXNwb25zZSBCb2R5PC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPmVsZW1lbnQ6PC90ZD4KKyAgICAgICAgICA8dGQ+KGN1c3RvbSk8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+bWVkaWEgdHlwZXM6PC90ZD4KKyAgICAgICAgICA8dGQ+YXBwbGljYXRpb24vanNvbjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPHA+KG5vIGRvY3VtZW50YXRpb24gcHJvdmlkZWQpPC9wPgorICAgICAgICA8YSBuYW1lPSJwYXRoX19lbnRpdGllc18tZ3VpZC0uaHRtbCI+PC9hPgorICAgICAgPGgxPi9lbnRpdGllcy97Z3VpZH08L2gxPgorICAgICAgPGEgbmFtZT0iR0VUIj48L2E+CisgICAgICA8aDI+R0VUPC9oMj4KKyAgICAgIDxwPgorICAgICAgICAgICAgRmV0Y2ggdGhlIGNvbXBsZXRlIGRlZmluaXRpb24gb2YgYW4gZW50aXR5IGdpdmVuIGl0cyBHVUlELgorICAgICAgICAgIDwvcD4KKyAgICAgIDxoMz5QYXJhbWV0ZXJzPC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aD5uYW1lPC90aD4KKyAgICAgICAgICA8dGg+ZGVzY3JpcHRpb248L3RoPgorICAgICAgICAgIDx0aD50eXBlPC90aD4KKyAgICAgICAgICA8dGg+ZGVmYXVsdDwvdGg+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+Z3VpZDwvdGQ+CisgICAgICAgICAgPHRkPgorICAgICAgICAgICAgR1VJRCBmb3IgdGhlIGVudGl0eQorICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPHRkPnBhdGg8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxoMz5SZXNwb25zZSBCb2R5PC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPmVsZW1lbnQ6PC90ZD4KKyAgICAgICAgICA8dGQ+KGN1c3RvbSk8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+bWVkaWEgdHlwZXM6PC90ZD4KKyAgICAgICAgICA8dGQ+YXBwbGljYXRpb24vanNvbjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPHA+KG5vIGRvY3VtZW50YXRpb24gcHJvdmlkZWQpPC9wPgorICAgICAgPGEgbmFtZT0iUFVUIj48L2E+CisgICAgICA8aDI+UFVUPC9oMj4KKyAgICAgIDxwPgorICAgICAgICAgICAgQWRkcyBwcm9wZXJ0eSB0byB0aGUgZ2l2ZW4gZW50aXR5IGlkCisgICAgICAgICAgPC9wPgorICAgICAgPGgzPlBhcmFtZXRlcnM8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPm5hbWU8L3RoPgorICAgICAgICAgIDx0aD5kZXNjcmlwdGlvbjwvdGg+CisgICAgICAgICAgPHRoPnR5cGU8L3RoPgorICAgICAgICAgIDx0aD5kZWZhdWx0PC90aD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5ndWlkPC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICBlbnRpdHkgaWQKKyAgICAgICAgICA8L3RkPgorICAgICAgICAgIDx0ZD5wYXRoPC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5wcm9wZXJ0eTwvdGQ+CisgICAgICAgICAgPHRkPgorICAgICAgICAgICAgcHJvcGVydHkgdG8gYWRkCisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cXVlcnk8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPnZhbHVlPC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICBwcm9wZXJ0eSdzIHZhbHVlCisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cXVlcnk8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxoMz5SZXNwb25zZSBCb2R5PC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPmVsZW1lbnQ6PC90ZD4KKyAgICAgICAgICA8dGQ+KGN1c3RvbSk8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+bWVkaWEgdHlwZXM6PC90ZD4KKyAgICAgICAgICA8dGQ+YXBwbGljYXRpb24vanNvbjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPHA+cmVzcG9uc2UgcGF5bG9hZCBhcyBqc29uPC9wPgorICAgICAgICA8YSBuYW1lPSJwYXRoX19lbnRpdGllc18tZ3VpZC1fdHJhaXRzLmh0bWwiPjwvYT4KKyAgICAgIDxoMT4vZW50aXRpZXMve2d1aWR9L3RyYWl0czwvaDE+CisgICAgICA8YSBuYW1lPSJHRVQiPjwvYT4KKyAgICAgIDxoMj5HRVQ8L2gyPgorICAgICAgPHA+CisgICAgICAgICAgICBHZXRzIHRoZSBsaXN0IG9mIHRyYWl0IG5hbWVzIGZvciBhIGdpdmVuIGVudGl0eSByZXByZXNlbnRlZCBieSBhIGd1aWQuCisgICAgICAgICAgPC9wPgorICAgICAgPGgzPlBhcmFtZXRlcnM8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPm5hbWU8L3RoPgorICAgICAgICAgIDx0aD5kZXNjcmlwdGlvbjwvdGg+CisgICAgICAgICAgPHRoPnR5cGU8L3RoPgorICAgICAgICAgIDx0aD5kZWZhdWx0PC90aD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5ndWlkPC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICBnbG9iYWxseSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGVudGl0eQorICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPHRkPnBhdGg8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxoMz5SZXNwb25zZSBCb2R5PC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPmVsZW1lbnQ6PC90ZD4KKyAgICAgICAgICA8dGQ+KGN1c3RvbSk8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+bWVkaWEgdHlwZXM6PC90ZD4KKyAgICAgICAgICA8dGQ+YXBwbGljYXRpb24vanNvbjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPHA+YSBsaXN0IG9mIHRyYWl0IG5hbWVzIGZvciB0aGUgZ2l2ZW4gZW50aXR5IGd1aWQ8L3A+CisgICAgICA8YSBuYW1lPSJQT1NUIj48L2E+CisgICAgICA8aDI+UE9TVDwvaDI+CisgICAgICA8cD4KKyAgICAgICAgICAgIEFkZHMgYSBuZXcgdHJhaXQgdG8gYW4gZXhpc3RpbmcgZW50aXR5IHJlcHJlc2VudGVkIGJ5IGEgZ3VpZC4KKyAgICAgICAgICA8L3A+CisgICAgICA8aDM+UGFyYW1ldGVyczwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGg+bmFtZTwvdGg+CisgICAgICAgICAgPHRoPmRlc2NyaXB0aW9uPC90aD4KKyAgICAgICAgICA8dGg+dHlwZTwvdGg+CisgICAgICAgICAgPHRoPmRlZmF1bHQ8L3RoPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPmd1aWQ8L3RkPgorICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgIGdsb2JhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZW50aXR5CisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cGF0aDwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD4obm8gZG9jdW1lbnRhdGlvbiBwcm92aWRlZCk8L3A+CisgICAgICAgIDxhIG5hbWU9InBhdGhfX2VudGl0aWVzXy1ndWlkLV90cmFpdHNfLXRyYWl0TmFtZS0uaHRtbCI+PC9hPgorICAgICAgPGgxPi9lbnRpdGllcy97Z3VpZH0vdHJhaXRzL3t0cmFpdE5hbWV9PC9oMT4KKyAgICAgIDxhIG5hbWU9IkRFTEVURSI+PC9hPgorICAgICAgPGgyPkRFTEVURTwvaDI+CisgICAgICA8cD4KKyAgICAgICAgICAgIERlbGV0ZXMgYSBnaXZlbiB0cmFpdCBmcm9tIGFuIGV4aXN0aW5nIGVudGl0eSByZXByZXNlbnRlZCBieSBhIGd1aWQuCisgICAgICAgICAgPC9wPgorICAgICAgPGgzPlBhcmFtZXRlcnM8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPm5hbWU8L3RoPgorICAgICAgICAgIDx0aD5kZXNjcmlwdGlvbjwvdGg+CisgICAgICAgICAgPHRoPnR5cGU8L3RoPgorICAgICAgICAgIDx0aD5kZWZhdWx0PC90aD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5ndWlkPC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICBnbG9iYWxseSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGVudGl0eQorICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPHRkPnBhdGg8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPnRyYWl0TmFtZTwvdGQ+CisgICAgICAgICAgPHRkPgorICAgICAgICAgICAgbmFtZSBvZiB0aGUgdHJhaXQKKyAgICAgICAgICA8L3RkPgorICAgICAgICAgIDx0ZD5wYXRoPC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8aDM+UmVzcG9uc2UgQm9keTwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5lbGVtZW50OjwvdGQ+CisgICAgICAgICAgPHRkPihjdXN0b20pPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPm1lZGlhIHR5cGVzOjwvdGQ+CisgICAgICAgICAgPHRkPmFwcGxpY2F0aW9uL2pzb248L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxwPihubyBkb2N1bWVudGF0aW9uIHByb3ZpZGVkKTwvcD4KKworICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiIC8+CisgICAgPC9kaXY+CisgICAgPGZvb3Rlcj4KKyAgICAgIDxkaXYgaWQ9ImZvb3RlciI+CisgICAgICAgIEdlbmVyYXRlZCBieSA8YSBocmVmPSJodHRwOi8vZW51bmNpYXRlLmNvZGVoYXVzLm9yZyI+RW51bmNpYXRlPC9hPi4KKyAgICAgIDwvZGl2PgorICAgIDwvZm9vdGVyPgorICA8L2Rpdj4gPCEtLSEgZW5kIG9mICNjb250YWluZXIgLS0+CisKKyAgPCEtLSBKYXZhU2NyaXB0IGF0IHRoZSBib3R0b20gZm9yIGZhc3QgcGFnZSBsb2FkaW5nIC0tPgorCisgIDwhLS0gR3JhYiBHb29nbGUgQ0ROJ3MgalF1ZXJ5LCB3aXRoIGEgcHJvdG9jb2wgcmVsYXRpdmUgVVJMOyBmYWxsIGJhY2sgdG8gbG9jYWwgaWYgbmVjZXNzYXJ5IC0tPgorICA8c2NyaXB0IHNyYz0iLy9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS41LjEvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD53aW5kb3cualF1ZXJ5IHx8IGRvY3VtZW50LndyaXRlKCI8c2NyaXB0IHNyYz0nanMvbGlicy9qcXVlcnktMS41LjEubWluLmpzJz5ceDNDL3NjcmlwdD4iKTwvc2NyaXB0PgorCisgIDwhLS1tYW5hZ2UgdGhlIG5hdmlnYXRpb24gbWVudS0tPgorICA8c2NyaXB0IHNyYz0ianMvbGlicy94YnJlYWRjcnVtYnMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PgorICAgICQoZnVuY3Rpb24oKSB7CisgICAgICAkKCcjYnJlYWRjcnVtYnMnKS54QnJlYWRjcnVtYnMoKTsKKyAgICB9KTsKKyAgPC9zY3JpcHQ+CisKKworICA8IS0tIHByZXR0aWZ5IGNvZGUgYmxvY2tzLiBzZWUgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2dvb2dsZS1jb2RlLXByZXR0aWZ5LyAtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvcHJldHRpZnkvcHJldHRpZnkuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PgorICAgICQoZnVuY3Rpb24oKSB7CisgICAgICBwcmV0dHlQcmludCgpOworICAgIH0pOworICA8L3NjcmlwdD4KKworICA8IS0tW2lmIGx0IElFIDcgXT4KKyAgICA8c2NyaXB0IHNyYz0ianMvbGlicy9kZF9iZWxhdGVkcG5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PkREX2JlbGF0ZWRQTkcuZml4KCJpbWcsIC5wbmdfYmciKTsgLy8gRml4IGFueSA8aW1nPiBvciAucG5nX2JnIGJnLWltYWdlcy4gQWxzbywgcGxlYXNlIHJlYWQgZ29vLmdsL21aaXliIDwvc2NyaXB0PgorICA8IVtlbmRpZl0tLT4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9hcGkvcmVzb3VyY2VfSGl2ZUxpbmVhZ2VSZXNvdXJjZS5odG1sIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvcmVzb3VyY2VfSGl2ZUxpbmVhZ2VSZXNvdXJjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTIwNGIKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9yZXNvdXJjZV9IaXZlTGluZWFnZVJlc291cmNlLmh0bWwKQEAgLTAsMCArMSwyMzAgQEAKKzwhZG9jdHlwZSBodG1sPgorPCEtLSBwYXVsaXJpc2guY29tLzIwMDgvY29uZGl0aW9uYWwtc3R5bGVzaGVldHMtdnMtY3NzLWhhY2tzLWFuc3dlci1uZWl0aGVyLyAtLT4KKzwhLS1baWYgbHQgSUUgNyBdPiA8aHRtbCBjbGFzcz0ibm8tanMgaWU2IiBsYW5nPSJlbiI+IDwhW2VuZGlmXS0tPgorPCEtLVtpZiBJRSA3IF0+ICAgIDxodG1sIGNsYXNzPSJuby1qcyBpZTciIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cis8IS0tW2lmIElFIDggXT4gICAgPGh0bWwgY2xhc3M9Im5vLWpzIGllOCIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4KKzwhLS1baWYgKGd0ZSBJRSA5KXwhKElFKV0+PCEtLT4gPGh0bWwgY2xhc3M9Im5vLWpzIiBsYW5nPSJlbiI+IDwhLS08IVtlbmRpZl0tLT4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisKKyAgPCEtLSBBbHdheXMgZm9yY2UgbGF0ZXN0IElFIHJlbmRlcmluZyBlbmdpbmUgKGV2ZW4gaW4gaW50cmFuZXQpICYgQ2hyb21lIEZyYW1lCisgICAgICAgUmVtb3ZlIHRoaXMgaWYgeW91IHVzZSB0aGUgLmh0YWNjZXNzIC0tPgorICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiPgorCisgIDx0aXRsZT5IaXZlTGluZWFnZVJlc291cmNlPC90aXRsZT4KKworICA8IS0tIE1vYmlsZSB2aWV3cG9ydCBvcHRpbWl6ZWQ6IGoubXAvYnBsYXRldmlld3BvcnQgLS0+CisgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KKworICA8IS0tIENTUzogaW1wbGllZCBtZWRpYT0iYWxsIiAtLT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3Mvc3R5bGUuY3NzP3Y9MiI+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3ByZXR0aWZ5LmNzcyI+CisKKyAgPCEtLSBBbGwgSmF2YVNjcmlwdCBhdCB0aGUgYm90dG9tLCBleGNlcHQgZm9yIE1vZGVybml6ciB3aGljaCBlbmFibGVzIEhUTUw1IGVsZW1lbnRzICYgZmVhdHVyZSBkZXRlY3RzIC0tPgorICA8c2NyaXB0IHNyYz0ianMvbGlicy9tb2Rlcm5penItMS43Lm1pbi5qcyI+PC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgY2xhc3M9ImhvbWUiPgorCisgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgPGhlYWRlcj4KKyAgICAgIDxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImNvbHVtbiBmaXJzdCBsYXN0IHNwYW4tMjAiPgorICAgICAgICA8ZGl2IGlkPSJzaXRlLW5hbWUiIGNsYXNzPSJjb2x1bW4gc3Bhbi0xOCBhcHBlbmQtMSBwcmVwZW5kLTEgZmlyc3QgbGFzdCI+PGEgaHJlZj0iaW5kZXguaHRtbCI+SGl2ZUxpbmVhZ2VSZXNvdXJjZTwvYT48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0icHJpbWFyeSIgY2xhc3M9ImNvbHVtbiBzcGFuLTE4IGFwcGVuZC0xIHByZXBlbmQtMSBmaXJzdCBsYXN0Ij4KKyAgICAgICAgICA8dWwgY2xhc3M9Im5hdmlnYXRpb24iPgorICAgICAgICAgICAgPGxpIGlkPSJuYXYtcmVzdCI+PGEgaHJlZj0icmVzdC5odG1sIj5SRVNUPC9hPjwvbGk+CisgICAgICAgICAgICA8bGkgaWQ9Im5hdi1kYXRhIj48YSBocmVmPSJtb2RlbC5odG1sIj5EYXRhIE1vZGVsPC9hPjwvbGk+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXY+CisgICAgICAgICAgPHVsIGNsYXNzPSJ4YnJlYWRjcnVtYnMiIGlkPSJicmVhZGNydW1icyI+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIGNsYXNzPSJob21lIj5Ib21lPC9hPiAmZ3Q7CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICA8YSBocmVmPSJyZXN0Lmh0bWwiPlJFU1Q8L2E+ICZndDsKKyAgICAgICAgICAgICAgPHVsPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJtb2RlbC5odG1sIj5EYXRhIE1vZGVsPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc3QuaHRtbCI+UkVTVDwvYT48L2xpPgorICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0iY3VycmVudCI+CisgICAgICAgICAgICAgIDxhIGhyZWY9InJlc291cmNlX0hpdmVMaW5lYWdlUmVzb3VyY2UuaHRtbCI+SGl2ZUxpbmVhZ2VSZXNvdXJjZTwvYT4KKyAgICAgICAgICAgICAgPHVsPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9BZG1pblJlc291cmNlLmh0bWwiPkFkbWluUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfRW50aXR5UmVzb3VyY2UuaHRtbCI+RW50aXR5UmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfSGl2ZUxpbmVhZ2VSZXNvdXJjZS5odG1sIj5IaXZlTGluZWFnZVJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX01ldGFkYXRhRGlzY292ZXJ5UmVzb3VyY2UuaHRtbCI+TWV0YWRhdGFEaXNjb3ZlcnlSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9SZXhzdGVyR3JhcGhSZXNvdXJjZS5odG1sIj5SZXhzdGVyR3JhcGhSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9UeXBlc1Jlc291cmNlLmh0bWwiPlR5cGVzUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2hlYWRlcj4KKyAgICA8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29sdW1uIGZpcnN0IGxhc3Qgc3Bhbi0yMCI+CisgICAgICA8aDE+SGl2ZUxpbmVhZ2VSZXNvdXJjZTwvaDE+CisKKyAgICAgIDxwPkplcnNleSBSZXNvdXJjZSBmb3IgSGl2ZSBUYWJsZSBMaW5lYWdlLjwvcD4KKyAgICAgIDxwPlRoZSBmb2xsb3dpbmcgcmVzb3VyY2VzIGFyZSBhcHBsaWNhYmxlOjwvcD4KKyAgICAgIDx1bD4KKyAgICAgICAgPGxpPgorICAgICAgICA8YSBocmVmPSIjcGF0aF9fbGluZWFnZV9oaXZlX3RhYmxlXy10YWJsZU5hbWUtX2lucHV0c19ncmFwaC5odG1sIj4vbGluZWFnZS9oaXZlL3RhYmxlL3t0YWJsZU5hbWV9L2lucHV0cy9ncmFwaDwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPgorICAgICAgICA8YSBocmVmPSIjcGF0aF9fbGluZWFnZV9oaXZlX3RhYmxlXy10YWJsZU5hbWUtX291dHB1dHNfZ3JhcGguaHRtbCI+L2xpbmVhZ2UvaGl2ZS90YWJsZS97dGFibGVOYW1lfS9vdXRwdXRzL2dyYXBoPC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGk+CisgICAgICAgIDxhIGhyZWY9IiNwYXRoX19saW5lYWdlX2hpdmVfdGFibGVfLXRhYmxlTmFtZS1fc2NoZW1hLmh0bWwiPi9saW5lYWdlL2hpdmUvdGFibGUve3RhYmxlTmFtZX0vc2NoZW1hPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPC91bD4KKyAgICAgICAgPGEgbmFtZT0icGF0aF9fbGluZWFnZV9oaXZlX3RhYmxlXy10YWJsZU5hbWUtX2lucHV0c19ncmFwaC5odG1sIj48L2E+CisgICAgICA8aDE+L2xpbmVhZ2UvaGl2ZS90YWJsZS97dGFibGVOYW1lfS9pbnB1dHMvZ3JhcGg8L2gxPgorICAgICAgPGEgbmFtZT0iR0VUIj48L2E+CisgICAgICA8aDI+R0VUPC9oMj4KKyAgICAgIDxwPgorICAgICAgICAgICAgUmV0dXJucyB0aGUgaW5wdXRzIGdyYXBoIGZvciBhIGdpdmVuIGVudGl0eS4KKyAgICAgICAgICA8L3A+CisgICAgICA8aDM+UGFyYW1ldGVyczwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGg+bmFtZTwvdGg+CisgICAgICAgICAgPHRoPmRlc2NyaXB0aW9uPC90aD4KKyAgICAgICAgICA8dGg+dHlwZTwvdGg+CisgICAgICAgICAgPHRoPmRlZmF1bHQ8L3RoPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPnRhYmxlTmFtZTwvdGQ+CisgICAgICAgICAgPHRkPgorICAgICAgICAgICAgdGFibGUgbmFtZQorICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPHRkPnBhdGg8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxoMz5SZXNwb25zZSBCb2R5PC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPmVsZW1lbnQ6PC90ZD4KKyAgICAgICAgICA8dGQ+KGN1c3RvbSk8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+bWVkaWEgdHlwZXM6PC90ZD4KKyAgICAgICAgICA8dGQ+YXBwbGljYXRpb24vanNvbjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPHA+KG5vIGRvY3VtZW50YXRpb24gcHJvdmlkZWQpPC9wPgorICAgICAgICA8YSBuYW1lPSJwYXRoX19saW5lYWdlX2hpdmVfdGFibGVfLXRhYmxlTmFtZS1fb3V0cHV0c19ncmFwaC5odG1sIj48L2E+CisgICAgICA8aDE+L2xpbmVhZ2UvaGl2ZS90YWJsZS97dGFibGVOYW1lfS9vdXRwdXRzL2dyYXBoPC9oMT4KKyAgICAgIDxhIG5hbWU9IkdFVCI+PC9hPgorICAgICAgPGgyPkdFVDwvaDI+CisgICAgICA8cD4KKyAgICAgICAgICAgIFJldHVybnMgdGhlIG91dHB1dHMgZ3JhcGggZm9yIGEgZ2l2ZW4gZW50aXR5LgorICAgICAgICAgIDwvcD4KKyAgICAgIDxoMz5QYXJhbWV0ZXJzPC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aD5uYW1lPC90aD4KKyAgICAgICAgICA8dGg+ZGVzY3JpcHRpb248L3RoPgorICAgICAgICAgIDx0aD50eXBlPC90aD4KKyAgICAgICAgICA8dGg+ZGVmYXVsdDwvdGg+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+dGFibGVOYW1lPC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICB0YWJsZSBuYW1lCisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cGF0aDwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD4obm8gZG9jdW1lbnRhdGlvbiBwcm92aWRlZCk8L3A+CisgICAgICAgIDxhIG5hbWU9InBhdGhfX2xpbmVhZ2VfaGl2ZV90YWJsZV8tdGFibGVOYW1lLV9zY2hlbWEuaHRtbCI+PC9hPgorICAgICAgPGgxPi9saW5lYWdlL2hpdmUvdGFibGUve3RhYmxlTmFtZX0vc2NoZW1hPC9oMT4KKyAgICAgIDxhIG5hbWU9IkdFVCI+PC9hPgorICAgICAgPGgyPkdFVDwvaDI+CisgICAgICA8cD4KKyAgICAgICAgICAgIFJldHVybiB0aGUgc2NoZW1hIGZvciB0aGUgZ2l2ZW4gdGFibGVOYW1lLgorICAgICAgICAgIDwvcD4KKyAgICAgIDxoMz5QYXJhbWV0ZXJzPC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aD5uYW1lPC90aD4KKyAgICAgICAgICA8dGg+ZGVzY3JpcHRpb248L3RoPgorICAgICAgICAgIDx0aD50eXBlPC90aD4KKyAgICAgICAgICA8dGg+ZGVmYXVsdDwvdGg+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+dGFibGVOYW1lPC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICB0YWJsZSBuYW1lCisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cGF0aDwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD4obm8gZG9jdW1lbnRhdGlvbiBwcm92aWRlZCk8L3A+CisKKyAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIiAvPgorICAgIDwvZGl2PgorICAgIDxmb290ZXI+CisgICAgICA8ZGl2IGlkPSJmb290ZXIiPgorICAgICAgICBHZW5lcmF0ZWQgYnkgPGEgaHJlZj0iaHR0cDovL2VudW5jaWF0ZS5jb2RlaGF1cy5vcmciPkVudW5jaWF0ZTwvYT4uCisgICAgICA8L2Rpdj4KKyAgICA8L2Zvb3Rlcj4KKyAgPC9kaXY+IDwhLS0hIGVuZCBvZiAjY29udGFpbmVyIC0tPgorCisgIDwhLS0gSmF2YVNjcmlwdCBhdCB0aGUgYm90dG9tIGZvciBmYXN0IHBhZ2UgbG9hZGluZyAtLT4KKworICA8IS0tIEdyYWIgR29vZ2xlIENETidzIGpRdWVyeSwgd2l0aCBhIHByb3RvY29sIHJlbGF0aXZlIFVSTDsgZmFsbCBiYWNrIHRvIGxvY2FsIGlmIG5lY2Vzc2FyeSAtLT4KKyAgPHNjcmlwdCBzcmM9Ii8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuNS4xL2pxdWVyeS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+d2luZG93LmpRdWVyeSB8fCBkb2N1bWVudC53cml0ZSgiPHNjcmlwdCBzcmM9J2pzL2xpYnMvanF1ZXJ5LTEuNS4xLm1pbi5qcyc+XHgzQy9zY3JpcHQ+Iik8L3NjcmlwdD4KKworICA8IS0tbWFuYWdlIHRoZSBuYXZpZ2F0aW9uIG1lbnUtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMveGJyZWFkY3J1bWJzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD4KKyAgICAkKGZ1bmN0aW9uKCkgeworICAgICAgJCgnI2JyZWFkY3J1bWJzJykueEJyZWFkY3J1bWJzKCk7CisgICAgfSk7CisgIDwvc2NyaXB0PgorCisKKyAgPCEtLSBwcmV0dGlmeSBjb2RlIGJsb2Nrcy4gc2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nb29nbGUtY29kZS1wcmV0dGlmeS8gLS0+CisgIDxzY3JpcHQgc3JjPSJqcy9saWJzL3ByZXR0aWZ5L3ByZXR0aWZ5LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD4KKyAgICAkKGZ1bmN0aW9uKCkgeworICAgICAgcHJldHR5UHJpbnQoKTsKKyAgICB9KTsKKyAgPC9zY3JpcHQ+CisKKyAgPCEtLVtpZiBsdCBJRSA3IF0+CisgICAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvZGRfYmVsYXRlZHBuZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD5ERF9iZWxhdGVkUE5HLmZpeCgiaW1nLCAucG5nX2JnIik7IC8vIEZpeCBhbnkgPGltZz4gb3IgLnBuZ19iZyBiZy1pbWFnZXMuIEFsc28sIHBsZWFzZSByZWFkIGdvby5nbC9tWml5YiA8L3NjcmlwdD4KKyAgPCFbZW5kaWZdLS0+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvYXBpL3Jlc291cmNlX01ldGFkYXRhRGlzY292ZXJ5UmVzb3VyY2UuaHRtbCBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL3Jlc291cmNlX01ldGFkYXRhRGlzY292ZXJ5UmVzb3VyY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTBjZmM5Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvcmVzb3VyY2VfTWV0YWRhdGFEaXNjb3ZlcnlSZXNvdXJjZS5odG1sCkBAIC0wLDAgKzEsMjY5IEBACis8IWRvY3R5cGUgaHRtbD4KKzwhLS0gcGF1bGlyaXNoLmNvbS8yMDA4L2NvbmRpdGlvbmFsLXN0eWxlc2hlZXRzLXZzLWNzcy1oYWNrcy1hbnN3ZXItbmVpdGhlci8gLS0+Cis8IS0tW2lmIGx0IElFIDcgXT4gPGh0bWwgY2xhc3M9Im5vLWpzIGllNiIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4KKzwhLS1baWYgSUUgNyBdPiAgICA8aHRtbCBjbGFzcz0ibm8tanMgaWU3IiBsYW5nPSJlbiI+IDwhW2VuZGlmXS0tPgorPCEtLVtpZiBJRSA4IF0+ICAgIDxodG1sIGNsYXNzPSJuby1qcyBpZTgiIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cis8IS0tW2lmIChndGUgSUUgOSl8IShJRSldPjwhLS0+IDxodG1sIGNsYXNzPSJuby1qcyIgbGFuZz0iZW4iPiA8IS0tPCFbZW5kaWZdLS0+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorCisgIDwhLS0gQWx3YXlzIGZvcmNlIGxhdGVzdCBJRSByZW5kZXJpbmcgZW5naW5lIChldmVuIGluIGludHJhbmV0KSAmIENocm9tZSBGcmFtZQorICAgICAgIFJlbW92ZSB0aGlzIGlmIHlvdSB1c2UgdGhlIC5odGFjY2VzcyAtLT4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlLGNocm9tZT0xIj4KKworICA8dGl0bGU+TWV0YWRhdGFEaXNjb3ZlcnlSZXNvdXJjZTwvdGl0bGU+CisKKyAgPCEtLSBNb2JpbGUgdmlld3BvcnQgb3B0aW1pemVkOiBqLm1wL2JwbGF0ZXZpZXdwb3J0IC0tPgorICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CisKKyAgPCEtLSBDU1M6IGltcGxpZWQgbWVkaWE9ImFsbCIgLS0+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3N0eWxlLmNzcz92PTIiPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9wcmV0dGlmeS5jc3MiPgorCisgIDwhLS0gQWxsIEphdmFTY3JpcHQgYXQgdGhlIGJvdHRvbSwgZXhjZXB0IGZvciBNb2Rlcm5penIgd2hpY2ggZW5hYmxlcyBIVE1MNSBlbGVtZW50cyAmIGZlYXR1cmUgZGV0ZWN0cyAtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvbW9kZXJuaXpyLTEuNy5taW4uanMiPjwvc2NyaXB0PgorCis8L2hlYWQ+CisKKzxib2R5IGNsYXNzPSJob21lIj4KKworICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgIDxoZWFkZXI+CisgICAgICA8ZGl2IGlkPSJoZWFkZXIiIGNsYXNzPSJjb2x1bW4gZmlyc3QgbGFzdCBzcGFuLTIwIj4KKyAgICAgICAgPGRpdiBpZD0ic2l0ZS1uYW1lIiBjbGFzcz0iY29sdW1uIHNwYW4tMTggYXBwZW5kLTEgcHJlcGVuZC0xIGZpcnN0IGxhc3QiPjxhIGhyZWY9ImluZGV4Lmh0bWwiPk1ldGFkYXRhRGlzY292ZXJ5UmVzb3VyY2U8L2E+PC9kaXY+CisgICAgICAgIDxkaXYgaWQ9InByaW1hcnkiIGNsYXNzPSJjb2x1bW4gc3Bhbi0xOCBhcHBlbmQtMSBwcmVwZW5kLTEgZmlyc3QgbGFzdCI+CisgICAgICAgICAgPHVsIGNsYXNzPSJuYXZpZ2F0aW9uIj4KKyAgICAgICAgICAgIDxsaSBpZD0ibmF2LXJlc3QiPjxhIGhyZWY9InJlc3QuaHRtbCI+UkVTVDwvYT48L2xpPgorICAgICAgICAgICAgPGxpIGlkPSJuYXYtZGF0YSI+PGEgaHJlZj0ibW9kZWwuaHRtbCI+RGF0YSBNb2RlbDwvYT48L2xpPgorICAgICAgICAgIDwvdWw+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2PgorICAgICAgICAgIDx1bCBjbGFzcz0ieGJyZWFkY3J1bWJzIiBpZD0iYnJlYWRjcnVtYnMiPgorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICA8YSBocmVmPSJpbmRleC5odG1sIiBjbGFzcz0iaG9tZSI+SG9tZTwvYT4gJmd0OworICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgPGEgaHJlZj0icmVzdC5odG1sIj5SRVNUPC9hPiAmZ3Q7CisgICAgICAgICAgICAgIDx1bD4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ibW9kZWwuaHRtbCI+RGF0YSBNb2RlbDwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXN0Lmh0bWwiPlJFU1Q8L2E+PC9saT4KKyAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8bGkgY2xhc3M9ImN1cnJlbnQiPgorICAgICAgICAgICAgICA8YSBocmVmPSJyZXNvdXJjZV9NZXRhZGF0YURpc2NvdmVyeVJlc291cmNlLmh0bWwiPk1ldGFkYXRhRGlzY292ZXJ5UmVzb3VyY2U8L2E+CisgICAgICAgICAgICAgIDx1bD4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfQWRtaW5SZXNvdXJjZS5odG1sIj5BZG1pblJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX0VudGl0eVJlc291cmNlLmh0bWwiPkVudGl0eVJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX0hpdmVMaW5lYWdlUmVzb3VyY2UuaHRtbCI+SGl2ZUxpbmVhZ2VSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9NZXRhZGF0YURpc2NvdmVyeVJlc291cmNlLmh0bWwiPk1ldGFkYXRhRGlzY292ZXJ5UmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfUmV4c3RlckdyYXBoUmVzb3VyY2UuaHRtbCI+UmV4c3RlckdyYXBoUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfVHlwZXNSZXNvdXJjZS5odG1sIj5UeXBlc1Jlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgIDwvdWw+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9oZWFkZXI+CisgICAgPGRpdiBpZD0ibWFpbiIgY2xhc3M9ImNvbHVtbiBmaXJzdCBsYXN0IHNwYW4tMjAiPgorICAgICAgPGgxPk1ldGFkYXRhRGlzY292ZXJ5UmVzb3VyY2U8L2gxPgorCisgICAgICA8cD5KZXJzZXkgUmVzb3VyY2UgZm9yIG1ldGFkYXRhIG9wZXJhdGlvbnMuPC9wPgorICAgICAgPHA+VGhlIGZvbGxvd2luZyByZXNvdXJjZXMgYXJlIGFwcGxpY2FibGU6PC9wPgorICAgICAgPHVsPgorICAgICAgICA8bGk+CisgICAgICAgIDxhIGhyZWY9IiNwYXRoX19kaXNjb3Zlcnlfc2VhcmNoLmh0bWwiPi9kaXNjb3Zlcnkvc2VhcmNoPC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGk+CisgICAgICAgIDxhIGhyZWY9IiNwYXRoX19kaXNjb3Zlcnlfc2VhcmNoX2RzbC5odG1sIj4vZGlzY292ZXJ5L3NlYXJjaC9kc2w8L2E+CisgICAgICAgIDwvbGk+CisgICAgICAgIDxsaT4KKyAgICAgICAgPGEgaHJlZj0iI3BhdGhfX2Rpc2NvdmVyeV9zZWFyY2hfZnVsbHRleHQuaHRtbCI+L2Rpc2NvdmVyeS9zZWFyY2gvZnVsbHRleHQ8L2E+CisgICAgICAgIDwvbGk+CisgICAgICAgIDxsaT4KKyAgICAgICAgPGEgaHJlZj0iI3BhdGhfX2Rpc2NvdmVyeV9zZWFyY2hfZ3JlbWxpbi5odG1sIj4vZGlzY292ZXJ5L3NlYXJjaC9ncmVtbGluPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPC91bD4KKyAgICAgICAgPGEgbmFtZT0icGF0aF9fZGlzY292ZXJ5X3NlYXJjaC5odG1sIj48L2E+CisgICAgICA8aDE+L2Rpc2NvdmVyeS9zZWFyY2g8L2gxPgorICAgICAgPGEgbmFtZT0iR0VUIj48L2E+CisgICAgICA8aDI+R0VUPC9oMj4KKyAgICAgIDxwPgorICAgICAgICAgICAgU2VhcmNoIHVzaW5nIGEgZ2l2ZW4gcXVlcnkuCisgICAgICAgICAgPC9wPgorICAgICAgPGgzPlBhcmFtZXRlcnM8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPm5hbWU8L3RoPgorICAgICAgICAgIDx0aD5kZXNjcmlwdGlvbjwvdGg+CisgICAgICAgICAgPHRoPnR5cGU8L3RoPgorICAgICAgICAgIDx0aD5kZWZhdWx0PC90aD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5xdWVyeTwvdGQ+CisgICAgICAgICAgPHRkPgorICAgICAgICAgICAgc2VhcmNoIHF1ZXJ5IGluIHJhdyBncmVtbGluIG9yIERTTCBmb3JtYXQgZmFsbGluZyBiYWNrIHRvIGZ1bGwgdGV4dC4KKyAgICAgICAgICA8L3RkPgorICAgICAgICAgIDx0ZD5xdWVyeTwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD5KU09OIHJlcHJlc2VudGluZyB0aGUgdHlwZSBhbmQgcmVzdWx0cy48L3A+CisgICAgICAgIDxhIG5hbWU9InBhdGhfX2Rpc2NvdmVyeV9zZWFyY2hfZHNsLmh0bWwiPjwvYT4KKyAgICAgIDxoMT4vZGlzY292ZXJ5L3NlYXJjaC9kc2w8L2gxPgorICAgICAgPGEgbmFtZT0iR0VUIj48L2E+CisgICAgICA8aDI+R0VUPC9oMj4KKyAgICAgIDxwPgorICAgICAgICAgICAgU2VhcmNoIHVzaW5nIHF1ZXJ5IERTTCBmb3JtYXQuCisgICAgICAgICAgPC9wPgorICAgICAgPGgzPlBhcmFtZXRlcnM8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPm5hbWU8L3RoPgorICAgICAgICAgIDx0aD5kZXNjcmlwdGlvbjwvdGg+CisgICAgICAgICAgPHRoPnR5cGU8L3RoPgorICAgICAgICAgIDx0aD5kZWZhdWx0PC90aD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5xdWVyeTwvdGQ+CisgICAgICAgICAgPHRkPgorICAgICAgICAgICAgc2VhcmNoIHF1ZXJ5IGluIERTTCBmb3JtYXQuCisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cXVlcnk8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxoMz5SZXNwb25zZSBCb2R5PC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPmVsZW1lbnQ6PC90ZD4KKyAgICAgICAgICA8dGQ+KGN1c3RvbSk8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+bWVkaWEgdHlwZXM6PC90ZD4KKyAgICAgICAgICA8dGQ+YXBwbGljYXRpb24vanNvbjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPHA+SlNPTiByZXByZXNlbnRpbmcgdGhlIHR5cGUgYW5kIHJlc3VsdHMuPC9wPgorICAgICAgICA8YSBuYW1lPSJwYXRoX19kaXNjb3Zlcnlfc2VhcmNoX2Z1bGx0ZXh0Lmh0bWwiPjwvYT4KKyAgICAgIDxoMT4vZGlzY292ZXJ5L3NlYXJjaC9mdWxsdGV4dDwvaDE+CisgICAgICA8YSBuYW1lPSJHRVQiPjwvYT4KKyAgICAgIDxoMj5HRVQ8L2gyPgorICAgICAgPHA+CisgICAgICAgICAgICBTZWFyY2ggdXNpbmcgZnVsbCB0ZXh0IHNlYXJjaC4KKyAgICAgICAgICA8L3A+CisgICAgICA8aDM+UGFyYW1ldGVyczwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGg+bmFtZTwvdGg+CisgICAgICAgICAgPHRoPmRlc2NyaXB0aW9uPC90aD4KKyAgICAgICAgICA8dGg+dHlwZTwvdGg+CisgICAgICAgICAgPHRoPmRlZmF1bHQ8L3RoPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPnF1ZXJ5PC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICBzZWFyY2ggcXVlcnkuCisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cXVlcnk8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxoMz5SZXNwb25zZSBCb2R5PC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPmVsZW1lbnQ6PC90ZD4KKyAgICAgICAgICA8dGQ+KGN1c3RvbSk8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+bWVkaWEgdHlwZXM6PC90ZD4KKyAgICAgICAgICA8dGQ+YXBwbGljYXRpb24vanNvbjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPHA+SlNPTiByZXByZXNlbnRpbmcgdGhlIHR5cGUgYW5kIHJlc3VsdHMuPC9wPgorICAgICAgICA8YSBuYW1lPSJwYXRoX19kaXNjb3Zlcnlfc2VhcmNoX2dyZW1saW4uaHRtbCI+PC9hPgorICAgICAgPGgxPi9kaXNjb3Zlcnkvc2VhcmNoL2dyZW1saW48L2gxPgorICAgICAgPGEgbmFtZT0iR0VUIj48L2E+CisgICAgICA8aDI+R0VUPC9oMj4KKyAgICAgIDxwPgorICAgICAgICAgICAgU2VhcmNoIHVzaW5nIHJhdyBncmVtbGluIHF1ZXJ5IGZvcm1hdC4KKyAgICAgICAgICA8L3A+CisgICAgICA8aDM+UGFyYW1ldGVyczwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGg+bmFtZTwvdGg+CisgICAgICAgICAgPHRoPmRlc2NyaXB0aW9uPC90aD4KKyAgICAgICAgICA8dGg+dHlwZTwvdGg+CisgICAgICAgICAgPHRoPmRlZmF1bHQ8L3RoPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPnF1ZXJ5PC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICBzZWFyY2ggcXVlcnkgaW4gcmF3IGdyZW1saW4gZm9ybWF0LgorICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPHRkPnF1ZXJ5PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8aDM+UmVzcG9uc2UgQm9keTwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5lbGVtZW50OjwvdGQ+CisgICAgICAgICAgPHRkPihjdXN0b20pPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPm1lZGlhIHR5cGVzOjwvdGQ+CisgICAgICAgICAgPHRkPmFwcGxpY2F0aW9uL2pzb248L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxwPkpTT04gcmVwcmVzZW50aW5nIHRoZSB0eXBlIGFuZCByZXN1bHRzLjwvcD4KKworICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiIC8+CisgICAgPC9kaXY+CisgICAgPGZvb3Rlcj4KKyAgICAgIDxkaXYgaWQ9ImZvb3RlciI+CisgICAgICAgIEdlbmVyYXRlZCBieSA8YSBocmVmPSJodHRwOi8vZW51bmNpYXRlLmNvZGVoYXVzLm9yZyI+RW51bmNpYXRlPC9hPi4KKyAgICAgIDwvZGl2PgorICAgIDwvZm9vdGVyPgorICA8L2Rpdj4gPCEtLSEgZW5kIG9mICNjb250YWluZXIgLS0+CisKKyAgPCEtLSBKYXZhU2NyaXB0IGF0IHRoZSBib3R0b20gZm9yIGZhc3QgcGFnZSBsb2FkaW5nIC0tPgorCisgIDwhLS0gR3JhYiBHb29nbGUgQ0ROJ3MgalF1ZXJ5LCB3aXRoIGEgcHJvdG9jb2wgcmVsYXRpdmUgVVJMOyBmYWxsIGJhY2sgdG8gbG9jYWwgaWYgbmVjZXNzYXJ5IC0tPgorICA8c2NyaXB0IHNyYz0iLy9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS41LjEvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD53aW5kb3cualF1ZXJ5IHx8IGRvY3VtZW50LndyaXRlKCI8c2NyaXB0IHNyYz0nanMvbGlicy9qcXVlcnktMS41LjEubWluLmpzJz5ceDNDL3NjcmlwdD4iKTwvc2NyaXB0PgorCisgIDwhLS1tYW5hZ2UgdGhlIG5hdmlnYXRpb24gbWVudS0tPgorICA8c2NyaXB0IHNyYz0ianMvbGlicy94YnJlYWRjcnVtYnMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PgorICAgICQoZnVuY3Rpb24oKSB7CisgICAgICAkKCcjYnJlYWRjcnVtYnMnKS54QnJlYWRjcnVtYnMoKTsKKyAgICB9KTsKKyAgPC9zY3JpcHQ+CisKKworICA8IS0tIHByZXR0aWZ5IGNvZGUgYmxvY2tzLiBzZWUgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2dvb2dsZS1jb2RlLXByZXR0aWZ5LyAtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvcHJldHRpZnkvcHJldHRpZnkuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PgorICAgICQoZnVuY3Rpb24oKSB7CisgICAgICBwcmV0dHlQcmludCgpOworICAgIH0pOworICA8L3NjcmlwdD4KKworICA8IS0tW2lmIGx0IElFIDcgXT4KKyAgICA8c2NyaXB0IHNyYz0ianMvbGlicy9kZF9iZWxhdGVkcG5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PkREX2JlbGF0ZWRQTkcuZml4KCJpbWcsIC5wbmdfYmciKTsgLy8gRml4IGFueSA8aW1nPiBvciAucG5nX2JnIGJnLWltYWdlcy4gQWxzbywgcGxlYXNlIHJlYWQgZ29vLmdsL21aaXliIDwvc2NyaXB0PgorICA8IVtlbmRpZl0tLT4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9hcGkvcmVzb3VyY2VfUmV4c3RlckdyYXBoUmVzb3VyY2UuaHRtbCBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL3Jlc291cmNlX1JleHN0ZXJHcmFwaFJlc291cmNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRlZmQxZAotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL3Jlc291cmNlX1JleHN0ZXJHcmFwaFJlc291cmNlLmh0bWwKQEAgLTAsMCArMSwzNTMgQEAKKzwhZG9jdHlwZSBodG1sPgorPCEtLSBwYXVsaXJpc2guY29tLzIwMDgvY29uZGl0aW9uYWwtc3R5bGVzaGVldHMtdnMtY3NzLWhhY2tzLWFuc3dlci1uZWl0aGVyLyAtLT4KKzwhLS1baWYgbHQgSUUgNyBdPiA8aHRtbCBjbGFzcz0ibm8tanMgaWU2IiBsYW5nPSJlbiI+IDwhW2VuZGlmXS0tPgorPCEtLVtpZiBJRSA3IF0+ICAgIDxodG1sIGNsYXNzPSJuby1qcyBpZTciIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cis8IS0tW2lmIElFIDggXT4gICAgPGh0bWwgY2xhc3M9Im5vLWpzIGllOCIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4KKzwhLS1baWYgKGd0ZSBJRSA5KXwhKElFKV0+PCEtLT4gPGh0bWwgY2xhc3M9Im5vLWpzIiBsYW5nPSJlbiI+IDwhLS08IVtlbmRpZl0tLT4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisKKyAgPCEtLSBBbHdheXMgZm9yY2UgbGF0ZXN0IElFIHJlbmRlcmluZyBlbmdpbmUgKGV2ZW4gaW4gaW50cmFuZXQpICYgQ2hyb21lIEZyYW1lCisgICAgICAgUmVtb3ZlIHRoaXMgaWYgeW91IHVzZSB0aGUgLmh0YWNjZXNzIC0tPgorICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiPgorCisgIDx0aXRsZT5SZXhzdGVyR3JhcGhSZXNvdXJjZTwvdGl0bGU+CisKKyAgPCEtLSBNb2JpbGUgdmlld3BvcnQgb3B0aW1pemVkOiBqLm1wL2JwbGF0ZXZpZXdwb3J0IC0tPgorICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CisKKyAgPCEtLSBDU1M6IGltcGxpZWQgbWVkaWE9ImFsbCIgLS0+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3N0eWxlLmNzcz92PTIiPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9wcmV0dGlmeS5jc3MiPgorCisgIDwhLS0gQWxsIEphdmFTY3JpcHQgYXQgdGhlIGJvdHRvbSwgZXhjZXB0IGZvciBNb2Rlcm5penIgd2hpY2ggZW5hYmxlcyBIVE1MNSBlbGVtZW50cyAmIGZlYXR1cmUgZGV0ZWN0cyAtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvbW9kZXJuaXpyLTEuNy5taW4uanMiPjwvc2NyaXB0PgorCis8L2hlYWQ+CisKKzxib2R5IGNsYXNzPSJob21lIj4KKworICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgIDxoZWFkZXI+CisgICAgICA8ZGl2IGlkPSJoZWFkZXIiIGNsYXNzPSJjb2x1bW4gZmlyc3QgbGFzdCBzcGFuLTIwIj4KKyAgICAgICAgPGRpdiBpZD0ic2l0ZS1uYW1lIiBjbGFzcz0iY29sdW1uIHNwYW4tMTggYXBwZW5kLTEgcHJlcGVuZC0xIGZpcnN0IGxhc3QiPjxhIGhyZWY9ImluZGV4Lmh0bWwiPlJleHN0ZXJHcmFwaFJlc291cmNlPC9hPjwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJwcmltYXJ5IiBjbGFzcz0iY29sdW1uIHNwYW4tMTggYXBwZW5kLTEgcHJlcGVuZC0xIGZpcnN0IGxhc3QiPgorICAgICAgICAgIDx1bCBjbGFzcz0ibmF2aWdhdGlvbiI+CisgICAgICAgICAgICA8bGkgaWQ9Im5hdi1yZXN0Ij48YSBocmVmPSJyZXN0Lmh0bWwiPlJFU1Q8L2E+PC9saT4KKyAgICAgICAgICAgIDxsaSBpZD0ibmF2LWRhdGEiPjxhIGhyZWY9Im1vZGVsLmh0bWwiPkRhdGEgTW9kZWw8L2E+PC9saT4KKyAgICAgICAgICA8L3VsPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdj4KKyAgICAgICAgICA8dWwgY2xhc3M9InhicmVhZGNydW1icyIgaWQ9ImJyZWFkY3J1bWJzIj4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgY2xhc3M9ImhvbWUiPkhvbWU8L2E+ICZndDsKKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgIDxhIGhyZWY9InJlc3QuaHRtbCI+UkVTVDwvYT4gJmd0OworICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Im1vZGVsLmh0bWwiPkRhdGEgTW9kZWw8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzdC5odG1sIj5SRVNUPC9hPjwvbGk+CisgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPGxpIGNsYXNzPSJjdXJyZW50Ij4KKyAgICAgICAgICAgICAgPGEgaHJlZj0icmVzb3VyY2VfUmV4c3RlckdyYXBoUmVzb3VyY2UuaHRtbCI+UmV4c3RlckdyYXBoUmVzb3VyY2U8L2E+CisgICAgICAgICAgICAgIDx1bD4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfQWRtaW5SZXNvdXJjZS5odG1sIj5BZG1pblJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX0VudGl0eVJlc291cmNlLmh0bWwiPkVudGl0eVJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX0hpdmVMaW5lYWdlUmVzb3VyY2UuaHRtbCI+SGl2ZUxpbmVhZ2VSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9NZXRhZGF0YURpc2NvdmVyeVJlc291cmNlLmh0bWwiPk1ldGFkYXRhRGlzY292ZXJ5UmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfUmV4c3RlckdyYXBoUmVzb3VyY2UuaHRtbCI+UmV4c3RlckdyYXBoUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfVHlwZXNSZXNvdXJjZS5odG1sIj5UeXBlc1Jlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgIDwvdWw+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9oZWFkZXI+CisgICAgPGRpdiBpZD0ibWFpbiIgY2xhc3M9ImNvbHVtbiBmaXJzdCBsYXN0IHNwYW4tMjAiPgorICAgICAgPGgxPlJleHN0ZXJHcmFwaFJlc291cmNlPC9oMT4KKworICAgICAgPHA+SmVyc2V5IFJlc291cmNlIGZvciBsaW5lYWdlIG1ldGFkYXRhIG9wZXJhdGlvbnMuCitJbXBsZW1lbnRzIG1vc3Qgb2YgdGhlIEdFVCBvcGVyYXRpb25zIG9mIFJleHN0ZXIgQVBJIHdpdGggb3V0IHRoZSBpbmRleGVzLgoraHR0cHM6Ly9naXRodWIuY29tL3RpbmtlcnBvcC9yZXhzdGVyL3dpa2kvQmFzaWMtUkVTVC1BUEkKKworVGhpcyBpcyBhIHN1YnNldCBvZiBSZXhzdGVyJ3MgUkVTVCBBUEksIGRlc2lnbmVkIHRvIHByb3ZpZGUgb25seSByZWFkLW9ubHkgbWV0aG9kcworZm9yIGFjY2Vzc2luZyB0aGUgYmFja2VuZCBncmFwaC48L3A+CisgICAgICA8cD5UaGUgZm9sbG93aW5nIHJlc291cmNlcyBhcmUgYXBwbGljYWJsZTo8L3A+CisgICAgICA8dWw+CisgICAgICAgIDxsaT4KKyAgICAgICAgPGEgaHJlZj0iI3BhdGhfX2dyYXBoX2VkZ2VzXy1pZC0uaHRtbCI+L2dyYXBoL2VkZ2VzL3tpZH08L2E+CisgICAgICAgIDwvbGk+CisgICAgICAgIDxsaT4KKyAgICAgICAgPGEgaHJlZj0iI3BhdGhfX2dyYXBoX3ZlcnRpY2VzLmh0bWwiPi9ncmFwaC92ZXJ0aWNlczwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPgorICAgICAgICA8YSBocmVmPSIjcGF0aF9fZ3JhcGhfdmVydGljZXNfLWlkLS5odG1sIj4vZ3JhcGgvdmVydGljZXMve2lkfTwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPgorICAgICAgICA8YSBocmVmPSIjcGF0aF9fZ3JhcGhfdmVydGljZXNfLWlkLV8tZGlyZWN0aW9uLS5odG1sIj4vZ3JhcGgvdmVydGljZXMve2lkfS97ZGlyZWN0aW9ufTwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPgorICAgICAgICA8YSBocmVmPSIjcGF0aF9fZ3JhcGhfdmVydGljZXNfcHJvcGVydGllc18taWQtLmh0bWwiPi9ncmFwaC92ZXJ0aWNlcy9wcm9wZXJ0aWVzL3tpZH08L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8L3VsPgorICAgICAgICA8YSBuYW1lPSJwYXRoX19ncmFwaF9lZGdlc18taWQtLmh0bWwiPjwvYT4KKyAgICAgIDxoMT4vZ3JhcGgvZWRnZXMve2lkfTwvaDE+CisgICAgICA8YSBuYW1lPSJHRVQiPjwvYT4KKyAgICAgIDxoMj5HRVQ8L2gyPgorICAgICAgPHA+CisgICAgICAgICAgICBHZXQgYSBzaW5nbGUgZWRnZSB3aXRoIGEgdW5pcXVlIGlkLgorCitHRVQgaHR0cDovL2hvc3QvbWV0YWRhdGEvbGluZWFnZS9lZGdlcy9pZAorZ3JhcGguZ2V0RWRnZShpZCk7CisgICAgICAgICAgPC9wPgorICAgICAgPGgzPlBhcmFtZXRlcnM8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPm5hbWU8L3RoPgorICAgICAgICAgIDx0aD5kZXNjcmlwdGlvbjwvdGg+CisgICAgICAgICAgPHRoPnR5cGU8L3RoPgorICAgICAgICAgIDx0aD5kZWZhdWx0PC90aD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5pZDwvdGQ+CisgICAgICAgICAgPHRkPgorICAgICAgICAgICAgKG5vIGRvY3VtZW50YXRpb24gcHJvdmlkZWQpCisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cGF0aDwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD4obm8gZG9jdW1lbnRhdGlvbiBwcm92aWRlZCk8L3A+CisgICAgICAgIDxhIG5hbWU9InBhdGhfX2dyYXBoX3ZlcnRpY2VzLmh0bWwiPjwvYT4KKyAgICAgIDxoMT4vZ3JhcGgvdmVydGljZXM8L2gxPgorICAgICAgPGEgbmFtZT0iR0VUIj48L2E+CisgICAgICA8aDI+R0VUPC9oMj4KKyAgICAgIDxwPgorICAgICAgICAgICAgR2V0IGEgbGlzdCBvZiB2ZXJ0aWNlcyBtYXRjaGluZyBhIHByb3BlcnR5IGtleSBhbmQgYSB2YWx1ZS4KKzxwLz4KK0dFVCBodHRwOi8vaG9zdC9tZXRhZGF0YS9saW5lYWdlL3ZlcnRpY2VzP2tleT08a2V5PiZ2YWx1ZT08dmFsdWU+CitncmFwaC5nZXRWZXJ0aWNlcyhrZXksIHZhbHVlKTsKKyAgICAgICAgICA8L3A+CisgICAgICA8aDM+UGFyYW1ldGVyczwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGg+bmFtZTwvdGg+CisgICAgICAgICAgPHRoPmRlc2NyaXB0aW9uPC90aD4KKyAgICAgICAgICA8dGg+dHlwZTwvdGg+CisgICAgICAgICAgPHRoPmRlZmF1bHQ8L3RoPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPmtleTwvdGQ+CisgICAgICAgICAgPHRkPgorICAgICAgICAgICAgKG5vIGRvY3VtZW50YXRpb24gcHJvdmlkZWQpCisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cXVlcnk8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPnZhbHVlPC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAobm8gZG9jdW1lbnRhdGlvbiBwcm92aWRlZCkKKyAgICAgICAgICA8L3RkPgorICAgICAgICAgIDx0ZD5xdWVyeTwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD4obm8gZG9jdW1lbnRhdGlvbiBwcm92aWRlZCk8L3A+CisgICAgICAgIDxhIG5hbWU9InBhdGhfX2dyYXBoX3ZlcnRpY2VzXy1pZC0uaHRtbCI+PC9hPgorICAgICAgPGgxPi9ncmFwaC92ZXJ0aWNlcy97aWR9PC9oMT4KKyAgICAgIDxhIG5hbWU9IkdFVCI+PC9hPgorICAgICAgPGgyPkdFVDwvaDI+CisgICAgICA8cD4KKyAgICAgICAgICAgIEdldCBhIHNpbmdsZSB2ZXJ0ZXggd2l0aCBhIHVuaXF1ZSBpZC4KKworR0VUIGh0dHA6Ly9ob3N0L21ldGFkYXRhL2xpbmVhZ2UvdmVydGljZXMvaWQKK2dyYXBoLmdldFZlcnRleChpZCk7CisgICAgICAgICAgPC9wPgorICAgICAgPGgzPlBhcmFtZXRlcnM8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPm5hbWU8L3RoPgorICAgICAgICAgIDx0aD5kZXNjcmlwdGlvbjwvdGg+CisgICAgICAgICAgPHRoPnR5cGU8L3RoPgorICAgICAgICAgIDx0aD5kZWZhdWx0PC90aD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5pZDwvdGQ+CisgICAgICAgICAgPHRkPgorICAgICAgICAgICAgKG5vIGRvY3VtZW50YXRpb24gcHJvdmlkZWQpCisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cGF0aDwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD4obm8gZG9jdW1lbnRhdGlvbiBwcm92aWRlZCk8L3A+CisgICAgICAgIDxhIG5hbWU9InBhdGhfX2dyYXBoX3ZlcnRpY2VzXy1pZC1fLWRpcmVjdGlvbi0uaHRtbCI+PC9hPgorICAgICAgPGgxPi9ncmFwaC92ZXJ0aWNlcy97aWR9L3tkaXJlY3Rpb259PC9oMT4KKyAgICAgIDxhIG5hbWU9IkdFVCI+PC9hPgorICAgICAgPGgyPkdFVDwvaDI+CisgICAgICA8cD4KKyAgICAgICAgICAgIEdldCBhIGxpc3Qgb2YgYWRqYWNlbnQgZWRnZXMgd2l0aCBhIGRpcmVjdGlvbi4KKworR0VUIGh0dHA6Ly9ob3N0L21ldGFkYXRhL2xpbmVhZ2UvdmVydGljZXMvaWQvZGlyZWN0aW9uCitncmFwaC5nZXRWZXJ0ZXgoaWQpLmdldHtEaXJlY3Rpb259RWRnZXMoKTsKK2RpcmVjdGlvbjogeyg/IW91dEUpKD8hYm90aEUpKD8haW5FKSg/IW91dCkoPyFib3RoKSg/IWluKSg/IXF1ZXJ5KS4rfQorICAgICAgICAgIDwvcD4KKyAgICAgIDxoMz5QYXJhbWV0ZXJzPC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aD5uYW1lPC90aD4KKyAgICAgICAgICA8dGg+ZGVzY3JpcHRpb248L3RoPgorICAgICAgICAgIDx0aD50eXBlPC90aD4KKyAgICAgICAgICA8dGg+ZGVmYXVsdDwvdGg+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+aWQ8L3RkPgorICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgIChubyBkb2N1bWVudGF0aW9uIHByb3ZpZGVkKQorICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPHRkPnBhdGg8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPmRpcmVjdGlvbjwvdGQ+CisgICAgICAgICAgPHRkPgorICAgICAgICAgICAgKG5vIGRvY3VtZW50YXRpb24gcHJvdmlkZWQpCisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cGF0aDwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD4obm8gZG9jdW1lbnRhdGlvbiBwcm92aWRlZCk8L3A+CisgICAgICAgIDxhIG5hbWU9InBhdGhfX2dyYXBoX3ZlcnRpY2VzX3Byb3BlcnRpZXNfLWlkLS5odG1sIj48L2E+CisgICAgICA8aDE+L2dyYXBoL3ZlcnRpY2VzL3Byb3BlcnRpZXMve2lkfTwvaDE+CisgICAgICA8YSBuYW1lPSJHRVQiPjwvYT4KKyAgICAgIDxoMj5HRVQ8L2gyPgorICAgICAgPHA+CisgICAgICAgICAgICBHZXQgcHJvcGVydGllcyBmb3IgYSBzaW5nbGUgdmVydGV4IHdpdGggYSB1bmlxdWUgaWQuCitUaGlzIGlzIE5PVCBhIHJleHN0ZXIgQVBJLgorPHAvPgorR0VUIGh0dHA6Ly9ob3N0L21ldGFkYXRhL2xpbmVhZ2UvdmVydGljZXMvcHJvcGVydGllcy9pZAorICAgICAgICAgIDwvcD4KKyAgICAgIDxoMz5QYXJhbWV0ZXJzPC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aD5uYW1lPC90aD4KKyAgICAgICAgICA8dGg+ZGVzY3JpcHRpb248L3RoPgorICAgICAgICAgIDx0aD50eXBlPC90aD4KKyAgICAgICAgICA8dGg+ZGVmYXVsdDwvdGg+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+aWQ8L3RkPgorICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgIChubyBkb2N1bWVudGF0aW9uIHByb3ZpZGVkKQorICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPHRkPnBhdGg8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPnJlbGF0aW9uc2hpcHM8L3RkPgorICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgIChubyBkb2N1bWVudGF0aW9uIHByb3ZpZGVkKQorICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPHRkPnF1ZXJ5PC90ZD4KKyAgICAgICAgICA8dGQ+ZmFsc2U8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxoMz5SZXNwb25zZSBCb2R5PC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPmVsZW1lbnQ6PC90ZD4KKyAgICAgICAgICA8dGQ+KGN1c3RvbSk8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+bWVkaWEgdHlwZXM6PC90ZD4KKyAgICAgICAgICA8dGQ+YXBwbGljYXRpb24vanNvbjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPHA+KG5vIGRvY3VtZW50YXRpb24gcHJvdmlkZWQpPC9wPgorCisgICAgICA8ZGl2IGNsYXNzPSJjbGVhciIgLz4KKyAgICA8L2Rpdj4KKyAgICA8Zm9vdGVyPgorICAgICAgPGRpdiBpZD0iZm9vdGVyIj4KKyAgICAgICAgR2VuZXJhdGVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly9lbnVuY2lhdGUuY29kZWhhdXMub3JnIj5FbnVuY2lhdGU8L2E+LgorICAgICAgPC9kaXY+CisgICAgPC9mb290ZXI+CisgIDwvZGl2PiA8IS0tISBlbmQgb2YgI2NvbnRhaW5lciAtLT4KKworICA8IS0tIEphdmFTY3JpcHQgYXQgdGhlIGJvdHRvbSBmb3IgZmFzdCBwYWdlIGxvYWRpbmcgLS0+CisKKyAgPCEtLSBHcmFiIEdvb2dsZSBDRE4ncyBqUXVlcnksIHdpdGggYSBwcm90b2NvbCByZWxhdGl2ZSBVUkw7IGZhbGwgYmFjayB0byBsb2NhbCBpZiBuZWNlc3NhcnkgLS0+CisgIDxzY3JpcHQgc3JjPSIvL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjUuMS9qcXVlcnkuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PndpbmRvdy5qUXVlcnkgfHwgZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgc3JjPSdqcy9saWJzL2pxdWVyeS0xLjUuMS5taW4uanMnPlx4M0Mvc2NyaXB0PiIpPC9zY3JpcHQ+CisKKyAgPCEtLW1hbmFnZSB0aGUgbmF2aWdhdGlvbiBtZW51LS0+CisgIDxzY3JpcHQgc3JjPSJqcy9saWJzL3hicmVhZGNydW1icy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+CisgICAgJChmdW5jdGlvbigpIHsKKyAgICAgICQoJyNicmVhZGNydW1icycpLnhCcmVhZGNydW1icygpOworICAgIH0pOworICA8L3NjcmlwdD4KKworCisgIDwhLS0gcHJldHRpZnkgY29kZSBibG9ja3MuIHNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ29vZ2xlLWNvZGUtcHJldHRpZnkvIC0tPgorICA8c2NyaXB0IHNyYz0ianMvbGlicy9wcmV0dGlmeS9wcmV0dGlmeS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+CisgICAgJChmdW5jdGlvbigpIHsKKyAgICAgIHByZXR0eVByaW50KCk7CisgICAgfSk7CisgIDwvc2NyaXB0PgorCisgIDwhLS1baWYgbHQgSUUgNyBdPgorICAgIDxzY3JpcHQgc3JjPSJqcy9saWJzL2RkX2JlbGF0ZWRwbmcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+RERfYmVsYXRlZFBORy5maXgoImltZywgLnBuZ19iZyIpOyAvLyBGaXggYW55IDxpbWc+IG9yIC5wbmdfYmcgYmctaW1hZ2VzLiBBbHNvLCBwbGVhc2UgcmVhZCBnb28uZ2wvbVppeWIgPC9zY3JpcHQ+CisgIDwhW2VuZGlmXS0tPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2FwaS9yZXNvdXJjZV9UeXBlc1Jlc291cmNlLmh0bWwgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9yZXNvdXJjZV9UeXBlc1Jlc291cmNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4ODYxYgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvYXBpL3Jlc291cmNlX1R5cGVzUmVzb3VyY2UuaHRtbApAQCAtMCwwICsxLDIxNiBAQAorPCFkb2N0eXBlIGh0bWw+Cis8IS0tIHBhdWxpcmlzaC5jb20vMjAwOC9jb25kaXRpb25hbC1zdHlsZXNoZWV0cy12cy1jc3MtaGFja3MtYW5zd2VyLW5laXRoZXIvIC0tPgorPCEtLVtpZiBsdCBJRSA3IF0+IDxodG1sIGNsYXNzPSJuby1qcyBpZTYiIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cis8IS0tW2lmIElFIDcgXT4gICAgPGh0bWwgY2xhc3M9Im5vLWpzIGllNyIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4KKzwhLS1baWYgSUUgOCBdPiAgICA8aHRtbCBjbGFzcz0ibm8tanMgaWU4IiBsYW5nPSJlbiI+IDwhW2VuZGlmXS0tPgorPCEtLVtpZiAoZ3RlIElFIDkpfCEoSUUpXT48IS0tPiA8aHRtbCBjbGFzcz0ibm8tanMiIGxhbmc9ImVuIj4gPCEtLTwhW2VuZGlmXS0tPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKworICA8IS0tIEFsd2F5cyBmb3JjZSBsYXRlc3QgSUUgcmVuZGVyaW5nIGVuZ2luZSAoZXZlbiBpbiBpbnRyYW5ldCkgJiBDaHJvbWUgRnJhbWUKKyAgICAgICBSZW1vdmUgdGhpcyBpZiB5b3UgdXNlIHRoZSAuaHRhY2Nlc3MgLS0+CisgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+CisKKyAgPHRpdGxlPlR5cGVzUmVzb3VyY2U8L3RpdGxlPgorCisgIDwhLS0gTW9iaWxlIHZpZXdwb3J0IG9wdGltaXplZDogai5tcC9icGxhdGV2aWV3cG9ydCAtLT4KKyAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgorCisgIDwhLS0gQ1NTOiBpbXBsaWVkIG1lZGlhPSJhbGwiIC0tPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9zdHlsZS5jc3M/dj0yIj4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvcHJldHRpZnkuY3NzIj4KKworICA8IS0tIEFsbCBKYXZhU2NyaXB0IGF0IHRoZSBib3R0b20sIGV4Y2VwdCBmb3IgTW9kZXJuaXpyIHdoaWNoIGVuYWJsZXMgSFRNTDUgZWxlbWVudHMgJiBmZWF0dXJlIGRldGVjdHMgLS0+CisgIDxzY3JpcHQgc3JjPSJqcy9saWJzL21vZGVybml6ci0xLjcubWluLmpzIj48L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBjbGFzcz0iaG9tZSI+CisKKyAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICA8aGVhZGVyPgorICAgICAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iY29sdW1uIGZpcnN0IGxhc3Qgc3Bhbi0yMCI+CisgICAgICAgIDxkaXYgaWQ9InNpdGUtbmFtZSIgY2xhc3M9ImNvbHVtbiBzcGFuLTE4IGFwcGVuZC0xIHByZXBlbmQtMSBmaXJzdCBsYXN0Ij48YSBocmVmPSJpbmRleC5odG1sIj5UeXBlc1Jlc291cmNlPC9hPjwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJwcmltYXJ5IiBjbGFzcz0iY29sdW1uIHNwYW4tMTggYXBwZW5kLTEgcHJlcGVuZC0xIGZpcnN0IGxhc3QiPgorICAgICAgICAgIDx1bCBjbGFzcz0ibmF2aWdhdGlvbiI+CisgICAgICAgICAgICA8bGkgaWQ9Im5hdi1yZXN0Ij48YSBocmVmPSJyZXN0Lmh0bWwiPlJFU1Q8L2E+PC9saT4KKyAgICAgICAgICAgIDxsaSBpZD0ibmF2LWRhdGEiPjxhIGhyZWY9Im1vZGVsLmh0bWwiPkRhdGEgTW9kZWw8L2E+PC9saT4KKyAgICAgICAgICA8L3VsPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdj4KKyAgICAgICAgICA8dWwgY2xhc3M9InhicmVhZGNydW1icyIgaWQ9ImJyZWFkY3J1bWJzIj4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgY2xhc3M9ImhvbWUiPkhvbWU8L2E+ICZndDsKKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgIDxhIGhyZWY9InJlc3QuaHRtbCI+UkVTVDwvYT4gJmd0OworICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Im1vZGVsLmh0bWwiPkRhdGEgTW9kZWw8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzdC5odG1sIj5SRVNUPC9hPjwvbGk+CisgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPGxpIGNsYXNzPSJjdXJyZW50Ij4KKyAgICAgICAgICAgICAgPGEgaHJlZj0icmVzb3VyY2VfVHlwZXNSZXNvdXJjZS5odG1sIj5UeXBlc1Jlc291cmNlPC9hPgorICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX0FkbWluUmVzb3VyY2UuaHRtbCI+QWRtaW5SZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9FbnRpdHlSZXNvdXJjZS5odG1sIj5FbnRpdHlSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9IaXZlTGluZWFnZVJlc291cmNlLmh0bWwiPkhpdmVMaW5lYWdlUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfTWV0YWRhdGFEaXNjb3ZlcnlSZXNvdXJjZS5odG1sIj5NZXRhZGF0YURpc2NvdmVyeVJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX1JleHN0ZXJHcmFwaFJlc291cmNlLmh0bWwiPlJleHN0ZXJHcmFwaFJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX1R5cGVzUmVzb3VyY2UuaHRtbCI+VHlwZXNSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICA8L3VsPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvaGVhZGVyPgorICAgIDxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb2x1bW4gZmlyc3QgbGFzdCBzcGFuLTIwIj4KKyAgICAgIDxoMT5UeXBlc1Jlc291cmNlPC9oMT4KKworICAgICAgPHA+VGhpcyBjbGFzcyBwcm92aWRlcyBSRVNUZnVsIEFQSSBmb3IgVHlwZXMuCisKK0EgdHlwZSBpcyB0aGUgZGVzY3JpcHRpb24gb2YgYW55IHJlcHJlc2VudGFibGUgaXRlbTsKK2UuZy4gYSBIaXZlIHRhYmxlCisKK1lvdSBjb3VsZCByZXByZXNlbnQgYW55IG1ldGEgbW9kZWwgcmVwcmVzZW50aW5nIGFueSBkb21haW4gdXNpbmcgdGhlc2UgdHlwZXMuPC9wPgorICAgICAgPHA+VGhlIGZvbGxvd2luZyByZXNvdXJjZXMgYXJlIGFwcGxpY2FibGU6PC9wPgorICAgICAgPHVsPgorICAgICAgICA8bGk+CisgICAgICAgIDxhIGhyZWY9IiNwYXRoX190eXBlcy5odG1sIj4vdHlwZXM8L2E+CisgICAgICAgIDwvbGk+CisgICAgICAgIDxsaT4KKyAgICAgICAgPGEgaHJlZj0iI3BhdGhfX3R5cGVzXy10eXBlTmFtZS0uaHRtbCI+L3R5cGVzL3t0eXBlTmFtZX08L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8L3VsPgorICAgICAgICA8YSBuYW1lPSJwYXRoX190eXBlcy5odG1sIj48L2E+CisgICAgICA8aDE+L3R5cGVzPC9oMT4KKyAgICAgIDxhIG5hbWU9IlBPU1QiPjwvYT4KKyAgICAgIDxoMj5QT1NUPC9oMj4KKyAgICAgIDxwPgorICAgICAgICAgICAgU3VibWl0cyBhIHR5cGUgZGVmaW5pdGlvbiBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gdHlwZSByZXByZXNlbnRpbmcgYSBtZXRhIG1vZGVsIG9mIGEKK2RvbWFpbi4gQ291bGQgcmVwcmVzZW50IHRoaW5ncyBsaWtlIEhpdmUgRGF0YWJhc2UsIEhpdmUgVGFibGUsIGV0Yy4KKyAgICAgICAgICA8L3A+CisgICAgICA8aDM+UmVzcG9uc2UgQm9keTwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5lbGVtZW50OjwvdGQ+CisgICAgICAgICAgPHRkPihjdXN0b20pPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPm1lZGlhIHR5cGVzOjwvdGQ+CisgICAgICAgICAgPHRkPmFwcGxpY2F0aW9uL2pzb248L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxwPihubyBkb2N1bWVudGF0aW9uIHByb3ZpZGVkKTwvcD4KKyAgICAgIDxhIG5hbWU9IkdFVCI+PC9hPgorICAgICAgPGgyPkdFVDwvaDI+CisgICAgICA8cD4KKyAgICAgICAgICAgIEdldHMgdGhlIGxpc3Qgb2YgdHJhaXQgdHlwZSBuYW1lcyByZWdpc3RlcmVkIGluIHRoZSB0eXBlIHN5c3RlbS4KKyAgICAgICAgICA8L3A+CisgICAgICA8aDM+UGFyYW1ldGVyczwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGg+bmFtZTwvdGg+CisgICAgICAgICAgPHRoPmRlc2NyaXB0aW9uPC90aD4KKyAgICAgICAgICA8dGg+dHlwZTwvdGg+CisgICAgICAgICAgPHRoPmRlZmF1bHQ8L3RoPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPnR5cGU8L3RkPgorICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgIHR5cGUgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIGVudW0KK29yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS50eXBlcy5EYXRhVHlwZXMuVHlwZUNhdGVnb3J5CitUeXBpY2FsbHksIHdvdWxkIGJlIG9uZSBvZiBhbGwsIFRSQUlULCBDTEFTUywgRU5VTSwgU1RSVUNUCisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cXVlcnk8L3RkPgorICAgICAgICAgIDx0ZD5hbGw8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxoMz5SZXNwb25zZSBCb2R5PC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPmVsZW1lbnQ6PC90ZD4KKyAgICAgICAgICA8dGQ+KGN1c3RvbSk8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+bWVkaWEgdHlwZXM6PC90ZD4KKyAgICAgICAgICA8dGQ+YXBwbGljYXRpb24vanNvbjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPHA+ZW50aXR5IG5hbWVzIHJlc3BvbnNlIHBheWxvYWQgYXMganNvbjwvcD4KKyAgICAgICAgPGEgbmFtZT0icGF0aF9fdHlwZXNfLXR5cGVOYW1lLS5odG1sIj48L2E+CisgICAgICA8aDE+L3R5cGVzL3t0eXBlTmFtZX08L2gxPgorICAgICAgPGEgbmFtZT0iR0VUIj48L2E+CisgICAgICA8aDI+R0VUPC9oMj4KKyAgICAgIDxwPgorICAgICAgICAgICAgRmV0Y2ggdGhlIGNvbXBsZXRlIGRlZmluaXRpb24gb2YgYSBnaXZlbiB0eXBlIG5hbWUgd2hpY2ggaXMgdW5pcXVlLgorICAgICAgICAgIDwvcD4KKyAgICAgIDxoMz5QYXJhbWV0ZXJzPC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aD5uYW1lPC90aD4KKyAgICAgICAgICA8dGg+ZGVzY3JpcHRpb248L3RoPgorICAgICAgICAgIDx0aD50eXBlPC90aD4KKyAgICAgICAgICA8dGg+ZGVmYXVsdDwvdGg+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+dHlwZU5hbWU8L3RkPgorICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgIG5hbWUgb2YgYSB0eXBlIHdoaWNoIGlzIHVuaXF1ZS4KKyAgICAgICAgICA8L3RkPgorICAgICAgICAgIDx0ZD5wYXRoPC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8aDM+UmVzcG9uc2UgQm9keTwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5lbGVtZW50OjwvdGQ+CisgICAgICAgICAgPHRkPihjdXN0b20pPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPm1lZGlhIHR5cGVzOjwvdGQ+CisgICAgICAgICAgPHRkPmFwcGxpY2F0aW9uL2pzb248L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxwPihubyBkb2N1bWVudGF0aW9uIHByb3ZpZGVkKTwvcD4KKworICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiIC8+CisgICAgPC9kaXY+CisgICAgPGZvb3Rlcj4KKyAgICAgIDxkaXYgaWQ9ImZvb3RlciI+CisgICAgICAgIEdlbmVyYXRlZCBieSA8YSBocmVmPSJodHRwOi8vZW51bmNpYXRlLmNvZGVoYXVzLm9yZyI+RW51bmNpYXRlPC9hPi4KKyAgICAgIDwvZGl2PgorICAgIDwvZm9vdGVyPgorICA8L2Rpdj4gPCEtLSEgZW5kIG9mICNjb250YWluZXIgLS0+CisKKyAgPCEtLSBKYXZhU2NyaXB0IGF0IHRoZSBib3R0b20gZm9yIGZhc3QgcGFnZSBsb2FkaW5nIC0tPgorCisgIDwhLS0gR3JhYiBHb29nbGUgQ0ROJ3MgalF1ZXJ5LCB3aXRoIGEgcHJvdG9jb2wgcmVsYXRpdmUgVVJMOyBmYWxsIGJhY2sgdG8gbG9jYWwgaWYgbmVjZXNzYXJ5IC0tPgorICA8c2NyaXB0IHNyYz0iLy9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS41LjEvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD53aW5kb3cualF1ZXJ5IHx8IGRvY3VtZW50LndyaXRlKCI8c2NyaXB0IHNyYz0nanMvbGlicy9qcXVlcnktMS41LjEubWluLmpzJz5ceDNDL3NjcmlwdD4iKTwvc2NyaXB0PgorCisgIDwhLS1tYW5hZ2UgdGhlIG5hdmlnYXRpb24gbWVudS0tPgorICA8c2NyaXB0IHNyYz0ianMvbGlicy94YnJlYWRjcnVtYnMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PgorICAgICQoZnVuY3Rpb24oKSB7CisgICAgICAkKCcjYnJlYWRjcnVtYnMnKS54QnJlYWRjcnVtYnMoKTsKKyAgICB9KTsKKyAgPC9zY3JpcHQ+CisKKworICA8IS0tIHByZXR0aWZ5IGNvZGUgYmxvY2tzLiBzZWUgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2dvb2dsZS1jb2RlLXByZXR0aWZ5LyAtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvcHJldHRpZnkvcHJldHRpZnkuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PgorICAgICQoZnVuY3Rpb24oKSB7CisgICAgICBwcmV0dHlQcmludCgpOworICAgIH0pOworICA8L3NjcmlwdD4KKworICA8IS0tW2lmIGx0IElFIDcgXT4KKyAgICA8c2NyaXB0IHNyYz0ianMvbGlicy9kZF9iZWxhdGVkcG5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PkREX2JlbGF0ZWRQTkcuZml4KCJpbWcsIC5wbmdfYmciKTsgLy8gRml4IGFueSA8aW1nPiBvciAucG5nX2JnIGJnLWltYWdlcy4gQWxzbywgcGxlYXNlIHJlYWQgZ29vLmdsL21aaXliIDwvc2NyaXB0PgorICA8IVtlbmRpZl0tLT4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9hcGkvcmVzdC5odG1sIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvcmVzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0N2QwOTkKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2FwaS9yZXN0Lmh0bWwKQEAgLTAsMCArMSwxMTIgQEAKKzwhZG9jdHlwZSBodG1sPgorPCEtLSBwYXVsaXJpc2guY29tLzIwMDgvY29uZGl0aW9uYWwtc3R5bGVzaGVldHMtdnMtY3NzLWhhY2tzLWFuc3dlci1uZWl0aGVyLyAtLT4KKzwhLS1baWYgbHQgSUUgNyBdPiA8aHRtbCBjbGFzcz0ibm8tanMgaWU2IiBsYW5nPSJlbiI+IDwhW2VuZGlmXS0tPgorPCEtLVtpZiBJRSA3IF0+ICAgIDxodG1sIGNsYXNzPSJuby1qcyBpZTciIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cis8IS0tW2lmIElFIDggXT4gICAgPGh0bWwgY2xhc3M9Im5vLWpzIGllOCIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4KKzwhLS1baWYgKGd0ZSBJRSA5KXwhKElFKV0+PCEtLT4gPGh0bWwgY2xhc3M9Im5vLWpzIiBsYW5nPSJlbiI+IDwhLS08IVtlbmRpZl0tLT4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisKKyAgPCEtLSBBbHdheXMgZm9yY2UgbGF0ZXN0IElFIHJlbmRlcmluZyBlbmdpbmUgKGV2ZW4gaW4gaW50cmFuZXQpICYgQ2hyb21lIEZyYW1lCisgICAgICAgUmVtb3ZlIHRoaXMgaWYgeW91IHVzZSB0aGUgLmh0YWNjZXNzIC0tPgorICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiPgorCisgIDx0aXRsZT5SRVNUPC90aXRsZT4KKworICA8IS0tIE1vYmlsZSB2aWV3cG9ydCBvcHRpbWl6ZWQ6IGoubXAvYnBsYXRldmlld3BvcnQgLS0+CisgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KKworICA8IS0tIENTUzogaW1wbGllZCBtZWRpYT0iYWxsIiAtLT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3Mvc3R5bGUuY3NzP3Y9MiI+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3ByZXR0aWZ5LmNzcyI+CisKKyAgPCEtLSBBbGwgSmF2YVNjcmlwdCBhdCB0aGUgYm90dG9tLCBleGNlcHQgZm9yIE1vZGVybml6ciB3aGljaCBlbmFibGVzIEhUTUw1IGVsZW1lbnRzICYgZmVhdHVyZSBkZXRlY3RzIC0tPgorICA8c2NyaXB0IHNyYz0ianMvbGlicy9tb2Rlcm5penItMS43Lm1pbi5qcyI+PC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgY2xhc3M9ImhvbWUiPgorCisgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgPGhlYWRlcj4KKyAgICAgIDxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImNvbHVtbiBmaXJzdCBsYXN0IHNwYW4tMjAiPgorICAgICAgICA8ZGl2IGlkPSJzaXRlLW5hbWUiIGNsYXNzPSJjb2x1bW4gc3Bhbi0xOCBhcHBlbmQtMSBwcmVwZW5kLTEgZmlyc3QgbGFzdCI+PGEgaHJlZj0iaW5kZXguaHRtbCI+UkVTVDwvYT48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0icHJpbWFyeSIgY2xhc3M9ImNvbHVtbiBzcGFuLTE4IGFwcGVuZC0xIHByZXBlbmQtMSBmaXJzdCBsYXN0Ij4KKyAgICAgICAgICA8dWwgY2xhc3M9Im5hdmlnYXRpb24iPgorICAgICAgICAgICAgPGxpIGlkPSJuYXYtcmVzdCI+PGEgaHJlZj0icmVzdC5odG1sIj5SRVNUPC9hPjwvbGk+CisgICAgICAgICAgICA8bGkgaWQ9Im5hdi1kYXRhIj48YSBocmVmPSJtb2RlbC5odG1sIj5EYXRhIE1vZGVsPC9hPjwvbGk+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXY+CisgICAgICAgICAgPHVsIGNsYXNzPSJ4YnJlYWRjcnVtYnMiIGlkPSJicmVhZGNydW1icyI+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIGNsYXNzPSJob21lIj5Ib21lPC9hPiAmZ3Q7CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPGxpIGNsYXNzPSJjdXJyZW50Ij4KKyAgICAgICAgICAgICAgPGEgaHJlZj0icmVzdC5odG1sIj5SRVNUPC9hPgorICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Im1vZGVsLmh0bWwiPkRhdGEgTW9kZWw8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzdC5odG1sIj5SRVNUPC9hPjwvbGk+CisgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgIDwvdWw+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9oZWFkZXI+CisgICAgPGRpdiBpZD0ibWFpbiIgY2xhc3M9ImNvbHVtbiBmaXJzdCBsYXN0IHNwYW4tMjAiPgorICA8aDE+UkVTVCBSZXNvdXJjZXM8L2gxPgorICA8cD4KKyAgICBUaGlzIEFQSSBzdXBwb3J0cyBhIDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmVwcmVzZW50YXRpb25hbF9TdGF0ZV9UcmFuc2ZlciI+UmVwcmVzZW50YXRpb25hbCBTdGF0ZSBUcmFuc2ZlciAoUkVTVCk8L2E+CisgICAgbW9kZWwgZm9yIGFjY2Vzc2luZyBhIHNldCBvZiByZXNvdXJjZXMgdGhyb3VnaCBhIGZpeGVkIHNldCBvZiBvcGVyYXRpb25zLiBUaGUgZm9sbG93aW5nIHJlc291cmNlcyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBSRVNUZnVsIG1vZGVsOgorICA8L3A+CisgIDx1bD4KKyAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9BZG1pblJlc291cmNlLmh0bWwiPkFkbWluUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9FbnRpdHlSZXNvdXJjZS5odG1sIj5FbnRpdHlSZXNvdXJjZTwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX0hpdmVMaW5lYWdlUmVzb3VyY2UuaHRtbCI+SGl2ZUxpbmVhZ2VSZXNvdXJjZTwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX01ldGFkYXRhRGlzY292ZXJ5UmVzb3VyY2UuaHRtbCI+TWV0YWRhdGFEaXNjb3ZlcnlSZXNvdXJjZTwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX1JleHN0ZXJHcmFwaFJlc291cmNlLmh0bWwiPlJleHN0ZXJHcmFwaFJlc291cmNlPC9hPjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfVHlwZXNSZXNvdXJjZS5odG1sIj5UeXBlc1Jlc291cmNlPC9hPjwvbGk+CisgIDwvdWw+CisgIDxwPgorICAgIFRoZXJlIGlzIGFsc28gYSA8YSBocmVmPSJhcHBsaWNhdGlvbi53YWRsIj5XQURMIGRvY3VtZW50PC9hPiBkZXNjcmliaW5nIHRoZSBSRVNUIEFQSS4KKyAgPC9wPgorCisgICAgICA8ZGl2IGNsYXNzPSJjbGVhciIgLz4KKyAgICA8L2Rpdj4KKyAgICA8Zm9vdGVyPgorICAgICAgPGRpdiBpZD0iZm9vdGVyIj4KKyAgICAgICAgR2VuZXJhdGVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly9lbnVuY2lhdGUuY29kZWhhdXMub3JnIj5FbnVuY2lhdGU8L2E+LgorICAgICAgPC9kaXY+CisgICAgPC9mb290ZXI+CisgIDwvZGl2PiA8IS0tISBlbmQgb2YgI2NvbnRhaW5lciAtLT4KKworICA8IS0tIEphdmFTY3JpcHQgYXQgdGhlIGJvdHRvbSBmb3IgZmFzdCBwYWdlIGxvYWRpbmcgLS0+CisKKyAgPCEtLSBHcmFiIEdvb2dsZSBDRE4ncyBqUXVlcnksIHdpdGggYSBwcm90b2NvbCByZWxhdGl2ZSBVUkw7IGZhbGwgYmFjayB0byBsb2NhbCBpZiBuZWNlc3NhcnkgLS0+CisgIDxzY3JpcHQgc3JjPSIvL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjUuMS9qcXVlcnkuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PndpbmRvdy5qUXVlcnkgfHwgZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgc3JjPSdqcy9saWJzL2pxdWVyeS0xLjUuMS5taW4uanMnPlx4M0Mvc2NyaXB0PiIpPC9zY3JpcHQ+CisKKyAgPCEtLW1hbmFnZSB0aGUgbmF2aWdhdGlvbiBtZW51LS0+CisgIDxzY3JpcHQgc3JjPSJqcy9saWJzL3hicmVhZGNydW1icy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+CisgICAgJChmdW5jdGlvbigpIHsKKyAgICAgICQoJyNicmVhZGNydW1icycpLnhCcmVhZGNydW1icygpOworICAgIH0pOworICA8L3NjcmlwdD4KKworCisgIDwhLS0gcHJldHRpZnkgY29kZSBibG9ja3MuIHNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ29vZ2xlLWNvZGUtcHJldHRpZnkvIC0tPgorICA8c2NyaXB0IHNyYz0ianMvbGlicy9wcmV0dGlmeS9wcmV0dGlmeS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+CisgICAgJChmdW5jdGlvbigpIHsKKyAgICAgIHByZXR0eVByaW50KCk7CisgICAgfSk7CisgIDwvc2NyaXB0PgorCisgIDwhLS1baWYgbHQgSUUgNyBdPgorICAgIDxzY3JpcHQgc3JjPSJqcy9saWJzL2RkX2JlbGF0ZWRwbmcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+RERfYmVsYXRlZFBORy5maXgoImltZywgLnBuZ19iZyIpOyAvLyBGaXggYW55IDxpbWc+IG9yIC5wbmdfYmcgYmctaW1hZ2VzLiBBbHNvLCBwbGVhc2UgcmVhZCBnb28uZ2wvbVppeWIgPC9zY3JpcHQ+CisgIDwhW2VuZGlmXS0tPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2FwaS9yb2JvdHMudHh0IGIvMC41LjAtaW5jdWJhdGluZy9hcGkvcm9ib3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzEwZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9hcGkvcm9ib3RzLnR4dApAQCAtMCwwICsxLDUgQEAKKyMgd3d3LnJvYm90c3R4dC5vcmcvCisjIHd3dy5nb29nbGUuY29tL3N1cHBvcnQvd2VibWFzdGVycy9iaW4vYW5zd2VyLnB5P2hsPWVuJmFuc3dlcj0xNTY0NDkKKworVXNlci1hZ2VudDogKgorCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2FyY2hpdGVjdHVyZS5wbmcgYi8wLjUuMC1pbmN1YmF0aW5nL2FyY2hpdGVjdHVyZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI2ZGYzNwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvYXJjaGl0ZWN0dXJlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2Nzcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5jc3MgYi8wLjUuMC1pbmN1YmF0aW5nL2Nzcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RiNDEzMwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvY3NzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmNzcwpAQCAtMCwwICsxLDkgQEAKKy8qIQorICogQm9vdHN0cmFwIHYyLjEuMAorICoKKyAqIENvcHlyaWdodCAyMDEyIFR3aXR0ZXIsIEluYworICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIHYyLjAKKyAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIERlc2lnbmVkIGFuZCBidWlsdCB3aXRoIGFsbCB0aGUgbG92ZSBpbiB0aGUgd29ybGQgQHR3aXR0ZXIgYnkgQG1kbyBhbmQgQGZhdC4KKyAqL2FydGljbGUsYXNpZGUsZGV0YWlscyxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsaGVhZGVyLGhncm91cCxuYXYsc2VjdGlvbntkaXNwbGF5OmJsb2NrfWF1ZGlvLGNhbnZhcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7Knpvb206MX1hdWRpbzpub3QoW2NvbnRyb2xzXSl7ZGlzcGxheTpub25lfWh0bWx7Zm9udC1zaXplOjEwMCU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LW1zLXRleHQtc2l6ZS1hZGp1c3Q6MTAwJX1hOmZvY3Vze291dGxpbmU6dGhpbiBkb3R0ZWQgIzMzMztvdXRsaW5lOjVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDotMnB4fWE6aG92ZXIsYTphY3RpdmV7b3V0bGluZTowfXN1YixzdXB7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXN1cHt0b3A6LTAuNWVtfXN1Yntib3R0b206LTAuMjVlbX1pbWd7aGVpZ2h0OmF1dG87bWF4LXdpZHRoOjEwMCU7dmVydGljYWwtYWxpZ246bWlkZGxlO2JvcmRlcjowOy1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6YmljdWJpY30jbWFwX2NhbnZhcyBpbWd7bWF4LXdpZHRoOm5vbmV9YnV0dG9uLGlucHV0LHNlbGVjdCx0ZXh0YXJlYXttYXJnaW46MDtmb250LXNpemU6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9YnV0dG9uLGlucHV0eypvdmVyZmxvdzp2aXNpYmxlO2xpbmUtaGVpZ2h0Om5vcm1hbH1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXJ7cGFkZGluZzowO2JvcmRlcjowfWJ1dHRvbixpbnB1dFt0eXBlPSJidXR0b24iXSxpbnB1dFt0eXBlPSJyZXNldCJdLGlucHV0W3R5cGU9InN1Ym1pdCJde2N1cnNvcjpwb2ludGVyOy13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259aW5wdXRbdHlwZT0ic2VhcmNoIl17LXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94Oy13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGR9aW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24saW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9dGV4dGFyZWF7b3ZlcmZsb3c6YXV0bzt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmNsZWFyZml4eyp6b29tOjF9LmNsZWFyZml4OmJlZm9yZSwuY2xlYXJmaXg6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmNsZWFyZml4OmFmdGVye2NsZWFyOmJvdGh9LmhpZGUtdGV4dHtmb250OjAvMCBhO2NvbG9yOnRyYW5zcGFyZW50O3RleHQtc2hhZG93Om5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6MH0uaW5wdXQtYmxvY2stbGV2ZWx7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MzBweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9Ym9keXttYXJnaW46MDtmb250LWZhbWlseToiSGVsdmV0aWNhIE5ldWUiLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9YXtjb2xvcjojMDhjO3RleHQtZGVjb3JhdGlvbjpub25lfWE6aG92ZXJ7Y29sb3I6IzAwNTU4MDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5pbWctcm91bmRlZHstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHh9LmltZy1wb2xhcm9pZHtwYWRkaW5nOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwLjIpOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwwLjEpOy1tb3otYm94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwwLjEpO2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4xKX0uaW1nLWNpcmNsZXstd2Via2l0LWJvcmRlci1yYWRpdXM6NTAwcHg7LW1vei1ib3JkZXItcmFkaXVzOjUwMHB4O2JvcmRlci1yYWRpdXM6NTAwcHh9LnJvd3ttYXJnaW4tbGVmdDotMjBweDsqem9vbToxfS5yb3c6YmVmb3JlLC5yb3c6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LnJvdzphZnRlcntjbGVhcjpib3RofVtjbGFzcyo9InNwYW4iXXtmbG9hdDpsZWZ0O21hcmdpbi1sZWZ0OjIwcHh9LmNvbnRhaW5lciwubmF2YmFyLXN0YXRpYy10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLXRvcCAuY29udGFpbmVyLC5uYXZiYXItZml4ZWQtYm90dG9tIC5jb250YWluZXJ7d2lkdGg6OTQwcHh9LnNwYW4xMnt3aWR0aDo5NDBweH0uc3BhbjExe3dpZHRoOjg2MHB4fS5zcGFuMTB7d2lkdGg6NzgwcHh9LnNwYW45e3dpZHRoOjcwMHB4fS5zcGFuOHt3aWR0aDo2MjBweH0uc3Bhbjd7d2lkdGg6NTQwcHh9LnNwYW42e3dpZHRoOjQ2MHB4fS5zcGFuNXt3aWR0aDozODBweH0uc3BhbjR7d2lkdGg6MzAwcHh9LnNwYW4ze3dpZHRoOjIyMHB4fS5zcGFuMnt3aWR0aDoxNDBweH0uc3BhbjF7d2lkdGg6NjBweH0ub2Zmc2V0MTJ7bWFyZ2luLWxlZnQ6OTgwcHh9Lm9mZnNldDExe21hcmdpbi1sZWZ0OjkwMHB4fS5vZmZzZXQxMHttYXJnaW4tbGVmdDo4MjBweH0ub2Zmc2V0OXttYXJnaW4tbGVmdDo3NDBweH0ub2Zmc2V0OHttYXJnaW4tbGVmdDo2NjBweH0ub2Zmc2V0N3ttYXJnaW4tbGVmdDo1ODBweH0ub2Zmc2V0NnttYXJnaW4tbGVmdDo1MDBweH0ub2Zmc2V0NXttYXJnaW4tbGVmdDo0MjBweH0ub2Zmc2V0NHttYXJnaW4tbGVmdDozNDBweH0ub2Zmc2V0M3ttYXJnaW4tbGVmdDoyNjBweH0ub2Zmc2V0MnttYXJnaW4tbGVmdDoxODBweH0ub2Zmc2V0MXttYXJnaW4tbGVmdDoxMDBweH0ucm93LWZsdWlke3dpZHRoOjEwMCU7Knpvb206MX0ucm93LWZsdWlkOmJlZm9yZSwucm93LWZsdWlkOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5yb3ctZmx1aWQ6YWZ0ZXJ7Y2xlYXI6Ym90aH0ucm93LWZsdWlkIFtjbGFzcyo9InNwYW4iXXtkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnQ7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjMwcHg7bWFyZ2luLWxlZnQ6Mi4xMjc2NTk1NzQ0NjgwODUlOyptYXJnaW4tbGVmdDoyLjA3NDQ2ODA4NTEwNjM4MyU7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJdOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjB9LnJvdy1mbHVpZCAuc3BhbjEye3dpZHRoOjEwMCU7KndpZHRoOjk5Ljk0NjgwODUxMDYzODI5JX0ucm93LWZsdWlkIC5zcGFuMTF7d2lkdGg6OTEuNDg5MzYxNzAyMTI3NjUlOyp3aWR0aDo5MS40MzYxNzAyMTI3NjU5NCV9LnJvdy1mbHVpZCAuc3BhbjEwe3dpZHRoOjgyLjk3ODcyMzQwNDI1NTMyJTsqd2lkdGg6ODIuOTI1NTMxOTE0ODkzNjElfS5yb3ctZmx1aWQgLnNwYW45e3dpZHRoOjc0LjQ2ODA4NTEwNjM4Mjk3JTsqd2lkdGg6NzQuNDE0ODkzNjE3MDIxMjYlfS5yb3ctZmx1aWQgLnNwYW44e3dpZHRoOjY1Ljk1NzQ0NjgwODUxMDY0JTsqd2lkdGg6NjUuOTA0MjU1MzE5MTQ4OTMlfS5yb3ctZmx1aWQgLnNwYW43e3dpZHRoOjU3LjQ0NjgwODUxMDYzODI5JTsqd2lkdGg6NTcuMzkzNjE3MDIxMjc2NTklfS5yb3ctZmx1aWQgLnNwYW42e3dpZHRoOjQ4LjkzNjE3MDIxMjc2NTk1JTsqd2lkdGg6NDguODgyOTc4NzIzNDA0MjUlfS5yb3ctZmx1aWQgLnNwYW41e3dpZHRoOjQwLjQyNTUzMTkxNDg5MzYyJTsqd2lkdGg6NDAuMzcyMzQwNDI1NTMxOTIlfS5yb3ctZmx1aWQgLnNwYW40e3dpZHRoOjMxLjkxNDg5MzYxNzAyMTI3OCU7KndpZHRoOjMxLjg2MTcwMjEyNzY1OTU3NiV9LnJvdy1mbHVpZCAuc3BhbjN7d2lkdGg6MjMuNDA0MjU1MzE5MTQ4OTM0JTsqd2lkdGg6MjMuMzUxMDYzODI5Nzg3MjMzJX0ucm93LWZsdWlkIC5zcGFuMnt3aWR0aDoxNC44OTM2MTcwMjEyNzY1OTUlOyp3aWR0aDoxNC44NDA0MjU1MzE5MTQ4OTQlfS5yb3ctZmx1aWQgLnNwYW4xe3dpZHRoOjYuMzgyOTc4NzIzNDA0MjU1JTsqd2lkdGg6Ni4zMjk3ODcyMzQwNDI1NTMlfS5yb3ctZmx1aWQgLm9mZnNldDEye21hcmdpbi1sZWZ0OjEwNC4yNTUzMTkxNDg5MzYxNyU7Km1hcmdpbi1sZWZ0OjEwNC4xNDg5MzYxNzAyMTI3NSV9LnJvdy1mbHVpZCAub2Zmc2V0MTI6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MTAyLjEyNzY1OTU3NDQ2ODA4JTsqbWFyZ2luLWxlZnQ6MTAyLjAyMTI3NjU5NTc0NDY3JX0ucm93LWZsdWlkIC5vZmZzZXQxMXttYXJnaW4tbGVmdDo5NS43NDQ2ODA4NTEwNjM4MiU7Km1hcmdpbi1sZWZ0Ojk1LjYzODI5Nzg3MjM0MDQlfS5yb3ctZmx1aWQgLm9mZnNldDExOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjkzLjYxNzAyMTI3NjU5NTc0JTsqbWFyZ2luLWxlZnQ6OTMuNTEwNjM4Mjk3ODcyMzIlfS5yb3ctZmx1aWQgLm9mZnNldDEwe21hcmdpbi1sZWZ0Ojg3LjIzNDA0MjU1MzE5MTQ5JTsqbWFyZ2luLWxlZnQ6ODcuMTI3NjU5NTc0NDY4MDclfS5yb3ctZmx1aWQgLm9mZnNldDEwOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojg1LjEwNjM4Mjk3ODcyMzQlOyptYXJnaW4tbGVmdDo4NC45OTk5OTk5OTk5OTk5OSV9LnJvdy1mbHVpZCAub2Zmc2V0OXttYXJnaW4tbGVmdDo3OC43MjM0MDQyNTUzMTkxNCU7Km1hcmdpbi1sZWZ0Ojc4LjYxNzAyMTI3NjU5NTcyJX0ucm93LWZsdWlkIC5vZmZzZXQ5OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0Ojc2LjU5NTc0NDY4MDg1MTA2JTsqbWFyZ2luLWxlZnQ6NzYuNDg5MzYxNzAyMTI3NjQlfS5yb3ctZmx1aWQgLm9mZnNldDh7bWFyZ2luLWxlZnQ6NzAuMjEyNzY1OTU3NDQ2OCU7Km1hcmdpbi1sZWZ0OjcwLjEwNjM4Mjk3ODcyMzM5JX0ucm93LWZsdWlkIC5vZmZzZXQ4OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjY4LjA4NTEwNjM4Mjk3ODcyJTsqbWFyZ2luLWxlZnQ6NjcuOTc4NzIzNDA0MjU1MyV9LnJvdy1mbHVpZCAub2Zmc2V0N3ttYXJnaW4tbGVmdDo2MS43MDIxMjc2NTk1NzQ0NiU7Km1hcmdpbi1sZWZ0OjYxLjU5NTc0NDY4MDg1MTA2JX0ucm93LWZsdWlkIC5vZmZzZXQ3OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjU5LjU3NDQ2ODA4NTEwNjM3NSU7Km1hcmdpbi1sZWZ0OjU5LjQ2ODA4NTEwNjM4Mjk3JX0ucm93LWZsdWlkIC5vZmZzZXQ2e21hcmdpbi1sZWZ0OjUzLjE5MTQ4OTM2MTcwMjEyNSU7Km1hcmdpbi1sZWZ0OjUzLjA4NTEwNjM4Mjk3ODcxNSV9LnJvdy1mbHVpZCAub2Zmc2V0NjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo1MS4wNjM4Mjk3ODcyMzQwMzUlOyptYXJnaW4tbGVmdDo1MC45NTc0NDY4MDg1MTA2MyV9LnJvdy1mbHVpZCAub2Zmc2V0NXttYXJnaW4tbGVmdDo0NC42ODA4NTEwNjM4Mjk3OSU7Km1hcmdpbi1sZWZ0OjQ0LjU3NDQ2ODA4NTEwNjM4JX0ucm93LWZsdWlkIC5vZmZzZXQ1OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjQyLjU1MzE5MTQ4OTM2MTclOyptYXJnaW4tbGVmdDo0Mi40NDY4MDg1MTA2MzgzJX0ucm93LWZsdWlkIC5vZmZzZXQ0e21hcmdpbi1sZWZ0OjM2LjE3MDIxMjc2NTk1NzQ0NCU7Km1hcmdpbi1sZWZ0OjM2LjA2MzgyOTc4NzIzNDA1JX0ucm93LWZsdWlkIC5vZmZzZXQ0OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjM0LjA0MjU1MzE5MTQ4OTM2JTsqbWFyZ2luLWxlZnQ6MzMuOTM2MTcwMjEyNzY1OTYlfS5yb3ctZmx1aWQgLm9mZnNldDN7bWFyZ2luLWxlZnQ6MjcuNjU5NTc0NDY4MDg1MTA0JTsqbWFyZ2luLWxlZnQ6MjcuNTUzMTkxNDg5MzYxNyV9LnJvdy1mbHVpZCAub2Zmc2V0MzpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoyNS41MzE5MTQ4OTM2MTcwMiU7Km1hcmdpbi1sZWZ0OjI1LjQyNTUzMTkxNDg5MzYxOCV9LnJvdy1mbHVpZCAub2Zmc2V0MnttYXJnaW4tbGVmdDoxOS4xNDg5MzYxNzAyMTI3NjQlOyptYXJnaW4tbGVmdDoxOS4wNDI1NTMxOTE0ODkzNiV9LnJvdy1mbHVpZCAub2Zmc2V0MjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxNy4wMjEyNzY1OTU3NDQ2OCU7Km1hcmdpbi1sZWZ0OjE2LjkxNDg5MzYxNzAyMTI3OCV9LnJvdy1mbHVpZCAub2Zmc2V0MXttYXJnaW4tbGVmdDoxMC42MzgyOTc4NzIzNDA0MjUlOyptYXJnaW4tbGVmdDoxMC41MzE5MTQ4OTM2MTcwMiV9LnJvdy1mbHVpZCAub2Zmc2V0MTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDo4LjUxMDYzODI5Nzg3MjM0JTsqbWFyZ2luLWxlZnQ6OC40MDQyNTUzMTkxNDg5MzglfVtjbGFzcyo9InNwYW4iXS5oaWRlLC5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJdLmhpZGV7ZGlzcGxheTpub25lfVtjbGFzcyo9InNwYW4iXS5wdWxsLXJpZ2h0LC5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJdLnB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHR9LmNvbnRhaW5lcnttYXJnaW4tcmlnaHQ6YXV0bzttYXJnaW4tbGVmdDphdXRvOyp6b29tOjF9LmNvbnRhaW5lcjpiZWZvcmUsLmNvbnRhaW5lcjphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0uY29udGFpbmVyOmFmdGVye2NsZWFyOmJvdGh9LmNvbnRhaW5lci1mbHVpZHtwYWRkaW5nLXJpZ2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHg7Knpvb206MX0uY29udGFpbmVyLWZsdWlkOmJlZm9yZSwuY29udGFpbmVyLWZsdWlkOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jb250YWluZXItZmx1aWQ6YWZ0ZXJ7Y2xlYXI6Ym90aH1we21hcmdpbjowIDAgMTBweH0ubGVhZHttYXJnaW4tYm90dG9tOjIwcHg7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6MjAwO2xpbmUtaGVpZ2h0OjMwcHh9c21hbGx7Zm9udC1zaXplOjg1JX1zdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZH1lbXtmb250LXN0eWxlOml0YWxpY31jaXRle2ZvbnQtc3R5bGU6bm9ybWFsfS5tdXRlZHtjb2xvcjojOTk5fWgxLGgyLGgzLGg0LGg1LGg2e21hcmdpbjoxMHB4IDA7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjE7Y29sb3I6aW5oZXJpdDt0ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZWxlZ2liaWxpdHl9aDEgc21hbGwsaDIgc21hbGwsaDMgc21hbGwsaDQgc21hbGwsaDUgc21hbGwsaDYgc21hbGx7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjE7Y29sb3I6Izk5OX1oMXtmb250LXNpemU6MzZweDtsaW5lLWhlaWdodDo0MHB4fWgye2ZvbnQtc2l6ZTozMHB4O2xpbmUtaGVpZ2h0OjQwcHh9aDN7Zm9udC1zaXplOjI0cHg7bGluZS1oZWlnaHQ6NDBweH1oNHtmb250LXNpemU6MThweDtsaW5lLWhlaWdodDoyMHB4fWg1e2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjIwcHh9aDZ7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjBweH1oMSBzbWFsbHtmb250LXNpemU6MjRweH1oMiBzbWFsbHtmb250LXNpemU6MThweH1oMyBzbWFsbHtmb250LXNpemU6MTRweH1oNCBzbWFsbHtmb250LXNpemU6MTRweH0ucGFnZS1oZWFkZXJ7cGFkZGluZy1ib3R0b206OXB4O21hcmdpbjoyMHB4IDAgMzBweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVlfXVsLG9se3BhZGRpbmc6MDttYXJnaW46MCAwIDEwcHggMjVweH11bCB1bCx1bCBvbCxvbCBvbCxvbCB1bHttYXJnaW4tYm90dG9tOjB9bGl7bGluZS1oZWlnaHQ6MjBweH11bC51bnN0eWxlZCxvbC51bnN0eWxlZHttYXJnaW4tbGVmdDowO2xpc3Qtc3R5bGU6bm9uZX1kbHttYXJnaW4tYm90dG9tOjIwcHh9ZHQsZGR7bGluZS1oZWlnaHQ6MjBweH1kdHtmb250LXdlaWdodDpib2xkfWRke21hcmdpbi1sZWZ0OjEwcHh9LmRsLWhvcml6b250YWwgZHR7ZmxvYXQ6bGVmdDt3aWR0aDoxMjBweDtvdmVyZmxvdzpoaWRkZW47Y2xlYXI6bGVmdDt0ZXh0LWFsaWduOnJpZ2h0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS5kbC1ob3Jpem9udGFsIGRke21hcmdpbi1sZWZ0OjEzMHB4fWhye21hcmdpbjoyMHB4IDA7Ym9yZGVyOjA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2VlZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZmZmfWFiYnJbdGl0bGVde2N1cnNvcjpoZWxwO2JvcmRlci1ib3R0b206MXB4IGRvdHRlZCAjOTk5fWFiYnIuaW5pdGlhbGlzbXtmb250LXNpemU6OTAlO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX1ibG9ja3F1b3Rle3BhZGRpbmc6MCAwIDAgMTVweDttYXJnaW46MCAwIDIwcHg7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkICNlZWV9YmxvY2txdW90ZSBwe21hcmdpbi1ib3R0b206MDtmb250LXNpemU6MTZweDtmb250LXdlaWdodDozMDA7bGluZS1oZWlnaHQ6MjVweH1ibG9ja3F1b3RlIHNtYWxse2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojOTk5fWJsb2NrcXVvdGUgc21hbGw6YmVmb3Jle2NvbnRlbnQ6J1wyMDE0IFwwMEEwJ31ibG9ja3F1b3RlLnB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHQ7cGFkZGluZy1yaWdodDoxNXB4O3BhZGRpbmctbGVmdDowO2JvcmRlci1yaWdodDo1cHggc29saWQgI2VlZTtib3JkZXItbGVmdDowfWJsb2NrcXVvdGUucHVsbC1yaWdodCBwLGJsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbHt0ZXh0LWFsaWduOnJpZ2h0fWJsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbDpiZWZvcmV7Y29udGVudDonJ31ibG9ja3F1b3RlLnB1bGwtcmlnaHQgc21hbGw6YWZ0ZXJ7Y29udGVudDonXDAwQTAgXDIwMTQnfXE6YmVmb3JlLHE6YWZ0ZXIsYmxvY2txdW90ZTpiZWZvcmUsYmxvY2txdW90ZTphZnRlcntjb250ZW50OiIifWFkZHJlc3N7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjIwcHg7Zm9udC1zdHlsZTpub3JtYWw7bGluZS1oZWlnaHQ6MjBweH1jb2RlLHByZXtwYWRkaW5nOjAgM3B4IDJweDtmb250LWZhbWlseTpNb25hY28sTWVubG8sQ29uc29sYXMsIkNvdXJpZXIgTmV3Iixtb25vc3BhY2U7Zm9udC1zaXplOjEycHg7Y29sb3I6IzMzMzstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9Y29kZXtwYWRkaW5nOjJweCA0cHg7Y29sb3I6I2QxNDtiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y3Zjk7Ym9yZGVyOjFweCBzb2xpZCAjZTFlMWU4fXByZXtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6OS41cHg7bWFyZ2luOjAgMCAxMHB4O2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjIwcHg7d29yZC1icmVhazpicmVhay1hbGw7d29yZC13cmFwOmJyZWFrLXdvcmQ7d2hpdGUtc3BhY2U6cHJlO3doaXRlLXNwYWNlOnByZS13cmFwO2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMTUpOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH1wcmUucHJldHR5cHJpbnR7bWFyZ2luLWJvdHRvbToyMHB4fXByZSBjb2Rle3BhZGRpbmc6MDtjb2xvcjppbmhlcml0O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyOjB9LnByZS1zY3JvbGxhYmxle21heC1oZWlnaHQ6MzQwcHg7b3ZlcmZsb3cteTpzY3JvbGx9Zm9ybXttYXJnaW46MCAwIDIwcHh9ZmllbGRzZXR7cGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowfWxlZ2VuZHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7cGFkZGluZzowO21hcmdpbi1ib3R0b206MjBweDtmb250LXNpemU6MjFweDtsaW5lLWhlaWdodDo0MHB4O2NvbG9yOiMzMzM7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2U1ZTVlNX1sZWdlbmQgc21hbGx7Zm9udC1zaXplOjE1cHg7Y29sb3I6Izk5OX1sYWJlbCxpbnB1dCxidXR0b24sc2VsZWN0LHRleHRhcmVhe2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoyMHB4fWlucHV0LGJ1dHRvbixzZWxlY3QsdGV4dGFyZWF7Zm9udC1mYW1pbHk6IkhlbHZldGljYSBOZXVlIixIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZn1sYWJlbHtkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206NXB4fXNlbGVjdCx0ZXh0YXJlYSxpbnB1dFt0eXBlPSJ0ZXh0Il0saW5wdXRbdHlwZT0icGFzc3dvcmQiXSxpbnB1dFt0eXBlPSJkYXRldGltZSJdLGlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0saW5wdXRbdHlwZT0iZGF0ZSJdLGlucHV0W3R5cGU9Im1vbnRoIl0saW5wdXRbdHlwZT0idGltZSJdLGlucHV0W3R5cGU9IndlZWsiXSxpbnB1dFt0eXBlPSJudW1iZXIiXSxpbnB1dFt0eXBlPSJlbWFpbCJdLGlucHV0W3R5cGU9InVybCJdLGlucHV0W3R5cGU9InNlYXJjaCJdLGlucHV0W3R5cGU9InRlbCJdLGlucHV0W3R5cGU9ImNvbG9yIl0sLnVuZWRpdGFibGUtaW5wdXR7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjIwcHg7cGFkZGluZzo0cHggNnB4O21hcmdpbi1ib3R0b206OXB4O2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzU1NTstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9aW5wdXQsdGV4dGFyZWF7d2lkdGg6MjEwcHh9dGV4dGFyZWF7aGVpZ2h0OmF1dG99dGV4dGFyZWEsaW5wdXRbdHlwZT0idGV4dCJdLGlucHV0W3R5cGU9InBhc3N3b3JkIl0saW5wdXRbdHlwZT0iZGF0ZXRpbWUiXSxpbnB1dFt0eXBlPSJkYXRldGltZS1sb2NhbCJdLGlucHV0W3R5cGU9ImRhdGUiXSxpbnB1dFt0eXBlPSJtb250aCJdLGlucHV0W3R5cGU9InRpbWUiXSxpbnB1dFt0eXBlPSJ3ZWVrIl0saW5wdXRbdHlwZT0ibnVtYmVyIl0saW5wdXRbdHlwZT0iZW1haWwiXSxpbnB1dFt0eXBlPSJ1cmwiXSxpbnB1dFt0eXBlPSJzZWFyY2giXSxpbnB1dFt0eXBlPSJ0ZWwiXSxpbnB1dFt0eXBlPSJjb2xvciJdLC51bmVkaXRhYmxlLWlucHV0e2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2M7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpOy13ZWJraXQtdHJhbnNpdGlvbjpib3JkZXIgbGluZWFyIC4ycyxib3gtc2hhZG93IGxpbmVhciAuMnM7LW1vei10cmFuc2l0aW9uOmJvcmRlciBsaW5lYXIgLjJzLGJveC1zaGFkb3cgbGluZWFyIC4yczstby10cmFuc2l0aW9uOmJvcmRlciBsaW5lYXIgLjJzLGJveC1zaGFkb3cgbGluZWFyIC4yczt0cmFuc2l0aW9uOmJvcmRlciBsaW5lYXIgLjJzLGJveC1zaGFkb3cgbGluZWFyIC4yc310ZXh0YXJlYTpmb2N1cyxpbnB1dFt0eXBlPSJ0ZXh0Il06Zm9jdXMsaW5wdXRbdHlwZT0icGFzc3dvcmQiXTpmb2N1cyxpbnB1dFt0eXBlPSJkYXRldGltZSJdOmZvY3VzLGlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl06Zm9jdXMsaW5wdXRbdHlwZT0iZGF0ZSJdOmZvY3VzLGlucHV0W3R5cGU9Im1vbnRoIl06Zm9jdXMsaW5wdXRbdHlwZT0idGltZSJdOmZvY3VzLGlucHV0W3R5cGU9IndlZWsiXTpmb2N1cyxpbnB1dFt0eXBlPSJudW1iZXIiXTpmb2N1cyxpbnB1dFt0eXBlPSJlbWFpbCJdOmZvY3VzLGlucHV0W3R5cGU9InVybCJdOmZvY3VzLGlucHV0W3R5cGU9InNlYXJjaCJdOmZvY3VzLGlucHV0W3R5cGU9InRlbCJdOmZvY3VzLGlucHV0W3R5cGU9ImNvbG9yIl06Zm9jdXMsLnVuZWRpdGFibGUtaW5wdXQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOnJnYmEoODIsMTY4LDIzNiwwLjgpO291dGxpbmU6MDtvdXRsaW5lOnRoaW4gZG90dGVkIFw5Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDhweCByZ2JhKDgyLDE2OCwyMzYsMC42KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA4cHggcmdiYSg4MiwxNjgsMjM2LDAuNik7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDhweCByZ2JhKDgyLDE2OCwyMzYsMC42KX1pbnB1dFt0eXBlPSJyYWRpbyJdLGlucHV0W3R5cGU9ImNoZWNrYm94Il17bWFyZ2luOjRweCAwIDA7bWFyZ2luLXRvcDoxcHggXDk7Km1hcmdpbi10b3A6MDtsaW5lLWhlaWdodDpub3JtYWw7Y3Vyc29yOnBvaW50ZXJ9aW5wdXRbdHlwZT0iZmlsZSJdLGlucHV0W3R5cGU9ImltYWdlIl0saW5wdXRbdHlwZT0ic3VibWl0Il0saW5wdXRbdHlwZT0icmVzZXQiXSxpbnB1dFt0eXBlPSJidXR0b24iXSxpbnB1dFt0eXBlPSJyYWRpbyJdLGlucHV0W3R5cGU9ImNoZWNrYm94Il17d2lkdGg6YXV0b31zZWxlY3QsaW5wdXRbdHlwZT0iZmlsZSJde2hlaWdodDozMHB4OyptYXJnaW4tdG9wOjRweDtsaW5lLWhlaWdodDozMHB4fXNlbGVjdHt3aWR0aDoyMjBweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjYmJifXNlbGVjdFttdWx0aXBsZV0sc2VsZWN0W3NpemVde2hlaWdodDphdXRvfXNlbGVjdDpmb2N1cyxpbnB1dFt0eXBlPSJmaWxlIl06Zm9jdXMsaW5wdXRbdHlwZT0icmFkaW8iXTpmb2N1cyxpbnB1dFt0eXBlPSJjaGVja2JveCJdOmZvY3Vze291dGxpbmU6dGhpbiBkb3R0ZWQgIzMzMztvdXRsaW5lOjVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDotMnB4fS51bmVkaXRhYmxlLWlucHV0LC51bmVkaXRhYmxlLXRleHRhcmVhe2NvbG9yOiM5OTk7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6I2ZjZmNmYztib3JkZXItY29sb3I6I2NjYzstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wMjUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjAyNSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjAyNSl9LnVuZWRpdGFibGUtaW5wdXR7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcH0udW5lZGl0YWJsZS10ZXh0YXJlYXt3aWR0aDphdXRvO2hlaWdodDphdXRvfWlucHV0Oi1tb3otcGxhY2Vob2xkZXIsdGV4dGFyZWE6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojOTk5fWlucHV0Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcix0ZXh0YXJlYTotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6Izk5OX1pbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcix0ZXh0YXJlYTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojOTk5fS5yYWRpbywuY2hlY2tib3h7bWluLWhlaWdodDoxOHB4O3BhZGRpbmctbGVmdDoxOHB4fS5yYWRpbyBpbnB1dFt0eXBlPSJyYWRpbyJdLC5jaGVja2JveCBpbnB1dFt0eXBlPSJjaGVja2JveCJde2Zsb2F0OmxlZnQ7bWFyZ2luLWxlZnQ6LTE4cHh9LmNvbnRyb2xzPi5yYWRpbzpmaXJzdC1jaGlsZCwuY29udHJvbHM+LmNoZWNrYm94OmZpcnN0LWNoaWxke3BhZGRpbmctdG9wOjVweH0ucmFkaW8uaW5saW5lLC5jaGVja2JveC5pbmxpbmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy10b3A6NXB4O21hcmdpbi1ib3R0b206MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LnJhZGlvLmlubGluZSsucmFkaW8uaW5saW5lLC5jaGVja2JveC5pbmxpbmUrLmNoZWNrYm94LmlubGluZXttYXJnaW4tbGVmdDoxMHB4fS5pbnB1dC1taW5pe3dpZHRoOjYwcHh9LmlucHV0LXNtYWxse3dpZHRoOjkwcHh9LmlucHV0LW1lZGl1bXt3aWR0aDoxNTBweH0uaW5wdXQtbGFyZ2V7d2lkdGg6MjEwcHh9LmlucHV0LXhsYXJnZXt3aWR0aDoyNzBweH0uaW5wdXQteHhsYXJnZXt3aWR0aDo1MzBweH1pbnB1dFtjbGFzcyo9InNwYW4iXSxzZWxlY3RbY2xhc3MqPSJzcGFuIl0sdGV4dGFyZWFbY2xhc3MqPSJzcGFuIl0sLnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIHNlbGVjdFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIHRleHRhcmVhW2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgLnVuZWRpdGFibGUtaW5wdXRbY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bm9uZTttYXJnaW4tbGVmdDowfS5pbnB1dC1hcHBlbmQgaW5wdXRbY2xhc3MqPSJzcGFuIl0sLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9InNwYW4iXSwuaW5wdXQtcHJlcGVuZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwuaW5wdXQtcHJlcGVuZCAudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIGlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgc2VsZWN0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgdGV4dGFyZWFbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCAudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIC5pbnB1dC1wcmVwZW5kIFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIC5pbnB1dC1hcHBlbmQgW2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6aW5saW5lLWJsb2NrfWlucHV0LHRleHRhcmVhLC51bmVkaXRhYmxlLWlucHV0e21hcmdpbi1sZWZ0OjB9LmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl0rW2NsYXNzKj0ic3BhbiJde21hcmdpbi1sZWZ0OjIwcHh9aW5wdXQuc3BhbjEyLHRleHRhcmVhLnNwYW4xMiwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMTJ7d2lkdGg6OTI2cHh9aW5wdXQuc3BhbjExLHRleHRhcmVhLnNwYW4xMSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMTF7d2lkdGg6ODQ2cHh9aW5wdXQuc3BhbjEwLHRleHRhcmVhLnNwYW4xMCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMTB7d2lkdGg6NzY2cHh9aW5wdXQuc3BhbjksdGV4dGFyZWEuc3BhbjksLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjl7d2lkdGg6Njg2cHh9aW5wdXQuc3BhbjgsdGV4dGFyZWEuc3BhbjgsLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjh7d2lkdGg6NjA2cHh9aW5wdXQuc3BhbjcsdGV4dGFyZWEuc3BhbjcsLnVuZWRpdGFibGUtaW5wdXQuc3Bhbjd7d2lkdGg6NTI2cHh9aW5wdXQuc3BhbjYsdGV4dGFyZWEuc3BhbjYsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjZ7d2lkdGg6NDQ2cHh9aW5wdXQuc3BhbjUsdGV4dGFyZWEuc3BhbjUsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjV7d2lkdGg6MzY2cHh9aW5wdXQuc3BhbjQsdGV4dGFyZWEuc3BhbjQsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjR7d2lkdGg6Mjg2cHh9aW5wdXQuc3BhbjMsdGV4dGFyZWEuc3BhbjMsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjN7d2lkdGg6MjA2cHh9aW5wdXQuc3BhbjIsdGV4dGFyZWEuc3BhbjIsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjJ7d2lkdGg6MTI2cHh9aW5wdXQuc3BhbjEsdGV4dGFyZWEuc3BhbjEsLnVuZWRpdGFibGUtaW5wdXQuc3BhbjF7d2lkdGg6NDZweH0uY29udHJvbHMtcm93eyp6b29tOjF9LmNvbnRyb2xzLXJvdzpiZWZvcmUsLmNvbnRyb2xzLXJvdzphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0uY29udHJvbHMtcm93OmFmdGVye2NsZWFyOmJvdGh9LmNvbnRyb2xzLXJvdyBbY2xhc3MqPSJzcGFuIl17ZmxvYXQ6bGVmdH1pbnB1dFtkaXNhYmxlZF0sc2VsZWN0W2Rpc2FibGVkXSx0ZXh0YXJlYVtkaXNhYmxlZF0saW5wdXRbcmVhZG9ubHldLHNlbGVjdFtyZWFkb25seV0sdGV4dGFyZWFbcmVhZG9ubHlde2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9aW5wdXRbdHlwZT0icmFkaW8iXVtkaXNhYmxlZF0saW5wdXRbdHlwZT0iY2hlY2tib3giXVtkaXNhYmxlZF0saW5wdXRbdHlwZT0icmFkaW8iXVtyZWFkb25seV0saW5wdXRbdHlwZT0iY2hlY2tib3giXVtyZWFkb25seV17YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uY29udHJvbC1ncm91cC53YXJuaW5nPmxhYmVsLC5jb250cm9sLWdyb3VwLndhcm5pbmcgLmhlbHAtYmxvY2ssLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuaGVscC1pbmxpbmV7Y29sb3I6I2MwOTg1M30uY29udHJvbC1ncm91cC53YXJuaW5nIC5jaGVja2JveCwuY29udHJvbC1ncm91cC53YXJuaW5nIC5yYWRpbywuY29udHJvbC1ncm91cC53YXJuaW5nIGlucHV0LC5jb250cm9sLWdyb3VwLndhcm5pbmcgc2VsZWN0LC5jb250cm9sLWdyb3VwLndhcm5pbmcgdGV4dGFyZWF7Y29sb3I6I2MwOTg1Mztib3JkZXItY29sb3I6I2MwOTg1Mzstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSl9LmNvbnRyb2wtZ3JvdXAud2FybmluZyAuY2hlY2tib3g6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAud2FybmluZyAucmFkaW86Zm9jdXMsLmNvbnRyb2wtZ3JvdXAud2FybmluZyBpbnB1dDpmb2N1cywuY29udHJvbC1ncm91cC53YXJuaW5nIHNlbGVjdDpmb2N1cywuY29udHJvbC1ncm91cC53YXJuaW5nIHRleHRhcmVhOmZvY3Vze2JvcmRlci1jb2xvcjojYTQ3ZTNjOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZGJjNTllOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZGJjNTllO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggI2RiYzU5ZX0uY29udHJvbC1ncm91cC53YXJuaW5nIC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuaW5wdXQtYXBwZW5kIC5hZGQtb257Y29sb3I6I2MwOTg1MztiYWNrZ3JvdW5kLWNvbG9yOiNmY2Y4ZTM7Ym9yZGVyLWNvbG9yOiNjMDk4NTN9LmNvbnRyb2wtZ3JvdXAuZXJyb3I+bGFiZWwsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmhlbHAtYmxvY2ssLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmhlbHAtaW5saW5le2NvbG9yOiNiOTRhNDh9LmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmNoZWNrYm94LC5jb250cm9sLWdyb3VwLmVycm9yIC5yYWRpbywuY29udHJvbC1ncm91cC5lcnJvciBpbnB1dCwuY29udHJvbC1ncm91cC5lcnJvciBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgdGV4dGFyZWF7Y29sb3I6I2I5NGE0ODtib3JkZXItY29sb3I6I2I5NGE0ODstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSl9LmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmNoZWNrYm94OmZvY3VzLC5jb250cm9sLWdyb3VwLmVycm9yIC5yYWRpbzpmb2N1cywuY29udHJvbC1ncm91cC5lcnJvciBpbnB1dDpmb2N1cywuY29udHJvbC1ncm91cC5lcnJvciBzZWxlY3Q6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM5NTNiMzk7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICNkNTkzOTI7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICNkNTkzOTI7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZDU5MzkyfS5jb250cm9sLWdyb3VwLmVycm9yIC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmlucHV0LWFwcGVuZCAuYWRkLW9ue2NvbG9yOiNiOTRhNDg7YmFja2dyb3VuZC1jb2xvcjojZjJkZWRlO2JvcmRlci1jb2xvcjojYjk0YTQ4fS5jb250cm9sLWdyb3VwLnN1Y2Nlc3M+bGFiZWwsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuaGVscC1ibG9jaywuY29udHJvbC1ncm91cC5zdWNjZXNzIC5oZWxwLWlubGluZXtjb2xvcjojNDY4ODQ3fS5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmNoZWNrYm94LC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLnJhZGlvLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgaW5wdXQsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyB0ZXh0YXJlYXtjb2xvcjojNDY4ODQ3O2JvcmRlci1jb2xvcjojNDY4ODQ3Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KX0uY29udHJvbC1ncm91cC5zdWNjZXNzIC5jaGVja2JveDpmb2N1cywuY29udHJvbC1ncm91cC5zdWNjZXNzIC5yYWRpbzpmb2N1cywuY29udHJvbC1ncm91cC5zdWNjZXNzIGlucHV0OmZvY3VzLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3Mgc2VsZWN0OmZvY3VzLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMzNTY2MzU7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICM3YWJhN2I7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICM3YWJhN2I7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjN2FiYTdifS5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmlucHV0LXByZXBlbmQgLmFkZC1vbiwuY29udHJvbC1ncm91cC5zdWNjZXNzIC5pbnB1dC1hcHBlbmQgLmFkZC1vbntjb2xvcjojNDY4ODQ3O2JhY2tncm91bmQtY29sb3I6I2RmZjBkODtib3JkZXItY29sb3I6IzQ2ODg0N31pbnB1dDpmb2N1czpyZXF1aXJlZDppbnZhbGlkLHRleHRhcmVhOmZvY3VzOnJlcXVpcmVkOmludmFsaWQsc2VsZWN0OmZvY3VzOnJlcXVpcmVkOmludmFsaWR7Y29sb3I6I2I5NGE0ODtib3JkZXItY29sb3I6I2VlNWY1Yn1pbnB1dDpmb2N1czpyZXF1aXJlZDppbnZhbGlkOmZvY3VzLHRleHRhcmVhOmZvY3VzOnJlcXVpcmVkOmludmFsaWQ6Zm9jdXMsc2VsZWN0OmZvY3VzOnJlcXVpcmVkOmludmFsaWQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNlOTMyMmQ7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCA2cHggI2Y4YjliNzstbW96LWJveC1zaGFkb3c6MCAwIDZweCAjZjhiOWI3O2JveC1zaGFkb3c6MCAwIDZweCAjZjhiOWI3fS5mb3JtLWFjdGlvbnN7cGFkZGluZzoxOXB4IDIwcHggMjBweDttYXJnaW4tdG9wOjIwcHg7bWFyZ2luLWJvdHRvbToyMHB4O2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1Oyp6b29tOjF9LmZvcm0tYWN0aW9uczpiZWZvcmUsLmZvcm0tYWN0aW9uczphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0uZm9ybS1hY3Rpb25zOmFmdGVye2NsZWFyOmJvdGh9LmhlbHAtYmxvY2ssLmhlbHAtaW5saW5le2NvbG9yOiM1OTU5NTl9LmhlbHAtYmxvY2t7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjEwcHh9LmhlbHAtaW5saW5le2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTtwYWRkaW5nLWxlZnQ6NXB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsqem9vbToxfS5pbnB1dC1hcHBlbmQsLmlucHV0LXByZXBlbmR7bWFyZ2luLWJvdHRvbTo1cHg7Zm9udC1zaXplOjA7d2hpdGUtc3BhY2U6bm93cmFwfS5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LXByZXBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBzZWxlY3QsLmlucHV0LXByZXBlbmQgc2VsZWN0LC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXQsLmlucHV0LXByZXBlbmQgLnVuZWRpdGFibGUtaW5wdXR7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLWJvdHRvbTowOyptYXJnaW4tbGVmdDowO2ZvbnQtc2l6ZToxNHB4O3ZlcnRpY2FsLWFsaWduOnRvcDstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAzcHggM3B4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgM3B4IDNweCAwO2JvcmRlci1yYWRpdXM6MCAzcHggM3B4IDB9LmlucHV0LWFwcGVuZCBpbnB1dDpmb2N1cywuaW5wdXQtcHJlcGVuZCBpbnB1dDpmb2N1cywuaW5wdXQtYXBwZW5kIHNlbGVjdDpmb2N1cywuaW5wdXQtcHJlcGVuZCBzZWxlY3Q6Zm9jdXMsLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dDpmb2N1cywuaW5wdXQtcHJlcGVuZCAudW5lZGl0YWJsZS1pbnB1dDpmb2N1c3t6LWluZGV4OjJ9LmlucHV0LWFwcGVuZCAuYWRkLW9uLC5pbnB1dC1wcmVwZW5kIC5hZGQtb257ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6YXV0bztoZWlnaHQ6MjBweDttaW4td2lkdGg6MTZweDtwYWRkaW5nOjRweCA1cHg7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjIwcHg7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmO2JhY2tncm91bmQtY29sb3I6I2VlZTtib3JkZXI6MXB4IHNvbGlkICNjY2N9LmlucHV0LWFwcGVuZCAuYWRkLW9uLC5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmlucHV0LWFwcGVuZCAuYnRuLC5pbnB1dC1wcmVwZW5kIC5idG57bWFyZ2luLWxlZnQ6LTFweDt2ZXJ0aWNhbC1hbGlnbjp0b3A7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5pbnB1dC1hcHBlbmQgLmFjdGl2ZSwuaW5wdXQtcHJlcGVuZCAuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2E5ZGJhOTtib3JkZXItY29sb3I6IzQ2YTU0Nn0uaW5wdXQtcHJlcGVuZCAuYWRkLW9uLC5pbnB1dC1wcmVwZW5kIC5idG57bWFyZ2luLXJpZ2h0Oi0xcHh9LmlucHV0LXByZXBlbmQgLmFkZC1vbjpmaXJzdC1jaGlsZCwuaW5wdXQtcHJlcGVuZCAuYnRuOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czozcHggMCAwIDNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4IDAgMCAzcHg7Ym9yZGVyLXJhZGl1czozcHggMCAwIDNweH0uaW5wdXQtYXBwZW5kIGlucHV0LC5pbnB1dC1hcHBlbmQgc2VsZWN0LC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweCAwIDAgM3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHggMCAwIDNweDtib3JkZXItcmFkaXVzOjNweCAwIDAgM3B4fS5pbnB1dC1hcHBlbmQgLmFkZC1vbjpsYXN0LWNoaWxkLC5pbnB1dC1hcHBlbmQgLmJ0bjpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDNweCAzcHggMDstbW96LWJvcmRlci1yYWRpdXM6MCAzcHggM3B4IDA7Ym9yZGVyLXJhZGl1czowIDNweCAzcHggMH0uaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIHNlbGVjdCwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLnVuZWRpdGFibGUtaW5wdXR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAuYWRkLW9uOmZpcnN0LWNoaWxkLC5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAuYnRuOmZpcnN0LWNoaWxke21hcmdpbi1yaWdodDotMXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHggMCAwIDNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4IDAgMCAzcHg7Ym9yZGVyLXJhZGl1czozcHggMCAwIDNweH0uaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgLmFkZC1vbjpsYXN0LWNoaWxkLC5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAuYnRuOmxhc3QtY2hpbGR7bWFyZ2luLWxlZnQ6LTFweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAzcHggM3B4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgM3B4IDNweCAwO2JvcmRlci1yYWRpdXM6MCAzcHggM3B4IDB9aW5wdXQuc2VhcmNoLXF1ZXJ5e3BhZGRpbmctcmlnaHQ6MTRweDtwYWRkaW5nLXJpZ2h0OjRweCBcOTtwYWRkaW5nLWxlZnQ6MTRweDtwYWRkaW5nLWxlZnQ6NHB4IFw5O21hcmdpbi1ib3R0b206MDstd2Via2l0LWJvcmRlci1yYWRpdXM6MTVweDstbW96LWJvcmRlci1yYWRpdXM6MTVweDtib3JkZXItcmFkaXVzOjE1cHh9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQgLnNlYXJjaC1xdWVyeSwuZm9ybS1zZWFyY2ggLmlucHV0LXByZXBlbmQgLnNlYXJjaC1xdWVyeXstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQgLnNlYXJjaC1xdWVyeXstd2Via2l0LWJvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweDstbW96LWJvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweDtib3JkZXItcmFkaXVzOjE0cHggMCAwIDE0cHh9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQgLmJ0bnstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAxNHB4IDE0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCAxNHB4IDE0cHggMDtib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDB9LmZvcm0tc2VhcmNoIC5pbnB1dC1wcmVwZW5kIC5zZWFyY2gtcXVlcnl7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDA7Ym9yZGVyLXJhZGl1czowIDE0cHggMTRweCAwfS5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCAuYnRuey13ZWJraXQtYm9yZGVyLXJhZGl1czoxNHB4IDAgMCAxNHB4Oy1tb3otYm9yZGVyLXJhZGl1czoxNHB4IDAgMCAxNHB4O2JvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweH0uZm9ybS1zZWFyY2ggaW5wdXQsLmZvcm0taW5saW5lIGlucHV0LC5mb3JtLWhvcml6b250YWwgaW5wdXQsLmZvcm0tc2VhcmNoIHRleHRhcmVhLC5mb3JtLWlubGluZSB0ZXh0YXJlYSwuZm9ybS1ob3Jpem9udGFsIHRleHRhcmVhLC5mb3JtLXNlYXJjaCBzZWxlY3QsLmZvcm0taW5saW5lIHNlbGVjdCwuZm9ybS1ob3Jpem9udGFsIHNlbGVjdCwuZm9ybS1zZWFyY2ggLmhlbHAtaW5saW5lLC5mb3JtLWlubGluZSAuaGVscC1pbmxpbmUsLmZvcm0taG9yaXpvbnRhbCAuaGVscC1pbmxpbmUsLmZvcm0tc2VhcmNoIC51bmVkaXRhYmxlLWlucHV0LC5mb3JtLWlubGluZSAudW5lZGl0YWJsZS1pbnB1dCwuZm9ybS1ob3Jpem9udGFsIC51bmVkaXRhYmxlLWlucHV0LC5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCwuZm9ybS1pbmxpbmUgLmlucHV0LXByZXBlbmQsLmZvcm0taG9yaXpvbnRhbCAuaW5wdXQtcHJlcGVuZCwuZm9ybS1zZWFyY2ggLmlucHV0LWFwcGVuZCwuZm9ybS1pbmxpbmUgLmlucHV0LWFwcGVuZCwuZm9ybS1ob3Jpem9udGFsIC5pbnB1dC1hcHBlbmR7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO21hcmdpbi1ib3R0b206MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Knpvb206MX0uZm9ybS1zZWFyY2ggLmhpZGUsLmZvcm0taW5saW5lIC5oaWRlLC5mb3JtLWhvcml6b250YWwgLmhpZGV7ZGlzcGxheTpub25lfS5mb3JtLXNlYXJjaCBsYWJlbCwuZm9ybS1pbmxpbmUgbGFiZWwsLmZvcm0tc2VhcmNoIC5idG4tZ3JvdXAsLmZvcm0taW5saW5lIC5idG4tZ3JvdXB7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmZvcm0tc2VhcmNoIC5pbnB1dC1hcHBlbmQsLmZvcm0taW5saW5lIC5pbnB1dC1hcHBlbmQsLmZvcm0tc2VhcmNoIC5pbnB1dC1wcmVwZW5kLC5mb3JtLWlubGluZSAuaW5wdXQtcHJlcGVuZHttYXJnaW4tYm90dG9tOjB9LmZvcm0tc2VhcmNoIC5yYWRpbywuZm9ybS1zZWFyY2ggLmNoZWNrYm94LC5mb3JtLWlubGluZSAucmFkaW8sLmZvcm0taW5saW5lIC5jaGVja2JveHtwYWRkaW5nLWxlZnQ6MDttYXJnaW4tYm90dG9tOjA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5mb3JtLXNlYXJjaCAucmFkaW8gaW5wdXRbdHlwZT0icmFkaW8iXSwuZm9ybS1zZWFyY2ggLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il0sLmZvcm0taW5saW5lIC5yYWRpbyBpbnB1dFt0eXBlPSJyYWRpbyJdLC5mb3JtLWlubGluZSAuY2hlY2tib3ggaW5wdXRbdHlwZT0iY2hlY2tib3giXXtmbG9hdDpsZWZ0O21hcmdpbi1yaWdodDozcHg7bWFyZ2luLWxlZnQ6MH0uY29udHJvbC1ncm91cHttYXJnaW4tYm90dG9tOjEwcHh9bGVnZW5kKy5jb250cm9sLWdyb3Vwe21hcmdpbi10b3A6MjBweDstd2Via2l0LW1hcmdpbi10b3AtY29sbGFwc2U6c2VwYXJhdGV9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1ncm91cHttYXJnaW4tYm90dG9tOjIwcHg7Knpvb206MX0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWdyb3VwOmJlZm9yZSwuZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWdyb3VwOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtZ3JvdXA6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWxhYmVse2Zsb2F0OmxlZnQ7d2lkdGg6MTQwcHg7cGFkZGluZy10b3A6NXB4O3RleHQtYWxpZ246cmlnaHR9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbHN7KmRpc3BsYXk6aW5saW5lLWJsb2NrOypwYWRkaW5nLWxlZnQ6MjBweDttYXJnaW4tbGVmdDoxNjBweDsqbWFyZ2luLWxlZnQ6MH0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sczpmaXJzdC1jaGlsZHsqcGFkZGluZy1sZWZ0OjE2MHB4fS5mb3JtLWhvcml6b250YWwgLmhlbHAtYmxvY2t7bWFyZ2luLXRvcDoxMHB4O21hcmdpbi1ib3R0b206MH0uZm9ybS1ob3Jpem9udGFsIC5mb3JtLWFjdGlvbnN7cGFkZGluZy1sZWZ0OjE2MHB4fXRhYmxle21heC13aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9LnRhYmxle3dpZHRoOjEwMCU7bWFyZ2luLWJvdHRvbToyMHB4fS50YWJsZSB0aCwudGFibGUgdGR7cGFkZGluZzo4cHg7bGluZS1oZWlnaHQ6MjBweDt0ZXh0LWFsaWduOmxlZnQ7dmVydGljYWwtYWxpZ246dG9wO2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGR9LnRhYmxlIHRoe2ZvbnQtd2VpZ2h0OmJvbGR9LnRhYmxlIHRoZWFkIHRoe3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0udGFibGUgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0ZCwudGFibGUgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlIGNvbGdyb3VwK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRkLC50YWJsZSB0aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDowfS50YWJsZSB0Ym9keSt0Ym9keXtib3JkZXItdG9wOjJweCBzb2xpZCAjZGRkfS50YWJsZS1jb25kZW5zZWQgdGgsLnRhYmxlLWNvbmRlbnNlZCB0ZHtwYWRkaW5nOjRweCA1cHh9LnRhYmxlLWJvcmRlcmVke2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7KmJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItbGVmdDowOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0udGFibGUtYm9yZGVyZWQgdGgsLnRhYmxlLWJvcmRlcmVkIHRke2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGRkfS50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkLC50YWJsZS1ib3JkZXJlZCBjb2xncm91cCt0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkLC50YWJsZS1ib3JkZXJlZCB0aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6MH0udGFibGUtYm9yZGVyZWQgdGhlYWQ6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NHB4fS50YWJsZS1ib3JkZXJlZCB0aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6NHB4fS50YWJsZS1ib3JkZXJlZCB0aGVhZDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGZvb3Q6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgMCA0cHg7LW1vei1ib3JkZXItcmFkaXVzOjAgMCAwIDRweDtib3JkZXItcmFkaXVzOjAgMCAwIDRweDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjRweH0udGFibGUtYm9yZGVyZWQgdGhlYWQ6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Zm9vdDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjRweH0udGFibGUtYm9yZGVyZWQgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY2FwdGlvbit0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NHB4fS50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIGNhcHRpb24rdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZHstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmlnaHQtdG9wbGVmdDo0cHh9LnRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLWNoaWxkKG9kZCkgdGQsLnRhYmxlLXN0cmlwZWQgdGJvZHkgdHI6bnRoLWNoaWxkKG9kZCkgdGh7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5fS50YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciB0ZCwudGFibGUtaG92ZXIgdGJvZHkgdHI6aG92ZXIgdGh7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1fXRhYmxlIFtjbGFzcyo9c3Bhbl0sLnJvdy1mbHVpZCB0YWJsZSBbY2xhc3MqPXNwYW5de2Rpc3BsYXk6dGFibGUtY2VsbDtmbG9hdDpub25lO21hcmdpbi1sZWZ0OjB9dGFibGUgLnNwYW4xe2Zsb2F0Om5vbmU7d2lkdGg6NDRweDttYXJnaW4tbGVmdDowfXRhYmxlIC5zcGFuMntmbG9hdDpub25lO3dpZHRoOjEyNHB4O21hcmdpbi1sZWZ0OjB9dGFibGUgLnNwYW4ze2Zsb2F0Om5vbmU7d2lkdGg6MjA0cHg7bWFyZ2luLWxlZnQ6MH10YWJsZSAuc3BhbjR7ZmxvYXQ6bm9uZTt3aWR0aDoyODRweDttYXJnaW4tbGVmdDowfXRhYmxlIC5zcGFuNXtmbG9hdDpub25lO3dpZHRoOjM2NHB4O21hcmdpbi1sZWZ0OjB9dGFibGUgLnNwYW42e2Zsb2F0Om5vbmU7d2lkdGg6NDQ0cHg7bWFyZ2luLWxlZnQ6MH10YWJsZSAuc3Bhbjd7ZmxvYXQ6bm9uZTt3aWR0aDo1MjRweDttYXJnaW4tbGVmdDowfXRhYmxlIC5zcGFuOHtmbG9hdDpub25lO3dpZHRoOjYwNHB4O21hcmdpbi1sZWZ0OjB9dGFibGUgLnNwYW45e2Zsb2F0Om5vbmU7d2lkdGg6Njg0cHg7bWFyZ2luLWxlZnQ6MH10YWJsZSAuc3BhbjEwe2Zsb2F0Om5vbmU7d2lkdGg6NzY0cHg7bWFyZ2luLWxlZnQ6MH10YWJsZSAuc3BhbjExe2Zsb2F0Om5vbmU7d2lkdGg6ODQ0cHg7bWFyZ2luLWxlZnQ6MH10YWJsZSAuc3BhbjEye2Zsb2F0Om5vbmU7d2lkdGg6OTI0cHg7bWFyZ2luLWxlZnQ6MH10YWJsZSAuc3BhbjEze2Zsb2F0Om5vbmU7d2lkdGg6MTAwNHB4O21hcmdpbi1sZWZ0OjB9dGFibGUgLnNwYW4xNHtmbG9hdDpub25lO3dpZHRoOjEwODRweDttYXJnaW4tbGVmdDowfXRhYmxlIC5zcGFuMTV7ZmxvYXQ6bm9uZTt3aWR0aDoxMTY0cHg7bWFyZ2luLWxlZnQ6MH10YWJsZSAuc3BhbjE2e2Zsb2F0Om5vbmU7d2lkdGg6MTI0NHB4O21hcmdpbi1sZWZ0OjB9dGFibGUgLnNwYW4xN3tmbG9hdDpub25lO3dpZHRoOjEzMjRweDttYXJnaW4tbGVmdDowfXRhYmxlIC5zcGFuMTh7ZmxvYXQ6bm9uZTt3aWR0aDoxNDA0cHg7bWFyZ2luLWxlZnQ6MH10YWJsZSAuc3BhbjE5e2Zsb2F0Om5vbmU7d2lkdGg6MTQ4NHB4O21hcmdpbi1sZWZ0OjB9dGFibGUgLnNwYW4yMHtmbG9hdDpub25lO3dpZHRoOjE1NjRweDttYXJnaW4tbGVmdDowfXRhYmxlIC5zcGFuMjF7ZmxvYXQ6bm9uZTt3aWR0aDoxNjQ0cHg7bWFyZ2luLWxlZnQ6MH10YWJsZSAuc3BhbjIye2Zsb2F0Om5vbmU7d2lkdGg6MTcyNHB4O21hcmdpbi1sZWZ0OjB9dGFibGUgLnNwYW4yM3tmbG9hdDpub25lO3dpZHRoOjE4MDRweDttYXJnaW4tbGVmdDowfXRhYmxlIC5zcGFuMjR7ZmxvYXQ6bm9uZTt3aWR0aDoxODg0cHg7bWFyZ2luLWxlZnQ6MH0udGFibGUgdGJvZHkgdHIuc3VjY2VzcyB0ZHtiYWNrZ3JvdW5kLWNvbG9yOiNkZmYwZDh9LnRhYmxlIHRib2R5IHRyLmVycm9yIHRke2JhY2tncm91bmQtY29sb3I6I2YyZGVkZX0udGFibGUgdGJvZHkgdHIuaW5mbyB0ZHtiYWNrZ3JvdW5kLWNvbG9yOiNkOWVkZjd9W2NsYXNzXj0iaWNvbi0iXSxbY2xhc3MqPSIgaWNvbi0iXXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxNHB4O2hlaWdodDoxNHB4O21hcmdpbi10b3A6MXB4OyptYXJnaW4tcmlnaHQ6LjNlbTtsaW5lLWhlaWdodDoxNHB4O3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wO2JhY2tncm91bmQtaW1hZ2U6dXJsKCIuLi9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5nIik7YmFja2dyb3VuZC1wb3NpdGlvbjoxNHB4IDE0cHg7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0fS5pY29uLXdoaXRlLC5uYXY+LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLm5hdj4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl0sLmRyb3Bkb3duLW1lbnU+bGk+YTpob3Zlcj5bY2xhc3NePSJpY29uLSJdLC5kcm9wZG93bi1tZW51PmxpPmE6aG92ZXI+W2NsYXNzKj0iIGljb24tIl0sLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hPltjbGFzc149Imljb24tIl0sLmRyb3Bkb3duLW1lbnU+LmFjdGl2ZT5hPltjbGFzcyo9IiBpY29uLSJde2JhY2tncm91bmQtaW1hZ2U6dXJsKCIuLi9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3Mtd2hpdGUucG5nIil9Lmljb24tZ2xhc3N7YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9Lmljb24tbXVzaWN7YmFja2dyb3VuZC1wb3NpdGlvbjotMjRweCAwfS5pY29uLXNlYXJjaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IDB9Lmljb24tZW52ZWxvcGV7YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAwfS5pY29uLWhlYXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggMH0uaWNvbi1zdGFye2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IDB9Lmljb24tc3Rhci1lbXB0eXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAwfS5pY29uLXVzZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY4cHggMH0uaWNvbi1maWxte2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IDB9Lmljb24tdGgtbGFyZ2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggMH0uaWNvbi10aHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAwfS5pY29uLXRoLWxpc3R7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0cHggMH0uaWNvbi1va3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODhweCAwfS5pY29uLXJlbW92ZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMTJweCAwfS5pY29uLXpvb20taW57YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggMH0uaWNvbi16b29tLW91dHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNjBweCAwfS5pY29uLW9mZntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRweCAwfS5pY29uLXNpZ25hbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAwfS5pY29uLWNvZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzJweCAwfS5pY29uLXRyYXNoe2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IDB9Lmljb24taG9tZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTI0cHh9Lmljb24tZmlsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IC0yNHB4fS5pY29uLXRpbWV7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMjRweH0uaWNvbi1yb2Fke2JhY2tncm91bmQtcG9zaXRpb246LTcycHggLTI0cHh9Lmljb24tZG93bmxvYWQtYWx0e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTI0cHh9Lmljb24tZG93bmxvYWR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTI0cHh9Lmljb24tdXBsb2Fke2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0yNHB4fS5pY29uLWluYm94e2JhY2tncm91bmQtcG9zaXRpb246LTE2OHB4IC0yNHB4fS5pY29uLXBsYXktY2lyY2xle2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0yNHB4fS5pY29uLXJlcGVhdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMTZweCAtMjRweH0uaWNvbi1yZWZyZXNoe2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0yNHB4fS5pY29uLWxpc3QtYWx0e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IC0yNHB4fS5pY29uLWxvY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg3cHggLTI0cHh9Lmljb24tZmxhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMTJweCAtMjRweH0uaWNvbi1oZWFkcGhvbmVze2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IC0yNHB4fS5pY29uLXZvbHVtZS1vZmZ7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggLTI0cHh9Lmljb24tdm9sdW1lLWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMzg0cHggLTI0cHh9Lmljb24tdm9sdW1lLXVwe2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IC0yNHB4fS5pY29uLXFyY29kZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzJweCAtMjRweH0uaWNvbi1iYXJjb2Rle2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC0yNHB4fS5pY29uLXRhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTQ4cHh9Lmljb24tdGFnc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNXB4IC00OHB4fS5pY29uLWJvb2t7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtNDhweH0uaWNvbi1ib29rbWFya3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IC00OHB4fS5pY29uLXByaW50e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTQ4cHh9Lmljb24tY2FtZXJhe2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC00OHB4fS5pY29uLWZvbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTQ4cHh9Lmljb24tYm9sZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjdweCAtNDhweH0uaWNvbi1pdGFsaWN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTQ4cHh9Lmljb24tdGV4dC1oZWlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTQ4cHh9Lmljb24tdGV4dC13aWR0aHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtNDhweH0uaWNvbi1hbGlnbi1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IC00OHB4fS5pY29uLWFsaWduLWNlbnRlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODhweCAtNDhweH0uaWNvbi1hbGlnbi1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMTJweCAtNDhweH0uaWNvbi1hbGlnbi1qdXN0aWZ5e2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IC00OHB4fS5pY29uLWxpc3R7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggLTQ4cHh9Lmljb24taW5kZW50LWxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzg0cHggLTQ4cHh9Lmljb24taW5kZW50LXJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IC00OHB4fS5pY29uLWZhY2V0aW1lLXZpZGVve2JhY2tncm91bmQtcG9zaXRpb246LTQzMnB4IC00OHB4fS5pY29uLXBpY3R1cmV7YmFja2dyb3VuZC1wb3NpdGlvbjotNDU2cHggLTQ4cHh9Lmljb24tcGVuY2lse2JhY2tncm91bmQtcG9zaXRpb246MCAtNzJweH0uaWNvbi1tYXAtbWFya2Vye2JhY2tncm91bmQtcG9zaXRpb246LTI0cHggLTcycHh9Lmljb24tYWRqdXN0e2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTcycHh9Lmljb24tdGludHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IC03MnB4fS5pY29uLWVkaXR7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtNzJweH0uaWNvbi1zaGFyZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtNzJweH0uaWNvbi1jaGVja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtNzJweH0uaWNvbi1tb3Zle2JhY2tncm91bmQtcG9zaXRpb246LTE2OHB4IC03MnB4fS5pY29uLXN0ZXAtYmFja3dhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTcycHh9Lmljb24tZmFzdC1iYWNrd2FyZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMTZweCAtNzJweH0uaWNvbi1iYWNrd2FyZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtNzJweH0uaWNvbi1wbGF5e2JhY2tncm91bmQtcG9zaXRpb246LTI2NHB4IC03MnB4fS5pY29uLXBhdXNle2JhY2tncm91bmQtcG9zaXRpb246LTI4OHB4IC03MnB4fS5pY29uLXN0b3B7YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggLTcycHh9Lmljb24tZm9yd2FyZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAtNzJweH0uaWNvbi1mYXN0LWZvcndhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggLTcycHh9Lmljb24tc3RlcC1mb3J3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC03MnB4fS5pY29uLWVqZWN0e2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IC03MnB4fS5pY29uLWNoZXZyb24tbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzJweCAtNzJweH0uaWNvbi1jaGV2cm9uLXJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC03MnB4fS5pY29uLXBsdXMtc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTk2cHh9Lmljb24tbWludXMtc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IC05NnB4fS5pY29uLXJlbW92ZS1zaWdue2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTk2cHh9Lmljb24tb2stc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IC05NnB4fS5pY29uLXF1ZXN0aW9uLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtOTZweH0uaWNvbi1pbmZvLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTk2cHh9Lmljb24tc2NyZWVuc2hvdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtOTZweH0uaWNvbi1yZW1vdmUtY2lyY2xle2JhY2tncm91bmQtcG9zaXRpb246LTE2OHB4IC05NnB4fS5pY29uLW9rLWNpcmNsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtOTZweH0uaWNvbi1iYW4tY2lyY2xle2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IC05NnB4fS5pY29uLWFycm93LWxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTk2cHh9Lmljb24tYXJyb3ctcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0cHggLTk2cHh9Lmljb24tYXJyb3ctdXB7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg5cHggLTk2cHh9Lmljb24tYXJyb3ctZG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMTJweCAtOTZweH0uaWNvbi1zaGFyZS1hbHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggLTk2cHh9Lmljb24tcmVzaXplLWZ1bGx7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggLTk2cHh9Lmljb24tcmVzaXplLXNtYWxse2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC05NnB4fS5pY29uLXBsdXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggLTk2cHh9Lmljb24tbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMzcHggLTk2cHh9Lmljb24tYXN0ZXJpc2t7YmFja2dyb3VuZC1wb3NpdGlvbjotNDU2cHggLTk2cHh9Lmljb24tZXhjbGFtYXRpb24tc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTEyMHB4fS5pY29uLWdpZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjRweCAtMTIwcHh9Lmljb24tbGVhZntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xMjBweH0uaWNvbi1maXJle2JhY2tncm91bmQtcG9zaXRpb246LTcycHggLTEyMHB4fS5pY29uLWV5ZS1vcGVue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTEyMHB4fS5pY29uLWV5ZS1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtMTIwcHh9Lmljb24td2FybmluZy1zaWdue2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xMjBweH0uaWNvbi1wbGFuZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjhweCAtMTIwcHh9Lmljb24tY2FsZW5kYXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTEyMHB4fS5pY29uLXJhbmRvbXt3aWR0aDoxNnB4O2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IC0xMjBweH0uaWNvbi1jb21tZW50e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0xMjBweH0uaWNvbi1tYWduZXR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0cHggLTEyMHB4fS5pY29uLWNoZXZyb24tdXB7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg4cHggLTEyMHB4fS5pY29uLWNoZXZyb24tZG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMTNweCAtMTE5cHh9Lmljb24tcmV0d2VldHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAtMTIwcHh9Lmljb24tc2hvcHBpbmctY2FydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNjBweCAtMTIwcHh9Lmljb24tZm9sZGVyLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC0xMjBweH0uaWNvbi1mb2xkZXItb3Blbnt3aWR0aDoxNnB4O2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IC0xMjBweH0uaWNvbi1yZXNpemUtdmVydGljYWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggLTExOXB4fS5pY29uLXJlc2l6ZS1ob3Jpem9udGFse2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC0xMThweH0uaWNvbi1oZGR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNDRweH0uaWNvbi1idWxsaG9ybntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IC0xNDRweH0uaWNvbi1iZWxse2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE0NHB4fS5pY29uLWNlcnRpZmljYXRle2JhY2tncm91bmQtcG9zaXRpb246LTcycHggLTE0NHB4fS5pY29uLXRodW1icy11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNDRweH0uaWNvbi10aHVtYnMtZG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtMTQ0cHh9Lmljb24taGFuZC1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTQ0cHh9Lmljb24taGFuZC1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTE2OHB4IC0xNDRweH0uaWNvbi1oYW5kLXVwe2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xNDRweH0uaWNvbi1oYW5kLWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTE0NHB4fS5pY29uLWNpcmNsZS1hcnJvdy1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMTQ0cHh9Lmljb24tY2lyY2xlLWFycm93LWxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0cHggLTE0NHB4fS5pY29uLWNpcmNsZS1hcnJvdy11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODhweCAtMTQ0cHh9Lmljb24tY2lyY2xlLWFycm93LWRvd257YmFja2dyb3VuZC1wb3NpdGlvbjotMzEycHggLTE0NHB4fS5pY29uLWdsb2Jle2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IC0xNDRweH0uaWNvbi13cmVuY2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMzYwcHggLTE0NHB4fS5pY29uLXRhc2tze2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IC0xNDRweH0uaWNvbi1maWx0ZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggLTE0NHB4fS5pY29uLWJyaWVmY2FzZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzJweCAtMTQ0cHh9Lmljb24tZnVsbHNjcmVlbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtMTQ0cHh9LmRyb3B1cCwuZHJvcGRvd257cG9zaXRpb246cmVsYXRpdmV9LmRyb3Bkb3duLXRvZ2dsZXsqbWFyZ2luLWJvdHRvbTotM3B4fS5kcm9wZG93bi10b2dnbGU6YWN0aXZlLC5vcGVuIC5kcm9wZG93bi10b2dnbGV7b3V0bGluZTowfS5jYXJldHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDowO2hlaWdodDowO3ZlcnRpY2FsLWFsaWduOnRvcDtib3JkZXItdG9wOjRweCBzb2xpZCAjMDAwO2JvcmRlci1yaWdodDo0cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6NHB4IHNvbGlkIHRyYW5zcGFyZW50O2NvbnRlbnQ6IiJ9LmRyb3Bkb3duIC5jYXJldHttYXJnaW4tdG9wOjhweDttYXJnaW4tbGVmdDoycHh9LmRyb3Bkb3duLW1lbnV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDowO3otaW5kZXg6MTAwMDtkaXNwbGF5Om5vbmU7ZmxvYXQ6bGVmdDttaW4td2lkdGg6MTYwcHg7cGFkZGluZzo1cHggMDttYXJnaW46MnB4IDAgMDtsaXN0LXN0eWxlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4yKTsqYm9yZGVyLXJpZ2h0LXdpZHRoOjJweDsqYm9yZGVyLWJvdHRvbS13aWR0aDoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTstbW96LWJveC1zaGFkb3c6MCA1cHggMTBweCByZ2JhKDAsMCwwLDAuMik7Ym94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDstbW96LWJhY2tncm91bmQtY2xpcDpwYWRkaW5nO2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveH0uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0e3JpZ2h0OjA7bGVmdDphdXRvfS5kcm9wZG93bi1tZW51IC5kaXZpZGVyeyp3aWR0aDoxMDAlO2hlaWdodDoxcHg7bWFyZ2luOjlweCAxcHg7Km1hcmdpbjotNXB4IDAgNXB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1ZTU7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ZmZn0uZHJvcGRvd24tbWVudSBhe2Rpc3BsYXk6YmxvY2s7cGFkZGluZzozcHggMjBweDtjbGVhcjpib3RoO2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiMzMzM7d2hpdGUtc3BhY2U6bm93cmFwfS5kcm9wZG93bi1tZW51IGxpPmE6aG92ZXIsLmRyb3Bkb3duLW1lbnUgbGk+YTpmb2N1cywuZHJvcGRvd24tc3VibWVudTpob3Zlcj5he2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojMDhjO2JhY2tncm91bmQtY29sb3I6IzAwODFjMjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMwOGMpLHRvKCMwMDc3YjMpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6ZHhpbWFnZXRyYW5zZm9ybS5taWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMDA4OGNjJyxlbmRDb2xvcnN0cj0nI2ZmMDA3N2IzJyxHcmFkaWVudFR5cGU9MCl9LmRyb3Bkb3duLW1lbnUgLmFjdGl2ZT5hLC5kcm9wZG93bi1tZW51IC5hY3RpdmU+YTpob3Zlcntjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6IzA4YztiYWNrZ3JvdW5kLWNvbG9yOiMwMDgxYzI7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzA4YywjMDA3N2IzKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjMDhjKSx0bygjMDA3N2IzKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzA4YywjMDA3N2IzKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzA4YywjMDA3N2IzKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtvdXRsaW5lOjA7ZmlsdGVyOnByb2dpZDpkeGltYWdldHJhbnNmb3JtLm1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYwMDg4Y2MnLGVuZENvbG9yc3RyPScjZmYwMDc3YjMnLEdyYWRpZW50VHlwZT0wKX0uZHJvcGRvd24tbWVudSAuZGlzYWJsZWQ+YSwuZHJvcGRvd24tbWVudSAuZGlzYWJsZWQ+YTpob3Zlcntjb2xvcjojOTk5fS5kcm9wZG93bi1tZW51IC5kaXNhYmxlZD5hOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm9wZW57KnotaW5kZXg6MTAwMH0ub3Blbj4uZHJvcGRvd24tbWVudXtkaXNwbGF5OmJsb2NrfS5wdWxsLXJpZ2h0Pi5kcm9wZG93bi1tZW51e3JpZ2h0OjA7bGVmdDphdXRvfS5kcm9wdXAgLmNhcmV0LC5uYXZiYXItZml4ZWQtYm90dG9tIC5kcm9wZG93biAuY2FyZXR7Ym9yZGVyLXRvcDowO2JvcmRlci1ib3R0b206NHB4IHNvbGlkICMwMDA7Y29udGVudDoiXDIxOTEifS5kcm9wdXAgLmRyb3Bkb3duLW1lbnUsLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5kcm9wZG93bi1tZW51e3RvcDphdXRvO2JvdHRvbToxMDAlO21hcmdpbi1ib3R0b206MXB4fS5kcm9wZG93bi1zdWJtZW51e3Bvc2l0aW9uOnJlbGF0aXZlfS5kcm9wZG93bi1zdWJtZW51Pi5kcm9wZG93bi1tZW51e3RvcDowO2xlZnQ6MTAwJTttYXJnaW4tdG9wOi02cHg7bWFyZ2luLWxlZnQ6LTFweDstd2Via2l0LWJvcmRlci1yYWRpdXM6MCA2cHggNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6MCA2cHggNnB4IDZweDtib3JkZXItcmFkaXVzOjAgNnB4IDZweCA2cHh9LmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXIgLmRyb3Bkb3duLW1lbnV7ZGlzcGxheTpibG9ja30uZHJvcGRvd24tc3VibWVudT5hOmFmdGVye2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6cmlnaHQ7d2lkdGg6MDtoZWlnaHQ6MDttYXJnaW4tdG9wOjVweDttYXJnaW4tcmlnaHQ6LTEwcHg7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1sZWZ0LWNvbG9yOiNjY2M7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDo1cHggMCA1cHggNXB4O2NvbnRlbnQ6IiAifS5kcm9wZG93bi1zdWJtZW51OmhvdmVyPmE6YWZ0ZXJ7Ym9yZGVyLWxlZnQtY29sb3I6I2ZmZn0uZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUgLm5hdi1oZWFkZXJ7cGFkZGluZy1yaWdodDoyMHB4O3BhZGRpbmctbGVmdDoyMHB4fS50eXBlYWhlYWR7bWFyZ2luLXRvcDoycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS53ZWxse21pbi1oZWlnaHQ6MjBweDtwYWRkaW5nOjE5cHg7bWFyZ2luLWJvdHRvbToyMHB4O2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtib3JkZXI6MXB4IHNvbGlkICNlM2UzZTM7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA1KX0ud2VsbCBibG9ja3F1b3Rle2JvcmRlci1jb2xvcjojZGRkO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMTUpfS53ZWxsLWxhcmdle3BhZGRpbmc6MjRweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHh9LndlbGwtc21hbGx7cGFkZGluZzo5cHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRpdXM6M3B4fS5mYWRle29wYWNpdHk6MDstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjstbW96LXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjstby10cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXI7dHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyfS5mYWRlLmlue29wYWNpdHk6MX0uY29sbGFwc2V7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjA7b3ZlcmZsb3c6aGlkZGVuO292ZXJmbG93OnZpc2libGUgXDk7LXdlYmtpdC10cmFuc2l0aW9uOmhlaWdodCAuMzVzIGVhc2U7LW1vei10cmFuc2l0aW9uOmhlaWdodCAuMzVzIGVhc2U7LW8tdHJhbnNpdGlvbjpoZWlnaHQgLjM1cyBlYXNlO3RyYW5zaXRpb246aGVpZ2h0IC4zNXMgZWFzZX0uY29sbGFwc2UuaW57aGVpZ2h0OmF1dG99LmNsb3Nle2Zsb2F0OnJpZ2h0O2ZvbnQtc2l6ZToyMHB4O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojMDAwO3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZjtvcGFjaXR5Oi4yO2ZpbHRlcjphbHBoYShvcGFjaXR5PTIwKX0uY2xvc2U6aG92ZXJ7Y29sb3I6IzAwMDt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcjtvcGFjaXR5Oi40O2ZpbHRlcjphbHBoYShvcGFjaXR5PTQwKX1idXR0b24uY2xvc2V7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LmJ0bntkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7cGFkZGluZzo0cHggMTRweDttYXJnaW4tYm90dG9tOjA7Km1hcmdpbi1sZWZ0Oi4zZW07Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjBweDsqbGluZS1oZWlnaHQ6MjBweDtjb2xvcjojMzMzO3RleHQtYWxpZ246Y2VudGVyO3RleHQtc2hhZG93OjAgMXB4IDFweCByZ2JhKDI1NSwyNTUsMjU1LDAuNzUpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7KmJhY2tncm91bmQtY29sb3I6I2U2ZTZlNjtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZmZmKSx0bygjZTZlNmU2KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZTZlNmU2KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZTZlNmU2KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2ZmZiwjZTZlNmU2KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNlNmU2ZTYpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlcjoxcHggc29saWQgI2JiYjsqYm9yZGVyOjA7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtib3JkZXItY29sb3I6I2U2ZTZlNiAjZTZlNmU2ICNiZmJmYmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojYTJhMmEyOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweDtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmZmZmZmZicsZW5kQ29sb3JzdHI9JyNmZmU2ZTZlNicsR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6ZHhpbWFnZXRyYW5zZm9ybS5taWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7Knpvb206MTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjIpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSl9LmJ0bjpob3ZlciwuYnRuOmFjdGl2ZSwuYnRuLmFjdGl2ZSwuYnRuLmRpc2FibGVkLC5idG5bZGlzYWJsZWRde2NvbG9yOiMzMzM7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2OypiYWNrZ3JvdW5kLWNvbG9yOiNkOWQ5ZDl9LmJ0bjphY3RpdmUsLmJ0bi5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojY2NjIFw5fS5idG46Zmlyc3QtY2hpbGR7Km1hcmdpbi1sZWZ0OjB9LmJ0bjpob3Zlcntjb2xvcjojMzMzO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNjsqYmFja2dyb3VuZC1jb2xvcjojZDlkOWQ5O2JhY2tncm91bmQtcG9zaXRpb246MCAtMTVweDstd2Via2l0LXRyYW5zaXRpb246YmFja2dyb3VuZC1wb3NpdGlvbiAuMXMgbGluZWFyOy1tb3otdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xcyBsaW5lYXI7LW8tdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xcyBsaW5lYXI7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xcyBsaW5lYXJ9LmJ0bjpmb2N1c3tvdXRsaW5lOnRoaW4gZG90dGVkICMzMzM7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6LTJweH0uYnRuLmFjdGl2ZSwuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTY7YmFja2dyb3VuZC1jb2xvcjojZDlkOWQ5IFw5O2JhY2tncm91bmQtaW1hZ2U6bm9uZTtvdXRsaW5lOjA7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5idG4uZGlzYWJsZWQsLmJ0bltkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2O2JhY2tncm91bmQtaW1hZ2U6bm9uZTtvcGFjaXR5Oi42NTtmaWx0ZXI6YWxwaGEob3BhY2l0eT02NSk7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7LW1vei1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5idG4tbGFyZ2V7cGFkZGluZzo5cHggMTRweDtmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDpub3JtYWw7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjVweDstbW96LWJvcmRlci1yYWRpdXM6NXB4O2JvcmRlci1yYWRpdXM6NXB4fS5idG4tbGFyZ2UgW2NsYXNzXj0iaWNvbi0iXXttYXJnaW4tdG9wOjJweH0uYnRuLXNtYWxse3BhZGRpbmc6M3B4IDlweDtmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoxOHB4fS5idG4tc21hbGwgW2NsYXNzXj0iaWNvbi0iXXttYXJnaW4tdG9wOjB9LmJ0bi1taW5pe3BhZGRpbmc6MnB4IDZweDtmb250LXNpemU6MTFweDtsaW5lLWhlaWdodDoxNnB4fS5idG4tYmxvY2t7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MDtwYWRkaW5nLWxlZnQ6MDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmJ0bi1ibG9jaysuYnRuLWJsb2Nre21hcmdpbi10b3A6NXB4fS5idG4tcHJpbWFyeS5hY3RpdmUsLmJ0bi13YXJuaW5nLmFjdGl2ZSwuYnRuLWRhbmdlci5hY3RpdmUsLmJ0bi1zdWNjZXNzLmFjdGl2ZSwuYnRuLWluZm8uYWN0aXZlLC5idG4taW52ZXJzZS5hY3RpdmV7Y29sb3I6cmdiYSgyNTUsMjU1LDI1NSwwLjc1KX0uYnRue2JvcmRlci1jb2xvcjojYzVjNWM1O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMTUpIHJnYmEoMCwwLDAsMC4xNSkgcmdiYSgwLDAsMCwwLjI1KX0uYnRuLXByaW1hcnl7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzAwNmRjYzsqYmFja2dyb3VuZC1jb2xvcjojMDRjO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMwOGMpLHRvKCMwNGMpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwNGMpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwNGMpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMDhjLCMwNGMpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzA0Yyk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiMwNGMgIzAwNDRjYyAjMDAyYTgwO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpkeGltYWdldHJhbnNmb3JtLm1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYwMDg4Y2MnLGVuZENvbG9yc3RyPScjZmYwMDQ0Y2MnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4tcHJpbWFyeTpob3ZlciwuYnRuLXByaW1hcnk6YWN0aXZlLC5idG4tcHJpbWFyeS5hY3RpdmUsLmJ0bi1wcmltYXJ5LmRpc2FibGVkLC5idG4tcHJpbWFyeVtkaXNhYmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMwNGM7KmJhY2tncm91bmQtY29sb3I6IzAwM2JiM30uYnRuLXByaW1hcnk6YWN0aXZlLC5idG4tcHJpbWFyeS5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojMDM5IFw5fS5idG4td2FybmluZ3tjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojZmFhNzMyOypiYWNrZ3JvdW5kLWNvbG9yOiNmODk0MDY7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2ZiYjQ1MCksdG8oI2Y4OTQwNikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZiYjQ1MCwjZjg5NDA2KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6I2Y4OTQwNiAjZjg5NDA2ICNhZDY3MDQ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmZiYjQ1MCcsZW5kQ29sb3JzdHI9JyNmZmY4OTQwNicsR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6ZHhpbWFnZXRyYW5zZm9ybS5taWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSl9LmJ0bi13YXJuaW5nOmhvdmVyLC5idG4td2FybmluZzphY3RpdmUsLmJ0bi13YXJuaW5nLmFjdGl2ZSwuYnRuLXdhcm5pbmcuZGlzYWJsZWQsLmJ0bi13YXJuaW5nW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2Y4OTQwNjsqYmFja2dyb3VuZC1jb2xvcjojZGY4NTA1fS5idG4td2FybmluZzphY3RpdmUsLmJ0bi13YXJuaW5nLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNjNjc2MDUgXDl9LmJ0bi1kYW5nZXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6I2RhNGY0OTsqYmFja2dyb3VuZC1jb2xvcjojYmQzNjJmO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNlZTVmNWIpLHRvKCNiZDM2MmYpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZWU1ZjViLCNiZDM2MmYpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZWU1ZjViLCNiZDM2MmYpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZWU1ZjViLCNiZDM2MmYpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2JkMzYyZik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiNiZDM2MmYgI2JkMzYyZiAjODAyNDIwO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpkeGltYWdldHJhbnNmb3JtLm1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZlZTVmNWInLGVuZENvbG9yc3RyPScjZmZiZDM2MmYnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4tZGFuZ2VyOmhvdmVyLC5idG4tZGFuZ2VyOmFjdGl2ZSwuYnRuLWRhbmdlci5hY3RpdmUsLmJ0bi1kYW5nZXIuZGlzYWJsZWQsLmJ0bi1kYW5nZXJbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojYmQzNjJmOypiYWNrZ3JvdW5kLWNvbG9yOiNhOTMwMmF9LmJ0bi1kYW5nZXI6YWN0aXZlLC5idG4tZGFuZ2VyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiM5NDJhMjUgXDl9LmJ0bi1zdWNjZXNze2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiM1YmI3NWI7KmJhY2tncm91bmQtY29sb3I6IzUxYTM1MTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjNjJjNDYyKSx0bygjNTFhMzUxKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzYyYzQ2MiwjNTFhMzUxKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzYyYzQ2MiwjNTFhMzUxKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzYyYzQ2MiwjNTFhMzUxKTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1MWEzNTEpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojNTFhMzUxICM1MWEzNTEgIzM4NzAzODtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6ZHhpbWFnZXRyYW5zZm9ybS5taWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNjJjNDYyJyxlbmRDb2xvcnN0cj0nI2ZmNTFhMzUxJyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpkeGltYWdldHJhbnNmb3JtLm1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0uYnRuLXN1Y2Nlc3M6aG92ZXIsLmJ0bi1zdWNjZXNzOmFjdGl2ZSwuYnRuLXN1Y2Nlc3MuYWN0aXZlLC5idG4tc3VjY2Vzcy5kaXNhYmxlZCwuYnRuLXN1Y2Nlc3NbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNTFhMzUxOypiYWNrZ3JvdW5kLWNvbG9yOiM0OTkyNDl9LmJ0bi1zdWNjZXNzOmFjdGl2ZSwuYnRuLXN1Y2Nlc3MuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzQwODE0MCBcOX0uYnRuLWluZm97Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzQ5YWZjZDsqYmFja2dyb3VuZC1jb2xvcjojMmY5NmI0O2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCM1YmMwZGUpLHRvKCMyZjk2YjQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMyZjk2YjQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjNWJjMGRlLCMyZjk2YjQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjNWJjMGRlLCMyZjk2YjQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzJmOTZiNCk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiMyZjk2YjQgIzJmOTZiNCAjMWY2Mzc3O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpkeGltYWdldHJhbnNmb3JtLm1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY1YmMwZGUnLGVuZENvbG9yc3RyPScjZmYyZjk2YjQnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4taW5mbzpob3ZlciwuYnRuLWluZm86YWN0aXZlLC5idG4taW5mby5hY3RpdmUsLmJ0bi1pbmZvLmRpc2FibGVkLC5idG4taW5mb1tkaXNhYmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMyZjk2YjQ7KmJhY2tncm91bmQtY29sb3I6IzJhODVhMH0uYnRuLWluZm86YWN0aXZlLC5idG4taW5mby5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojMjQ3NDhjIFw5fS5idG4taW52ZXJzZXtjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojMzYzNjM2OypiYWNrZ3JvdW5kLWNvbG9yOiMyMjI7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzQ0NCksdG8oIzIyMikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCM0NDQsIzIyMik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCM0NDQsIzIyMik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCM0NDQsIzIyMik7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzQ0NCwjMjIyKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6IzIyMiAjMjIyMjIyICMwMDA7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjQ0NDQ0NCcsZW5kQ29sb3JzdHI9JyNmZjIyMjIyMicsR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6ZHhpbWFnZXRyYW5zZm9ybS5taWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSl9LmJ0bi1pbnZlcnNlOmhvdmVyLC5idG4taW52ZXJzZTphY3RpdmUsLmJ0bi1pbnZlcnNlLmFjdGl2ZSwuYnRuLWludmVyc2UuZGlzYWJsZWQsLmJ0bi1pbnZlcnNlW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzIyMjsqYmFja2dyb3VuZC1jb2xvcjojMTUxNTE1fS5idG4taW52ZXJzZTphY3RpdmUsLmJ0bi1pbnZlcnNlLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwODA4MDggXDl9YnV0dG9uLmJ0bixpbnB1dFt0eXBlPSJzdWJtaXQiXS5idG57KnBhZGRpbmctdG9wOjNweDsqcGFkZGluZy1ib3R0b206M3B4fWJ1dHRvbi5idG46Oi1tb3otZm9jdXMtaW5uZXIsaW5wdXRbdHlwZT0ic3VibWl0Il0uYnRuOjotbW96LWZvY3VzLWlubmVye3BhZGRpbmc6MDtib3JkZXI6MH1idXR0b24uYnRuLmJ0bi1sYXJnZSxpbnB1dFt0eXBlPSJzdWJtaXQiXS5idG4uYnRuLWxhcmdleypwYWRkaW5nLXRvcDo3cHg7KnBhZGRpbmctYm90dG9tOjdweH1idXR0b24uYnRuLmJ0bi1zbWFsbCxpbnB1dFt0eXBlPSJzdWJtaXQiXS5idG4uYnRuLXNtYWxseypwYWRkaW5nLXRvcDozcHg7KnBhZGRpbmctYm90dG9tOjNweH1idXR0b24uYnRuLmJ0bi1taW5pLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi5idG4tbWluaXsqcGFkZGluZy10b3A6MXB4OypwYWRkaW5nLWJvdHRvbToxcHh9LmJ0bi1saW5rLC5idG4tbGluazphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7LW1vei1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5idG4tbGlua3tjb2xvcjojMDhjO2N1cnNvcjpwb2ludGVyO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmJ0bi1saW5rOmhvdmVye2NvbG9yOiMwMDU1ODA7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5idG4tZ3JvdXB7cG9zaXRpb246cmVsYXRpdmU7Km1hcmdpbi1sZWZ0Oi4zZW07Zm9udC1zaXplOjA7d2hpdGUtc3BhY2U6bm93cmFwfS5idG4tZ3JvdXA6Zmlyc3QtY2hpbGR7Km1hcmdpbi1sZWZ0OjB9LmJ0bi1ncm91cCsuYnRuLWdyb3Vwe21hcmdpbi1sZWZ0OjVweH0uYnRuLXRvb2xiYXJ7bWFyZ2luLXRvcDoxMHB4O21hcmdpbi1ib3R0b206MTBweDtmb250LXNpemU6MH0uYnRuLXRvb2xiYXIgLmJ0bi1ncm91cHtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7Knpvb206MX0uYnRuLXRvb2xiYXIgLmJ0bisuYnRuLC5idG4tdG9vbGJhciAuYnRuLWdyb3VwKy5idG4sLmJ0bi10b29sYmFyIC5idG4rLmJ0bi1ncm91cHttYXJnaW4tbGVmdDo1cHh9LmJ0bi1ncm91cD4uYnRue3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0uYnRuLWdyb3VwPi5idG4rLmJ0bnttYXJnaW4tbGVmdDotMXB4fS5idG4tZ3JvdXA+LmJ0biwuYnRuLWdyb3VwPi5kcm9wZG93bi1tZW51e2ZvbnQtc2l6ZToxNHB4fS5idG4tZ3JvdXA+LmJ0bi1taW5pe2ZvbnQtc2l6ZToxMXB4fS5idG4tZ3JvdXA+LmJ0bi1zbWFsbHtmb250LXNpemU6MTJweH0uYnRuLWdyb3VwPi5idG4tbGFyZ2V7Zm9udC1zaXplOjE2cHh9LmJ0bi1ncm91cD4uYnRuOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo0cHh9LmJ0bi1ncm91cD4uYnRuOmxhc3QtY2hpbGQsLmJ0bi1ncm91cD4uZHJvcGRvd24tdG9nZ2xley13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NHB4fS5idG4tZ3JvdXA+LmJ0bi5sYXJnZTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDowOy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo2cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo2cHg7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjZweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDo2cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NnB4fS5idG4tZ3JvdXA+LmJ0bi5sYXJnZTpsYXN0LWNoaWxkLC5idG4tZ3JvdXA+LmxhcmdlLmRyb3Bkb3duLXRvZ2dsZXstd2Via2l0LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOjZweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo2cHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo2cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDo2cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjZweH0uYnRuLWdyb3VwPi5idG46aG92ZXIsLmJ0bi1ncm91cD4uYnRuOmZvY3VzLC5idG4tZ3JvdXA+LmJ0bjphY3RpdmUsLmJ0bi1ncm91cD4uYnRuLmFjdGl2ZXt6LWluZGV4OjJ9LmJ0bi1ncm91cCAuZHJvcGRvd24tdG9nZ2xlOmFjdGl2ZSwuYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZXtvdXRsaW5lOjB9LmJ0bi1ncm91cD4uYnRuKy5kcm9wZG93bi10b2dnbGV7KnBhZGRpbmctdG9wOjVweDtwYWRkaW5nLXJpZ2h0OjhweDsqcGFkZGluZy1ib3R0b206NXB4O3BhZGRpbmctbGVmdDo4cHg7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEyNSksaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEyNSksaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzppbnNldCAxcHggMCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xMjUpLGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjIpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5idG4tZ3JvdXA+LmJ0bi1taW5pKy5kcm9wZG93bi10b2dnbGV7KnBhZGRpbmctdG9wOjJweDtwYWRkaW5nLXJpZ2h0OjVweDsqcGFkZGluZy1ib3R0b206MnB4O3BhZGRpbmctbGVmdDo1cHh9LmJ0bi1ncm91cD4uYnRuLXNtYWxsKy5kcm9wZG93bi10b2dnbGV7KnBhZGRpbmctdG9wOjVweDsqcGFkZGluZy1ib3R0b206NHB4fS5idG4tZ3JvdXA+LmJ0bi1sYXJnZSsuZHJvcGRvd24tdG9nZ2xleypwYWRkaW5nLXRvcDo3cHg7cGFkZGluZy1yaWdodDoxMnB4OypwYWRkaW5nLWJvdHRvbTo3cHg7cGFkZGluZy1sZWZ0OjEycHh9LmJ0bi1ncm91cC5vcGVuIC5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1pbWFnZTpub25lOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAycHggNHB4IHJnYmEoMCwwLDAsMC4xNSksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KX0uYnRuLWdyb3VwLm9wZW4gLmJ0bi5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2fS5idG4tZ3JvdXAub3BlbiAuYnRuLXByaW1hcnkuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6IzA0Y30uYnRuLWdyb3VwLm9wZW4gLmJ0bi13YXJuaW5nLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmODk0MDZ9LmJ0bi1ncm91cC5vcGVuIC5idG4tZGFuZ2VyLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiNiZDM2MmZ9LmJ0bi1ncm91cC5vcGVuIC5idG4tc3VjY2Vzcy5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojNTFhMzUxfS5idG4tZ3JvdXAub3BlbiAuYnRuLWluZm8uZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6IzJmOTZiNH0uYnRuLWdyb3VwLm9wZW4gLmJ0bi1pbnZlcnNlLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiMyMjJ9LmJ0biAuY2FyZXR7bWFyZ2luLXRvcDo4cHg7bWFyZ2luLWxlZnQ6MH0uYnRuLW1pbmkgLmNhcmV0LC5idG4tc21hbGwgLmNhcmV0LC5idG4tbGFyZ2UgLmNhcmV0e21hcmdpbi10b3A6NnB4fS5idG4tbGFyZ2UgLmNhcmV0e2JvcmRlci10b3Atd2lkdGg6NXB4O2JvcmRlci1yaWdodC13aWR0aDo1cHg7Ym9yZGVyLWxlZnQtd2lkdGg6NXB4fS5kcm9wdXAgLmJ0bi1sYXJnZSAuY2FyZXR7Ym9yZGVyLXRvcDowO2JvcmRlci1ib3R0b206NXB4IHNvbGlkICMwMDB9LmJ0bi1wcmltYXJ5IC5jYXJldCwuYnRuLXdhcm5pbmcgLmNhcmV0LC5idG4tZGFuZ2VyIC5jYXJldCwuYnRuLWluZm8gLmNhcmV0LC5idG4tc3VjY2VzcyAuY2FyZXQsLmJ0bi1pbnZlcnNlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfS5idG4tZ3JvdXAtdmVydGljYWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lOyp6b29tOjF9LmJ0bi1ncm91cC12ZXJ0aWNhbCAuYnRue2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bm9uZTt3aWR0aDoxMDAlOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0uYnRuLWdyb3VwLXZlcnRpY2FsIC5idG4rLmJ0bnttYXJnaW4tdG9wOi0xcHg7bWFyZ2luLWxlZnQ6MH0uYnRuLWdyb3VwLXZlcnRpY2FsIC5idG46Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCA0cHggMCAwOy1tb3otYm9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDtib3JkZXItcmFkaXVzOjRweCA0cHggMCAwfS5idG4tZ3JvdXAtdmVydGljYWwgLmJ0bjpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNHB4IDRweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDRweCA0cHg7Ym9yZGVyLXJhZGl1czowIDAgNHB4IDRweH0uYnRuLWdyb3VwLXZlcnRpY2FsIC5idG4tbGFyZ2U6Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweCA2cHggMCAwOy1tb3otYm9yZGVyLXJhZGl1czo2cHggNnB4IDAgMDtib3JkZXItcmFkaXVzOjZweCA2cHggMCAwfS5idG4tZ3JvdXAtdmVydGljYWwgLmJ0bi1sYXJnZTpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czowIDAgNnB4IDZweH0uYWxlcnR7cGFkZGluZzo4cHggMzVweCA4cHggMTRweDttYXJnaW4tYm90dG9tOjIwcHg7Y29sb3I6I2MwOTg1Mzt0ZXh0LXNoYWRvdzowIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC41KTtiYWNrZ3JvdW5kLWNvbG9yOiNmY2Y4ZTM7Ym9yZGVyOjFweCBzb2xpZCAjZmJlZWQ1Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0uYWxlcnQgaDR7bWFyZ2luOjB9LmFsZXJ0IC5jbG9zZXtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LTJweDtyaWdodDotMjFweDtsaW5lLWhlaWdodDoyMHB4fS5hbGVydC1zdWNjZXNze2NvbG9yOiM0Njg4NDc7YmFja2dyb3VuZC1jb2xvcjojZGZmMGQ4O2JvcmRlci1jb2xvcjojZDZlOWM2fS5hbGVydC1kYW5nZXIsLmFsZXJ0LWVycm9ye2NvbG9yOiNiOTRhNDg7YmFja2dyb3VuZC1jb2xvcjojZjJkZWRlO2JvcmRlci1jb2xvcjojZWVkM2Q3fS5hbGVydC1pbmZve2NvbG9yOiMzYTg3YWQ7YmFja2dyb3VuZC1jb2xvcjojZDllZGY3O2JvcmRlci1jb2xvcjojYmNlOGYxfS5hbGVydC1ibG9ja3twYWRkaW5nLXRvcDoxNHB4O3BhZGRpbmctYm90dG9tOjE0cHh9LmFsZXJ0LWJsb2NrPnAsLmFsZXJ0LWJsb2NrPnVse21hcmdpbi1ib3R0b206MH0uYWxlcnQtYmxvY2sgcCtwe21hcmdpbi10b3A6NXB4fS5uYXZ7bWFyZ2luLWJvdHRvbToyMHB4O21hcmdpbi1sZWZ0OjA7bGlzdC1zdHlsZTpub25lfS5uYXY+bGk+YXtkaXNwbGF5OmJsb2NrfS5uYXY+bGk+YTpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Lm5hdj4ucHVsbC1yaWdodHtmbG9hdDpyaWdodH0ubmF2LWhlYWRlcntkaXNwbGF5OmJsb2NrO3BhZGRpbmc6M3B4IDE1cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM5OTk7dGV4dC1zaGFkb3c6MCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuNSk7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS5uYXYgbGkrLm5hdi1oZWFkZXJ7bWFyZ2luLXRvcDo5cHh9Lm5hdi1saXN0e3BhZGRpbmctcmlnaHQ6MTVweDtwYWRkaW5nLWxlZnQ6MTVweDttYXJnaW4tYm90dG9tOjB9Lm5hdi1saXN0PmxpPmEsLm5hdi1saXN0IC5uYXYtaGVhZGVye21hcmdpbi1yaWdodDotMTVweDttYXJnaW4tbGVmdDotMTVweDt0ZXh0LXNoYWRvdzowIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC41KX0ubmF2LWxpc3Q+bGk+YXtwYWRkaW5nOjNweCAxNXB4fS5uYXYtbGlzdD4uYWN0aXZlPmEsLm5hdi1saXN0Pi5hY3RpdmU+YTpob3Zlcntjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yKTtiYWNrZ3JvdW5kLWNvbG9yOiMwOGN9Lm5hdi1saXN0IFtjbGFzc149Imljb24tIl17bWFyZ2luLXJpZ2h0OjJweH0ubmF2LWxpc3QgLmRpdmlkZXJ7KndpZHRoOjEwMCU7aGVpZ2h0OjFweDttYXJnaW46OXB4IDFweDsqbWFyZ2luOi01cHggMCA1cHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6I2U1ZTVlNTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZmZmfS5uYXYtdGFicywubmF2LXBpbGxzeyp6b29tOjF9Lm5hdi10YWJzOmJlZm9yZSwubmF2LXBpbGxzOmJlZm9yZSwubmF2LXRhYnM6YWZ0ZXIsLm5hdi1waWxsczphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ubmF2LXRhYnM6YWZ0ZXIsLm5hdi1waWxsczphZnRlcntjbGVhcjpib3RofS5uYXYtdGFicz5saSwubmF2LXBpbGxzPmxpe2Zsb2F0OmxlZnR9Lm5hdi10YWJzPmxpPmEsLm5hdi1waWxscz5saT5he3BhZGRpbmctcmlnaHQ6MTJweDtwYWRkaW5nLWxlZnQ6MTJweDttYXJnaW4tcmlnaHQ6MnB4O2xpbmUtaGVpZ2h0OjE0cHh9Lm5hdi10YWJze2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZGR9Lm5hdi10YWJzPmxpe21hcmdpbi1ib3R0b206LTFweH0ubmF2LXRhYnM+bGk+YXtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4O2xpbmUtaGVpZ2h0OjIwcHg7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7LW1vei1ib3JkZXItcmFkaXVzOjRweCA0cHggMCAwO2JvcmRlci1yYWRpdXM6NHB4IDRweCAwIDB9Lm5hdi10YWJzPmxpPmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNlZWUgI2VlZWVlZSAjZGRkfS5uYXYtdGFicz4uYWN0aXZlPmEsLm5hdi10YWJzPi5hY3RpdmU+YTpob3Zlcntjb2xvcjojNTU1O2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp0cmFuc3BhcmVudH0ubmF2LXBpbGxzPmxpPmF7cGFkZGluZy10b3A6OHB4O3BhZGRpbmctYm90dG9tOjhweDttYXJnaW4tdG9wOjJweDttYXJnaW4tYm90dG9tOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NXB4Oy1tb3otYm9yZGVyLXJhZGl1czo1cHg7Ym9yZGVyLXJhZGl1czo1cHh9Lm5hdi1waWxscz4uYWN0aXZlPmEsLm5hdi1waWxscz4uYWN0aXZlPmE6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMwOGN9Lm5hdi1zdGFja2VkPmxpe2Zsb2F0Om5vbmV9Lm5hdi1zdGFja2VkPmxpPmF7bWFyZ2luLXJpZ2h0OjB9Lm5hdi10YWJzLm5hdi1zdGFja2Vke2JvcmRlci1ib3R0b206MH0ubmF2LXRhYnMubmF2LXN0YWNrZWQ+bGk+YXtib3JkZXI6MXB4IHNvbGlkICNkZGQ7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5uYXYtdGFicy5uYXYtc3RhY2tlZD5saTpmaXJzdC1jaGlsZD5hey13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6NHB4fS5uYXYtdGFicy5uYXYtc3RhY2tlZD5saTpsYXN0LWNoaWxkPmF7LXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbXJpZ2h0OjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDo0cHh9Lm5hdi10YWJzLm5hdi1zdGFja2VkPmxpPmE6aG92ZXJ7ei1pbmRleDoyO2JvcmRlci1jb2xvcjojZGRkfS5uYXYtcGlsbHMubmF2LXN0YWNrZWQ+bGk+YXttYXJnaW4tYm90dG9tOjNweH0ubmF2LXBpbGxzLm5hdi1zdGFja2VkPmxpOmxhc3QtY2hpbGQ+YXttYXJnaW4tYm90dG9tOjFweH0ubmF2LXRhYnMgLmRyb3Bkb3duLW1lbnV7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMCA2cHggNnB4Oy1tb3otYm9yZGVyLXJhZGl1czowIDAgNnB4IDZweDtib3JkZXItcmFkaXVzOjAgMCA2cHggNnB4fS5uYXYtcGlsbHMgLmRyb3Bkb3duLW1lbnV7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4fS5uYXYgLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7bWFyZ2luLXRvcDo2cHg7Ym9yZGVyLXRvcC1jb2xvcjojMDhjO2JvcmRlci1ib3R0b20tY29sb3I6IzA4Y30ubmF2IC5kcm9wZG93bi10b2dnbGU6aG92ZXIgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6IzAwNTU4MDtib3JkZXItYm90dG9tLWNvbG9yOiMwMDU1ODB9Lm5hdi10YWJzIC5kcm9wZG93bi10b2dnbGUgLmNhcmV0e21hcmdpbi10b3A6OHB4fS5uYXYgLmFjdGl2ZSAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfS5uYXYtdGFicyAuYWN0aXZlIC5kcm9wZG93bi10b2dnbGUgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6IzU1NTtib3JkZXItYm90dG9tLWNvbG9yOiM1NTV9Lm5hdj4uZHJvcGRvd24uYWN0aXZlPmE6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9Lm5hdi10YWJzIC5vcGVuIC5kcm9wZG93bi10b2dnbGUsLm5hdi1waWxscyAub3BlbiAuZHJvcGRvd24tdG9nZ2xlLC5uYXY+bGkuZHJvcGRvd24ub3Blbi5hY3RpdmU+YTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6Izk5OTtib3JkZXItY29sb3I6Izk5OX0ubmF2IGxpLmRyb3Bkb3duLm9wZW4gLmNhcmV0LC5uYXYgbGkuZHJvcGRvd24ub3Blbi5hY3RpdmUgLmNhcmV0LC5uYXYgbGkuZHJvcGRvd24ub3BlbiBhOmhvdmVyIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmO29wYWNpdHk6MTtmaWx0ZXI6YWxwaGEob3BhY2l0eT0xMDApfS50YWJzLXN0YWNrZWQgLm9wZW4+YTpob3Zlcntib3JkZXItY29sb3I6Izk5OX0udGFiYmFibGV7Knpvb206MX0udGFiYmFibGU6YmVmb3JlLC50YWJiYWJsZTphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0udGFiYmFibGU6YWZ0ZXJ7Y2xlYXI6Ym90aH0udGFiLWNvbnRlbnR7b3ZlcmZsb3c6YXV0b30udGFicy1iZWxvdz4ubmF2LXRhYnMsLnRhYnMtcmlnaHQ+Lm5hdi10YWJzLC50YWJzLWxlZnQ+Lm5hdi10YWJze2JvcmRlci1ib3R0b206MH0udGFiLWNvbnRlbnQ+LnRhYi1wYW5lLC5waWxsLWNvbnRlbnQ+LnBpbGwtcGFuZXtkaXNwbGF5Om5vbmV9LnRhYi1jb250ZW50Pi5hY3RpdmUsLnBpbGwtY29udGVudD4uYWN0aXZle2Rpc3BsYXk6YmxvY2t9LnRhYnMtYmVsb3c+Lm5hdi10YWJze2JvcmRlci10b3A6MXB4IHNvbGlkICNkZGR9LnRhYnMtYmVsb3c+Lm5hdi10YWJzPmxpe21hcmdpbi10b3A6LTFweDttYXJnaW4tYm90dG9tOjB9LnRhYnMtYmVsb3c+Lm5hdi10YWJzPmxpPmF7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMCA0cHggNHB4Oy1tb3otYm9yZGVyLXJhZGl1czowIDAgNHB4IDRweDtib3JkZXItcmFkaXVzOjAgMCA0cHggNHB4fS50YWJzLWJlbG93Pi5uYXYtdGFicz5saT5hOmhvdmVye2JvcmRlci10b3AtY29sb3I6I2RkZDtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50fS50YWJzLWJlbG93Pi5uYXYtdGFicz4uYWN0aXZlPmEsLnRhYnMtYmVsb3c+Lm5hdi10YWJzPi5hY3RpdmU+YTpob3Zlcntib3JkZXItY29sb3I6dHJhbnNwYXJlbnQgI2RkZCAjZGRkICNkZGR9LnRhYnMtbGVmdD4ubmF2LXRhYnM+bGksLnRhYnMtcmlnaHQ+Lm5hdi10YWJzPmxpe2Zsb2F0Om5vbmV9LnRhYnMtbGVmdD4ubmF2LXRhYnM+bGk+YSwudGFicy1yaWdodD4ubmF2LXRhYnM+bGk+YXttaW4td2lkdGg6NzRweDttYXJnaW4tcmlnaHQ6MDttYXJnaW4tYm90dG9tOjNweH0udGFicy1sZWZ0Pi5uYXYtdGFic3tmbG9hdDpsZWZ0O21hcmdpbi1yaWdodDoxOXB4O2JvcmRlci1yaWdodDoxcHggc29saWQgI2RkZH0udGFicy1sZWZ0Pi5uYXYtdGFicz5saT5he21hcmdpbi1yaWdodDotMXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7Ym9yZGVyLXJhZGl1czo0cHggMCAwIDRweH0udGFicy1sZWZ0Pi5uYXYtdGFicz5saT5hOmhvdmVye2JvcmRlci1jb2xvcjojZWVlICNkZGRkZGQgI2VlZSAjZWVlZWVlfS50YWJzLWxlZnQ+Lm5hdi10YWJzIC5hY3RpdmU+YSwudGFicy1sZWZ0Pi5uYXYtdGFicyAuYWN0aXZlPmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNkZGQgdHJhbnNwYXJlbnQgI2RkZCAjZGRkOypib3JkZXItcmlnaHQtY29sb3I6I2ZmZn0udGFicy1yaWdodD4ubmF2LXRhYnN7ZmxvYXQ6cmlnaHQ7bWFyZ2luLWxlZnQ6MTlweDtib3JkZXItbGVmdDoxcHggc29saWQgI2RkZH0udGFicy1yaWdodD4ubmF2LXRhYnM+bGk+YXttYXJnaW4tbGVmdDotMXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCA0cHggNHB4IDA7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMH0udGFicy1yaWdodD4ubmF2LXRhYnM+bGk+YTpob3Zlcntib3JkZXItY29sb3I6I2VlZSAjZWVlZWVlICNlZWUgI2RkZGRkZH0udGFicy1yaWdodD4ubmF2LXRhYnMgLmFjdGl2ZT5hLC50YWJzLXJpZ2h0Pi5uYXYtdGFicyAuYWN0aXZlPmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNkZGQgI2RkZCAjZGRkIHRyYW5zcGFyZW50Oypib3JkZXItbGVmdC1jb2xvcjojZmZmfS5uYXY+LmRpc2FibGVkPmF7Y29sb3I6Izk5OX0ubmF2Pi5kaXNhYmxlZD5hOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm5hdmJhcnsqcG9zaXRpb246cmVsYXRpdmU7KnotaW5kZXg6MjttYXJnaW4tYm90dG9tOjIwcHg7b3ZlcmZsb3c6dmlzaWJsZTtjb2xvcjojNTU1fS5uYXZiYXItaW5uZXJ7bWluLWhlaWdodDo0MHB4O3BhZGRpbmctcmlnaHQ6MjBweDtwYWRkaW5nLWxlZnQ6MjBweDtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZjJmMmYyKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZmZmKSx0bygjZjJmMmYyKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZjJmMmYyKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2ZmZiwjZjJmMmYyKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2ZmZiwjZjJmMmYyKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXI6MXB4IHNvbGlkICNkNGQ0ZDQ7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4O2ZpbHRlcjpwcm9naWQ6ZHhpbWFnZXRyYW5zZm9ybS5taWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZmZmZmZmJyxlbmRDb2xvcnN0cj0nI2ZmZjJmMmYyJyxHcmFkaWVudFR5cGU9MCk7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMCwwLDAuMDY1KTstbW96LWJveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwwLDAsMC4wNjUpO2JveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwwLDAsMC4wNjUpfS5uYXZiYXIgLmNvbnRhaW5lcnt3aWR0aDphdXRvfS5uYXYtY29sbGFwc2UuY29sbGFwc2V7aGVpZ2h0OmF1dG99Lm5hdmJhciAuYnJhbmR7ZGlzcGxheTpibG9jaztmbG9hdDpsZWZ0O3BhZGRpbmc6MTBweCAyMHB4IDEwcHg7bWFyZ2luLWxlZnQ6LTIwcHg7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6MjAwO2NvbG9yOiM1NTU7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmfS5uYXZiYXIgLmJyYW5kOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lfS5uYXZiYXItdGV4dHttYXJnaW4tYm90dG9tOjA7bGluZS1oZWlnaHQ6NDBweH0ubmF2YmFyLWxpbmt7Y29sb3I6IzU1NX0ubmF2YmFyLWxpbms6aG92ZXJ7Y29sb3I6IzMzM30ubmF2YmFyIC5kaXZpZGVyLXZlcnRpY2Fse2hlaWdodDo0MHB4O21hcmdpbjowIDlweDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNmZmY7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNmMmYyZjJ9Lm5hdmJhciAuYnRuLC5uYXZiYXIgLmJ0bi1ncm91cHttYXJnaW4tdG9wOjZweH0ubmF2YmFyIC5idG4tZ3JvdXAgLmJ0bnttYXJnaW46MH0ubmF2YmFyLWZvcm17bWFyZ2luLWJvdHRvbTowOyp6b29tOjF9Lm5hdmJhci1mb3JtOmJlZm9yZSwubmF2YmFyLWZvcm06YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9Lm5hdmJhci1mb3JtOmFmdGVye2NsZWFyOmJvdGh9Lm5hdmJhci1mb3JtIGlucHV0LC5uYXZiYXItZm9ybSBzZWxlY3QsLm5hdmJhci1mb3JtIC5yYWRpbywubmF2YmFyLWZvcm0gLmNoZWNrYm94e21hcmdpbi10b3A6NXB4fS5uYXZiYXItZm9ybSBpbnB1dCwubmF2YmFyLWZvcm0gc2VsZWN0LC5uYXZiYXItZm9ybSAuYnRue2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1ib3R0b206MH0ubmF2YmFyLWZvcm0gaW5wdXRbdHlwZT0iaW1hZ2UiXSwubmF2YmFyLWZvcm0gaW5wdXRbdHlwZT0iY2hlY2tib3giXSwubmF2YmFyLWZvcm0gaW5wdXRbdHlwZT0icmFkaW8iXXttYXJnaW4tdG9wOjNweH0ubmF2YmFyLWZvcm0gLmlucHV0LWFwcGVuZCwubmF2YmFyLWZvcm0gLmlucHV0LXByZXBlbmR7bWFyZ2luLXRvcDo2cHg7d2hpdGUtc3BhY2U6bm93cmFwfS5uYXZiYXItZm9ybSAuaW5wdXQtYXBwZW5kIGlucHV0LC5uYXZiYXItZm9ybSAuaW5wdXQtcHJlcGVuZCBpbnB1dHttYXJnaW4tdG9wOjB9Lm5hdmJhci1zZWFyY2h7cG9zaXRpb246cmVsYXRpdmU7ZmxvYXQ6bGVmdDttYXJnaW4tdG9wOjVweDttYXJnaW4tYm90dG9tOjB9Lm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeXtwYWRkaW5nOjRweCAxNHB4O21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseToiSGVsdmV0aWNhIE5ldWUiLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoxOy13ZWJraXQtYm9yZGVyLXJhZGl1czoxNXB4Oy1tb3otYm9yZGVyLXJhZGl1czoxNXB4O2JvcmRlci1yYWRpdXM6MTVweH0ubmF2YmFyLXN0YXRpYy10b3B7cG9zaXRpb246c3RhdGljO3dpZHRoOjEwMCU7bWFyZ2luLWJvdHRvbTowfS5uYXZiYXItc3RhdGljLXRvcCAubmF2YmFyLWlubmVyey13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0ubmF2YmFyLWZpeGVkLXRvcCwubmF2YmFyLWZpeGVkLWJvdHRvbXtwb3NpdGlvbjpmaXhlZDtyaWdodDowO2xlZnQ6MDt6LWluZGV4OjEwMzA7bWFyZ2luLWJvdHRvbTowfS5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItaW5uZXIsLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1pbm5lciwubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1pbm5lcntib3JkZXI6MH0ubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWlubmVyLC5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXZiYXItaW5uZXJ7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDowOy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0ubmF2YmFyLXN0YXRpYy10b3AgLmNvbnRhaW5lciwubmF2YmFyLWZpeGVkLXRvcCAuY29udGFpbmVyLC5uYXZiYXItZml4ZWQtYm90dG9tIC5jb250YWluZXJ7d2lkdGg6OTQwcHh9Lm5hdmJhci1maXhlZC10b3B7dG9wOjB9Lm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1pbm5lciwubmF2YmFyLXN0YXRpYy10b3AgLm5hdmJhci1pbm5lcnstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwwLjEpLDAgMXB4IDEwcHggcmdiYSgwLDAsMCwwLjEpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMSksMCAxcHggMTBweCByZ2JhKDAsMCwwLDAuMSk7Ym94LXNoYWRvdzppbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMSksMCAxcHggMTBweCByZ2JhKDAsMCwwLDAuMSl9Lm5hdmJhci1maXhlZC1ib3R0b217Ym90dG9tOjB9Lm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1pbm5lcnstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDAsMCwwLDAuMSksMCAtMXB4IDEwcHggcmdiYSgwLDAsMCwwLjEpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMCwwLDAsMC4xKSwwIC0xcHggMTBweCByZ2JhKDAsMCwwLDAuMSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMCwwLDAsMC4xKSwwIC0xcHggMTBweCByZ2JhKDAsMCwwLDAuMSl9Lm5hdmJhciAubmF2e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MDtkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnQ7bWFyZ2luOjAgMTBweCAwIDB9Lm5hdmJhciAubmF2LnB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHR9Lm5hdmJhciAubmF2Pmxpe2Zsb2F0OmxlZnR9Lm5hdmJhciAubmF2PmxpPmF7ZmxvYXQ6bm9uZTtwYWRkaW5nOjEwcHggMTVweCAxMHB4O2NvbG9yOiM1NTU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmfS5uYXZiYXIgLm5hdiAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHttYXJnaW4tdG9wOjhweH0ubmF2YmFyIC5uYXY+bGk+YTpmb2N1cywubmF2YmFyIC5uYXY+bGk+YTpob3Zlcntjb2xvcjojMzMzO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm5hdmJhciAubmF2Pi5hY3RpdmU+YSwubmF2YmFyIC5uYXY+LmFjdGl2ZT5hOmhvdmVyLC5uYXZiYXIgLm5hdj4uYWN0aXZlPmE6Zm9jdXN7Y29sb3I6IzU1NTt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1ZTU7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgM3B4IDhweCByZ2JhKDAsMCwwLDAuMTI1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAzcHggOHB4IHJnYmEoMCwwLDAsMC4xMjUpO2JveC1zaGFkb3c6aW5zZXQgMCAzcHggOHB4IHJnYmEoMCwwLDAsMC4xMjUpfS5uYXZiYXIgLmJ0bi1uYXZiYXJ7ZGlzcGxheTpub25lO2Zsb2F0OnJpZ2h0O3BhZGRpbmc6N3B4IDEwcHg7bWFyZ2luLXJpZ2h0OjVweDttYXJnaW4tbGVmdDo1cHg7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6I2VkZWRlZDsqYmFja2dyb3VuZC1jb2xvcjojZTVlNWU1O2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmMmYyZjIpLHRvKCNlNWU1ZTUpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZjJmMmYyLCNlNWU1ZTUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZjJmMmYyLCNlNWU1ZTUpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZjJmMmYyLCNlNWU1ZTUpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiNlNWU1ZTUgI2U1ZTVlNSAjYmZiZmJmO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpkeGltYWdldHJhbnNmb3JtLm1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmMmYyZjInLGVuZENvbG9yc3RyPScjZmZlNWU1ZTUnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMDc1KX0ubmF2YmFyIC5idG4tbmF2YmFyOmhvdmVyLC5uYXZiYXIgLmJ0bi1uYXZiYXI6YWN0aXZlLC5uYXZiYXIgLmJ0bi1uYXZiYXIuYWN0aXZlLC5uYXZiYXIgLmJ0bi1uYXZiYXIuZGlzYWJsZWQsLm5hdmJhciAuYnRuLW5hdmJhcltkaXNhYmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1ZTU7KmJhY2tncm91bmQtY29sb3I6I2Q5ZDlkOX0ubmF2YmFyIC5idG4tbmF2YmFyOmFjdGl2ZSwubmF2YmFyIC5idG4tbmF2YmFyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNjY2MgXDl9Lm5hdmJhciAuYnRuLW5hdmJhciAuaWNvbi1iYXJ7ZGlzcGxheTpibG9jazt3aWR0aDoxOHB4O2hlaWdodDoycHg7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1Oy13ZWJraXQtYm9yZGVyLXJhZGl1czoxcHg7LW1vei1ib3JkZXItcmFkaXVzOjFweDtib3JkZXItcmFkaXVzOjFweDstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMCByZ2JhKDAsMCwwLDAuMjUpOy1tb3otYm94LXNoYWRvdzowIDFweCAwIHJnYmEoMCwwLDAsMC4yNSk7Ym94LXNoYWRvdzowIDFweCAwIHJnYmEoMCwwLDAsMC4yNSl9LmJ0bi1uYXZiYXIgLmljb24tYmFyKy5pY29uLWJhcnttYXJnaW4tdG9wOjNweH0ubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO3RvcDotN3B4O2xlZnQ6OXB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yaWdodDo3cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTo3cHggc29saWQgI2NjYztib3JkZXItbGVmdDo3cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsMCwwLDAuMik7Y29udGVudDonJ30ubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOi02cHg7bGVmdDoxMHB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2JvcmRlci1yaWdodDo2cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTo2cHggc29saWQgI2ZmZjtib3JkZXItbGVmdDo2cHggc29saWQgdHJhbnNwYXJlbnQ7Y29udGVudDonJ30ubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2PmxpPi5kcm9wZG93bi1tZW51OmJlZm9yZXt0b3A6YXV0bztib3R0b206LTdweDtib3JkZXItdG9wOjdweCBzb2xpZCAjY2NjO2JvcmRlci1ib3R0b206MDtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsMC4yKX0ubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2PmxpPi5kcm9wZG93bi1tZW51OmFmdGVye3RvcDphdXRvO2JvdHRvbTotNnB4O2JvcmRlci10b3A6NnB4IHNvbGlkICNmZmY7Ym9yZGVyLWJvdHRvbTowfS5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi10b2dnbGUsLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xlLC5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xle2NvbG9yOiM1NTU7YmFja2dyb3VuZC1jb2xvcjojZTVlNWU1fS5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiM1NTU7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNTU1fS5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0LC5uYXZiYXIgLm5hdiBsaS5kcm9wZG93bi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQsLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6IzU1NTtib3JkZXItYm90dG9tLWNvbG9yOiM1NTV9Lm5hdmJhciAucHVsbC1yaWdodD5saT4uZHJvcGRvd24tbWVudSwubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodHtyaWdodDowO2xlZnQ6YXV0b30ubmF2YmFyIC5wdWxsLXJpZ2h0PmxpPi5kcm9wZG93bi1tZW51OmJlZm9yZSwubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodDpiZWZvcmV7cmlnaHQ6MTJweDtsZWZ0OmF1dG99Lm5hdmJhciAucHVsbC1yaWdodD5saT4uZHJvcGRvd24tbWVudTphZnRlciwubmF2YmFyIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnUucHVsbC1yaWdodDphZnRlcntyaWdodDoxM3B4O2xlZnQ6YXV0b30ubmF2YmFyIC5wdWxsLXJpZ2h0PmxpPi5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1tZW51LC5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0IC5kcm9wZG93bi1tZW51e3JpZ2h0OjEwMCU7bGVmdDphdXRvO21hcmdpbi1yaWdodDotMXB4O21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czo2cHggMCA2cHggNnB4fS5uYXZiYXItaW52ZXJzZXtjb2xvcjojOTk5fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWlubmVye2JhY2tncm91bmQtY29sb3I6IzFiMWIxYjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMjIyLCMxMTEpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMyMjIpLHRvKCMxMTEpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMjIyLCMxMTEpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMjIyLCMxMTEpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMjIyLCMxMTEpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojMjUyNTI1O2ZpbHRlcjpwcm9naWQ6ZHhpbWFnZXRyYW5zZm9ybS5taWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMjIyMjIyJyxlbmRDb2xvcnN0cj0nI2ZmMTExMTExJyxHcmFkaWVudFR5cGU9MCl9Lm5hdmJhci1pbnZlcnNlIC5icmFuZCwubmF2YmFyLWludmVyc2UgLm5hdj5saT5he2NvbG9yOiM5OTk7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KX0ubmF2YmFyLWludmVyc2UgLmJyYW5kOmhvdmVyLC5uYXZiYXItaW52ZXJzZSAubmF2PmxpPmE6aG92ZXJ7Y29sb3I6I2ZmZn0ubmF2YmFyLWludmVyc2UgLm5hdj5saT5hOmZvY3VzLC5uYXZiYXItaW52ZXJzZSAubmF2PmxpPmE6aG92ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5uYXZiYXItaW52ZXJzZSAubmF2IC5hY3RpdmU+YSwubmF2YmFyLWludmVyc2UgLm5hdiAuYWN0aXZlPmE6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5uYXYgLmFjdGl2ZT5hOmZvY3Vze2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMTExfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbmt7Y29sb3I6Izk5OX0ubmF2YmFyLWludmVyc2UgLm5hdmJhci1saW5rOmhvdmVye2NvbG9yOiNmZmZ9Lm5hdmJhci1pbnZlcnNlIC5kaXZpZGVyLXZlcnRpY2Fse2JvcmRlci1yaWdodC1jb2xvcjojMjIyO2JvcmRlci1sZWZ0LWNvbG9yOiMxMTF9Lm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tdG9nZ2xlLC5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xlLC5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPi5kcm9wZG93bi10b2dnbGV7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMxMTF9Lm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojOTk5O2JvcmRlci1ib3R0b20tY29sb3I6Izk5OX0ubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0LC5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldCwubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5e2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNTE1MTUxO2JvcmRlci1jb2xvcjojMTExOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xNSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KTstd2Via2l0LXRyYW5zaXRpb246bm9uZTstbW96LXRyYW5zaXRpb246bm9uZTstby10cmFuc2l0aW9uOm5vbmU7dHJhbnNpdGlvbjpub25lfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6I2NjY30ubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeTotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I2NjY30ubmF2YmFyLWludmVyc2UgLm5hdmJhci1zZWFyY2ggLnNlYXJjaC1xdWVyeTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojY2NjfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5OmZvY3VzLC5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5LmZvY3VzZWR7cGFkZGluZzo1cHggMTVweDtjb2xvcjojMzMzO3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjA7b3V0bGluZTowOy13ZWJraXQtYm94LXNoYWRvdzowIDAgM3B4IHJnYmEoMCwwLDAsMC4xNSk7LW1vei1ib3gtc2hhZG93OjAgMCAzcHggcmdiYSgwLDAsMCwwLjE1KTtib3gtc2hhZG93OjAgMCAzcHggcmdiYSgwLDAsMCwwLjE1KX0ubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXJ7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzBlMGUwZTsqYmFja2dyb3VuZC1jb2xvcjojMDQwNDA0O2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMxNTE1MTUpLHRvKCMwNDA0MDQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMTUxNTE1LCMwNDA0MDQpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMTUxNTE1LCMwNDA0MDQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMTUxNTE1LCMwNDA0MDQpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMxNTE1MTUsIzA0MDQwNCk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiMwNDA0MDQgIzA0MDQwNCAjMDAwO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpkeGltYWdldHJhbnNmb3JtLm1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYxNTE1MTUnLGVuZENvbG9yc3RyPScjZmYwNDA0MDQnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcjpob3ZlciwubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXI6YWN0aXZlLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhci5hY3RpdmUsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyLmRpc2FibGVkLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcltkaXNhYmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMwNDA0MDQ7KmJhY2tncm91bmQtY29sb3I6IzAwMH0ubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXI6YWN0aXZlLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhci5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojMDAwIFw5fS5icmVhZGNydW1ie3BhZGRpbmc6OHB4IDE1cHg7bWFyZ2luOjAgMCAyMHB4O2xpc3Qtc3R5bGU6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS5icmVhZGNydW1iIGxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTt0ZXh0LXNoYWRvdzowIDFweCAwICNmZmY7Knpvb206MX0uYnJlYWRjcnVtYiAuZGl2aWRlcntwYWRkaW5nOjAgNXB4O2NvbG9yOiNjY2N9LmJyZWFkY3J1bWIgLmFjdGl2ZXtjb2xvcjojOTk5fS5wYWdpbmF0aW9ue2hlaWdodDo0MHB4O21hcmdpbjoyMHB4IDB9LnBhZ2luYXRpb24gdWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO21hcmdpbi1ib3R0b206MDttYXJnaW4tbGVmdDowOy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweDsqem9vbToxOy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6MCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KX0ucGFnaW5hdGlvbiBsaXtkaXNwbGF5OmlubGluZX0ucGFnaW5hdGlvbiBhLC5wYWdpbmF0aW9uIHNwYW57ZmxvYXQ6bGVmdDtwYWRkaW5nOjAgMTRweDtsaW5lLWhlaWdodDozOHB4O3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7Ym9yZGVyLWxlZnQtd2lkdGg6MH0ucGFnaW5hdGlvbiBhOmhvdmVyLC5wYWdpbmF0aW9uIC5hY3RpdmUgYSwucGFnaW5hdGlvbiAuYWN0aXZlIHNwYW57YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1fS5wYWdpbmF0aW9uIC5hY3RpdmUgYSwucGFnaW5hdGlvbiAuYWN0aXZlIHNwYW57Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVsdH0ucGFnaW5hdGlvbiAuZGlzYWJsZWQgc3BhbiwucGFnaW5hdGlvbiAuZGlzYWJsZWQgYSwucGFnaW5hdGlvbiAuZGlzYWJsZWQgYTpob3Zlcntjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LnBhZ2luYXRpb24gbGk6Zmlyc3QtY2hpbGQgYSwucGFnaW5hdGlvbiBsaTpmaXJzdC1jaGlsZCBzcGFue2JvcmRlci1sZWZ0LXdpZHRoOjFweDstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4IDAgMCAzcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweCAwIDAgM3B4O2JvcmRlci1yYWRpdXM6M3B4IDAgMCAzcHh9LnBhZ2luYXRpb24gbGk6bGFzdC1jaGlsZCBhLC5wYWdpbmF0aW9uIGxpOmxhc3QtY2hpbGQgc3Bhbnstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAzcHggM3B4IDA7LW1vei1ib3JkZXItcmFkaXVzOjAgM3B4IDNweCAwO2JvcmRlci1yYWRpdXM6MCAzcHggM3B4IDB9LnBhZ2luYXRpb24tY2VudGVyZWR7dGV4dC1hbGlnbjpjZW50ZXJ9LnBhZ2luYXRpb24tcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0ucGFnZXJ7bWFyZ2luOjIwcHggMDt0ZXh0LWFsaWduOmNlbnRlcjtsaXN0LXN0eWxlOm5vbmU7Knpvb206MX0ucGFnZXI6YmVmb3JlLC5wYWdlcjphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ucGFnZXI6YWZ0ZXJ7Y2xlYXI6Ym90aH0ucGFnZXIgbGl7ZGlzcGxheTppbmxpbmV9LnBhZ2VyIGF7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzo1cHggMTRweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZGRkOy13ZWJraXQtYm9yZGVyLXJhZGl1czoxNXB4Oy1tb3otYm9yZGVyLXJhZGl1czoxNXB4O2JvcmRlci1yYWRpdXM6MTVweH0ucGFnZXIgYTpob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjV9LnBhZ2VyIC5uZXh0IGF7ZmxvYXQ6cmlnaHR9LnBhZ2VyIC5wcmV2aW91cyBhe2Zsb2F0OmxlZnR9LnBhZ2VyIC5kaXNhYmxlZCBhLC5wYWdlciAuZGlzYWJsZWQgYTpob3Zlcntjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0O2JhY2tncm91bmQtY29sb3I6I2ZmZn0ubW9kYWwtb3BlbiAuZHJvcGRvd24tbWVudXt6LWluZGV4OjIwNTB9Lm1vZGFsLW9wZW4gLmRyb3Bkb3duLm9wZW57KnotaW5kZXg6MjA1MH0ubW9kYWwtb3BlbiAucG9wb3Zlcnt6LWluZGV4OjIwNjB9Lm1vZGFsLW9wZW4gLnRvb2x0aXB7ei1pbmRleDoyMDgwfS5tb2RhbC1iYWNrZHJvcHtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MDt6LWluZGV4OjEwNDA7YmFja2dyb3VuZC1jb2xvcjojMDAwfS5tb2RhbC1iYWNrZHJvcC5mYWRle29wYWNpdHk6MH0ubW9kYWwtYmFja2Ryb3AsLm1vZGFsLWJhY2tkcm9wLmZhZGUuaW57b3BhY2l0eTouODtmaWx0ZXI6YWxwaGEob3BhY2l0eT04MCl9Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO3RvcDo1MCU7bGVmdDo1MCU7ei1pbmRleDoxMDUwO3dpZHRoOjU2MHB4O21hcmdpbjotMjUwcHggMCAwIC0yODBweDtvdmVyZmxvdzphdXRvO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICM5OTk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMyk7KmJvcmRlcjoxcHggc29saWQgIzk5OTstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgM3B4IDdweCByZ2JhKDAsMCwwLDAuMyk7LW1vei1ib3gtc2hhZG93OjAgM3B4IDdweCByZ2JhKDAsMCwwLDAuMyk7Ym94LXNoYWRvdzowIDNweCA3cHggcmdiYSgwLDAsMCwwLjMpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94Oy1tb3otYmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94O2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveH0ubW9kYWwuZmFkZXt0b3A6LTI1JTstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyLHRvcCAuM3MgZWFzZS1vdXQ7LW1vei10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGxpbmVhcix0b3AgLjNzIGVhc2Utb3V0Oy1vLXRyYW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyLHRvcCAuM3MgZWFzZS1vdXQ7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXIsdG9wIC4zcyBlYXNlLW91dH0ubW9kYWwuZmFkZS5pbnt0b3A6NTAlfS5tb2RhbC1oZWFkZXJ7cGFkZGluZzo5cHggMTVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWVlfS5tb2RhbC1oZWFkZXIgLmNsb3Nle21hcmdpbi10b3A6MnB4fS5tb2RhbC1oZWFkZXIgaDN7bWFyZ2luOjA7bGluZS1oZWlnaHQ6MzBweH0ubW9kYWwtYm9keXttYXgtaGVpZ2h0OjQwMHB4O3BhZGRpbmc6MTVweDtvdmVyZmxvdy15OmF1dG99Lm1vZGFsLWZvcm17bWFyZ2luLWJvdHRvbTowfS5tb2RhbC1mb290ZXJ7cGFkZGluZzoxNHB4IDE1cHggMTVweDttYXJnaW4tYm90dG9tOjA7dGV4dC1hbGlnbjpyaWdodDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZDstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7LW1vei1ib3JkZXItcmFkaXVzOjAgMCA2cHggNnB4O2JvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7Knpvb206MTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCAjZmZmOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAwICNmZmY7Ym94LXNoYWRvdzppbnNldCAwIDFweCAwICNmZmZ9Lm1vZGFsLWZvb3RlcjpiZWZvcmUsLm1vZGFsLWZvb3RlcjphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ubW9kYWwtZm9vdGVyOmFmdGVye2NsZWFyOmJvdGh9Lm1vZGFsLWZvb3RlciAuYnRuKy5idG57bWFyZ2luLWJvdHRvbTowO21hcmdpbi1sZWZ0OjVweH0ubW9kYWwtZm9vdGVyIC5idG4tZ3JvdXAgLmJ0bisuYnRue21hcmdpbi1sZWZ0Oi0xcHh9LnRvb2x0aXB7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDMwO2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo1cHg7Zm9udC1zaXplOjExcHg7b3BhY2l0eTowO2ZpbHRlcjphbHBoYShvcGFjaXR5PTApO3Zpc2liaWxpdHk6dmlzaWJsZX0udG9vbHRpcC5pbntvcGFjaXR5Oi44O2ZpbHRlcjphbHBoYShvcGFjaXR5PTgwKX0udG9vbHRpcC50b3B7bWFyZ2luLXRvcDotM3B4fS50b29sdGlwLnJpZ2h0e21hcmdpbi1sZWZ0OjNweH0udG9vbHRpcC5ib3R0b217bWFyZ2luLXRvcDozcHh9LnRvb2x0aXAubGVmdHttYXJnaW4tbGVmdDotM3B4fS50b29sdGlwLWlubmVye21heC13aWR0aDoyMDBweDtwYWRkaW5nOjNweCA4cHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiMwMDA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS50b29sdGlwLWFycm93e3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZH0udG9vbHRpcC50b3AgLnRvb2x0aXAtYXJyb3d7Ym90dG9tOjA7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTVweDtib3JkZXItdG9wLWNvbG9yOiMwMDA7Ym9yZGVyLXdpZHRoOjVweCA1cHggMH0udG9vbHRpcC5yaWdodCAudG9vbHRpcC1hcnJvd3t0b3A6NTAlO2xlZnQ6MDttYXJnaW4tdG9wOi01cHg7Ym9yZGVyLXJpZ2h0LWNvbG9yOiMwMDA7Ym9yZGVyLXdpZHRoOjVweCA1cHggNXB4IDB9LnRvb2x0aXAubGVmdCAudG9vbHRpcC1hcnJvd3t0b3A6NTAlO3JpZ2h0OjA7bWFyZ2luLXRvcDotNXB4O2JvcmRlci1sZWZ0LWNvbG9yOiMwMDA7Ym9yZGVyLXdpZHRoOjVweCAwIDVweCA1cHh9LnRvb2x0aXAuYm90dG9tIC50b29sdGlwLWFycm93e3RvcDowO2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi01cHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDAwO2JvcmRlci13aWR0aDowIDVweCA1cHh9LnBvcG92ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3otaW5kZXg6MTAxMDtkaXNwbGF5Om5vbmU7d2lkdGg6MjM2cHg7cGFkZGluZzoxcHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4yKTstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgNXB4IDEwcHggcmdiYSgwLDAsMCwwLjIpOy1tb3otYm94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTtib3gtc2hhZG93OjAgNXB4IDEwcHggcmdiYSgwLDAsMCwwLjIpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94Oy1tb3otYmFja2dyb3VuZC1jbGlwOnBhZGRpbmc7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94fS5wb3BvdmVyLnRvcHttYXJnaW4tYm90dG9tOjEwcHh9LnBvcG92ZXIucmlnaHR7bWFyZ2luLWxlZnQ6MTBweH0ucG9wb3Zlci5ib3R0b217bWFyZ2luLXRvcDoxMHB4fS5wb3BvdmVyLmxlZnR7bWFyZ2luLXJpZ2h0OjEwcHh9LnBvcG92ZXItdGl0bGV7cGFkZGluZzo4cHggMTRweDttYXJnaW46MDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MThweDtiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y3Zjc7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2ViZWJlYjstd2Via2l0LWJvcmRlci1yYWRpdXM6NXB4IDVweCAwIDA7LW1vei1ib3JkZXItcmFkaXVzOjVweCA1cHggMCAwO2JvcmRlci1yYWRpdXM6NXB4IDVweCAwIDB9LnBvcG92ZXItY29udGVudHtwYWRkaW5nOjlweCAxNHB4fS5wb3BvdmVyLWNvbnRlbnQgcCwucG9wb3Zlci1jb250ZW50IHVsLC5wb3BvdmVyLWNvbnRlbnQgb2x7bWFyZ2luLWJvdHRvbTowfS5wb3BvdmVyIC5hcnJvdywucG9wb3ZlciAuYXJyb3c6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXN0eWxlOnNvbGlkfS5wb3BvdmVyIC5hcnJvdzphZnRlcnt6LWluZGV4Oi0xO2NvbnRlbnQ6IiJ9LnBvcG92ZXIudG9wIC5hcnJvd3tib3R0b206LTEwcHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTEwcHg7Ym9yZGVyLXRvcC1jb2xvcjojZmZmO2JvcmRlci13aWR0aDoxMHB4IDEwcHggMH0ucG9wb3Zlci50b3AgLmFycm93OmFmdGVye2JvdHRvbTotMXB4O2xlZnQ6LTExcHg7Ym9yZGVyLXRvcC1jb2xvcjpyZ2JhKDAsMCwwLDAuMjUpO2JvcmRlci13aWR0aDoxMXB4IDExcHggMH0ucG9wb3Zlci5yaWdodCAuYXJyb3d7dG9wOjUwJTtsZWZ0Oi0xMHB4O21hcmdpbi10b3A6LTEwcHg7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNmZmY7Ym9yZGVyLXdpZHRoOjEwcHggMTBweCAxMHB4IDB9LnBvcG92ZXIucmlnaHQgLmFycm93OmFmdGVye2JvdHRvbTotMTFweDtsZWZ0Oi0xcHg7Ym9yZGVyLXJpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMC4yNSk7Ym9yZGVyLXdpZHRoOjExcHggMTFweCAxMXB4IDB9LnBvcG92ZXIuYm90dG9tIC5hcnJvd3t0b3A6LTEwcHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTEwcHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmZmO2JvcmRlci13aWR0aDowIDEwcHggMTBweH0ucG9wb3Zlci5ib3R0b20gLmFycm93OmFmdGVye3RvcDotMXB4O2xlZnQ6LTExcHg7Ym9yZGVyLWJvdHRvbS1jb2xvcjpyZ2JhKDAsMCwwLDAuMjUpO2JvcmRlci13aWR0aDowIDExcHggMTFweH0ucG9wb3Zlci5sZWZ0IC5hcnJvd3t0b3A6NTAlO3JpZ2h0Oi0xMHB4O21hcmdpbi10b3A6LTEwcHg7Ym9yZGVyLWxlZnQtY29sb3I6I2ZmZjtib3JkZXItd2lkdGg6MTBweCAwIDEwcHggMTBweH0ucG9wb3Zlci5sZWZ0IC5hcnJvdzphZnRlcntyaWdodDotMXB4O2JvdHRvbTotMTFweDtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDAsMCwwLDAuMjUpO2JvcmRlci13aWR0aDoxMXB4IDAgMTFweCAxMXB4fS50aHVtYm5haWxze21hcmdpbi1sZWZ0Oi0yMHB4O2xpc3Qtc3R5bGU6bm9uZTsqem9vbToxfS50aHVtYm5haWxzOmJlZm9yZSwudGh1bWJuYWlsczphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0udGh1bWJuYWlsczphZnRlcntjbGVhcjpib3RofS5yb3ctZmx1aWQgLnRodW1ibmFpbHN7bWFyZ2luLWxlZnQ6MH0udGh1bWJuYWlscz5saXtmbG9hdDpsZWZ0O21hcmdpbi1ib3R0b206MjBweDttYXJnaW4tbGVmdDoyMHB4fS50aHVtYm5haWx7ZGlzcGxheTpibG9jaztwYWRkaW5nOjRweDtsaW5lLWhlaWdodDoyMHB4O2JvcmRlcjoxcHggc29saWQgI2RkZDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMDU1KTstbW96LWJveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4wNTUpO2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4wNTUpOy13ZWJraXQtdHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0Oy1tb3otdHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0Oy1vLXRyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXR9YS50aHVtYm5haWw6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMwOGM7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDRweCByZ2JhKDAsMTA1LDIxNCwwLjI1KTstbW96LWJveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwxMDUsMjE0LDAuMjUpO2JveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwxMDUsMjE0LDAuMjUpfS50aHVtYm5haWw+aW1ne2Rpc3BsYXk6YmxvY2s7bWF4LXdpZHRoOjEwMCU7bWFyZ2luLXJpZ2h0OmF1dG87bWFyZ2luLWxlZnQ6YXV0b30udGh1bWJuYWlsIC5jYXB0aW9ue3BhZGRpbmc6OXB4O2NvbG9yOiM1NTV9LmxhYmVsLC5iYWRnZXtmb250LXNpemU6MTEuODQ0cHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDoxNHB4O2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTt3aGl0ZS1zcGFjZTpub3dyYXA7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7YmFja2dyb3VuZC1jb2xvcjojOTk5fS5sYWJlbHtwYWRkaW5nOjFweCA0cHggMnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweH0uYmFkZ2V7cGFkZGluZzoxcHggOXB4IDJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6OXB4Oy1tb3otYm9yZGVyLXJhZGl1czo5cHg7Ym9yZGVyLXJhZGl1czo5cHh9YS5sYWJlbDpob3ZlcixhLmJhZGdlOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOnBvaW50ZXJ9LmxhYmVsLWltcG9ydGFudCwuYmFkZ2UtaW1wb3J0YW50e2JhY2tncm91bmQtY29sb3I6I2I5NGE0OH0ubGFiZWwtaW1wb3J0YW50W2hyZWZdLC5iYWRnZS1pbXBvcnRhbnRbaHJlZl17YmFja2dyb3VuZC1jb2xvcjojOTUzYjM5fS5sYWJlbC13YXJuaW5nLC5iYWRnZS13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2Y4OTQwNn0ubGFiZWwtd2FybmluZ1tocmVmXSwuYmFkZ2Utd2FybmluZ1tocmVmXXtiYWNrZ3JvdW5kLWNvbG9yOiNjNjc2MDV9LmxhYmVsLXN1Y2Nlc3MsLmJhZGdlLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojNDY4ODQ3fS5sYWJlbC1zdWNjZXNzW2hyZWZdLC5iYWRnZS1zdWNjZXNzW2hyZWZde2JhY2tncm91bmQtY29sb3I6IzM1NjYzNX0ubGFiZWwtaW5mbywuYmFkZ2UtaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiMzYTg3YWR9LmxhYmVsLWluZm9baHJlZl0sLmJhZGdlLWluZm9baHJlZl17YmFja2dyb3VuZC1jb2xvcjojMmQ2OTg3fS5sYWJlbC1pbnZlcnNlLC5iYWRnZS1pbnZlcnNle2JhY2tncm91bmQtY29sb3I6IzMzM30ubGFiZWwtaW52ZXJzZVtocmVmXSwuYmFkZ2UtaW52ZXJzZVtocmVmXXtiYWNrZ3JvdW5kLWNvbG9yOiMxYTFhMWF9LmJ0biAubGFiZWwsLmJ0biAuYmFkZ2V7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0xcHh9LmJ0bi1taW5pIC5sYWJlbCwuYnRuLW1pbmkgLmJhZGdle3RvcDowfUAtd2Via2l0LWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlc3tmcm9te2JhY2tncm91bmQtcG9zaXRpb246NDBweCAwfXRve2JhY2tncm91bmQtcG9zaXRpb246MCAwfX1ALW1vei1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXN7ZnJvbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjQwcHggMH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH19QC1tcy1rZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXN7ZnJvbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjQwcHggMH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH19QC1vLWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlc3tmcm9te2JhY2tncm91bmQtcG9zaXRpb246MCAwfXRve2JhY2tncm91bmQtcG9zaXRpb246NDBweCAwfX1Aa2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVze2Zyb217YmFja2dyb3VuZC1wb3NpdGlvbjo0MHB4IDB9dG97YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9fS5wcm9ncmVzc3toZWlnaHQ6MjBweDttYXJnaW4tYm90dG9tOjIwcHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6I2Y3ZjdmNztiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZjVmNWY1LCNmOWY5ZjkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmNWY1ZjUpLHRvKCNmOWY5ZjkpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZjVmNWY1LCNmOWY5ZjkpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZjVmNWY1LCNmOWY5ZjkpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZjVmNWY1LCNmOWY5ZjkpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweDtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmY1ZjVmNScsZW5kQ29sb3JzdHI9JyNmZmY5ZjlmOScsR3JhZGllbnRUeXBlPTApOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjEpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjEpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4xKX0ucHJvZ3Jlc3MgLmJhcntmbG9hdDpsZWZ0O3dpZHRoOjA7aGVpZ2h0OjEwMCU7Zm9udC1zaXplOjEycHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzBlOTBkMjtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMTQ5YmRmLCMwNDgwYmUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMxNDliZGYpLHRvKCMwNDgwYmUpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMTQ5YmRmLCMwNDgwYmUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMTQ5YmRmLCMwNDgwYmUpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMTQ5YmRmLCMwNDgwYmUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6ZHhpbWFnZXRyYW5zZm9ybS5taWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmMTQ5YmRmJyxlbmRDb2xvcnN0cj0nI2ZmMDQ4MGJlJyxHcmFkaWVudFR5cGU9MCk7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsMC4xNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsMC4xNSk7Ym94LXNoYWRvdzppbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LXRyYW5zaXRpb246d2lkdGggLjZzIGVhc2U7LW1vei10cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlOy1vLXRyYW5zaXRpb246d2lkdGggLjZzIGVhc2U7dHJhbnNpdGlvbjp3aWR0aCAuNnMgZWFzZX0ucHJvZ3Jlc3MgLmJhcisuYmFyey13ZWJraXQtYm94LXNoYWRvdzppbnNldCAxcHggMCAwIHJnYmEoMCwwLDAsMC4xNSksaW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwwLjE1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDAsMCwwLDAuMTUpLGluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsMC4xNSk7Ym94LXNoYWRvdzppbnNldCAxcHggMCAwIHJnYmEoMCwwLDAsMC4xNSksaW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwwLjE1KX0ucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFye2JhY2tncm91bmQtY29sb3I6IzE0OWJkZjtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMTAwJSwxMDAlIDAsY29sb3Itc3RvcCgwLjI1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC4yNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUsdHJhbnNwYXJlbnQpLHRvKHRyYW5zcGFyZW50KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTstd2Via2l0LWJhY2tncm91bmQtc2l6ZTo0MHB4IDQwcHg7LW1vei1iYWNrZ3JvdW5kLXNpemU6NDBweCA0MHB4Oy1vLWJhY2tncm91bmQtc2l6ZTo0MHB4IDQwcHg7YmFja2dyb3VuZC1zaXplOjQwcHggNDBweH0ucHJvZ3Jlc3MuYWN0aXZlIC5iYXJ7LXdlYmtpdC1hbmltYXRpb246cHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlOy1tb3otYW5pbWF0aW9uOnByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTstbXMtYW5pbWF0aW9uOnByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZTstby1hbmltYXRpb246cHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlO2FuaW1hdGlvbjpwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGV9LnByb2dyZXNzLWRhbmdlciAuYmFyLC5wcm9ncmVzcyAuYmFyLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNkZDUxNGM7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYzQzYzM1KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZWU1ZjViKSx0bygjYzQzYzM1KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYzQzYzM1KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYzQzYzM1KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2VlNWY1YiwjYzQzYzM1KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmVlNWY1YicsZW5kQ29sb3JzdHI9JyNmZmM0M2MzNScsR3JhZGllbnRUeXBlPTApfS5wcm9ncmVzcy1kYW5nZXIucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLC5wcm9ncmVzcy1zdHJpcGVkIC5iYXItZGFuZ2Vye2JhY2tncm91bmQtY29sb3I6I2VlNWY1YjtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMTAwJSwxMDAlIDAsY29sb3Itc3RvcCgwLjI1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC4yNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUsdHJhbnNwYXJlbnQpLHRvKHRyYW5zcGFyZW50KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KX0ucHJvZ3Jlc3Mtc3VjY2VzcyAuYmFyLC5wcm9ncmVzcyAuYmFyLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojNWViOTVlO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCM2MmM0NjIsIzU3YTk1Nyk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzYyYzQ2MiksdG8oIzU3YTk1NykpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCM2MmM0NjIsIzU3YTk1Nyk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCM2MmM0NjIsIzU3YTk1Nyk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCM2MmM0NjIsIzU3YTk1Nyk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpkeGltYWdldHJhbnNmb3JtLm1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY2MmM0NjInLGVuZENvbG9yc3RyPScjZmY1N2E5NTcnLEdyYWRpZW50VHlwZT0wKX0ucHJvZ3Jlc3Mtc3VjY2Vzcy5wcm9ncmVzcy1zdHJpcGVkIC5iYXIsLnByb2dyZXNzLXN0cmlwZWQgLmJhci1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6IzYyYzQ2MjtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMTAwJSwxMDAlIDAsY29sb3Itc3RvcCgwLjI1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC4yNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUsdHJhbnNwYXJlbnQpLHRvKHRyYW5zcGFyZW50KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KX0ucHJvZ3Jlc3MtaW5mbyAuYmFyLC5wcm9ncmVzcyAuYmFyLWluZm97YmFja2dyb3VuZC1jb2xvcjojNGJiMWNmO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzMzOWJiOSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzViYzBkZSksdG8oIzMzOWJiOSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzMzOWJiOSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzMzOWJiOSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCM1YmMwZGUsIzMzOWJiOSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpkeGltYWdldHJhbnNmb3JtLm1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY1YmMwZGUnLGVuZENvbG9yc3RyPScjZmYzMzliYjknLEdyYWRpZW50VHlwZT0wKX0ucHJvZ3Jlc3MtaW5mby5wcm9ncmVzcy1zdHJpcGVkIC5iYXIsLnByb2dyZXNzLXN0cmlwZWQgLmJhci1pbmZve2JhY2tncm91bmQtY29sb3I6IzViYzBkZTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMTAwJSwxMDAlIDAsY29sb3Itc3RvcCgwLjI1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC4yNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUsdHJhbnNwYXJlbnQpLHRvKHRyYW5zcGFyZW50KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KX0ucHJvZ3Jlc3Mtd2FybmluZyAuYmFyLC5wcm9ncmVzcyAuYmFyLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojZmFhNzMyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2ZiYjQ1MCksdG8oI2Y4OTQwNikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmYmI0NTAsI2Y4OTQwNik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpkeGltYWdldHJhbnNmb3JtLm1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmYmI0NTAnLGVuZENvbG9yc3RyPScjZmZmODk0MDYnLEdyYWRpZW50VHlwZT0wKX0ucHJvZ3Jlc3Mtd2FybmluZy5wcm9ncmVzcy1zdHJpcGVkIC5iYXIsLnByb2dyZXNzLXN0cmlwZWQgLmJhci13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2ZiYjQ1MDtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMTAwJSwxMDAlIDAsY29sb3Itc3RvcCgwLjI1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC4yNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUsdHJhbnNwYXJlbnQpLGNvbG9yLXN0b3AoMC41LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpKSxjb2xvci1zdG9wKDAuNzUsdHJhbnNwYXJlbnQpLHRvKHRyYW5zcGFyZW50KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KX0uYWNjb3JkaW9ue21hcmdpbi1ib3R0b206MjBweH0uYWNjb3JkaW9uLWdyb3Vwe21hcmdpbi1ib3R0b206MnB4O2JvcmRlcjoxcHggc29saWQgI2U1ZTVlNTstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LmFjY29yZGlvbi1oZWFkaW5ne2JvcmRlci1ib3R0b206MH0uYWNjb3JkaW9uLWhlYWRpbmcgLmFjY29yZGlvbi10b2dnbGV7ZGlzcGxheTpibG9jaztwYWRkaW5nOjhweCAxNXB4fS5hY2NvcmRpb24tdG9nZ2xle2N1cnNvcjpwb2ludGVyfS5hY2NvcmRpb24taW5uZXJ7cGFkZGluZzo5cHggMTVweDtib3JkZXItdG9wOjFweCBzb2xpZCAjZTVlNWU1fS5jYXJvdXNlbHtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tYm90dG9tOjIwcHg7bGluZS1oZWlnaHQ6MX0uY2Fyb3VzZWwtaW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW59LmNhcm91c2VsIC5pdGVte3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6bm9uZTstd2Via2l0LXRyYW5zaXRpb246LjZzIGVhc2UtaW4tb3V0IGxlZnQ7LW1vei10cmFuc2l0aW9uOi42cyBlYXNlLWluLW91dCBsZWZ0Oy1vLXRyYW5zaXRpb246LjZzIGVhc2UtaW4tb3V0IGxlZnQ7dHJhbnNpdGlvbjouNnMgZWFzZS1pbi1vdXQgbGVmdH0uY2Fyb3VzZWwgLml0ZW0+aW1ne2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6MX0uY2Fyb3VzZWwgLmFjdGl2ZSwuY2Fyb3VzZWwgLm5leHQsLmNhcm91c2VsIC5wcmV2e2Rpc3BsYXk6YmxvY2t9LmNhcm91c2VsIC5hY3RpdmV7bGVmdDowfS5jYXJvdXNlbCAubmV4dCwuY2Fyb3VzZWwgLnByZXZ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJX0uY2Fyb3VzZWwgLm5leHR7bGVmdDoxMDAlfS5jYXJvdXNlbCAucHJldntsZWZ0Oi0xMDAlfS5jYXJvdXNlbCAubmV4dC5sZWZ0LC5jYXJvdXNlbCAucHJldi5yaWdodHtsZWZ0OjB9LmNhcm91c2VsIC5hY3RpdmUubGVmdHtsZWZ0Oi0xMDAlfS5jYXJvdXNlbCAuYWN0aXZlLnJpZ2h0e2xlZnQ6MTAwJX0uY2Fyb3VzZWwtY29udHJvbHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NDAlO2xlZnQ6MTVweDt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O21hcmdpbi10b3A6LTIwcHg7Zm9udC1zaXplOjYwcHg7Zm9udC13ZWlnaHQ6MTAwO2xpbmUtaGVpZ2h0OjMwcHg7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiMyMjI7Ym9yZGVyOjNweCBzb2xpZCAjZmZmOy13ZWJraXQtYm9yZGVyLXJhZGl1czoyM3B4Oy1tb3otYm9yZGVyLXJhZGl1czoyM3B4O2JvcmRlci1yYWRpdXM6MjNweDtvcGFjaXR5Oi41O2ZpbHRlcjphbHBoYShvcGFjaXR5PTUwKX0uY2Fyb3VzZWwtY29udHJvbC5yaWdodHtyaWdodDoxNXB4O2xlZnQ6YXV0b30uY2Fyb3VzZWwtY29udHJvbDpob3Zlcntjb2xvcjojZmZmO3RleHQtZGVjb3JhdGlvbjpub25lO29wYWNpdHk6Ljk7ZmlsdGVyOmFscGhhKG9wYWNpdHk9OTApfS5jYXJvdXNlbC1jYXB0aW9ue3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO3BhZGRpbmc6MTVweDtiYWNrZ3JvdW5kOiMzMzM7YmFja2dyb3VuZDpyZ2JhKDAsMCwwLDAuNzUpfS5jYXJvdXNlbC1jYXB0aW9uIGg0LC5jYXJvdXNlbC1jYXB0aW9uIHB7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojZmZmfS5jYXJvdXNlbC1jYXB0aW9uIGg0e21hcmdpbjowIDAgNXB4fS5jYXJvdXNlbC1jYXB0aW9uIHB7bWFyZ2luLWJvdHRvbTowfS5oZXJvLXVuaXR7cGFkZGluZzo2MHB4O21hcmdpbi1ib3R0b206MzBweDtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4O2JvcmRlci1yYWRpdXM6NnB4fS5oZXJvLXVuaXQgaDF7bWFyZ2luLWJvdHRvbTowO2ZvbnQtc2l6ZTo2MHB4O2xpbmUtaGVpZ2h0OjE7bGV0dGVyLXNwYWNpbmc6LTFweDtjb2xvcjppbmhlcml0fS5oZXJvLXVuaXQgcHtmb250LXNpemU6MThweDtmb250LXdlaWdodDoyMDA7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjppbmhlcml0fS5wdWxsLXJpZ2h0e2Zsb2F0OnJpZ2h0fS5wdWxsLWxlZnR7ZmxvYXQ6bGVmdH0uaGlkZXtkaXNwbGF5Om5vbmV9LnNob3d7ZGlzcGxheTpibG9ja30uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5hZmZpeHtwb3NpdGlvbjpmaXhlZH0uY2xlYXJ7Y2xlYXI6Ym90aDt2aXNpYmlsaXR5OmhpZGRlbn0uY2xlYXIgaHJ7ZGlzcGxheTpub25lfS5zZWN0aW9uIHAsLnNlY3Rpb24gcCwuc2VjdGlvbiBkdCwuc2VjdGlvbiBkdHttYXJnaW4tcmlnaHQ6N3B4O21hcmdpbi1sZWZ0OjdweH0jb2hsb2h7bWFyZ2luLWJvdHRvbToxMHB4fSNwb3dlcmVkQnl7dGV4dC1hbGlnbjpjZW50ZXJ9YS5leHRlcm5hbExpbmt7YmFja2dyb3VuZDp1cmwoJy4uL2ltYWdlcy9leHRlcm5hbC5wbmcnKSByaWdodCBjZW50ZXIgbm8tcmVwZWF0O3BhZGRpbmctcmlnaHQ6MThweH1hLm5ld1dpbmRvd3tiYWNrZ3JvdW5kOnVybCgnLi4vaW1hZ2VzL3dpbmRvdy1uZXcucG5nJykgcmlnaHQgY2VudGVyIG5vLXJlcGVhdDtwYWRkaW5nLXJpZ2h0OjE4cHh9YS5leHRlcm5hbExpbmtbaHJlZl49aHR0cF17YmFja2dyb3VuZDp1cmwoJy4uL2ltYWdlcy9pbnRlcm5ldC13ZWItYnJvd3Nlci5wbmcnKSByaWdodCBjZW50ZXIgbm8tcmVwZWF0O3BhZGRpbmctcmlnaHQ6MThweH1hLmV4dGVybmFsTGlua1tocmVmJD0iLmFzYyJde2JhY2tncm91bmQ6dXJsKCcuLi9pbWFnZXMvYWNjZXNzb3JpZXMtdGV4dC1lZGl0b3IucG5nJykgcmlnaHQgY2VudGVyIG5vLXJlcGVhdDtwYWRkaW5nLXJpZ2h0OjE4cHh9YS5leHRlcm5hbExpbmtbaHJlZiQ9Ii5qcGciXSxhLmV4dGVybmFsTGlua1tocmVmJD0iLmpwZWciXSxhLmV4dGVybmFsTGlua1tocmVmJD0iLmdpZiJdLGEuZXh0ZXJuYWxMaW5rW2hyZWYkPSIucG5nIl17YmFja2dyb3VuZDp1cmwoJy4uL2ltYWdlcy9pbWFnZS14LWdlbmVyaWMucG5nJykgcmlnaHQgY2VudGVyIG5vLXJlcGVhdDtwYWRkaW5nLXJpZ2h0OjE4cHh9YS5leHRlcm5hbExpbmtbaHJlZiQ9Ii50YXIuZ3oiXSxhLmV4dGVybmFsTGlua1tocmVmJD0iLnppcCJde2JhY2tncm91bmQ6dXJsKCcuLi9pbWFnZXMvcGFja2FnZS14LWdlbmVyaWMucG5nJykgcmlnaHQgY2VudGVyIG5vLXJlcGVhdDtwYWRkaW5nLXJpZ2h0OjE4cHh9YS5leHRlcm5hbExpbmtbaHJlZiQ9Ii5tZDUiXSxhLmV4dGVybmFsTGlua1tocmVmJD0iLnNoYTEiXXtiYWNrZ3JvdW5kOnVybCgnLi4vaW1hZ2VzL2RvY3VtZW50LXByb3BlcnRpZXMucG5nJykgcmlnaHQgY2VudGVyIG5vLXJlcGVhdDtwYWRkaW5nLXJpZ2h0OjE4cHh9YS5leHRlcm5hbExpbmtbaHJlZl49aHR0cHNde2JhY2tncm91bmQ6dXJsKCcuLi9pbWFnZXMvYXBwbGljYXRpb24tY2VydGlmaWNhdGUucG5nJykgcmlnaHQgY2VudGVyIG5vLXJlcGVhdDtwYWRkaW5nLXJpZ2h0OjE4cHh9YS5leHRlcm5hbExpbmtbaHJlZl49ZmlsZV17YmFja2dyb3VuZDp1cmwoJy4uL2ltYWdlcy9kcml2ZS1oYXJkZGlzay5wbmcnKSByaWdodCBjZW50ZXIgbm8tcmVwZWF0O3BhZGRpbmctcmlnaHQ6MThweH1hLmV4dGVybmFsTGlua1tocmVmXj1mdHBde2JhY2tncm91bmQ6dXJsKCcuLi9pbWFnZXMvbmV0d29yay1zZXJ2ZXIucG5nJykgcmlnaHQgY2VudGVyIG5vLXJlcGVhdDtwYWRkaW5nLXJpZ2h0OjE4cHh9YS5leHRlcm5hbExpbmtbaHJlZl49bWFpbHRvXXtiYWNrZ3JvdW5kOnVybCgnLi4vaW1hZ2VzL2NvbnRhY3QtbmV3LnBuZycpIHJpZ2h0IGNlbnRlciBuby1yZXBlYXQ7cGFkZGluZy1yaWdodDoxOHB4fWxpLm5vbmV7bGlzdC1zdHlsZTpub25lfS5zZWFyY2gtcXVlcnl7YmFja2dyb3VuZC1pbWFnZTp1cmwoaHR0cDovL3d3dy5nb29nbGUuY29tL2NzZS9pbnRsL2VuL2ltYWdlcy9nb29nbGVfY3VzdG9tX3NlYXJjaF93YXRlcm1hcmsuZ2lmKTtiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6aW5pdGlhbDtiYWNrZ3JvdW5kLW9yaWdpbjppbml0aWFsO2JhY2tncm91bmQtY2xpcDppbml0aWFsO2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgNTAlO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdCBuby1yZXBlYXQ7d2lkdGg6OTUlfWJvZHkudG9wQmFyRW5hYmxlZHtwYWRkaW5nLXRvcDo2MHB4fWJvZHkudG9wQmFyRGlzYWJsZWR7cGFkZGluZy10b3A6MjBweH0uYnVpbHRCeXtkaXNwbGF5OmJsb2NrfWltZy5idWlsdEJ5e21hcmdpbjoxMHB4IGF1dG99I3NlYXJjaC1mb3Jte21hcmdpbi1sZWZ0OjlweDttYXJnaW4tcmlnaHQ6OXB4fS5oZXJvLXVuaXQgaDJ7Zm9udC1zaXplOjYwcHh9dHR7cGFkZGluZzowIDNweCAycHg7Zm9udC1mYW1pbHk6TW9uYWNvLEFuZGFsZSBNb25vLENvdXJpZXIgTmV3LG1vbm9zcGFjZTtmb250LXNpemU6MTJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZC1jb2xvcjojZmVlOWNjO2NvbG9yOnJnYmEoMCwwLDAsMC43NSk7cGFkZGluZzoxcHggM3B4fWxpe2NvbG9yOiM0MDQwNDB9dGFibGUuemVicmEtc3RyaXBlZHtiYWNrZ3JvdW5kLWNvbG9yOiNGRkZ9LmZvb3RlcntiYWNrZ3JvdW5kLWNvbG9yOiNFRUV9LnNpZGViYXItbmF2e3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MH0uc2lkZWJhci1uYXYgLmljb24tY2hldnJvbi1yaWdodCwuc2lkZWJhci1uYXYgLmljb24tY2hldnJvbi1kb3due21hcmdpbi10b3A6MnB4O21hcmdpbi1yaWdodDotNnB4O2Zsb2F0OnJpZ2h0O29wYWNpdHk6LjI1fS5wbG57Y29sb3I6IzAwMH1AbWVkaWEgc2NyZWVuey5zdHJ7Y29sb3I6IzA4MH0ua3dke2NvbG9yOiMwMDh9LmNvbXtjb2xvcjojODAwfS50eXB7Y29sb3I6IzYwNn0ubGl0e2NvbG9yOiMwNjZ9LnB1biwub3BuLC5jbG97Y29sb3I6IzY2MH0udGFne2NvbG9yOiMwMDh9LmF0bntjb2xvcjojNjA2fS5hdHZ7Y29sb3I6IzA4MH0uZGVjLC52YXJ7Y29sb3I6IzYwNn0uZnVue2NvbG9yOnJlZH19QG1lZGlhIHByaW50LHByb2plY3Rpb257LnN0cntjb2xvcjojMDYwfS5rd2R7Y29sb3I6IzAwNjtmb250LXdlaWdodDpib2xkfS5jb217Y29sb3I6IzYwMDtmb250LXN0eWxlOml0YWxpY30udHlwe2NvbG9yOiM0MDQ7Zm9udC13ZWlnaHQ6Ym9sZH0ubGl0e2NvbG9yOiMwNDR9LnB1biwub3BuLC5jbG97Y29sb3I6IzQ0MH0udGFne2NvbG9yOiMwMDY7Zm9udC13ZWlnaHQ6Ym9sZH0uYXRue2NvbG9yOiM0MDR9LmF0dntjb2xvcjojMDYwfX1wcmUucHJldHR5cHJpbnR7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjODg4fW9sLmxpbmVudW1ze21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7cGFkZGluZy1sZWZ0OjE1cHh9bGkuTDEsbGkuTDMsbGkuTDUsbGkuTDcsbGkuTDl7YmFja2dyb3VuZDojZWVlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvY3NzL3ByaW50LmNzcyBiLzAuNS4wLWluY3ViYXRpbmcvY3NzL3ByaW50LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2QwMmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9jc3MvcHJpbnQuY3NzCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qICRJZDogcHJpbnQuY3NzIDEyMDE4NzEgMjAxMS0xMS0xNCAyMDoxODoyNFogc2ltb25ldHJpcG9kaSAkICovCisKKyNiYW5uZXIsICNmb290ZXIsICNsZWZ0Y29sLCAjYnJlYWRjcnVtYnMsIC5kb2NzICN0b2MsIC5kb2NzIC5jb3VydGVzeWxpbmtzLCAjbGVmdENvbHVtbiwgI25hdkNvbHVtbiB7ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O30KKyNib2R5Q29sdW1uLCBib2R5LmRvY3MgZGl2LmRvY3Mge21hcmdpbjogMCAhaW1wb3J0YW50O2JvcmRlcjogbm9uZSAhaW1wb3J0YW50fQpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9jc3Mvc2l0ZS5jc3MgYi8wLjUuMC1pbmN1YmF0aW5nL2Nzcy9zaXRlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTVlN2UyCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9jc3Mvc2l0ZS5jc3MKQEAgLTAsMCArMSBAQAorLyogWW91IGNhbiBvdmVycmlkZSB0aGlzIGZpbGUgd2l0aCB5b3VyIG93biBzdHlsZXMgKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2RhdGEtdHlwZXMucG5nIGIvMC41LjAtaW5jdWJhdGluZy9kYXRhLXR5cGVzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWExOTA0Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9kYXRhLXR5cGVzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2d1aWRlLWNsYXNzLWRpYWdyYW0ucG5nIGIvMC41LjAtaW5jdWJhdGluZy9ndWlkZS1jbGFzcy1kaWFncmFtLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTUxMjM5Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9ndWlkZS1jbGFzcy1kaWFncmFtLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2d1aWRlLWluc3RhbmNlLWdyYXBoLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvZ3VpZGUtaW5zdGFuY2UtZ3JhcGgucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYzhmODIKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2d1aWRlLWluc3RhbmNlLWdyYXBoLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvQnJpZGdlLUhpdmUuaHRtbCBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9CcmlkZ2UtSGl2ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQxOWIzZGQKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvQnJpZGdlLUhpdmUuaHRtbApAQCAtMCwwICsxLDEwNCBAQAorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPgorPCEtLSBHZW5lcmF0ZWQgYnkgQXBhY2hlIE1hdmVuIERveGlhIFNpdGUgUmVuZGVyZXIgMS4zIGF0IEp1bCA5LCAyMDE1IC0tPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgorICA8aGVhZD4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KKyAgICA8dGl0bGU+QXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIC0gSGl2ZSBBdGxhcyBCcmlkZ2U8L3RpdGxlPgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9ImFsbCI+CisgICAgICBAaW1wb3J0IHVybCgiLi9jc3MvbWF2ZW4tYmFzZS5jc3MiKTsKKyAgICAgIEBpbXBvcnQgdXJsKCIuL2Nzcy9tYXZlbi10aGVtZS5jc3MiKTsKKyAgICAgIEBpbXBvcnQgdXJsKCIuL2Nzcy9zaXRlLmNzcyIpOworICAgIDwvc3R5bGU+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9wcmludC5jc3MiIHR5cGU9InRleHQvY3NzIiBtZWRpYT0icHJpbnQiIC8+CisgICAgPG1ldGEgbmFtZT0iRGF0ZS1SZXZpc2lvbi15eXl5bW1kZCIgY29udGVudD0iMjAxNTA3MDkiIC8+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4iIC8+CisgICAgICAgIAorICAgICAgICA8L2hlYWQ+CisgIDxib2R5IGNsYXNzPSJjb21wb3NpdGUiPgorICAgIDxkaXYgaWQ9ImJhbm5lciI+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImJhbm5lckxlZnQiPgorICAgICAgICAgICAgICAgIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZQorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjbGVhciI+CisgICAgICAgIDxoci8+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlkPSJicmVhZGNydW1icyI+CisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InhsZWZ0Ij4KKyAgICAgICAgPHNwYW4gaWQ9InB1Ymxpc2hEYXRlIj5MYXN0IFB1Ymxpc2hlZDogMjAxNS0wNy0wOTwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICZuYnNwO3wgPHNwYW4gaWQ9InByb2plY3RWZXJzaW9uIj5WZXJzaW9uOiAwLjUtaW5jdWJhdGluZzwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InhyaWdodCI+ICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLyIgdGl0bGU9IkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSI+QXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlPC9hPgorICAgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJjbGVhciI+CisgICAgICAgIDxoci8+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlkPSJsZWZ0Q29sdW1uIj4KKyAgICAgIDxkaXYgaWQ9Im5hdmNvbHVtbiI+CisgICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1PlBhcmVudCBQcm9qZWN0PC9oNT4KKyAgICAgICAgICAgICAgICAgIDx1bD4KKyAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibm9uZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uLy4uL2luZGV4Lmh0bWwiIHRpdGxlPSJhcGFjaGUtYXRsYXMiPmFwYWNoZS1hdGxhczwvYT4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvIiB0aXRsZT0iQnVpbHQgYnkgTWF2ZW4iIGNsYXNzPSJwb3dlcmVkQnkiPgorICAgICAgICA8aW1nIGNsYXNzPSJwb3dlcmVkQnkiIGFsdD0iQnVpbHQgYnkgTWF2ZW4iIHNyYz0iLi9pbWFnZXMvbG9nb3MvbWF2ZW4tZmVhdGhlci5wbmciIC8+CisgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9ImJvZHlDb2x1bW4iPgorICAgICAgPGRpdiBpZD0iY29udGVudEJveCI+CisgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPjxoMj5IaXZlIEF0bGFzIEJyaWRnZTxhIG5hbWU9IkhpdmVfQXRsYXNfQnJpZGdlIj48L2E+PC9oMj48cD5IaXZlIG1ldGFkYXRhIGNhbiBiZSBtb2RlbGxlZCBpbiBBdGxhcyB1c2luZyBpdHMgVHlwZSBTeXN0ZW0uIFRoZSBkZWZhdWx0IG1vZGVsbGluZyBpcyBhdmFpbGFibGUgaW4gb3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IuIEl0IGRlZmluZXMgdGhlIGZvbGxvd2luZyB0eXBlczo8L3A+PHVsPjxsaT5oaXZlX3Jlc291cmNlX3R5cGUoRW51bVR5cGUpIC0gW0pBUiwgRklMRSwgQVJDSElWRV08L2xpPjxsaT5oaXZlX3ByaW5jaXBhbF90eXBlKEVudW1UeXBlKSAtIFtVU0VSLCBST0xFLCBHUk9VUF08L2xpPjxsaT5oaXZlX2Z1bmN0aW9uX3R5cGUoRW51bVR5cGUpIC0gW0pBVkFdPC9saT48bGk+aGl2ZV9vcmRlcihTdHJ1Y3RUeXBlKSAtIFtjb2wsIG9yZGVyXTwvbGk+PGxpPmhpdmVfcmVzb3VyY2V1cmkoU3RydWN0VHlwZSkgLSBbcmVzb3VyY2VUeXBlLCB1cmldPC9saT48bGk+aGl2ZV9zZXJkZShTdHJ1Y3RUeXBlKSAtIFtuYW1lLCBzZXJpYWxpemF0aW9uTGliLCBwYXJhbWV0ZXJzXTwvbGk+PGxpPmhpdmVfcHJvY2VzcyhDbGFzc1R5cGUpIC0gW25hbWUsIHN0YXJ0VGltZSwgZW5kVGltZSwgdXNlck5hbWUsIHNvdXJjZVRhYmxlTmFtZXMsIHRhcmdldFRhYmxlTmFtZXMsIHF1ZXJ5VGV4dCwgcXVlcnlQbGFuLCBxdWVyeUlkLCBxdWVyeUdyYXBoXTwvbGk+PGxpPmhpdmVfZnVuY3Rpb24oQ2xhc3NUeXBlKSAtIFtmdW5jdGlvbk5hbWUsIGRiTmFtZSwgY2xhc3NOYW1lLCBvd25lck5hbWUsIG93bmVyVHlwZSwgY3JlYXRlVGltZSwgZnVuY3Rpb25UeXBlLCByZXNvdXJjZVVyaXNdPC9saT48bGk+aGl2ZV90eXBlKENsYXNzVHlwZSkgLSBbbmFtZSwgdHlwZTEsIHR5cGUyLCBmaWVsZHNdPC9saT48bGk+aGl2ZV9wYXJ0aXRpb24oQ2xhc3NUeXBlKSAtIFt2YWx1ZXMsIGRiTmFtZSwgdGFibGVOYW1lLCBjcmVhdGVUaW1lLCBsYXN0QWNjZXNzVGltZSwgc2QsIHBhcmFtZXRlcnNdPC9saT48bGk+aGl2ZV9zdG9yYWdlZGVzYyhDbGFzc1R5cGUpIC0gW2NvbHMsIGxvY2F0aW9uLCBpbnB1dEZvcm1hdCwgb3V0cHV0Rm9ybWF0LCBjb21wcmVzc2VkLCBudW1CdWNrZXRzLCBzZXJkZUluZm8sIGJ1Y2tldENvbHMsIHNvcnRDb2xzLCBwYXJhbWV0ZXJzLCBzdG9yZWRBc1N1YkRpcmVjdG9yaWVzXTwvbGk+PGxpPmhpdmVfaW5kZXgoQ2xhc3NUeXBlKSAtIFtpbmRleE5hbWUsIGluZGV4SGFuZGxlckNsYXNzLCBkYk5hbWUsIGNyZWF0ZVRpbWUsIGxhc3RBY2Nlc3NUaW1lLCBvcmlnVGFibGVOYW1lLCBpbmRleFRhYmxlTmFtZSwgc2QsIHBhcmFtZXRlcnMsIGRlZmVycmVkUmVidWlsZF08L2xpPjxsaT5oaXZlX3JvbGUoQ2xhc3NUeXBlKSAtIFtyb2xlTmFtZSwgY3JlYXRlVGltZSwgb3duZXJOYW1lXTwvbGk+PGxpPmhpdmVfY29sdW1uKENsYXNzVHlwZSkgLSBbbmFtZSwgdHlwZSwgY29tbWVudF08L2xpPjxsaT5oaXZlX2RiKENsYXNzVHlwZSkgLSBbbmFtZSwgZGVzY3JpcHRpb24sIGxvY2F0aW9uVXJpLCBwYXJhbWV0ZXJzLCBvd25lck5hbWUsIG93bmVyVHlwZV08L2xpPjxsaT5oaXZlX3RhYmxlKENsYXNzVHlwZSkgLSBbbmFtZSwgZGJOYW1lLCBvd25lciwgY3JlYXRlVGltZSwgbGFzdEFjY2Vzc1RpbWUsIHJldGVudGlvbiwgc2QsIHBhcnRpdGlvbktleXMsIGNvbHVtbnMsIHBhcmFtZXRlcnMsIHZpZXdPcmlnaW5hbFRleHQsIHZpZXdFeHBhbmRlZFRleHQsIHRhYmxlVHlwZSwgdGVtcG9yYXJ5XTwvbGk+PC91bD48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDM+SW1wb3J0aW5nIEhpdmUgTWV0YWRhdGE8YSBuYW1lPSJJbXBvcnRpbmdfSGl2ZV9NZXRhZGF0YSI+PC9hPjwvaDM+PHA+b3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlIGltcG9ydHMgdGhlIGhpdmUgbWV0YWRhdGEgaW50byBBdGxhcyB1c2luZyB0aGUgdHlwZXN5c3RlbSBkZWZpbmVkIGluIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yLiBpbXBvcnQtaGl2ZS5zaCBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIGZhY2lsaXRhdGUgdGhpcy4gU2V0LXVwIHRoZSBmb2xsb3dpbmcgY29uZmlncyBpbiBoaXZlLXNpdGUueG1sIG9mIHlvdXIgaGl2ZSBzZXQtdXAgYW5kIHNldCBlbnZpcm9ubWVudCB2YXJpYWJsZSBISVZFX0NPTkZJRyB0byB0aGUgaGl2ZSBjb25mIGRpcmVjdG9yeTo8L3A+PHVsPjxsaT5BdGxhcyBlbmRwb2ludCAtIEFkZCB0aGUgZm9sbG93aW5nIHByb3BlcnR5IHdpdGggdGhlIEF0bGFzIGVuZHBvaW50IGZvciB5b3VyIHNldC11cDwvbGk+PC91bD48ZGl2IGNsYXNzPSJzb3VyY2UiPjxwcmU+CismbHQ7cHJvcGVydHkmZ3Q7CisgICZsdDtuYW1lJmd0O2hpdmUuaG9vay5kZ2kudXJsJmx0Oy9uYW1lJmd0OworICAmbHQ7dmFsdWUmZ3Q7aHR0cDovL2xvY2FsaG9zdDoyMTAwMC8mbHQ7L3ZhbHVlJmd0OworJmx0Oy9wcm9wZXJ0eSZndDsKKyZsdDtwcm9wZXJ0eSZndDsKKyAgJmx0O25hbWUmZ3Q7aGl2ZS5jbHVzdGVyLm5hbWUmbHQ7L25hbWUmZ3Q7CisgICZsdDt2YWx1ZSZndDtwcmltYXJ5Jmx0Oy92YWx1ZSZndDsKKyZsdDsvcHJvcGVydHkmZ3Q7CisKKzwvcHJlPjwvZGl2PjxwPlVzYWdlOiAmbHQ7ZGdpIHBhY2thZ2UmZ3Q7L2Jpbi9pbXBvcnQtaGl2ZS5zaC4gVGhlIGxvZ3MgYXJlIGluICZsdDtkZ2kgcGFja2FnZSZndDsvbG9ncy9pbXBvcnQtaGl2ZS5sb2c8L3A+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiI+PGgzPkhpdmUgSG9vazxhIG5hbWU9IkhpdmVfSG9vayI+PC9hPjwvaDM+PHA+SGl2ZSBzdXBwb3J0cyBsaXN0ZW5lcnMgb24gaGl2ZSBjb21tYW5kIGV4ZWN1dGlvbiB1c2luZyBoaXZlIGhvb2tzLiBUaGlzIGlzIHVzZWQgdG8gYWRkL3VwZGF0ZS9yZW1vdmUgZW50aXRpZXMgaW4gQXRsYXMgdXNpbmcgdGhlIG1vZGVsIGRlZmluZWQgaW4gb3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IuIFRoZSBob29rIHN1Ym1pdHMgdGhlIHJlcXVlc3QgdG8gYSB0aHJlYWQgcG9vbCBleGVjdXRvciB0byBhdm9pZCBibG9ja2luZyB0aGUgY29tbWFuZCBleGVjdXRpb24uIEZvbGxvdyB0aGUgdGhlc2UgaW5zdHJ1Y3Rpb25zIGluIHlvdXIgaGl2ZSBzZXQtdXAgdG8gYWRkIGhpdmUgaG9vayBmb3IgQXRsYXM6PC9wPjx1bD48bGk+QWRkIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rLkhpdmVIb29rIGFzIHBvc3QgZXhlY3V0aW9uIGhvb2sgaW4gaGl2ZS1zaXRlLnhtbDwvbGk+PC91bD48ZGl2IGNsYXNzPSJzb3VyY2UiPjxwcmU+CismbHQ7cHJvcGVydHkmZ3Q7CisgICZsdDtuYW1lJmd0O2hpdmUuZXhlYy5wb3N0Lmhvb2tzJmx0Oy9uYW1lJmd0OworICAmbHQ7dmFsdWUmZ3Q7b3JnLmFwYWNoZS5hdGxhcy5oaXZlLmhvb2suSGl2ZUhvb2smbHQ7L3ZhbHVlJmd0OworJmx0Oy9wcm9wZXJ0eSZndDsKKworPC9wcmU+PC9kaXY+PHA+PC9wPjx1bD48bGk+QWRkIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBpbiBoaXZlLXN0ZS54bWwgd2l0aCB0aGUgQXRsYXMgZW5kcG9pbnQgZm9yIHlvdXIgc2V0LXVwPC9saT48L3VsPjxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT4KKyZsdDtwcm9wZXJ0eSZndDsKKyAgJmx0O25hbWUmZ3Q7aGl2ZS5ob29rLmRnaS51cmwmbHQ7L25hbWUmZ3Q7CisgICZsdDt2YWx1ZSZndDtodHRwOi8vbG9jYWxob3N0OjIxMDAwLyZsdDsvdmFsdWUmZ3Q7CismbHQ7L3Byb3BlcnR5Jmd0OworJmx0O3Byb3BlcnR5Jmd0OworICAmbHQ7bmFtZSZndDtoaXZlLmNsdXN0ZXIubmFtZSZsdDsvbmFtZSZndDsKKyAgJmx0O3ZhbHVlJmd0O3ByaW1hcnkmbHQ7L3ZhbHVlJmd0OworJmx0Oy9wcm9wZXJ0eSZndDsKKworPC9wcmU+PC9kaXY+PHA+PC9wPjx1bD48bGk+QWRkICdleHBvcnQgSElWRV9BVVhfSkFSU19QQVRIPSZsdDtkZ2kgcGFja2FnZSZndDsvaG9vay9oaXZlJyBpbiBoaXZlLWVudi5zaDwvbGk+PC91bD48cD5UaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgaW4gaGl2ZS1zaXRlLnhtbCBjb250cm9sIHRoZSB0aHJlYWQgcG9vbCBkZXRhaWxzOjwvcD48dWw+PGxpPmhpdmUuaG9vay5kZ2kubWluVGhyZWFkcyAtIGNvcmUgbnVtYmVyIG9mIHRocmVhZHMuIGRlZmF1bHQgNTwvbGk+PGxpPmhpdmUuaG9vay5kZ2kubWF4VGhyZWFkcyAtIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMuIGRlZmF1bHQgNTwvbGk+PGxpPmhpdmUuaG9vay5kZ2kua2VlcEFsaXZlVGltZSAtIGtlZXAgYWxpdmUgdGltZSBpbiBtc2Vjcy4gZGVmYXVsdCAxMDwvbGk+PGxpPmhpdmUuaG9vay5kZ2kuc3luY2hyb25vdXMgLSBib29sZWFuLCB0cnVlIHRvIHJ1biB0aGUgaG9vayBzeW5jaHJvbm91c2x5LiBkZWZhdWx0IGZhbHNlPC9saT48L3VsPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iPjxoMz5MaW1pdGF0aW9uczxhIG5hbWU9IkxpbWl0YXRpb25zIj48L2E+PC9oMz48cD48L3A+PHVsPjxsaT5TaW5jZSBkYXRhYmFzZSBuYW1lLCB0YWJsZSBuYW1lIGFuZCBjb2x1bW4gbmFtZXMgYXJlIGNhc2UgaW5zZW5zaXRpdmUgaW4gaGl2ZSwgdGhlIGNvcnJlc3BvbmRpbmcgbmFtZXMgaW4gZW50aXRpZXMgYXJlIGxvd2VyY2FzZS4gU28sIGFueSBzZWFyY2ggQVBJcyBzaG91bGQgdXNlIGxvd2VyY2FzZSB3aGlsZSBxdWVyeWluZyBvbiB0aGUgZW50aXR5IG5hbWVzPC9saT48bGk+T25seSB0aGUgZm9sbG93aW5nIGhpdmUgb3BlcmF0aW9ucyBhcmUgY2FwdHVyZWQgYnkgaGl2ZSBob29rIGN1cnJlbnRseSAtIGNyZWF0ZSBkYXRhYmFzZSwgY3JlYXRlIHRhYmxlLCBjcmVhdGUgdmlldywgQ1RBUywgbG9hZCwgaW1wb3J0LCBleHBvcnQsIHF1ZXJ5LCBhbHRlciB0YWJsZSByZW5hbWUgYW5kIGFsdGVyIHZpZXcgcmVuYW1lPC9saT48L3VsPjwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0iY2xlYXIiPgorICAgICAgPGhyLz4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlkPSJmb290ZXIiPgorICAgICAgPGRpdiBjbGFzcz0ieHJpZ2h0Ij4KKyAgICAgICAgICAgICAgQ29weXJpZ2h0ICYjMTY5OyAgICAgICAgICAgICAgICAgICAgMjAxNQorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIj5BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbjwvYT4uCisgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIj4KKyAgICAgICAgPGhyLz4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvY3NzL21hdmVuLWJhc2UuY3NzIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL2Nzcy9tYXZlbi1iYXNlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MzE1M2U5Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL2Nzcy9tYXZlbi1iYXNlLmNzcwpAQCAtMCwwICsxLDE1NSBAQAorYm9keSB7CisgIG1hcmdpbjogMHB4OworICBwYWRkaW5nOiAwcHg7Cit9CitpbWcgeworICBib3JkZXI6bm9uZTsKK30KK3RhYmxlIHsKKyAgcGFkZGluZzowcHg7CisgIHdpZHRoOiAxMDAlOworICBtYXJnaW4tbGVmdDogLTJweDsKKyAgbWFyZ2luLXJpZ2h0OiAtMnB4OworfQorYWNyb255bSB7CisgIGN1cnNvcjogaGVscDsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjZmViOworfQordGFibGUuYm9keVRhYmxlIHRoLCB0YWJsZS5ib2R5VGFibGUgdGQgeworICBwYWRkaW5nOiAycHggNHB4IDJweCA0cHg7CisgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit9CitkaXYuY2xlYXJ7CisgIGNsZWFyOmJvdGg7CisgIHZpc2liaWxpdHk6IGhpZGRlbjsKK30KK2Rpdi5jbGVhciBocnsKKyAgZGlzcGxheTogbm9uZTsKK30KKyNiYW5uZXJMZWZ0LCAjYmFubmVyUmlnaHQgeworICBmb250LXNpemU6IHh4LWxhcmdlOworICBmb250LXdlaWdodDogYm9sZDsKK30KKyNiYW5uZXJMZWZ0IGltZywgI2Jhbm5lclJpZ2h0IGltZyB7CisgIG1hcmdpbjogMHB4OworfQorLnhsZWZ0LCAjYmFubmVyTGVmdCBpbWcgeworICBmbG9hdDpsZWZ0OworfQorLnhyaWdodCwgI2Jhbm5lclJpZ2h0IHsKKyAgZmxvYXQ6cmlnaHQ7Cit9CisjYmFubmVyIHsKKyAgcGFkZGluZzogMHB4OworfQorI2Jhbm5lciBpbWcgeworICBib3JkZXI6IG5vbmU7Cit9CisjYnJlYWRjcnVtYnMgeworICBwYWRkaW5nOiAzcHggMTBweCAzcHggMTBweDsKK30KKyNsZWZ0Q29sdW1uIHsKKyB3aWR0aDogMTcwcHg7CisgZmxvYXQ6bGVmdDsKKyBvdmVyZmxvdzogYXV0bzsKK30KKyNib2R5Q29sdW1uIHsKKyAgbWFyZ2luLXJpZ2h0OiAxLjVlbTsKKyAgbWFyZ2luLWxlZnQ6IDE5N3B4OworfQorI2xlZ2VuZCB7CisgIHBhZGRpbmc6IDhweCAwIDhweCAwOworfQorI25hdmNvbHVtbiB7CisgIHBhZGRpbmc6IDhweCA0cHggMCA4cHg7Cit9CisjbmF2Y29sdW1uIGg1IHsKKyAgbWFyZ2luOiAwOworICBwYWRkaW5nOiAwOworICBmb250LXNpemU6IHNtYWxsOworfQorI25hdmNvbHVtbiB1bCB7CisgIG1hcmdpbjogMDsKKyAgcGFkZGluZzogMDsKKyAgZm9udC1zaXplOiBzbWFsbDsKK30KKyNuYXZjb2x1bW4gbGkgeworICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7CisgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CisgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7CisgIGJhY2tncm91bmQtcG9zaXRpb246IDAgMC40ZW07CisgIHBhZGRpbmctbGVmdDogMTZweDsKKyAgbGlzdC1zdHlsZS1wb3NpdGlvbjogb3V0c2lkZTsKKyAgbGluZS1oZWlnaHQ6IDEuMmVtOworICBmb250LXNpemU6IHNtYWxsZXI7Cit9CisjbmF2Y29sdW1uIGxpLmV4cGFuZGVkIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9leHBhbmRlZC5naWYpOworfQorI25hdmNvbHVtbiBsaS5jb2xsYXBzZWQgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2NvbGxhcHNlZC5naWYpOworfQorI25hdmNvbHVtbiBsaS5ub25lIHsKKyAgdGV4dC1pbmRlbnQ6IC0xZW07CisgIG1hcmdpbi1sZWZ0OiAxZW07Cit9CisjcG93ZXJlZEJ5IHsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworfQorI25hdmNvbHVtbiBpbWcgeworICBtYXJnaW4tdG9wOiAxMHB4OworICBtYXJnaW4tYm90dG9tOiAzcHg7Cit9CisjcG93ZXJlZEJ5IGltZyB7CisgIGRpc3BsYXk6YmxvY2s7CisgIG1hcmdpbjogMjBweCAwIDIwcHggMTdweDsKK30KKyNzZWFyY2ggaW1nIHsKKyAgICBtYXJnaW46IDBweDsKKyAgICBkaXNwbGF5OiBibG9jazsKK30KKyNzZWFyY2ggI3EsICNzZWFyY2ggI2J0bkcgeworICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CisgICAgbWFyZ2luLWJvdHRvbToxMHB4OworfQorI3NlYXJjaCBmb3JtIHsKKyAgICBtYXJnaW46IDBweDsKK30KKyNsYXN0UHVibGlzaGVkIHsKKyAgZm9udC1zaXplOiB4LXNtYWxsOworfQorLm5hdlNlY3Rpb24geworICBtYXJnaW4tYm90dG9tOiAycHg7CisgIHBhZGRpbmc6IDhweDsKK30KKy5uYXZTZWN0aW9uSGVhZCB7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBmb250LXNpemU6IHgtc21hbGw7Cit9Cisuc2VjdGlvbiB7CisgIHBhZGRpbmc6IDRweDsKK30KKyNmb290ZXIgeworICBwYWRkaW5nOiAzcHggMTBweCAzcHggMTBweDsKKyAgZm9udC1zaXplOiB4LXNtYWxsOworfQorI2JyZWFkY3J1bWJzIHsKKyAgZm9udC1zaXplOiB4LXNtYWxsOworICBtYXJnaW46IDBwdDsKK30KKy5zb3VyY2UgeworICBwYWRkaW5nOiAxMnB4OworICBtYXJnaW46IDFlbSA3cHggMWVtIDdweDsKK30KKy5zb3VyY2UgcHJlIHsKKyAgbWFyZ2luOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKK30KKyNuYXZjb2x1bW4gaW1nLmltYWdlTGluaywgLmltYWdlTGluayB7CisgIHBhZGRpbmctbGVmdDogMHB4OworICBwYWRkaW5nLWJvdHRvbTogMHB4OworICBwYWRkaW5nLXRvcDogMHB4OworICBwYWRkaW5nLXJpZ2h0OiAycHg7CisgIGJvcmRlcjogMHB4OworICBtYXJnaW46IDBweDsKK30KZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9jc3MvbWF2ZW4tdGhlbWUuY3NzIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL2Nzcy9tYXZlbi10aGVtZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWMyOWM4OQotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9jc3MvbWF2ZW4tdGhlbWUuY3NzCkBAIC0wLDAgKzEsMTQxIEBACitib2R5IHsKKyAgcGFkZGluZzogMHB4IDBweCAxMHB4IDBweDsKK30KK2JvZHksIHRkLCBzZWxlY3QsIGlucHV0LCBsaXsKKyAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CisgIGZvbnQtc2l6ZTogMTNweDsKK30KK2NvZGV7CisgIGZvbnQtZmFtaWx5OiBDb3VyaWVyLCBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogMTNweDsKK30KK2EgeworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CithOmxpbmsgeworICBjb2xvcjojMzZhOworfQorYTp2aXNpdGVkICB7CisgIGNvbG9yOiM0N2E7Cit9CithOmFjdGl2ZSwgYTpob3ZlciB7CisgIGNvbG9yOiM2OWM7Cit9CisjbGVnZW5kIGxpLmV4dGVybmFsTGluayB7CisgIGJhY2tncm91bmQ6IHVybCguLi9pbWFnZXMvZXh0ZXJuYWwucG5nKSBsZWZ0IHRvcCBuby1yZXBlYXQ7CisgIHBhZGRpbmctbGVmdDogMThweDsKK30KK2EuZXh0ZXJuYWxMaW5rLCBhLmV4dGVybmFsTGluazpsaW5rLCBhLmV4dGVybmFsTGluazp2aXNpdGVkLCBhLmV4dGVybmFsTGluazphY3RpdmUsIGEuZXh0ZXJuYWxMaW5rOmhvdmVyIHsKKyAgYmFja2dyb3VuZDogdXJsKC4uL2ltYWdlcy9leHRlcm5hbC5wbmcpIHJpZ2h0IGNlbnRlciBuby1yZXBlYXQ7CisgIHBhZGRpbmctcmlnaHQ6IDE4cHg7Cit9CisjbGVnZW5kIGxpLm5ld1dpbmRvdyB7CisgIGJhY2tncm91bmQ6IHVybCguLi9pbWFnZXMvbmV3d2luZG93LnBuZykgbGVmdCB0b3Agbm8tcmVwZWF0OworICBwYWRkaW5nLWxlZnQ6IDE4cHg7Cit9CithLm5ld1dpbmRvdywgYS5uZXdXaW5kb3c6bGluaywgYS5uZXdXaW5kb3c6dmlzaXRlZCwgYS5uZXdXaW5kb3c6YWN0aXZlLCBhLm5ld1dpbmRvdzpob3ZlciB7CisgIGJhY2tncm91bmQ6IHVybCguLi9pbWFnZXMvbmV3d2luZG93LnBuZykgcmlnaHQgY2VudGVyIG5vLXJlcGVhdDsKKyAgcGFkZGluZy1yaWdodDogMThweDsKK30KK2gyIHsKKyAgcGFkZGluZzogNHB4IDRweCA0cHggNnB4OworICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OworICBjb2xvcjogIzkwMDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDsKKyAgZm9udC13ZWlnaHQ6OTAwOworICBmb250LXNpemU6IHgtbGFyZ2U7Cit9CitoMyB7CisgIHBhZGRpbmc6IDRweCA0cHggNHB4IDZweDsKKyAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKKyAgY29sb3I6ICM5MDA7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc2l6ZTogbGFyZ2U7Cit9CitoNCB7CisgIHBhZGRpbmc6IDRweCA0cHggNHB4IDZweDsKKyAgYm9yZGVyOiAxcHggc29saWQgI2JiYjsKKyAgY29sb3I6ICM5MDA7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgIGZvbnQtc2l6ZTogbGFyZ2U7Cit9CitoNSB7CisgIHBhZGRpbmc6IDRweCA0cHggNHB4IDZweDsKKyAgY29sb3I6ICM5MDA7CisgIGZvbnQtc2l6ZTogbm9ybWFsOworfQorcCB7CisgIGxpbmUtaGVpZ2h0OiAxLjNlbTsKKyAgZm9udC1zaXplOiBzbWFsbDsKK30KKyNicmVhZGNydW1icyB7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjYWFhOworICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2FhYTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NjYzsKK30KKyNsZWZ0Q29sdW1uIHsKKyAgbWFyZ2luOiAxMHB4IDAgMCA1cHg7CisgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Cit9CisjbmF2Y29sdW1uIGg1IHsKKyAgZm9udC1zaXplOiBzbWFsbGVyOworICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2FhYWFhYTsKKyAgcGFkZGluZy10b3A6IDJweDsKKyAgY29sb3I6ICMwMDA7Cit9CisKK3RhYmxlLmJvZHlUYWJsZSB0aCB7CisgIGNvbG9yOiB3aGl0ZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2JiYjsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKK3RhYmxlLmJvZHlUYWJsZSB0aCwgdGFibGUuYm9keVRhYmxlIHRkIHsKKyAgZm9udC1zaXplOiAxZW07Cit9CisKK3RhYmxlLmJvZHlUYWJsZSB0ci5hIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2RkZDsKK30KKwordGFibGUuYm9keVRhYmxlIHRyLmIgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworfQorCisuc291cmNlIHsKKyAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKK30KK2RsIHsKKyAgcGFkZGluZzogNHB4IDRweCA0cHggNnB4OworICBib3JkZXI6IDFweCBzb2xpZCAjYWFhOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZjOworfQorZHQgeworICBjb2xvcjogIzkwMDsKK30KKyNvcmdhbml6YXRpb25Mb2dvIGltZywgI3Byb2plY3RMb2dvIGltZywgI3Byb2plY3RMb2dvIHNwYW57CisgIG1hcmdpbjogOHB4OworfQorI2Jhbm5lciB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZmZmOworfQorLmVycm9ybWFyaywgLndhcm5pbmdtYXJrLCAuZG9uZW1hcmssIC5pbmZvbWFyayB7CisgIGJhY2tncm91bmQ6IHVybCguLi9pbWFnZXMvaWNvbl9lcnJvcl9zbWwuZ2lmKSBuby1yZXBlYXQ7Cit9CisKKy53YXJuaW5nbWFyayB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvaWNvbl93YXJuaW5nX3NtbC5naWYpOworfQorCisuZG9uZW1hcmsgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2ljb25fc3VjY2Vzc19zbWwuZ2lmKTsKK30KKworLmluZm9tYXJrIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9pY29uX2luZm9fc21sLmdpZik7Cit9CisKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9jc3MvcHJpbnQuY3NzIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL2Nzcy9wcmludC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZjA5ZDU0NgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9jc3MvcHJpbnQuY3NzCkBAIC0wLDAgKzEsNyBAQAorI2Jhbm5lciwgI2Zvb3RlciwgI2xlZnRjb2wsICNicmVhZGNydW1icywgLmRvY3MgI3RvYywgLmRvY3MgLmNvdXJ0ZXN5bGlua3MsICNsZWZ0Q29sdW1uLCAjbmF2Q29sdW1uIHsKKwlkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Cit9CisjYm9keUNvbHVtbiwgYm9keS5kb2NzIGRpdi5kb2NzIHsKKwltYXJnaW46IDAgIWltcG9ydGFudDsKKwlib3JkZXI6IG5vbmUgIWltcG9ydGFudAorfQpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9oaXZlL2Nzcy9zaXRlLmNzcyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9jc3Mvc2l0ZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDU1ZTdlMgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9jc3Mvc2l0ZS5jc3MKQEAgLTAsMCArMSBAQAorLyogWW91IGNhbiBvdmVycmlkZSB0aGlzIGZpbGUgd2l0aCB5b3VyIG93biBzdHlsZXMgKi8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvaW1hZ2VzL2NvbGxhcHNlZC5naWYgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvaW1hZ2VzL2NvbGxhcHNlZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmU3MTA4NAotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9pbWFnZXMvY29sbGFwc2VkLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvaW1hZ2VzL2V4cGFuZGVkLmdpZiBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9pbWFnZXMvZXhwYW5kZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBmZWYzZDgKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvaW1hZ2VzL2V4cGFuZGVkLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvaW1hZ2VzL2V4dGVybmFsLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9pbWFnZXMvZXh0ZXJuYWwucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNmOTk5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvaW1hZ2VzL2V4dGVybmFsLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvaW1hZ2VzL2ljb25fZXJyb3Jfc21sLmdpZiBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9pbWFnZXMvaWNvbl9lcnJvcl9zbWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYxMTMyZWYKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvaW1hZ2VzL2ljb25fZXJyb3Jfc21sLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvaW1hZ2VzL2ljb25faW5mb19zbWwuZ2lmIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL2ltYWdlcy9pY29uX2luZm9fc21sLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jNmNiOWFkCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL2ltYWdlcy9pY29uX2luZm9fc21sLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvaW1hZ2VzL2ljb25fc3VjY2Vzc19zbWwuZ2lmIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL2ltYWdlcy9pY29uX3N1Y2Nlc3Nfc21sLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MmU4NWE0Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL2ltYWdlcy9pY29uX3N1Y2Nlc3Nfc21sLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvaW1hZ2VzL2ljb25fd2FybmluZ19zbWwuZ2lmIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL2ltYWdlcy9pY29uX3dhcm5pbmdfc21sLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NzNiYmI1Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL2ltYWdlcy9pY29uX3dhcm5pbmdfc21sLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvaW1hZ2VzL2xvZ29zL2J1aWxkLWJ5LW1hdmVuLWJsYWNrLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9pbWFnZXMvbG9nb3MvYnVpbGQtYnktbWF2ZW4tYmxhY2sucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjkxOWZkMGYKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvaW1hZ2VzL2xvZ29zL2J1aWxkLWJ5LW1hdmVuLWJsYWNrLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvaW1hZ2VzL2xvZ29zL2J1aWxkLWJ5LW1hdmVuLXdoaXRlLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9pbWFnZXMvbG9nb3MvYnVpbGQtYnktbWF2ZW4td2hpdGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdkNDRjOWMKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvaW1hZ2VzL2xvZ29zL2J1aWxkLWJ5LW1hdmVuLXdoaXRlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvaW1hZ2VzL2xvZ29zL21hdmVuLWZlYXRoZXIucG5nIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL2ltYWdlcy9sb2dvcy9tYXZlbi1mZWF0aGVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNWFkYTgzCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL2ltYWdlcy9sb2dvcy9tYXZlbi1mZWF0aGVyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvaW1hZ2VzL25ld3dpbmRvdy5wbmcgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvaW1hZ2VzL25ld3dpbmRvdy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjI4N2Y3MgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9pbWFnZXMvbmV3d2luZG93LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2luZGV4Lmh0bWwgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTI4YjM2YgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvaW5kZXguaHRtbApAQCAtMCwwICsxLDY1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgIDx0aXRsZT5BcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41LWluY3ViYXRpbmcgQVBJPC90aXRsZT4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNSAtIGluY3ViYXRpbmcgQVBJIiAvPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IGluY3ViYXRpbmcgQVBJIiAvPgorICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgorICAgICAgICAgIAorICAgICAgPGxpbmsgaHJlZj0ibGliL2luZGV4LmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAKKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keT4KKyAgICAgIDxkaXYgaWQ9ImxpYnJhcnkiPgorICAgICAgICA8aW1nIGNsYXNzPSJjbGFzcyBpY29uIiBzcmM9ImxpYi9jbGFzcy5wbmciIC8+CisgICAgICAgIDxpbWcgY2xhc3M9InRyYWl0IGljb24iIHNyYz0ibGliL3RyYWl0LnBuZyIgLz4KKyAgICAgICAgPGltZyBjbGFzcz0ib2JqZWN0IGljb24iIHNyYz0ibGliL29iamVjdC5wbmciIC8+CisgICAgICAgIDxpbWcgY2xhc3M9InBhY2thZ2UgaWNvbiIgc3JjPSJsaWIvcGFja2FnZS5wbmciIC8+CisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgaWQ9ImJyb3dzZXIiIGNsYXNzPSJ1aS1sYXlvdXQtd2VzdCI+CisgICAgICA8ZGl2IGNsYXNzPSJ1aS13ZXN0LWNlbnRlciI+CisgICAgICA8ZGl2IGlkPSJmaWx0ZXIiPgorICAgICAgICAgIDxkaXYgaWQ9InRleHRmaWx0ZXIiPjwvZGl2PgorICAgICAgICAgIDxkaXYgaWQ9ImxldHRlcnMiPjxzcGFuPiM8L3NwYW4+PGEgdGFyZ2V0PSJ0ZW1wbGF0ZSIgaHJlZj0iaW5kZXgvaW5kZXgtYS5odG1sIj5BPC9hPjxhIHRhcmdldD0idGVtcGxhdGUiIGhyZWY9ImluZGV4L2luZGV4LWIuaHRtbCI+QjwvYT48YSB0YXJnZXQ9InRlbXBsYXRlIiBocmVmPSJpbmRleC9pbmRleC1jLmh0bWwiPkM8L2E+PHNwYW4+RDwvc3Bhbj48c3Bhbj5FPC9zcGFuPjxzcGFuPkY8L3NwYW4+PGEgdGFyZ2V0PSJ0ZW1wbGF0ZSIgaHJlZj0iaW5kZXgvaW5kZXgtZy5odG1sIj5HPC9hPjxhIHRhcmdldD0idGVtcGxhdGUiIGhyZWY9ImluZGV4L2luZGV4LWguaHRtbCI+SDwvYT48YSB0YXJnZXQ9InRlbXBsYXRlIiBocmVmPSJpbmRleC9pbmRleC1pLmh0bWwiPkk8L2E+PHNwYW4+Sjwvc3Bhbj48c3Bhbj5LPC9zcGFuPjxzcGFuPkw8L3NwYW4+PGEgdGFyZ2V0PSJ0ZW1wbGF0ZSIgaHJlZj0iaW5kZXgvaW5kZXgtbS5odG1sIj5NPC9hPjxzcGFuPk48L3NwYW4+PGEgdGFyZ2V0PSJ0ZW1wbGF0ZSIgaHJlZj0iaW5kZXgvaW5kZXgtby5odG1sIj5PPC9hPjxzcGFuPlA8L3NwYW4+PHNwYW4+UTwvc3Bhbj48YSB0YXJnZXQ9InRlbXBsYXRlIiBocmVmPSJpbmRleC9pbmRleC1yLmh0bWwiPlI8L2E+PHNwYW4+Uzwvc3Bhbj48c3Bhbj5UPC9zcGFuPjxhIHRhcmdldD0idGVtcGxhdGUiIGhyZWY9ImluZGV4L2luZGV4LXUuaHRtbCI+VTwvYT48c3Bhbj5WPC9zcGFuPjxzcGFuPlc8L3NwYW4+PHNwYW4+WDwvc3Bhbj48c3Bhbj5ZPC9zcGFuPjxzcGFuPlo8L3NwYW4+PC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9InBhY2siIGlkPSJ0cGwiPgorICAgICAgICAgICAgCisgICAgICAgICAgICA8b2wgY2xhc3M9InRlbXBsYXRlcyI+PC9vbD4KKyAgICAgICAgICAgIDxvbCBjbGFzcz0icGFja2FnZXMiPiA8bGkgY2xhc3M9InBhY2siIHRpdGxlPSJvcmciPgorICAgICAgICAgICAgPGEgY2xhc3M9InRwbHNob3ciIGhyZWY9Im9yZy9wYWNrYWdlLmh0bWwiIHRhcmdldD0idGVtcGxhdGUiPm9yZzwvYT4KKyAgICAgICAgICAgIDxvbCBjbGFzcz0idGVtcGxhdGVzIj48L29sPgorICAgICAgICAgICAgPG9sIGNsYXNzPSJwYWNrYWdlcyI+IDxsaSBjbGFzcz0icGFjayIgdGl0bGU9Im9yZy5hcGFjaGUiPgorICAgICAgICAgICAgPGEgY2xhc3M9InRwbHNob3ciIGhyZWY9Im9yZy9hcGFjaGUvcGFja2FnZS5odG1sIiB0YXJnZXQ9InRlbXBsYXRlIj5vcmcuYXBhY2hlPC9hPgorICAgICAgICAgICAgPG9sIGNsYXNzPSJ0ZW1wbGF0ZXMiPjwvb2w+CisgICAgICAgICAgICA8b2wgY2xhc3M9InBhY2thZ2VzIj4gPGxpIGNsYXNzPSJwYWNrIiB0aXRsZT0ib3JnLmFwYWNoZS5hdGxhcyI+CisgICAgICAgICAgICA8YSBjbGFzcz0idHBsc2hvdyIgaHJlZj0ib3JnL2FwYWNoZS9hdGxhcy9wYWNrYWdlLmh0bWwiIHRhcmdldD0idGVtcGxhdGUiPm9yZy5hcGFjaGUuYXRsYXM8L2E+CisgICAgICAgICAgICA8b2wgY2xhc3M9InRlbXBsYXRlcyI+PC9vbD4KKyAgICAgICAgICAgIDxvbCBjbGFzcz0icGFja2FnZXMiPiA8bGkgY2xhc3M9InBhY2siIHRpdGxlPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUiPgorICAgICAgICAgICAgPGEgY2xhc3M9InRwbHNob3ciIGhyZWY9Im9yZy9hcGFjaGUvYXRsYXMvaGl2ZS9wYWNrYWdlLmh0bWwiIHRhcmdldD0idGVtcGxhdGUiPm9yZy5hcGFjaGUuYXRsYXMuaGl2ZTwvYT4KKyAgICAgICAgICAgIDxvbCBjbGFzcz0idGVtcGxhdGVzIj48L29sPgorICAgICAgICAgICAgPG9sIGNsYXNzPSJwYWNrYWdlcyI+IDxsaSBjbGFzcz0icGFjayIgdGl0bGU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UiPgorICAgICAgICAgICAgPGEgY2xhc3M9InRwbHNob3ciIGhyZWY9Im9yZy9hcGFjaGUvYXRsYXMvaGl2ZS9icmlkZ2UvcGFja2FnZS5odG1sIiB0YXJnZXQ9InRlbXBsYXRlIj5vcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlPC9hPgorICAgICAgICAgICAgPG9sIGNsYXNzPSJ0ZW1wbGF0ZXMiPjxsaSB0aXRsZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlIj48ZGl2IGNsYXNzPSJwbGFjZWhvbGRlciI+PC9kaXY+PGEgY2xhc3M9InRwbHNob3ciIGhyZWY9Im9yZy9hcGFjaGUvYXRsYXMvaGl2ZS9icmlkZ2UvSGl2ZU1ldGFTdG9yZUJyaWRnZS5odG1sIiB0YXJnZXQ9InRlbXBsYXRlIj48c3BhbiBjbGFzcz0iY2xhc3MiPihjbGFzcyk8L3NwYW4+PHNwYW4gY2xhc3M9InRwbExpbmsiPkhpdmVNZXRhU3RvcmVCcmlkZ2U8L3NwYW4+PC9hPjwvbGk+PC9vbD4KKyAgICAgICAgICAgIDxvbCBjbGFzcz0icGFja2FnZXMiPiA8L29sPgorICAgICAgICAgIDwvbGk+PGxpIGNsYXNzPSJwYWNrIiB0aXRsZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmhvb2siPgorICAgICAgICAgICAgPGEgY2xhc3M9InRwbHNob3ciIGhyZWY9Im9yZy9hcGFjaGUvYXRsYXMvaGl2ZS9ob29rL3BhY2thZ2UuaHRtbCIgdGFyZ2V0PSJ0ZW1wbGF0ZSI+b3JnLmFwYWNoZS5hdGxhcy5oaXZlLmhvb2s8L2E+CisgICAgICAgICAgICA8b2wgY2xhc3M9InRlbXBsYXRlcyI+PGxpIHRpdGxlPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuaG9vay5IaXZlSG9vayI+PGRpdiBjbGFzcz0icGxhY2Vob2xkZXIiPjwvZGl2PjxhIGNsYXNzPSJ0cGxzaG93IiBocmVmPSJvcmcvYXBhY2hlL2F0bGFzL2hpdmUvaG9vay9IaXZlSG9vay5odG1sIiB0YXJnZXQ9InRlbXBsYXRlIj48c3BhbiBjbGFzcz0iY2xhc3MiPihjbGFzcyk8L3NwYW4+PHNwYW4gY2xhc3M9InRwbExpbmsiPkhpdmVIb29rPC9zcGFuPjwvYT48L2xpPjwvb2w+CisgICAgICAgICAgICA8b2wgY2xhc3M9InBhY2thZ2VzIj4gPC9vbD4KKyAgICAgICAgICA8L2xpPjxsaSBjbGFzcz0icGFjayIgdGl0bGU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbCI+CisgICAgICAgICAgICA8YSBjbGFzcz0idHBsc2hvdyIgaHJlZj0ib3JnL2FwYWNoZS9hdGxhcy9oaXZlL21vZGVsL3BhY2thZ2UuaHRtbCIgdGFyZ2V0PSJ0ZW1wbGF0ZSI+b3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsPC9hPgorICAgICAgICAgICAgPG9sIGNsYXNzPSJ0ZW1wbGF0ZXMiPjxsaSB0aXRsZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IiPjxkaXYgY2xhc3M9InBsYWNlaG9sZGVyIj48L2Rpdj48YSBjbGFzcz0idHBsc2hvdyIgaHJlZj0ib3JnL2FwYWNoZS9hdGxhcy9oaXZlL21vZGVsL0hpdmVEYXRhTW9kZWxHZW5lcmF0b3IuaHRtbCIgdGFyZ2V0PSJ0ZW1wbGF0ZSI+PHNwYW4gY2xhc3M9ImNsYXNzIj4oY2xhc3MpPC9zcGFuPjxzcGFuIGNsYXNzPSJ0cGxMaW5rIj5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yPC9zcGFuPjwvYT48L2xpPjxsaSB0aXRsZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhVHlwZXMiPjxkaXYgY2xhc3M9InBsYWNlaG9sZGVyIj48L2Rpdj48YSBjbGFzcz0idHBsc2hvdyIgaHJlZj0ib3JnL2FwYWNoZS9hdGxhcy9oaXZlL21vZGVsL0hpdmVEYXRhVHlwZXMuaHRtbCIgdGFyZ2V0PSJ0ZW1wbGF0ZSI+PHNwYW4gY2xhc3M9ImNsYXNzIj4oY2xhc3MpPC9zcGFuPjxzcGFuIGNsYXNzPSJ0cGxMaW5rIj5IaXZlRGF0YVR5cGVzPC9zcGFuPjwvYT48L2xpPjwvb2w+CisgICAgICAgICAgICA8b2wgY2xhc3M9InBhY2thZ2VzIj4gPC9vbD4KKyAgICAgICAgICA8L2xpPjwvb2w+CisgICAgICAgICAgPC9saT48L29sPgorICAgICAgICAgIDwvbGk+PC9vbD4KKyAgICAgICAgICA8L2xpPjwvb2w+CisgICAgICAgICAgPC9saT48L29sPgorICAgICAgICAgIDwvZGl2PjwvZGl2PgorICAgIDwvZGl2PgorICAgICAgPGRpdiBpZD0iY29udGVudCIgY2xhc3M9InVpLWxheW91dC1jZW50ZXIiPgorICAgICAgICA8aWZyYW1lIGlkPSJ0ZW1wbGF0ZSIgbmFtZT0idGVtcGxhdGUiIHNyYz0icGFja2FnZS5odG1sIj48L2lmcmFtZT4KKyAgICAgIDwvZGl2PgorICAgICAgPHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJsaWIvanF1ZXJ5LmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImxpYi9qcXVlcnktdWkuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ibGliL2pxdWVyeS5sYXlvdXQuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ibGliL3NjaGVkdWxlci5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJsaWIvaW5kZXguanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaW5kZXguanMiPjwvc2NyaXB0PgorICAgIDwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2luZGV4LmpzIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9pbmRleC5qcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZGNiOWE4Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9pbmRleC5qcwpAQCAtMCwwICsxIEBACitJbmRleC5QQUNLQUdFUyA9IHsib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsIiA6IFt7ImNsYXNzIiA6ICJvcmdcL2FwYWNoZVwvYXRsYXNcL2hpdmVcL21vZGVsXC9IaXZlRGF0YU1vZGVsR2VuZXJhdG9yLmh0bWwiLCAibmFtZSIgOiAib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IifSwgeyJjbGFzcyIgOiAib3JnXC9hcGFjaGVcL2F0bGFzXC9oaXZlXC9tb2RlbFwvSGl2ZURhdGFUeXBlcy5odG1sIiwgIm5hbWUiIDogIm9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzIn1dLCAib3JnLmFwYWNoZSIgOiBbXSwgIm9yZy5hcGFjaGUuYXRsYXMiIDogW10sICJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuaG9vayIgOiBbeyJjbGFzcyIgOiAib3JnXC9hcGFjaGVcL2F0bGFzXC9oaXZlXC9ob29rXC9IaXZlSG9vay5odG1sIiwgIm5hbWUiIDogIm9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rLkhpdmVIb29rIn1dLCAib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZSIgOiBbeyJjbGFzcyIgOiAib3JnXC9hcGFjaGVcL2F0bGFzXC9oaXZlXC9icmlkZ2VcL0hpdmVNZXRhU3RvcmVCcmlkZ2UuaHRtbCIsICJuYW1lIiA6ICJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UifV0sICJvcmcuYXBhY2hlLmF0bGFzLmhpdmUiIDogW10sICJvcmciIDogW119OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtYS5odG1sIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC1hLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjkzNGFiNgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtYS5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgPHRpdGxlPkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUtaW5jdWJhdGluZyBBUEk8L3RpdGxlPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IC0gaW5jdWJhdGluZyBBUEkiIC8+CisgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9IkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUgaW5jdWJhdGluZyBBUEkiIC8+CisgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIC8+CisgICAgICAgICAgCisgICAgICA8bGluayBocmVmPSIuLi9saWIvcmVmLWluZGV4LmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PgorICAgIAorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5PjxkaXYgY2xhc3M9ImVudHJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPmFwYWNoZTwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZyI+b3JnPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5hdGxhczwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlIj5hcGFjaGU8L2E+IDwvZGl2PgorICAgIDwvZGl2PjwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LWIuaHRtbCBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtYi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ0NDJiMGYKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LWIuaHRtbApAQCAtMCwwICsxLDE4IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgIDx0aXRsZT5BcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41LWluY3ViYXRpbmcgQVBJPC90aXRsZT4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNSAtIGluY3ViYXRpbmcgQVBJIiAvPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IGluY3ViYXRpbmcgQVBJIiAvPgorICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgorICAgICAgICAgIAorICAgICAgPGxpbmsgaHJlZj0iLi4vbGliL3JlZi1pbmRleC5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+CisgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9saWIvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKyAgICAKKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keT48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5icmlkZ2U8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUiPmhpdmU8L2E+IDwvZGl2PgorICAgIDwvZGl2PjwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LWMuaHRtbCBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjI1ODM2MWEKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LWMuaHRtbApAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgIDx0aXRsZT5BcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41LWluY3ViYXRpbmcgQVBJPC90aXRsZT4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNSAtIGluY3ViYXRpbmcgQVBJIiAvPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IGluY3ViYXRpbmcgQVBJIiAvPgorICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgorICAgICAgICAgIAorICAgICAgPGxpbmsgaHJlZj0iLi4vbGliL3JlZi1pbmRleC5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+CisgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9saWIvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKyAgICAKKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keT48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5jcmVhdGVEYXRhTW9kZWw8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvbW9kZWwvSGl2ZURhdGFNb2RlbEdlbmVyYXRvci5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvciI+SGl2ZURhdGFNb2RlbEdlbmVyYXRvcjwvYT4gPC9kaXY+CisgICAgPC9kaXY+PGRpdiBjbGFzcz0iZW50cnkiPgorICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+Y3JlYXRlSW5zdGFuY2U8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvYnJpZGdlL0hpdmVNZXRhU3RvcmVCcmlkZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlIj5IaXZlTWV0YVN0b3JlQnJpZGdlPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48L2JvZHk+CisgICAgICA8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC1nLmh0bWwgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LWcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jMzAwMmJmCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC1nLmh0bWwKQEAgLTAsMCArMSw0NSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICA8dGl0bGU+QXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNS1pbmN1YmF0aW5nIEFQSTwvdGl0bGU+CisgICAgICAgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUgLSBpbmN1YmF0aW5nIEFQSSIgLz4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNSBpbmN1YmF0aW5nIEFQSSIgLz4KKyAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KKyAgICAgICAgICAKKyAgICAgIDxsaW5rIGhyZWY9Ii4uL2xpYi9yZWYtaW5kZXguY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgorICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vbGliL2pxdWVyeS5qcyI+PC9zY3JpcHQ+CisgICAgCisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHk+PGRpdiBjbGFzcz0iZW50cnkiPgorICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+Z2V0QXRsYXNDbGllbnQ8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvYnJpZGdlL0hpdmVNZXRhU3RvcmVCcmlkZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlIj5IaXZlTWV0YVN0b3JlQnJpZGdlPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5nZXRDbGFzc1R5cGVEZWZpbml0aW9uczwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9tb2RlbC9IaXZlRGF0YU1vZGVsR2VuZXJhdG9yLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yIj5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5nZXREYXRhTW9kZWxBc0pTT048L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvbW9kZWwvSGl2ZURhdGFNb2RlbEdlbmVyYXRvci5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvciI+SGl2ZURhdGFNb2RlbEdlbmVyYXRvcjwvYT4gPC9kaXY+CisgICAgPC9kaXY+PGRpdiBjbGFzcz0iZW50cnkiPgorICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+Z2V0RW51bVR5cGVEZWZpbml0aW9uczwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9tb2RlbC9IaXZlRGF0YU1vZGVsR2VuZXJhdG9yLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yIj5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5nZXRNb2RlbEFzSnNvbjwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9tb2RlbC9IaXZlRGF0YU1vZGVsR2VuZXJhdG9yLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yIj5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5nZXROYW1lPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJvY2N1cnJlbmNlcyI+PGEgaHJlZj0iLi4vb3JnL2FwYWNoZS9hdGxhcy9oaXZlL21vZGVsL0hpdmVEYXRhVHlwZXMuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhVHlwZXMiPkhpdmVEYXRhVHlwZXM8L2E+IDwvZGl2PgorICAgIDwvZGl2PjxkaXYgY2xhc3M9ImVudHJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPmdldFByb2Nlc3NSZWZlcmVuY2U8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvYnJpZGdlL0hpdmVNZXRhU3RvcmVCcmlkZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlIj5IaXZlTWV0YVN0b3JlQnJpZGdlPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5nZXRTdHJ1Y3RUeXBlRGVmaW5pdGlvbnM8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvbW9kZWwvSGl2ZURhdGFNb2RlbEdlbmVyYXRvci5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvciI+SGl2ZURhdGFNb2RlbEdlbmVyYXRvcjwvYT4gPC9kaXY+CisgICAgPC9kaXY+PGRpdiBjbGFzcz0iZW50cnkiPgorICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+Z2V0VHJhaXRUeXBlRGVmaW5pdGlvbnM8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvbW9kZWwvSGl2ZURhdGFNb2RlbEdlbmVyYXRvci5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvciI+SGl2ZURhdGFNb2RlbEdlbmVyYXRvcjwvYT4gPC9kaXY+CisgICAgPC9kaXY+PGRpdiBjbGFzcz0iZW50cnkiPgorICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+Z2V0VHlwZXNEZWY8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvbW9kZWwvSGl2ZURhdGFNb2RlbEdlbmVyYXRvci5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvciI+SGl2ZURhdGFNb2RlbEdlbmVyYXRvcjwvYT4gPC9kaXY+CisgICAgPC9kaXY+PC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtaC5odG1sIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC1oLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTY4MjExNwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtaC5odG1sCkBAIC0wLDAgKzEsMzMgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgPHRpdGxlPkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUtaW5jdWJhdGluZyBBUEk8L3RpdGxlPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IC0gaW5jdWJhdGluZyBBUEkiIC8+CisgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9IkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUgaW5jdWJhdGluZyBBUEkiIC8+CisgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIC8+CisgICAgICAgICAgCisgICAgICA8bGluayBocmVmPSIuLi9saWIvcmVmLWluZGV4LmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PgorICAgIAorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5PjxkaXYgY2xhc3M9ImVudHJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPkhpdmVEYXRhTW9kZWxHZW5lcmF0b3I8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvbW9kZWwvcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwiPm1vZGVsPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5IaXZlRGF0YVR5cGVzPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJvY2N1cnJlbmNlcyI+PGEgaHJlZj0iLi4vb3JnL2FwYWNoZS9hdGxhcy9oaXZlL21vZGVsL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsIj5tb2RlbDwvYT4gPC9kaXY+CisgICAgPC9kaXY+PGRpdiBjbGFzcz0iZW50cnkiPgorICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+SGl2ZUhvb2s8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvaG9vay9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rIj5ob29rPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5IaXZlTWV0YVN0b3JlQnJpZGdlPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJvY2N1cnJlbmNlcyI+PGEgaHJlZj0iLi4vb3JnL2FwYWNoZS9hdGxhcy9oaXZlL2JyaWRnZS9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UiPmJyaWRnZTwvYT4gPC9kaXY+CisgICAgPC9kaXY+PGRpdiBjbGFzcz0iZW50cnkiPgorICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+aGl2ZTwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzIj5hdGxhczwvYT4gPC9kaXY+CisgICAgPC9kaXY+PGRpdiBjbGFzcz0iZW50cnkiPgorICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+aG9vazwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZSI+aGl2ZTwvYT4gPC9kaXY+CisgICAgPC9kaXY+PC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtaS5odG1sIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC1pLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTdjYmQ4MwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtaS5odG1sCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgPHRpdGxlPkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUtaW5jdWJhdGluZyBBUEk8L3RpdGxlPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IC0gaW5jdWJhdGluZyBBUEkiIC8+CisgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9IkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUgaW5jdWJhdGluZyBBUEkiIC8+CisgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIC8+CisgICAgICAgICAgCisgICAgICA8bGluayBocmVmPSIuLi9saWIvcmVmLWluZGV4LmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PgorICAgIAorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5PjxkaXYgY2xhc3M9ImVudHJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPmltcG9ydEhpdmVNZXRhZGF0YTwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9icmlkZ2UvSGl2ZU1ldGFTdG9yZUJyaWRnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UiPkhpdmVNZXRhU3RvcmVCcmlkZ2U8L2E+IDwvZGl2PgorICAgIDwvZGl2PjwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LW0uaHRtbCBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtbS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM0MzkxOTAKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LW0uaHRtbApAQCAtMCwwICsxLDE4IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgIDx0aXRsZT5BcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41LWluY3ViYXRpbmcgQVBJPC90aXRsZT4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNSAtIGluY3ViYXRpbmcgQVBJIiAvPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IGluY3ViYXRpbmcgQVBJIiAvPgorICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgorICAgICAgICAgIAorICAgICAgPGxpbmsgaHJlZj0iLi4vbGliL3JlZi1pbmRleC5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+CisgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9saWIvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKyAgICAKKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keT48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5tb2RlbDwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZSI+aGl2ZTwvYT4gPC9kaXY+CisgICAgPC9kaXY+PC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtby5odG1sIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC1vLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2FiYzVjMwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtby5odG1sCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgPHRpdGxlPkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUtaW5jdWJhdGluZyBBUEk8L3RpdGxlPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IC0gaW5jdWJhdGluZyBBUEkiIC8+CisgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9IkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUgaW5jdWJhdGluZyBBUEkiIC8+CisgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIC8+CisgICAgICAgICAgCisgICAgICA8bGluayBocmVmPSIuLi9saWIvcmVmLWluZGV4LmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PgorICAgIAorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5PjxkaXYgY2xhc3M9ImVudHJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPm9yZzwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0iX3Jvb3RfIj5yb290PC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48L2JvZHk+CisgICAgICA8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC1yLmh0bWwgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iOGRhNTJmCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC1yLmh0bWwKQEAgLTAsMCArMSwzMCBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICA8dGl0bGU+QXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNS1pbmN1YmF0aW5nIEFQSTwvdGl0bGU+CisgICAgICAgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUgLSBpbmN1YmF0aW5nIEFQSSIgLz4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNSBpbmN1YmF0aW5nIEFQSSIgLz4KKyAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KKyAgICAgICAgICAKKyAgICAgIDxsaW5rIGhyZWY9Ii4uL2xpYi9yZWYtaW5kZXguY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgorICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vbGliL2pxdWVyeS5qcyI+PC9zY3JpcHQ+CisgICAgCisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHk+PGRpdiBjbGFzcz0iZW50cnkiPgorICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+cmVnaXN0ZXJEYXRhYmFzZTwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9icmlkZ2UvSGl2ZU1ldGFTdG9yZUJyaWRnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UiPkhpdmVNZXRhU3RvcmVCcmlkZ2U8L2E+IDwvZGl2PgorICAgIDwvZGl2PjxkaXYgY2xhc3M9ImVudHJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPnJlZ2lzdGVySGl2ZURhdGFNb2RlbDwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9icmlkZ2UvSGl2ZU1ldGFTdG9yZUJyaWRnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UiPkhpdmVNZXRhU3RvcmVCcmlkZ2U8L2E+IDwvZGl2PgorICAgIDwvZGl2PjxkaXYgY2xhc3M9ImVudHJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPnJlZ2lzdGVyUGFydGl0aW9uPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJvY2N1cnJlbmNlcyI+PGEgaHJlZj0iLi4vb3JnL2FwYWNoZS9hdGxhcy9oaXZlL2JyaWRnZS9IaXZlTWV0YVN0b3JlQnJpZGdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UuSGl2ZU1ldGFTdG9yZUJyaWRnZSI+SGl2ZU1ldGFTdG9yZUJyaWRnZTwvYT4gPC9kaXY+CisgICAgPC9kaXY+PGRpdiBjbGFzcz0iZW50cnkiPgorICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+cmVnaXN0ZXJUYWJsZTwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9icmlkZ2UvSGl2ZU1ldGFTdG9yZUJyaWRnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UiPkhpdmVNZXRhU3RvcmVCcmlkZ2U8L2E+IDwvZGl2PgorICAgIDwvZGl2PjxkaXYgY2xhc3M9ImVudHJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPnJ1bjwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9ob29rL0hpdmVIb29rLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rLkhpdmVIb29rIj5IaXZlSG9vazwvYT4gPC9kaXY+CisgICAgPC9kaXY+PC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtdS5odG1sIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC11Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmYyZDBmMAotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtdS5odG1sCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgPHRpdGxlPkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUtaW5jdWJhdGluZyBBUEk8L3RpdGxlPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IC0gaW5jdWJhdGluZyBBUEkiIC8+CisgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9IkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUgaW5jdWJhdGluZyBBUEkiIC8+CisgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIC8+CisgICAgICAgICAgCisgICAgICA8bGluayBocmVmPSIuLi9saWIvcmVmLWluZGV4LmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PgorICAgIAorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5PjxkaXYgY2xhc3M9ImVudHJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPnVwZGF0ZVRhYmxlPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJvY2N1cnJlbmNlcyI+PGEgaHJlZj0iLi4vb3JnL2FwYWNoZS9hdGxhcy9oaXZlL2JyaWRnZS9IaXZlTWV0YVN0b3JlQnJpZGdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UuSGl2ZU1ldGFTdG9yZUJyaWRnZSI+SGl2ZU1ldGFTdG9yZUJyaWRnZTwvYT4gPC9kaXY+CisgICAgPC9kaXY+PC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2Fycm93LWRvd24ucG5nIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvYXJyb3ctZG93bi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzIyOTYwMwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2Fycm93LWRvd24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2Fycm93LXJpZ2h0LnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2Fycm93LXJpZ2h0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMmYyOTM1Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvYXJyb3ctcmlnaHQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2NsYXNzLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2NsYXNzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45N2VkYmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvY2xhc3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2NsYXNzX2JpZy5wbmcgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9jbGFzc19iaWcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmNiMWY2MzgKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9jbGFzc19iaWcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2NsYXNzX2RpYWdyYW0ucG5nIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvY2xhc3NfZGlhZ3JhbS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWQ3YWVjNwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2NsYXNzX2RpYWdyYW0ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2NsYXNzX3RvX29iamVjdF9iaWcucG5nIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvY2xhc3NfdG9fb2JqZWN0X2JpZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWRkNmUzOAotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2NsYXNzX3RvX29iamVjdF9iaWcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2NvbnN0cnVjdG9yc2JnLmdpZiBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2NvbnN0cnVjdG9yc2JnLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZTNmNWVhCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvY29uc3RydWN0b3JzYmcuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2NvbnZlcnNpb25iZy5naWYgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9jb252ZXJzaW9uYmcuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRiZTE0NWQKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9jb252ZXJzaW9uYmcuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2RlZmJnLWJsdWUuZ2lmIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZGVmYmctYmx1ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjkwMzgzMwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2RlZmJnLWJsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2RlZmJnLWdyZWVuLmdpZiBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2RlZmJnLWdyZWVuLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNmM0M2JlCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZGVmYmctZ3JlZW4uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2RpYWdyYW1zLmNzcyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2RpYWdyYW1zLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZmUzM2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZGlhZ3JhbXMuY3NzCkBAIC0wLDAgKzEsMTQzIEBACisuZGlhZ3JhbS1jb250YWluZXIKK3sKKwlkaXNwbGF5OiBub25lOworfQorCisuZGlhZ3JhbQoreworCW92ZXJmbG93OiBoaWRkZW47CisJcGFkZGluZy10b3A6MTVweDsKK30KKworLmRpYWdyYW0gc3ZnCit7CisJZGlzcGxheTogYmxvY2s7CisJcG9zaXRpb246IGFic29sdXRlOworCXZpc2liaWxpdHk6IGhpZGRlbjsKKwltYXJnaW46IGF1dG87Cit9CisKKy5kaWFncmFtLWhlbHAKK3sKKwlmbG9hdDpyaWdodDsKKwlkaXNwbGF5Om5vbmU7Cit9CisKKy5tYWduaWZ5aW5nCit7CisJY3Vyc29yOiAtd2Via2l0LXpvb20taW4gISBpbXBvcnRhbnQ7CisJY3Vyc29yOiAtbW96LXpvb20taW4gISBpbXBvcnRhbnQ7CisJY3Vyc29yOiBwb2ludGVyOworfQorCisjY2xvc2UtbGluaworeworCXBvc2l0aW9uOiBhYnNvbHV0ZTsKKwl6LWluZGV4OiAxMDA7CisJZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOworCWZvbnQtc2l6ZTogMTBwdDsKKwl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKwljb2xvcjogIzMxNTQ3OTsKK30KKworI2Nsb3NlOmhvdmVyCit7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCitzdmcgYQoreworCWN1cnNvcjpwb2ludGVyOworfQorCitzdmcgdGV4dAoreworCWZvbnQtc2l6ZTogMTBweDsKK30KKworLyogdHJ5IHRvIG1vdmUgdGhlIG5vZGUgdGV4dCAxcHggaW4gb3JkZXIgdG8gYmUgdmVydGljYWxseQorICAgY2VudGVyZWQgKGRvZXMgbm90IHdvcmsgaW4gYWxsIGJyb3dzZXJzKSAqLworc3ZnIC5ub2RlIHRleHQKK3sKKwl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsMXB4KTsKKwktbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LDFweCk7CisJLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsMXB4KTsKKwktby10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsMXB4KTsKKwktbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwxcHgpOworfQorCisvKiBob3ZlciBlZmZlY3QgZm9yIGVkZ2VzICovCisKK3N2ZyAuZWRnZS5vdmVyIHRleHQsCitzdmcgLmVkZ2UuaW1wbGljaXQtaW5jb21pbmcub3ZlciBwb2x5Z29uLAorc3ZnIC5lZGdlLmltcGxpY2l0LW91dGdvaW5nLm92ZXIgcG9seWdvbgoreworCWZpbGw6ICMyMDIwMjA7Cit9CisKK3N2ZyAuZWRnZS5vdmVyIHBhdGgsCitzdmcgLmVkZ2Uub3ZlciBwb2x5Z29uCit7CisJc3Ryb2tlOiAjMjAyMDIwOworfQorCisvKiBob3ZlciBlZmZlY3QgZm9yIG5vZGVzIGluIGNsYXNzIGRpYWdyYW1zICovCisKK3N2Zy5jbGFzcy1kaWFncmFtIC5ub2RlCit7CisJb3BhY2l0eTogMC43NTsKK30KKworc3ZnLmNsYXNzLWRpYWdyYW0gLm5vZGUudGhpcworeworCW9wYWNpdHk6IDEuMDsKK30KKworc3ZnLmNsYXNzLWRpYWdyYW0gLm5vZGUub3ZlcgoreworCW9wYWNpdHk6IDEuMDsKK30KKworc3ZnIC5ub2RlLm92ZXIgcG9seWdvbgoreworCXN0cm9rZTogIzIwMjAyMDsKK30KKworLyogaG92ZXIgZWZmZWN0IGZvciBub2RlcyBpbiBwYWNrYWdlIGRpYWdyYW1zICovCisKK3N2Zy5wYWNrYWdlLWRpYWdyYW0gLm5vZGUuY2xhc3Mub3ZlciBwb2x5Z29uLAorc3ZnLmNsYXNzLWRpYWdyYW0gLm5vZGUudGhpcy5jbGFzcy5vdmVyIHBvbHlnb24KK3sKKwlmaWxsOiAjMDk4NTUyOworCWZpbGw6ICMwNDY2M2U7Cit9CisKK3N2Zy5wYWNrYWdlLWRpYWdyYW0gLm5vZGUudHJhaXQub3ZlciBwb2x5Z29uLAorc3ZnLmNsYXNzLWRpYWdyYW0gLm5vZGUudGhpcy50cmFpdC5vdmVyIHBvbHlnb24KK3sKKwlmaWxsOiAjM2M3YjliOworCWZpbGw6ICMyMzVkN2I7Cit9CisKK3N2Zy5wYWNrYWdlLWRpYWdyYW0gLm5vZGUudHlwZS5vdmVyIHBvbHlnb24sCitzdmcuY2xhc3MtZGlhZ3JhbSAubm9kZS50aGlzLnR5cGUub3ZlciBwb2x5Z29uCit7CisJZmlsbDogIzA5ODU1MjsKKwlmaWxsOiAjMDQ2NjNlOworfQorCisKK3N2Zy5wYWNrYWdlLWRpYWdyYW0gLm5vZGUub2JqZWN0Lm92ZXIgcG9seWdvbgoreworCWZpbGw6ICMxODMzNzc7Cit9CisKK3N2Zy5wYWNrYWdlLWRpYWdyYW0gLm5vZGUub3V0c2lkZS5vdmVyIHBvbHlnb24KK3sKKwlmaWxsOiAjZDRkNGQ0OworfQorCitzdmcucGFja2FnZS1kaWFncmFtIC5ub2RlLmRlZmF1bHQub3ZlciBwb2x5Z29uCit7CisJZmlsbDogI2Q0ZDRkNDsKK30KZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2RpYWdyYW1zLmpzIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZGlhZ3JhbXMuanMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDc4ZjJlMwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2RpYWdyYW1zLmpzCkBAIC0wLDAgKzEsMzI0IEBACisvKioKKyAqIEphdmFTY3JpcHQgZnVuY3Rpb25zIGVuaGFuY2luZyB0aGUgU1ZHIGRpYWdyYW1zLgorICogCisgKiBAYXV0aG9yIERhbWllbiBPYnJpc3QKKyAqLworCit2YXIgZGlhZ3JhbXMgPSB7fTsKKworLyoqCisgKiBJbml0aWFsaXplcyB0aGUgZGlhZ3JhbXMgaW4gdGhlIG1haW4gd2luZG93LgorICovCiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpCit7CisJLy8gaGlkZSBkaWFncmFtcyBpbiBicm93c2VycyBub3Qgc3VwcG9ydGluZyBTVkcKKwlpZihNb2Rlcm5penIgJiYgIU1vZGVybml6ci5pbmxpbmVzdmcpCisJCXJldHVybjsKKworCS8vIG9ubHkgZXhlY3V0ZSB0aGlzIGluIHRoZSBtYWluIHdpbmRvdworCWlmKGRpYWdyYW1zLmlzUG9wdXApCisJCXJldHVybjsKKworCWlmKCQoIiNjb250ZW50LWRpYWdyYW0iKS5sZW5ndGgpCisJCSQoIiNpbmhlcml0YW5jZS1kaWFncmFtIikuY3NzKCJwYWRkaW5nLWJvdHRvbSIsICIyMHB4Iik7CisKKwkkKCIuZGlhZ3JhbS1jb250YWluZXIiKS5jc3MoImRpc3BsYXkiLCAiYmxvY2siKTsKKworCSQoIi5kaWFncmFtIikuZWFjaChmdW5jdGlvbigpIHsKKwkJLy8gc3RvcmUgaW5pdGFsIGRpbWVuc2lvbnMKKwkJJCh0aGlzKS5kYXRhKCJ3aWR0aCIsICQoInN2ZyIsICQodGhpcykpLndpZHRoKCkpOworCQkkKHRoaXMpLmRhdGEoImhlaWdodCIsICQoInN2ZyIsICQodGhpcykpLmhlaWdodCgpKTsKKwkJLy8gc3RvcmUgdW5zY2FsZWQgY2xvbmUgb2YgU1ZHIGVsZW1lbnQKKwkJJCh0aGlzKS5kYXRhKCJzdmciLCAkKHRoaXMpLmdldCgwKS5jaGlsZE5vZGVzWzBdLmNsb25lTm9kZSh0cnVlKSk7CisJfSk7CisJCisJLy8gbWFrZSBkaWFncmFtIHZpc2libGUsIGhpZGUgY29udGFpbmVyCisJJCgiLmRpYWdyYW0iKS5jc3MoImRpc3BsYXkiLCAibm9uZSIpOworCSQoIi5kaWFncmFtIHN2ZyIpLmNzcyh7CisJCSJwb3NpdGlvbiI6ICJzdGF0aWMiLAorCQkidmlzaWJpbGl0eSI6ICJ2aXNpYmxlIiwKKwkJInotaW5kZXgiOiAiYXV0byIKKwl9KTsKKworCS8vIGVuYWJsZSBsaW5raW5nIHRvIGRpYWdyYW1zCisJaWYoJChsb2NhdGlvbikuYXR0cigiaGFzaCIpID09ICIjaW5oZXJpdGFuY2UtZGlhZ3JhbSIpIHsKKwkJZGlhZ3JhbXMudG9nZ2xlKCQoIiNpbmhlcml0YW5jZS1kaWFncmFtLWNvbnRhaW5lciIpLCB0cnVlKTsKKwl9IGVsc2UgaWYoJChsb2NhdGlvbikuYXR0cigiaGFzaCIpID09ICIjY29udGVudC1kaWFncmFtIikgeworCQlkaWFncmFtcy50b2dnbGUoJCgiI2NvbnRlbnQtZGlhZ3JhbS1jb250YWluZXIiKSwgdHJ1ZSk7CisJfQorCisJJCgiLmRpYWdyYW0tbGluayIpLmNsaWNrKGZ1bmN0aW9uKCkgeworCQlkaWFncmFtcy50b2dnbGUoJCh0aGlzKS5wYXJlbnQoKSk7CisJfSk7CisKKwkvLyByZWdpc3RlciByZXNpemUgZnVuY3Rpb24KKwkkKHdpbmRvdykucmVzaXplKGRpYWdyYW1zLnJlc2l6ZSk7CisKKwkvLyBkb24ndCBidWJibGUgZXZlbnQgdG8gcGFyZW50IGRpdgorCS8vIHdoZW4gY2xpY2tpbmcgb24gYSBub2RlIG9mIGEgcmVzaXplZAorCS8vIGRpYWdyYW0KKwkkKCJzdmcgYSIpLmNsaWNrKGZ1bmN0aW9uKGUpIHsKKwkJZS5zdG9wUHJvcGFnYXRpb24oKTsKKwl9KTsKKworCWRpYWdyYW1zLmluaXRIaWdobGlnaHRpbmcoKTsKK30pOworCisvKioKKyAqIEluaXRpYWxpemVzIHRoZSBkaWFncmFtcyBpbiB0aGUgcG9wdXAuCisgKi8KK2RpYWdyYW1zLmluaXRQb3B1cCA9IGZ1bmN0aW9uKGlkKQoreworCS8vIGNvcHkgZGlhZ3JhbSBmcm9tIG1haW4gd2luZG93CisJaWYoIWpRdWVyeS5icm93c2VyLm1zaWUpCisJCSQoImJvZHkiKS5hcHBlbmQob3BlbmVyLiQoIiMiICsgaWQpLmRhdGEoInN2ZyIpKTsKKworCS8vIHBvc2l0aW9uaW5nCisJJCgic3ZnIikuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpOworCSQod2luZG93KS5yZXNpemUoZnVuY3Rpb24oKQorCXsKKwkJdmFyIHN2Z193ID0gJCgic3ZnIikuY3NzKCJ3aWR0aCIpLnJlcGxhY2UoInB4IiwgIiIpOworCQl2YXIgc3ZnX2ggPSAkKCJzdmciKS5jc3MoImhlaWdodCIpLnJlcGxhY2UoInB4IiwgIiIpOworCQl2YXIgeCA9ICQod2luZG93KS53aWR0aCgpIC8gMiAtIHN2Z193IC8gMjsKKwkJaWYoeCA8IDApIHggPSAwOworCQl2YXIgeSA9ICQod2luZG93KS5oZWlnaHQoKSAvIDIgLSBzdmdfaCAvIDI7CisJCWlmKHkgPCAwKSB5ID0gMDsKKwkJJCgic3ZnIikuY3NzKCJsZWZ0IiwgeCArICJweCIpOworCQkkKCJzdmciKS5jc3MoInRvcCIsIHkgKyAicHgiKTsKKwl9KTsKKwkkKHdpbmRvdykucmVzaXplKCk7CisKKwlkaWFncmFtcy5pbml0SGlnaGxpZ2h0aW5nKCk7CisJJCgic3ZnIGEiKS5jbGljayhmdW5jdGlvbihlKSB7CisJCW9wZW5lci5kaWFncmFtcy5yZWRpcmVjdEZyb21Qb3B1cCh0aGlzLmhyZWYuYmFzZVZhbCk7CisJCXdpbmRvdy5jbG9zZSgpOworCX0pOworCSQoZG9jdW1lbnQpLmtleXVwKGZ1bmN0aW9uKGUpIHsKKwkJaWYgKGUua2V5Q29kZSA9PSAyNykgd2luZG93LmNsb3NlKCk7CisJfSk7Cit9CisKKy8qKgorICogSW5pdGlhbGl6ZXMgaGlnaGxpZ2h0aW5nIGZvciBub2RlcyBhbmQgZWRnZXMuCisgKi8KK2RpYWdyYW1zLmluaXRIaWdobGlnaHRpbmcgPSBmdW5jdGlvbigpCit7CisJLy8gaGVscGVyIGZ1bmN0aW9uIHNpbmNlICQuaG92ZXIgZG9lc24ndCB3b3JrIGluIElFCisKKwlmdW5jdGlvbiBob3ZlcihlbGVtZW50cywgZm4pCisJeworCQllbGVtZW50cy5tb3VzZW92ZXIoZm4pOworCQllbGVtZW50cy5tb3VzZW91dChmbik7CisJfQorCisJLy8gaW5oZXJpdGFuY2UgZWRnZXMKKworCWhvdmVyKCQoInN2ZyAuZWRnZS5pbmhlcml0YW5jZSIpLCBmdW5jdGlvbihldnQpeworCQl2YXIgdG9nZ2xlQ2xhc3MgPSBldnQudHlwZSA9PSAibW91c2VvdXQiID8gZGlhZ3JhbXMucmVtb3ZlQ2xhc3MgOiBkaWFncmFtcy5hZGRDbGFzczsKKwkJdmFyIHBhcnRzID0gJCh0aGlzKS5hdHRyKCJpZCIpLnNwbGl0KCJfIik7CisJCXRvZ2dsZUNsYXNzKCQoIiMiICsgcGFydHNbMF0gKyAiXyIgKyBwYXJ0c1sxXSkpOworCQl0b2dnbGVDbGFzcygkKCIjIiArIHBhcnRzWzBdICsgIl8iICsgcGFydHNbMl0pKTsKKwkJdG9nZ2xlQ2xhc3MoJCh0aGlzKSk7CisJfSk7CisKKwkvLyBub2RlcworCisJaG92ZXIoJCgic3ZnIC5ub2RlIiksIGZ1bmN0aW9uKGV2dCl7CisJCXZhciB0b2dnbGVDbGFzcyA9IGV2dC50eXBlID09ICJtb3VzZW91dCIgPyBkaWFncmFtcy5yZW1vdmVDbGFzcyA6IGRpYWdyYW1zLmFkZENsYXNzOworCQl0b2dnbGVDbGFzcygkKHRoaXMpKTsKKwkJdmFyIHBhcnRzID0gJCh0aGlzKS5hdHRyKCJpZCIpLnNwbGl0KCJfIik7CisJCXZhciBpbmRleCA9IHBhcnRzWzFdOworCQkkKCJzdmcjIiArIHBhcnRzWzBdICsgIiAuZWRnZS5pbmhlcml0YW5jZSIpLmVhY2goZnVuY3Rpb24oKXsKKwkJCXZhciBwYXJ0czIgPSAkKHRoaXMpLmF0dHIoImlkIikuc3BsaXQoIl8iKTsKKwkJCWlmKHBhcnRzMlsxXSA9PSBpbmRleCkKKwkJCXsKKwkJCQl0b2dnbGVDbGFzcygkKCIjIiArIHBhcnRzMlswXSArICJfIiArIHBhcnRzMlsyXSkpOworCQkJCXRvZ2dsZUNsYXNzKCQodGhpcykpOworCQkJfSBlbHNlIGlmKHBhcnRzMlsyXSA9PSBpbmRleCkKKwkJCXsKKwkJCQl0b2dnbGVDbGFzcygkKCIjIiArIHBhcnRzMlswXSArICJfIiArIHBhcnRzMlsxXSkpOworCQkJCXRvZ2dsZUNsYXNzKCQodGhpcykpOworCQkJfQorCQl9KTsKKwl9KTsKKworCS8vIGluY29taW5nIGltcGxpY2l0cworCisJaG92ZXIoJCgic3ZnIC5ub2RlLmltcGxpY2l0LWluY29taW5nIiksIGZ1bmN0aW9uKGV2dCl7CisJCXZhciB0b2dnbGVDbGFzcyA9IGV2dC50eXBlID09ICJtb3VzZW91dCIgPyBkaWFncmFtcy5yZW1vdmVDbGFzcyA6IGRpYWdyYW1zLmFkZENsYXNzOworCQl0b2dnbGVDbGFzcygkKHRoaXMpKTsKKwkJdG9nZ2xlQ2xhc3MoJCgic3ZnIC5lZGdlLmltcGxpY2l0LWluY29taW5nIikpOworCQl0b2dnbGVDbGFzcygkKCJzdmcgLm5vZGUudGhpcyIpKTsKKwl9KTsKKworCWhvdmVyKCQoInN2ZyAuZWRnZS5pbXBsaWNpdC1pbmNvbWluZyIpLCBmdW5jdGlvbihldnQpeworCQl2YXIgdG9nZ2xlQ2xhc3MgPSBldnQudHlwZSA9PSAibW91c2VvdXQiID8gZGlhZ3JhbXMucmVtb3ZlQ2xhc3MgOiBkaWFncmFtcy5hZGRDbGFzczsKKwkJdG9nZ2xlQ2xhc3MoJCh0aGlzKSk7CisJCXRvZ2dsZUNsYXNzKCQoInN2ZyAubm9kZS50aGlzIikpOworCQkkKCJzdmcgLm5vZGUuaW1wbGljaXQtaW5jb21pbmciKS5lYWNoKGZ1bmN0aW9uKCl7CisJCQl0b2dnbGVDbGFzcygkKHRoaXMpKTsKKwkJfSk7CisJfSk7CisJCisJLy8gaW1wbGljaXQgb3V0Z29pbmcgbm9kZXMKKworCWhvdmVyKCQoInN2ZyAubm9kZS5pbXBsaWNpdC1vdXRnb2luZyIpLCBmdW5jdGlvbihldnQpeworCQl2YXIgdG9nZ2xlQ2xhc3MgPSBldnQudHlwZSA9PSAibW91c2VvdXQiID8gZGlhZ3JhbXMucmVtb3ZlQ2xhc3MgOiBkaWFncmFtcy5hZGRDbGFzczsKKwkJdG9nZ2xlQ2xhc3MoJCh0aGlzKSk7CisJCXRvZ2dsZUNsYXNzKCQoInN2ZyAuZWRnZS5pbXBsaWNpdC1vdXRnb2luZyIpKTsKKwkJdG9nZ2xlQ2xhc3MoJCgic3ZnIC5ub2RlLnRoaXMiKSk7CisJfSk7CisKKwlob3ZlcigkKCJzdmcgLmVkZ2UuaW1wbGljaXQtb3V0Z29pbmciKSwgZnVuY3Rpb24oZXZ0KXsKKwkJdmFyIHRvZ2dsZUNsYXNzID0gZXZ0LnR5cGUgPT0gIm1vdXNlb3V0IiA/IGRpYWdyYW1zLnJlbW92ZUNsYXNzIDogZGlhZ3JhbXMuYWRkQ2xhc3M7CisJCXRvZ2dsZUNsYXNzKCQodGhpcykpOworCQl0b2dnbGVDbGFzcygkKCJzdmcgLm5vZGUudGhpcyIpKTsKKwkJJCgic3ZnIC5ub2RlLmltcGxpY2l0LW91dGdvaW5nIikuZWFjaChmdW5jdGlvbigpeworCQkJdG9nZ2xlQ2xhc3MoJCh0aGlzKSk7CisJCX0pOworCX0pOworfTsKKworLyoqCisgKiBSZXNpemVzIHRoZSBkaWFncmFtcyBhY2NvcmRpbmcgdG8gdGhlIGF2YWlsYWJsZSB3aWR0aC4KKyAqLworZGlhZ3JhbXMucmVzaXplID0gZnVuY3Rpb24oKQoreworCS8vIGF2YWlsYWJsZSB3aWR0aAorCXZhciBhdmFpbGFibGVXaWR0aCA9ICQoImJvZHkiKS53aWR0aCgpIC0gMjA7CisKKwkkKCIuZGlhZ3JhbS1jb250YWluZXIiKS5lYWNoKGZ1bmN0aW9uKCkgeworCQkvLyB1bnJlZ2lzdGVyIGNsaWNrIGV2ZW50IG9uIHdob2xlIGRpdgorCQkkKCIuZGlhZ3JhbSIsIHRoaXMpLnVuYmluZCgiY2xpY2siKTsKKwkJdmFyIGRpYWdyYW1XaWR0aCA9ICQoIi5kaWFncmFtIiwgdGhpcykuZGF0YSgid2lkdGgiKTsKKwkJdmFyIGRpYWdyYW1IZWlnaHQgPSAkKCIuZGlhZ3JhbSIsIHRoaXMpLmRhdGEoImhlaWdodCIpOworCisJCWlmKGRpYWdyYW1XaWR0aCA+IGF2YWlsYWJsZVdpZHRoKQorCQl7CisJCQkvLyByZXNpemUgZGlhZ3JhbQorCQkJdmFyIGhlaWdodCA9IGRpYWdyYW1IZWlnaHQgLyBkaWFncmFtV2lkdGggKiBhdmFpbGFibGVXaWR0aDsKKwkJCSQoIi5kaWFncmFtIHN2ZyIsIHRoaXMpLndpZHRoKGF2YWlsYWJsZVdpZHRoKTsKKwkJCSQoIi5kaWFncmFtIHN2ZyIsIHRoaXMpLmhlaWdodChoZWlnaHQpOworCisJCQkvLyByZWdpc3RlciBjbGljayBldmVudCBvbiB3aG9sZSBkaXYKKwkJCSQoIi5kaWFncmFtIiwgdGhpcykuY2xpY2soZnVuY3Rpb24oKSB7CisJCQkJZGlhZ3JhbXMucG9wdXAoJCh0aGlzKSk7CisJCQl9KTsKKwkJCSQoIi5kaWFncmFtIiwgdGhpcykuYWRkQ2xhc3MoIm1hZ25pZnlpbmciKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIHJlc3RvcmUgZnVsbCBzaXplIG9mIGRpYWdyYW0KKwkJCSQoIi5kaWFncmFtIHN2ZyIsIHRoaXMpLndpZHRoKGRpYWdyYW1XaWR0aCk7CisJCQkkKCIuZGlhZ3JhbSBzdmciLCB0aGlzKS5oZWlnaHQoZGlhZ3JhbUhlaWdodCk7CisJCQkvLyBkb24ndCBzaG93IGN1c3RvbSBjdXJzb3IgYW55IG1vcmUKKwkJCSQoIi5kaWFncmFtIiwgdGhpcykucmVtb3ZlQ2xhc3MoIm1hZ25pZnlpbmciKTsKKwkJfQorCX0pOworfTsKKworLyoqCisgKiBTaG93cyBvciBoaWRlcyBhIGRpYWdyYW0gZGVwZW5kaW5nIG9uIGl0cyBjdXJyZW50IHN0YXRlLgorICovCitkaWFncmFtcy50b2dnbGUgPSBmdW5jdGlvbihjb250YWluZXIsIGRvbnRBbmltYXRlKQoreworCS8vIGNoYW5nZSBjbGFzcyBvZiBsaW5rCisJJCgiLmRpYWdyYW0tbGluayIsIGNvbnRhaW5lcikudG9nZ2xlQ2xhc3MoIm9wZW4iKTsKKwkvLyBnZXQgZWxlbWVudCB0byBzaG93IC8gaGlkZQorCXZhciBkaXYgPSAkKCIuZGlhZ3JhbSIsIGNvbnRhaW5lcik7CisJaWYgKGRpdi5pcygnOnZpc2libGUnKSkKKwl7CisJCSQoIi5kaWFncmFtLWhlbHAiLCBjb250YWluZXIpLmhpZGUoKTsKKwkJZGl2LnVuYmluZCgiY2xpY2siKTsKKwkJZGl2LnJlbW92ZUNsYXNzKCJtYWduaWZ5aW5nIik7CisJCWRpdi5zbGlkZVVwKDEwMCk7CisJfQorCWVsc2UKKwl7CisJCWRpYWdyYW1zLnJlc2l6ZSgpOworCQlpZihkb250QW5pbWF0ZSkKKwkJCWRpdi5zaG93KCk7CisJCWVsc2UKKwkJCWRpdi5zbGlkZURvd24oMTAwKTsKKwkJJCgiLmRpYWdyYW0taGVscCIsIGNvbnRhaW5lcikuc2hvdygpOworCX0KK307CisKKy8qKgorICogT3BlbnMgYSBwb3B1cCBjb250YWluaW5nIGEgY29weSBvZiBhIGRpYWdyYW0uCisgKi8KK2RpYWdyYW1zLndpbmRvd3MgPSB7fTsKK2RpYWdyYW1zLnBvcHVwID0gZnVuY3Rpb24oZGlhZ3JhbSkKK3sKKwl2YXIgaWQgPSBkaWFncmFtLmF0dHIoImlkIik7CisJaWYoIWRpYWdyYW1zLndpbmRvd3NbaWRdIHx8IGRpYWdyYW1zLndpbmRvd3NbaWRdLmNsb3NlZCkgeworCQl2YXIgdGl0bGUgPSAkKCIuc3ltYm9sIC5uYW1lIiwgJCgiI3NpZ25hdHVyZSIpKS50ZXh0KCk7CisJCS8vIGNsb25pbmcgZnJvbSBwYXJlbnQgd2luZG93IHRvIHBvcHVwIHNvbWVob3cgZG9lc24ndCB3b3JrIGluIElFCisJCS8vIHRoZXJlZm9yZSBpbmNsdWRlIHRoZSBTVkcgYXMgYSBzdHJpbmcgaW50byB0aGUgSFRNTAorCQl2YXIgc3ZnSUUgPSBqUXVlcnkuYnJvd3Nlci5tc2llID8gJCgiPGRpdiAvPiIpLmFwcGVuZChkaWFncmFtLmRhdGEoInN2ZyIpKS5odG1sKCkgOiAiIjsKKwkJdmFyIGh0bWwgPSAnJyArCisJCSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PlxuJyArCisJCSc8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+XG4nICsgCisJCSc8aHRtbD5cbicgKworCQknCTxoZWFkPlxuJyArCisJCScJCTx0aXRsZT4nICsgdGl0bGUgKyAnPC90aXRsZT5cbicgKworCQknCQk8bGluayBocmVmPSInICsgJCgiI2RpYWdyYW1zLWNzcyIpLmF0dHIoImhyZWYiKSArICciIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+XG4nICsKKwkJJwkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJyArICQoIiNqcXVlcnktanMiKS5hdHRyKCJzcmMiKSArICciPjwvc2NyaXB0PlxuJyArCisJCScJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicgKyAkKCIjZGlhZ3JhbXMtanMiKS5hdHRyKCJzcmMiKSArICciPjwvc2NyaXB0PlxuJyArCisJCScJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5cbicgKworCQknCQkJZGlhZ3JhbXMuaXNQb3B1cCA9IHRydWU7XG4nICsKKwkJJwkJPC9zY3JpcHQ+XG4nICsKKwkJJwk8L2hlYWQ+XG4nICsKKwkJJwk8Ym9keSBvbmxvYWQ9ImRpYWdyYW1zLmluaXRQb3B1cChcJycgKyBpZCArICdcJyk7Ij5cbicgKworCQknCQk8YSBocmVmPSIjIiBvbmNsaWNrPSJ3aW5kb3cuY2xvc2UoKTsiIGlkPSJjbG9zZS1saW5rIj5DbG9zZSB0aGlzIHdpbmRvdzwvYT5cbicgKworCQknCQknICsgc3ZnSUUgKyAnXG4nICsKKwkJJwk8L2JvZHk+XG4nICsKKwkJJzwvaHRtbD4nOworCisJCXZhciBwYWRkaW5nID0gMzA7CisJCXZhciBzY3JlZW5IZWlnaHQgPSBzY3JlZW4uYXZhaWxIZWlnaHQ7CisJCXZhciBzY3JlZW5XaWR0aCA9IHNjcmVlbi5hdmFpbFdpZHRoOworCQl2YXIgdyA9IE1hdGgubWluKHNjcmVlbldpZHRoLCBkaWFncmFtLmRhdGEoIndpZHRoIikgKyAyICogcGFkZGluZyk7CisJCXZhciBoID0gTWF0aC5taW4oc2NyZWVuSGVpZ2h0LCBkaWFncmFtLmRhdGEoImhlaWdodCIpICsgMiAqIHBhZGRpbmcpOworCQl2YXIgbGVmdCA9IChzY3JlZW5XaWR0aCAtIHcpIC8gMjsKKwkJdmFyIHRvcCA9IChzY3JlZW5IZWlnaHQgLSBoKSAvIDI7CisJCXZhciBwYXJhbWV0ZXJzID0gImhlaWdodD0iICsgaCArICIsIHdpZHRoPSIgKyB3ICsgIiwgbGVmdD0iICsgbGVmdCArICIsIHRvcD0iICsgdG9wICsgIiwgc2Nyb2xsYmFycz15ZXMsIGxvY2F0aW9uPW5vLCByZXNpemFibGU9eWVzIjsKKwkJdmFyIHdpbiA9IHdpbmRvdy5vcGVuKCJhYm91dDpibGFuayIsICJfYmxhbmsiLCBwYXJhbWV0ZXJzKTsKKwkJd2luLmRvY3VtZW50Lm9wZW4oKTsKKwkJd2luLmRvY3VtZW50LndyaXRlKGh0bWwpOworCQl3aW4uZG9jdW1lbnQuY2xvc2UoKTsKKwkJZGlhZ3JhbXMud2luZG93c1tpZF0gPSB3aW47CisJfQorCXdpbi5mb2N1cygpOworfTsKKworLyoqCisgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIHBvcHVwIHdoZW4gYSBub2RlIGlzIGNsaWNrZWQuCisgKi8KK2RpYWdyYW1zLnJlZGlyZWN0RnJvbVBvcHVwID0gZnVuY3Rpb24odXJsKQoreworCXdpbmRvdy5sb2NhdGlvbiA9IHVybDsKK307CisKKy8qKgorICogSGVscGVyIG1ldGhvZCB0aGF0IGFkZHMgYSBjbGFzcyB0byBhIFNWRyBlbGVtZW50LgorICovCitkaWFncmFtcy5hZGRDbGFzcyA9IGZ1bmN0aW9uKHN2Z0VsZW0sIG5ld0NsYXNzKSB7CisJbmV3Q2xhc3MgPSBuZXdDbGFzcyB8fCAib3ZlciI7CisJdmFyIGNsYXNzZXMgPSBzdmdFbGVtLmF0dHIoImNsYXNzIik7CisJaWYgKCQuaW5BcnJheShuZXdDbGFzcywgY2xhc3Nlcy5zcGxpdCgvXHMrLykpID09IC0xKSB7CisJCWNsYXNzZXMgKz0gKGNsYXNzZXMgPyAnICcgOiAnJykgKyBuZXdDbGFzczsKKwkJc3ZnRWxlbS5hdHRyKCJjbGFzcyIsIGNsYXNzZXMpOworCX0KK307CisKKy8qKgorICogSGVscGVyIG1ldGhvZCB0aGF0IHJlbW92ZXMgYSBjbGFzcyBmcm9tIGEgU1ZHIGVsZW1lbnQuCisgKi8KK2RpYWdyYW1zLnJlbW92ZUNsYXNzID0gZnVuY3Rpb24oc3ZnRWxlbSwgb2xkQ2xhc3MpIHsKKwlvbGRDbGFzcyA9IG9sZENsYXNzIHx8ICJvdmVyIjsKKwl2YXIgY2xhc3NlcyA9IHN2Z0VsZW0uYXR0cigiY2xhc3MiKTsKKwljbGFzc2VzID0gJC5ncmVwKGNsYXNzZXMuc3BsaXQoL1xzKy8pLCBmdW5jdGlvbihuLCBpKSB7IHJldHVybiBuICE9IG9sZENsYXNzOyB9KS5qb2luKCcgJyk7CisJc3ZnRWxlbS5hdHRyKCJjbGFzcyIsIGNsYXNzZXMpOworfTsKKwpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZmlsdGVyX2JveF9sZWZ0LnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2ZpbHRlcl9ib3hfbGVmdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGU4Yzg5MwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2ZpbHRlcl9ib3hfbGVmdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZmlsdGVyX2JveF9sZWZ0Mi5naWYgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9maWx0ZXJfYm94X2xlZnQyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iOWI0OTA3Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZmlsdGVyX2JveF9sZWZ0Mi5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZmlsdGVyX2JveF9yaWdodC5wbmcgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9maWx0ZXJfYm94X3JpZ2h0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mMTI3ZTM1Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZmlsdGVyX2JveF9yaWdodC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZmlsdGVyYmcuZ2lmIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZmlsdGVyYmcuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU0MmJhNGEKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9maWx0ZXJiZy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZmlsdGVyYm94YmFyYmcuZ2lmIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZmlsdGVyYm94YmFyYmcuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI1MDc1YzEKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9maWx0ZXJib3hiYXJiZy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZmlsdGVyYm94YmFyYmcucG5nIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZmlsdGVyYm94YmFyYmcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ2MTNjZjUKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9maWx0ZXJib3hiYXJiZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZmlsdGVyYm94YmcuZ2lmIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZmlsdGVyYm94YmcuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFlMmY4NTgKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9maWx0ZXJib3hiZy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZnVsbGNvbW1lbnR0b3BiZy5naWYgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9mdWxsY29tbWVudHRvcGJnLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hMGQ5M2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvZnVsbGNvbW1lbnR0b3BiZy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvaW5kZXguY3NzIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvaW5kZXguY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU1ZmIzNzAKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9pbmRleC5jc3MKQEAgLTAsMCArMSwzMzggQEAKKyogeworICBjb2xvcjogaW5oZXJpdDsKKyAgZm9udC1zaXplOiAxMHB0OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsKKyAgYm9yZGVyLXdpZHRoOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7Cit9CisKK2EgeworICBjdXJzb3I6IHBvaW50ZXI7Cit9CisKK2E6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworaDEgeworICBkaXNwbGF5OiBub25lOworfQorCisuc2VsZWN0ZWQgeworICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDBweCA1cHggMTBweCByZ2JhKDU4LCA4OCwgOTcsIC4zNik7CisgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMHB4IDVweCAxMHB4IHJnYmEoNTgsIDg4LCA5NywgLjM2KTsKKyAgYm9yZGVyLXRvcDogc29saWQgMXB4IHJnYmEoMTE5LCAxMzgsIDE1MywgMC44KTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4IHJnYmEoMTUxLCAxNzMsIDE5MSwgMC40KTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NlZDJkOTsKKyAgbWFyZ2luOiAtMXB4IDBweDsKK30KKworLyoubGV0dGVycyB7CisgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogMnB0OworICBwYWRkaW5nOiA1cHg7CisgIGJhY2tncm91bmQtY29sb3I6ICNEQURBREE7CisgIHRleHQtc2hhZG93OiAjZmZmZmZmIDAgMXB4IDA7Cit9Ki8KKworI2xpYnJhcnkgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyNicm93c2VyIHsKKyAgdG9wOiAwcHg7CisgIGxlZnQ6IDBweDsKKyAgYm90dG9tOiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBkaXNwbGF5OiBibG9jazsKKyAgcG9zaXRpb246IGZpeGVkOworfQorCisjZmlsdGVyIHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBkaXNwbGF5OiBibG9jazsKKy8qICBwYWRkaW5nOiA1cHg7Ki8KKyAgcmlnaHQ6IDA7CisgIGxlZnQ6IDA7CisgIHRvcDogMDsKKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2ZpbHRlcmJnLmdpZicpOworICBiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VkZWRlZTsgLyogbGlnaHQgZ3JheSAqLworICAvKmJhY2tncm91bmQtY29sb3I6ICNEQURBREE7Ki8KKyAgYm9yZGVyOjFweCBzb2xpZCAjYmJiYmJiOworICBib3JkZXItdG9wOjA7CisgIGJvcmRlci1sZWZ0OjA7CisgIGJvcmRlci1yaWdodDowOworfQorCisjdGV4dGZpbHRlciB7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgZGlzcGxheTogYmxvY2s7CisgIGhlaWdodDogMjBweDsKKyAgbWFyZ2luLXRvcDogNXB4OworICBtYXJnaW4tYm90dG9tOiA1cHg7Cit9CisKKyN0ZXh0ZmlsdGVyID4gLnByZSB7CisgIGRpc3BsYXk6IGJsb2NrOworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMDsKKyAgbGVmdDogMDsKKyAgaGVpZ2h0OiAyM3B4OworICB3aWR0aDogMjFweDsKKyAgYmFja2dyb3VuZDogdXJsKCJmaWx0ZXJfYm94X2xlZnQucG5nIik7Cit9CisKKyN0ZXh0ZmlsdGVyID4gLmlucHV0IHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwOworICByaWdodDogMjBweDsKKyAgbGVmdDogMjBweDsKK30KKworI3RleHRmaWx0ZXIgPiAuaW5wdXQgPiBpbnB1dCB7CisgIGhlaWdodDogMjBweDsKKyAgcGFkZGluZzogMXB4OworICBmb250LXdlaWdodDogYm9sZDsKKyAgY29sb3I6ICMwMDAwMDA7CisgIGJhY2tncm91bmQ6ICNmZmZmZmYgdXJsKCJmaWx0ZXJib3hiYXJiZy5wbmciKSByZXBlYXQteCBib3R0b20gbGVmdDsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKyN0ZXh0ZmlsdGVyID4gLnBvc3QgeworICBkaXNwbGF5OiBibG9jazsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDA7CisgIHJpZ2h0OiAwOworICBoZWlnaHQ6IDIzcHg7CisgIHdpZHRoOiAyMXB4OworICBiYWNrZ3JvdW5kOiB1cmwoImZpbHRlcl9ib3hfcmlnaHQucG5nIik7Cit9CisKKy8qI3RleHRmaWx0ZXIgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGRpc3BsYXk6IGJsb2NrOworICAgIGhlaWdodDogMjBweDsKKyAgbWFyZ2luLWJvdHRvbTogNXB4OworfQorCisjdGV4dGZpbHRlciA+IC5wcmUgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgbGVmdDogMDsKKyAgICBoZWlnaHQ6IDIwcHg7CisgICAgd2lkdGg6IDIwcHg7CisgICAgYmFja2dyb3VuZDogdXJsKCJmaWx0ZXJfYm94X2xlZnQucG5nIik7Cit9CisKKyN0ZXh0ZmlsdGVyID4gLmlucHV0IHsKKyAgZGlzcGxheTogYmxvY2s7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAgICByaWdodDogMjBweDsKKyAgICBsZWZ0OiAyMHB4OworfQorCisjdGV4dGZpbHRlciA+IC5pbnB1dCA+IGlucHV0IHsKKyAgaGVpZ2h0OiAxNnB4OworICBwYWRkaW5nOiAycHg7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBjb2xvcjogZGFya2JsdWU7CisgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworICAgIHdpZHRoOiAxMDAlOworfQorCisjdGV4dGZpbHRlciA+IC5wb3N0IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIHJpZ2h0OiAwOworICAgIGhlaWdodDogMjBweDsKKyAgICB3aWR0aDogMjBweDsKKyAgICBiYWNrZ3JvdW5kOiB1cmwoImZpbHRlcl9ib3hfcmlnaHQucG5nIik7Cit9Ki8KKworI2ZvY3VzZmlsdGVyIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGRpc3BsYXk6IGJsb2NrOworICBwYWRkaW5nOiA1cHg7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmZlYmQ7IC8qIGxpZ2h0IHllbGxvdyovCisgIHRleHQtc2hhZG93OiAjZmZmZmZmIDAgMXB4IDA7Cit9CisKKyNmb2N1c2ZpbHRlciAuZm9jdXNjb2xsIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIHRleHQtc2hhZG93OiAjZmZmZmZmIDAgMXB4IDA7Cit9CisKKyNmb2N1c2ZpbHRlciBpbWcgeworICBib3R0b206IC0ycHg7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKK30KKworI2tpbmRmaWx0ZXIgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGRpc3BsYXk6IGJsb2NrOworICBwYWRkaW5nOiA1cHg7CisvKiAgYmFja2dyb3VuZC1jb2xvcjogIzk5OTsqLworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKyNraW5kZmlsdGVyID4gYSB7CisgY29sb3I6IGJsYWNrOyAKKy8qIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyovCisgdGV4dC1zaGFkb3c6ICNmZmZmZmYgMCAxcHggMDsKKworfQorCisja2luZGZpbHRlciA+IGE6aG92ZXIgeworICBjb2xvcjogIzRDNEM0QzsgCisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgdGV4dC1zaGFkb3c6ICNmZmZmZmYgMCAxcHggMDsKK30KKworI2xldHRlcnMgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgcGFkZGluZy1ib3R0b206IDVweDsKKyAgYm9yZGVyOjFweCBzb2xpZCAjYmJiYmJiOworICBib3JkZXItdG9wOjA7CisgIGJvcmRlci1sZWZ0OjA7CisgIGJvcmRlci1yaWdodDowOworfQorCisjbGV0dGVycyA+IGEsICNsZXR0ZXJzID4gc3BhbiB7CisvKiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsqLworICBjb2xvcjogIzg1ODQ4NDsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIGZvbnQtc2l6ZTogOHB0OworICB0ZXh0LXNoYWRvdzogI2ZmZmZmZiAwIDFweCAwOworICBwYWRkaW5nLXJpZ2h0OiAycHg7Cit9CisKKyNsZXR0ZXJzID4gc3BhbiB7CisgIGNvbG9yOiAjYmJiOworfQorICAKKyN0cGwgeworICBkaXNwbGF5OiBibG9jazsKKyAgcG9zaXRpb246IGZpeGVkOworICBvdmVyZmxvdzogYXV0bzsKKyAgcmlnaHQ6IDA7CisgIGxlZnQ6IDA7CisgIGJvdHRvbTogMDsKKyAgdG9wOiA1cHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgZGlzcGxheTogYmxvY2s7Cit9CisKKyN0cGwgLnBhY2toaWRlIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIGZsb2F0OiByaWdodDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgY29sb3I6IHdoaXRlOworfQorCisjdHBsIC5wYWNrZm9jdXMgeworICBkaXNwbGF5OiBibG9jazsKKyAgZmxvYXQ6IHJpZ2h0OworICBmb250LXdlaWdodDogbm9ybWFsOworICBjb2xvcjogd2hpdGU7Cit9CisKKyN0cGwgLnBhY2thZ2VzID4gb2wgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGFkZmU2OworICAvKm1hcmdpbi1ib3R0b206IDVweDsqLworfQorCisvKiN0cGwgLnBhY2thZ2VzID4gb2wgPiBsaSB7CisgIG1hcmdpbi1ib3R0b206IDFweDsKK30qLworCisjdHBsIC5wYWNrYWdlcyA+IGxpID4gYSB7CisgIHBhZGRpbmc6IDBweCA1cHg7Cit9CisKKyN0cGwgLnBhY2thZ2VzID4gbGkgPiBhLnRwbHNob3cgeworICBkaXNwbGF5OiBibG9jazsKKyAgY29sb3I6IHdoaXRlOworICBmb250LXdlaWdodDogYm9sZDsKKyAgZGlzcGxheTogYmxvY2s7CisgIHRleHQtc2hhZG93OiAjMDAwMDAwIDAgMXB4IDA7Cit9CisKKyN0cGwgb2wgPiBsaS5wYWNrIHsKKyAgcGFkZGluZzogM3B4IDVweDsKKyAgYmFja2dyb3VuZDogdXJsKCJwYWNrYWdlc2JnLmdpZiIpOworICBiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDsKKyAgbWluLWhlaWdodDogMTRweDsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzZlODA4ZTsKK30KKworI3RwbCBvbCA+IGxpIHsKKyAgZGlzcGxheTogYmxvY2s7Cit9CisKKyN0cGwgLnRlbXBsYXRlcyA+IGxpIHsKKyAgcGFkZGluZy1sZWZ0OiA1cHg7CisgIG1pbi1oZWlnaHQ6IDE4cHg7Cit9CisKKyN0cGwgb2wgPiBsaSAuaWNvbiB7CisgIHBhZGRpbmctcmlnaHQ6IDVweDsKKyAgYm90dG9tOiAtMnB4OworICBwb3NpdGlvbjogcmVsYXRpdmU7Cit9CisKKyN0cGwgLnRlbXBsYXRlcyBkaXYucGxhY2Vob2xkZXIgeworICBwYWRkaW5nLXJpZ2h0OiA1cHg7CisgIHdpZHRoOiAxM3B4OworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cit9CisKKyN0cGwgLnRlbXBsYXRlcyBzcGFuLnRwbExpbmsgeworICBwYWRkaW5nLWxlZnQ6IDVweDsKK30KKworI2NvbnRlbnQgeworICBib3JkZXItbGVmdC13aWR0aDogMXB4OworICBib3JkZXItbGVmdC1jb2xvcjogYmxhY2s7CisgIGJvcmRlci1sZWZ0LXN0eWxlOiB3aGl0ZTsKKyAgcmlnaHQ6IDBweDsKKyAgbGVmdDogMHB4OworICBib3R0b206IDBweDsKKyAgdG9wOiAwcHg7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgbWFyZ2luLWxlZnQ6IDMwMHB4OworICBkaXNwbGF5OiBibG9jazsKK30KKworI2NvbnRlbnQgPiBpZnJhbWUgeworICBkaXNwbGF5OiBibG9jazsKKyAgaGVpZ2h0OiAxMDAlOworICB3aWR0aDogMTAwJTsKK30KKworLnVpLWxheW91dC1wYW5lIHsKKyAgYmFja2dyb3VuZDogI0ZGRjsKKyAgb3ZlcmZsb3c6IGF1dG87Cit9CisKKy51aS1sYXlvdXQtcmVzaXplciB7CisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdmaWx0ZXJiZy5naWYnKTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZGVkZWU7IC8qIGxpZ2h0IGdyYXkgKi8KKyAgYm9yZGVyOjFweCBzb2xpZCAjYmJiYmJiOworICBib3JkZXItdG9wOjA7CisgIGJvcmRlci1ib3R0b206MDsKKyAgYm9yZGVyLWxlZnQ6IDA7Cit9CisKKy51aS1sYXlvdXQtdG9nZ2xlciB7CisgICAgYmFja2dyb3VuZDogI0FBQTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9pbmRleC5qcyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2luZGV4LmpzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk2Njg5YWUKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9pbmRleC5qcwpAQCAtMCwwICsxLDUzNiBAQAorLy8gwqkgMjAwOeKAkzIwMTAgRVBGTC9MQU1QCisvLyBjb2RlIGJ5IEdpbGxlcyBEdWJvY2hldCB3aXRoIGNvbnRyaWJ1dGlvbnMgYnkgSm9oYW5uZXMgUnVkb2xwaCBhbmQgInNwaXJvcyIKKwordmFyIHRvcExldmVsVGVtcGxhdGVzID0gdW5kZWZpbmVkOwordmFyIHRvcExldmVsUGFja2FnZXMgPSB1bmRlZmluZWQ7CisKK3ZhciBzY2hlZHVsZXIgPSB1bmRlZmluZWQ7CisKK3ZhciBraW5kRmlsdGVyU3RhdGUgPSB1bmRlZmluZWQ7Cit2YXIgZm9jdXNGaWx0ZXJTdGF0ZSA9IHVuZGVmaW5lZDsKKwordmFyIHRpdGxlID0gJChkb2N1bWVudCkuYXR0cigndGl0bGUnKTsKKwordmFyIGxhc3RIYXNoID0gIiI7CisKKyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgICQoJ2JvZHknKS5sYXlvdXQoeworICAgICAgICB3ZXN0X19zaXplOiAnMjAlJywKKyAgICAgICAgY2VudGVyX19tYXNrQ29udGVudHM6IHRydWUKKyAgICB9KTsKKyAgICAkKCcjYnJvd3NlcicpLmxheW91dCh7CisgICAgICAgIGNlbnRlcl9fcGFuZVNlbGVjdG9yOiAiLnVpLXdlc3QtY2VudGVyIgorICAgICAgICAvLyxjZW50ZXJfX2luaXRDbG9zZWQ6dHJ1ZQorICAgICAgICAsbm9ydGhfX3BhbmVTZWxlY3RvcjogIi51aS13ZXN0LW5vcnRoIgorICAgIH0pOworICAgICQoJ2lmcmFtZScpLmJpbmQoImxvYWQiLCBmdW5jdGlvbigpeworICAgICAgICB2YXIgc3VidGl0bGUgPSAkKHRoaXMpLmNvbnRlbnRzKCkuZmluZCgndGl0bGUnKS50ZXh0KCk7CisgICAgICAgICQoZG9jdW1lbnQpLmF0dHIoJ3RpdGxlJywgKHRpdGxlID8gdGl0bGUgKyAiIC0gIiA6ICIiKSArIHN1YnRpdGxlKTsKKworICAgICAgICBzZXRVcmxGcmFnbWVudEZyb21GcmFtZVNyYygpOworICAgIH0pOworCisgICAgLy8gd29ya2Fyb3VuZCBmb3IgSUUncyBpZnJhbWUgc2l6aW5nIGxhY2sgb2Ygc21hcnRuZXNzCisgICAgaWYoJC5icm93c2VyLm1zaWUpIHsKKyAgICAgICAgZnVuY3Rpb24gZml4SUZyYW1lKCkgeworICAgICAgICAgICAgJCgnaWZyYW1lJykuaGVpZ2h0KCQod2luZG93KS5oZWlnaHQoKSApCisgICAgICAgIH0KKyAgICAgICAgJCgnaWZyYW1lJykuYmluZCgibG9hZCIsZml4SUZyYW1lKQorICAgICAgICAkKCdpZnJhbWUnKS5iaW5kKCJyZXNpemUiLGZpeElGcmFtZSkKKyAgICB9CisKKyAgICBzY2hlZHVsZXIgPSBuZXcgU2NoZWR1bGVyKCk7CisgICAgc2NoZWR1bGVyLmFkZExhYmVsKCJpbml0IiwgMSk7CisgICAgc2NoZWR1bGVyLmFkZExhYmVsKCJmb2N1cyIsIDIpOworICAgIHNjaGVkdWxlci5hZGRMYWJlbCgiZmlsdGVyIiwgNCk7CisKKyAgICBwcmVwYXJlRW50aXR5TGlzdCgpOworCisgICAgY29uZmlndXJlVGV4dEZpbHRlcigpOworICAgIGNvbmZpZ3VyZUtpbmRGaWx0ZXIoKTsKKyAgICBjb25maWd1cmVFbnRpdHlMaXN0KCk7CisKKyAgICBzZXRGcmFtZVNyY0Zyb21VcmxGcmFnbWVudCgpOworCisgICAgLy8gSWYgdGhlIHVybCBmcmFnbWVudCBjaGFuZ2VzLCBhZGp1c3QgdGhlIHNyYyBvZiBpZnJhbWUgInRlbXBsYXRlIi4KKyAgICAkKHdpbmRvdykuYmluZCgnaGFzaGNoYW5nZScsIGZ1bmN0aW9uKCkgeworICAgICAgaWYobGFzdEZyYWdtZW50ICE9IHdpbmRvdy5sb2NhdGlvbi5oYXNoKSB7CisgICAgICAgIGxhc3RGcmFnbWVudCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworICAgICAgICBzZXRGcmFtZVNyY0Zyb21VcmxGcmFnbWVudCgpOworICAgICAgfQorICAgIH0pOworfSk7CisKKy8vIFNldCB0aGUgaWZyYW1lJ3Mgc3JjIGFjY29yZGluZyB0byB0aGUgZnJhZ21lbnQgb2YgdGhlIGN1cnJlbnQgdXJsLgorLy8gZnJhZ21lbnQgPSAiI3NjYWxhLkVpdGhlciIgPT4gaWZyYW1lIHVybCA9ICJzY2FsYS9FaXRoZXIuaHRtbCIKKy8vIGZyYWdtZW50ID0gIiNzY2FsYS5FaXRoZXJAaXNSaWdodDpCb29sZWFuIiA9PiBpZnJhbWUgdXJsID0gInNjYWxhL0VpdGhlci5odG1sI2lzUmlnaHQ6Qm9vbGVhbiIKK2Z1bmN0aW9uIHNldEZyYW1lU3JjRnJvbVVybEZyYWdtZW50KCkgeworICB2YXIgZnJhZ21lbnQgPSBsb2NhdGlvbi5oYXNoLnNsaWNlKDEpOworICBpZihmcmFnbWVudCkgeworICAgIHZhciBsb2MgPSBmcmFnbWVudC5zcGxpdCgiQCIpWzBdLnJlcGxhY2UoL1wuL2csICIvIik7CisgICAgaWYobG9jLmluZGV4T2YoIi5odG1sIikgPCAwKSBsb2MgKz0gIi5odG1sIjsKKyAgICBpZihmcmFnbWVudC5pbmRleE9mKCdAJykgPiAwKSBsb2MgKz0gKCIjIiArIGZyYWdtZW50LnNwbGl0KCJAIiwgMilbMV0pOworICAgIGZyYW1lc1sidGVtcGxhdGUiXS5sb2NhdGlvbi5yZXBsYWNlKGxvYyk7CisgIH0KKyAgZWxzZQorICAgIGZyYW1lc1sidGVtcGxhdGUiXS5sb2NhdGlvbi5yZXBsYWNlKCJwYWNrYWdlLmh0bWwiKTsKK30KKworLy8gU2V0IHRoZSB1cmwgZnJhZ21lbnQgYWNjb3JkaW5nIHRvIHRoZSBzcmMgb2YgdGhlIGlmcmFtZSAidGVtcGxhdGUiLgorLy8gaWZyYW1lIHVybCA9ICJzY2FsYS9FaXRoZXIuaHRtbCIgID0+ICB1cmwgZnJhZ21lbnQgPSAiI3NjYWxhLkVpdGhlciIKKy8vIGlmcmFtZSB1cmwgPSAic2NhbGEvRWl0aGVyLmh0bWwjaXNSaWdodDpCb29sZWFuIiAgPT4gIHVybCBmcmFnbWVudCA9ICIjc2NhbGEuRWl0aGVyQGlzUmlnaHQ6Qm9vbGVhbiIKK2Z1bmN0aW9uIHNldFVybEZyYWdtZW50RnJvbUZyYW1lU3JjKCkgeworICB0cnkgeworICAgIHZhciBjb21tb25MZW5ndGggPSBsb2NhdGlvbi5wYXRobmFtZS5sYXN0SW5kZXhPZigiLyIpOworICAgIHZhciBmcmFtZUxvY2F0aW9uID0gZnJhbWVzWyJ0ZW1wbGF0ZSJdLmxvY2F0aW9uOworICAgIHZhciByZWxhdGl2ZVBhdGggPSBmcmFtZUxvY2F0aW9uLnBhdGhuYW1lLnNsaWNlKGNvbW1vbkxlbmd0aCArIDEpOworCisgICAgaWYoIXJlbGF0aXZlUGF0aCB8fCBmcmFtZUxvY2F0aW9uLnBhdGhuYW1lLmluZGV4T2YoIi8iKSA8IDApCisgICAgICByZXR1cm47CisKKyAgICAvLyBBZGQgIywgcmVtb3ZlICIuaHRtbCIgYW5kIHJlcGxhY2UgIi8iIHdpdGggIi4iCisgICAgZnJhZ21lbnQgPSAiIyIgKyByZWxhdGl2ZVBhdGgucmVwbGFjZSgvXC5odG1sJC8sICIiKS5yZXBsYWNlKC9cLy9nLCAiLiIpOworCisgICAgLy8gQWRkIHRoZSBmcmFtZSdzIGhhc2ggYWZ0ZXIgYW4gQAorICAgIGlmKGZyYW1lTG9jYXRpb24uaGFzaCkgZnJhZ21lbnQgKz0gKCJAIiArIGZyYW1lTG9jYXRpb24uaGFzaC5zbGljZSgxKSk7CisKKyAgICAvLyBVc2UgcmVwbGFjZSB0byBub3QgYWRkIGhpc3RvcnkgaXRlbXMKKyAgICBsYXN0RnJhZ21lbnQgPSBmcmFnbWVudDsKKyAgICBsb2NhdGlvbi5yZXBsYWNlKGZyYWdtZW50KTsKKyAgfQorICBjYXRjaChlKSB7CisgICAgLy8gQ2hyb21lIGRvZXNuJ3QgYWxsb3cgcmVhZGluZyB0aGUgaWZyYW1lJ3MgbG9jYXRpb24gd2hlbgorICAgIC8vIHVzZWQgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLgorICB9Cit9CisKK3ZhciBJbmRleCA9IHt9OworCisoZnVuY3Rpb24gKG5zKSB7CisgICAgZnVuY3Rpb24gb3BlbkxpbmsodCwgdHlwZSkgeworICAgICAgICB2YXIgaHJlZjsKKyAgICAgICAgaWYgKHR5cGUgPT0gJ29iamVjdCcpIHsKKyAgICAgICAgICAgIGhyZWYgPSB0WydvYmplY3QnXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGhyZWYgPSB0WydjbGFzcyddIHx8IHRbJ3RyYWl0J10gfHwgdFsnY2FzZSBjbGFzcyddIHx8IHRbJ3R5cGUnXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgJzxhIGNsYXNzPSJ0cGxzaG93IiB0YXJnZXQ9InRlbXBsYXRlIiBocmVmPSInLAorICAgICAgICAgICAgaHJlZiwKKyAgICAgICAgICAgICciPjxpbWcgd2lkdGg9IjEzIiBoZWlnaHQ9IjEzIiBjbGFzcz0iJywKKyAgICAgICAgICAgIHR5cGUsCisgICAgICAgICAgICAnIGljb24iIHNyYz0ibGliLycsCisgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgJy5wbmciIC8+JworICAgICAgICBdLmpvaW4oJycpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNyZWF0ZVBhY2thZ2VIZWFkZXIocGFjaykgeworICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgJzxsaSBjbGFzcz0icGFjayI+JywKKyAgICAgICAgICAgICc8YSBjbGFzcz0icGFja2ZvY3VzIj5mb2N1czwvYT48YSBjbGFzcz0icGFja2hpZGUiPmhpZGU8L2E+JywKKyAgICAgICAgICAgICc8YSBjbGFzcz0idHBsc2hvdyIgdGFyZ2V0PSJ0ZW1wbGF0ZSIgaHJlZj0iJywKKyAgICAgICAgICAgIHBhY2sucmVwbGFjZSgvXC4vZywgJy8nKSwKKyAgICAgICAgICAgICcvcGFja2FnZS5odG1sIj4nLAorICAgICAgICAgICAgcGFjaywKKyAgICAgICAgICAgICc8L2E+PC9saT4nCisgICAgICAgIF0uam9pbignJyk7CisgICAgfTsKKworICAgIGZ1bmN0aW9uIGNyZWF0ZUxpc3RJdGVtKHRlbXBsYXRlKSB7CisgICAgICAgIHZhciBpbm5lciA9ICcnOworCisKKyAgICAgICAgaWYgKHRlbXBsYXRlLm9iamVjdCkgeworICAgICAgICAgICAgaW5uZXIgKz0gb3BlbkxpbmsodGVtcGxhdGUsICdvYmplY3QnKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0ZW1wbGF0ZVsnY2xhc3MnXSB8fCB0ZW1wbGF0ZVsndHJhaXQnXSB8fCB0ZW1wbGF0ZVsnY2FzZSBjbGFzcyddIHx8IHRlbXBsYXRlWyd0eXBlJ10pIHsKKyAgICAgICAgICAgIGlubmVyICs9IChpbm5lciA9PSAnJykgPworICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJwbGFjZWhvbGRlciIgLz4nIDogJzwvYT4nOworICAgICAgICAgICAgaW5uZXIgKz0gb3BlbkxpbmsodGVtcGxhdGUsIHRlbXBsYXRlWyd0cmFpdCddID8gJ3RyYWl0JyA6IHRlbXBsYXRlWyd0eXBlJ10gPyAndHlwZScgOiAnY2xhc3MnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlubmVyICs9ICc8ZGl2IGNsYXNzPSJwbGFjZWhvbGRlciIvPic7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgJzxsaT4nLAorICAgICAgICAgICAgaW5uZXIsCisgICAgICAgICAgICAnPHNwYW4gY2xhc3M9InRwbExpbmsiPicsCisgICAgICAgICAgICB0ZW1wbGF0ZS5uYW1lLnJlcGxhY2UoL14uKlwuLywgJycpLAorICAgICAgICAgICAgJzwvc3Bhbj48L2E+PC9saT4nCisgICAgICAgIF0uam9pbignJyk7CisgICAgfQorCisKKyAgICBucy5jcmVhdGVQYWNrYWdlVHJlZSA9IGZ1bmN0aW9uIChwYWNrLCBtYXRjaGVkLCBmb2N1c2VkKSB7CisgICAgICAgIHZhciBodG1sID0gJC5tYXAobWF0Y2hlZCwgZnVuY3Rpb24gKGNoaWxkLCBpKSB7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGlzdEl0ZW0oY2hpbGQpOworICAgICAgICB9KS5qb2luKCcnKTsKKworICAgICAgICB2YXIgaGVhZGVyOworICAgICAgICBpZiAoZm9jdXNlZCAmJiBwYWNrID09IGZvY3VzZWQpIHsKKyAgICAgICAgICAgIGhlYWRlciA9ICcnOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaGVhZGVyID0gY3JlYXRlUGFja2FnZUhlYWRlcihwYWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICAnPG9sIGNsYXNzPSJwYWNrYWdlcyI+JywKKyAgICAgICAgICAgIGhlYWRlciwKKyAgICAgICAgICAgICc8b2wgY2xhc3M9InRlbXBsYXRlcyI+JywKKyAgICAgICAgICAgIGh0bWwsCisgICAgICAgICAgICAnPC9vbD48L29sPicKKyAgICAgICAgXS5qb2luKCcnKTsKKyAgICB9CisKKyAgICBucy5rZXlzID0gZnVuY3Rpb24gKG9iaikgeworICAgICAgICB2YXIgcmVzdWx0ID0gW107CisgICAgICAgIHZhciBrZXk7CisgICAgICAgIGZvciAoa2V5IGluIG9iaikgeworICAgICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZhciBoaWRkZW5QYWNrYWdlcyA9IHt9OworCisgICAgZnVuY3Rpb24gc3ViUGFja2FnZXMocGFjaykgeworICAgICAgICByZXR1cm4gJC5ncmVwKCQoJyN0cGwgb2wucGFja2FnZXMnKSwgZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4KSB7CisgICAgICAgICAgICB2YXIgcGFjayA9ICQoJ2xpLnBhY2sgPiAudHBsc2hvdycsIGVsZW1lbnQpLnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBwYWNrLmluZGV4T2YocGFjayArICcuJykgPT0gMDsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgbnMuaGlkZVBhY2thZ2UgPSBmdW5jdGlvbiAob2wpIHsKKyAgICAgICAgdmFyIHNlbGVjdGVkID0gJCgnbGkucGFjayA+IC50cGxzaG93Jywgb2wpLnRleHQoKTsKKyAgICAgICAgaGlkZGVuUGFja2FnZXNbc2VsZWN0ZWRdID0gdHJ1ZTsKKworICAgICAgICAkKCdvbC50ZW1wbGF0ZXMnLCBvbCkuaGlkZSgpOworCisgICAgICAgICQuZWFjaChzdWJQYWNrYWdlcyhzZWxlY3RlZCksIGZ1bmN0aW9uIChpbmRleCwgZWxlbWVudCkgeworICAgICAgICAgICAgJChlbGVtZW50KS5oaWRlKCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIG5zLnNob3dQYWNrYWdlID0gZnVuY3Rpb24gKG9sLCBzdGF0ZSkgeworICAgICAgICB2YXIgc2VsZWN0ZWQgPSAkKCdsaS5wYWNrID4gLnRwbHNob3cnLCBvbCkudGV4dCgpOworICAgICAgICBoaWRkZW5QYWNrYWdlc1tzZWxlY3RlZF0gPSBmYWxzZTsKKworICAgICAgICAkKCdvbC50ZW1wbGF0ZXMnLCBvbCkuc2hvdygpOworCisgICAgICAgICQuZWFjaChzdWJQYWNrYWdlcyhzZWxlY3RlZCksIGZ1bmN0aW9uIChpbmRleCwgZWxlbWVudCkgeworICAgICAgICAgICAgJChlbGVtZW50KS5zaG93KCk7CisKKyAgICAgICAgICAgIC8vIFdoZW4gdGhlIGZpbHRlciBpcyBpbiAicGFja3MiIHN0YXRlLAorICAgICAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBzaG93IHRoZSBgLnRlbXBsYXRlc2AKKyAgICAgICAgICAgIHZhciBrZXkgPSAkKCdsaS5wYWNrID4gLnRwbHNob3cnLCBlbGVtZW50KS50ZXh0KCk7CisgICAgICAgICAgICBpZiAoaGlkZGVuUGFja2FnZXNba2V5XSB8fCBzdGF0ZSA9PSAncGFja3MnKSB7CisgICAgICAgICAgICAgICAgJCgnb2wudGVtcGxhdGVzJywgZWxlbWVudCkuaGlkZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKK30pKEluZGV4KTsKKworZnVuY3Rpb24gY29uZmlndXJlRW50aXR5TGlzdCgpIHsKKyAgICBraW5kRmlsdGVyU3luYygpOworICAgIGNvbmZpZ3VyZUhpZGVGaWx0ZXIoKTsKKyAgICBjb25maWd1cmVGb2N1c0ZpbHRlcigpOworICAgIHRleHRGaWx0ZXIoKTsKK30KKworLyogVXBkYXRlcyB0aGUgbGlzdCBvZiBlbnRpdGllcyAoaS5lLiB0aGUgY29udGVudCBvZiB0aGUgI3RwbCBlbGVtZW50KSBmcm9tIHRoZSByYXcgZm9ybSBnZW5lcmF0ZWQgYnkgU2NhbGFkb2MgdG8gYQorICAgZm9ybSBzdWl0YWJsZSBmb3IgZGlzcGxheS4gSW4gcGFydGljdWxhciwgaXQgYWRkcyBjbGFzcyBhbmQgb2JqZWN0IGV0Yy4gaWNvbnMsIGFuZCBpdCBjb25maWd1cmVzIGxpbmtzIHRvIG9wZW4gaW4KKyAgIHRoZSByaWdodCBmcmFtZS4gRnVydGhlcm1vcmUsIGl0IHNldHMgdGhlIHR3byByZWZlcmVuY2UgdG9wLWxldmVsIGVudGl0aWVzIGxpc3RzICh0b3BMZXZlbFRlbXBsYXRlcyBhbmQKKyAgIHRvcExldmVsUGFja2FnZXMpIHRvIHNlcnZlIGFzIHJlZmVyZW5jZSBmb3IgcmVzZXR0aW5nIHRoZSBsaXN0IHdoZW4gbmVlZGVkLgorICAgQmUgYWR2aXNlZDogdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSwgb24gcGFnZSBsb2FkLiAqLworZnVuY3Rpb24gcHJlcGFyZUVudGl0eUxpc3QoKSB7CisgICAgdmFyIGNsYXNzSWNvbiA9ICQoIiNsaWJyYXJ5ID4gaW1nLmNsYXNzIik7CisgICAgdmFyIHRyYWl0SWNvbiA9ICQoIiNsaWJyYXJ5ID4gaW1nLnRyYWl0Iik7CisgICAgdmFyIHR5cGVJY29uID0gJCgiI2xpYnJhcnkgPiBpbWcudHlwZSIpOworICAgIHZhciBvYmplY3RJY29uID0gJCgiI2xpYnJhcnkgPiBpbWcub2JqZWN0Iik7CisgICAgdmFyIHBhY2thZ2VJY29uID0gJCgiI2xpYnJhcnkgPiBpbWcucGFja2FnZSIpOworCisgICAgJCgnI3RwbCBsaS5wYWNrID4gYS50cGxzaG93JykuYXR0cigidGFyZ2V0IiwgInRlbXBsYXRlIik7CisgICAgJCgnI3RwbCBsaS5wYWNrJykuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgICQoInNwYW4uY2xhc3MiLCB0aGlzKS5lYWNoKGZ1bmN0aW9uKCkgeyAkKHRoaXMpLnJlcGxhY2VXaXRoKGNsYXNzSWNvbi5jbG9uZSgpKTsgfSk7CisgICAgICAgICQoInNwYW4udHJhaXQiLCB0aGlzKS5lYWNoKGZ1bmN0aW9uKCkgeyAkKHRoaXMpLnJlcGxhY2VXaXRoKHRyYWl0SWNvbi5jbG9uZSgpKTsgfSk7CisgICAgICAgICQoInNwYW4udHlwZSIsIHRoaXMpLmVhY2goZnVuY3Rpb24oKSB7ICQodGhpcykucmVwbGFjZVdpdGgodHlwZUljb24uY2xvbmUoKSk7IH0pOworICAgICAgICAkKCJzcGFuLm9iamVjdCIsIHRoaXMpLmVhY2goZnVuY3Rpb24oKSB7ICQodGhpcykucmVwbGFjZVdpdGgob2JqZWN0SWNvbi5jbG9uZSgpKTsgfSk7CisgICAgICAgICQoInNwYW4ucGFja2FnZSIsIHRoaXMpLmVhY2goZnVuY3Rpb24oKSB7ICQodGhpcykucmVwbGFjZVdpdGgocGFja2FnZUljb24uY2xvbmUoKSk7IH0pOworICAgIH0pOworICAgICQoJyN0cGwgbGkucGFjaycpCisgICAgICAgIC5wcmVwZW5kKCI8YSBjbGFzcz0ncGFja2hpZGUnPmhpZGU8L2E+IikKKyAgICAgICAgLnByZXBlbmQoIjxhIGNsYXNzPSdwYWNrZm9jdXMnPmZvY3VzPC9hPiIpOworfQorCisvKiBIYW5kbGVzIGFsbCBrZXkgcHJlc3NlcyB3aGlsZSBzY3JvbGxpbmcgYXJvdW5kIHdpdGgga2V5Ym9hcmQgc2hvcnRjdXRzIGluIGxlZnQgcGFuZWwgKi8KK2Z1bmN0aW9uIGtleWJvYXJkU2Nyb2xsZG93bkxlZnRQYW5lKCkgeworICAgIHNjaGVkdWxlci5hZGQoImluaXQiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgJCgiI3RleHRmaWx0ZXIgaW5wdXQiKS5ibHVyKCk7CisgICAgICAgIHZhciAkaXRlbXMgPSAkKCIjdHBsIGxpIik7CisgICAgICAgICRpdGVtcy5maXJzdCgpLmFkZENsYXNzKCdzZWxlY3RlZCcpOworCisgICAgICAgICQod2luZG93KS5iaW5kKCJrZXlkb3duIiwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgdmFyICRvbGQgPSAkaXRlbXMuZmlsdGVyKCcuc2VsZWN0ZWQnKSwKKyAgICAgICAgICAgICAgICAkbmV3OworCisgICAgICAgICAgICBzd2l0Y2ggKCBlLmtleUNvZGUgKSB7CisKKyAgICAgICAgICAgIGNhc2UgOTogLy8gdGFiCisgICAgICAgICAgICAgICAgJG9sZC5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAxMzogLy8gZW50ZXIKKyAgICAgICAgICAgICAgICAkb2xkLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpOworICAgICAgICAgICAgICAgIHZhciAkdXJsID0gJG9sZC5jaGlsZHJlbigpLmZpbHRlcignYTpsYXN0JykuYXR0cignaHJlZicpOworICAgICAgICAgICAgICAgICQoIiN0ZW1wbGF0ZSIpLmF0dHIoInNyYyIsJHVybCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgMjc6IC8vIGVzY2FwZQorICAgICAgICAgICAgICAgICRvbGQucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7CisgICAgICAgICAgICAgICAgJCh3aW5kb3cpLnVuYmluZChlKTsKKyAgICAgICAgICAgICAgICAkKCIjdGV4dGZpbHRlciBpbnB1dCIpLmZvY3VzKCk7CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAzODogLy8gdXAKKyAgICAgICAgICAgICAgICAkbmV3ID0gJG9sZC5wcmV2KCk7CisKKyAgICAgICAgICAgICAgICBpZiAoISRuZXcubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgICRuZXcgPSAkb2xkLnBhcmVudCgpLnByZXYoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoJG5ldy5pcygnb2wnKSAmJiAkbmV3LmNoaWxkcmVuKCc6bGFzdCcpLmlzKCdvbCcpKSB7CisgICAgICAgICAgICAgICAgICAgICRuZXcgPSAkbmV3LmNoaWxkcmVuKCkuY2hpbGRyZW4oJzpsYXN0Jyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkbmV3LmlzKCdvbCcpKSB7CisgICAgICAgICAgICAgICAgICAgICRuZXcgPSAkbmV3LmNoaWxkcmVuKCc6bGFzdCcpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDQwOiAvLyBkb3duCisgICAgICAgICAgICAgICAgJG5ldyA9ICRvbGQubmV4dCgpOworICAgICAgICAgICAgICAgIGlmICghJG5ldy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgJG5ldyA9ICRvbGQucGFyZW50KCkucGFyZW50KCkubmV4dCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoJG5ldy5pcygnb2wnKSkgeworICAgICAgICAgICAgICAgICAgICAkbmV3ID0gJG5ldy5jaGlsZHJlbignOmZpcnN0Jyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoJG5ldy5pcygnbGknKSkgeworICAgICAgICAgICAgICAgICRvbGQucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7CisgICAgICAgICAgICAgICAgJG5ldy5hZGRDbGFzcygnc2VsZWN0ZWQnKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09IDM4KSB7CisgICAgICAgICAgICAgICAgJCh3aW5kb3cpLnVuYmluZChlKTsKKyAgICAgICAgICAgICAgICAkKCIjdGV4dGZpbHRlciBpbnB1dCIpLmZvY3VzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0pOworfQorCisvKiBDb25maWd1cmVzIHRoZSB0ZXh0IGZpbHRlciAgKi8KK2Z1bmN0aW9uIGNvbmZpZ3VyZVRleHRGaWx0ZXIoKSB7CisgICAgc2NoZWR1bGVyLmFkZCgiaW5pdCIsIGZ1bmN0aW9uKCkgeworICAgICAgICAkKCIjdGV4dGZpbHRlciIpLmFwcGVuZCgiPHNwYW4gY2xhc3M9J3ByZScvPjxzcGFuIGNsYXNzPSdpbnB1dCc+PGlucHV0IGlkPSdpbmRleC1pbnB1dCcgdHlwZT0ndGV4dCcgYWNjZXNza2V5PScvJy8+PC9zcGFuPjxzcGFuIGNsYXNzPSdwb3N0Jy8+Iik7CisgICAgICAgIHZhciBpbnB1dCA9ICQoIiN0ZXh0ZmlsdGVyIGlucHV0Iik7CisgICAgICAgIHJlc2l6ZUZpbHRlckJsb2NrKCk7CisgICAgICAgIGlucHV0LmJpbmQoJ2tleXVwJywgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09IDI3KSB7IC8vIGVzY2FwZQorICAgICAgICAgICAgICAgIGlucHV0LmF0dHIoInZhbHVlIiwgIiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT0gNDApIHsgLy8gZG93biBhcnJvdworICAgICAgICAgICAgICAgICQod2luZG93KS51bmJpbmQoImtleWRvd24iKTsKKyAgICAgICAgICAgICAgICBrZXlib2FyZFNjcm9sbGRvd25MZWZ0UGFuZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRleHRGaWx0ZXIoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGlucHV0LmJpbmQoJ2tleWRvd24nLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT0gOSkgeyAvLyB0YWIKKyAgICAgICAgICAgICAgICAkKCIjdGVtcGxhdGUiKS5jb250ZW50cygpLmZpbmQoIiNtYnJzZWwtaW5wdXQiKS5mb2N1cygpOworICAgICAgICAgICAgICAgIGlucHV0LmF0dHIoInZhbHVlIiwgIiIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRleHRGaWx0ZXIoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGlucHV0LmZvY3VzKGZ1bmN0aW9uKGV2ZW50KSB7IGlucHV0LnNlbGVjdCgpOyB9KTsKKyAgICB9KTsKKyAgICBzY2hlZHVsZXIuYWRkKCJpbml0IiwgZnVuY3Rpb24oKSB7CisgICAgICAgICQoIiN0ZXh0ZmlsdGVyID4gLnBvc3QiKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAgICAgJCgiI3RleHRmaWx0ZXIgaW5wdXQiKS5hdHRyKCJ2YWx1ZSIsICIiKTsKKyAgICAgICAgICAgIHRleHRGaWx0ZXIoKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGNvbXBpbGVQYXR0ZXJuKHF1ZXJ5KSB7CisgICAgdmFyIGVzY2FwZWQgPSBxdWVyeS5yZXBsYWNlKC8oW1wuXCpcK1w/XHxcKFwpXFtcXVxcXSkvZywgJ1xcJDEnKTsKKworICAgIGlmIChxdWVyeS50b0xvd2VyQ2FzZSgpICE9IHF1ZXJ5KSB7CisgICAgICAgIC8vIFJlZ2V4cCB0aGF0IG1hdGNoZXMgQ2FtZWxDYXNlIHN1YmJpdHM6ICJCaVNlIiBpcworICAgICAgICAvLyAiW2Etel0qQmlbYS16XSpTZSIgYW5kIG1hdGNoZXMgIkJpdFNldCIsICJBQml0U2V0IiwgLi4uCisgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGVzY2FwZWQucmVwbGFjZSgvKFtBLVpdKS9nLCJbYS16XSokMSIpKTsKKyAgICB9CisgICAgZWxzZSB7IC8vIGlmIHF1ZXJ5IGlzIGFsbCBsb3dlciBjYXNlIG1ha2UgYSBub3JtYWwgY2FzZSBpbnNlbnNpdGl2ZSBzZWFyY2gKKyAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoZXNjYXBlZCwgImkiKTsKKyAgICB9Cit9CisKKy8vIEZpbHRlcnMgYWxsIGZvY3VzZWQgdGVtcGxhdGVzIGFuZCBwYWNrYWdlcy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgbWFkZSBsZXNzLWJsb2NraW5nLgorLy8gICBAcGFyYW0gcXVlcnkgVGhlIHN0cmluZyBvZiB0aGUgcXVlcnkKK2Z1bmN0aW9uIHRleHRGaWx0ZXIoKSB7CisgICAgc2NoZWR1bGVyLmNsZWFyKCJmaWx0ZXIiKTsKKworICAgICQoJyN0cGwnKS5odG1sKCcnKTsKKworICAgIHZhciBxdWVyeSA9ICQoIiN0ZXh0ZmlsdGVyIGlucHV0IikuYXR0cigidmFsdWUiKSB8fCAnJzsKKyAgICB2YXIgcXVlcnlSZWdFeHAgPSBjb21waWxlUGF0dGVybihxdWVyeSk7CisKKyAgICB2YXIgaW5kZXggPSAwOworCisgICAgdmFyIHNlYXJjaExvb3AgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBwYWNrYWdlcyA9IEluZGV4LmtleXMoSW5kZXguUEFDS0FHRVMpLnNvcnQoKTsKKworICAgICAgICB3aGlsZSAocGFja2FnZXNbaW5kZXhdKSB7CisgICAgICAgICAgICB2YXIgcGFjayA9IHBhY2thZ2VzW2luZGV4XTsKKyAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IEluZGV4LlBBQ0tBR0VTW3BhY2tdOworICAgICAgICAgICAgaW5kZXgrKzsKKworICAgICAgICAgICAgaWYgKGZvY3VzRmlsdGVyU3RhdGUpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFjayA9PSBmb2N1c0ZpbHRlclN0YXRlIHx8CisgICAgICAgICAgICAgICAgICAgIHBhY2suaW5kZXhPZihmb2N1c0ZpbHRlclN0YXRlICsgJy4nKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBtYXRjaGVkID0gJC5ncmVwKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQsIGkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcXVlcnlSZWdFeHAudGVzdChjaGlsZC5uYW1lKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpZiAobWF0Y2hlZC5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgJCgnI3RwbCcpLmFwcGVuZChJbmRleC5jcmVhdGVQYWNrYWdlVHJlZShwYWNrLCBtYXRjaGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNGaWx0ZXJTdGF0ZSkpOworICAgICAgICAgICAgICAgIHNjaGVkdWxlci5hZGQoJ2ZpbHRlcicsIHNlYXJjaExvb3ApOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICQoJyN0cGwgYS5wYWNrZm9jdXMnKS5jbGljayhmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBmb2N1c0ZpbHRlcigkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpKTsKKyAgICAgICAgfSk7CisgICAgICAgIGNvbmZpZ3VyZUhpZGVGaWx0ZXIoKTsKKyAgICB9OworCisgICAgc2NoZWR1bGVyLmFkZCgnZmlsdGVyJywgc2VhcmNoTG9vcCk7Cit9CisKKy8qIENvbmZpZ3VyZXMgdGhlIGhpZGUgdG9vbCBieSBhZGRpbmcgdGhlIGhpZGUgbGluayB0byBhbGwgcGFja2FnZXMuICovCitmdW5jdGlvbiBjb25maWd1cmVIaWRlRmlsdGVyKCkgeworICAgICQoJyN0cGwgbGkucGFjayBhLnBhY2toaWRlJykuY2xpY2soZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgcGFja2hpZGUgPSAkKHRoaXMpCisgICAgICAgIHZhciBhY3Rpb24gPSBwYWNraGlkZS50ZXh0KCk7CisKKyAgICAgICAgdmFyIG9sID0gJCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKTsKKworICAgICAgICBpZiAoYWN0aW9uID09ICJoaWRlIikgeworICAgICAgICAgICAgSW5kZXguaGlkZVBhY2thZ2Uob2wpOworICAgICAgICAgICAgcGFja2hpZGUudGV4dCgic2hvdyIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgSW5kZXguc2hvd1BhY2thZ2Uob2wsIGtpbmRGaWx0ZXJTdGF0ZSk7CisgICAgICAgICAgICBwYWNraGlkZS50ZXh0KCJoaWRlIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0pOworfQorCisvKiBDb25maWd1cmVzIHRoZSBmb2N1cyB0b29sIGJ5IGFkZGluZyB0aGUgZm9jdXMgYmFyIGluIHRoZSBmaWx0ZXIgYm94IChpbml0aWFsbHkgaGlkZGVuKSwgYW5kIGJ5IGFkZGluZyB0aGUgZm9jdXMKKyAgIGxpbmsgdG8gYWxsIHBhY2thZ2VzLiAqLworZnVuY3Rpb24gY29uZmlndXJlRm9jdXNGaWx0ZXIoKSB7CisgICAgc2NoZWR1bGVyLmFkZCgiaW5pdCIsIGZ1bmN0aW9uKCkgeworICAgICAgICBmb2N1c0ZpbHRlclN0YXRlID0gbnVsbDsKKyAgICAgICAgaWYgKCQoIiNmb2N1c2ZpbHRlciIpLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICAkKCIjZmlsdGVyIikuYXBwZW5kKCI8ZGl2IGlkPSdmb2N1c2ZpbHRlcic+Zm9jdXNlZCBvbiA8c3BhbiBjbGFzcz0nZm9jdXNjb2xsJz48L3NwYW4+IDxhIGNsYXNzPSdmb2N1c3JlbW92ZSc+PGltZyBjbGFzcz0naWNvbicgc3JjPSdsaWIvcmVtb3ZlLnBuZycvPjwvYT48L2Rpdj4iKTsKKyAgICAgICAgICAgICQoIiNmb2N1c2ZpbHRlciA+IC5mb2N1c3JlbW92ZSIpLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICAgICAgdGV4dEZpbHRlcigpOworCisgICAgICAgICAgICAgICAgJCgiI2ZvY3VzZmlsdGVyIikuaGlkZSgpOworICAgICAgICAgICAgICAgICQoIiNraW5kZmlsdGVyIikuc2hvdygpOworICAgICAgICAgICAgICAgIHJlc2l6ZUZpbHRlckJsb2NrKCk7CisgICAgICAgICAgICAgICAgZm9jdXNGaWx0ZXJTdGF0ZSA9IG51bGw7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICQoIiNmb2N1c2ZpbHRlciIpLmhpZGUoKTsKKyAgICAgICAgICAgIHJlc2l6ZUZpbHRlckJsb2NrKCk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICBzY2hlZHVsZXIuYWRkKCJpbml0IiwgZnVuY3Rpb24oKSB7CisgICAgICAgICQoJyN0cGwgbGkucGFjayBhLnBhY2tmb2N1cycpLmNsaWNrKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGZvY3VzRmlsdGVyKCQodGhpcykucGFyZW50KCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworLyogRm9jdXNlcyB0aGUgZW50aXR5IGluZGV4IG9uIGEgc3BlY2lmaWMgcGFja2FnZS4gVG8gZG8gc28sIGl0IHdpbGwgY29weSB0aGUgc3ViLXRlbXBsYXRlcyBhbmQgc3ViLXBhY2thZ2VzIG9mIHRoZQorICAgZm9jdXNlcyBwYWNrYWdlIGludG8gdGhlIHRvcC1sZXZlbCB0ZW1wbGF0ZXMgYW5kIHBhY2thZ2VzIHBvc2l0aW9uIG9mIHRoZSBpbmRleC4gVGhlIG9yaWdpbmFsIHRvcC1sZXZlbAorICAgICBAcGFyYW0gcGFja2FnZSBUaGUgPGxpPiBlbGVtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHBhY2thZ2UgaW4gdGhlIGVudGl0eSBpbmRleCAqLworZnVuY3Rpb24gZm9jdXNGaWx0ZXIocGFja2FnZSkgeworICAgIHNjaGVkdWxlci5jbGVhcigiZmlsdGVyIik7CisKKyAgICB2YXIgY3VycmVudEZvY3VzID0gJCgnbGkucGFjayA+IC50cGxzaG93JywgcGFja2FnZSkudGV4dCgpOworICAgICQoIiNmb2N1c2ZpbHRlciA+IC5mb2N1c2NvbGwiKS5lbXB0eSgpOworICAgICQoIiNmb2N1c2ZpbHRlciA+IC5mb2N1c2NvbGwiKS5hcHBlbmQoY3VycmVudEZvY3VzKTsKKworICAgICQoIiNmb2N1c2ZpbHRlciIpLnNob3coKTsKKyAgICAkKCIja2luZGZpbHRlciIpLmhpZGUoKTsKKyAgICByZXNpemVGaWx0ZXJCbG9jaygpOworICAgIGZvY3VzRmlsdGVyU3RhdGUgPSBjdXJyZW50Rm9jdXM7CisgICAga2luZEZpbHRlclN5bmMoKTsKKworICAgIHRleHRGaWx0ZXIoKTsKK30KKworZnVuY3Rpb24gY29uZmlndXJlS2luZEZpbHRlcigpIHsKKyAgICBzY2hlZHVsZXIuYWRkKCJpbml0IiwgZnVuY3Rpb24oKSB7CisgICAgICAgIGtpbmRGaWx0ZXJTdGF0ZSA9ICJhbGwiOworICAgICAgICAkKCIjZmlsdGVyIikuYXBwZW5kKCI8ZGl2IGlkPSdraW5kZmlsdGVyJz48YT5kaXNwbGF5IHBhY2thZ2VzIG9ubHk8L2E+PC9kaXY+Iik7CisgICAgICAgICQoIiNraW5kZmlsdGVyID4gYSIpLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7IGtpbmRGaWx0ZXIoInBhY2tzIik7IH0pOworICAgICAgICByZXNpemVGaWx0ZXJCbG9jaygpOworICAgIH0pOworfQorCitmdW5jdGlvbiBraW5kRmlsdGVyKGtpbmQpIHsKKyAgICBpZiAoa2luZCA9PSAicGFja3MiKSB7CisgICAgICAgIGtpbmRGaWx0ZXJTdGF0ZSA9ICJwYWNrcyI7CisgICAgICAgIGtpbmRGaWx0ZXJTeW5jKCk7CisgICAgICAgICQoIiNraW5kZmlsdGVyID4gYSIpLnJlcGxhY2VXaXRoKCI8YT5kaXNwbGF5IGFsbCBlbnRpdGllczwvYT4iKTsKKyAgICAgICAgJCgiI2tpbmRmaWx0ZXIgPiBhIikuY2xpY2soZnVuY3Rpb24oZXZlbnQpIHsga2luZEZpbHRlcigiYWxsIik7IH0pOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAga2luZEZpbHRlclN0YXRlID0gImFsbCI7CisgICAgICAgIGtpbmRGaWx0ZXJTeW5jKCk7CisgICAgICAgICQoIiNraW5kZmlsdGVyID4gYSIpLnJlcGxhY2VXaXRoKCI8YT5kaXNwbGF5IHBhY2thZ2VzIG9ubHk8L2E+Iik7CisgICAgICAgICQoIiNraW5kZmlsdGVyID4gYSIpLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7IGtpbmRGaWx0ZXIoInBhY2tzIik7IH0pOworICAgIH0KK30KKworLyogQXBwbGllcyB0aGUga2luZCBmaWx0ZXIuICovCitmdW5jdGlvbiBraW5kRmlsdGVyU3luYygpIHsKKyAgICBpZiAoa2luZEZpbHRlclN0YXRlID09ICJhbGwiIHx8IGZvY3VzRmlsdGVyU3RhdGUgIT0gbnVsbCkgeworICAgICAgICAkKCIjdHBsIGEucGFja2hpZGUiKS50ZXh0KCdoaWRlJyk7CisgICAgICAgICQoIiN0cGwgb2wudGVtcGxhdGVzIikuc2hvdygpOworICAgIH0gZWxzZSB7CisgICAgICAgICQoIiN0cGwgYS5wYWNraGlkZSIpLnRleHQoJ3Nob3cnKTsKKyAgICAgICAgJCgiI3RwbCBvbC50ZW1wbGF0ZXMiKS5oaWRlKCk7CisgICAgfQorfQorCitmdW5jdGlvbiByZXNpemVGaWx0ZXJCbG9jaygpIHsKKyAgICAkKCIjdHBsIikuY3NzKCJ0b3AiLCAkKCIjZmlsdGVyIikub3V0ZXJIZWlnaHQodHJ1ZSkpOworfQpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvanF1ZXJ5LXVpLmpzIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvanF1ZXJ5LXVpLmpzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZhYWIwY2YKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9qcXVlcnktdWkuanMKQEAgLTAsMCArMSw2IEBACisvKiEgalF1ZXJ5IFVJIC0gdjEuOS4wIC0gMjAxMi0xMC0wNQorKiBodHRwOi8vanF1ZXJ5dWkuY29tCisqIEluY2x1ZGVzOiBqcXVlcnkudWkuY29yZS5qcywganF1ZXJ5LnVpLndpZGdldC5qcywganF1ZXJ5LnVpLm1vdXNlLmpzLCBqcXVlcnkudWkucG9zaXRpb24uanMsIGpxdWVyeS51aS5hY2NvcmRpb24uanMsIGpxdWVyeS51aS5hdXRvY29tcGxldGUuanMsIGpxdWVyeS51aS5idXR0b24uanMsIGpxdWVyeS51aS5kYXRlcGlja2VyLmpzLCBqcXVlcnkudWkuZGlhbG9nLmpzLCBqcXVlcnkudWkuZHJhZ2dhYmxlLmpzLCBqcXVlcnkudWkuZHJvcHBhYmxlLmpzLCBqcXVlcnkudWkuZWZmZWN0LmpzLCBqcXVlcnkudWkuZWZmZWN0LWJsaW5kLmpzLCBqcXVlcnkudWkuZWZmZWN0LWJvdW5jZS5qcywganF1ZXJ5LnVpLmVmZmVjdC1jbGlwLmpzLCBqcXVlcnkudWkuZWZmZWN0LWRyb3AuanMsIGpxdWVyeS51aS5lZmZlY3QtZXhwbG9kZS5qcywganF1ZXJ5LnVpLmVmZmVjdC1mYWRlLmpzLCBqcXVlcnkudWkuZWZmZWN0LWZvbGQuanMsIGpxdWVyeS51aS5lZmZlY3QtaGlnaGxpZ2h0LmpzLCBqcXVlcnkudWkuZWZmZWN0LXB1bHNhdGUuanMsIGpxdWVyeS51aS5lZmZlY3Qtc2NhbGUuanMsIGpxdWVyeS51aS5lZmZlY3Qtc2hha2UuanMsIGpxdWVyeS51aS5lZmZlY3Qtc2xpZGUuanMsIGpxdWVyeS51aS5lZmZlY3QtdHJhbnNmZXIuanMsIGpxdWVyeS51aS5tZW51LmpzLCBqcXVlcnkudWkucHJvZ3Jlc3NiYXIuanMsIGpxdWVyeS51aS5yZXNpemFibGUuanMsIGpxdWVyeS51aS5zZWxlY3RhYmxlLmpzLCBqcXVlcnkudWkuc2xpZGVyLmpzLCBqcXVlcnkudWkuc29ydGFibGUuanMsIGpxdWVyeS51aS5zcGlubmVyLmpzLCBqcXVlcnkudWkudGFicy5qcywganF1ZXJ5LnVpLnRvb2x0aXAuanMKKyogQ29weXJpZ2h0IChjKSAyMDEyIGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgTGljZW5zZWQgTUlUICovCisKKyhmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkodCxuKXt2YXIgcixpLG8sdT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImFyZWEiPT09dT8ocj10LnBhcmVudE5vZGUsaT1yLm5hbWUsIXQuaHJlZnx8IWl8fHIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJtYXAiPyExOihvPWUoImltZ1t1c2VtYXA9IyIraSsiXSIpWzBdLCEhbyYmcyhvKSkpOigvaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QvLnRlc3QodSk/IXQuZGlzYWJsZWQ6ImEiPT09dT90LmhyZWZ8fG46bikmJnModCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4hZSh0KS5wYXJlbnRzKCkuYW5kU2VsZigpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBlLmNzcyh0aGlzLCJ2aXNpYmlsaXR5Iik9PT0iaGlkZGVuInx8ZS5leHByLmZpbHRlcnMuaGlkZGVuKHRoaXMpfSkubGVuZ3RofXZhciBuPTAscj0vXnVpLWlkLVxkKyQvO2UudWk9ZS51aXx8e307aWYoZS51aS52ZXJzaW9uKXJldHVybjtlLmV4dGVuZChlLnVpLHt2ZXJzaW9uOiIxLjkuMCIsa2V5Q29kZTp7QkFDS1NQQUNFOjgsQ09NTUE6MTg4LERFTEVURTo0NixET1dOOjQwLEVORDozNSxFTlRFUjoxMyxFU0NBUEU6MjcsSE9NRTozNixMRUZUOjM3LE5VTVBBRF9BREQ6MTA3LE5VTVBBRF9ERUNJTUFMOjExMCxOVU1QQURfRElWSURFOjExMSxOVU1QQURfRU5URVI6MTA4LE5VTVBBRF9NVUxUSVBMWToxMDYsTlVNUEFEX1NVQlRSQUNUOjEwOSxQQUdFX0RPV046MzQsUEFHRV9VUDozMyxQRVJJT0Q6MTkwLFJJR0hUOjM5LFNQQUNFOjMyLFRBQjo5LFVQOjM4fX0pLGUuZm4uZXh0ZW5kKHtfZm9jdXM6ZS5mbi5mb2N1cyxmb2N1czpmdW5jdGlvbih0LG4pe3JldHVybiB0eXBlb2YgdD09Im51bWJlciI/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShyKS5mb2N1cygpLG4mJm4uY2FsbChyKX0sdCl9KTp0aGlzLl9mb2N1cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHNjcm9sbFBhcmVudDpmdW5jdGlvbigpe3ZhciB0O3JldHVybiBlLmJyb3dzZXIubXNpZSYmLyhzdGF0aWN8cmVsYXRpdmUpLy50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKXx8L2Fic29sdXRlLy50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKT90PXRoaXMucGFyZW50cygpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybi8ocmVsYXRpdmV8YWJzb2x1dGV8Zml4ZWQpLy50ZXN0KGUuY3NzKHRoaXMsInBvc2l0aW9uIikpJiYvKGF1dG98c2Nyb2xsKS8udGVzdChlLmNzcyh0aGlzLCJvdmVyZmxvdyIpK2UuY3NzKHRoaXMsIm92ZXJmbG93LXkiKStlLmNzcyh0aGlzLCJvdmVyZmxvdy14IikpfSkuZXEoMCk6dD10aGlzLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4vKGF1dG98c2Nyb2xsKS8udGVzdChlLmNzcyh0aGlzLCJvdmVyZmxvdyIpK2UuY3NzKHRoaXMsIm92ZXJmbG93LXkiKStlLmNzcyh0aGlzLCJvdmVyZmxvdy14IikpfSkuZXEoMCksL2ZpeGVkLy50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKXx8IXQubGVuZ3RoP2UoZG9jdW1lbnQpOnR9LHpJbmRleDpmdW5jdGlvbihuKXtpZihuIT09dClyZXR1cm4gdGhpcy5jc3MoInpJbmRleCIsbik7aWYodGhpcy5sZW5ndGgpe3ZhciByPWUodGhpc1swXSksaSxzO3doaWxlKHIubGVuZ3RoJiZyWzBdIT09ZG9jdW1lbnQpe2k9ci5jc3MoInBvc2l0aW9uIik7aWYoaT09PSJhYnNvbHV0ZSJ8fGk9PT0icmVsYXRpdmUifHxpPT09ImZpeGVkIil7cz1wYXJzZUludChyLmNzcygiekluZGV4IiksMTApO2lmKCFpc05hTihzKSYmcyE9PTApcmV0dXJuIHN9cj1yLnBhcmVudCgpfX1yZXR1cm4gMH0sdW5pcXVlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5pZHx8KHRoaXMuaWQ9InVpLWlkLSIrICsrbil9KX0scmVtb3ZlVW5pcXVlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ci50ZXN0KHRoaXMuaWQpJiZlKHRoaXMpLnJlbW92ZUF0dHIoImlkIil9KX19KSxlKCI8YT4iKS5vdXRlcldpZHRoKDEpLmpxdWVyeXx8ZS5lYWNoKFsiV2lkdGgiLCJIZWlnaHQiXSxmdW5jdGlvbihuLHIpe2Z1bmN0aW9uIHUodCxuLHIscyl7cmV0dXJuIGUuZWFjaChpLGZ1bmN0aW9uKCl7bi09cGFyc2VGbG9hdChlLmNzcyh0LCJwYWRkaW5nIit0aGlzKSl8fDAsciYmKG4tPXBhcnNlRmxvYXQoZS5jc3ModCwiYm9yZGVyIit0aGlzKyJXaWR0aCIpKXx8MCkscyYmKG4tPXBhcnNlRmxvYXQoZS5jc3ModCwibWFyZ2luIit0aGlzKSl8fDApfSksbn12YXIgaT1yPT09IldpZHRoIj9bIkxlZnQiLCJSaWdodCJdOlsiVG9wIiwiQm90dG9tIl0scz1yLnRvTG93ZXJDYXNlKCksbz17aW5uZXJXaWR0aDplLmZuLmlubmVyV2lkdGgsaW5uZXJIZWlnaHQ6ZS5mbi5pbm5lckhlaWdodCxvdXRlcldpZHRoOmUuZm4ub3V0ZXJXaWR0aCxvdXRlckhlaWdodDplLmZuLm91dGVySGVpZ2h0fTtlLmZuWyJpbm5lciIrcl09ZnVuY3Rpb24obil7cmV0dXJuIG49PT10P29bImlubmVyIityXS5jYWxsKHRoaXMpOnRoaXMuZWFjaChmdW5jdGlvbigpe2UodGhpcykuY3NzKHMsdSh0aGlzLG4pKyJweCIpfSl9LGUuZm5bIm91dGVyIityXT1mdW5jdGlvbih0LG4pe3JldHVybiB0eXBlb2YgdCE9Im51bWJlciI/b1sib3V0ZXIiK3JdLmNhbGwodGhpcyx0KTp0aGlzLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmNzcyhzLHUodGhpcyx0LCEwLG4pKyJweCIpfSl9fSksZS5leHRlbmQoZS5leHByWyI6Il0se2RhdGE6ZS5leHByLmNyZWF0ZVBzZXVkbz9lLmV4cHIuY3JlYXRlUHNldWRvKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4hIWUuZGF0YShuLHQpfX0pOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4hIWUuZGF0YSh0LHJbM10pfSxmb2N1c2FibGU6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCwhaXNOYU4oZS5hdHRyKHQsInRhYmluZGV4IikpKX0sdGFiYmFibGU6ZnVuY3Rpb24odCl7dmFyIG49ZS5hdHRyKHQsInRhYmluZGV4Iikscj1pc05hTihuKTtyZXR1cm4ocnx8bj49MCkmJmkodCwhcil9fSksZShmdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmJvZHksbj10LmFwcGVuZENoaWxkKG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpO24ub2Zmc2V0SGVpZ2h0LGUuZXh0ZW5kKG4uc3R5bGUse21pbkhlaWdodDoiMTAwcHgiLGhlaWdodDoiYXV0byIscGFkZGluZzowLGJvcmRlcldpZHRoOjB9KSxlLnN1cHBvcnQubWluSGVpZ2h0PW4ub2Zmc2V0SGVpZ2h0PT09MTAwLGUuc3VwcG9ydC5zZWxlY3RzdGFydD0ib25zZWxlY3RzdGFydCJpbiBuLHQucmVtb3ZlQ2hpbGQobikuc3R5bGUuZGlzcGxheT0ibm9uZSJ9KSxlLmZuLmV4dGVuZCh7ZGlzYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJpbmQoKGUuc3VwcG9ydC5zZWxlY3RzdGFydD8ic2VsZWN0c3RhcnQiOiJtb3VzZWRvd24iKSsiLnVpLWRpc2FibGVTZWxlY3Rpb24iLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKX0pfSxlbmFibGVTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmJpbmQoIi51aS1kaXNhYmxlU2VsZWN0aW9uIil9fSksZS5leHRlbmQoZS51aSx7cGx1Z2luOnthZGQ6ZnVuY3Rpb24odCxuLHIpe3ZhciBpLHM9ZS51aVt0XS5wcm90b3R5cGU7Zm9yKGkgaW4gcilzLnBsdWdpbnNbaV09cy5wbHVnaW5zW2ldfHxbXSxzLnBsdWdpbnNbaV0ucHVzaChbbixyW2ldXSl9LGNhbGw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9ZS5wbHVnaW5zW3RdO2lmKCFpfHwhZS5lbGVtZW50WzBdLnBhcmVudE5vZGV8fGUuZWxlbWVudFswXS5wYXJlbnROb2RlLm5vZGVUeXBlPT09MTEpcmV0dXJuO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspZS5vcHRpb25zW2lbcl1bMF1dJiZpW3JdWzFdLmFwcGx5KGUuZWxlbWVudCxuKX19LGNvbnRhaW5zOmUuY29udGFpbnMsaGFzU2Nyb2xsOmZ1bmN0aW9uKHQsbil7aWYoZSh0KS5jc3MoIm92ZXJmbG93Iik9PT0iaGlkZGVuIilyZXR1cm4hMTt2YXIgcj1uJiZuPT09ImxlZnQiPyJzY3JvbGxMZWZ0Ijoic2Nyb2xsVG9wIixpPSExO3JldHVybiB0W3JdPjA/ITA6KHRbcl09MSxpPXRbcl0+MCx0W3JdPTAsaSl9LGlzT3ZlckF4aXM6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPnQmJmU8dCtufSxpc092ZXI6ZnVuY3Rpb24odCxuLHIsaSxzLG8pe3JldHVybiBlLnVpLmlzT3ZlckF4aXModCxyLHMpJiZlLnVpLmlzT3ZlckF4aXMobixpLG8pfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXt2YXIgbj0wLHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLGk9ZS5jbGVhbkRhdGE7ZS5jbGVhbkRhdGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPTAscjsocj10W25dKSE9bnVsbDtuKyspdHJ5e2UocikudHJpZ2dlckhhbmRsZXIoInJlbW92ZSIpfWNhdGNoKHMpe31pKHQpfSxlLndpZGdldD1mdW5jdGlvbih0LG4scil7dmFyIGkscyxvLHUsYT10LnNwbGl0KCIuIilbMF07dD10LnNwbGl0KCIuIilbMV0saT1hKyItIit0LHJ8fChyPW4sbj1lLldpZGdldCksZS5leHByWyI6Il1baS50b0xvd2VyQ2FzZSgpXT1mdW5jdGlvbih0KXtyZXR1cm4hIWUuZGF0YSh0LGkpfSxlW2FdPWVbYV18fHt9LHM9ZVthXVt0XSxvPWVbYV1bdF09ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5fY3JlYXRlV2lkZ2V0KXJldHVybiBuZXcgbyhlLHQpO2FyZ3VtZW50cy5sZW5ndGgmJnRoaXMuX2NyZWF0ZVdpZGdldChlLHQpfSxlLmV4dGVuZChvLHMse3ZlcnNpb246ci52ZXJzaW9uLF9wcm90bzplLmV4dGVuZCh7fSxyKSxfY2hpbGRDb25zdHJ1Y3RvcnM6W119KSx1PW5ldyBuLHUub3B0aW9ucz1lLndpZGdldC5leHRlbmQoe30sdS5vcHRpb25zKSxlLmVhY2gocixmdW5jdGlvbih0LGkpe2UuaXNGdW5jdGlvbihpKSYmKHJbdF09ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3JldHVybiBuLnByb3RvdHlwZVt0XS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHI9ZnVuY3Rpb24oZSl7cmV0dXJuIG4ucHJvdG90eXBlW3RdLmFwcGx5KHRoaXMsZSl9O3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N1cGVyLG49dGhpcy5fc3VwZXJBcHBseSxzO3JldHVybiB0aGlzLl9zdXBlcj1lLHRoaXMuX3N1cGVyQXBwbHk9cixzPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX3N1cGVyPXQsdGhpcy5fc3VwZXJBcHBseT1uLHN9fSgpKX0pLG8ucHJvdG90eXBlPWUud2lkZ2V0LmV4dGVuZCh1LHt3aWRnZXRFdmVudFByZWZpeDp0fSxyLHtjb25zdHJ1Y3RvcjpvLG5hbWVzcGFjZTphLHdpZGdldE5hbWU6dCx3aWRnZXRCYXNlQ2xhc3M6aSx3aWRnZXRGdWxsTmFtZTppfSkscz8oZS5lYWNoKHMuX2NoaWxkQ29uc3RydWN0b3JzLGZ1bmN0aW9uKHQsbil7dmFyIHI9bi5wcm90b3R5cGU7ZS53aWRnZXQoci5uYW1lc3BhY2UrIi4iK3Iud2lkZ2V0TmFtZSxvLG4uX3Byb3RvKX0pLGRlbGV0ZSBzLl9jaGlsZENvbnN0cnVjdG9ycyk6bi5fY2hpbGRDb25zdHJ1Y3RvcnMucHVzaChvKSxlLndpZGdldC5icmlkZ2UodCxvKX0sZS53aWRnZXQuZXh0ZW5kPWZ1bmN0aW9uKG4pe3ZhciBpPXIuY2FsbChhcmd1bWVudHMsMSkscz0wLG89aS5sZW5ndGgsdSxhO2Zvcig7czxvO3MrKylmb3IodSBpbiBpW3NdKWE9aVtzXVt1XSxpW3NdLmhhc093blByb3BlcnR5KHUpJiZhIT09dCYmKG5bdV09ZS5pc1BsYWluT2JqZWN0KGEpP2Uud2lkZ2V0LmV4dGVuZCh7fSxuW3VdLGEpOmEpO3JldHVybiBufSxlLndpZGdldC5icmlkZ2U9ZnVuY3Rpb24obixpKXt2YXIgcz1pLnByb3RvdHlwZS53aWRnZXRGdWxsTmFtZTtlLmZuW25dPWZ1bmN0aW9uKG8pe3ZhciB1PXR5cGVvZiBvPT0ic3RyaW5nIixhPXIuY2FsbChhcmd1bWVudHMsMSksZj10aGlzO3JldHVybiBvPSF1JiZhLmxlbmd0aD9lLndpZGdldC5leHRlbmQuYXBwbHkobnVsbCxbb10uY29uY2F0KGEpKTpvLHU/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHIsaT1lLmRhdGEodGhpcyxzKTtpZighaSlyZXR1cm4gZS5lcnJvcigiY2Fubm90IGNhbGwgbWV0aG9kcyBvbiAiK24rIiBwcmlvciB0byBpbml0aWFsaXphdGlvbjsgIisiYXR0ZW1wdGVkIHRvIGNhbGwgbWV0aG9kICciK28rIiciKTtpZighZS5pc0Z1bmN0aW9uKGlbb10pfHxvLmNoYXJBdCgwKT09PSJfIilyZXR1cm4gZS5lcnJvcigibm8gc3VjaCBtZXRob2QgJyIrbysiJyBmb3IgIituKyIgd2lkZ2V0IGluc3RhbmNlIik7cj1pW29dLmFwcGx5KGksYSk7aWYociE9PWkmJnIhPT10KXJldHVybiBmPXImJnIuanF1ZXJ5P2YucHVzaFN0YWNrKHIuZ2V0KCkpOnIsITF9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lLmRhdGEodGhpcyxzKTt0P3Qub3B0aW9uKG98fHt9KS5faW5pdCgpOm5ldyBpKG8sdGhpcyl9KSxmfX0sZS5XaWRnZXQ9ZnVuY3Rpb24oZSx0KXt9LGUuV2lkZ2V0Ll9jaGlsZENvbnN0cnVjdG9ycz1bXSxlLldpZGdldC5wcm90b3R5cGU9e3dpZGdldE5hbWU6IndpZGdldCIsd2lkZ2V0RXZlbnRQcmVmaXg6IiIsZGVmYXVsdEVsZW1lbnQ6IjxkaXY+IixvcHRpb25zOntkaXNhYmxlZDohMSxjcmVhdGU6bnVsbH0sX2NyZWF0ZVdpZGdldDpmdW5jdGlvbih0LHIpe3I9ZShyfHx0aGlzLmRlZmF1bHRFbGVtZW50fHx0aGlzKVswXSx0aGlzLmVsZW1lbnQ9ZShyKSx0aGlzLnV1aWQ9bisrLHRoaXMuZXZlbnROYW1lc3BhY2U9Ii4iK3RoaXMud2lkZ2V0TmFtZSt0aGlzLnV1aWQsdGhpcy5vcHRpb25zPWUud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMsdGhpcy5fZ2V0Q3JlYXRlT3B0aW9ucygpLHQpLHRoaXMuYmluZGluZ3M9ZSgpLHRoaXMuaG92ZXJhYmxlPWUoKSx0aGlzLmZvY3VzYWJsZT1lKCksciE9PXRoaXMmJihlLmRhdGEocix0aGlzLndpZGdldE5hbWUsdGhpcyksZS5kYXRhKHIsdGhpcy53aWRnZXRGdWxsTmFtZSx0aGlzKSx0aGlzLl9vbih7cmVtb3ZlOiJkZXN0cm95In0pLHRoaXMuZG9jdW1lbnQ9ZShyLnN0eWxlP3Iub3duZXJEb2N1bWVudDpyLmRvY3VtZW50fHxyKSx0aGlzLndpbmRvdz1lKHRoaXMuZG9jdW1lbnRbMF0uZGVmYXVsdFZpZXd8fHRoaXMuZG9jdW1lbnRbMF0ucGFyZW50V2luZG93KSksdGhpcy5fY3JlYXRlKCksdGhpcy5fdHJpZ2dlcigiY3JlYXRlIixudWxsLHRoaXMuX2dldENyZWF0ZUV2ZW50RGF0YSgpKSx0aGlzLl9pbml0KCl9LF9nZXRDcmVhdGVPcHRpb25zOmUubm9vcCxfZ2V0Q3JlYXRlRXZlbnREYXRhOmUubm9vcCxfY3JlYXRlOmUubm9vcCxfaW5pdDplLm5vb3AsZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3koKSx0aGlzLmVsZW1lbnQudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZURhdGEodGhpcy53aWRnZXROYW1lKS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0RnVsbE5hbWUpLnJlbW92ZURhdGEoZS5jYW1lbENhc2UodGhpcy53aWRnZXRGdWxsTmFtZSkpLHRoaXMud2lkZ2V0KCkudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKS5yZW1vdmVDbGFzcyh0aGlzLndpZGdldEZ1bGxOYW1lKyItZGlzYWJsZWQgIisidWktc3RhdGUtZGlzYWJsZWQiKSx0aGlzLmJpbmRpbmdzLnVuYmluZCh0aGlzLmV2ZW50TmFtZXNwYWNlKSx0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSx0aGlzLmZvY3VzYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKX0sX2Rlc3Ryb3k6ZS5ub29wLHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnR9LG9wdGlvbjpmdW5jdGlvbihuLHIpe3ZhciBpPW4scyxvLHU7aWYoYXJndW1lbnRzLmxlbmd0aD09PTApcmV0dXJuIGUud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMpO2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7aT17fSxzPW4uc3BsaXQoIi4iKSxuPXMuc2hpZnQoKTtpZihzLmxlbmd0aCl7bz1pW25dPWUud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnNbbl0pO2Zvcih1PTA7dTxzLmxlbmd0aC0xO3UrKylvW3NbdV1dPW9bc1t1XV18fHt9LG89b1tzW3VdXTtuPXMucG9wKCk7aWYocj09PXQpcmV0dXJuIG9bbl09PT10P251bGw6b1tuXTtvW25dPXJ9ZWxzZXtpZihyPT09dClyZXR1cm4gdGhpcy5vcHRpb25zW25dPT09dD9udWxsOnRoaXMub3B0aW9uc1tuXTtpW25dPXJ9fXJldHVybiB0aGlzLl9zZXRPcHRpb25zKGkpLHRoaXN9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpdGhpcy5fc2V0T3B0aW9uKHQsZVt0XSk7cmV0dXJuIHRoaXN9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vcHRpb25zW2VdPXQsZT09PSJkaXNhYmxlZCImJih0aGlzLndpZGdldCgpLnRvZ2dsZUNsYXNzKHRoaXMud2lkZ2V0RnVsbE5hbWUrIi1kaXNhYmxlZCB1aS1zdGF0ZS1kaXNhYmxlZCIsISF0KS5hdHRyKCJhcmlhLWRpc2FibGVkIix0KSx0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSx0aGlzLmZvY3VzYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKSksdGhpc30sZW5hYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLCExKX0sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIiwhMCl9LF9vbjpmdW5jdGlvbih0LG4pe24/KHQ9ZSh0KSx0aGlzLmJpbmRpbmdzPXRoaXMuYmluZGluZ3MuYWRkKHQpKToobj10LHQ9dGhpcy5lbGVtZW50KTt2YXIgcj10aGlzO2UuZWFjaChuLGZ1bmN0aW9uKG4saSl7ZnVuY3Rpb24gcygpe2lmKHIub3B0aW9ucy5kaXNhYmxlZD09PSEwfHxlKHRoaXMpLmhhc0NsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpKXJldHVybjtyZXR1cm4odHlwZW9mIGk9PSJzdHJpbmciP3JbaV06aSkuYXBwbHkocixhcmd1bWVudHMpfXR5cGVvZiBpIT0ic3RyaW5nIiYmKHMuZ3VpZD1pLmd1aWQ9aS5ndWlkfHxzLmd1aWR8fGUuZ3VpZCsrKTt2YXIgbz1uLm1hdGNoKC9eKFx3KylccyooLiopJC8pLHU9b1sxXStyLmV2ZW50TmFtZXNwYWNlLGE9b1syXTthP3Iud2lkZ2V0KCkuZGVsZWdhdGUoYSx1LHMpOnQuYmluZCh1LHMpfSl9LF9vZmY6ZnVuY3Rpb24oZSx0KXt0PSh0fHwiIikuc3BsaXQoIiAiKS5qb2luKHRoaXMuZXZlbnROYW1lc3BhY2UrIiAiKSt0aGlzLmV2ZW50TmFtZXNwYWNlLGUudW5iaW5kKHQpLnVuZGVsZWdhdGUodCl9LF9kZWxheTpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXtyZXR1cm4odHlwZW9mIGU9PSJzdHJpbmciP3JbZV06ZSkuYXBwbHkocixhcmd1bWVudHMpfXZhciByPXRoaXM7cmV0dXJuIHNldFRpbWVvdXQobix0fHwwKX0sX2hvdmVyYWJsZTpmdW5jdGlvbih0KXt0aGlzLmhvdmVyYWJsZT10aGlzLmhvdmVyYWJsZS5hZGQodCksdGhpcy5fb24odCx7bW91c2VlbnRlcjpmdW5jdGlvbih0KXtlKHQuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoInVpLXN0YXRlLWhvdmVyIil9LG1vdXNlbGVhdmU6ZnVuY3Rpb24odCl7ZSh0LmN1cnJlbnRUYXJnZXQpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfX0pfSxfZm9jdXNhYmxlOmZ1bmN0aW9uKHQpe3RoaXMuZm9jdXNhYmxlPXRoaXMuZm9jdXNhYmxlLmFkZCh0KSx0aGlzLl9vbih0LHtmb2N1c2luOmZ1bmN0aW9uKHQpe2UodC5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcygidWktc3RhdGUtZm9jdXMiKX0sZm9jdXNvdXQ6ZnVuY3Rpb24odCl7ZSh0LmN1cnJlbnRUYXJnZXQpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfX0pfSxfdHJpZ2dlcjpmdW5jdGlvbih0LG4scil7dmFyIGkscyxvPXRoaXMub3B0aW9uc1t0XTtyPXJ8fHt9LG49ZS5FdmVudChuKSxuLnR5cGU9KHQ9PT10aGlzLndpZGdldEV2ZW50UHJlZml4P3Q6dGhpcy53aWRnZXRFdmVudFByZWZpeCt0KS50b0xvd2VyQ2FzZSgpLG4udGFyZ2V0PXRoaXMuZWxlbWVudFswXSxzPW4ub3JpZ2luYWxFdmVudDtpZihzKWZvcihpIGluIHMpaSBpbiBufHwobltpXT1zW2ldKTtyZXR1cm4gdGhpcy5lbGVtZW50LnRyaWdnZXIobixyKSwhKGUuaXNGdW5jdGlvbihvKSYmby5hcHBseSh0aGlzLmVsZW1lbnRbMF0sW25dLmNvbmNhdChyKSk9PT0hMXx8bi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl9fSxlLmVhY2goe3Nob3c6ImZhZGVJbiIsaGlkZToiZmFkZU91dCJ9LGZ1bmN0aW9uKHQsbil7ZS5XaWRnZXQucHJvdG90eXBlWyJfIit0XT1mdW5jdGlvbihyLGkscyl7dHlwZW9mIGk9PSJzdHJpbmciJiYoaT17ZWZmZWN0Oml9KTt2YXIgbyx1PWk/aT09PSEwfHx0eXBlb2YgaT09Im51bWJlciI/bjppLmVmZmVjdHx8bjp0O2k9aXx8e30sdHlwZW9mIGk9PSJudW1iZXIiJiYoaT17ZHVyYXRpb246aX0pLG89IWUuaXNFbXB0eU9iamVjdChpKSxpLmNvbXBsZXRlPXMsaS5kZWxheSYmci5kZWxheShpLmRlbGF5KSxvJiZlLmVmZmVjdHMmJihlLmVmZmVjdHMuZWZmZWN0W3VdfHxlLnVpQmFja0NvbXBhdCE9PSExJiZlLmVmZmVjdHNbdV0pP3JbdF0oaSk6dSE9PXQmJnJbdV0/clt1XShpLmR1cmF0aW9uLGkuZWFzaW5nLHMpOnIucXVldWUoZnVuY3Rpb24obil7ZSh0aGlzKVt0XSgpLHMmJnMuY2FsbChyWzBdKSxuKCl9KX19KSxlLnVpQmFja0NvbXBhdCE9PSExJiYoZS5XaWRnZXQucHJvdG90eXBlLl9nZXRDcmVhdGVPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIGUubWV0YWRhdGEmJmUubWV0YWRhdGEuZ2V0KHRoaXMuZWxlbWVudFswXSlbdGhpcy53aWRnZXROYW1lXX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXt2YXIgbj0hMTtlKGRvY3VtZW50KS5tb3VzZXVwKGZ1bmN0aW9uKGUpe249ITF9KSxlLndpZGdldCgidWkubW91c2UiLHt2ZXJzaW9uOiIxLjkuMCIsb3B0aW9uczp7Y2FuY2VsOiJpbnB1dCx0ZXh0YXJlYSxidXR0b24sc2VsZWN0LG9wdGlvbiIsZGlzdGFuY2U6MSxkZWxheTowfSxfbW91c2VJbml0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmVsZW1lbnQuYmluZCgibW91c2Vkb3duLiIrdGhpcy53aWRnZXROYW1lLGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9tb3VzZURvd24oZSl9KS5iaW5kKCJjbGljay4iK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbihuKXtpZighMD09PWUuZGF0YShuLnRhcmdldCx0LndpZGdldE5hbWUrIi5wcmV2ZW50Q2xpY2tFdmVudCIpKXJldHVybiBlLnJlbW92ZURhdGEobi50YXJnZXQsdC53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiKSxuLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLCExfSksdGhpcy5zdGFydGVkPSExfSxfbW91c2VEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnVuYmluZCgiLiIrdGhpcy53aWRnZXROYW1lKSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSYmZShkb2N1bWVudCkudW5iaW5kKCJtb3VzZW1vdmUuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLnVuYmluZCgibW91c2V1cC4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpfSxfbW91c2VEb3duOmZ1bmN0aW9uKHQpe2lmKG4pcmV0dXJuO3RoaXMuX21vdXNlU3RhcnRlZCYmdGhpcy5fbW91c2VVcCh0KSx0aGlzLl9tb3VzZURvd25FdmVudD10O3ZhciByPXRoaXMsaT10LndoaWNoPT09MSxzPXR5cGVvZiB0aGlzLm9wdGlvbnMuY2FuY2VsPT0ic3RyaW5nIiYmdC50YXJnZXQubm9kZU5hbWU/ZSh0LnRhcmdldCkuY2xvc2VzdCh0aGlzLm9wdGlvbnMuY2FuY2VsKS5sZW5ndGg6ITE7aWYoIWl8fHN8fCF0aGlzLl9tb3VzZUNhcHR1cmUodCkpcmV0dXJuITA7dGhpcy5tb3VzZURlbGF5TWV0PSF0aGlzLm9wdGlvbnMuZGVsYXksdGhpcy5tb3VzZURlbGF5TWV0fHwodGhpcy5fbW91c2VEZWxheVRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyLm1vdXNlRGVsYXlNZXQ9ITB9LHRoaXMub3B0aW9ucy5kZWxheSkpO2lmKHRoaXMuX21vdXNlRGlzdGFuY2VNZXQodCkmJnRoaXMuX21vdXNlRGVsYXlNZXQodCkpe3RoaXMuX21vdXNlU3RhcnRlZD10aGlzLl9tb3VzZVN0YXJ0KHQpIT09ITE7aWYoIXRoaXMuX21vdXNlU3RhcnRlZClyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLCEwfXJldHVybiEwPT09ZS5kYXRhKHQudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IikmJmUucmVtb3ZlRGF0YSh0LnRhcmdldCx0aGlzLndpZGdldE5hbWUrIi5wcmV2ZW50Q2xpY2tFdmVudCIpLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlPWZ1bmN0aW9uKGUpe3JldHVybiByLl9tb3VzZU1vdmUoZSl9LHRoaXMuX21vdXNlVXBEZWxlZ2F0ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5fbW91c2VVcChlKX0sZShkb2N1bWVudCkuYmluZCgibW91c2Vtb3ZlLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS5iaW5kKCJtb3VzZXVwLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSksdC5wcmV2ZW50RGVmYXVsdCgpLG49ITAsITB9LF9tb3VzZU1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIWUuYnJvd3Nlci5tc2llfHxkb2N1bWVudC5kb2N1bWVudE1vZGU+PTl8fCEhdC5idXR0b24/dGhpcy5fbW91c2VTdGFydGVkPyh0aGlzLl9tb3VzZURyYWcodCksdC5wcmV2ZW50RGVmYXVsdCgpKToodGhpcy5fbW91c2VEaXN0YW5jZU1ldCh0KSYmdGhpcy5fbW91c2VEZWxheU1ldCh0KSYmKHRoaXMuX21vdXNlU3RhcnRlZD10aGlzLl9tb3VzZVN0YXJ0KHRoaXMuX21vdXNlRG93bkV2ZW50LHQpIT09ITEsdGhpcy5fbW91c2VTdGFydGVkP3RoaXMuX21vdXNlRHJhZyh0KTp0aGlzLl9tb3VzZVVwKHQpKSwhdGhpcy5fbW91c2VTdGFydGVkKTp0aGlzLl9tb3VzZVVwKHQpfSxfbW91c2VVcDpmdW5jdGlvbih0KXtyZXR1cm4gZShkb2N1bWVudCkudW5iaW5kKCJtb3VzZW1vdmUuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLnVuYmluZCgibW91c2V1cC4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpLHRoaXMuX21vdXNlU3RhcnRlZCYmKHRoaXMuX21vdXNlU3RhcnRlZD0hMSx0LnRhcmdldD09PXRoaXMuX21vdXNlRG93bkV2ZW50LnRhcmdldCYmZS5kYXRhKHQudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IiwhMCksdGhpcy5fbW91c2VTdG9wKHQpKSwhMX0sX21vdXNlRGlzdGFuY2VNZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VYLWUucGFnZVgpLE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VZLWUucGFnZVkpKT49dGhpcy5vcHRpb25zLmRpc3RhbmNlfSxfbW91c2VEZWxheU1ldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tb3VzZURlbGF5TWV0fSxfbW91c2VTdGFydDpmdW5jdGlvbihlKXt9LF9tb3VzZURyYWc6ZnVuY3Rpb24oZSl7fSxfbW91c2VTdG9wOmZ1bmN0aW9uKGUpe30sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaChlLHQsbil7cmV0dXJuW3BhcnNlSW50KGVbMF0sMTApKihsLnRlc3QoZVswXSk/dC8xMDA6MSkscGFyc2VJbnQoZVsxXSwxMCkqKGwudGVzdChlWzFdKT9uLzEwMDoxKV19ZnVuY3Rpb24gcCh0LG4pe3JldHVybiBwYXJzZUludChlLmNzcyh0LG4pLDEwKXx8MH1lLnVpPWUudWl8fHt9O3ZhciBuLHI9TWF0aC5tYXgsaT1NYXRoLmFicyxzPU1hdGgucm91bmQsbz0vbGVmdHxjZW50ZXJ8cmlnaHQvLHU9L3RvcHxjZW50ZXJ8Ym90dG9tLyxhPS9bXCtcLV1cZCslPy8sZj0vXlx3Ky8sbD0vJSQvLGM9ZS5mbi5wb3NpdGlvbjtlLnBvc2l0aW9uPXtzY3JvbGxiYXJXaWR0aDpmdW5jdGlvbigpe2lmKG4hPT10KXJldHVybiBuO3ZhciByLGkscz1lKCI8ZGl2IHN0eWxlPSdkaXNwbGF5OmJsb2NrO3dpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7b3ZlcmZsb3c6aGlkZGVuOyc+PGRpdiBzdHlsZT0naGVpZ2h0OjEwMHB4O3dpZHRoOmF1dG87Jz48L2Rpdj48L2Rpdj4iKSxvPXMuY2hpbGRyZW4oKVswXTtyZXR1cm4gZSgiYm9keSIpLmFwcGVuZChzKSxyPW8ub2Zmc2V0V2lkdGgscy5jc3MoIm92ZXJmbG93Iiwic2Nyb2xsIiksaT1vLm9mZnNldFdpZHRoLHI9PT1pJiYoaT1zWzBdLmNsaWVudFdpZHRoKSxzLnJlbW92ZSgpLG49ci1pfSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKHQpe3ZhciBuPXQuaXNXaW5kb3c/IiI6dC5lbGVtZW50LmNzcygib3ZlcmZsb3cteCIpLHI9dC5pc1dpbmRvdz8iIjp0LmVsZW1lbnQuY3NzKCJvdmVyZmxvdy15IiksaT1uPT09InNjcm9sbCJ8fG49PT0iYXV0byImJnQud2lkdGg8dC5lbGVtZW50WzBdLnNjcm9sbFdpZHRoLHM9cj09PSJzY3JvbGwifHxyPT09ImF1dG8iJiZ0LmhlaWdodDx0LmVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0O3JldHVybnt3aWR0aDppP2UucG9zaXRpb24uc2Nyb2xsYmFyV2lkdGgoKTowLGhlaWdodDpzP2UucG9zaXRpb24uc2Nyb2xsYmFyV2lkdGgoKTowfX0sZ2V0V2l0aGluSW5mbzpmdW5jdGlvbih0KXt2YXIgbj1lKHR8fHdpbmRvdykscj1lLmlzV2luZG93KG5bMF0pO3JldHVybntlbGVtZW50Om4saXNXaW5kb3c6cixvZmZzZXQ6bi5vZmZzZXQoKXx8e2xlZnQ6MCx0b3A6MH0sc2Nyb2xsTGVmdDpuLnNjcm9sbExlZnQoKSxzY3JvbGxUb3A6bi5zY3JvbGxUb3AoKSx3aWR0aDpyP24ud2lkdGgoKTpuLm91dGVyV2lkdGgoKSxoZWlnaHQ6cj9uLmhlaWdodCgpOm4ub3V0ZXJIZWlnaHQoKX19fSxlLmZuLnBvc2l0aW9uPWZ1bmN0aW9uKHQpe2lmKCF0fHwhdC5vZilyZXR1cm4gYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dD1lLmV4dGVuZCh7fSx0KTt2YXIgbixsLGQsdixtLGc9ZSh0Lm9mKSx5PWUucG9zaXRpb24uZ2V0V2l0aGluSW5mbyh0LndpdGhpbiksYj1lLnBvc2l0aW9uLmdldFNjcm9sbEluZm8oeSksdz1nWzBdLEU9KHQuY29sbGlzaW9ufHwiZmxpcCIpLnNwbGl0KCIgIiksUz17fTtyZXR1cm4gdy5ub2RlVHlwZT09PTk/KGw9Zy53aWR0aCgpLGQ9Zy5oZWlnaHQoKSx2PXt0b3A6MCxsZWZ0OjB9KTplLmlzV2luZG93KHcpPyhsPWcud2lkdGgoKSxkPWcuaGVpZ2h0KCksdj17dG9wOmcuc2Nyb2xsVG9wKCksbGVmdDpnLnNjcm9sbExlZnQoKX0pOncucHJldmVudERlZmF1bHQ/KHQuYXQ9ImxlZnQgdG9wIixsPWQ9MCx2PXt0b3A6dy5wYWdlWSxsZWZ0OncucGFnZVh9KToobD1nLm91dGVyV2lkdGgoKSxkPWcub3V0ZXJIZWlnaHQoKSx2PWcub2Zmc2V0KCkpLG09ZS5leHRlbmQoe30sdiksZS5lYWNoKFsibXkiLCJhdCJdLGZ1bmN0aW9uKCl7dmFyIGU9KHRbdGhpc118fCIiKS5zcGxpdCgiICIpLG4scjtlLmxlbmd0aD09PTEmJihlPW8udGVzdChlWzBdKT9lLmNvbmNhdChbImNlbnRlciJdKTp1LnRlc3QoZVswXSk/WyJjZW50ZXIiXS5jb25jYXQoZSk6WyJjZW50ZXIiLCJjZW50ZXIiXSksZVswXT1vLnRlc3QoZVswXSk/ZVswXToiY2VudGVyIixlWzFdPXUudGVzdChlWzFdKT9lWzFdOiJjZW50ZXIiLG49YS5leGVjKGVbMF0pLHI9YS5leGVjKGVbMV0pLFNbdGhpc109W24/blswXTowLHI/clswXTowXSx0W3RoaXNdPVtmLmV4ZWMoZVswXSlbMF0sZi5leGVjKGVbMV0pWzBdXX0pLEUubGVuZ3RoPT09MSYmKEVbMV09RVswXSksdC5hdFswXT09PSJyaWdodCI/bS5sZWZ0Kz1sOnQuYXRbMF09PT0iY2VudGVyIiYmKG0ubGVmdCs9bC8yKSx0LmF0WzFdPT09ImJvdHRvbSI/bS50b3ArPWQ6dC5hdFsxXT09PSJjZW50ZXIiJiYobS50b3ArPWQvMiksbj1oKFMuYXQsbCxkKSxtLmxlZnQrPW5bMF0sbS50b3ArPW5bMV0sdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG8sdSxhPWUodGhpcyksZj1hLm91dGVyV2lkdGgoKSxjPWEub3V0ZXJIZWlnaHQoKSx3PXAodGhpcywibWFyZ2luTGVmdCIpLHg9cCh0aGlzLCJtYXJnaW5Ub3AiKSxUPWYrdytwKHRoaXMsIm1hcmdpblJpZ2h0IikrYi53aWR0aCxOPWMreCtwKHRoaXMsIm1hcmdpbkJvdHRvbSIpK2IuaGVpZ2h0LEM9ZS5leHRlbmQoe30sbSksaz1oKFMubXksYS5vdXRlcldpZHRoKCksYS5vdXRlckhlaWdodCgpKTt0Lm15WzBdPT09InJpZ2h0Ij9DLmxlZnQtPWY6dC5teVswXT09PSJjZW50ZXIiJiYoQy5sZWZ0LT1mLzIpLHQubXlbMV09PT0iYm90dG9tIj9DLnRvcC09Yzp0Lm15WzFdPT09ImNlbnRlciImJihDLnRvcC09Yy8yKSxDLmxlZnQrPWtbMF0sQy50b3ArPWtbMV0sZS5zdXBwb3J0Lm9mZnNldEZyYWN0aW9uc3x8KEMubGVmdD1zKEMubGVmdCksQy50b3A9cyhDLnRvcCkpLG89e21hcmdpbkxlZnQ6dyxtYXJnaW5Ub3A6eH0sZS5lYWNoKFsibGVmdCIsInRvcCJdLGZ1bmN0aW9uKHIsaSl7ZS51aS5wb3NpdGlvbltFW3JdXSYmZS51aS5wb3NpdGlvbltFW3JdXVtpXShDLHt0YXJnZXRXaWR0aDpsLHRhcmdldEhlaWdodDpkLGVsZW1XaWR0aDpmLGVsZW1IZWlnaHQ6Yyxjb2xsaXNpb25Qb3NpdGlvbjpvLGNvbGxpc2lvbldpZHRoOlQsY29sbGlzaW9uSGVpZ2h0Ok4sb2Zmc2V0OltuWzBdK2tbMF0sblsxXStrWzFdXSxteTp0Lm15LGF0OnQuYXQsd2l0aGluOnksZWxlbTphfSl9KSxlLmZuLmJnaWZyYW1lJiZhLmJnaWZyYW1lKCksdC51c2luZyYmKHU9ZnVuY3Rpb24oZSl7dmFyIG49di5sZWZ0LUMubGVmdCxzPW4rbC1mLG89di50b3AtQy50b3AsdT1vK2QtYyxoPXt0YXJnZXQ6e2VsZW1lbnQ6ZyxsZWZ0OnYubGVmdCx0b3A6di50b3Asd2lkdGg6bCxoZWlnaHQ6ZH0sZWxlbWVudDp7ZWxlbWVudDphLGxlZnQ6Qy5sZWZ0LHRvcDpDLnRvcCx3aWR0aDpmLGhlaWdodDpjfSxob3Jpem9udGFsOnM8MD8ibGVmdCI6bj4wPyJyaWdodCI6ImNlbnRlciIsdmVydGljYWw6dTwwPyJ0b3AiOm8+MD8iYm90dG9tIjoibWlkZGxlIn07bDxmJiZpKG4rcyk8bCYmKGguaG9yaXpvbnRhbD0iY2VudGVyIiksZDxjJiZpKG8rdSk8ZCYmKGgudmVydGljYWw9Im1pZGRsZSIpLHIoaShuKSxpKHMpKT5yKGkobyksaSh1KSk/aC5pbXBvcnRhbnQ9Imhvcml6b250YWwiOmguaW1wb3J0YW50PSJ2ZXJ0aWNhbCIsdC51c2luZy5jYWxsKHRoaXMsZSxoKX0pLGEub2Zmc2V0KGUuZXh0ZW5kKEMse3VzaW5nOnV9KSl9KX0sZS51aS5wb3NpdGlvbj17Zml0OntsZWZ0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dC53aXRoaW4saT1uLmlzV2luZG93P24uc2Nyb2xsTGVmdDpuLm9mZnNldC5sZWZ0LHM9bi53aWR0aCxvPWUubGVmdC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQsdT1pLW8sYT1vK3QuY29sbGlzaW9uV2lkdGgtcy1pLGY7dC5jb2xsaXNpb25XaWR0aD5zP3U+MCYmYTw9MD8oZj1lLmxlZnQrdSt0LmNvbGxpc2lvbldpZHRoLXMtaSxlLmxlZnQrPXUtZik6YT4wJiZ1PD0wP2UubGVmdD1pOnU+YT9lLmxlZnQ9aStzLXQuY29sbGlzaW9uV2lkdGg6ZS5sZWZ0PWk6dT4wP2UubGVmdCs9dTphPjA/ZS5sZWZ0LT1hOmUubGVmdD1yKGUubGVmdC1vLGUubGVmdCl9LHRvcDpmdW5jdGlvbihlLHQpe3ZhciBuPXQud2l0aGluLGk9bi5pc1dpbmRvdz9uLnNjcm9sbFRvcDpuLm9mZnNldC50b3Ascz10LndpdGhpbi5oZWlnaHQsbz1lLnRvcC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCx1PWktbyxhPW8rdC5jb2xsaXNpb25IZWlnaHQtcy1pLGY7dC5jb2xsaXNpb25IZWlnaHQ+cz91PjAmJmE8PTA/KGY9ZS50b3ArdSt0LmNvbGxpc2lvbkhlaWdodC1zLWksZS50b3ArPXUtZik6YT4wJiZ1PD0wP2UudG9wPWk6dT5hP2UudG9wPWkrcy10LmNvbGxpc2lvbkhlaWdodDplLnRvcD1pOnU+MD9lLnRvcCs9dTphPjA/ZS50b3AtPWE6ZS50b3A9cihlLnRvcC1vLGUudG9wKX19LGZsaXA6e2xlZnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LndpdGhpbixyPW4ub2Zmc2V0LmxlZnQrbi5zY3JvbGxMZWZ0LHM9bi53aWR0aCxvPW4uaXNXaW5kb3c/bi5zY3JvbGxMZWZ0Om4ub2Zmc2V0LmxlZnQsdT1lLmxlZnQtdC5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5MZWZ0LGE9dS1vLGY9dSt0LmNvbGxpc2lvbldpZHRoLXMtbyxsPXQubXlbMF09PT0ibGVmdCI/LXQuZWxlbVdpZHRoOnQubXlbMF09PT0icmlnaHQiP3QuZWxlbVdpZHRoOjAsYz10LmF0WzBdPT09ImxlZnQiP3QudGFyZ2V0V2lkdGg6dC5hdFswXT09PSJyaWdodCI/LXQudGFyZ2V0V2lkdGg6MCxoPS0yKnQub2Zmc2V0WzBdLHAsZDtpZihhPDApe3A9ZS5sZWZ0K2wrYytoK3QuY29sbGlzaW9uV2lkdGgtcy1yO2lmKHA8MHx8cDxpKGEpKWUubGVmdCs9bCtjK2h9ZWxzZSBpZihmPjApe2Q9ZS5sZWZ0LXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCtsK2MraC1vO2lmKGQ+MHx8aShkKTxmKWUubGVmdCs9bCtjK2h9fSx0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LndpdGhpbixyPW4ub2Zmc2V0LnRvcCtuLnNjcm9sbFRvcCxzPW4uaGVpZ2h0LG89bi5pc1dpbmRvdz9uLnNjcm9sbFRvcDpuLm9mZnNldC50b3AsdT1lLnRvcC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCxhPXUtbyxmPXUrdC5jb2xsaXNpb25IZWlnaHQtcy1vLGw9dC5teVsxXT09PSJ0b3AiLGM9bD8tdC5lbGVtSGVpZ2h0OnQubXlbMV09PT0iYm90dG9tIj90LmVsZW1IZWlnaHQ6MCxoPXQuYXRbMV09PT0idG9wIj90LnRhcmdldEhlaWdodDp0LmF0WzFdPT09ImJvdHRvbSI/LXQudGFyZ2V0SGVpZ2h0OjAscD0tMip0Lm9mZnNldFsxXSxkLHY7YTwwPyh2PWUudG9wK2MraCtwK3QuY29sbGlzaW9uSGVpZ2h0LXMtcixlLnRvcCtjK2grcD5hJiYodjwwfHx2PGkoYSkpJiYoZS50b3ArPWMraCtwKSk6Zj4wJiYoZD1lLnRvcC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCtjK2grcC1vLGUudG9wK2MraCtwPmYmJihkPjB8fGkoZCk8ZikmJihlLnRvcCs9YytoK3ApKX19LGZsaXBmaXQ6e2xlZnQ6ZnVuY3Rpb24oKXtlLnVpLnBvc2l0aW9uLmZsaXAubGVmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS51aS5wb3NpdGlvbi5maXQubGVmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHRvcDpmdW5jdGlvbigpe2UudWkucG9zaXRpb24uZmxpcC50b3AuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudWkucG9zaXRpb24uZml0LnRvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24oKXt2YXIgdCxuLHIsaSxzLG89ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSx1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChvPyJkaXYiOiJib2R5Iikscj17dmlzaWJpbGl0eToiaGlkZGVuIix3aWR0aDowLGhlaWdodDowLGJvcmRlcjowLG1hcmdpbjowLGJhY2tncm91bmQ6Im5vbmUifSxvJiZlLmV4dGVuZChyLHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6Ii0xMDAwcHgiLHRvcDoiLTEwMDBweCJ9KTtmb3IocyBpbiByKXQuc3R5bGVbc109cltzXTt0LmFwcGVuZENoaWxkKHUpLG49b3x8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG4uaW5zZXJ0QmVmb3JlKHQsbi5maXJzdENoaWxkKSx1LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMTAuNzQzMjIyMnB4OyIsaT1lKHUpLm9mZnNldCgpLmxlZnQsZS5zdXBwb3J0Lm9mZnNldEZyYWN0aW9ucz1pPjEwJiZpPDExLHQuaW5uZXJIVE1MPSIiLG4ucmVtb3ZlQ2hpbGQodCl9KCksZS51aUJhY2tDb21wYXQhPT0hMSYmZnVuY3Rpb24oZSl7dmFyIG49ZS5mbi5wb3NpdGlvbjtlLmZuLnBvc2l0aW9uPWZ1bmN0aW9uKHIpe2lmKCFyfHwhci5vZmZzZXQpcmV0dXJuIG4uY2FsbCh0aGlzLHIpO3ZhciBpPXIub2Zmc2V0LnNwbGl0KCIgIikscz1yLmF0LnNwbGl0KCIgIik7cmV0dXJuIGkubGVuZ3RoPT09MSYmKGlbMV09aVswXSksL15cZC8udGVzdChpWzBdKSYmKGlbMF09IisiK2lbMF0pLC9eXGQvLnRlc3QoaVsxXSkmJihpWzFdPSIrIitpWzFdKSxzLmxlbmd0aD09PTEmJigvbGVmdHxjZW50ZXJ8cmlnaHQvLnRlc3Qoc1swXSk/c1sxXT0iY2VudGVyIjooc1sxXT1zWzBdLHNbMF09ImNlbnRlciIpKSxuLmNhbGwodGhpcyxlLmV4dGVuZChyLHthdDpzWzBdK2lbMF0rIiAiK3NbMV0raVsxXSxvZmZzZXQ6dH0pKX19KGpRdWVyeSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuPTAscj17fSxpPXt9O3IuaGVpZ2h0PXIucGFkZGluZ1RvcD1yLnBhZGRpbmdCb3R0b209ci5ib3JkZXJUb3BXaWR0aD1yLmJvcmRlckJvdHRvbVdpZHRoPSJoaWRlIixpLmhlaWdodD1pLnBhZGRpbmdUb3A9aS5wYWRkaW5nQm90dG9tPWkuYm9yZGVyVG9wV2lkdGg9aS5ib3JkZXJCb3R0b21XaWR0aD0ic2hvdyIsZS53aWRnZXQoInVpLmFjY29yZGlvbiIse3ZlcnNpb246IjEuOS4wIixvcHRpb25zOnthY3RpdmU6MCxhbmltYXRlOnt9LGNvbGxhcHNpYmxlOiExLGV2ZW50OiJjbGljayIsaGVhZGVyOiI+IGxpID4gOmZpcnN0LWNoaWxkLD4gOm5vdChsaSk6ZXZlbiIsaGVpZ2h0U3R5bGU6ImF1dG8iLGljb25zOnthY3RpdmVIZWFkZXI6InVpLWljb24tdHJpYW5nbGUtMS1zIixoZWFkZXI6InVpLWljb24tdHJpYW5nbGUtMS1lIn0sYWN0aXZhdGU6bnVsbCxiZWZvcmVBY3RpdmF0ZTpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hY2NvcmRpb25JZD0idWktYWNjb3JkaW9uLSIrKHRoaXMuZWxlbWVudC5hdHRyKCJpZCIpfHwrK24pLHI9dGhpcy5vcHRpb25zO3RoaXMucHJldlNob3c9dGhpcy5wcmV2SGlkZT1lKCksdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1hY2NvcmRpb24gdWktd2lkZ2V0IHVpLWhlbHBlci1yZXNldCIpLHRoaXMuaGVhZGVycz10aGlzLmVsZW1lbnQuZmluZChyLmhlYWRlcikuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXIgdWktaGVscGVyLXJlc2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIpLHRoaXMuX2hvdmVyYWJsZSh0aGlzLmhlYWRlcnMpLHRoaXMuX2ZvY3VzYWJsZSh0aGlzLmhlYWRlcnMpLHRoaXMuaGVhZGVycy5uZXh0KCkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50IHVpLWhlbHBlci1yZXNldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuaGlkZSgpLCFyLmNvbGxhcHNpYmxlJiZyLmFjdGl2ZT09PSExJiYoci5hY3RpdmU9MCksci5hY3RpdmU8MCYmKHIuYWN0aXZlKz10aGlzLmhlYWRlcnMubGVuZ3RoKSx0aGlzLmFjdGl2ZT10aGlzLl9maW5kQWN0aXZlKHIuYWN0aXZlKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIikudG9nZ2xlQ2xhc3MoInVpLWNvcm5lci1hbGwgdWktY29ybmVyLXRvcCIpLHRoaXMuYWN0aXZlLm5leHQoKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIikuc2hvdygpLHRoaXMuX2NyZWF0ZUljb25zKCksdGhpcy5vcmlnaW5hbEhlaWdodD10aGlzLmVsZW1lbnRbMF0uc3R5bGUuaGVpZ2h0LHRoaXMucmVmcmVzaCgpLHRoaXMuZWxlbWVudC5hdHRyKCJyb2xlIiwidGFibGlzdCIpLHRoaXMuaGVhZGVycy5hdHRyKCJyb2xlIiwidGFiIikuZWFjaChmdW5jdGlvbihuKXt2YXIgcj1lKHRoaXMpLGk9ci5hdHRyKCJpZCIpLHM9ci5uZXh0KCksbz1zLmF0dHIoImlkIik7aXx8KGk9dCsiLWhlYWRlci0iK24sci5hdHRyKCJpZCIsaSkpLG98fChvPXQrIi1wYW5lbC0iK24scy5hdHRyKCJpZCIsbykpLHIuYXR0cigiYXJpYS1jb250cm9scyIsbykscy5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLGkpfSkubmV4dCgpLmF0dHIoInJvbGUiLCJ0YWJwYW5lbCIpLHRoaXMuaGVhZGVycy5ub3QodGhpcy5hY3RpdmUpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLHRhYkluZGV4Oi0xfSkubmV4dCgpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLCJhcmlhLWhpZGRlbiI6InRydWUifSkuaGlkZSgpLHRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLmFjdGl2ZS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLHRhYkluZGV4OjB9KS5uZXh0KCkuYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJ0cnVlIiwiYXJpYS1oaWRkZW4iOiJmYWxzZSJ9KTp0aGlzLmhlYWRlcnMuZXEoMCkuYXR0cigidGFiSW5kZXgiLDApLHRoaXMuX29uKHRoaXMuaGVhZGVycyx7a2V5ZG93bjoiX2tleWRvd24ifSksdGhpcy5fb24odGhpcy5oZWFkZXJzLm5leHQoKSx7a2V5ZG93bjoiX3BhbmVsS2V5RG93biJ9KSx0aGlzLl9zZXR1cEV2ZW50cyhyLmV2ZW50KX0sX2dldENyZWF0ZUV2ZW50RGF0YTpmdW5jdGlvbigpe3JldHVybntoZWFkZXI6dGhpcy5hY3RpdmUsY29udGVudDp0aGlzLmFjdGl2ZS5sZW5ndGg/dGhpcy5hY3RpdmUubmV4dCgpOmUoKX19LF9jcmVhdGVJY29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5pY29uczt0JiYoZSgiPHNwYW4+IikuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiB1aS1pY29uICIrdC5oZWFkZXIpLnByZXBlbmRUbyh0aGlzLmhlYWRlcnMpLHRoaXMuYWN0aXZlLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlQ2xhc3ModC5oZWFkZXIpLmFkZENsYXNzKHQuYWN0aXZlSGVhZGVyKSx0aGlzLmhlYWRlcnMuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1pY29ucyIpKX0sX2Rlc3Ryb3lJY29uczpmdW5jdGlvbigpe3RoaXMuaGVhZGVycy5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWljb25zIikuY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmUoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZTt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbiB1aS13aWRnZXQgdWktaGVscGVyLXJlc2V0IikucmVtb3ZlQXR0cigicm9sZSIpLHRoaXMuaGVhZGVycy5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlciB1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB1aS1oZWxwZXItcmVzZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCB1aS1jb3JuZXItdG9wIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtc2VsZWN0ZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWNvbnRyb2xzIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5lYWNoKGZ1bmN0aW9uKCl7L151aS1hY2NvcmRpb24vLnRlc3QodGhpcy5pZCkmJnRoaXMucmVtb3ZlQXR0cmlidXRlKCJpZCIpfSksdGhpcy5fZGVzdHJveUljb25zKCksZT10aGlzLmhlYWRlcnMubmV4dCgpLmNzcygiZGlzcGxheSIsIiIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigiYXJpYS1oaWRkZW4iKS5yZW1vdmVBdHRyKCJhcmlhLWxhYmVsbGVkYnkiKS5yZW1vdmVDbGFzcygidWktaGVscGVyLXJlc2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20gdWktYWNjb3JkaW9uLWNvbnRlbnQgdWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIHVpLXN0YXRlLWRpc2FibGVkIikuZWFjaChmdW5jdGlvbigpey9edWktYWNjb3JkaW9uLy50ZXN0KHRoaXMuaWQpJiZ0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX0pLHRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSE9PSJjb250ZW50IiYmKHRoaXMuZWxlbWVudC5jc3MoImhlaWdodCIsdGhpcy5vcmlnaW5hbEhlaWdodCksZS5jc3MoImhlaWdodCIsIiIpKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe2lmKGU9PT0iYWN0aXZlIil7dGhpcy5fYWN0aXZhdGUodCk7cmV0dXJufWU9PT0iZXZlbnQiJiYodGhpcy5vcHRpb25zLmV2ZW50JiZ0aGlzLl9vZmYodGhpcy5oZWFkZXJzLHRoaXMub3B0aW9ucy5ldmVudCksdGhpcy5fc2V0dXBFdmVudHModCkpLHRoaXMuX3N1cGVyKGUsdCksZT09PSJjb2xsYXBzaWJsZSImJiF0JiZ0aGlzLm9wdGlvbnMuYWN0aXZlPT09ITEmJnRoaXMuX2FjdGl2YXRlKDApLGU9PT0iaWNvbnMiJiYodGhpcy5fZGVzdHJveUljb25zKCksdCYmdGhpcy5fY3JlYXRlSWNvbnMoKSksZT09PSJkaXNhYmxlZCImJnRoaXMuaGVhZGVycy5hZGQodGhpcy5oZWFkZXJzLm5leHQoKSkudG9nZ2xlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiwhIXQpfSxfa2V5ZG93bjpmdW5jdGlvbih0KXtpZih0LmFsdEtleXx8dC5jdHJsS2V5KXJldHVybjt2YXIgbj1lLnVpLmtleUNvZGUscj10aGlzLmhlYWRlcnMubGVuZ3RoLGk9dGhpcy5oZWFkZXJzLmluZGV4KHQudGFyZ2V0KSxzPSExO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2Ugbi5SSUdIVDpjYXNlIG4uRE9XTjpzPXRoaXMuaGVhZGVyc1soaSsxKSVyXTticmVhaztjYXNlIG4uTEVGVDpjYXNlIG4uVVA6cz10aGlzLmhlYWRlcnNbKGktMStyKSVyXTticmVhaztjYXNlIG4uU1BBQ0U6Y2FzZSBuLkVOVEVSOnRoaXMuX2V2ZW50SGFuZGxlcih0KTticmVhaztjYXNlIG4uSE9NRTpzPXRoaXMuaGVhZGVyc1swXTticmVhaztjYXNlIG4uRU5EOnM9dGhpcy5oZWFkZXJzW3ItMV19cyYmKGUodC50YXJnZXQpLmF0dHIoInRhYkluZGV4IiwtMSksZShzKS5hdHRyKCJ0YWJJbmRleCIsMCkscy5mb2N1cygpLHQucHJldmVudERlZmF1bHQoKSl9LF9wYW5lbEtleURvd246ZnVuY3Rpb24odCl7dC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlVQJiZ0LmN0cmxLZXkmJmUodC5jdXJyZW50VGFyZ2V0KS5wcmV2KCkuZm9jdXMoKX0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0LG4scj10aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUsaT10aGlzLmVsZW1lbnQucGFyZW50KCk7dGhpcy5lbGVtZW50LmNzcygiaGVpZ2h0Iix0aGlzLm9yaWdpbmFsSGVpZ2h0KSxyPT09ImZpbGwiPyhlLnN1cHBvcnQubWluSGVpZ2h0fHwobj1pLmNzcygib3ZlcmZsb3ciKSxpLmNzcygib3ZlcmZsb3ciLCJoaWRkZW4iKSksdD1pLmhlaWdodCgpLHRoaXMuZWxlbWVudC5zaWJsaW5ncygiOnZpc2libGUiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49ZSh0aGlzKSxyPW4uY3NzKCJwb3NpdGlvbiIpO2lmKHI9PT0iYWJzb2x1dGUifHxyPT09ImZpeGVkIilyZXR1cm47dC09bi5vdXRlckhlaWdodCghMCl9KSxuJiZpLmNzcygib3ZlcmZsb3ciLG4pLHRoaXMuaGVhZGVycy5lYWNoKGZ1bmN0aW9uKCl7dC09ZSh0aGlzKS5vdXRlckhlaWdodCghMCl9KSx0aGlzLmhlYWRlcnMubmV4dCgpLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmhlaWdodChNYXRoLm1heCgwLHQtZSh0aGlzKS5pbm5lckhlaWdodCgpK2UodGhpcykuaGVpZ2h0KCkpKX0pLmNzcygib3ZlcmZsb3ciLCJhdXRvIikpOnI9PT0iYXV0byImJih0PTAsdGhpcy5oZWFkZXJzLm5leHQoKS5lYWNoKGZ1bmN0aW9uKCl7dD1NYXRoLm1heCh0LGUodGhpcykuaGVpZ2h0KCIiKS5oZWlnaHQoKSl9KS5oZWlnaHQodCkpLHIhPT0iY29udGVudCImJnRoaXMuZWxlbWVudC5oZWlnaHQodGhpcy5lbGVtZW50LmhlaWdodCgpKX0sX2FjdGl2YXRlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX2ZpbmRBY3RpdmUodClbMF07aWYobj09PXRoaXMuYWN0aXZlWzBdKXJldHVybjtuPW58fHRoaXMuYWN0aXZlWzBdLHRoaXMuX2V2ZW50SGFuZGxlcih7dGFyZ2V0Om4sY3VycmVudFRhcmdldDpuLHByZXZlbnREZWZhdWx0OmUubm9vcH0pfSxfZmluZEFjdGl2ZTpmdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHQ9PSJudW1iZXIiP3RoaXMuaGVhZGVycy5lcSh0KTplKCl9LF9zZXR1cEV2ZW50czpmdW5jdGlvbih0KXt2YXIgbj17fTtpZighdClyZXR1cm47ZS5lYWNoKHQuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe25bdF09Il9ldmVudEhhbmRsZXIifSksdGhpcy5fb24odGhpcy5oZWFkZXJzLG4pfSxfZXZlbnRIYW5kbGVyOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyPXRoaXMuYWN0aXZlLGk9ZSh0LmN1cnJlbnRUYXJnZXQpLHM9aVswXT09PXJbMF0sbz1zJiZuLmNvbGxhcHNpYmxlLHU9bz9lKCk6aS5uZXh0KCksYT1yLm5leHQoKSxmPXtvbGRIZWFkZXI6cixvbGRQYW5lbDphLG5ld0hlYWRlcjpvP2UoKTppLG5ld1BhbmVsOnV9O3QucHJldmVudERlZmF1bHQoKTtpZihzJiYhbi5jb2xsYXBzaWJsZXx8dGhpcy5fdHJpZ2dlcigiYmVmb3JlQWN0aXZhdGUiLHQsZik9PT0hMSlyZXR1cm47bi5hY3RpdmU9bz8hMTp0aGlzLmhlYWRlcnMuaW5kZXgoaSksdGhpcy5hY3RpdmU9cz9lKCk6aSx0aGlzLl90b2dnbGUoZiksci5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiksbi5pY29ucyYmci5jaGlsZHJlbigiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiIpLnJlbW92ZUNsYXNzKG4uaWNvbnMuYWN0aXZlSGVhZGVyKS5hZGRDbGFzcyhuLmljb25zLmhlYWRlciksc3x8KGkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwiKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIHVpLWNvcm5lci10b3AiKSxuLmljb25zJiZpLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlQ2xhc3Mobi5pY29ucy5oZWFkZXIpLmFkZENsYXNzKG4uaWNvbnMuYWN0aXZlSGVhZGVyKSxpLm5leHQoKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIikpfSxfdG9nZ2xlOmZ1bmN0aW9uKHQpe3ZhciBuPXQubmV3UGFuZWwscj10aGlzLnByZXZTaG93Lmxlbmd0aD90aGlzLnByZXZTaG93OnQub2xkUGFuZWw7dGhpcy5wcmV2U2hvdy5hZGQodGhpcy5wcmV2SGlkZSkuc3RvcCghMCwhMCksdGhpcy5wcmV2U2hvdz1uLHRoaXMucHJldkhpZGU9cix0aGlzLm9wdGlvbnMuYW5pbWF0ZT90aGlzLl9hbmltYXRlKG4scix0KTooci5oaWRlKCksbi5zaG93KCksdGhpcy5fdG9nZ2xlQ29tcGxldGUodCkpLHIuYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJmYWxzZSIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxyLnByZXYoKS5hdHRyKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSxuLmxlbmd0aCYmci5sZW5ndGg/ci5wcmV2KCkuYXR0cigidGFiSW5kZXgiLC0xKTpuLmxlbmd0aCYmdGhpcy5oZWFkZXJzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmF0dHIoInRhYkluZGV4Iik9PT0wfSkuYXR0cigidGFiSW5kZXgiLC0xKSxuLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsImFyaWEtaGlkZGVuIjoiZmFsc2UifSkucHJldigpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pfSxfYW5pbWF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHMsbyx1LGE9dGhpcyxmPTAsbD1lLmxlbmd0aCYmKCF0Lmxlbmd0aHx8ZS5pbmRleCgpPHQuaW5kZXgoKSksYz10aGlzLm9wdGlvbnMuYW5pbWF0ZXx8e30saD1sJiZjLmRvd258fGMscD1mdW5jdGlvbigpe2EuX3RvZ2dsZUNvbXBsZXRlKG4pfTt0eXBlb2YgaD09Im51bWJlciImJih1PWgpLHR5cGVvZiBoPT0ic3RyaW5nIiYmKG89aCksbz1vfHxoLmVhc2luZ3x8Yy5lYXNpbmcsdT11fHxoLmR1cmF0aW9ufHxjLmR1cmF0aW9uO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5hbmltYXRlKGksdSxvLHApO2lmKCFlLmxlbmd0aClyZXR1cm4gdC5hbmltYXRlKHIsdSxvLHApO3M9ZS5zaG93KCkub3V0ZXJIZWlnaHQoKSx0LmFuaW1hdGUocix7ZHVyYXRpb246dSxlYXNpbmc6byxzdGVwOmZ1bmN0aW9uKGUsdCl7dC5ub3c9TWF0aC5yb3VuZChlKX19KSxlLmhpZGUoKS5hbmltYXRlKGkse2R1cmF0aW9uOnUsZWFzaW5nOm8sY29tcGxldGU6cCxzdGVwOmZ1bmN0aW9uKGUsbil7bi5ub3c9TWF0aC5yb3VuZChlKSxuLnByb3AhPT0iaGVpZ2h0Ij9mKz1uLm5vdzphLm9wdGlvbnMuaGVpZ2h0U3R5bGUhPT0iY29udGVudCImJihuLm5vdz1NYXRoLnJvdW5kKHMtdC5vdXRlckhlaWdodCgpLWYpLGY9MCl9fSl9LF90b2dnbGVDb21wbGV0ZTpmdW5jdGlvbihlKXt2YXIgdD1lLm9sZFBhbmVsO3QucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSIpLnByZXYoKS5yZW1vdmVDbGFzcygidWktY29ybmVyLXRvcCIpLmFkZENsYXNzKCJ1aS1jb3JuZXItYWxsIiksdC5sZW5ndGgmJih0LnBhcmVudCgpWzBdLmNsYXNzTmFtZT10LnBhcmVudCgpWzBdLmNsYXNzTmFtZSksdGhpcy5fdHJpZ2dlcigiYWN0aXZhdGUiLG51bGwsZSl9fSksZS51aUJhY2tDb21wYXQhPT0hMSYmKGZ1bmN0aW9uKGUsdCl7ZS5leHRlbmQodC5vcHRpb25zLHtuYXZpZ2F0aW9uOiExLG5hdmlnYXRpb25GaWx0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ocmVmLnRvTG93ZXJDYXNlKCk9PT1sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCl9fSk7dmFyIG49dC5fY3JlYXRlO3QuX2NyZWF0ZT1mdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5uYXZpZ2F0aW9uKXt2YXIgdD10aGlzLHI9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLmhlYWRlciksaT1yLm5leHQoKSxzPXIuYWRkKGkpLmZpbmQoImEiKS5maWx0ZXIodGhpcy5vcHRpb25zLm5hdmlnYXRpb25GaWx0ZXIpWzBdO3MmJnIuYWRkKGkpLmVhY2goZnVuY3Rpb24obil7aWYoZS5jb250YWlucyh0aGlzLHMpKXJldHVybiB0Lm9wdGlvbnMuYWN0aXZlPU1hdGguZmxvb3Iobi8yKSwhMX0pfW4uY2FsbCh0aGlzKX19KGpRdWVyeSxqUXVlcnkudWkuYWNjb3JkaW9uLnByb3RvdHlwZSksZnVuY3Rpb24oZSx0KXtlLmV4dGVuZCh0Lm9wdGlvbnMse2hlaWdodFN0eWxlOm51bGwsYXV0b0hlaWdodDohMCxjbGVhclN0eWxlOiExLGZpbGxTcGFjZTohMX0pO3ZhciBuPXQuX2NyZWF0ZSxyPXQuX3NldE9wdGlvbjtlLmV4dGVuZCh0LHtfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmhlaWdodFN0eWxlPXRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZXx8dGhpcy5fbWVyZ2VIZWlnaHRTdHlsZSgpLG4uY2FsbCh0aGlzKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe2lmKGU9PT0iYXV0b0hlaWdodCJ8fGU9PT0iY2xlYXJTdHlsZSJ8fGU9PT0iZmlsbFNwYWNlIil0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGU9dGhpcy5fbWVyZ2VIZWlnaHRTdHlsZSgpO3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfbWVyZ2VIZWlnaHRTdHlsZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztpZihlLmZpbGxTcGFjZSlyZXR1cm4iZmlsbCI7aWYoZS5jbGVhclN0eWxlKXJldHVybiJjb250ZW50IjtpZihlLmF1dG9IZWlnaHQpcmV0dXJuImF1dG8ifX0pfShqUXVlcnksalF1ZXJ5LnVpLmFjY29yZGlvbi5wcm90b3R5cGUpLGZ1bmN0aW9uKGUsdCl7ZS5leHRlbmQodC5vcHRpb25zLmljb25zLHthY3RpdmVIZWFkZXI6bnVsbCxoZWFkZXJTZWxlY3RlZDoidWktaWNvbi10cmlhbmdsZS0xLXMifSk7dmFyIG49dC5fY3JlYXRlSWNvbnM7dC5fY3JlYXRlSWNvbnM9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuaWNvbnMmJih0aGlzLm9wdGlvbnMuaWNvbnMuYWN0aXZlSGVhZGVyPXRoaXMub3B0aW9ucy5pY29ucy5hY3RpdmVIZWFkZXJ8fHRoaXMub3B0aW9ucy5pY29ucy5oZWFkZXJTZWxlY3RlZCksbi5jYWxsKHRoaXMpfX0oalF1ZXJ5LGpRdWVyeS51aS5hY2NvcmRpb24ucHJvdG90eXBlKSxmdW5jdGlvbihlLHQpe3QuYWN0aXZhdGU9dC5fYWN0aXZhdGU7dmFyIG49dC5fZmluZEFjdGl2ZTt0Ll9maW5kQWN0aXZlPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09LTEmJihlPSExKSxlJiZ0eXBlb2YgZSE9Im51bWJlciImJihlPXRoaXMuaGVhZGVycy5pbmRleCh0aGlzLmhlYWRlcnMuZmlsdGVyKGUpKSxlPT09LTEmJihlPSExKSksbi5jYWxsKHRoaXMsZSl9fShqUXVlcnksalF1ZXJ5LnVpLmFjY29yZGlvbi5wcm90b3R5cGUpLGpRdWVyeS51aS5hY2NvcmRpb24ucHJvdG90eXBlLnJlc2l6ZT1qUXVlcnkudWkuYWNjb3JkaW9uLnByb3RvdHlwZS5yZWZyZXNoLGZ1bmN0aW9uKGUsdCl7ZS5leHRlbmQodC5vcHRpb25zLHtjaGFuZ2U6bnVsbCxjaGFuZ2VzdGFydDpudWxsfSk7dmFyIG49dC5fdHJpZ2dlcjt0Ll90cmlnZ2VyPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaT8oZT09PSJiZWZvcmVBY3RpdmF0ZSI/aT1uLmNhbGwodGhpcywiY2hhbmdlc3RhcnQiLHQse29sZEhlYWRlcjpyLm9sZEhlYWRlcixvbGRDb250ZW50OnIub2xkUGFuZWwsbmV3SGVhZGVyOnIubmV3SGVhZGVyLG5ld0NvbnRlbnQ6ci5uZXdQYW5lbH0pOmU9PT0iYWN0aXZhdGUiJiYoaT1uLmNhbGwodGhpcywiY2hhbmdlIix0LHtvbGRIZWFkZXI6ci5vbGRIZWFkZXIsb2xkQ29udGVudDpyLm9sZFBhbmVsLG5ld0hlYWRlcjpyLm5ld0hlYWRlcixuZXdDb250ZW50OnIubmV3UGFuZWx9KSksaSk6ITF9fShqUXVlcnksalF1ZXJ5LnVpLmFjY29yZGlvbi5wcm90b3R5cGUpLGZ1bmN0aW9uKGUsdCl7ZS5leHRlbmQodC5vcHRpb25zLHthbmltYXRlOm51bGwsYW5pbWF0ZWQ6InNsaWRlIn0pO3ZhciBuPXQuX2NyZWF0ZTt0Ll9jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnM7ZS5hbmltYXRlPT09bnVsbCYmKGUuYW5pbWF0ZWQ/ZS5hbmltYXRlZD09PSJzbGlkZSI/ZS5hbmltYXRlPTMwMDplLmFuaW1hdGVkPT09ImJvdW5jZXNsaWRlIj9lLmFuaW1hdGU9e2R1cmF0aW9uOjIwMCxkb3duOntlYXNpbmc6ImVhc2VPdXRCb3VuY2UiLGR1cmF0aW9uOjFlM319OmUuYW5pbWF0ZT1lLmFuaW1hdGVkOmUuYW5pbWF0ZT0hMSksbi5jYWxsKHRoaXMpfX0oalF1ZXJ5LGpRdWVyeS51aS5hY2NvcmRpb24ucHJvdG90eXBlKSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuPTA7ZS53aWRnZXQoInVpLmF1dG9jb21wbGV0ZSIse3ZlcnNpb246IjEuOS4wIixkZWZhdWx0RWxlbWVudDoiPGlucHV0PiIsb3B0aW9uczp7YXBwZW5kVG86ImJvZHkiLGF1dG9Gb2N1czohMSxkZWxheTozMDAsbWluTGVuZ3RoOjEscG9zaXRpb246e215OiJsZWZ0IHRvcCIsYXQ6ImxlZnQgYm90dG9tIixjb2xsaXNpb246Im5vbmUifSxzb3VyY2U6bnVsbCxjaGFuZ2U6bnVsbCxjbG9zZTpudWxsLGZvY3VzOm51bGwsb3BlbjpudWxsLHJlc3BvbnNlOm51bGwsc2VhcmNoOm51bGwsc2VsZWN0Om51bGx9LHBlbmRpbmc6MCxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQsbixyO3RoaXMuaXNNdWx0aUxpbmU9dGhpcy5faXNNdWx0aUxpbmUoKSx0aGlzLnZhbHVlTWV0aG9kPXRoaXMuZWxlbWVudFt0aGlzLmVsZW1lbnQuaXMoImlucHV0LHRleHRhcmVhIik/InZhbCI6InRleHQiXSx0aGlzLmlzTmV3TWVudT0hMCx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1pbnB1dCIpLmF0dHIoImF1dG9jb21wbGV0ZSIsIm9mZiIpLHRoaXMuX29uKHtrZXlkb3duOmZ1bmN0aW9uKGkpe2lmKHRoaXMuZWxlbWVudC5wcm9wKCJyZWFkT25seSIpKXt0PSEwLHI9ITAsbj0hMDtyZXR1cm59dD0hMSxyPSExLG49ITE7dmFyIHM9ZS51aS5rZXlDb2RlO3N3aXRjaChpLmtleUNvZGUpe2Nhc2Ugcy5QQUdFX1VQOnQ9ITAsdGhpcy5fbW92ZSgicHJldmlvdXNQYWdlIixpKTticmVhaztjYXNlIHMuUEFHRV9ET1dOOnQ9ITAsdGhpcy5fbW92ZSgibmV4dFBhZ2UiLGkpO2JyZWFrO2Nhc2Ugcy5VUDp0PSEwLHRoaXMuX2tleUV2ZW50KCJwcmV2aW91cyIsaSk7YnJlYWs7Y2FzZSBzLkRPV046dD0hMCx0aGlzLl9rZXlFdmVudCgibmV4dCIsaSk7YnJlYWs7Y2FzZSBzLkVOVEVSOmNhc2Ugcy5OVU1QQURfRU5URVI6dGhpcy5tZW51LmFjdGl2ZSYmKHQ9ITAsaS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubWVudS5zZWxlY3QoaSkpO2JyZWFrO2Nhc2Ugcy5UQUI6dGhpcy5tZW51LmFjdGl2ZSYmdGhpcy5tZW51LnNlbGVjdChpKTticmVhaztjYXNlIHMuRVNDQVBFOnRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpJiYodGhpcy5fdmFsdWUodGhpcy50ZXJtKSx0aGlzLmNsb3NlKGkpLGkucHJldmVudERlZmF1bHQoKSk7YnJlYWs7ZGVmYXVsdDpuPSEwLHRoaXMuX3NlYXJjaFRpbWVvdXQoaSl9fSxrZXlwcmVzczpmdW5jdGlvbihyKXtpZih0KXt0PSExLHIucHJldmVudERlZmF1bHQoKTtyZXR1cm59aWYobilyZXR1cm47dmFyIGk9ZS51aS5rZXlDb2RlO3N3aXRjaChyLmtleUNvZGUpe2Nhc2UgaS5QQUdFX1VQOnRoaXMuX21vdmUoInByZXZpb3VzUGFnZSIscik7YnJlYWs7Y2FzZSBpLlBBR0VfRE9XTjp0aGlzLl9tb3ZlKCJuZXh0UGFnZSIscik7YnJlYWs7Y2FzZSBpLlVQOnRoaXMuX2tleUV2ZW50KCJwcmV2aW91cyIscik7YnJlYWs7Y2FzZSBpLkRPV046dGhpcy5fa2V5RXZlbnQoIm5leHQiLHIpfX0saW5wdXQ6ZnVuY3Rpb24oZSl7aWYocil7cj0hMSxlLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufXRoaXMuX3NlYXJjaFRpbWVvdXQoZSl9LGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZEl0ZW09bnVsbCx0aGlzLnByZXZpb3VzPXRoaXMuX3ZhbHVlKCl9LGJsdXI6ZnVuY3Rpb24oZSl7aWYodGhpcy5jYW5jZWxCbHVyKXtkZWxldGUgdGhpcy5jYW5jZWxCbHVyO3JldHVybn1jbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuY2xvc2UoZSksdGhpcy5fY2hhbmdlKGUpfX0pLHRoaXMuX2luaXRTb3VyY2UoKSx0aGlzLm1lbnU9ZSgiPHVsPiIpLmFkZENsYXNzKCJ1aS1hdXRvY29tcGxldGUiKS5hcHBlbmRUbyh0aGlzLmRvY3VtZW50LmZpbmQodGhpcy5vcHRpb25zLmFwcGVuZFRvfHwiYm9keSIpWzBdKS5tZW51KHtpbnB1dDplKCkscm9sZTpudWxsfSkuekluZGV4KHRoaXMuZWxlbWVudC56SW5kZXgoKSsxKS5oaWRlKCkuZGF0YSgibWVudSIpLHRoaXMuX29uKHRoaXMubWVudS5lbGVtZW50LHttb3VzZWRvd246ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2FuY2VsQmx1cj0hMCx0aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXJ9KTt2YXIgbj10aGlzLm1lbnUuZWxlbWVudFswXTtlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktbWVudS1pdGVtIikubGVuZ3RofHx0aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5kb2N1bWVudC5vbmUoIm1vdXNlZG93biIsZnVuY3Rpb24ocil7ci50YXJnZXQhPT10LmVsZW1lbnRbMF0mJnIudGFyZ2V0IT09biYmIWUuY29udGFpbnMobixyLnRhcmdldCkmJnQuY2xvc2UoKX0pfSl9LG1lbnVmb2N1czpmdW5jdGlvbih0LG4pe2lmKHRoaXMuaXNOZXdNZW51KXt0aGlzLmlzTmV3TWVudT0hMTtpZih0Lm9yaWdpbmFsRXZlbnQmJi9ebW91c2UvLnRlc3QodC5vcmlnaW5hbEV2ZW50LnR5cGUpKXt0aGlzLm1lbnUuYmx1cigpLHRoaXMuZG9jdW1lbnQub25lKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKCl7ZSh0LnRhcmdldCkudHJpZ2dlcih0Lm9yaWdpbmFsRXZlbnQpfSk7cmV0dXJufX12YXIgcj1uLml0ZW0uZGF0YSgidWktYXV0b2NvbXBsZXRlLWl0ZW0iKXx8bi5pdGVtLmRhdGEoIml0ZW0uYXV0b2NvbXBsZXRlIik7ITEhPT10aGlzLl90cmlnZ2VyKCJmb2N1cyIsdCx7aXRlbTpyfSk/dC5vcmlnaW5hbEV2ZW50JiYvXmtleS8udGVzdCh0Lm9yaWdpbmFsRXZlbnQudHlwZSkmJnRoaXMuX3ZhbHVlKHIudmFsdWUpOnRoaXMubGl2ZVJlZ2lvbi50ZXh0KHIudmFsdWUpfSxtZW51c2VsZWN0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5pdGVtLmRhdGEoInVpLWF1dG9jb21wbGV0ZS1pdGVtIil8fHQuaXRlbS5kYXRhKCJpdGVtLmF1dG9jb21wbGV0ZSIpLHI9dGhpcy5wcmV2aW91czt0aGlzLmVsZW1lbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQmJih0aGlzLmVsZW1lbnQuZm9jdXMoKSx0aGlzLnByZXZpb3VzPXIsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXIsdGhpcy5zZWxlY3RlZEl0ZW09bn0pKSwhMSE9PXRoaXMuX3RyaWdnZXIoInNlbGVjdCIsZSx7aXRlbTpufSkmJnRoaXMuX3ZhbHVlKG4udmFsdWUpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLHRoaXMuY2xvc2UoZSksdGhpcy5zZWxlY3RlZEl0ZW09bn19KSx0aGlzLmxpdmVSZWdpb249ZSgiPHNwYW4+Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoicG9saXRlIn0pLmFkZENsYXNzKCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiKS5pbnNlcnRBZnRlcih0aGlzLmVsZW1lbnQpLGUuZm4uYmdpZnJhbWUmJnRoaXMubWVudS5lbGVtZW50LmJnaWZyYW1lKCksdGhpcy5fb24odGhpcy53aW5kb3cse2JlZm9yZXVubG9hZDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKX19KX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktYXV0b2NvbXBsZXRlLWlucHV0IikucmVtb3ZlQXR0cigiYXV0b2NvbXBsZXRlIiksdGhpcy5tZW51LmVsZW1lbnQucmVtb3ZlKCksdGhpcy5saXZlUmVnaW9uLnJlbW92ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5fc3VwZXIoZSx0KSxlPT09InNvdXJjZSImJnRoaXMuX2luaXRTb3VyY2UoKSxlPT09ImFwcGVuZFRvIiYmdGhpcy5tZW51LmVsZW1lbnQuYXBwZW5kVG8odGhpcy5kb2N1bWVudC5maW5kKHR8fCJib2R5IilbMF0pLGU9PT0iZGlzYWJsZWQiJiZ0JiZ0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKX0sX2lzTXVsdGlMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5pcygidGV4dGFyZWEiKT8hMDp0aGlzLmVsZW1lbnQuaXMoImlucHV0Iik/ITE6dGhpcy5lbGVtZW50LnByb3AoImlzQ29udGVudEVkaXRhYmxlIil9LF9pbml0U291cmNlOmZ1bmN0aW9uKCl7dmFyIHQsbixyPXRoaXM7ZS5pc0FycmF5KHRoaXMub3B0aW9ucy5zb3VyY2UpPyh0PXRoaXMub3B0aW9ucy5zb3VyY2UsdGhpcy5zb3VyY2U9ZnVuY3Rpb24obixyKXtyKGUudWkuYXV0b2NvbXBsZXRlLmZpbHRlcih0LG4udGVybSkpfSk6dHlwZW9mIHRoaXMub3B0aW9ucy5zb3VyY2U9PSJzdHJpbmciPyhuPXRoaXMub3B0aW9ucy5zb3VyY2UsdGhpcy5zb3VyY2U9ZnVuY3Rpb24odCxpKXtyLnhociYmci54aHIuYWJvcnQoKSxyLnhocj1lLmFqYXgoe3VybDpuLGRhdGE6dCxkYXRhVHlwZToianNvbiIsc3VjY2VzczpmdW5jdGlvbihlLHQpe2koZSl9LGVycm9yOmZ1bmN0aW9uKCl7aShbXSl9fSl9KTp0aGlzLnNvdXJjZT10aGlzLm9wdGlvbnMuc291cmNlfSxfc2VhcmNoVGltZW91dDpmdW5jdGlvbihlKXtjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuc2VhcmNoaW5nPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy50ZXJtIT09dGhpcy5fdmFsdWUoKSYmKHRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsdGhpcy5zZWFyY2gobnVsbCxlKSl9LHRoaXMub3B0aW9ucy5kZWxheSl9LHNlYXJjaDpmdW5jdGlvbihlLHQpe2U9ZSE9bnVsbD9lOnRoaXMuX3ZhbHVlKCksdGhpcy50ZXJtPXRoaXMuX3ZhbHVlKCk7aWYoZS5sZW5ndGg8dGhpcy5vcHRpb25zLm1pbkxlbmd0aClyZXR1cm4gdGhpcy5jbG9zZSh0KTtpZih0aGlzLl90cmlnZ2VyKCJzZWFyY2giLHQpPT09ITEpcmV0dXJuO3JldHVybiB0aGlzLl9zZWFyY2goZSl9LF9zZWFyY2g6ZnVuY3Rpb24oZSl7dGhpcy5wZW5kaW5nKyssdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1hdXRvY29tcGxldGUtbG9hZGluZyIpLHRoaXMuY2FuY2VsU2VhcmNoPSExLHRoaXMuc291cmNlKHt0ZXJtOmV9LHRoaXMuX3Jlc3BvbnNlKCkpfSxfcmVzcG9uc2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9KytuO3JldHVybiBmdW5jdGlvbihyKXt0PT09biYmZS5fX3Jlc3BvbnNlKHIpLGUucGVuZGluZy0tLGUucGVuZGluZ3x8ZS5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hdXRvY29tcGxldGUtbG9hZGluZyIpfX0sX19yZXNwb25zZTpmdW5jdGlvbihlKXtlJiYoZT10aGlzLl9ub3JtYWxpemUoZSkpLHRoaXMuX3RyaWdnZXIoInJlc3BvbnNlIixudWxsLHtjb250ZW50OmV9KSwhdGhpcy5vcHRpb25zLmRpc2FibGVkJiZlJiZlLmxlbmd0aCYmIXRoaXMuY2FuY2VsU2VhcmNoPyh0aGlzLl9zdWdnZXN0KGUpLHRoaXMuX3RyaWdnZXIoIm9wZW4iKSk6dGhpcy5fY2xvc2UoKX0sY2xvc2U6ZnVuY3Rpb24oZSl7dGhpcy5jYW5jZWxTZWFyY2g9ITAsdGhpcy5fY2xvc2UoZSl9LF9jbG9zZTpmdW5jdGlvbihlKXt0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSYmKHRoaXMubWVudS5lbGVtZW50LmhpZGUoKSx0aGlzLm1lbnUuYmx1cigpLHRoaXMuaXNOZXdNZW51PSEwLHRoaXMuX3RyaWdnZXIoImNsb3NlIixlKSl9LF9jaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5wcmV2aW91cyE9PXRoaXMuX3ZhbHVlKCkmJnRoaXMuX3RyaWdnZXIoImNoYW5nZSIsZSx7aXRlbTp0aGlzLnNlbGVjdGVkSXRlbX0pfSxfbm9ybWFsaXplOmZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aCYmdFswXS5sYWJlbCYmdFswXS52YWx1ZT90OmUubWFwKHQsZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bGFiZWw6dCx2YWx1ZTp0fTplLmV4dGVuZCh7bGFiZWw6dC5sYWJlbHx8dC52YWx1ZSx2YWx1ZTp0LnZhbHVlfHx0LmxhYmVsfSx0KX0pfSxfc3VnZ2VzdDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm1lbnUuZWxlbWVudC5lbXB0eSgpLnpJbmRleCh0aGlzLmVsZW1lbnQuekluZGV4KCkrMSk7dGhpcy5fcmVuZGVyTWVudShuLHQpLHRoaXMubWVudS5yZWZyZXNoKCksbi5zaG93KCksdGhpcy5fcmVzaXplTWVudSgpLG4ucG9zaXRpb24oZS5leHRlbmQoe29mOnRoaXMuZWxlbWVudH0sdGhpcy5vcHRpb25zLnBvc2l0aW9uKSksdGhpcy5vcHRpb25zLmF1dG9Gb2N1cyYmdGhpcy5tZW51Lm5leHQoKX0sX3Jlc2l6ZU1lbnU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1lbnUuZWxlbWVudDtlLm91dGVyV2lkdGgoTWF0aC5tYXgoZS53aWR0aCgiIikub3V0ZXJXaWR0aCgpKzEsdGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSkpfSxfcmVuZGVyTWVudTpmdW5jdGlvbih0LG4pe3ZhciByPXRoaXM7ZS5lYWNoKG4sZnVuY3Rpb24oZSxuKXtyLl9yZW5kZXJJdGVtRGF0YSh0LG4pfSl9LF9yZW5kZXJJdGVtRGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9yZW5kZXJJdGVtKGUsdCkuZGF0YSgidWktYXV0b2NvbXBsZXRlLWl0ZW0iLHQpfSxfcmVuZGVySXRlbTpmdW5jdGlvbih0LG4pe3JldHVybiBlKCI8bGk+IikuYXBwZW5kKGUoIjxhPiIpLnRleHQobi5sYWJlbCkpLmFwcGVuZFRvKHQpfSxfbW92ZTpmdW5jdGlvbihlLHQpe2lmKCF0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSl7dGhpcy5zZWFyY2gobnVsbCx0KTtyZXR1cm59aWYodGhpcy5tZW51LmlzRmlyc3RJdGVtKCkmJi9ecHJldmlvdXMvLnRlc3QoZSl8fHRoaXMubWVudS5pc0xhc3RJdGVtKCkmJi9ebmV4dC8udGVzdChlKSl7dGhpcy5fdmFsdWUodGhpcy50ZXJtKSx0aGlzLm1lbnUuYmx1cigpO3JldHVybn10aGlzLm1lbnVbZV0odCl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbnUuZWxlbWVudH0sX3ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnZhbHVlTWV0aG9kLmFwcGx5KHRoaXMuZWxlbWVudCxhcmd1bWVudHMpfSxfa2V5RXZlbnQ6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5pc011bHRpTGluZXx8dGhpcy5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikpdGhpcy5fbW92ZShlLHQpLHQucHJldmVudERlZmF1bHQoKX19KSxlLmV4dGVuZChlLnVpLmF1dG9jb21wbGV0ZSx7ZXNjYXBlUmVnZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywiXFwkJiIpfSxmaWx0ZXI6ZnVuY3Rpb24odCxuKXt2YXIgcj1uZXcgUmVnRXhwKGUudWkuYXV0b2NvbXBsZXRlLmVzY2FwZVJlZ2V4KG4pLCJpIik7cmV0dXJuIGUuZ3JlcCh0LGZ1bmN0aW9uKGUpe3JldHVybiByLnRlc3QoZS5sYWJlbHx8ZS52YWx1ZXx8ZSl9KX19KSxlLndpZGdldCgidWkuYXV0b2NvbXBsZXRlIixlLnVpLmF1dG9jb21wbGV0ZSx7b3B0aW9uczp7bWVzc2FnZXM6e25vUmVzdWx0czoiTm8gc2VhcmNoIHJlc3VsdHMuIixyZXN1bHRzOmZ1bmN0aW9uKGUpe3JldHVybiBlKyhlPjE/IiByZXN1bHRzIGFyZSI6IiByZXN1bHQgaXMiKSsiIGF2YWlsYWJsZSwgdXNlIHVwIGFuZCBkb3duIGFycm93IGtleXMgdG8gbmF2aWdhdGUuIn19fSxfX3Jlc3BvbnNlOmZ1bmN0aW9uKGUpe3ZhciB0O3RoaXMuX3N1cGVyQXBwbHkoYXJndW1lbnRzKTtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fHRoaXMuY2FuY2VsU2VhcmNoKXJldHVybjtlJiZlLmxlbmd0aD90PXRoaXMub3B0aW9ucy5tZXNzYWdlcy5yZXN1bHRzKGUubGVuZ3RoKTp0PXRoaXMub3B0aW9ucy5tZXNzYWdlcy5ub1Jlc3VsdHMsdGhpcy5saXZlUmVnaW9uLnRleHQodCl9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxzLG89InVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIix1PSJ1aS1zdGF0ZS1ob3ZlciB1aS1zdGF0ZS1hY3RpdmUgIixhPSJ1aS1idXR0b24taWNvbnMtb25seSB1aS1idXR0b24taWNvbi1vbmx5IHVpLWJ1dHRvbi10ZXh0LWljb25zIHVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSB1aS1idXR0b24tdGV4dC1pY29uLXNlY29uZGFyeSB1aS1idXR0b24tdGV4dC1vbmx5IixmPWZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKS5maW5kKCI6dWktYnV0dG9uIik7c2V0VGltZW91dChmdW5jdGlvbigpe3QuYnV0dG9uKCJyZWZyZXNoIil9LDEpfSxsPWZ1bmN0aW9uKHQpe3ZhciBuPXQubmFtZSxyPXQuZm9ybSxpPWUoW10pO3JldHVybiBuJiYocj9pPWUocikuZmluZCgiW25hbWU9JyIrbisiJ10iKTppPWUoIltuYW1lPSciK24rIiddIix0Lm93bmVyRG9jdW1lbnQpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiF0aGlzLmZvcm19KSksaX07ZS53aWRnZXQoInVpLmJ1dHRvbiIse3ZlcnNpb246IjEuOS4wIixkZWZhdWx0RWxlbWVudDoiPGJ1dHRvbj4iLG9wdGlvbnM6e2Rpc2FibGVkOm51bGwsdGV4dDohMCxsYWJlbDpudWxsLGljb25zOntwcmltYXJ5Om51bGwsc2Vjb25kYXJ5Om51bGx9fSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmNsb3Nlc3QoImZvcm0iKS51bmJpbmQoInJlc2V0Iit0aGlzLmV2ZW50TmFtZXNwYWNlKS5iaW5kKCJyZXNldCIrdGhpcy5ldmVudE5hbWVzcGFjZSxmKSx0eXBlb2YgdGhpcy5vcHRpb25zLmRpc2FibGVkIT0iYm9vbGVhbiI/dGhpcy5vcHRpb25zLmRpc2FibGVkPSEhdGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIik6dGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIix0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLHRoaXMuX2RldGVybWluZUJ1dHRvblR5cGUoKSx0aGlzLmhhc1RpdGxlPSEhdGhpcy5idXR0b25FbGVtZW50LmF0dHIoInRpdGxlIik7dmFyIHQ9dGhpcyx1PXRoaXMub3B0aW9ucyxhPXRoaXMudHlwZT09PSJjaGVja2JveCJ8fHRoaXMudHlwZT09PSJyYWRpbyIsYz0idWktc3RhdGUtaG92ZXIiKyhhPyIiOiIgdWktc3RhdGUtYWN0aXZlIiksaD0idWktc3RhdGUtZm9jdXMiO3UubGFiZWw9PT1udWxsJiYodS5sYWJlbD10aGlzLnR5cGU9PT0iaW5wdXQiP3RoaXMuYnV0dG9uRWxlbWVudC52YWwoKTp0aGlzLmJ1dHRvbkVsZW1lbnQuaHRtbCgpKSx0aGlzLmJ1dHRvbkVsZW1lbnQuYWRkQ2xhc3MobykuYXR0cigicm9sZSIsImJ1dHRvbiIpLmJpbmQoIm1vdXNlZW50ZXIiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpZih1LmRpc2FibGVkKXJldHVybjtlKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLHRoaXM9PT1uJiZlKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKX0pLmJpbmQoIm1vdXNlbGVhdmUiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpZih1LmRpc2FibGVkKXJldHVybjtlKHRoaXMpLnJlbW92ZUNsYXNzKGMpfSkuYmluZCgiY2xpY2siK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oZSl7dS5kaXNhYmxlZCYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX0pLHRoaXMuZWxlbWVudC5iaW5kKCJmb2N1cyIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe3QuYnV0dG9uRWxlbWVudC5hZGRDbGFzcyhoKX0pLmJpbmQoImJsdXIiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXt0LmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoaCl9KSxhJiYodGhpcy5lbGVtZW50LmJpbmQoImNoYW5nZSIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2lmKHMpcmV0dXJuO3QucmVmcmVzaCgpfSksdGhpcy5idXR0b25FbGVtZW50LmJpbmQoIm1vdXNlZG93biIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbihlKXtpZih1LmRpc2FibGVkKXJldHVybjtzPSExLHI9ZS5wYWdlWCxpPWUucGFnZVl9KS5iaW5kKCJtb3VzZXVwIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKGUpe2lmKHUuZGlzYWJsZWQpcmV0dXJuO2lmKHIhPT1lLnBhZ2VYfHxpIT09ZS5wYWdlWSlzPSEwfSkpLHRoaXMudHlwZT09PSJjaGVja2JveCI/dGhpcy5idXR0b25FbGVtZW50LmJpbmQoImNsaWNrIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7aWYodS5kaXNhYmxlZHx8cylyZXR1cm4hMTtlKHRoaXMpLnRvZ2dsZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0LmJ1dHRvbkVsZW1lbnQuYXR0cigiYXJpYS1wcmVzc2VkIix0LmVsZW1lbnRbMF0uY2hlY2tlZCl9KTp0aGlzLnR5cGU9PT0icmFkaW8iP3RoaXMuYnV0dG9uRWxlbWVudC5iaW5kKCJjbGljayIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2lmKHUuZGlzYWJsZWR8fHMpcmV0dXJuITE7ZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdC5idXR0b25FbGVtZW50LmF0dHIoImFyaWEtcHJlc3NlZCIsInRydWUiKTt2YXIgbj10LmVsZW1lbnRbMF07bChuKS5ub3QobikubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcykuYnV0dG9uKCJ3aWRnZXQiKVswXX0pLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpfSk6KHRoaXMuYnV0dG9uRWxlbWVudC5iaW5kKCJtb3VzZWRvd24iK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpZih1LmRpc2FibGVkKXJldHVybiExO2UodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLG49dGhpcyx0LmRvY3VtZW50Lm9uZSgibW91c2V1cCIsZnVuY3Rpb24oKXtuPW51bGx9KX0pLmJpbmQoIm1vdXNldXAiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpZih1LmRpc2FibGVkKXJldHVybiExO2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSkuYmluZCgia2V5ZG93biIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbih0KXtpZih1LmRpc2FibGVkKXJldHVybiExOyh0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuU1BBQ0V8fHQua2V5Q29kZT09PWUudWkua2V5Q29kZS5FTlRFUikmJmUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSkuYmluZCgia2V5dXAiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKX0pLHRoaXMuYnV0dG9uRWxlbWVudC5pcygiYSIpJiZ0aGlzLmJ1dHRvbkVsZW1lbnQua2V5dXAoZnVuY3Rpb24odCl7dC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlNQQUNFJiZlKHRoaXMpLmNsaWNrKCl9KSksdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsdS5kaXNhYmxlZCksdGhpcy5fcmVzZXRCdXR0b24oKX0sX2RldGVybWluZUJ1dHRvblR5cGU6ZnVuY3Rpb24oKXt2YXIgZSx0LG47dGhpcy5lbGVtZW50LmlzKCJbdHlwZT1jaGVja2JveF0iKT90aGlzLnR5cGU9ImNoZWNrYm94Ijp0aGlzLmVsZW1lbnQuaXMoIlt0eXBlPXJhZGlvXSIpP3RoaXMudHlwZT0icmFkaW8iOnRoaXMuZWxlbWVudC5pcygiaW5wdXQiKT90aGlzLnR5cGU9ImlucHV0Ijp0aGlzLnR5cGU9ImJ1dHRvbiIsdGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlvIj8oZT10aGlzLmVsZW1lbnQucGFyZW50cygpLmxhc3QoKSx0PSJsYWJlbFtmb3I9JyIrdGhpcy5lbGVtZW50LmF0dHIoImlkIikrIiddIix0aGlzLmJ1dHRvbkVsZW1lbnQ9ZS5maW5kKHQpLHRoaXMuYnV0dG9uRWxlbWVudC5sZW5ndGh8fChlPWUubGVuZ3RoP2Uuc2libGluZ3MoKTp0aGlzLmVsZW1lbnQuc2libGluZ3MoKSx0aGlzLmJ1dHRvbkVsZW1lbnQ9ZS5maWx0ZXIodCksdGhpcy5idXR0b25FbGVtZW50Lmxlbmd0aHx8KHRoaXMuYnV0dG9uRWxlbWVudD1lLmZpbmQodCkpKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZSIpLG49dGhpcy5lbGVtZW50LmlzKCI6Y2hlY2tlZCIpLG4mJnRoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdGhpcy5idXR0b25FbGVtZW50LnByb3AoImFyaWEtcHJlc3NlZCIsbikpOnRoaXMuYnV0dG9uRWxlbWVudD10aGlzLmVsZW1lbnR9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1dHRvbkVsZW1lbnR9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiKSx0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MobysiICIrdSsiICIrYSkucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtcHJlc3NlZCIpLmh0bWwodGhpcy5idXR0b25FbGVtZW50LmZpbmQoIi51aS1idXR0b24tdGV4dCIpLmh0bWwoKSksdGhpcy5oYXNUaXRsZXx8dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUF0dHIoInRpdGxlIil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt0aGlzLl9zdXBlcihlLHQpO2lmKGU9PT0iZGlzYWJsZWQiKXt0P3RoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsITApOnRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsITEpO3JldHVybn10aGlzLl9yZXNldEJ1dHRvbigpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LmlzKCI6ZGlzYWJsZWQiKTt0IT09dGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIix0KSx0aGlzLnR5cGU9PT0icmFkaW8iP2wodGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5pcygiOmNoZWNrZWQiKT9lKHRoaXMpLmJ1dHRvbigid2lkZ2V0IikuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsInRydWUiKTplKHRoaXMpLmJ1dHRvbigid2lkZ2V0IikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsImZhbHNlIil9KTp0aGlzLnR5cGU9PT0iY2hlY2tib3giJiYodGhpcy5lbGVtZW50LmlzKCI6Y2hlY2tlZCIpP3RoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwidHJ1ZSIpOnRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKSl9LF9yZXNldEJ1dHRvbjpmdW5jdGlvbigpe2lmKHRoaXMudHlwZT09PSJpbnB1dCIpe3RoaXMub3B0aW9ucy5sYWJlbCYmdGhpcy5lbGVtZW50LnZhbCh0aGlzLm9wdGlvbnMubGFiZWwpO3JldHVybn12YXIgdD10aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoYSksbj1lKCI8c3Bhbj48L3NwYW4+Iix0aGlzLmRvY3VtZW50WzBdKS5hZGRDbGFzcygidWktYnV0dG9uLXRleHQiKS5odG1sKHRoaXMub3B0aW9ucy5sYWJlbCkuYXBwZW5kVG8odC5lbXB0eSgpKS50ZXh0KCkscj10aGlzLm9wdGlvbnMuaWNvbnMsaT1yLnByaW1hcnkmJnIuc2Vjb25kYXJ5LHM9W107ci5wcmltYXJ5fHxyLnNlY29uZGFyeT8odGhpcy5vcHRpb25zLnRleHQmJnMucHVzaCgidWktYnV0dG9uLXRleHQtaWNvbiIrKGk/InMiOnIucHJpbWFyeT8iLXByaW1hcnkiOiItc2Vjb25kYXJ5IikpLHIucHJpbWFyeSYmdC5wcmVwZW5kKCI8c3BhbiBjbGFzcz0ndWktYnV0dG9uLWljb24tcHJpbWFyeSB1aS1pY29uICIrci5wcmltYXJ5KyInPjwvc3Bhbj4iKSxyLnNlY29uZGFyeSYmdC5hcHBlbmQoIjxzcGFuIGNsYXNzPSd1aS1idXR0b24taWNvbi1zZWNvbmRhcnkgdWktaWNvbiAiK3Iuc2Vjb25kYXJ5KyInPjwvc3Bhbj4iKSx0aGlzLm9wdGlvbnMudGV4dHx8KHMucHVzaChpPyJ1aS1idXR0b24taWNvbnMtb25seSI6InVpLWJ1dHRvbi1pY29uLW9ubHkiKSx0aGlzLmhhc1RpdGxlfHx0LmF0dHIoInRpdGxlIixlLnRyaW0obikpKSk6cy5wdXNoKCJ1aS1idXR0b24tdGV4dC1vbmx5IiksdC5hZGRDbGFzcyhzLmpvaW4oIiAiKSl9fSksZS53aWRnZXQoInVpLmJ1dHRvbnNldCIse3ZlcnNpb246IjEuOS4wIixvcHRpb25zOntpdGVtczoiYnV0dG9uLCBpbnB1dFt0eXBlPWJ1dHRvbl0sIGlucHV0W3R5cGU9c3VibWl0XSwgaW5wdXRbdHlwZT1yZXNldF0sIGlucHV0W3R5cGU9Y2hlY2tib3hdLCBpbnB1dFt0eXBlPXJhZGlvXSwgYSwgOmRhdGEoYnV0dG9uKSJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWJ1dHRvbnNldCIpfSxfaW5pdDpmdW5jdGlvbigpe3RoaXMucmVmcmVzaCgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7ZT09PSJkaXNhYmxlZCImJnRoaXMuYnV0dG9ucy5idXR0b24oIm9wdGlvbiIsZSx0KSx0aGlzLl9zdXBlcihlLHQpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LmNzcygiZGlyZWN0aW9uIik9PT0icnRsIjt0aGlzLmJ1dHRvbnM9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maWx0ZXIoIjp1aS1idXR0b24iKS5idXR0b24oInJlZnJlc2giKS5lbmQoKS5ub3QoIjp1aS1idXR0b24iKS5idXR0b24oKS5lbmQoKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzKS5idXR0b24oIndpZGdldCIpWzBdfSkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwgdWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IikuZmlsdGVyKCI6Zmlyc3QiKS5hZGRDbGFzcyh0PyJ1aS1jb3JuZXItcmlnaHQiOiJ1aS1jb3JuZXItbGVmdCIpLmVuZCgpLmZpbHRlcigiOmxhc3QiKS5hZGRDbGFzcyh0PyJ1aS1jb3JuZXItbGVmdCI6InVpLWNvcm5lci1yaWdodCIpLmVuZCgpLmVuZCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktYnV0dG9uc2V0IiksdGhpcy5idXR0b25zLm1hcChmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF19KS5yZW1vdmVDbGFzcygidWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IikuZW5kKCkuYnV0dG9uKCJkZXN0cm95Iil9fSl9KShqUXVlcnkpOyhmdW5jdGlvbigkLHVuZGVmaW5lZCl7ZnVuY3Rpb24gRGF0ZXBpY2tlcigpe3RoaXMuZGVidWc9ITEsdGhpcy5fY3VySW5zdD1udWxsLHRoaXMuX2tleUV2ZW50PSExLHRoaXMuX2Rpc2FibGVkSW5wdXRzPVtdLHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nPSExLHRoaXMuX2luRGlhbG9nPSExLHRoaXMuX21haW5EaXZJZD0idWktZGF0ZXBpY2tlci1kaXYiLHRoaXMuX2lubGluZUNsYXNzPSJ1aS1kYXRlcGlja2VyLWlubGluZSIsdGhpcy5fYXBwZW5kQ2xhc3M9InVpLWRhdGVwaWNrZXItYXBwZW5kIix0aGlzLl90cmlnZ2VyQ2xhc3M9InVpLWRhdGVwaWNrZXItdHJpZ2dlciIsdGhpcy5fZGlhbG9nQ2xhc3M9InVpLWRhdGVwaWNrZXItZGlhbG9nIix0aGlzLl9kaXNhYmxlQ2xhc3M9InVpLWRhdGVwaWNrZXItZGlzYWJsZWQiLHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzPSJ1aS1kYXRlcGlja2VyLXVuc2VsZWN0YWJsZSIsdGhpcy5fY3VycmVudENsYXNzPSJ1aS1kYXRlcGlja2VyLWN1cnJlbnQtZGF5Iix0aGlzLl9kYXlPdmVyQ2xhc3M9InVpLWRhdGVwaWNrZXItZGF5cy1jZWxsLW92ZXIiLHRoaXMucmVnaW9uYWw9W10sdGhpcy5yZWdpb25hbFsiIl09e2Nsb3NlVGV4dDoiRG9uZSIscHJldlRleHQ6IlByZXYiLG5leHRUZXh0OiJOZXh0IixjdXJyZW50VGV4dDoiVG9kYXkiLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLHdlZWtIZWFkZXI6IldrIixkYXRlRm9ybWF0OiJtbS9kZC95eSIsZmlyc3REYXk6MCxpc1JUTDohMSxzaG93TW9udGhBZnRlclllYXI6ITEseWVhclN1ZmZpeDoiIn0sdGhpcy5fZGVmYXVsdHM9e3Nob3dPbjoiZm9jdXMiLHNob3dBbmltOiJmYWRlSW4iLHNob3dPcHRpb25zOnt9LGRlZmF1bHREYXRlOm51bGwsYXBwZW5kVGV4dDoiIixidXR0b25UZXh0OiIuLi4iLGJ1dHRvbkltYWdlOiIiLGJ1dHRvbkltYWdlT25seTohMSxoaWRlSWZOb1ByZXZOZXh0OiExLG5hdmlnYXRpb25Bc0RhdGVGb3JtYXQ6ITEsZ290b0N1cnJlbnQ6ITEsY2hhbmdlTW9udGg6ITEsY2hhbmdlWWVhcjohMSx5ZWFyUmFuZ2U6ImMtMTA6YysxMCIsc2hvd090aGVyTW9udGhzOiExLHNlbGVjdE90aGVyTW9udGhzOiExLHNob3dXZWVrOiExLGNhbGN1bGF0ZVdlZWs6dGhpcy5pc284NjAxV2VlayxzaG9ydFllYXJDdXRvZmY6IisxMCIsbWluRGF0ZTpudWxsLG1heERhdGU6bnVsbCxkdXJhdGlvbjoiZmFzdCIsYmVmb3JlU2hvd0RheTpudWxsLGJlZm9yZVNob3c6bnVsbCxvblNlbGVjdDpudWxsLG9uQ2hhbmdlTW9udGhZZWFyOm51bGwsb25DbG9zZTpudWxsLG51bWJlck9mTW9udGhzOjEsc2hvd0N1cnJlbnRBdFBvczowLHN0ZXBNb250aHM6MSxzdGVwQmlnTW9udGhzOjEyLGFsdEZpZWxkOiIiLGFsdEZvcm1hdDoiIixjb25zdHJhaW5JbnB1dDohMCxzaG93QnV0dG9uUGFuZWw6ITEsYXV0b1NpemU6ITEsZGlzYWJsZWQ6ITF9LCQuZXh0ZW5kKHRoaXMuX2RlZmF1bHRzLHRoaXMucmVnaW9uYWxbIiJdKSx0aGlzLmRwRGl2PWJpbmRIb3ZlcigkKCc8ZGl2IGlkPSInK3RoaXMuX21haW5EaXZJZCsnIiBjbGFzcz0idWktZGF0ZXBpY2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwiPjwvZGl2PicpKX1mdW5jdGlvbiBiaW5kSG92ZXIoZSl7dmFyIHQ9ImJ1dHRvbiwgLnVpLWRhdGVwaWNrZXItcHJldiwgLnVpLWRhdGVwaWNrZXItbmV4dCwgLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdGQgYSI7cmV0dXJuIGUuZGVsZWdhdGUodCwibW91c2VvdXQiLGZ1bmN0aW9uKCl7JCh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSx0aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJ1aS1kYXRlcGlja2VyLXByZXYiKSE9LTEmJiQodGhpcykucmVtb3ZlQ2xhc3MoInVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciIpLHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItbmV4dCIpIT0tMSYmJCh0aGlzKS5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIil9KS5kZWxlZ2F0ZSh0LCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7JC5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihpbnN0QWN0aXZlLmlubGluZT9lLnBhcmVudCgpWzBdOmluc3RBY3RpdmUuaW5wdXRbMF0pfHwoJCh0aGlzKS5wYXJlbnRzKCIudWktZGF0ZXBpY2tlci1jYWxlbmRhciIpLmZpbmQoImEiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSwkKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpIT0tMSYmJCh0aGlzKS5hZGRDbGFzcygidWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyIiksdGhpcy5jbGFzc05hbWUuaW5kZXhPZigidWktZGF0ZXBpY2tlci1uZXh0IikhPS0xJiYkKHRoaXMpLmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLW5leHQtaG92ZXIiKSl9KX1mdW5jdGlvbiBleHRlbmRSZW1vdmUoZSx0KXskLmV4dGVuZChlLHQpO2Zvcih2YXIgbiBpbiB0KWlmKHRbbl09PW51bGx8fHRbbl09PXVuZGVmaW5lZCllW25dPXRbbl07cmV0dXJuIGV9JC5leHRlbmQoJC51aSx7ZGF0ZXBpY2tlcjp7dmVyc2lvbjoiMS45LjAifX0pO3ZhciBQUk9QX05BTUU9ImRhdGVwaWNrZXIiLGRwdXVpZD0obmV3IERhdGUpLmdldFRpbWUoKSxpbnN0QWN0aXZlOyQuZXh0ZW5kKERhdGVwaWNrZXIucHJvdG90eXBlLHttYXJrZXJDbGFzc05hbWU6Imhhc0RhdGVwaWNrZXIiLG1heFJvd3M6NCxsb2c6ZnVuY3Rpb24oKXt0aGlzLmRlYnVnJiZjb25zb2xlLmxvZy5hcHBseSgiIixhcmd1bWVudHMpfSxfd2lkZ2V0RGF0ZXBpY2tlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRwRGl2fSxzZXREZWZhdWx0czpmdW5jdGlvbihlKXtyZXR1cm4gZXh0ZW5kUmVtb3ZlKHRoaXMuX2RlZmF1bHRzLGV8fHt9KSx0aGlzfSxfYXR0YWNoRGF0ZXBpY2tlcjpmdW5jdGlvbih0YXJnZXQsc2V0dGluZ3Mpe3ZhciBpbmxpbmVTZXR0aW5ncz1udWxsO2Zvcih2YXIgYXR0ck5hbWUgaW4gdGhpcy5fZGVmYXVsdHMpe3ZhciBhdHRyVmFsdWU9dGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0ZToiK2F0dHJOYW1lKTtpZihhdHRyVmFsdWUpe2lubGluZVNldHRpbmdzPWlubGluZVNldHRpbmdzfHx7fTt0cnl7aW5saW5lU2V0dGluZ3NbYXR0ck5hbWVdPWV2YWwoYXR0clZhbHVlKX1jYXRjaChlcnIpe2lubGluZVNldHRpbmdzW2F0dHJOYW1lXT1hdHRyVmFsdWV9fX12YXIgbm9kZU5hbWU9dGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksaW5saW5lPW5vZGVOYW1lPT0iZGl2Inx8bm9kZU5hbWU9PSJzcGFuIjt0YXJnZXQuaWR8fCh0aGlzLnV1aWQrPTEsdGFyZ2V0LmlkPSJkcCIrdGhpcy51dWlkKTt2YXIgaW5zdD10aGlzLl9uZXdJbnN0KCQodGFyZ2V0KSxpbmxpbmUpO2luc3Quc2V0dGluZ3M9JC5leHRlbmQoe30sc2V0dGluZ3N8fHt9LGlubGluZVNldHRpbmdzfHx7fSksbm9kZU5hbWU9PSJpbnB1dCI/dGhpcy5fY29ubmVjdERhdGVwaWNrZXIodGFyZ2V0LGluc3QpOmlubGluZSYmdGhpcy5faW5saW5lRGF0ZXBpY2tlcih0YXJnZXQsaW5zdCl9LF9uZXdJbnN0OmZ1bmN0aW9uKGUsdCl7dmFyIG49ZVswXS5pZC5yZXBsYWNlKC8oW15BLVphLXowLTlfLV0pL2csIlxcXFwkMSIpO3JldHVybntpZDpuLGlucHV0OmUsc2VsZWN0ZWREYXk6MCxzZWxlY3RlZE1vbnRoOjAsc2VsZWN0ZWRZZWFyOjAsZHJhd01vbnRoOjAsZHJhd1llYXI6MCxpbmxpbmU6dCxkcERpdjp0P2JpbmRIb3ZlcigkKCc8ZGl2IGNsYXNzPSInK3RoaXMuX2lubGluZUNsYXNzKycgdWktZGF0ZXBpY2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwiPjwvZGl2PicpKTp0aGlzLmRwRGl2fX0sX2Nvbm5lY3REYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7dmFyIG49JChlKTt0LmFwcGVuZD0kKFtdKSx0LnRyaWdnZXI9JChbXSk7aWYobi5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpcmV0dXJuO3RoaXMuX2F0dGFjaG1lbnRzKG4sdCksbi5hZGRDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkua2V5ZG93bih0aGlzLl9kb0tleURvd24pLmtleXByZXNzKHRoaXMuX2RvS2V5UHJlc3MpLmtleXVwKHRoaXMuX2RvS2V5VXApLmJpbmQoInNldERhdGEuZGF0ZXBpY2tlciIsZnVuY3Rpb24oZSxuLHIpe3Quc2V0dGluZ3Nbbl09cn0pLmJpbmQoImdldERhdGEuZGF0ZXBpY2tlciIsZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5fZ2V0KHQsbil9KSx0aGlzLl9hdXRvU2l6ZSh0KSwkLmRhdGEoZSxQUk9QX05BTUUsdCksdC5zZXR0aW5ncy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoZSl9LF9hdHRhY2htZW50czpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2dldCh0LCJhcHBlbmRUZXh0Iikscj10aGlzLl9nZXQodCwiaXNSVEwiKTt0LmFwcGVuZCYmdC5hcHBlbmQucmVtb3ZlKCksbiYmKHQuYXBwZW5kPSQoJzxzcGFuIGNsYXNzPSInK3RoaXMuX2FwcGVuZENsYXNzKyciPicrbisiPC9zcGFuPiIpLGVbcj8iYmVmb3JlIjoiYWZ0ZXIiXSh0LmFwcGVuZCkpLGUudW5iaW5kKCJmb2N1cyIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLHQudHJpZ2dlciYmdC50cmlnZ2VyLnJlbW92ZSgpO3ZhciBpPXRoaXMuX2dldCh0LCJzaG93T24iKTsoaT09ImZvY3VzInx8aT09ImJvdGgiKSYmZS5mb2N1cyh0aGlzLl9zaG93RGF0ZXBpY2tlcik7aWYoaT09ImJ1dHRvbiJ8fGk9PSJib3RoIil7dmFyIHM9dGhpcy5fZ2V0KHQsImJ1dHRvblRleHQiKSxvPXRoaXMuX2dldCh0LCJidXR0b25JbWFnZSIpO3QudHJpZ2dlcj0kKHRoaXMuX2dldCh0LCJidXR0b25JbWFnZU9ubHkiKT8kKCI8aW1nLz4iKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLmF0dHIoe3NyYzpvLGFsdDpzLHRpdGxlOnN9KTokKCc8YnV0dG9uIHR5cGU9ImJ1dHRvbiI+PC9idXR0b24+JykuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS5odG1sKG89PSIiP3M6JCgiPGltZy8+IikuYXR0cih7c3JjOm8sYWx0OnMsdGl0bGU6c30pKSksZVtyPyJiZWZvcmUiOiJhZnRlciJdKHQudHJpZ2dlciksdC50cmlnZ2VyLmNsaWNrKGZ1bmN0aW9uKCl7cmV0dXJuICQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJiQuZGF0ZXBpY2tlci5fbGFzdElucHV0PT1lWzBdPyQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTokLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiYkLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9ZVswXT8oJC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLCQuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIoZVswXSkpOiQuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIoZVswXSksITF9KX19LF9hdXRvU2l6ZTpmdW5jdGlvbihlKXtpZih0aGlzLl9nZXQoZSwiYXV0b1NpemUiKSYmIWUuaW5saW5lKXt2YXIgdD1uZXcgRGF0ZSgyMDA5LDExLDIwKSxuPXRoaXMuX2dldChlLCJkYXRlRm9ybWF0Iik7aWYobi5tYXRjaCgvW0RNXS8pKXt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdD0wLG49MDtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdLmxlbmd0aD50JiYodD1lW3JdLmxlbmd0aCxuPXIpO3JldHVybiBufTt0LnNldE1vbnRoKHIodGhpcy5fZ2V0KGUsbi5tYXRjaCgvTU0vKT8ibW9udGhOYW1lcyI6Im1vbnRoTmFtZXNTaG9ydCIpKSksdC5zZXREYXRlKHIodGhpcy5fZ2V0KGUsbi5tYXRjaCgvREQvKT8iZGF5TmFtZXMiOiJkYXlOYW1lc1Nob3J0IikpKzIwLXQuZ2V0RGF5KCkpfWUuaW5wdXQuYXR0cigic2l6ZSIsdGhpcy5fZm9ybWF0RGF0ZShlLHQpLmxlbmd0aCl9fSxfaW5saW5lRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQpe3ZhciBuPSQoZSk7aWYobi5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpcmV0dXJuO24uYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmFwcGVuZCh0LmRwRGl2KS5iaW5kKCJzZXREYXRhLmRhdGVwaWNrZXIiLGZ1bmN0aW9uKGUsbixyKXt0LnNldHRpbmdzW25dPXJ9KS5iaW5kKCJnZXREYXRhLmRhdGVwaWNrZXIiLGZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuX2dldCh0LG4pfSksJC5kYXRhKGUsUFJPUF9OQU1FLHQpLHRoaXMuX3NldERhdGUodCx0aGlzLl9nZXREZWZhdWx0RGF0ZSh0KSwhMCksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcih0KSx0aGlzLl91cGRhdGVBbHRlcm5hdGUodCksdC5zZXR0aW5ncy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoZSksdC5kcERpdi5jc3MoImRpc3BsYXkiLCJibG9jayIpfSxfZGlhbG9nRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBzPXRoaXMuX2RpYWxvZ0luc3Q7aWYoIXMpe3RoaXMudXVpZCs9MTt2YXIgbz0iZHAiK3RoaXMudXVpZDt0aGlzLl9kaWFsb2dJbnB1dD0kKCc8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IicrbysnIiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IC0xMDBweDsgd2lkdGg6IDBweDsiLz4nKSx0aGlzLl9kaWFsb2dJbnB1dC5rZXlkb3duKHRoaXMuX2RvS2V5RG93biksJCgiYm9keSIpLmFwcGVuZCh0aGlzLl9kaWFsb2dJbnB1dCkscz10aGlzLl9kaWFsb2dJbnN0PXRoaXMuX25ld0luc3QodGhpcy5fZGlhbG9nSW5wdXQsITEpLHMuc2V0dGluZ3M9e30sJC5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLFBST1BfTkFNRSxzKX1leHRlbmRSZW1vdmUocy5zZXR0aW5ncyxyfHx7fSksdD10JiZ0LmNvbnN0cnVjdG9yPT1EYXRlP3RoaXMuX2Zvcm1hdERhdGUocyx0KTp0LHRoaXMuX2RpYWxvZ0lucHV0LnZhbCh0KSx0aGlzLl9wb3M9aT9pLmxlbmd0aD9pOltpLnBhZ2VYLGkucGFnZVldOm51bGw7aWYoIXRoaXMuX3Bvcyl7dmFyIHU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxmPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsbD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDt0aGlzLl9wb3M9W3UvMi0xMDArZixhLzItMTUwK2xdfXJldHVybiB0aGlzLl9kaWFsb2dJbnB1dC5jc3MoImxlZnQiLHRoaXMuX3Bvc1swXSsyMCsicHgiKS5jc3MoInRvcCIsdGhpcy5fcG9zWzFdKyJweCIpLHMuc2V0dGluZ3Mub25TZWxlY3Q9bix0aGlzLl9pbkRpYWxvZz0hMCx0aGlzLmRwRGl2LmFkZENsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKSx0aGlzLl9zaG93RGF0ZXBpY2tlcih0aGlzLl9kaWFsb2dJbnB1dFswXSksJC5ibG9ja1VJJiYkLmJsb2NrVUkodGhpcy5kcERpdiksJC5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLFBST1BfTkFNRSxzKSx0aGlzfSxfZGVzdHJveURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9JChlKSxuPSQuZGF0YShlLFBST1BfTkFNRSk7aWYoIXQuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpKXJldHVybjt2YXIgcj1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7JC5yZW1vdmVEYXRhKGUsUFJPUF9OQU1FKSxyPT0iaW5wdXQiPyhuLmFwcGVuZC5yZW1vdmUoKSxuLnRyaWdnZXIucmVtb3ZlKCksdC5yZW1vdmVDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkudW5iaW5kKCJmb2N1cyIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLnVuYmluZCgia2V5ZG93biIsdGhpcy5fZG9LZXlEb3duKS51bmJpbmQoImtleXByZXNzIix0aGlzLl9kb0tleVByZXNzKS51bmJpbmQoImtleXVwIix0aGlzLl9kb0tleVVwKSk6KHI9PSJkaXYifHxyPT0ic3BhbiIpJiZ0LnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5lbXB0eSgpfSxfZW5hYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgdD0kKGUpLG49JC5kYXRhKGUsUFJPUF9OQU1FKTtpZighdC5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpcmV0dXJuO3ZhciByPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihyPT0iaW5wdXQiKWUuZGlzYWJsZWQ9ITEsbi50cmlnZ2VyLmZpbHRlcigiYnV0dG9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9ITF9KS5lbmQoKS5maWx0ZXIoImltZyIpLmNzcyh7b3BhY2l0eToiMS4wIixjdXJzb3I6IiJ9KTtlbHNlIGlmKHI9PSJkaXYifHxyPT0ic3BhbiIpe3ZhciBpPXQuY2hpbGRyZW4oIi4iK3RoaXMuX2lubGluZUNsYXNzKTtpLmNoaWxkcmVuKCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiksaS5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciIpLnByb3AoImRpc2FibGVkIiwhMSl9dGhpcy5fZGlzYWJsZWRJbnB1dHM9JC5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24odCl7cmV0dXJuIHQ9PWU/bnVsbDp0fSl9LF9kaXNhYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgdD0kKGUpLG49JC5kYXRhKGUsUFJPUF9OQU1FKTtpZighdC5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpcmV0dXJuO3ZhciByPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihyPT0iaW5wdXQiKWUuZGlzYWJsZWQ9ITAsbi50cmlnZ2VyLmZpbHRlcigiYnV0dG9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9ITB9KS5lbmQoKS5maWx0ZXIoImltZyIpLmNzcyh7b3BhY2l0eToiMC41IixjdXJzb3I6ImRlZmF1bHQifSk7ZWxzZSBpZihyPT0iZGl2Inx8cj09InNwYW4iKXt2YXIgaT10LmNoaWxkcmVuKCIuIit0aGlzLl9pbmxpbmVDbGFzcyk7aS5jaGlsZHJlbigpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLGkuZmluZCgic2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXIiKS5wcm9wKCJkaXNhYmxlZCIsITApfXRoaXMuX2Rpc2FibGVkSW5wdXRzPSQubWFwKHRoaXMuX2Rpc2FibGVkSW5wdXRzLGZ1bmN0aW9uKHQpe3JldHVybiB0PT1lP251bGw6dH0pLHRoaXMuX2Rpc2FibGVkSW5wdXRzW3RoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aF09ZX0sX2lzRGlzYWJsZWREYXRlcGlja2VyOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiExO2Zvcih2YXIgdD0wO3Q8dGhpcy5fZGlzYWJsZWRJbnB1dHMubGVuZ3RoO3QrKylpZih0aGlzLl9kaXNhYmxlZElucHV0c1t0XT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sX2dldEluc3Q6ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiAkLmRhdGEoZSxQUk9QX05BTUUpfWNhdGNoKHQpe3Rocm93Ik1pc3NpbmcgaW5zdGFuY2UgZGF0YSBmb3IgdGhpcyBkYXRlcGlja2VyIn19LF9vcHRpb25EYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLl9nZXRJbnN0KGUpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PTImJnR5cGVvZiB0PT0ic3RyaW5nIilyZXR1cm4gdD09ImRlZmF1bHRzIj8kLmV4dGVuZCh7fSwkLmRhdGVwaWNrZXIuX2RlZmF1bHRzKTpyP3Q9PSJhbGwiPyQuZXh0ZW5kKHt9LHIuc2V0dGluZ3MpOnRoaXMuX2dldChyLHQpOm51bGw7dmFyIGk9dHx8e307dHlwZW9mIHQ9PSJzdHJpbmciJiYoaT17fSxpW3RdPW4pO2lmKHIpe3RoaXMuX2N1ckluc3Q9PXImJnRoaXMuX2hpZGVEYXRlcGlja2VyKCk7dmFyIHM9dGhpcy5fZ2V0RGF0ZURhdGVwaWNrZXIoZSwhMCksbz10aGlzLl9nZXRNaW5NYXhEYXRlKHIsIm1pbiIpLHU9dGhpcy5fZ2V0TWluTWF4RGF0ZShyLCJtYXgiKTtleHRlbmRSZW1vdmUoci5zZXR0aW5ncyxpKSxvIT09bnVsbCYmaS5kYXRlRm9ybWF0IT09dW5kZWZpbmVkJiZpLm1pbkRhdGU9PT11bmRlZmluZWQmJihyLnNldHRpbmdzLm1pbkRhdGU9dGhpcy5fZm9ybWF0RGF0ZShyLG8pKSx1IT09bnVsbCYmaS5kYXRlRm9ybWF0IT09dW5kZWZpbmVkJiZpLm1heERhdGU9PT11bmRlZmluZWQmJihyLnNldHRpbmdzLm1heERhdGU9dGhpcy5fZm9ybWF0RGF0ZShyLHUpKSx0aGlzLl9hdHRhY2htZW50cygkKGUpLHIpLHRoaXMuX2F1dG9TaXplKHIpLHRoaXMuX3NldERhdGUocixzKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUociksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihyKX19LF9jaGFuZ2VEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCxuKXt0aGlzLl9vcHRpb25EYXRlcGlja2VyKGUsdCxuKX0sX3JlZnJlc2hEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldEluc3QoZSk7dCYmdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcih0KX0sX3NldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fZ2V0SW5zdChlKTtuJiYodGhpcy5fc2V0RGF0ZShuLHQpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIobiksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKG4pKX0sX2dldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fZ2V0SW5zdChlKTtyZXR1cm4gbiYmIW4uaW5saW5lJiZ0aGlzLl9zZXREYXRlRnJvbUZpZWxkKG4sdCksbj90aGlzLl9nZXREYXRlKG4pOm51bGx9LF9kb0tleURvd246ZnVuY3Rpb24oZSl7dmFyIHQ9JC5kYXRlcGlja2VyLl9nZXRJbnN0KGUudGFyZ2V0KSxuPSEwLHI9dC5kcERpdi5pcygiLnVpLWRhdGVwaWNrZXItcnRsIik7dC5fa2V5RXZlbnQ9ITA7aWYoJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZylzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDk6JC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLG49ITE7YnJlYWs7Y2FzZSAxMzp2YXIgaT0kKCJ0ZC4iKyQuZGF0ZXBpY2tlci5fZGF5T3ZlckNsYXNzKyI6bm90KC4iKyQuZGF0ZXBpY2tlci5fY3VycmVudENsYXNzKyIpIix0LmRwRGl2KTtpWzBdJiYkLmRhdGVwaWNrZXIuX3NlbGVjdERheShlLnRhcmdldCx0LnNlbGVjdGVkTW9udGgsdC5zZWxlY3RlZFllYXIsaVswXSk7dmFyIHM9JC5kYXRlcGlja2VyLl9nZXQodCwib25TZWxlY3QiKTtpZihzKXt2YXIgbz0kLmRhdGVwaWNrZXIuX2Zvcm1hdERhdGUodCk7cy5hcHBseSh0LmlucHV0P3QuaW5wdXRbMF06bnVsbCxbbyx0XSl9ZWxzZSAkLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7cmV0dXJuITE7Y2FzZSAyNzokLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7YnJlYWs7Y2FzZSAzMzokLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Py0kLmRhdGVwaWNrZXIuX2dldCh0LCJzdGVwQmlnTW9udGhzIik6LSQuZGF0ZXBpY2tlci5fZ2V0KHQsInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzQ6JC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LGUuY3RybEtleT8rJC5kYXRlcGlja2VyLl9nZXQodCwic3RlcEJpZ01vbnRocyIpOiskLmRhdGVwaWNrZXIuX2dldCh0LCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDM1OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJiQuZGF0ZXBpY2tlci5fY2xlYXJEYXRlKGUudGFyZ2V0KSxuPWUuY3RybEtleXx8ZS5tZXRhS2V5O2JyZWFrO2Nhc2UgMzY6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmJC5kYXRlcGlja2VyLl9nb3RvVG9kYXkoZS50YXJnZXQpLG49ZS5jdHJsS2V5fHxlLm1ldGFLZXk7YnJlYWs7Y2FzZSAzNzooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiYkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQscj8xOi0xLCJEIiksbj1lLmN0cmxLZXl8fGUubWV0YUtleSxlLm9yaWdpbmFsRXZlbnQuYWx0S2V5JiYkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Py0kLmRhdGVwaWNrZXIuX2dldCh0LCJzdGVwQmlnTW9udGhzIik6LSQuZGF0ZXBpY2tlci5fZ2V0KHQsInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzg6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmJC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LC03LCJEIiksbj1lLmN0cmxLZXl8fGUubWV0YUtleTticmVhaztjYXNlIDM5OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxyPy0xOjEsIkQiKSxuPWUuY3RybEtleXx8ZS5tZXRhS2V5LGUub3JpZ2luYWxFdmVudC5hbHRLZXkmJiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxlLmN0cmxLZXk/KyQuZGF0ZXBpY2tlci5fZ2V0KHQsInN0ZXBCaWdNb250aHMiKTorJC5kYXRlcGlja2VyLl9nZXQodCwic3RlcE1vbnRocyIpLCJNIik7YnJlYWs7Y2FzZSA0MDooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiYkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsNywiRCIpLG49ZS5jdHJsS2V5fHxlLm1ldGFLZXk7YnJlYWs7ZGVmYXVsdDpuPSExfWVsc2UgZS5rZXlDb2RlPT0zNiYmZS5jdHJsS2V5PyQuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIodGhpcyk6bj0hMTtuJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkpfSxfZG9LZXlQcmVzczpmdW5jdGlvbihlKXt2YXIgdD0kLmRhdGVwaWNrZXIuX2dldEluc3QoZS50YXJnZXQpO2lmKCQuZGF0ZXBpY2tlci5fZ2V0KHQsImNvbnN0cmFpbklucHV0Iikpe3ZhciBuPSQuZGF0ZXBpY2tlci5fcG9zc2libGVDaGFycygkLmRhdGVwaWNrZXIuX2dldCh0LCJkYXRlRm9ybWF0IikpLHI9U3RyaW5nLmZyb21DaGFyQ29kZShlLmNoYXJDb2RlPT11bmRlZmluZWQ/ZS5rZXlDb2RlOmUuY2hhckNvZGUpO3JldHVybiBlLmN0cmxLZXl8fGUubWV0YUtleXx8cjwiICJ8fCFufHxuLmluZGV4T2Yocik+LTF9fSxfZG9LZXlVcDpmdW5jdGlvbihlKXt2YXIgdD0kLmRhdGVwaWNrZXIuX2dldEluc3QoZS50YXJnZXQpO2lmKHQuaW5wdXQudmFsKCkhPXQubGFzdFZhbCl0cnl7dmFyIG49JC5kYXRlcGlja2VyLnBhcnNlRGF0ZSgkLmRhdGVwaWNrZXIuX2dldCh0LCJkYXRlRm9ybWF0IiksdC5pbnB1dD90LmlucHV0LnZhbCgpOm51bGwsJC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcodCkpO24mJigkLmRhdGVwaWNrZXIuX3NldERhdGVGcm9tRmllbGQodCksJC5kYXRlcGlja2VyLl91cGRhdGVBbHRlcm5hdGUodCksJC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKHQpKX1jYXRjaChyKXskLmRhdGVwaWNrZXIubG9nKHIpfXJldHVybiEwfSxfc2hvd0RhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7ZT1lLnRhcmdldHx8ZSxlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPSJpbnB1dCImJihlPSQoImlucHV0IixlLnBhcmVudE5vZGUpWzBdKTtpZigkLmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKGUpfHwkLmRhdGVwaWNrZXIuX2xhc3RJbnB1dD09ZSlyZXR1cm47dmFyIHQ9JC5kYXRlcGlja2VyLl9nZXRJbnN0KGUpOyQuZGF0ZXBpY2tlci5fY3VySW5zdCYmJC5kYXRlcGlja2VyLl9jdXJJbnN0IT10JiYoJC5kYXRlcGlja2VyLl9jdXJJbnN0LmRwRGl2LnN0b3AoITAsITApLHQmJiQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJiQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoJC5kYXRlcGlja2VyLl9jdXJJbnN0LmlucHV0WzBdKSk7dmFyIG49JC5kYXRlcGlja2VyLl9nZXQodCwiYmVmb3JlU2hvdyIpLHI9bj9uLmFwcGx5KGUsW2UsdF0pOnt9O2lmKHI9PT0hMSlyZXR1cm47ZXh0ZW5kUmVtb3ZlKHQuc2V0dGluZ3MsciksdC5sYXN0VmFsPW51bGwsJC5kYXRlcGlja2VyLl9sYXN0SW5wdXQ9ZSwkLmRhdGVwaWNrZXIuX3NldERhdGVGcm9tRmllbGQodCksJC5kYXRlcGlja2VyLl9pbkRpYWxvZyYmKGUudmFsdWU9IiIpLCQuZGF0ZXBpY2tlci5fcG9zfHwoJC5kYXRlcGlja2VyLl9wb3M9JC5kYXRlcGlja2VyLl9maW5kUG9zKGUpLCQuZGF0ZXBpY2tlci5fcG9zWzFdKz1lLm9mZnNldEhlaWdodCk7dmFyIGk9ITE7JChlKS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpe3JldHVybiBpfD0kKHRoaXMpLmNzcygicG9zaXRpb24iKT09ImZpeGVkIiwhaX0pO3ZhciBzPXtsZWZ0OiQuZGF0ZXBpY2tlci5fcG9zWzBdLHRvcDokLmRhdGVwaWNrZXIuX3Bvc1sxXX07JC5kYXRlcGlja2VyLl9wb3M9bnVsbCx0LmRwRGl2LmVtcHR5KCksdC5kcERpdi5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsZGlzcGxheToiYmxvY2siLHRvcDoiLTEwMDBweCJ9KSwkLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIodCkscz0kLmRhdGVwaWNrZXIuX2NoZWNrT2Zmc2V0KHQscyxpKSx0LmRwRGl2LmNzcyh7cG9zaXRpb246JC5kYXRlcGlja2VyLl9pbkRpYWxvZyYmJC5ibG9ja1VJPyJzdGF0aWMiOmk/ImZpeGVkIjoiYWJzb2x1dGUiLGRpc3BsYXk6Im5vbmUiLGxlZnQ6cy5sZWZ0KyJweCIsdG9wOnMudG9wKyJweCJ9KTtpZighdC5pbmxpbmUpe3ZhciBvPSQuZGF0ZXBpY2tlci5fZ2V0KHQsInNob3dBbmltIiksdT0kLmRhdGVwaWNrZXIuX2dldCh0LCJkdXJhdGlvbiIpLGE9ZnVuY3Rpb24oKXt2YXIgZT10LmRwRGl2LmZpbmQoImlmcmFtZS51aS1kYXRlcGlja2VyLWNvdmVyIik7aWYoISFlLmxlbmd0aCl7dmFyIG49JC5kYXRlcGlja2VyLl9nZXRCb3JkZXJzKHQuZHBEaXYpO2UuY3NzKHtsZWZ0Oi1uWzBdLHRvcDotblsxXSx3aWR0aDp0LmRwRGl2Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dC5kcERpdi5vdXRlckhlaWdodCgpfSl9fTt0LmRwRGl2LnpJbmRleCgkKGUpLnpJbmRleCgpKzEpLCQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmc9ITAsJC5lZmZlY3RzJiYoJC5lZmZlY3RzLmVmZmVjdFtvXXx8JC5lZmZlY3RzW29dKT90LmRwRGl2LnNob3cobywkLmRhdGVwaWNrZXIuX2dldCh0LCJzaG93T3B0aW9ucyIpLHUsYSk6dC5kcERpdltvfHwic2hvdyJdKG8/dTpudWxsLGEpLCghb3x8IXUpJiZhKCksdC5pbnB1dC5pcygiOnZpc2libGUiKSYmIXQuaW5wdXQuaXMoIjpkaXNhYmxlZCIpJiZ0LmlucHV0LmZvY3VzKCksJC5kYXRlcGlja2VyLl9jdXJJbnN0PXR9fSxfdXBkYXRlRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt0aGlzLm1heFJvd3M9NDt2YXIgdD0kLmRhdGVwaWNrZXIuX2dldEJvcmRlcnMoZS5kcERpdik7aW5zdEFjdGl2ZT1lLGUuZHBEaXYuZW1wdHkoKS5hcHBlbmQodGhpcy5fZ2VuZXJhdGVIVE1MKGUpKSx0aGlzLl9hdHRhY2hIYW5kbGVycyhlKTt2YXIgbj1lLmRwRGl2LmZpbmQoImlmcmFtZS51aS1kYXRlcGlja2VyLWNvdmVyIik7IW4ubGVuZ3RofHxuLmNzcyh7bGVmdDotdFswXSx0b3A6LXRbMV0sd2lkdGg6ZS5kcERpdi5vdXRlcldpZHRoKCksaGVpZ2h0OmUuZHBEaXYub3V0ZXJIZWlnaHQoKX0pLGUuZHBEaXYuZmluZCgiLiIrdGhpcy5fZGF5T3ZlckNsYXNzKyIgYSIpLm1vdXNlb3ZlcigpO3ZhciByPXRoaXMuX2dldE51bWJlck9mTW9udGhzKGUpLGk9clsxXSxzPTE3O2UuZHBEaXYucmVtb3ZlQ2xhc3MoInVpLWRhdGVwaWNrZXItbXVsdGktMiB1aS1kYXRlcGlja2VyLW11bHRpLTMgdWktZGF0ZXBpY2tlci1tdWx0aS00Iikud2lkdGgoIiIpLGk+MSYmZS5kcERpdi5hZGRDbGFzcygidWktZGF0ZXBpY2tlci1tdWx0aS0iK2kpLmNzcygid2lkdGgiLHMqaSsiZW0iKSxlLmRwRGl2WyhyWzBdIT0xfHxyWzFdIT0xPyJhZGQiOiJyZW1vdmUiKSsiQ2xhc3MiXSgidWktZGF0ZXBpY2tlci1tdWx0aSIpLGUuZHBEaXZbKHRoaXMuX2dldChlLCJpc1JUTCIpPyJhZGQiOiJyZW1vdmUiKSsiQ2xhc3MiXSgidWktZGF0ZXBpY2tlci1ydGwiKSxlPT0kLmRhdGVwaWNrZXIuX2N1ckluc3QmJiQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJmUuaW5wdXQmJmUuaW5wdXQuaXMoIjp2aXNpYmxlIikmJiFlLmlucHV0LmlzKCI6ZGlzYWJsZWQiKSYmZS5pbnB1dFswXSE9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCYmZS5pbnB1dC5mb2N1cygpO2lmKGUueWVhcnNodG1sKXt2YXIgbz1lLnllYXJzaHRtbDtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bz09PWUueWVhcnNodG1sJiZlLnllYXJzaHRtbCYmZS5kcERpdi5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyOmZpcnN0IikucmVwbGFjZVdpdGgoZS55ZWFyc2h0bWwpLG89ZS55ZWFyc2h0bWw9bnVsbH0sMCl9fSxfZ2V0Qm9yZGVyczpmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXtyZXR1cm57dGhpbjoxLG1lZGl1bToyLHRoaWNrOjN9W2VdfHxlfTtyZXR1cm5bcGFyc2VGbG9hdCh0KGUuY3NzKCJib3JkZXItbGVmdC13aWR0aCIpKSkscGFyc2VGbG9hdCh0KGUuY3NzKCJib3JkZXItdG9wLXdpZHRoIikpKV19LF9jaGVja09mZnNldDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5kcERpdi5vdXRlcldpZHRoKCksaT1lLmRwRGl2Lm91dGVySGVpZ2h0KCkscz1lLmlucHV0P2UuaW5wdXQub3V0ZXJXaWR0aCgpOjAsbz1lLmlucHV0P2UuaW5wdXQub3V0ZXJIZWlnaHQoKTowLHU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKyhuPzA6JChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKSxhPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQrKG4/MDokKGRvY3VtZW50KS5zY3JvbGxUb3AoKSk7cmV0dXJuIHQubGVmdC09dGhpcy5fZ2V0KGUsImlzUlRMIik/ci1zOjAsdC5sZWZ0LT1uJiZ0LmxlZnQ9PWUuaW5wdXQub2Zmc2V0KCkubGVmdD8kKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCk6MCx0LnRvcC09biYmdC50b3A9PWUuaW5wdXQub2Zmc2V0KCkudG9wK28/JChkb2N1bWVudCkuc2Nyb2xsVG9wKCk6MCx0LmxlZnQtPU1hdGgubWluKHQubGVmdCx0LmxlZnQrcj51JiZ1PnI/TWF0aC5hYnModC5sZWZ0K3ItdSk6MCksdC50b3AtPU1hdGgubWluKHQudG9wLHQudG9wK2k+YSYmYT5pP01hdGguYWJzKGkrbyk6MCksdH0sX2ZpbmRQb3M6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0SW5zdChlKSxuPXRoaXMuX2dldCh0LCJpc1JUTCIpO3doaWxlKGUmJihlLnR5cGU9PSJoaWRkZW4ifHxlLm5vZGVUeXBlIT0xfHwkLmV4cHIuZmlsdGVycy5oaWRkZW4oZSkpKWU9ZVtuPyJwcmV2aW91c1NpYmxpbmciOiJuZXh0U2libGluZyJdO3ZhciByPSQoZSkub2Zmc2V0KCk7cmV0dXJuW3IubGVmdCxyLnRvcF19LF9oaWRlRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9jdXJJbnN0O2lmKCF0fHxlJiZ0IT0kLmRhdGEoZSxQUk9QX05BTUUpKXJldHVybjtpZih0aGlzLl9kYXRlcGlja2VyU2hvd2luZyl7dmFyIG49dGhpcy5fZ2V0KHQsInNob3dBbmltIikscj10aGlzLl9nZXQodCwiZHVyYXRpb24iKSxpPWZ1bmN0aW9uKCl7JC5kYXRlcGlja2VyLl90aWR5RGlhbG9nKHQpfTskLmVmZmVjdHMmJigkLmVmZmVjdHMuZWZmZWN0W25dfHwkLmVmZmVjdHNbbl0pP3QuZHBEaXYuaGlkZShuLCQuZGF0ZXBpY2tlci5fZ2V0KHQsInNob3dPcHRpb25zIikscixpKTp0LmRwRGl2W249PSJzbGlkZURvd24iPyJzbGlkZVVwIjpuPT0iZmFkZUluIj8iZmFkZU91dCI6ImhpZGUiXShuP3I6bnVsbCxpKSxufHxpKCksdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITE7dmFyIHM9dGhpcy5fZ2V0KHQsIm9uQ2xvc2UiKTtzJiZzLmFwcGx5KHQuaW5wdXQ/dC5pbnB1dFswXTpudWxsLFt0LmlucHV0P3QuaW5wdXQudmFsKCk6IiIsdF0pLHRoaXMuX2xhc3RJbnB1dD1udWxsLHRoaXMuX2luRGlhbG9nJiYodGhpcy5fZGlhbG9nSW5wdXQuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6IjAiLHRvcDoiLTEwMHB4In0pLCQuYmxvY2tVSSYmKCQudW5ibG9ja1VJKCksJCgiYm9keSIpLmFwcGVuZCh0aGlzLmRwRGl2KSkpLHRoaXMuX2luRGlhbG9nPSExfX0sX3RpZHlEaWFsb2c6ZnVuY3Rpb24oZSl7ZS5kcERpdi5yZW1vdmVDbGFzcyh0aGlzLl9kaWFsb2dDbGFzcykudW5iaW5kKCIudWktZGF0ZXBpY2tlci1jYWxlbmRhciIpfSxfY2hlY2tFeHRlcm5hbENsaWNrOmZ1bmN0aW9uKGUpe2lmKCEkLmRhdGVwaWNrZXIuX2N1ckluc3QpcmV0dXJuO3ZhciB0PSQoZS50YXJnZXQpLG49JC5kYXRlcGlja2VyLl9nZXRJbnN0KHRbMF0pOyh0WzBdLmlkIT0kLmRhdGVwaWNrZXIuX21haW5EaXZJZCYmdC5wYXJlbnRzKCIjIiskLmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoPT0wJiYhdC5oYXNDbGFzcygkLmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKSYmIXQuY2xvc2VzdCgiLiIrJC5kYXRlcGlja2VyLl90cmlnZ2VyQ2xhc3MpLmxlbmd0aCYmJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmKCEkLmRhdGVwaWNrZXIuX2luRGlhbG9nfHwhJC5ibG9ja1VJKXx8dC5oYXNDbGFzcygkLmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKSYmJC5kYXRlcGlja2VyLl9jdXJJbnN0IT1uKSYmJC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpfSxfYWRqdXN0RGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9JChlKSxpPXRoaXMuX2dldEluc3QoclswXSk7aWYodGhpcy5faXNEaXNhYmxlZERhdGVwaWNrZXIoclswXSkpcmV0dXJuO3RoaXMuX2FkanVzdEluc3REYXRlKGksdCsobj09Ik0iP3RoaXMuX2dldChpLCJzaG93Q3VycmVudEF0UG9zIik6MCksbiksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihpKX0sX2dvdG9Ub2RheTpmdW5jdGlvbihlKXt2YXIgdD0kKGUpLG49dGhpcy5fZ2V0SW5zdCh0WzBdKTtpZih0aGlzLl9nZXQobiwiZ290b0N1cnJlbnQiKSYmbi5jdXJyZW50RGF5KW4uc2VsZWN0ZWREYXk9bi5jdXJyZW50RGF5LG4uZHJhd01vbnRoPW4uc2VsZWN0ZWRNb250aD1uLmN1cnJlbnRNb250aCxuLmRyYXdZZWFyPW4uc2VsZWN0ZWRZZWFyPW4uY3VycmVudFllYXI7ZWxzZXt2YXIgcj1uZXcgRGF0ZTtuLnNlbGVjdGVkRGF5PXIuZ2V0RGF0ZSgpLG4uZHJhd01vbnRoPW4uc2VsZWN0ZWRNb250aD1yLmdldE1vbnRoKCksbi5kcmF3WWVhcj1uLnNlbGVjdGVkWWVhcj1yLmdldEZ1bGxZZWFyKCl9dGhpcy5fbm90aWZ5Q2hhbmdlKG4pLHRoaXMuX2FkanVzdERhdGUodCl9LF9zZWxlY3RNb250aFllYXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSQoZSksaT10aGlzLl9nZXRJbnN0KHJbMF0pO2lbInNlbGVjdGVkIisobj09Ik0iPyJNb250aCI6IlllYXIiKV09aVsiZHJhdyIrKG49PSJNIj8iTW9udGgiOiJZZWFyIildPXBhcnNlSW50KHQub3B0aW9uc1t0LnNlbGVjdGVkSW5kZXhdLnZhbHVlLDEwKSx0aGlzLl9ub3RpZnlDaGFuZ2UoaSksdGhpcy5fYWRqdXN0RGF0ZShyKX0sX3NlbGVjdERheTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT0kKGUpO2lmKCQocikuaGFzQ2xhc3ModGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MpfHx0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihpWzBdKSlyZXR1cm47dmFyIHM9dGhpcy5fZ2V0SW5zdChpWzBdKTtzLnNlbGVjdGVkRGF5PXMuY3VycmVudERheT0kKCJhIixyKS5odG1sKCkscy5zZWxlY3RlZE1vbnRoPXMuY3VycmVudE1vbnRoPXQscy5zZWxlY3RlZFllYXI9cy5jdXJyZW50WWVhcj1uLHRoaXMuX3NlbGVjdERhdGUoZSx0aGlzLl9mb3JtYXREYXRlKHMscy5jdXJyZW50RGF5LHMuY3VycmVudE1vbnRoLHMuY3VycmVudFllYXIpKX0sX2NsZWFyRGF0ZTpmdW5jdGlvbihlKXt2YXIgdD0kKGUpLG49dGhpcy5fZ2V0SW5zdCh0WzBdKTt0aGlzLl9zZWxlY3REYXRlKHQsIiIpfSxfc2VsZWN0RGF0ZTpmdW5jdGlvbihlLHQpe3ZhciBuPSQoZSkscj10aGlzLl9nZXRJbnN0KG5bMF0pO3Q9dCE9bnVsbD90OnRoaXMuX2Zvcm1hdERhdGUociksci5pbnB1dCYmci5pbnB1dC52YWwodCksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKHIpO3ZhciBpPXRoaXMuX2dldChyLCJvblNlbGVjdCIpO2k/aS5hcHBseShyLmlucHV0P3IuaW5wdXRbMF06bnVsbCxbdCxyXSk6ci5pbnB1dCYmci5pbnB1dC50cmlnZ2VyKCJjaGFuZ2UiKSxyLmlubGluZT90aGlzLl91cGRhdGVEYXRlcGlja2VyKHIpOih0aGlzLl9oaWRlRGF0ZXBpY2tlcigpLHRoaXMuX2xhc3RJbnB1dD1yLmlucHV0WzBdLHR5cGVvZiByLmlucHV0WzBdIT0ib2JqZWN0IiYmci5pbnB1dC5mb2N1cygpLHRoaXMuX2xhc3RJbnB1dD1udWxsKX0sX3VwZGF0ZUFsdGVybmF0ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXQoZSwiYWx0RmllbGQiKTtpZih0KXt2YXIgbj10aGlzLl9nZXQoZSwiYWx0Rm9ybWF0Iil8fHRoaXMuX2dldChlLCJkYXRlRm9ybWF0Iikscj10aGlzLl9nZXREYXRlKGUpLGk9dGhpcy5mb3JtYXREYXRlKG4scix0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOyQodCkuZWFjaChmdW5jdGlvbigpeyQodGhpcykudmFsKGkpfSl9fSxub1dlZWtlbmRzOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuW3Q+MCYmdDw2LCIiXX0saXNvODYwMVdlZWs6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGUoZS5nZXRUaW1lKCkpO3Quc2V0RGF0ZSh0LmdldERhdGUoKSs0LSh0LmdldERheSgpfHw3KSk7dmFyIG49dC5nZXRUaW1lKCk7cmV0dXJuIHQuc2V0TW9udGgoMCksdC5zZXREYXRlKDEpLE1hdGguZmxvb3IoTWF0aC5yb3VuZCgobi10KS84NjRlNSkvNykrMX0scGFyc2VEYXRlOmZ1bmN0aW9uKGUsdCxuKXtpZihlPT1udWxsfHx0PT1udWxsKXRocm93IkludmFsaWQgYXJndW1lbnRzIjt0PXR5cGVvZiB0PT0ib2JqZWN0Ij90LnRvU3RyaW5nKCk6dCsiIjtpZih0PT0iIilyZXR1cm4gbnVsbDt2YXIgcj0obj9uLnNob3J0WWVhckN1dG9mZjpudWxsKXx8dGhpcy5fZGVmYXVsdHMuc2hvcnRZZWFyQ3V0b2ZmO3I9dHlwZW9mIHIhPSJzdHJpbmciP3I6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCtwYXJzZUludChyLDEwKTt2YXIgaT0obj9uLmRheU5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQscz0obj9uLmRheU5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcyxvPShuP24ubW9udGhOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzU2hvcnQsdT0obj9uLm1vbnRoTmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsYT0tMSxmPS0xLGw9LTEsYz0tMSxoPSExLHA9ZnVuY3Rpb24odCl7dmFyIG49eSsxPGUubGVuZ3RoJiZlLmNoYXJBdCh5KzEpPT10O3JldHVybiBuJiZ5Kyssbn0sZD1mdW5jdGlvbihlKXt2YXIgbj1wKGUpLHI9ZT09IkAiPzE0OmU9PSIhIj8yMDplPT0ieSImJm4/NDplPT0ibyI/MzoyLGk9bmV3IFJlZ0V4cCgiXlxcZHsxLCIrcisifSIpLHM9dC5zdWJzdHJpbmcoZykubWF0Y2goaSk7aWYoIXMpdGhyb3ciTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gIitnO3JldHVybiBnKz1zWzBdLmxlbmd0aCxwYXJzZUludChzWzBdLDEwKX0sdj1mdW5jdGlvbihlLG4scil7dmFyIGk9JC5tYXAocChlKT9yOm4sZnVuY3Rpb24oZSx0KXtyZXR1cm5bW3QsZV1dfSkuc29ydChmdW5jdGlvbihlLHQpe3JldHVybi0oZVsxXS5sZW5ndGgtdFsxXS5sZW5ndGgpfSkscz0tMTskLmVhY2goaSxmdW5jdGlvbihlLG4pe3ZhciByPW5bMV07aWYodC5zdWJzdHIoZyxyLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09ci50b0xvd2VyQ2FzZSgpKXJldHVybiBzPW5bMF0sZys9ci5sZW5ndGgsITF9KTtpZihzIT0tMSlyZXR1cm4gcysxO3Rocm93IlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiAiK2d9LG09ZnVuY3Rpb24oKXtpZih0LmNoYXJBdChnKSE9ZS5jaGFyQXQoeSkpdGhyb3ciVW5leHBlY3RlZCBsaXRlcmFsIGF0IHBvc2l0aW9uICIrZztnKyt9LGc9MDtmb3IodmFyIHk9MDt5PGUubGVuZ3RoO3krKylpZihoKWUuY2hhckF0KHkpPT0iJyImJiFwKCInIik/aD0hMTptKCk7ZWxzZSBzd2l0Y2goZS5jaGFyQXQoeSkpe2Nhc2UiZCI6bD1kKCJkIik7YnJlYWs7Y2FzZSJEIjp2KCJEIixpLHMpO2JyZWFrO2Nhc2UibyI6Yz1kKCJvIik7YnJlYWs7Y2FzZSJtIjpmPWQoIm0iKTticmVhaztjYXNlIk0iOmY9digiTSIsbyx1KTticmVhaztjYXNlInkiOmE9ZCgieSIpO2JyZWFrO2Nhc2UiQCI6dmFyIGI9bmV3IERhdGUoZCgiQCIpKTthPWIuZ2V0RnVsbFllYXIoKSxmPWIuZ2V0TW9udGgoKSsxLGw9Yi5nZXREYXRlKCk7YnJlYWs7Y2FzZSIhIjp2YXIgYj1uZXcgRGF0ZSgoZCgiISIpLXRoaXMuX3RpY2tzVG8xOTcwKS8xZTQpO2E9Yi5nZXRGdWxsWWVhcigpLGY9Yi5nZXRNb250aCgpKzEsbD1iLmdldERhdGUoKTticmVhaztjYXNlIiciOnAoIiciKT9tKCk6aD0hMDticmVhaztkZWZhdWx0Om0oKX1pZihnPHQubGVuZ3RoKXt2YXIgdz10LnN1YnN0cihnKTtpZighL15ccysvLnRlc3QodykpdGhyb3ciRXh0cmEvdW5wYXJzZWQgY2hhcmFjdGVycyBmb3VuZCBpbiBkYXRlOiAiK3d9YT09LTE/YT0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCk6YTwxMDAmJihhKz0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCktKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCsoYTw9cj8wOi0xMDApKTtpZihjPi0xKXtmPTEsbD1jO2Rve3ZhciBFPXRoaXMuX2dldERheXNJbk1vbnRoKGEsZi0xKTtpZihsPD1FKWJyZWFrO2YrKyxsLT1FfXdoaWxlKCEwKX12YXIgYj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShhLGYtMSxsKSk7aWYoYi5nZXRGdWxsWWVhcigpIT1hfHxiLmdldE1vbnRoKCkrMSE9Znx8Yi5nZXREYXRlKCkhPWwpdGhyb3ciSW52YWxpZCBkYXRlIjtyZXR1cm4gYn0sQVRPTToieXktbW0tZGQiLENPT0tJRToiRCwgZGQgTSB5eSIsSVNPXzg2MDE6Inl5LW1tLWRkIixSRkNfODIyOiJELCBkIE0geSIsUkZDXzg1MDoiREQsIGRkLU0teSIsUkZDXzEwMzY6IkQsIGQgTSB5IixSRkNfMTEyMzoiRCwgZCBNIHl5IixSRkNfMjgyMjoiRCwgZCBNIHl5IixSU1M6IkQsIGQgTSB5IixUSUNLUzoiISIsVElNRVNUQU1QOiJAIixXM0M6Inl5LW1tLWRkIixfdGlja3NUbzE5NzA6KDcxODY4NStNYXRoLmZsb29yKDQ5Mi41KS1NYXRoLmZsb29yKDE5LjcpK01hdGguZmxvb3IoNC45MjUpKSoyNCo2MCo2MCoxZTcsZm9ybWF0RGF0ZTpmdW5jdGlvbihlLHQsbil7aWYoIXQpcmV0dXJuIiI7dmFyIHI9KG4/bi5kYXlOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lc1Nob3J0LGk9KG4/bi5kYXlOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXMscz0obj9uLm1vbnRoTmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lc1Nob3J0LG89KG4/bi5tb250aE5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzLHU9ZnVuY3Rpb24odCl7dmFyIG49aCsxPGUubGVuZ3RoJiZlLmNoYXJBdChoKzEpPT10O3JldHVybiBuJiZoKyssbn0sYT1mdW5jdGlvbihlLHQsbil7dmFyIHI9IiIrdDtpZih1KGUpKXdoaWxlKHIubGVuZ3RoPG4pcj0iMCIrcjtyZXR1cm4gcn0sZj1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdShlKT9yW3RdOm5bdF19LGw9IiIsYz0hMTtpZih0KWZvcih2YXIgaD0wO2g8ZS5sZW5ndGg7aCsrKWlmKGMpZS5jaGFyQXQoaCk9PSInIiYmIXUoIiciKT9jPSExOmwrPWUuY2hhckF0KGgpO2Vsc2Ugc3dpdGNoKGUuY2hhckF0KGgpKXtjYXNlImQiOmwrPWEoImQiLHQuZ2V0RGF0ZSgpLDIpO2JyZWFrO2Nhc2UiRCI6bCs9ZigiRCIsdC5nZXREYXkoKSxyLGkpO2JyZWFrO2Nhc2UibyI6bCs9YSgibyIsTWF0aC5yb3VuZCgoKG5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkpKS5nZXRUaW1lKCktKG5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSwwLDApKS5nZXRUaW1lKCkpLzg2NGU1KSwzKTticmVhaztjYXNlIm0iOmwrPWEoIm0iLHQuZ2V0TW9udGgoKSsxLDIpO2JyZWFrO2Nhc2UiTSI6bCs9ZigiTSIsdC5nZXRNb250aCgpLHMsbyk7YnJlYWs7Y2FzZSJ5IjpsKz11KCJ5Iik/dC5nZXRGdWxsWWVhcigpOih0LmdldFllYXIoKSUxMDA8MTA/IjAiOiIiKSt0LmdldFllYXIoKSUxMDA7YnJlYWs7Y2FzZSJAIjpsKz10LmdldFRpbWUoKTticmVhaztjYXNlIiEiOmwrPXQuZ2V0VGltZSgpKjFlNCt0aGlzLl90aWNrc1RvMTk3MDticmVhaztjYXNlIiciOnUoIiciKT9sKz0iJyI6Yz0hMDticmVhaztkZWZhdWx0OmwrPWUuY2hhckF0KGgpfXJldHVybiBsfSxfcG9zc2libGVDaGFyczpmdW5jdGlvbihlKXt2YXIgdD0iIixuPSExLHI9ZnVuY3Rpb24odCl7dmFyIG49aSsxPGUubGVuZ3RoJiZlLmNoYXJBdChpKzEpPT10O3JldHVybiBuJiZpKyssbn07Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspaWYobillLmNoYXJBdChpKT09IiciJiYhcigiJyIpP249ITE6dCs9ZS5jaGFyQXQoaSk7ZWxzZSBzd2l0Y2goZS5jaGFyQXQoaSkpe2Nhc2UiZCI6Y2FzZSJtIjpjYXNlInkiOmNhc2UiQCI6dCs9IjAxMjM0NTY3ODkiO2JyZWFrO2Nhc2UiRCI6Y2FzZSJNIjpyZXR1cm4gbnVsbDtjYXNlIiciOnIoIiciKT90Kz0iJyI6bj0hMDticmVhaztkZWZhdWx0OnQrPWUuY2hhckF0KGkpfXJldHVybiB0fSxfZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuc2V0dGluZ3NbdF0hPT11bmRlZmluZWQ/ZS5zZXR0aW5nc1t0XTp0aGlzLl9kZWZhdWx0c1t0XX0sX3NldERhdGVGcm9tRmllbGQ6ZnVuY3Rpb24oZSx0KXtpZihlLmlucHV0LnZhbCgpPT1lLmxhc3RWYWwpcmV0dXJuO3ZhciBuPXRoaXMuX2dldChlLCJkYXRlRm9ybWF0Iikscj1lLmxhc3RWYWw9ZS5pbnB1dD9lLmlucHV0LnZhbCgpOm51bGwsaSxzO2k9cz10aGlzLl9nZXREZWZhdWx0RGF0ZShlKTt2YXIgbz10aGlzLl9nZXRGb3JtYXRDb25maWcoZSk7dHJ5e2k9dGhpcy5wYXJzZURhdGUobixyLG8pfHxzfWNhdGNoKHUpe3RoaXMubG9nKHUpLHI9dD8iIjpyfWUuc2VsZWN0ZWREYXk9aS5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPWkuZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPWkuZ2V0RnVsbFllYXIoKSxlLmN1cnJlbnREYXk9cj9pLmdldERhdGUoKTowLGUuY3VycmVudE1vbnRoPXI/aS5nZXRNb250aCgpOjAsZS5jdXJyZW50WWVhcj1yP2kuZ2V0RnVsbFllYXIoKTowLHRoaXMuX2FkanVzdEluc3REYXRlKGUpfSxfZ2V0RGVmYXVsdERhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3Jlc3RyaWN0TWluTWF4KGUsdGhpcy5fZGV0ZXJtaW5lRGF0ZShlLHRoaXMuX2dldChlLCJkZWZhdWx0RGF0ZSIpLG5ldyBEYXRlKSl9LF9kZXRlcm1pbmVEYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdD1uZXcgRGF0ZTtyZXR1cm4gdC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpLHR9LGk9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiAkLmRhdGVwaWNrZXIucGFyc2VEYXRlKCQuZGF0ZXBpY2tlci5fZ2V0KGUsImRhdGVGb3JtYXQiKSx0LCQuZGF0ZXBpY2tlci5fZ2V0Rm9ybWF0Q29uZmlnKGUpKX1jYXRjaChuKXt9dmFyIHI9KHQudG9Mb3dlckNhc2UoKS5tYXRjaCgvXmMvKT8kLmRhdGVwaWNrZXIuX2dldERhdGUoZSk6bnVsbCl8fG5ldyBEYXRlLGk9ci5nZXRGdWxsWWVhcigpLHM9ci5nZXRNb250aCgpLG89ci5nZXREYXRlKCksdT0vKFsrLV0/WzAtOV0rKVxzKihkfER8d3xXfG18TXx5fFkpPy9nLGE9dS5leGVjKHQpO3doaWxlKGEpe3N3aXRjaChhWzJdfHwiZCIpe2Nhc2UiZCI6Y2FzZSJEIjpvKz1wYXJzZUludChhWzFdLDEwKTticmVhaztjYXNlInciOmNhc2UiVyI6bys9cGFyc2VJbnQoYVsxXSwxMCkqNzticmVhaztjYXNlIm0iOmNhc2UiTSI6cys9cGFyc2VJbnQoYVsxXSwxMCksbz1NYXRoLm1pbihvLCQuZGF0ZXBpY2tlci5fZ2V0RGF5c0luTW9udGgoaSxzKSk7YnJlYWs7Y2FzZSJ5IjpjYXNlIlkiOmkrPXBhcnNlSW50KGFbMV0sMTApLG89TWF0aC5taW4obywkLmRhdGVwaWNrZXIuX2dldERheXNJbk1vbnRoKGkscykpfWE9dS5leGVjKHQpfXJldHVybiBuZXcgRGF0ZShpLHMsbyl9LHM9dD09bnVsbHx8dD09PSIiP246dHlwZW9mIHQ9PSJzdHJpbmciP2kodCk6dHlwZW9mIHQ9PSJudW1iZXIiP2lzTmFOKHQpP246cih0KTpuZXcgRGF0ZSh0LmdldFRpbWUoKSk7cmV0dXJuIHM9cyYmcy50b1N0cmluZygpPT0iSW52YWxpZCBEYXRlIj9uOnMscyYmKHMuc2V0SG91cnMoMCkscy5zZXRNaW51dGVzKDApLHMuc2V0U2Vjb25kcygwKSxzLnNldE1pbGxpc2Vjb25kcygwKSksdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3Qocyl9LF9kYXlsaWdodFNhdmluZ0FkanVzdDpmdW5jdGlvbihlKXtyZXR1cm4gZT8oZS5zZXRIb3VycyhlLmdldEhvdXJzKCk+MTI/ZS5nZXRIb3VycygpKzI6MCksZSk6bnVsbH0sX3NldERhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSF0LGk9ZS5zZWxlY3RlZE1vbnRoLHM9ZS5zZWxlY3RlZFllYXIsbz10aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RldGVybWluZURhdGUoZSx0LG5ldyBEYXRlKSk7ZS5zZWxlY3RlZERheT1lLmN1cnJlbnREYXk9by5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPWUuY3VycmVudE1vbnRoPW8uZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPWUuY3VycmVudFllYXI9by5nZXRGdWxsWWVhcigpLChpIT1lLnNlbGVjdGVkTW9udGh8fHMhPWUuc2VsZWN0ZWRZZWFyKSYmIW4mJnRoaXMuX25vdGlmeUNoYW5nZShlKSx0aGlzLl9hZGp1c3RJbnN0RGF0ZShlKSxlLmlucHV0JiZlLmlucHV0LnZhbChyPyIiOnRoaXMuX2Zvcm1hdERhdGUoZSkpfSxfZ2V0RGF0ZTpmdW5jdGlvbihlKXt2YXIgdD0hZS5jdXJyZW50WWVhcnx8ZS5pbnB1dCYmZS5pbnB1dC52YWwoKT09IiI/bnVsbDp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShlLmN1cnJlbnRZZWFyLGUuY3VycmVudE1vbnRoLGUuY3VycmVudERheSkpO3JldHVybiB0fSxfYXR0YWNoSGFuZGxlcnM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0KGUsInN0ZXBNb250aHMiKSxuPSIjIitlLmlkLnJlcGxhY2UoL1xcXFwvZywiXFwiKTtlLmRwRGl2LmZpbmQoIltkYXRhLWhhbmRsZXJdIikubWFwKGZ1bmN0aW9uKCl7dmFyIGU9e3ByZXY6ZnVuY3Rpb24oKXt3aW5kb3dbIkRQX2pRdWVyeV8iK2RwdXVpZF0uZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShuLC10LCJNIil9LG5leHQ6ZnVuY3Rpb24oKXt3aW5kb3dbIkRQX2pRdWVyeV8iK2RwdXVpZF0uZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShuLCt0LCJNIil9LGhpZGU6ZnVuY3Rpb24oKXt3aW5kb3dbIkRQX2pRdWVyeV8iK2RwdXVpZF0uZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKX0sdG9kYXk6ZnVuY3Rpb24oKXt3aW5kb3dbIkRQX2pRdWVyeV8iK2RwdXVpZF0uZGF0ZXBpY2tlci5fZ290b1RvZGF5KG4pfSxzZWxlY3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdLmRhdGVwaWNrZXIuX3NlbGVjdERheShuLCt0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS1tb250aCIpLCt0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS15ZWFyIiksdGhpcyksITF9LHNlbGVjdE1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvd1siRFBfalF1ZXJ5XyIrZHB1dWlkXS5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIobix0aGlzLCJNIiksITF9LHNlbGVjdFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihuLHRoaXMsIlkiKSwhMX19OyQodGhpcykuYmluZCh0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS1ldmVudCIpLGVbdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtaGFuZGxlciIpXSl9KX0sX2dlbmVyYXRlSFRNTDpmdW5jdGlvbihlKXt2YXIgdD1uZXcgRGF0ZTt0PXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkpKTt2YXIgbj10aGlzLl9nZXQoZSwiaXNSVEwiKSxyPXRoaXMuX2dldChlLCJzaG93QnV0dG9uUGFuZWwiKSxpPXRoaXMuX2dldChlLCJoaWRlSWZOb1ByZXZOZXh0Iikscz10aGlzLl9nZXQoZSwibmF2aWdhdGlvbkFzRGF0ZUZvcm1hdCIpLG89dGhpcy5fZ2V0TnVtYmVyT2ZNb250aHMoZSksdT10aGlzLl9nZXQoZSwic2hvd0N1cnJlbnRBdFBvcyIpLGE9dGhpcy5fZ2V0KGUsInN0ZXBNb250aHMiKSxmPW9bMF0hPTF8fG9bMV0hPTEsbD10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChlLmN1cnJlbnREYXk/bmV3IERhdGUoZS5jdXJyZW50WWVhcixlLmN1cnJlbnRNb250aCxlLmN1cnJlbnREYXkpOm5ldyBEYXRlKDk5OTksOSw5KSksYz10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1pbiIpLGg9dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtYXgiKSxwPWUuZHJhd01vbnRoLXUsZD1lLmRyYXdZZWFyO3A8MCYmKHArPTEyLGQtLSk7aWYoaCl7dmFyIHY9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoaC5nZXRGdWxsWWVhcigpLGguZ2V0TW9udGgoKS1vWzBdKm9bMV0rMSxoLmdldERhdGUoKSkpO3Y9YyYmdjxjP2M6djt3aGlsZSh0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShkLHAsMSkpPnYpcC0tLHA8MCYmKHA9MTEsZC0tKX1lLmRyYXdNb250aD1wLGUuZHJhd1llYXI9ZDt2YXIgbT10aGlzLl9nZXQoZSwicHJldlRleHQiKTttPXM/dGhpcy5mb3JtYXREYXRlKG0sdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZCxwLWEsMSkpLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSk6bTt2YXIgZz10aGlzLl9jYW5BZGp1c3RNb250aChlLC0xLGQscCk/JzxhIGNsYXNzPSJ1aS1kYXRlcGlja2VyLXByZXYgdWktY29ybmVyLWFsbCIgZGF0YS1oYW5kbGVyPSJwcmV2IiBkYXRhLWV2ZW50PSJjbGljayIgdGl0bGU9IicrbSsnIj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0nKyhuPyJlIjoidyIpKyciPicrbSsiPC9zcGFuPjwvYT4iOmk/IiI6JzxhIGNsYXNzPSJ1aS1kYXRlcGlja2VyLXByZXYgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1kaXNhYmxlZCIgdGl0bGU9IicrbSsnIj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0nKyhuPyJlIjoidyIpKyciPicrbSsiPC9zcGFuPjwvYT4iLHk9dGhpcy5fZ2V0KGUsIm5leHRUZXh0Iik7eT1zP3RoaXMuZm9ybWF0RGF0ZSh5LHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGQscCthLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOnk7dmFyIGI9dGhpcy5fY2FuQWRqdXN0TW9udGgoZSwxLGQscCk/JzxhIGNsYXNzPSJ1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCIgZGF0YS1oYW5kbGVyPSJuZXh0IiBkYXRhLWV2ZW50PSJjbGljayIgdGl0bGU9IicreSsnIj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0nKyhuPyJ3IjoiZSIpKyciPicreSsiPC9zcGFuPjwvYT4iOmk/IiI6JzxhIGNsYXNzPSJ1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1kaXNhYmxlZCIgdGl0bGU9IicreSsnIj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0nKyhuPyJ3IjoiZSIpKyciPicreSsiPC9zcGFuPjwvYT4iLHc9dGhpcy5fZ2V0KGUsImN1cnJlbnRUZXh0IiksRT10aGlzLl9nZXQoZSwiZ290b0N1cnJlbnQiKSYmZS5jdXJyZW50RGF5P2w6dDt3PXM/dGhpcy5mb3JtYXREYXRlKHcsRSx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOnc7dmFyIFM9ZS5pbmxpbmU/IiI6JzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0idWktZGF0ZXBpY2tlci1jbG9zZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLXByaW9yaXR5LXByaW1hcnkgdWktY29ybmVyLWFsbCIgZGF0YS1oYW5kbGVyPSJoaWRlIiBkYXRhLWV2ZW50PSJjbGljayI+Jyt0aGlzLl9nZXQoZSwiY2xvc2VUZXh0IikrIjwvYnV0dG9uPiIseD1yPyc8ZGl2IGNsYXNzPSJ1aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgdWktd2lkZ2V0LWNvbnRlbnQiPicrKG4/UzoiIikrKHRoaXMuX2lzSW5SYW5nZShlLEUpPyc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InVpLWRhdGVwaWNrZXItY3VycmVudCB1aS1zdGF0ZS1kZWZhdWx0IHVpLXByaW9yaXR5LXNlY29uZGFyeSB1aS1jb3JuZXItYWxsIiBkYXRhLWhhbmRsZXI9InRvZGF5IiBkYXRhLWV2ZW50PSJjbGljayI+Jyt3KyI8L2J1dHRvbj4iOiIiKSsobj8iIjpTKSsiPC9kaXY+IjoiIixUPXBhcnNlSW50KHRoaXMuX2dldChlLCJmaXJzdERheSIpLDEwKTtUPWlzTmFOKFQpPzA6VDt2YXIgTj10aGlzLl9nZXQoZSwic2hvd1dlZWsiKSxDPXRoaXMuX2dldChlLCJkYXlOYW1lcyIpLGs9dGhpcy5fZ2V0KGUsImRheU5hbWVzU2hvcnQiKSxMPXRoaXMuX2dldChlLCJkYXlOYW1lc01pbiIpLEE9dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXMiKSxPPXRoaXMuX2dldChlLCJtb250aE5hbWVzU2hvcnQiKSxNPXRoaXMuX2dldChlLCJiZWZvcmVTaG93RGF5IiksXz10aGlzLl9nZXQoZSwic2hvd090aGVyTW9udGhzIiksRD10aGlzLl9nZXQoZSwic2VsZWN0T3RoZXJNb250aHMiKSxQPXRoaXMuX2dldChlLCJjYWxjdWxhdGVXZWVrIil8fHRoaXMuaXNvODYwMVdlZWssSD10aGlzLl9nZXREZWZhdWx0RGF0ZShlKSxCPSIiO2Zvcih2YXIgaj0wO2o8b1swXTtqKyspe3ZhciBGPSIiO3RoaXMubWF4Um93cz00O2Zvcih2YXIgST0wO0k8b1sxXTtJKyspe3ZhciBxPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGQscCxlLnNlbGVjdGVkRGF5KSksUj0iIHVpLWNvcm5lci1hbGwiLFU9IiI7aWYoZil7VSs9JzxkaXYgY2xhc3M9InVpLWRhdGVwaWNrZXItZ3JvdXAnO2lmKG9bMV0+MSlzd2l0Y2goSSl7Y2FzZSAwOlUrPSIgdWktZGF0ZXBpY2tlci1ncm91cC1maXJzdCIsUj0iIHVpLWNvcm5lci0iKyhuPyJyaWdodCI6ImxlZnQiKTticmVhaztjYXNlIG9bMV0tMTpVKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCIsUj0iIHVpLWNvcm5lci0iKyhuPyJsZWZ0IjoicmlnaHQiKTticmVhaztkZWZhdWx0OlUrPSIgdWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUiLFI9IiJ9VSs9JyI+J31VKz0nPGRpdiBjbGFzcz0idWktZGF0ZXBpY2tlci1oZWFkZXIgdWktd2lkZ2V0LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXgnK1IrJyI+JysoL2FsbHxsZWZ0Ly50ZXN0KFIpJiZqPT0wP24/YjpnOiIiKSsoL2FsbHxyaWdodC8udGVzdChSKSYmaj09MD9uP2c6YjoiIikrdGhpcy5fZ2VuZXJhdGVNb250aFllYXJIZWFkZXIoZSxwLGQsYyxoLGo+MHx8ST4wLEEsTykrJzwvZGl2Pjx0YWJsZSBjbGFzcz0idWktZGF0ZXBpY2tlci1jYWxlbmRhciI+PHRoZWFkPicrIjx0cj4iO3ZhciB6PU4/Jzx0aCBjbGFzcz0idWktZGF0ZXBpY2tlci13ZWVrLWNvbCI+Jyt0aGlzLl9nZXQoZSwid2Vla0hlYWRlciIpKyI8L3RoPiI6IiI7Zm9yKHZhciBXPTA7Vzw3O1crKyl7dmFyIFg9KFcrVCklNzt6Kz0iPHRoIisoKFcrVCs2KSU3Pj01PycgY2xhc3M9InVpLWRhdGVwaWNrZXItd2Vlay1lbmQiJzoiIikrIj4iKyc8c3BhbiB0aXRsZT0iJytDW1hdKyciPicrTFtYXSsiPC9zcGFuPjwvdGg+In1VKz16KyI8L3RyPjwvdGhlYWQ+PHRib2R5PiI7dmFyIFY9dGhpcy5fZ2V0RGF5c0luTW9udGgoZCxwKTtkPT1lLnNlbGVjdGVkWWVhciYmcD09ZS5zZWxlY3RlZE1vbnRoJiYoZS5zZWxlY3RlZERheT1NYXRoLm1pbihlLnNlbGVjdGVkRGF5LFYpKTt2YXIgSj0odGhpcy5fZ2V0Rmlyc3REYXlPZk1vbnRoKGQscCktVCs3KSU3LEs9TWF0aC5jZWlsKChKK1YpLzcpLFE9Zj90aGlzLm1heFJvd3M+Sz90aGlzLm1heFJvd3M6SzpLO3RoaXMubWF4Um93cz1RO3ZhciBHPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGQscCwxLUopKTtmb3IodmFyIFk9MDtZPFE7WSsrKXtVKz0iPHRyPiI7dmFyIFo9Tj8nPHRkIGNsYXNzPSJ1aS1kYXRlcGlja2VyLXdlZWstY29sIj4nK3RoaXMuX2dldChlLCJjYWxjdWxhdGVXZWVrIikoRykrIjwvdGQ+IjoiIjtmb3IodmFyIFc9MDtXPDc7VysrKXt2YXIgZXQ9TT9NLmFwcGx5KGUuaW5wdXQ/ZS5pbnB1dFswXTpudWxsLFtHXSk6WyEwLCIiXSx0dD1HLmdldE1vbnRoKCkhPXAsbnQ9dHQmJiFEfHwhZXRbMF18fGMmJkc8Y3x8aCYmRz5oO1orPSc8dGQgY2xhc3M9IicrKChXK1QrNiklNz49NT8iIHVpLWRhdGVwaWNrZXItd2Vlay1lbmQiOiIiKSsodHQ/IiB1aS1kYXRlcGlja2VyLW90aGVyLW1vbnRoIjoiIikrKEcuZ2V0VGltZSgpPT1xLmdldFRpbWUoKSYmcD09ZS5zZWxlY3RlZE1vbnRoJiZlLl9rZXlFdmVudHx8SC5nZXRUaW1lKCk9PUcuZ2V0VGltZSgpJiZILmdldFRpbWUoKT09cS5nZXRUaW1lKCk/IiAiK3RoaXMuX2RheU92ZXJDbGFzczoiIikrKG50PyIgIit0aGlzLl91bnNlbGVjdGFibGVDbGFzcysiIHVpLXN0YXRlLWRpc2FibGVkIjoiIikrKHR0JiYhXz8iIjoiICIrZXRbMV0rKEcuZ2V0VGltZSgpPT1sLmdldFRpbWUoKT8iICIrdGhpcy5fY3VycmVudENsYXNzOiIiKSsoRy5nZXRUaW1lKCk9PXQuZ2V0VGltZSgpPyIgdWktZGF0ZXBpY2tlci10b2RheSI6IiIpKSsnIicrKCghdHR8fF8pJiZldFsyXT8nIHRpdGxlPSInK2V0WzJdKyciJzoiIikrKG50PyIiOicgZGF0YS1oYW5kbGVyPSJzZWxlY3REYXkiIGRhdGEtZXZlbnQ9ImNsaWNrIiBkYXRhLW1vbnRoPSInK0cuZ2V0TW9udGgoKSsnIiBkYXRhLXllYXI9IicrRy5nZXRGdWxsWWVhcigpKyciJykrIj4iKyh0dCYmIV8/IiYjeGEwOyI6bnQ/JzxzcGFuIGNsYXNzPSJ1aS1zdGF0ZS1kZWZhdWx0Ij4nK0cuZ2V0RGF0ZSgpKyI8L3NwYW4+IjonPGEgY2xhc3M9InVpLXN0YXRlLWRlZmF1bHQnKyhHLmdldFRpbWUoKT09dC5nZXRUaW1lKCk/IiB1aS1zdGF0ZS1oaWdobGlnaHQiOiIiKSsoRy5nZXRUaW1lKCk9PWwuZ2V0VGltZSgpPyIgdWktc3RhdGUtYWN0aXZlIjoiIikrKHR0PyIgdWktcHJpb3JpdHktc2Vjb25kYXJ5IjoiIikrJyIgaHJlZj0iIyI+JytHLmdldERhdGUoKSsiPC9hPiIpKyI8L3RkPiIsRy5zZXREYXRlKEcuZ2V0RGF0ZSgpKzEpLEc9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoRyl9VSs9WisiPC90cj4ifXArKyxwPjExJiYocD0wLGQrKyksVSs9IjwvdGJvZHk+PC90YWJsZT4iKyhmPyI8L2Rpdj4iKyhvWzBdPjAmJkk9PW9bMV0tMT8nPGRpdiBjbGFzcz0idWktZGF0ZXBpY2tlci1yb3ctYnJlYWsiPjwvZGl2Pic6IiIpOiIiKSxGKz1VfUIrPUZ9cmV0dXJuIEIrPXgrKCQuYnJvd3Nlci5tc2llJiZwYXJzZUludCgkLmJyb3dzZXIudmVyc2lvbiwxMCk8NyYmIWUuaW5saW5lPyc8aWZyYW1lIHNyYz0iamF2YXNjcmlwdDpmYWxzZTsiIGNsYXNzPSJ1aS1kYXRlcGlja2VyLWNvdmVyIiBmcmFtZWJvcmRlcj0iMCI+PC9pZnJhbWU+JzoiIiksZS5fa2V5RXZlbnQ9ITEsQn0sX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyOmZ1bmN0aW9uKGUsdCxuLHIsaSxzLG8sdSl7dmFyIGE9dGhpcy5fZ2V0KGUsImNoYW5nZU1vbnRoIiksZj10aGlzLl9nZXQoZSwiY2hhbmdlWWVhciIpLGw9dGhpcy5fZ2V0KGUsInNob3dNb250aEFmdGVyWWVhciIpLGM9JzxkaXYgY2xhc3M9InVpLWRhdGVwaWNrZXItdGl0bGUiPicsaD0iIjtpZihzfHwhYSloKz0nPHNwYW4gY2xhc3M9InVpLWRhdGVwaWNrZXItbW9udGgiPicrb1t0XSsiPC9zcGFuPiI7ZWxzZXt2YXIgcD1yJiZyLmdldEZ1bGxZZWFyKCk9PW4sZD1pJiZpLmdldEZ1bGxZZWFyKCk9PW47aCs9JzxzZWxlY3QgY2xhc3M9InVpLWRhdGVwaWNrZXItbW9udGgiIGRhdGEtaGFuZGxlcj0ic2VsZWN0TW9udGgiIGRhdGEtZXZlbnQ9ImNoYW5nZSI+Jztmb3IodmFyIHY9MDt2PDEyO3YrKykoIXB8fHY+PXIuZ2V0TW9udGgoKSkmJighZHx8djw9aS5nZXRNb250aCgpKSYmKGgrPSc8b3B0aW9uIHZhbHVlPSInK3YrJyInKyh2PT10Pycgc2VsZWN0ZWQ9InNlbGVjdGVkIic6IiIpKyI+Iit1W3ZdKyI8L29wdGlvbj4iKTtoKz0iPC9zZWxlY3Q+In1sfHwoYys9aCsoc3x8IWF8fCFmPyImI3hhMDsiOiIiKSk7aWYoIWUueWVhcnNodG1sKXtlLnllYXJzaHRtbD0iIjtpZihzfHwhZiljKz0nPHNwYW4gY2xhc3M9InVpLWRhdGVwaWNrZXIteWVhciI+JytuKyI8L3NwYW4+IjtlbHNle3ZhciBtPXRoaXMuX2dldChlLCJ5ZWFyUmFuZ2UiKS5zcGxpdCgiOiIpLGc9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLHk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaCgvY1srLV0uKi8pP24rcGFyc2VJbnQoZS5zdWJzdHJpbmcoMSksMTApOmUubWF0Y2goL1srLV0uKi8pP2crcGFyc2VJbnQoZSwxMCk6cGFyc2VJbnQoZSwxMCk7cmV0dXJuIGlzTmFOKHQpP2c6dH0sYj15KG1bMF0pLHc9TWF0aC5tYXgoYix5KG1bMV18fCIiKSk7Yj1yP01hdGgubWF4KGIsci5nZXRGdWxsWWVhcigpKTpiLHc9aT9NYXRoLm1pbih3LGkuZ2V0RnVsbFllYXIoKSk6dyxlLnllYXJzaHRtbCs9JzxzZWxlY3QgY2xhc3M9InVpLWRhdGVwaWNrZXIteWVhciIgZGF0YS1oYW5kbGVyPSJzZWxlY3RZZWFyIiBkYXRhLWV2ZW50PSJjaGFuZ2UiPic7Zm9yKDtiPD13O2IrKyllLnllYXJzaHRtbCs9JzxvcHRpb24gdmFsdWU9IicrYisnIicrKGI9PW4/JyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzoiIikrIj4iK2IrIjwvb3B0aW9uPiI7ZS55ZWFyc2h0bWwrPSI8L3NlbGVjdD4iLGMrPWUueWVhcnNodG1sLGUueWVhcnNodG1sPW51bGx9fXJldHVybiBjKz10aGlzLl9nZXQoZSwieWVhclN1ZmZpeCIpLGwmJihjKz0oc3x8IWF8fCFmPyImI3hhMDsiOiIiKStoKSxjKz0iPC9kaXY+IixjfSxfYWRqdXN0SW5zdERhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZHJhd1llYXIrKG49PSJZIj90OjApLGk9ZS5kcmF3TW9udGgrKG49PSJNIj90OjApLHM9TWF0aC5taW4oZS5zZWxlY3RlZERheSx0aGlzLl9nZXREYXlzSW5Nb250aChyLGkpKSsobj09IkQiP3Q6MCksbz10aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHIsaSxzKSkpO2Uuc2VsZWN0ZWREYXk9by5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPW8uZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPW8uZ2V0RnVsbFllYXIoKSwobj09Ik0ifHxuPT0iWSIpJiZ0aGlzLl9ub3RpZnlDaGFuZ2UoZSl9LF9yZXN0cmljdE1pbk1heDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWluIikscj10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1heCIpLGk9biYmdDxuP246dDtyZXR1cm4gaT1yJiZpPnI/cjppLGl9LF9ub3RpZnlDaGFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0KGUsIm9uQ2hhbmdlTW9udGhZZWFyIik7dCYmdC5hcHBseShlLmlucHV0P2UuaW5wdXRbMF06bnVsbCxbZS5zZWxlY3RlZFllYXIsZS5zZWxlY3RlZE1vbnRoKzEsZV0pfSxfZ2V0TnVtYmVyT2ZNb250aHM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0KGUsIm51bWJlck9mTW9udGhzIik7cmV0dXJuIHQ9PW51bGw/WzEsMV06dHlwZW9mIHQ9PSJudW1iZXIiP1sxLHRdOnR9LF9nZXRNaW5NYXhEYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2RldGVybWluZURhdGUoZSx0aGlzLl9nZXQoZSx0KyJEYXRlIiksbnVsbCl9LF9nZXREYXlzSW5Nb250aDpmdW5jdGlvbihlLHQpe3JldHVybiAzMi10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShlLHQsMzIpKS5nZXREYXRlKCl9LF9nZXRGaXJzdERheU9mTW9udGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4obmV3IERhdGUoZSx0LDEpKS5nZXREYXkoKX0sX2NhbkFkanVzdE1vbnRoOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMuX2dldE51bWJlck9mTW9udGhzKGUpLHM9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUobixyKyh0PDA/dDppWzBdKmlbMV0pLDEpKTtyZXR1cm4gdDwwJiZzLnNldERhdGUodGhpcy5fZ2V0RGF5c0luTW9udGgocy5nZXRGdWxsWWVhcigpLHMuZ2V0TW9udGgoKSkpLHRoaXMuX2lzSW5SYW5nZShlLHMpfSxfaXNJblJhbmdlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtaW4iKSxyPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWF4Iik7cmV0dXJuKCFufHx0LmdldFRpbWUoKT49bi5nZXRUaW1lKCkpJiYoIXJ8fHQuZ2V0VGltZSgpPD1yLmdldFRpbWUoKSl9LF9nZXRGb3JtYXRDb25maWc6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0KGUsInNob3J0WWVhckN1dG9mZiIpO3JldHVybiB0PXR5cGVvZiB0IT0ic3RyaW5nIj90OihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSUxMDArcGFyc2VJbnQodCwxMCkse3Nob3J0WWVhckN1dG9mZjp0LGRheU5hbWVzU2hvcnQ6dGhpcy5fZ2V0KGUsImRheU5hbWVzU2hvcnQiKSxkYXlOYW1lczp0aGlzLl9nZXQoZSwiZGF5TmFtZXMiKSxtb250aE5hbWVzU2hvcnQ6dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXNTaG9ydCIpLG1vbnRoTmFtZXM6dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXMiKX19LF9mb3JtYXREYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3R8fChlLmN1cnJlbnREYXk9ZS5zZWxlY3RlZERheSxlLmN1cnJlbnRNb250aD1lLnNlbGVjdGVkTW9udGgsZS5jdXJyZW50WWVhcj1lLnNlbGVjdGVkWWVhcik7dmFyIGk9dD90eXBlb2YgdD09Im9iamVjdCI/dDp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShyLG4sdCkpOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KSk7cmV0dXJuIHRoaXMuZm9ybWF0RGF0ZSh0aGlzLl9nZXQoZSwiZGF0ZUZvcm1hdCIpLGksdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKX19KSwkLmZuLmRhdGVwaWNrZXI9ZnVuY3Rpb24oZSl7aWYoIXRoaXMubGVuZ3RoKXJldHVybiB0aGlzOyQuZGF0ZXBpY2tlci5pbml0aWFsaXplZHx8KCQoZG9jdW1lbnQpLm1vdXNlZG93bigkLmRhdGVwaWNrZXIuX2NoZWNrRXh0ZXJuYWxDbGljaykuZmluZChkb2N1bWVudC5ib2R5KS5hcHBlbmQoJC5kYXRlcGlja2VyLmRwRGl2KSwkLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQ9ITApO3ZhciB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gdHlwZW9mIGUhPSJzdHJpbmcifHxlIT0iaXNEaXNhYmxlZCImJmUhPSJnZXREYXRlIiYmZSE9IndpZGdldCI/ZT09Im9wdGlvbiImJmFyZ3VtZW50cy5sZW5ndGg9PTImJnR5cGVvZiBhcmd1bWVudHNbMV09PSJzdHJpbmciPyQuZGF0ZXBpY2tlclsiXyIrZSsiRGF0ZXBpY2tlciJdLmFwcGx5KCQuZGF0ZXBpY2tlcixbdGhpc1swXV0uY29uY2F0KHQpKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt0eXBlb2YgZT09InN0cmluZyI/JC5kYXRlcGlja2VyWyJfIitlKyJEYXRlcGlja2VyIl0uYXBwbHkoJC5kYXRlcGlja2VyLFt0aGlzXS5jb25jYXQodCkpOiQuZGF0ZXBpY2tlci5fYXR0YWNoRGF0ZXBpY2tlcih0aGlzLGUpfSk6JC5kYXRlcGlja2VyWyJfIitlKyJEYXRlcGlja2VyIl0uYXBwbHkoJC5kYXRlcGlja2VyLFt0aGlzWzBdXS5jb25jYXQodCkpfSwkLmRhdGVwaWNrZXI9bmV3IERhdGVwaWNrZXIsJC5kYXRlcGlja2VyLmluaXRpYWxpemVkPSExLCQuZGF0ZXBpY2tlci51dWlkPShuZXcgRGF0ZSkuZ2V0VGltZSgpLCQuZGF0ZXBpY2tlci52ZXJzaW9uPSIxLjkuMCIsd2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdPSR9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuPSJ1aS1kaWFsb2cgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwgIixyPXtidXR0b25zOiEwLGhlaWdodDohMCxtYXhIZWlnaHQ6ITAsbWF4V2lkdGg6ITAsbWluSGVpZ2h0OiEwLG1pbldpZHRoOiEwLHdpZHRoOiEwfSxpPXttYXhIZWlnaHQ6ITAsbWF4V2lkdGg6ITAsbWluSGVpZ2h0OiEwLG1pbldpZHRoOiEwfTtlLndpZGdldCgidWkuZGlhbG9nIix7dmVyc2lvbjoiMS45LjAiLG9wdGlvbnM6e2F1dG9PcGVuOiEwLGJ1dHRvbnM6e30sY2xvc2VPbkVzY2FwZTohMCxjbG9zZVRleHQ6ImNsb3NlIixkaWFsb2dDbGFzczoiIixkcmFnZ2FibGU6ITAsaGlkZTpudWxsLGhlaWdodDoiYXV0byIsbWF4SGVpZ2h0OiExLG1heFdpZHRoOiExLG1pbkhlaWdodDoxNTAsbWluV2lkdGg6MTUwLG1vZGFsOiExLHBvc2l0aW9uOntteToiY2VudGVyIixhdDoiY2VudGVyIixvZjp3aW5kb3csY29sbGlzaW9uOiJmaXQiLHVzaW5nOmZ1bmN0aW9uKHQpe3ZhciBuPWUodGhpcykuY3NzKHQpLm9mZnNldCgpLnRvcDtuPDAmJmUodGhpcykuY3NzKCJ0b3AiLHQudG9wLW4pfX0scmVzaXphYmxlOiEwLHNob3c6bnVsbCxzdGFjazohMCx0aXRsZToiIix3aWR0aDozMDAsekluZGV4OjFlM30sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub3JpZ2luYWxUaXRsZT10aGlzLmVsZW1lbnQuYXR0cigidGl0bGUiKSx0eXBlb2YgdGhpcy5vcmlnaW5hbFRpdGxlIT0ic3RyaW5nIiYmKHRoaXMub3JpZ2luYWxUaXRsZT0iIiksdGhpcy5vbGRQb3NpdGlvbj17cGFyZW50OnRoaXMuZWxlbWVudC5wYXJlbnQoKSxpbmRleDp0aGlzLmVsZW1lbnQucGFyZW50KCkuY2hpbGRyZW4oKS5pbmRleCh0aGlzLmVsZW1lbnQpfSx0aGlzLm9wdGlvbnMudGl0bGU9dGhpcy5vcHRpb25zLnRpdGxlfHx0aGlzLm9yaWdpbmFsVGl0bGU7dmFyIHQ9dGhpcyxyPXRoaXMub3B0aW9ucyxpPXIudGl0bGV8fCImIzE2MDsiLHM9KHRoaXMudWlEaWFsb2c9ZSgiPGRpdj4iKSkuYWRkQ2xhc3MobityLmRpYWxvZ0NsYXNzKS5jc3Moe2Rpc3BsYXk6Im5vbmUiLG91dGxpbmU6MCx6SW5kZXg6ci56SW5kZXh9KS5hdHRyKCJ0YWJJbmRleCIsLTEpLmtleWRvd24oZnVuY3Rpb24obil7ci5jbG9zZU9uRXNjYXBlJiYhbi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmbi5rZXlDb2RlJiZuLmtleUNvZGU9PT1lLnVpLmtleUNvZGUuRVNDQVBFJiYodC5jbG9zZShuKSxuLnByZXZlbnREZWZhdWx0KCkpfSkubW91c2Vkb3duKGZ1bmN0aW9uKGUpe3QubW92ZVRvVG9wKCExLGUpfSkuYXBwZW5kVG8oImJvZHkiKSxvPXRoaXMuZWxlbWVudC5zaG93KCkucmVtb3ZlQXR0cigidGl0bGUiKS5hZGRDbGFzcygidWktZGlhbG9nLWNvbnRlbnQgdWktd2lkZ2V0LWNvbnRlbnQiKS5hcHBlbmRUbyhzKSx1PSh0aGlzLnVpRGlhbG9nVGl0bGViYXI9ZSgiPGRpdj4iKSkuYWRkQ2xhc3MoInVpLWRpYWxvZy10aXRsZWJhciAgdWktd2lkZ2V0LWhlYWRlciAgdWktY29ybmVyLWFsbCAgdWktaGVscGVyLWNsZWFyZml4IikucHJlcGVuZFRvKHMpLGE9ZSgiPGEgaHJlZj0nIyc+PC9hPiIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctdGl0bGViYXItY2xvc2UgIHVpLWNvcm5lci1hbGwiKS5hdHRyKCJyb2xlIiwiYnV0dG9uIikuY2xpY2soZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHQuY2xvc2UoZSl9KS5hcHBlbmRUbyh1KSxmPSh0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZVRleHQ9ZSgiPHNwYW4+IikpLmFkZENsYXNzKCJ1aS1pY29uIHVpLWljb24tY2xvc2V0aGljayIpLnRleHQoci5jbG9zZVRleHQpLmFwcGVuZFRvKGEpLGw9ZSgiPHNwYW4+IikudW5pcXVlSWQoKS5hZGRDbGFzcygidWktZGlhbG9nLXRpdGxlIikuaHRtbChpKS5wcmVwZW5kVG8odSksYz0odGhpcy51aURpYWxvZ0J1dHRvblBhbmU9ZSgiPGRpdj4iKSkuYWRkQ2xhc3MoInVpLWRpYWxvZy1idXR0b25wYW5lIHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCIpLGg9KHRoaXMudWlCdXR0b25TZXQ9ZSgiPGRpdj4iKSkuYWRkQ2xhc3MoInVpLWRpYWxvZy1idXR0b25zZXQiKS5hcHBlbmRUbyhjKTtzLmF0dHIoe3JvbGU6ImRpYWxvZyIsImFyaWEtbGFiZWxsZWRieSI6bC5hdHRyKCJpZCIpfSksdS5maW5kKCIqIikuYWRkKHUpLmRpc2FibGVTZWxlY3Rpb24oKSx0aGlzLl9ob3ZlcmFibGUoYSksdGhpcy5fZm9jdXNhYmxlKGEpLHIuZHJhZ2dhYmxlJiZlLmZuLmRyYWdnYWJsZSYmdGhpcy5fbWFrZURyYWdnYWJsZSgpLHIucmVzaXphYmxlJiZlLmZuLnJlc2l6YWJsZSYmdGhpcy5fbWFrZVJlc2l6YWJsZSgpLHRoaXMuX2NyZWF0ZUJ1dHRvbnMoci5idXR0b25zKSx0aGlzLl9pc09wZW49ITEsZS5mbi5iZ2lmcmFtZSYmcy5iZ2lmcmFtZSgpLHRoaXMuX29uKHMse2tleWRvd246ZnVuY3Rpb24odCl7aWYoIXIubW9kYWx8fHQua2V5Q29kZSE9PWUudWkua2V5Q29kZS5UQUIpcmV0dXJuO3ZhciBuPWUoIjp0YWJiYWJsZSIscyksaT1uLmZpbHRlcigiOmZpcnN0Iiksbz1uLmZpbHRlcigiOmxhc3QiKTtpZih0LnRhcmdldD09PW9bMF0mJiF0LnNoaWZ0S2V5KXJldHVybiBpLmZvY3VzKDEpLCExO2lmKHQudGFyZ2V0PT09aVswXSYmdC5zaGlmdEtleSlyZXR1cm4gby5mb2N1cygxKSwhMX19KX0sX2luaXQ6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuYXV0b09wZW4mJnRoaXMub3BlbigpfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5vbGRQb3NpdGlvbjt0aGlzLm92ZXJsYXkmJnRoaXMub3ZlcmxheS5kZXN0cm95KCksdGhpcy51aURpYWxvZy5oaWRlKCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctY29udGVudCB1aS13aWRnZXQtY29udGVudCIpLmhpZGUoKS5hcHBlbmRUbygiYm9keSIpLHRoaXMudWlEaWFsb2cucmVtb3ZlKCksdGhpcy5vcmlnaW5hbFRpdGxlJiZ0aGlzLmVsZW1lbnQuYXR0cigidGl0bGUiLHRoaXMub3JpZ2luYWxUaXRsZSksZT10LnBhcmVudC5jaGlsZHJlbigpLmVxKHQuaW5kZXgpLGUubGVuZ3RoJiZlWzBdIT09dGhpcy5lbGVtZW50WzBdP2UuYmVmb3JlKHRoaXMuZWxlbWVudCk6dC5wYXJlbnQuYXBwZW5kKHRoaXMuZWxlbWVudCl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVpRGlhbG9nfSxjbG9zZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLHIsaTtpZighdGhpcy5faXNPcGVuKXJldHVybjtpZighMT09PXRoaXMuX3RyaWdnZXIoImJlZm9yZUNsb3NlIix0KSlyZXR1cm47cmV0dXJuIHRoaXMuX2lzT3Blbj0hMSx0aGlzLm92ZXJsYXkmJnRoaXMub3ZlcmxheS5kZXN0cm95KCksdGhpcy5vcHRpb25zLmhpZGU/dGhpcy51aURpYWxvZy5oaWRlKHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7bi5fdHJpZ2dlcigiY2xvc2UiLHQpfSk6KHRoaXMudWlEaWFsb2cuaGlkZSgpLHRoaXMuX3RyaWdnZXIoImNsb3NlIix0KSksZS51aS5kaWFsb2cub3ZlcmxheS5yZXNpemUoKSx0aGlzLm9wdGlvbnMubW9kYWwmJihyPTAsZSgiLnVpLWRpYWxvZyIpLmVhY2goZnVuY3Rpb24oKXt0aGlzIT09bi51aURpYWxvZ1swXSYmKGk9ZSh0aGlzKS5jc3MoInotaW5kZXgiKSxpc05hTihpKXx8KHI9TWF0aC5tYXgocixpKSkpfSksZS51aS5kaWFsb2cubWF4Wj1yKSx0aGlzfSxpc09wZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNPcGVufSxtb3ZlVG9Ub3A6ZnVuY3Rpb24odCxuKXt2YXIgcj10aGlzLm9wdGlvbnMsaTtyZXR1cm4gci5tb2RhbCYmIXR8fCFyLnN0YWNrJiYhci5tb2RhbD90aGlzLl90cmlnZ2VyKCJmb2N1cyIsbik6KHIuekluZGV4PmUudWkuZGlhbG9nLm1heFomJihlLnVpLmRpYWxvZy5tYXhaPXIuekluZGV4KSx0aGlzLm92ZXJsYXkmJihlLnVpLmRpYWxvZy5tYXhaKz0xLGUudWkuZGlhbG9nLm92ZXJsYXkubWF4Wj1lLnVpLmRpYWxvZy5tYXhaLHRoaXMub3ZlcmxheS4kZWwuY3NzKCJ6LWluZGV4IixlLnVpLmRpYWxvZy5vdmVybGF5Lm1heFopKSxpPXtzY3JvbGxUb3A6dGhpcy5lbGVtZW50LnNjcm9sbFRvcCgpLHNjcm9sbExlZnQ6dGhpcy5lbGVtZW50LnNjcm9sbExlZnQoKX0sZS51aS5kaWFsb2cubWF4Wis9MSx0aGlzLnVpRGlhbG9nLmNzcygiei1pbmRleCIsZS51aS5kaWFsb2cubWF4WiksdGhpcy5lbGVtZW50LmF0dHIoaSksdGhpcy5fdHJpZ2dlcigiZm9jdXMiLG4pLHRoaXMpfSxvcGVuOmZ1bmN0aW9uKCl7aWYodGhpcy5faXNPcGVuKXJldHVybjt2YXIgdCxuPXRoaXMub3B0aW9ucyxyPXRoaXMudWlEaWFsb2c7cmV0dXJuIHRoaXMuX3NpemUoKSx0aGlzLl9wb3NpdGlvbihuLnBvc2l0aW9uKSxyLnNob3cobi5zaG93KSx0aGlzLm92ZXJsYXk9bi5tb2RhbD9uZXcgZS51aS5kaWFsb2cub3ZlcmxheSh0aGlzKTpudWxsLHRoaXMubW92ZVRvVG9wKCEwKSx0PXRoaXMuZWxlbWVudC5maW5kKCI6dGFiYmFibGUiKSx0Lmxlbmd0aHx8KHQ9dGhpcy51aURpYWxvZ0J1dHRvblBhbmUuZmluZCgiOnRhYmJhYmxlIiksdC5sZW5ndGh8fCh0PXIpKSx0LmVxKDApLmZvY3VzKCksdGhpcy5faXNPcGVuPSEwLHRoaXMuX3RyaWdnZXIoIm9wZW4iKSx0aGlzfSxfY3JlYXRlQnV0dG9uczpmdW5jdGlvbih0KXt2YXIgbixyLGk9dGhpcyxzPSExO3RoaXMudWlEaWFsb2dCdXR0b25QYW5lLnJlbW92ZSgpLHRoaXMudWlCdXR0b25TZXQuZW1wdHkoKSx0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsJiZlLmVhY2godCxmdW5jdGlvbigpe3JldHVybiEocz0hMCl9KSxzPyhlLmVhY2godCxmdW5jdGlvbih0LG4pe249ZS5pc0Z1bmN0aW9uKG4pP3tjbGljazpuLHRleHQ6dH06bjt2YXIgcj1lKCI8YnV0dG9uIHR5cGU9J2J1dHRvbic+IikuYXR0cihuLCEwKS51bmJpbmQoImNsaWNrIikuY2xpY2soZnVuY3Rpb24oKXtuLmNsaWNrLmFwcGx5KGkuZWxlbWVudFswXSxhcmd1bWVudHMpfSkuYXBwZW5kVG8oaS51aUJ1dHRvblNldCk7ZS5mbi5idXR0b24mJnIuYnV0dG9uKCl9KSx0aGlzLnVpRGlhbG9nLmFkZENsYXNzKCJ1aS1kaWFsb2ctYnV0dG9ucyIpLHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLmFwcGVuZFRvKHRoaXMudWlEaWFsb2cpKTp0aGlzLnVpRGlhbG9nLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctYnV0dG9ucyIpfSxfbWFrZURyYWdnYWJsZTpmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSl7cmV0dXJue3Bvc2l0aW9uOmUucG9zaXRpb24sb2Zmc2V0OmUub2Zmc2V0fX12YXIgdD10aGlzLG49dGhpcy5vcHRpb25zO3RoaXMudWlEaWFsb2cuZHJhZ2dhYmxlKHtjYW5jZWw6Ii51aS1kaWFsb2ctY29udGVudCwgLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZSIsaGFuZGxlOiIudWktZGlhbG9nLXRpdGxlYmFyIixjb250YWlubWVudDoiZG9jdW1lbnQiLHN0YXJ0OmZ1bmN0aW9uKG4saSl7ZSh0aGlzKS5hZGRDbGFzcygidWktZGlhbG9nLWRyYWdnaW5nIiksdC5fdHJpZ2dlcigiZHJhZ1N0YXJ0IixuLHIoaSkpfSxkcmFnOmZ1bmN0aW9uKGUsbil7dC5fdHJpZ2dlcigiZHJhZyIsZSxyKG4pKX0sc3RvcDpmdW5jdGlvbihpLHMpe24ucG9zaXRpb249W3MucG9zaXRpb24ubGVmdC10LmRvY3VtZW50LnNjcm9sbExlZnQoKSxzLnBvc2l0aW9uLnRvcC10LmRvY3VtZW50LnNjcm9sbFRvcCgpXSxlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctZHJhZ2dpbmciKSx0Ll90cmlnZ2VyKCJkcmFnU3RvcCIsaSxyKHMpKSxlLnVpLmRpYWxvZy5vdmVybGF5LnJlc2l6ZSgpfX0pfSxfbWFrZVJlc2l6YWJsZTpmdW5jdGlvbihuKXtmdW5jdGlvbiB1KGUpe3JldHVybntvcmlnaW5hbFBvc2l0aW9uOmUub3JpZ2luYWxQb3NpdGlvbixvcmlnaW5hbFNpemU6ZS5vcmlnaW5hbFNpemUscG9zaXRpb246ZS5wb3NpdGlvbixzaXplOmUuc2l6ZX19bj1uPT09dD90aGlzLm9wdGlvbnMucmVzaXphYmxlOm47dmFyIHI9dGhpcyxpPXRoaXMub3B0aW9ucyxzPXRoaXMudWlEaWFsb2cuY3NzKCJwb3NpdGlvbiIpLG89dHlwZW9mIG49PSJzdHJpbmciP246Im4sZSxzLHcsc2Usc3csbmUsbnciO3RoaXMudWlEaWFsb2cucmVzaXphYmxlKHtjYW5jZWw6Ii51aS1kaWFsb2ctY29udGVudCIsY29udGFpbm1lbnQ6ImRvY3VtZW50IixhbHNvUmVzaXplOnRoaXMuZWxlbWVudCxtYXhXaWR0aDppLm1heFdpZHRoLG1heEhlaWdodDppLm1heEhlaWdodCxtaW5XaWR0aDppLm1pbldpZHRoLG1pbkhlaWdodDp0aGlzLl9taW5IZWlnaHQoKSxoYW5kbGVzOm8sc3RhcnQ6ZnVuY3Rpb24odCxuKXtlKHRoaXMpLmFkZENsYXNzKCJ1aS1kaWFsb2ctcmVzaXppbmciKSxyLl90cmlnZ2VyKCJyZXNpemVTdGFydCIsdCx1KG4pKX0scmVzaXplOmZ1bmN0aW9uKGUsdCl7ci5fdHJpZ2dlcigicmVzaXplIixlLHUodCkpfSxzdG9wOmZ1bmN0aW9uKHQsbil7ZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLXJlc2l6aW5nIiksaS5oZWlnaHQ9ZSh0aGlzKS5oZWlnaHQoKSxpLndpZHRoPWUodGhpcykud2lkdGgoKSxyLl90cmlnZ2VyKCJyZXNpemVTdG9wIix0LHUobikpLGUudWkuZGlhbG9nLm92ZXJsYXkucmVzaXplKCl9fSkuY3NzKCJwb3NpdGlvbiIscykuZmluZCgiLnVpLXJlc2l6YWJsZS1zZSIpLmFkZENsYXNzKCJ1aS1pY29uIHVpLWljb24tZ3JpcC1kaWFnb25hbC1zZSIpfSxfbWluSGVpZ2h0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3JldHVybiBlLmhlaWdodD09PSJhdXRvIj9lLm1pbkhlaWdodDpNYXRoLm1pbihlLm1pbkhlaWdodCxlLmhlaWdodCl9LF9wb3NpdGlvbjpmdW5jdGlvbih0KXt2YXIgbj1bXSxyPVswLDBdLGk7aWYodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmcifHx0eXBlb2YgdD09Im9iamVjdCImJiIwImluIHQpbj10LnNwbGl0P3Quc3BsaXQoIiAiKTpbdFswXSx0WzFdXSxuLmxlbmd0aD09PTEmJihuWzFdPW5bMF0pLGUuZWFjaChbImxlZnQiLCJ0b3AiXSxmdW5jdGlvbihlLHQpeytuW2VdPT09bltlXSYmKHJbZV09bltlXSxuW2VdPXQpfSksdD17bXk6bi5qb2luKCIgIiksYXQ6bi5qb2luKCIgIiksb2Zmc2V0OnIuam9pbigiICIpfTt0PWUuZXh0ZW5kKHt9LGUudWkuZGlhbG9nLnByb3RvdHlwZS5vcHRpb25zLnBvc2l0aW9uLHQpfWVsc2UgdD1lLnVpLmRpYWxvZy5wcm90b3R5cGUub3B0aW9ucy5wb3NpdGlvbjtpPXRoaXMudWlEaWFsb2cuaXMoIjp2aXNpYmxlIiksaXx8dGhpcy51aURpYWxvZy5zaG93KCksdGhpcy51aURpYWxvZy5wb3NpdGlvbih0KSxpfHx0aGlzLnVpRGlhbG9nLmhpZGUoKX0sX3NldE9wdGlvbnM6ZnVuY3Rpb24odCl7dmFyIG49dGhpcyxzPXt9LG89ITE7ZS5lYWNoKHQsZnVuY3Rpb24oZSx0KXtuLl9zZXRPcHRpb24oZSx0KSxlIGluIHImJihvPSEwKSxlIGluIGkmJihzW2VdPXQpfSksbyYmdGhpcy5fc2l6ZSgpLHRoaXMudWlEaWFsb2cuaXMoIjpkYXRhKHJlc2l6YWJsZSkiKSYmdGhpcy51aURpYWxvZy5yZXNpemFibGUoIm9wdGlvbiIscyl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxyKXt2YXIgaSxzLG89dGhpcy51aURpYWxvZztzd2l0Y2godCl7Y2FzZSJidXR0b25zIjp0aGlzLl9jcmVhdGVCdXR0b25zKHIpO2JyZWFrO2Nhc2UiY2xvc2VUZXh0Ijp0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZVRleHQudGV4dCgiIityKTticmVhaztjYXNlImRpYWxvZ0NsYXNzIjpvLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5kaWFsb2dDbGFzcykuYWRkQ2xhc3MobityKTticmVhaztjYXNlImRpc2FibGVkIjpyP28uYWRkQ2xhc3MoInVpLWRpYWxvZy1kaXNhYmxlZCIpOm8ucmVtb3ZlQ2xhc3MoInVpLWRpYWxvZy1kaXNhYmxlZCIpO2JyZWFrO2Nhc2UiZHJhZ2dhYmxlIjppPW8uaXMoIjpkYXRhKGRyYWdnYWJsZSkiKSxpJiYhciYmby5kcmFnZ2FibGUoImRlc3Ryb3kiKSwhaSYmciYmdGhpcy5fbWFrZURyYWdnYWJsZSgpO2JyZWFrO2Nhc2UicG9zaXRpb24iOnRoaXMuX3Bvc2l0aW9uKHIpO2JyZWFrO2Nhc2UicmVzaXphYmxlIjpzPW8uaXMoIjpkYXRhKHJlc2l6YWJsZSkiKSxzJiYhciYmby5yZXNpemFibGUoImRlc3Ryb3kiKSxzJiZ0eXBlb2Ygcj09InN0cmluZyImJm8ucmVzaXphYmxlKCJvcHRpb24iLCJoYW5kbGVzIixyKSwhcyYmciE9PSExJiZ0aGlzLl9tYWtlUmVzaXphYmxlKHIpO2JyZWFrO2Nhc2UidGl0bGUiOmUoIi51aS1kaWFsb2ctdGl0bGUiLHRoaXMudWlEaWFsb2dUaXRsZWJhcikuaHRtbCgiIisocnx8IiYjMTYwOyIpKX10aGlzLl9zdXBlcih0LHIpfSxfc2l6ZTpmdW5jdGlvbigpe3ZhciB0LG4scixpPXRoaXMub3B0aW9ucyxzPXRoaXMudWlEaWFsb2cuaXMoIjp2aXNpYmxlIik7dGhpcy5lbGVtZW50LnNob3coKS5jc3Moe3dpZHRoOiJhdXRvIixtaW5IZWlnaHQ6MCxoZWlnaHQ6MH0pLGkubWluV2lkdGg+aS53aWR0aCYmKGkud2lkdGg9aS5taW5XaWR0aCksdD10aGlzLnVpRGlhbG9nLmNzcyh7aGVpZ2h0OiJhdXRvIix3aWR0aDppLndpZHRofSkub3V0ZXJIZWlnaHQoKSxuPU1hdGgubWF4KDAsaS5taW5IZWlnaHQtdCksaS5oZWlnaHQ9PT0iYXV0byI/ZS5zdXBwb3J0Lm1pbkhlaWdodD90aGlzLmVsZW1lbnQuY3NzKHttaW5IZWlnaHQ6bixoZWlnaHQ6ImF1dG8ifSk6KHRoaXMudWlEaWFsb2cuc2hvdygpLHI9dGhpcy5lbGVtZW50LmNzcygiaGVpZ2h0IiwiYXV0byIpLmhlaWdodCgpLHN8fHRoaXMudWlEaWFsb2cuaGlkZSgpLHRoaXMuZWxlbWVudC5oZWlnaHQoTWF0aC5tYXgocixuKSkpOnRoaXMuZWxlbWVudC5oZWlnaHQoTWF0aC5tYXgoaS5oZWlnaHQtdCwwKSksdGhpcy51aURpYWxvZy5pcygiOmRhdGEocmVzaXphYmxlKSIpJiZ0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSgib3B0aW9uIiwibWluSGVpZ2h0Iix0aGlzLl9taW5IZWlnaHQoKSl9fSksZS5leHRlbmQoZS51aS5kaWFsb2cse3V1aWQ6MCxtYXhaOjAsZ2V0VGl0bGVJZDpmdW5jdGlvbihlKXt2YXIgdD1lLmF0dHIoImlkIik7cmV0dXJuIHR8fCh0aGlzLnV1aWQrPTEsdD10aGlzLnV1aWQpLCJ1aS1kaWFsb2ctdGl0bGUtIit0fSxvdmVybGF5OmZ1bmN0aW9uKHQpe3RoaXMuJGVsPWUudWkuZGlhbG9nLm92ZXJsYXkuY3JlYXRlKHQpfX0pLGUuZXh0ZW5kKGUudWkuZGlhbG9nLm92ZXJsYXkse2luc3RhbmNlczpbXSxvbGRJbnN0YW5jZXM6W10sbWF4WjowLGV2ZW50czplLm1hcCgiZm9jdXMsbW91c2Vkb3duLG1vdXNldXAsa2V5ZG93bixrZXlwcmVzcyxjbGljayIuc3BsaXQoIiwiKSxmdW5jdGlvbihlKXtyZXR1cm4gZSsiLmRpYWxvZy1vdmVybGF5In0pLmpvaW4oIiAiKSxjcmVhdGU6ZnVuY3Rpb24odCl7dGhpcy5pbnN0YW5jZXMubGVuZ3RoPT09MCYmKHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLnVpLmRpYWxvZy5vdmVybGF5Lmluc3RhbmNlcy5sZW5ndGgmJmUoZG9jdW1lbnQpLmJpbmQoZS51aS5kaWFsb2cub3ZlcmxheS5ldmVudHMsZnVuY3Rpb24odCl7aWYoZSh0LnRhcmdldCkuekluZGV4KCk8ZS51aS5kaWFsb2cub3ZlcmxheS5tYXhaKXJldHVybiExfSl9LDEpLGUod2luZG93KS5iaW5kKCJyZXNpemUuZGlhbG9nLW92ZXJsYXkiLGUudWkuZGlhbG9nLm92ZXJsYXkucmVzaXplKSk7dmFyIG49dGhpcy5vbGRJbnN0YW5jZXMucG9wKCl8fGUoIjxkaXY+IikuYWRkQ2xhc3MoInVpLXdpZGdldC1vdmVybGF5Iik7cmV0dXJuIGUoZG9jdW1lbnQpLmJpbmQoImtleWRvd24uZGlhbG9nLW92ZXJsYXkiLGZ1bmN0aW9uKHIpe3ZhciBpPWUudWkuZGlhbG9nLm92ZXJsYXkuaW5zdGFuY2VzO2kubGVuZ3RoIT09MCYmaVtpLmxlbmd0aC0xXT09PW4mJnQub3B0aW9ucy5jbG9zZU9uRXNjYXBlJiYhci5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmci5rZXlDb2RlJiZyLmtleUNvZGU9PT1lLnVpLmtleUNvZGUuRVNDQVBFJiYodC5jbG9zZShyKSxyLnByZXZlbnREZWZhdWx0KCkpfSksbi5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KS5jc3Moe3dpZHRoOnRoaXMud2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWlnaHQoKX0pLGUuZm4uYmdpZnJhbWUmJm4uYmdpZnJhbWUoKSx0aGlzLmluc3RhbmNlcy5wdXNoKG4pLG59LGRlc3Ryb3k6ZnVuY3Rpb24odCl7dmFyIG49ZS5pbkFycmF5KHQsdGhpcy5pbnN0YW5jZXMpLHI9MDtuIT09LTEmJnRoaXMub2xkSW5zdGFuY2VzLnB1c2godGhpcy5pbnN0YW5jZXMuc3BsaWNlKG4sMSlbMF0pLHRoaXMuaW5zdGFuY2VzLmxlbmd0aD09PTAmJmUoW2RvY3VtZW50LHdpbmRvd10pLnVuYmluZCgiLmRpYWxvZy1vdmVybGF5IiksdC5oZWlnaHQoMCkud2lkdGgoMCkucmVtb3ZlKCksZS5lYWNoKHRoaXMuaW5zdGFuY2VzLGZ1bmN0aW9uKCl7cj1NYXRoLm1heChyLHRoaXMuY3NzKCJ6LWluZGV4IikpfSksdGhpcy5tYXhaPXJ9LGhlaWdodDpmdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIGUuYnJvd3Nlci5tc2llPyh0PU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQpLG49TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodCxkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCksdDxuP2Uod2luZG93KS5oZWlnaHQoKSsicHgiOnQrInB4Iik6ZShkb2N1bWVudCkuaGVpZ2h0KCkrInB4In0sd2lkdGg6ZnVuY3Rpb24oKXt2YXIgdCxuO3JldHVybiBlLmJyb3dzZXIubXNpZT8odD1NYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsV2lkdGgsZG9jdW1lbnQuYm9keS5zY3JvbGxXaWR0aCksbj1NYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgsZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCksdDxuP2Uod2luZG93KS53aWR0aCgpKyJweCI6dCsicHgiKTplKGRvY3VtZW50KS53aWR0aCgpKyJweCJ9LHJlc2l6ZTpmdW5jdGlvbigpe3ZhciB0PWUoW10pO2UuZWFjaChlLnVpLmRpYWxvZy5vdmVybGF5Lmluc3RhbmNlcyxmdW5jdGlvbigpe3Q9dC5hZGQodGhpcyl9KSx0LmNzcyh7d2lkdGg6MCxoZWlnaHQ6MH0pLmNzcyh7d2lkdGg6ZS51aS5kaWFsb2cub3ZlcmxheS53aWR0aCgpLGhlaWdodDplLnVpLmRpYWxvZy5vdmVybGF5LmhlaWdodCgpfSl9fSksZS5leHRlbmQoZS51aS5kaWFsb2cub3ZlcmxheS5wcm90b3R5cGUse2Rlc3Ryb3k6ZnVuY3Rpb24oKXtlLnVpLmRpYWxvZy5vdmVybGF5LmRlc3Ryb3kodGhpcy4kZWwpfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLndpZGdldCgidWkuZHJhZ2dhYmxlIixlLnVpLm1vdXNlLHt2ZXJzaW9uOiIxLjkuMCIsd2lkZ2V0RXZlbnRQcmVmaXg6ImRyYWciLG9wdGlvbnM6e2FkZENsYXNzZXM6ITAsYXBwZW5kVG86InBhcmVudCIsYXhpczohMSxjb25uZWN0VG9Tb3J0YWJsZTohMSxjb250YWlubWVudDohMSxjdXJzb3I6ImF1dG8iLGN1cnNvckF0OiExLGdyaWQ6ITEsaGFuZGxlOiExLGhlbHBlcjoib3JpZ2luYWwiLGlmcmFtZUZpeDohMSxvcGFjaXR5OiExLHJlZnJlc2hQb3NpdGlvbnM6ITEscmV2ZXJ0OiExLHJldmVydER1cmF0aW9uOjUwMCxzY29wZToiZGVmYXVsdCIsc2Nyb2xsOiEwLHNjcm9sbFNlbnNpdGl2aXR5OjIwLHNjcm9sbFNwZWVkOjIwLHNuYXA6ITEsc25hcE1vZGU6ImJvdGgiLHNuYXBUb2xlcmFuY2U6MjAsc3RhY2s6ITEsekluZGV4OiExfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmhlbHBlcj09Im9yaWdpbmFsIiYmIS9eKD86cnxhfGYpLy50ZXN0KHRoaXMuZWxlbWVudC5jc3MoInBvc2l0aW9uIikpJiYodGhpcy5lbGVtZW50WzBdLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLHRoaXMub3B0aW9ucy5hZGRDbGFzc2VzJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWRyYWdnYWJsZSIpLHRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1kcmFnZ2FibGUtZGlzYWJsZWQiKSx0aGlzLl9tb3VzZUluaXQoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWRyYWdnYWJsZSB1aS1kcmFnZ2FibGUtZHJhZ2dpbmcgdWktZHJhZ2dhYmxlLWRpc2FibGVkIiksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLmhlbHBlcnx8bi5kaXNhYmxlZHx8ZSh0LnRhcmdldCkuaXMoIi51aS1yZXNpemFibGUtaGFuZGxlIik/ITE6KHRoaXMuaGFuZGxlPXRoaXMuX2dldEhhbmRsZSh0KSx0aGlzLmhhbmRsZT8oZShuLmlmcmFtZUZpeD09PSEwPyJpZnJhbWUiOm4uaWZyYW1lRml4KS5lYWNoKGZ1bmN0aW9uKCl7ZSgnPGRpdiBjbGFzcz0idWktZHJhZ2dhYmxlLWlmcmFtZUZpeCIgc3R5bGU9ImJhY2tncm91bmQ6ICNmZmY7Ij48L2Rpdj4nKS5jc3Moe3dpZHRoOnRoaXMub2Zmc2V0V2lkdGgrInB4IixoZWlnaHQ6dGhpcy5vZmZzZXRIZWlnaHQrInB4Iixwb3NpdGlvbjoiYWJzb2x1dGUiLG9wYWNpdHk6IjAuMDAxIix6SW5kZXg6MWUzfSkuY3NzKGUodGhpcykub2Zmc2V0KCkpLmFwcGVuZFRvKCJib2R5Iil9KSwhMCk6ITEpfSxfbW91c2VTdGFydDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuaGVscGVyPXRoaXMuX2NyZWF0ZUhlbHBlcih0KSx0aGlzLmhlbHBlci5hZGRDbGFzcygidWktZHJhZ2dhYmxlLWRyYWdnaW5nIiksdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLGUudWkuZGRtYW5hZ2VyJiYoZS51aS5kZG1hbmFnZXIuY3VycmVudD10aGlzKSx0aGlzLl9jYWNoZU1hcmdpbnMoKSx0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcygicG9zaXRpb24iKSx0aGlzLnNjcm9sbFBhcmVudD10aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoKSx0aGlzLm9mZnNldD10aGlzLnBvc2l0aW9uQWJzPXRoaXMuZWxlbWVudC5vZmZzZXQoKSx0aGlzLm9mZnNldD17dG9wOnRoaXMub2Zmc2V0LnRvcC10aGlzLm1hcmdpbnMudG9wLGxlZnQ6dGhpcy5vZmZzZXQubGVmdC10aGlzLm1hcmdpbnMubGVmdH0sZS5leHRlbmQodGhpcy5vZmZzZXQse2NsaWNrOntsZWZ0OnQucGFnZVgtdGhpcy5vZmZzZXQubGVmdCx0b3A6dC5wYWdlWS10aGlzLm9mZnNldC50b3B9LHBhcmVudDp0aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSxyZWxhdGl2ZTp0aGlzLl9nZXRSZWxhdGl2ZU9mZnNldCgpfSksdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXRoaXMucG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbih0KSx0aGlzLm9yaWdpbmFsUGFnZVg9dC5wYWdlWCx0aGlzLm9yaWdpbmFsUGFnZVk9dC5wYWdlWSxuLmN1cnNvckF0JiZ0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKG4uY3Vyc29yQXQpLG4uY29udGFpbm1lbnQmJnRoaXMuX3NldENvbnRhaW5tZW50KCksdGhpcy5fdHJpZ2dlcigic3RhcnQiLHQpPT09ITE/KHRoaXMuX2NsZWFyKCksITEpOih0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksZS51aS5kZG1hbmFnZXImJiFuLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsdCksdGhpcy5fbW91c2VEcmFnKHQsITApLGUudWkuZGRtYW5hZ2VyJiZlLnVpLmRkbWFuYWdlci5kcmFnU3RhcnQodGhpcyx0KSwhMCl9LF9tb3VzZURyYWc6ZnVuY3Rpb24odCxuKXt0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKTtpZighbil7dmFyIHI9dGhpcy5fdWlIYXNoKCk7aWYodGhpcy5fdHJpZ2dlcigiZHJhZyIsdCxyKT09PSExKXJldHVybiB0aGlzLl9tb3VzZVVwKHt9KSwhMTt0aGlzLnBvc2l0aW9uPXIucG9zaXRpb259aWYoIXRoaXMub3B0aW9ucy5heGlzfHx0aGlzLm9wdGlvbnMuYXhpcyE9InkiKXRoaXMuaGVscGVyWzBdLnN0eWxlLmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0KyJweCI7aWYoIXRoaXMub3B0aW9ucy5heGlzfHx0aGlzLm9wdGlvbnMuYXhpcyE9IngiKXRoaXMuaGVscGVyWzBdLnN0eWxlLnRvcD10aGlzLnBvc2l0aW9uLnRvcCsicHgiO3JldHVybiBlLnVpLmRkbWFuYWdlciYmZS51aS5kZG1hbmFnZXIuZHJhZyh0aGlzLHQpLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPSExO2UudWkuZGRtYW5hZ2VyJiYhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXImJihuPWUudWkuZGRtYW5hZ2VyLmRyb3AodGhpcyx0KSksdGhpcy5kcm9wcGVkJiYobj10aGlzLmRyb3BwZWQsdGhpcy5kcm9wcGVkPSExKTt2YXIgcj10aGlzLmVsZW1lbnRbMF0saT0hMTt3aGlsZShyJiYocj1yLnBhcmVudE5vZGUpKXI9PWRvY3VtZW50JiYoaT0hMCk7aWYoIWkmJnRoaXMub3B0aW9ucy5oZWxwZXI9PT0ib3JpZ2luYWwiKXJldHVybiExO2lmKHRoaXMub3B0aW9ucy5yZXZlcnQ9PSJpbnZhbGlkIiYmIW58fHRoaXMub3B0aW9ucy5yZXZlcnQ9PSJ2YWxpZCImJm58fHRoaXMub3B0aW9ucy5yZXZlcnQ9PT0hMHx8ZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5yZXZlcnQpJiZ0aGlzLm9wdGlvbnMucmV2ZXJ0LmNhbGwodGhpcy5lbGVtZW50LG4pKXt2YXIgcz10aGlzO2UodGhpcy5oZWxwZXIpLmFuaW1hdGUodGhpcy5vcmlnaW5hbFBvc2l0aW9uLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnREdXJhdGlvbiwxMCksZnVuY3Rpb24oKXtzLl90cmlnZ2VyKCJzdG9wIix0KSE9PSExJiZzLl9jbGVhcigpfSl9ZWxzZSB0aGlzLl90cmlnZ2VyKCJzdG9wIix0KSE9PSExJiZ0aGlzLl9jbGVhcigpO3JldHVybiExfSxfbW91c2VVcDpmdW5jdGlvbih0KXtyZXR1cm4gZSgiZGl2LnVpLWRyYWdnYWJsZS1pZnJhbWVGaXgiKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpfSksZS51aS5kZG1hbmFnZXImJmUudWkuZGRtYW5hZ2VyLmRyYWdTdG9wKHRoaXMsdCksZS51aS5tb3VzZS5wcm90b3R5cGUuX21vdXNlVXAuY2FsbCh0aGlzLHQpfSxjYW5jZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWxwZXIuaXMoIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmciKT90aGlzLl9tb3VzZVVwKHt9KTp0aGlzLl9jbGVhcigpLHRoaXN9LF9nZXRIYW5kbGU6ZnVuY3Rpb24odCl7dmFyIG49IXRoaXMub3B0aW9ucy5oYW5kbGV8fCFlKHRoaXMub3B0aW9ucy5oYW5kbGUsdGhpcy5lbGVtZW50KS5sZW5ndGg/ITA6ITE7cmV0dXJuIGUodGhpcy5vcHRpb25zLmhhbmRsZSx0aGlzLmVsZW1lbnQpLmZpbmQoIioiKS5hbmRTZWxmKCkuZWFjaChmdW5jdGlvbigpe3RoaXM9PXQudGFyZ2V0JiYobj0hMCl9KSxufSxfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyPWUuaXNGdW5jdGlvbihuLmhlbHBlcik/ZShuLmhlbHBlci5hcHBseSh0aGlzLmVsZW1lbnRbMF0sW3RdKSk6bi5oZWxwZXI9PSJjbG9uZSI/dGhpcy5lbGVtZW50LmNsb25lKCkucmVtb3ZlQXR0cigiaWQiKTp0aGlzLmVsZW1lbnQ7cmV0dXJuIHIucGFyZW50cygiYm9keSIpLmxlbmd0aHx8ci5hcHBlbmRUbyhuLmFwcGVuZFRvPT0icGFyZW50Ij90aGlzLmVsZW1lbnRbMF0ucGFyZW50Tm9kZTpuLmFwcGVuZFRvKSxyWzBdIT10aGlzLmVsZW1lbnRbMF0mJiEvKGZpeGVkfGFic29sdXRlKS8udGVzdChyLmNzcygicG9zaXRpb24iKSkmJnIuY3NzKCJwb3NpdGlvbiIsImFic29sdXRlIikscn0sX2FkanVzdE9mZnNldEZyb21IZWxwZXI6ZnVuY3Rpb24odCl7dHlwZW9mIHQ9PSJzdHJpbmciJiYodD10LnNwbGl0KCIgIikpLGUuaXNBcnJheSh0KSYmKHQ9e2xlZnQ6K3RbMF0sdG9wOit0WzFdfHwwfSksImxlZnQiaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dC5sZWZ0K3RoaXMubWFyZ2lucy5sZWZ0KSwicmlnaHQiaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10LnJpZ2h0K3RoaXMubWFyZ2lucy5sZWZ0KSwidG9wImluIHQmJih0aGlzLm9mZnNldC5jbGljay50b3A9dC50b3ArdGhpcy5tYXJnaW5zLnRvcCksImJvdHRvbSJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXQuYm90dG9tK3RoaXMubWFyZ2lucy50b3ApfSxfZ2V0UGFyZW50T2Zmc2V0OmZ1bmN0aW9uKCl7dGhpcy5vZmZzZXRQYXJlbnQ9dGhpcy5oZWxwZXIub2Zmc2V0UGFyZW50KCk7dmFyIHQ9dGhpcy5vZmZzZXRQYXJlbnQub2Zmc2V0KCk7dGhpcy5jc3NQb3NpdGlvbj09ImFic29sdXRlIiYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiZlLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKSYmKHQubGVmdCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpLHQudG9wKz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSk7aWYodGhpcy5vZmZzZXRQYXJlbnRbMF09PWRvY3VtZW50LmJvZHl8fHRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUmJnRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09Imh0bWwiJiZlLmJyb3dzZXIubXNpZSl0PXt0b3A6MCxsZWZ0OjB9O3JldHVybnt0b3A6dC50b3ArKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApLGxlZnQ6dC5sZWZ0KyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCl9fSxfZ2V0UmVsYXRpdmVPZmZzZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLmNzc1Bvc2l0aW9uPT0icmVsYXRpdmUiKXt2YXIgZT10aGlzLmVsZW1lbnQucG9zaXRpb24oKTtyZXR1cm57dG9wOmUudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoInRvcCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksbGVmdDplLmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcygibGVmdCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfX1yZXR1cm57dG9wOjAsbGVmdDowfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5MZWZ0IiksMTApfHwwLHRvcDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5Ub3AiKSwxMCl8fDAscmlnaHQ6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luUmlnaHQiKSwxMCl8fDAsYm90dG9tOnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoIm1hcmdpbkJvdHRvbSIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3QuY29udGFpbm1lbnQ9PSJwYXJlbnQiJiYodC5jb250YWlubWVudD10aGlzLmhlbHBlclswXS5wYXJlbnROb2RlKTtpZih0LmNvbnRhaW5tZW50PT0iZG9jdW1lbnQifHx0LmNvbnRhaW5tZW50PT0id2luZG93Iil0aGlzLmNvbnRhaW5tZW50PVt0LmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiPzA6ZSh3aW5kb3cpLnNjcm9sbExlZnQoKS10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/MDplKHdpbmRvdykuc2Nyb2xsVG9wKCktdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AsKHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/MDplKHdpbmRvdykuc2Nyb2xsTGVmdCgpKStlKHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/ZG9jdW1lbnQ6d2luZG93KS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/MDplKHdpbmRvdykuc2Nyb2xsVG9wKCkpKyhlKHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/ZG9jdW1lbnQ6d2luZG93KS5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF07aWYoIS9eKGRvY3VtZW50fHdpbmRvd3xwYXJlbnQpJC8udGVzdCh0LmNvbnRhaW5tZW50KSYmdC5jb250YWlubWVudC5jb25zdHJ1Y3RvciE9QXJyYXkpe3ZhciBuPWUodC5jb250YWlubWVudCkscj1uWzBdO2lmKCFyKXJldHVybjt2YXIgaT1uLm9mZnNldCgpLHM9ZShyKS5jc3MoIm92ZXJmbG93IikhPSJoaWRkZW4iO3RoaXMuY29udGFpbm1lbnQ9WyhwYXJzZUludChlKHIpLmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoZShyKS5jc3MoInBhZGRpbmdMZWZ0IiksMTApfHwwKSwocGFyc2VJbnQoZShyKS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoZShyKS5jc3MoInBhZGRpbmdUb3AiKSwxMCl8fDApLChzP01hdGgubWF4KHIuc2Nyb2xsV2lkdGgsci5vZmZzZXRXaWR0aCk6ci5vZmZzZXRXaWR0aCktKHBhcnNlSW50KGUocikuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApLShwYXJzZUludChlKHIpLmNzcygicGFkZGluZ1JpZ2h0IiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LXRoaXMubWFyZ2lucy5yaWdodCwocz9NYXRoLm1heChyLnNjcm9sbEhlaWdodCxyLm9mZnNldEhlaWdodCk6ci5vZmZzZXRIZWlnaHQpLShwYXJzZUludChlKHIpLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApLShwYXJzZUludChlKHIpLmNzcygicGFkZGluZ0JvdHRvbSIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcC10aGlzLm1hcmdpbnMuYm90dG9tXSx0aGlzLnJlbGF0aXZlX2NvbnRhaW5lcj1ufWVsc2UgdC5jb250YWlubWVudC5jb25zdHJ1Y3Rvcj09QXJyYXkmJih0aGlzLmNvbnRhaW5tZW50PXQuY29udGFpbm1lbnQpfSxfY29udmVydFBvc2l0aW9uVG86ZnVuY3Rpb24odCxuKXtufHwobj10aGlzLnBvc2l0aW9uKTt2YXIgcj10PT0iYWJzb2x1dGUiPzE6LTEsaT10aGlzLm9wdGlvbnMscz10aGlzLmNzc1Bvc2l0aW9uIT0iYWJzb2x1dGUifHx0aGlzLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJiEhZS5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSk/dGhpcy5zY3JvbGxQYXJlbnQ6dGhpcy5vZmZzZXRQYXJlbnQsbz0vKGh0bWx8Ym9keSkvaS50ZXN0KHNbMF0udGFnTmFtZSk7cmV0dXJue3RvcDpuLnRvcCt0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3Aqcit0aGlzLm9mZnNldC5wYXJlbnQudG9wKnItKHRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOm8/MDpzLnNjcm9sbFRvcCgpKSpyLGxlZnQ6bi5sZWZ0K3RoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQqcit0aGlzLm9mZnNldC5wYXJlbnQubGVmdCpyLSh0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6bz8wOnMuc2Nyb2xsTGVmdCgpKSpyfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zLHI9dGhpcy5jc3NQb3NpdGlvbiE9ImFic29sdXRlInx8dGhpcy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiYhIWUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LGk9LyhodG1sfGJvZHkpL2kudGVzdChyWzBdLnRhZ05hbWUpLHM9dC5wYWdlWCxvPXQucGFnZVk7aWYodGhpcy5vcmlnaW5hbFBvc2l0aW9uKXt2YXIgdTtpZih0aGlzLmNvbnRhaW5tZW50KXtpZih0aGlzLnJlbGF0aXZlX2NvbnRhaW5lcil7dmFyIGE9dGhpcy5yZWxhdGl2ZV9jb250YWluZXIub2Zmc2V0KCk7dT1bdGhpcy5jb250YWlubWVudFswXSthLmxlZnQsdGhpcy5jb250YWlubWVudFsxXSthLnRvcCx0aGlzLmNvbnRhaW5tZW50WzJdK2EubGVmdCx0aGlzLmNvbnRhaW5tZW50WzNdK2EudG9wXX1lbHNlIHU9dGhpcy5jb250YWlubWVudDt0LnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dVswXSYmKHM9dVswXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSx0LnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx1WzFdJiYobz11WzFdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCksdC5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PnVbMl0mJihzPXVbMl0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksdC5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A+dVszXSYmKG89dVszXSt0aGlzLm9mZnNldC5jbGljay50b3ApfWlmKG4uZ3JpZCl7dmFyIGY9bi5ncmlkWzFdP3RoaXMub3JpZ2luYWxQYWdlWStNYXRoLnJvdW5kKChvLXRoaXMub3JpZ2luYWxQYWdlWSkvbi5ncmlkWzFdKSpuLmdyaWRbMV06dGhpcy5vcmlnaW5hbFBhZ2VZO289dT9mLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx1WzFdfHxmLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD51WzNdP2YtdGhpcy5vZmZzZXQuY2xpY2sudG9wPHVbMV0/ZituLmdyaWRbMV06Zi1uLmdyaWRbMV06ZjpmO3ZhciBsPW4uZ3JpZFswXT90aGlzLm9yaWdpbmFsUGFnZVgrTWF0aC5yb3VuZCgocy10aGlzLm9yaWdpbmFsUGFnZVgpL24uZ3JpZFswXSkqbi5ncmlkWzBdOnRoaXMub3JpZ2luYWxQYWdlWDtzPXU/bC10aGlzLm9mZnNldC5jbGljay5sZWZ0PHVbMF18fGwtdGhpcy5vZmZzZXQuY2xpY2subGVmdD51WzJdP2wtdGhpcy5vZmZzZXQuY2xpY2subGVmdDx1WzBdP2wrbi5ncmlkWzBdOmwtbi5ncmlkWzBdOmw6bH19cmV0dXJue3RvcDpvLXRoaXMub2Zmc2V0LmNsaWNrLnRvcC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCsodGhpcy5jc3NQb3NpdGlvbj09ImZpeGVkIj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6aT8wOnIuc2Nyb2xsVG9wKCkpLGxlZnQ6cy10aGlzLm9mZnNldC5jbGljay5sZWZ0LXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQrKHRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTppPzA6ci5zY3JvbGxMZWZ0KCkpfX0sX2NsZWFyOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXIucmVtb3ZlQ2xhc3MoInVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpLHRoaXMuaGVscGVyWzBdIT10aGlzLmVsZW1lbnRbMF0mJiF0aGlzLmNhbmNlbEhlbHBlclJlbW92YWwmJnRoaXMuaGVscGVyLnJlbW92ZSgpLHRoaXMuaGVscGVyPW51bGwsdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsPSExfSxfdHJpZ2dlcjpmdW5jdGlvbih0LG4scil7cmV0dXJuIHI9cnx8dGhpcy5fdWlIYXNoKCksZS51aS5wbHVnaW4uY2FsbCh0aGlzLHQsW24scl0pLHQ9PSJkcmFnIiYmKHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIikpLGUuV2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5jYWxsKHRoaXMsdCxuLHIpfSxwbHVnaW5zOnt9LF91aUhhc2g6ZnVuY3Rpb24oZSl7cmV0dXJue2hlbHBlcjp0aGlzLmhlbHBlcixwb3NpdGlvbjp0aGlzLnBvc2l0aW9uLG9yaWdpbmFsUG9zaXRpb246dGhpcy5vcmlnaW5hbFBvc2l0aW9uLG9mZnNldDp0aGlzLnBvc2l0aW9uQWJzfX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsImNvbm5lY3RUb1NvcnRhYmxlIix7c3RhcnQ6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLGk9ci5vcHRpb25zLHM9ZS5leHRlbmQoe30sbix7aXRlbTpyLmVsZW1lbnR9KTtyLnNvcnRhYmxlcz1bXSxlKGkuY29ubmVjdFRvU29ydGFibGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgbj1lLmRhdGEodGhpcywic29ydGFibGUiKTtuJiYhbi5vcHRpb25zLmRpc2FibGVkJiYoci5zb3J0YWJsZXMucHVzaCh7aW5zdGFuY2U6bixzaG91bGRSZXZlcnQ6bi5vcHRpb25zLnJldmVydH0pLG4ucmVmcmVzaFBvc2l0aW9ucygpLG4uX3RyaWdnZXIoImFjdGl2YXRlIix0LHMpKX0pfSxzdG9wOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKSxpPWUuZXh0ZW5kKHt9LG4se2l0ZW06ci5lbGVtZW50fSk7ZS5lYWNoKHIuc29ydGFibGVzLGZ1bmN0aW9uKCl7dGhpcy5pbnN0YW5jZS5pc092ZXI/KHRoaXMuaW5zdGFuY2UuaXNPdmVyPTAsci5jYW5jZWxIZWxwZXJSZW1vdmFsPSEwLHRoaXMuaW5zdGFuY2UuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSx0aGlzLnNob3VsZFJldmVydCYmKHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5yZXZlcnQ9ITApLHRoaXMuaW5zdGFuY2UuX21vdXNlU3RvcCh0KSx0aGlzLmluc3RhbmNlLm9wdGlvbnMuaGVscGVyPXRoaXMuaW5zdGFuY2Uub3B0aW9ucy5faGVscGVyLHIub3B0aW9ucy5oZWxwZXI9PSJvcmlnaW5hbCImJnRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW0uY3NzKHt0b3A6ImF1dG8iLGxlZnQ6ImF1dG8ifSkpOih0aGlzLmluc3RhbmNlLmNhbmNlbEhlbHBlclJlbW92YWw9ITEsdGhpcy5pbnN0YW5jZS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsdCxpKSl9KX0sZHJhZzpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgiZHJhZ2dhYmxlIiksaT10aGlzLHM9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vZmZzZXQuY2xpY2sudG9wLHI9dGhpcy5vZmZzZXQuY2xpY2subGVmdCxpPXRoaXMucG9zaXRpb25BYnMudG9wLHM9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LG89dC5oZWlnaHQsdT10LndpZHRoLGE9dC50b3AsZj10LmxlZnQ7cmV0dXJuIGUudWkuaXNPdmVyKGkrbixzK3IsYSxmLG8sdSl9O2UuZWFjaChyLnNvcnRhYmxlcyxmdW5jdGlvbihzKXt0aGlzLmluc3RhbmNlLnBvc2l0aW9uQWJzPXIucG9zaXRpb25BYnMsdGhpcy5pbnN0YW5jZS5oZWxwZXJQcm9wb3J0aW9ucz1yLmhlbHBlclByb3BvcnRpb25zLHRoaXMuaW5zdGFuY2Uub2Zmc2V0LmNsaWNrPXIub2Zmc2V0LmNsaWNrLHRoaXMuaW5zdGFuY2UuX2ludGVyc2VjdHNXaXRoKHRoaXMuaW5zdGFuY2UuY29udGFpbmVyQ2FjaGUpPyh0aGlzLmluc3RhbmNlLmlzT3Zlcnx8KHRoaXMuaW5zdGFuY2UuaXNPdmVyPTEsdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbT1lKGkpLmNsb25lKCkucmVtb3ZlQXR0cigiaWQiKS5hcHBlbmRUbyh0aGlzLmluc3RhbmNlLmVsZW1lbnQpLmRhdGEoInNvcnRhYmxlLWl0ZW0iLCEwKSx0aGlzLmluc3RhbmNlLm9wdGlvbnMuX2hlbHBlcj10aGlzLmluc3RhbmNlLm9wdGlvbnMuaGVscGVyLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxwZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbi5oZWxwZXJbMF19LHQudGFyZ2V0PXRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW1bMF0sdGhpcy5pbnN0YW5jZS5fbW91c2VDYXB0dXJlKHQsITApLHRoaXMuaW5zdGFuY2UuX21vdXNlU3RhcnQodCwhMCwhMCksdGhpcy5pbnN0YW5jZS5vZmZzZXQuY2xpY2sudG9wPXIub2Zmc2V0LmNsaWNrLnRvcCx0aGlzLmluc3RhbmNlLm9mZnNldC5jbGljay5sZWZ0PXIub2Zmc2V0LmNsaWNrLmxlZnQsdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LmxlZnQtPXIub2Zmc2V0LnBhcmVudC5sZWZ0LXRoaXMuaW5zdGFuY2Uub2Zmc2V0LnBhcmVudC5sZWZ0LHRoaXMuaW5zdGFuY2Uub2Zmc2V0LnBhcmVudC50b3AtPXIub2Zmc2V0LnBhcmVudC50b3AtdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LnRvcCxyLl90cmlnZ2VyKCJ0b1NvcnRhYmxlIix0KSxyLmRyb3BwZWQ9dGhpcy5pbnN0YW5jZS5lbGVtZW50LHIuY3VycmVudEl0ZW09ci5lbGVtZW50LHRoaXMuaW5zdGFuY2UuZnJvbU91dHNpZGU9ciksdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbSYmdGhpcy5pbnN0YW5jZS5fbW91c2VEcmFnKHQpKTp0aGlzLmluc3RhbmNlLmlzT3ZlciYmKHRoaXMuaW5zdGFuY2UuaXNPdmVyPTAsdGhpcy5pbnN0YW5jZS5jYW5jZWxIZWxwZXJSZW1vdmFsPSEwLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5yZXZlcnQ9ITEsdGhpcy5pbnN0YW5jZS5fdHJpZ2dlcigib3V0Iix0LHRoaXMuaW5zdGFuY2UuX3VpSGFzaCh0aGlzLmluc3RhbmNlKSksdGhpcy5pbnN0YW5jZS5fbW91c2VTdG9wKHQsITApLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxwZXI9dGhpcy5pbnN0YW5jZS5vcHRpb25zLl9oZWxwZXIsdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbS5yZW1vdmUoKSx0aGlzLmluc3RhbmNlLnBsYWNlaG9sZGVyJiZ0aGlzLmluc3RhbmNlLnBsYWNlaG9sZGVyLnJlbW92ZSgpLHIuX3RyaWdnZXIoImZyb21Tb3J0YWJsZSIsdCksci5kcm9wcGVkPSExKX0pfX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwiY3Vyc29yIix7c3RhcnQ6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKCJib2R5IiksaT1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ci5jc3MoImN1cnNvciIpJiYoaS5fY3Vyc29yPXIuY3NzKCJjdXJzb3IiKSksci5jc3MoImN1cnNvciIsaS5jdXJzb3IpfSxzdG9wOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKS5vcHRpb25zO3IuX2N1cnNvciYmZSgiYm9keSIpLmNzcygiY3Vyc29yIixyLl9jdXJzb3IpfX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwib3BhY2l0eSIse3N0YXJ0OmZ1bmN0aW9uKHQsbil7dmFyIHI9ZShuLmhlbHBlciksaT1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ci5jc3MoIm9wYWNpdHkiKSYmKGkuX29wYWNpdHk9ci5jc3MoIm9wYWNpdHkiKSksci5jc3MoIm9wYWNpdHkiLGkub3BhY2l0eSl9LHN0b3A6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ci5fb3BhY2l0eSYmZShuLmhlbHBlcikuY3NzKCJvcGFjaXR5IixyLl9vcGFjaXR5KX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInNjcm9sbCIse3N0YXJ0OmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKTtyLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJnIuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWUhPSJIVE1MIiYmKHIub3ZlcmZsb3dPZmZzZXQ9ci5zY3JvbGxQYXJlbnQub2Zmc2V0KCkpfSxkcmFnOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKSxpPXIub3B0aW9ucyxzPSExO2lmKHIuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmci5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSE9IkhUTUwiKXtpZighaS5heGlzfHxpLmF4aXMhPSJ4IilyLm92ZXJmbG93T2Zmc2V0LnRvcCtyLnNjcm9sbFBhcmVudFswXS5vZmZzZXRIZWlnaHQtdC5wYWdlWTxpLnNjcm9sbFNlbnNpdGl2aXR5P3Iuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1zPXIuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcCtpLnNjcm9sbFNwZWVkOnQucGFnZVktci5vdmVyZmxvd09mZnNldC50b3A8aS5zY3JvbGxTZW5zaXRpdml0eSYmKHIuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1zPXIuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcC1pLnNjcm9sbFNwZWVkKTtpZighaS5heGlzfHxpLmF4aXMhPSJ5IilyLm92ZXJmbG93T2Zmc2V0LmxlZnQrci5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0V2lkdGgtdC5wYWdlWDxpLnNjcm9sbFNlbnNpdGl2aXR5P3Iuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9cz1yLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0K2kuc2Nyb2xsU3BlZWQ6dC5wYWdlWC1yLm92ZXJmbG93T2Zmc2V0LmxlZnQ8aS5zY3JvbGxTZW5zaXRpdml0eSYmKHIuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9cz1yLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0LWkuc2Nyb2xsU3BlZWQpfWVsc2V7aWYoIWkuYXhpc3x8aS5heGlzIT0ieCIpdC5wYWdlWS1lKGRvY3VtZW50KS5zY3JvbGxUb3AoKTxpLnNjcm9sbFNlbnNpdGl2aXR5P3M9ZShkb2N1bWVudCkuc2Nyb2xsVG9wKGUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpLWkuc2Nyb2xsU3BlZWQpOmUod2luZG93KS5oZWlnaHQoKS0odC5wYWdlWS1lKGRvY3VtZW50KS5zY3JvbGxUb3AoKSk8aS5zY3JvbGxTZW5zaXRpdml0eSYmKHM9ZShkb2N1bWVudCkuc2Nyb2xsVG9wKGUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpK2kuc2Nyb2xsU3BlZWQpKTtpZighaS5heGlzfHxpLmF4aXMhPSJ5Iil0LnBhZ2VYLWUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKTxpLnNjcm9sbFNlbnNpdGl2aXR5P3M9ZShkb2N1bWVudCkuc2Nyb2xsTGVmdChlKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCktaS5zY3JvbGxTcGVlZCk6ZSh3aW5kb3cpLndpZHRoKCktKHQucGFnZVgtZShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKTxpLnNjcm9sbFNlbnNpdGl2aXR5JiYocz1lKGRvY3VtZW50KS5zY3JvbGxMZWZ0KGUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKStpLnNjcm9sbFNwZWVkKSl9cyE9PSExJiZlLnVpLmRkbWFuYWdlciYmIWkuZHJvcEJlaGF2aW91ciYmZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMocix0KX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInNuYXAiLHtzdGFydDpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgiZHJhZ2dhYmxlIiksaT1yLm9wdGlvbnM7ci5zbmFwRWxlbWVudHM9W10sZShpLnNuYXAuY29uc3RydWN0b3IhPVN0cmluZz9pLnNuYXAuaXRlbXN8fCI6ZGF0YShkcmFnZ2FibGUpIjppLnNuYXApLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLG49dC5vZmZzZXQoKTt0aGlzIT1yLmVsZW1lbnRbMF0mJnIuc25hcEVsZW1lbnRzLnB1c2goe2l0ZW06dGhpcyx3aWR0aDp0Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dC5vdXRlckhlaWdodCgpLHRvcDpuLnRvcCxsZWZ0Om4ubGVmdH0pfSl9LGRyYWc6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLGk9ci5vcHRpb25zLHM9aS5zbmFwVG9sZXJhbmNlLG89bi5vZmZzZXQubGVmdCx1PW8rci5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxhPW4ub2Zmc2V0LnRvcCxmPWErci5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQ7Zm9yKHZhciBsPXIuc25hcEVsZW1lbnRzLmxlbmd0aC0xO2w+PTA7bC0tKXt2YXIgYz1yLnNuYXBFbGVtZW50c1tsXS5sZWZ0LGg9YytyLnNuYXBFbGVtZW50c1tsXS53aWR0aCxwPXIuc25hcEVsZW1lbnRzW2xdLnRvcCxkPXArci5zbmFwRWxlbWVudHNbbF0uaGVpZ2h0O2lmKCEoYy1zPG8mJm88aCtzJiZwLXM8YSYmYTxkK3N8fGMtczxvJiZvPGgrcyYmcC1zPGYmJmY8ZCtzfHxjLXM8dSYmdTxoK3MmJnAtczxhJiZhPGQrc3x8Yy1zPHUmJnU8aCtzJiZwLXM8ZiYmZjxkK3MpKXtyLnNuYXBFbGVtZW50c1tsXS5zbmFwcGluZyYmci5vcHRpb25zLnNuYXAucmVsZWFzZSYmci5vcHRpb25zLnNuYXAucmVsZWFzZS5jYWxsKHIuZWxlbWVudCx0LGUuZXh0ZW5kKHIuX3VpSGFzaCgpLHtzbmFwSXRlbTpyLnNuYXBFbGVtZW50c1tsXS5pdGVtfSkpLHIuc25hcEVsZW1lbnRzW2xdLnNuYXBwaW5nPSExO2NvbnRpbnVlfWlmKGkuc25hcE1vZGUhPSJpbm5lciIpe3ZhciB2PU1hdGguYWJzKHAtZik8PXMsbT1NYXRoLmFicyhkLWEpPD1zLGc9TWF0aC5hYnMoYy11KTw9cyx5PU1hdGguYWJzKGgtbyk8PXM7diYmKG4ucG9zaXRpb24udG9wPXIuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDpwLXIuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGxlZnQ6MH0pLnRvcC1yLm1hcmdpbnMudG9wKSxtJiYobi5wb3NpdGlvbi50b3A9ci5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOmQsbGVmdDowfSkudG9wLXIubWFyZ2lucy50b3ApLGcmJihuLnBvc2l0aW9uLmxlZnQ9ci5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOjAsbGVmdDpjLXIuaGVscGVyUHJvcG9ydGlvbnMud2lkdGh9KS5sZWZ0LXIubWFyZ2lucy5sZWZ0KSx5JiYobi5wb3NpdGlvbi5sZWZ0PXIuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6aH0pLmxlZnQtci5tYXJnaW5zLmxlZnQpfXZhciBiPXZ8fG18fGd8fHk7aWYoaS5zbmFwTW9kZSE9Im91dGVyIil7dmFyIHY9TWF0aC5hYnMocC1hKTw9cyxtPU1hdGguYWJzKGQtZik8PXMsZz1NYXRoLmFicyhjLW8pPD1zLHk9TWF0aC5hYnMoaC11KTw9czt2JiYobi5wb3NpdGlvbi50b3A9ci5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOnAsbGVmdDowfSkudG9wLXIubWFyZ2lucy50b3ApLG0mJihuLnBvc2l0aW9uLnRvcD1yLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6ZC1yLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxsZWZ0OjB9KS50b3Atci5tYXJnaW5zLnRvcCksZyYmKG4ucG9zaXRpb24ubGVmdD1yLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6MCxsZWZ0OmN9KS5sZWZ0LXIubWFyZ2lucy5sZWZ0KSx5JiYobi5wb3NpdGlvbi5sZWZ0PXIuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6aC1yLmhlbHBlclByb3BvcnRpb25zLndpZHRofSkubGVmdC1yLm1hcmdpbnMubGVmdCl9IXIuc25hcEVsZW1lbnRzW2xdLnNuYXBwaW5nJiYodnx8bXx8Z3x8eXx8YikmJnIub3B0aW9ucy5zbmFwLnNuYXAmJnIub3B0aW9ucy5zbmFwLnNuYXAuY2FsbChyLmVsZW1lbnQsdCxlLmV4dGVuZChyLl91aUhhc2goKSx7c25hcEl0ZW06ci5zbmFwRWxlbWVudHNbbF0uaXRlbX0pKSxyLnNuYXBFbGVtZW50c1tsXS5zbmFwcGluZz12fHxtfHxnfHx5fHxifX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInN0YWNrIix7c3RhcnQ6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnMsaT1lLm1ha2VBcnJheShlKHIuc3RhY2spKS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuKHBhcnNlSW50KGUodCkuY3NzKCJ6SW5kZXgiKSwxMCl8fDApLShwYXJzZUludChlKG4pLmNzcygiekluZGV4IiksMTApfHwwKX0pO2lmKCFpLmxlbmd0aClyZXR1cm47dmFyIHM9cGFyc2VJbnQoaVswXS5zdHlsZS56SW5kZXgpfHwwO2UoaSkuZWFjaChmdW5jdGlvbihlKXt0aGlzLnN0eWxlLnpJbmRleD1zK2V9KSx0aGlzWzBdLnN0eWxlLnpJbmRleD1zK2kubGVuZ3RofX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwiekluZGV4Iix7c3RhcnQ6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKG4uaGVscGVyKSxpPWUodGhpcykuZGF0YSgiZHJhZ2dhYmxlIikub3B0aW9ucztyLmNzcygiekluZGV4IikmJihpLl96SW5kZXg9ci5jc3MoInpJbmRleCIpKSxyLmNzcygiekluZGV4IixpLnpJbmRleCl9LHN0b3A6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ci5fekluZGV4JiZlKG4uaGVscGVyKS5jc3MoInpJbmRleCIsci5fekluZGV4KX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS53aWRnZXQoInVpLmRyb3BwYWJsZSIse3ZlcnNpb246IjEuOS4wIix3aWRnZXRFdmVudFByZWZpeDoiZHJvcCIsb3B0aW9uczp7YWNjZXB0OiIqIixhY3RpdmVDbGFzczohMSxhZGRDbGFzc2VzOiEwLGdyZWVkeTohMSxob3ZlckNsYXNzOiExLHNjb3BlOiJkZWZhdWx0Iix0b2xlcmFuY2U6ImludGVyc2VjdCJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsbj10LmFjY2VwdDt0aGlzLmlzb3Zlcj0wLHRoaXMuaXNvdXQ9MSx0aGlzLmFjY2VwdD1lLmlzRnVuY3Rpb24obik/bjpmdW5jdGlvbihlKXtyZXR1cm4gZS5pcyhuKX0sdGhpcy5wcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5lbGVtZW50WzBdLm9mZnNldFdpZHRoLGhlaWdodDp0aGlzLmVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0fSxlLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3Quc2NvcGVdPWUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5zY29wZV18fFtdLGUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5zY29wZV0ucHVzaCh0aGlzKSx0LmFkZENsYXNzZXMmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJvcHBhYmxlIil9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIHQ9ZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0aGlzLm9wdGlvbnMuc2NvcGVdO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRbbl09PXRoaXMmJnQuc3BsaWNlKG4sMSk7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1kcm9wcGFibGUgdWktZHJvcHBhYmxlLWRpc2FibGVkIil9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxuKXt0PT0iYWNjZXB0IiYmKHRoaXMuYWNjZXB0PWUuaXNGdW5jdGlvbihuKT9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLmlzKG4pfSksZS5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfYWN0aXZhdGU6ZnVuY3Rpb24odCl7dmFyIG49ZS51aS5kZG1hbmFnZXIuY3VycmVudDt0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MmJnRoaXMuZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpLG4mJnRoaXMuX3RyaWdnZXIoImFjdGl2YXRlIix0LHRoaXMudWkobikpfSxfZGVhY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgbj1lLnVpLmRkbWFuYWdlci5jdXJyZW50O3RoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyksbiYmdGhpcy5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsdCx0aGlzLnVpKG4pKX0sX292ZXI6ZnVuY3Rpb24odCl7dmFyIG49ZS51aS5kZG1hbmFnZXIuY3VycmVudDtpZighbnx8KG4uY3VycmVudEl0ZW18fG4uZWxlbWVudClbMF09PXRoaXMuZWxlbWVudFswXSlyZXR1cm47dGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sbi5jdXJyZW50SXRlbXx8bi5lbGVtZW50KSYmKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpLHRoaXMuX3RyaWdnZXIoIm92ZXIiLHQsdGhpcy51aShuKSkpfSxfb3V0OmZ1bmN0aW9uKHQpe3ZhciBuPWUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7aWYoIW58fChuLmN1cnJlbnRJdGVtfHxuLmVsZW1lbnQpWzBdPT10aGlzLmVsZW1lbnRbMF0pcmV0dXJuO3RoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLG4uY3VycmVudEl0ZW18fG4uZWxlbWVudCkmJih0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzKSx0aGlzLl90cmlnZ2VyKCJvdXQiLHQsdGhpcy51aShuKSkpfSxfZHJvcDpmdW5jdGlvbih0LG4pe3ZhciByPW58fGUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7aWYoIXJ8fChyLmN1cnJlbnRJdGVtfHxyLmVsZW1lbnQpWzBdPT10aGlzLmVsZW1lbnRbMF0pcmV0dXJuITE7dmFyIGk9ITE7cmV0dXJuIHRoaXMuZWxlbWVudC5maW5kKCI6ZGF0YShkcm9wcGFibGUpIikubm90KCIudWktZHJhZ2dhYmxlLWRyYWdnaW5nIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUuZGF0YSh0aGlzLCJkcm9wcGFibGUiKTtpZih0Lm9wdGlvbnMuZ3JlZWR5JiYhdC5vcHRpb25zLmRpc2FibGVkJiZ0Lm9wdGlvbnMuc2NvcGU9PXIub3B0aW9ucy5zY29wZSYmdC5hY2NlcHQuY2FsbCh0LmVsZW1lbnRbMF0sci5jdXJyZW50SXRlbXx8ci5lbGVtZW50KSYmZS51aS5pbnRlcnNlY3QocixlLmV4dGVuZCh0LHtvZmZzZXQ6dC5lbGVtZW50Lm9mZnNldCgpfSksdC5vcHRpb25zLnRvbGVyYW5jZSkpcmV0dXJuIGk9ITAsITF9KSxpPyExOnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLHIuY3VycmVudEl0ZW18fHIuZWxlbWVudCk/KHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyksdGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyksdGhpcy5fdHJpZ2dlcigiZHJvcCIsdCx0aGlzLnVpKHIpKSx0aGlzLmVsZW1lbnQpOiExfSx1aTpmdW5jdGlvbihlKXtyZXR1cm57ZHJhZ2dhYmxlOmUuY3VycmVudEl0ZW18fGUuZWxlbWVudCxoZWxwZXI6ZS5oZWxwZXIscG9zaXRpb246ZS5wb3NpdGlvbixvZmZzZXQ6ZS5wb3NpdGlvbkFic319fSksZS51aS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCxuLHIpe2lmKCFuLm9mZnNldClyZXR1cm4hMTt2YXIgaT0odC5wb3NpdGlvbkFic3x8dC5wb3NpdGlvbi5hYnNvbHV0ZSkubGVmdCxzPWkrdC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxvPSh0LnBvc2l0aW9uQWJzfHx0LnBvc2l0aW9uLmFic29sdXRlKS50b3AsdT1vK3QuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGE9bi5vZmZzZXQubGVmdCxmPWErbi5wcm9wb3J0aW9ucy53aWR0aCxsPW4ub2Zmc2V0LnRvcCxjPWwrbi5wcm9wb3J0aW9ucy5oZWlnaHQ7c3dpdGNoKHIpe2Nhc2UiZml0IjpyZXR1cm4gYTw9aSYmczw9ZiYmbDw9byYmdTw9YztjYXNlImludGVyc2VjdCI6cmV0dXJuIGE8aSt0LmhlbHBlclByb3BvcnRpb25zLndpZHRoLzImJnMtdC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yPGYmJmw8byt0LmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yJiZ1LXQuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI8YztjYXNlInBvaW50ZXIiOnZhciBoPSh0LnBvc2l0aW9uQWJzfHx0LnBvc2l0aW9uLmFic29sdXRlKS5sZWZ0Kyh0LmNsaWNrT2Zmc2V0fHx0Lm9mZnNldC5jbGljaykubGVmdCxwPSh0LnBvc2l0aW9uQWJzfHx0LnBvc2l0aW9uLmFic29sdXRlKS50b3ArKHQuY2xpY2tPZmZzZXR8fHQub2Zmc2V0LmNsaWNrKS50b3AsZD1lLnVpLmlzT3ZlcihwLGgsbCxhLG4ucHJvcG9ydGlvbnMuaGVpZ2h0LG4ucHJvcG9ydGlvbnMud2lkdGgpO3JldHVybiBkO2Nhc2UidG91Y2giOnJldHVybihvPj1sJiZvPD1jfHx1Pj1sJiZ1PD1jfHxvPGwmJnU+YykmJihpPj1hJiZpPD1mfHxzPj1hJiZzPD1mfHxpPGEmJnM+Zik7ZGVmYXVsdDpyZXR1cm4hMX19LGUudWkuZGRtYW5hZ2VyPXtjdXJyZW50Om51bGwsZHJvcHBhYmxlczp7ImRlZmF1bHQiOltdfSxwcmVwYXJlT2Zmc2V0czpmdW5jdGlvbih0LG4pe3ZhciByPWUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5vcHRpb25zLnNjb3BlXXx8W10saT1uP24udHlwZTpudWxsLHM9KHQuY3VycmVudEl0ZW18fHQuZWxlbWVudCkuZmluZCgiOmRhdGEoZHJvcHBhYmxlKSIpLmFuZFNlbGYoKTtlOmZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXtpZihyW29dLm9wdGlvbnMuZGlzYWJsZWR8fHQmJiFyW29dLmFjY2VwdC5jYWxsKHJbb10uZWxlbWVudFswXSx0LmN1cnJlbnRJdGVtfHx0LmVsZW1lbnQpKWNvbnRpbnVlO2Zvcih2YXIgdT0wO3U8cy5sZW5ndGg7dSsrKWlmKHNbdV09PXJbb10uZWxlbWVudFswXSl7cltvXS5wcm9wb3J0aW9ucy5oZWlnaHQ9MDtjb250aW51ZSBlfXJbb10udmlzaWJsZT1yW29dLmVsZW1lbnQuY3NzKCJkaXNwbGF5IikhPSJub25lIjtpZighcltvXS52aXNpYmxlKWNvbnRpbnVlO2k9PSJtb3VzZWRvd24iJiZyW29dLl9hY3RpdmF0ZS5jYWxsKHJbb10sbikscltvXS5vZmZzZXQ9cltvXS5lbGVtZW50Lm9mZnNldCgpLHJbb10ucHJvcG9ydGlvbnM9e3dpZHRoOnJbb10uZWxlbWVudFswXS5vZmZzZXRXaWR0aCxoZWlnaHQ6cltvXS5lbGVtZW50WzBdLm9mZnNldEhlaWdodH19fSxkcm9wOmZ1bmN0aW9uKHQsbil7dmFyIHI9ITE7cmV0dXJuIGUuZWFjaChlLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3Qub3B0aW9ucy5zY29wZV18fFtdLGZ1bmN0aW9uKCl7aWYoIXRoaXMub3B0aW9ucylyZXR1cm47IXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy52aXNpYmxlJiZlLnVpLmludGVyc2VjdCh0LHRoaXMsdGhpcy5vcHRpb25zLnRvbGVyYW5jZSkmJihyPXRoaXMuX2Ryb3AuY2FsbCh0aGlzLG4pfHxyKSwhdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLnZpc2libGUmJnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLHQuY3VycmVudEl0ZW18fHQuZWxlbWVudCkmJih0aGlzLmlzb3V0PTEsdGhpcy5pc292ZXI9MCx0aGlzLl9kZWFjdGl2YXRlLmNhbGwodGhpcyxuKSl9KSxyfSxkcmFnU3RhcnQ6ZnVuY3Rpb24odCxuKXt0LmVsZW1lbnQucGFyZW50c1VudGlsKCJib2R5IikuYmluZCgic2Nyb2xsLmRyb3BwYWJsZSIsZnVuY3Rpb24oKXt0Lm9wdGlvbnMucmVmcmVzaFBvc2l0aW9uc3x8ZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModCxuKX0pfSxkcmFnOmZ1bmN0aW9uKHQsbil7dC5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnMmJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHQsbiksZS5lYWNoKGUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5vcHRpb25zLnNjb3BlXXx8W10sZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fHRoaXMuZ3JlZWR5Q2hpbGR8fCF0aGlzLnZpc2libGUpcmV0dXJuO3ZhciByPWUudWkuaW50ZXJzZWN0KHQsdGhpcyx0aGlzLm9wdGlvbnMudG9sZXJhbmNlKSxpPSFyJiZ0aGlzLmlzb3Zlcj09MT8iaXNvdXQiOnImJnRoaXMuaXNvdmVyPT0wPyJpc292ZXIiOm51bGw7aWYoIWkpcmV0dXJuO3ZhciBzO2lmKHRoaXMub3B0aW9ucy5ncmVlZHkpe3ZhciBvPXRoaXMub3B0aW9ucy5zY29wZSx1PXRoaXMuZWxlbWVudC5wYXJlbnRzKCI6ZGF0YShkcm9wcGFibGUpIikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGF0YSh0aGlzLCJkcm9wcGFibGUiKS5vcHRpb25zLnNjb3BlPT09b30pO3UubGVuZ3RoJiYocz1lLmRhdGEodVswXSwiZHJvcHBhYmxlIikscy5ncmVlZHlDaGlsZD1pPT0iaXNvdmVyIj8xOjApfXMmJmk9PSJpc292ZXIiJiYocy5pc292ZXI9MCxzLmlzb3V0PTEscy5fb3V0LmNhbGwocyxuKSksdGhpc1tpXT0xLHRoaXNbaT09Imlzb3V0Ij8iaXNvdmVyIjoiaXNvdXQiXT0wLHRoaXNbaT09Imlzb3ZlciI/Il9vdmVyIjoiX291dCJdLmNhbGwodGhpcyxuKSxzJiZpPT0iaXNvdXQiJiYocy5pc291dD0wLHMuaXNvdmVyPTEscy5fb3Zlci5jYWxsKHMsbikpfSl9LGRyYWdTdG9wOmZ1bmN0aW9uKHQsbil7dC5lbGVtZW50LnBhcmVudHNVbnRpbCgiYm9keSIpLnVuYmluZCgic2Nyb2xsLmRyb3BwYWJsZSIpLHQub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zfHxlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0LG4pfX19KShqUXVlcnkpO2pRdWVyeS5lZmZlY3RzfHxmdW5jdGlvbihlLHQpe3ZhciBuPWUudWlCYWNrQ29tcGF0IT09ITEscj0idWktZWZmZWN0cy0iO2UuZWZmZWN0cz17ZWZmZWN0Ont9fSxmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHAoZSx0LG4pe3ZhciByPWFbdC50eXBlXXx8e307cmV0dXJuIGU9PW51bGw/bnx8IXQuZGVmP251bGw6dC5kZWY6KGU9ci5mbG9vcj9+fmU6cGFyc2VGbG9hdChlKSxpc05hTihlKT90LmRlZjpyLm1vZD8oZStyLm1vZCklci5tb2Q6MD5lPzA6ci5tYXg8ZT9yLm1heDplKX1mdW5jdGlvbiBkKGUpe3ZhciBuPW8oKSxyPW4uX3JnYmE9W107cmV0dXJuIGU9ZS50b0xvd2VyQ2FzZSgpLGgocyxmdW5jdGlvbih0LGkpe3ZhciBzLG89aS5yZS5leGVjKGUpLGE9byYmaS5wYXJzZShvKSxmPWkuc3BhY2V8fCJyZ2JhIjtpZihhKXJldHVybiBzPW5bZl0oYSksblt1W2ZdLmNhY2hlXT1zW3VbZl0uY2FjaGVdLHI9bi5fcmdiYT1zLl9yZ2JhLCExfSksci5sZW5ndGg/KHIuam9pbigpPT09IjAsMCwwLDAiJiZ0LmV4dGVuZChyLGMudHJhbnNwYXJlbnQpLG4pOmNbZV19ZnVuY3Rpb24gdihlLHQsbil7cmV0dXJuIG49KG4rMSklMSxuKjY8MT9lKyh0LWUpKm4qNjpuKjI8MT90Om4qMzwyP2UrKHQtZSkqKDIvMy1uKSo2OmV9dmFyIHI9ImJhY2tncm91bmRDb2xvciBib3JkZXJCb3R0b21Db2xvciBib3JkZXJMZWZ0Q29sb3IgYm9yZGVyUmlnaHRDb2xvciBib3JkZXJUb3BDb2xvciBjb2xvciBjb2x1bW5SdWxlQ29sb3Igb3V0bGluZUNvbG9yIHRleHREZWNvcmF0aW9uQ29sb3IgdGV4dEVtcGhhc2lzQ29sb3IiLnNwbGl0KCIgIiksaT0vXihbXC0rXSk9XHMqKFxkK1wuP1xkKikvLHM9W3tyZTovcmdiYT9cKFxzKihcZHsxLDN9KVxzKixccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pXHMqKD86LFxzKihcZCsoPzpcLlxkKyk/KVxzKik/XCkvLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltlWzFdLGVbMl0sZVszXSxlWzRdXX19LHtyZTovcmdiYT9cKFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqLFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqLFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqKD86LFxzKihcZCsoPzpcLlxkKyk/KVxzKik/XCkvLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltlWzFdKjIuNTUsZVsyXSoyLjU1LGVbM10qMi41NSxlWzRdXX19LHtyZTovIyhbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KS8scGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuW3BhcnNlSW50KGVbMV0sMTYpLHBhcnNlSW50KGVbMl0sMTYpLHBhcnNlSW50KGVbM10sMTYpXX19LHtyZTovIyhbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKS8scGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuW3BhcnNlSW50KGVbMV0rZVsxXSwxNikscGFyc2VJbnQoZVsyXStlWzJdLDE2KSxwYXJzZUludChlWzNdK2VbM10sMTYpXX19LHtyZTovaHNsYT9cKFxzKihcZCsoPzpcLlxkKyk/KVxzKixccyooXGQrKD86XC5cZCspPylcJVxzKixccyooXGQrKD86XC5cZCspPylcJVxzKig/OixccyooXGQrKD86XC5cZCspPylccyopP1wpLyxzcGFjZToiaHNsYSIscGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XV19fV0sbz10LkNvbG9yPWZ1bmN0aW9uKGUsbixyLGkpe3JldHVybiBuZXcgdC5Db2xvci5mbi5wYXJzZShlLG4scixpKX0sdT17cmdiYTp7cHJvcHM6e3JlZDp7aWR4OjAsdHlwZToiYnl0ZSJ9LGdyZWVuOntpZHg6MSx0eXBlOiJieXRlIn0sYmx1ZTp7aWR4OjIsdHlwZToiYnl0ZSJ9fX0saHNsYTp7cHJvcHM6e2h1ZTp7aWR4OjAsdHlwZToiZGVncmVlcyJ9LHNhdHVyYXRpb246e2lkeDoxLHR5cGU6InBlcmNlbnQifSxsaWdodG5lc3M6e2lkeDoyLHR5cGU6InBlcmNlbnQifX19fSxhPXsiYnl0ZSI6e2Zsb29yOiEwLG1heDoyNTV9LHBlcmNlbnQ6e21heDoxfSxkZWdyZWVzOnttb2Q6MzYwLGZsb29yOiEwfX0sZj1vLnN1cHBvcnQ9e30sbD10KCI8cD4iKVswXSxjLGg9dC5lYWNoO2wuc3R5bGUuY3NzVGV4dD0iYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEsMSwxLC41KSIsZi5yZ2JhPWwuc3R5bGUuYmFja2dyb3VuZENvbG9yLmluZGV4T2YoInJnYmEiKT4tMSxoKHUsZnVuY3Rpb24oZSx0KXt0LmNhY2hlPSJfIitlLHQucHJvcHMuYWxwaGE9e2lkeDozLHR5cGU6InBlcmNlbnQiLGRlZjoxfX0pLG8uZm49dC5leHRlbmQoby5wcm90b3R5cGUse3BhcnNlOmZ1bmN0aW9uKHIsaSxzLGEpe2lmKHI9PT1uKXJldHVybiB0aGlzLl9yZ2JhPVtudWxsLG51bGwsbnVsbCxudWxsXSx0aGlzO2lmKHIuanF1ZXJ5fHxyLm5vZGVUeXBlKXI9dChyKS5jc3MoaSksaT1uO3ZhciBmPXRoaXMsbD10LnR5cGUociksdj10aGlzLl9yZ2JhPVtdLG07aSE9PW4mJihyPVtyLGkscyxhXSxsPSJhcnJheSIpO2lmKGw9PT0ic3RyaW5nIilyZXR1cm4gdGhpcy5wYXJzZShkKHIpfHxjLl9kZWZhdWx0KTtpZihsPT09ImFycmF5IilyZXR1cm4gaCh1LnJnYmEucHJvcHMsZnVuY3Rpb24oZSx0KXt2W3QuaWR4XT1wKHJbdC5pZHhdLHQpfSksdGhpcztpZihsPT09Im9iamVjdCIpcmV0dXJuIHIgaW5zdGFuY2VvZiBvP2godSxmdW5jdGlvbihlLHQpe3JbdC5jYWNoZV0mJihmW3QuY2FjaGVdPXJbdC5jYWNoZV0uc2xpY2UoKSl9KTpoKHUsZnVuY3Rpb24odCxuKXt2YXIgaT1uLmNhY2hlO2gobi5wcm9wcyxmdW5jdGlvbihlLHQpe2lmKCFmW2ldJiZuLnRvKXtpZihlPT09ImFscGhhInx8cltlXT09bnVsbClyZXR1cm47ZltpXT1uLnRvKGYuX3JnYmEpfWZbaV1bdC5pZHhdPXAocltlXSx0LCEwKX0pLGZbaV0mJmUuaW5BcnJheShudWxsLGZbaV0uc2xpY2UoMCwzKSk8MCYmKGZbaV1bM109MSxuLmZyb20mJihmLl9yZ2JhPW4uZnJvbShmW2ldKSkpfSksdGhpc30saXM6ZnVuY3Rpb24oZSl7dmFyIHQ9byhlKSxuPSEwLHI9dGhpcztyZXR1cm4gaCh1LGZ1bmN0aW9uKGUsaSl7dmFyIHMsbz10W2kuY2FjaGVdO3JldHVybiBvJiYocz1yW2kuY2FjaGVdfHxpLnRvJiZpLnRvKHIuX3JnYmEpfHxbXSxoKGkucHJvcHMsZnVuY3Rpb24oZSx0KXtpZihvW3QuaWR4XSE9bnVsbClyZXR1cm4gbj1vW3QuaWR4XT09PXNbdC5pZHhdLG59KSksbn0pLG59LF9zcGFjZTpmdW5jdGlvbigpe3ZhciBlPVtdLHQ9dGhpcztyZXR1cm4gaCh1LGZ1bmN0aW9uKG4scil7dFtyLmNhY2hlXSYmZS5wdXNoKG4pfSksZS5wb3AoKX0sdHJhbnNpdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuPW8oZSkscj1uLl9zcGFjZSgpLGk9dVtyXSxzPXRoaXMuYWxwaGEoKT09PTA/bygidHJhbnNwYXJlbnQiKTp0aGlzLGY9c1tpLmNhY2hlXXx8aS50byhzLl9yZ2JhKSxsPWYuc2xpY2UoKTtyZXR1cm4gbj1uW2kuY2FjaGVdLGgoaS5wcm9wcyxmdW5jdGlvbihlLHIpe3ZhciBpPXIuaWR4LHM9ZltpXSxvPW5baV0sdT1hW3IudHlwZV18fHt9O2lmKG89PT1udWxsKXJldHVybjtzPT09bnVsbD9sW2ldPW86KHUubW9kJiYoby1zPnUubW9kLzI/cys9dS5tb2Q6cy1vPnUubW9kLzImJihzLT11Lm1vZCkpLGxbaV09cCgoby1zKSp0K3MscikpfSksdGhpc1tyXShsKX0sYmxlbmQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5fcmdiYVszXT09PTEpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5fcmdiYS5zbGljZSgpLHI9bi5wb3AoKSxpPW8oZSkuX3JnYmE7cmV0dXJuIG8odC5tYXAobixmdW5jdGlvbihlLHQpe3JldHVybigxLXIpKmlbdF0rciplfSkpfSx0b1JnYmFTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT0icmdiYSgiLG49dC5tYXAodGhpcy5fcmdiYSxmdW5jdGlvbihlLHQpe3JldHVybiBlPT1udWxsP3Q+Mj8xOjA6ZX0pO3JldHVybiBuWzNdPT09MSYmKG4ucG9wKCksZT0icmdiKCIpLGUrbi5qb2luKCkrIikifSx0b0hzbGFTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT0iaHNsYSgiLG49dC5tYXAodGhpcy5oc2xhKCksZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09bnVsbCYmKGU9dD4yPzE6MCksdCYmdDwzJiYoZT1NYXRoLnJvdW5kKGUqMTAwKSsiJSIpLGV9KTtyZXR1cm4gblszXT09PTEmJihuLnBvcCgpLGU9ImhzbCgiKSxlK24uam9pbigpKyIpIn0sdG9IZXhTdHJpbmc6ZnVuY3Rpb24oZSl7dmFyIG49dGhpcy5fcmdiYS5zbGljZSgpLHI9bi5wb3AoKTtyZXR1cm4gZSYmbi5wdXNoKH5+KHIqMjU1KSksIiMiK3QubWFwKG4sZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT0oZXx8MCkudG9TdHJpbmcoMTYpLGUubGVuZ3RoPT09MT8iMCIrZTplfSkuam9pbigiIil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JnYmFbM109PT0wPyJ0cmFuc3BhcmVudCI6dGhpcy50b1JnYmFTdHJpbmcoKX19KSxvLmZuLnBhcnNlLnByb3RvdHlwZT1vLmZuLHUuaHNsYS50bz1mdW5jdGlvbihlKXtpZihlWzBdPT1udWxsfHxlWzFdPT1udWxsfHxlWzJdPT1udWxsKXJldHVybltudWxsLG51bGwsbnVsbCxlWzNdXTt2YXIgdD1lWzBdLzI1NSxuPWVbMV0vMjU1LHI9ZVsyXS8yNTUsaT1lWzNdLHM9TWF0aC5tYXgodCxuLHIpLG89TWF0aC5taW4odCxuLHIpLHU9cy1vLGE9cytvLGY9YSouNSxsLGM7cmV0dXJuIG89PT1zP2w9MDp0PT09cz9sPTYwKihuLXIpL3UrMzYwOm49PT1zP2w9NjAqKHItdCkvdSsxMjA6bD02MCoodC1uKS91KzI0MCxmPT09MHx8Zj09PTE/Yz1mOmY8PS41P2M9dS9hOmM9dS8oMi1hKSxbTWF0aC5yb3VuZChsKSUzNjAsYyxmLGk9PW51bGw/MTppXX0sdS5oc2xhLmZyb209ZnVuY3Rpb24oZSl7aWYoZVswXT09bnVsbHx8ZVsxXT09bnVsbHx8ZVsyXT09bnVsbClyZXR1cm5bbnVsbCxudWxsLG51bGwsZVszXV07dmFyIHQ9ZVswXS8zNjAsbj1lWzFdLHI9ZVsyXSxpPWVbM10scz1yPD0uNT9yKigxK24pOnIrbi1yKm4sbz0yKnItcyx1LGEsZjtyZXR1cm5bTWF0aC5yb3VuZCh2KG8scyx0KzEvMykqMjU1KSxNYXRoLnJvdW5kKHYobyxzLHQpKjI1NSksTWF0aC5yb3VuZCh2KG8scyx0LTEvMykqMjU1KSxpXX0saCh1LGZ1bmN0aW9uKGUscil7dmFyIHM9ci5wcm9wcyx1PXIuY2FjaGUsYT1yLnRvLGY9ci5mcm9tO28uZm5bZV09ZnVuY3Rpb24oZSl7YSYmIXRoaXNbdV0mJih0aGlzW3VdPWEodGhpcy5fcmdiYSkpO2lmKGU9PT1uKXJldHVybiB0aGlzW3VdLnNsaWNlKCk7dmFyIHIsaT10LnR5cGUoZSksbD1pPT09ImFycmF5Inx8aT09PSJvYmplY3QiP2U6YXJndW1lbnRzLGM9dGhpc1t1XS5zbGljZSgpO3JldHVybiBoKHMsZnVuY3Rpb24oZSx0KXt2YXIgbj1sW2k9PT0ib2JqZWN0Ij9lOnQuaWR4XTtuPT1udWxsJiYobj1jW3QuaWR4XSksY1t0LmlkeF09cChuLHQpfSksZj8ocj1vKGYoYykpLHJbdV09YyxyKTpvKGMpfSxoKHMsZnVuY3Rpb24obixyKXtpZihvLmZuW25dKXJldHVybjtvLmZuW25dPWZ1bmN0aW9uKHMpe3ZhciBvPXQudHlwZShzKSx1PW49PT0iYWxwaGEiP3RoaXMuX2hzbGE/ImhzbGEiOiJyZ2JhIjplLGE9dGhpc1t1XSgpLGY9YVtyLmlkeF0sbDtyZXR1cm4gbz09PSJ1bmRlZmluZWQiP2Y6KG89PT0iZnVuY3Rpb24iJiYocz1zLmNhbGwodGhpcyxmKSxvPXQudHlwZShzKSkscz09bnVsbCYmci5lbXB0eT90aGlzOihvPT09InN0cmluZyImJihsPWkuZXhlYyhzKSxsJiYocz1mK3BhcnNlRmxvYXQobFsyXSkqKGxbMV09PT0iKyI/MTotMSkpKSxhW3IuaWR4XT1zLHRoaXNbdV0oYSkpKX19KX0pLGgocixmdW5jdGlvbihlLG4pe3QuY3NzSG9va3Nbbl09e3NldDpmdW5jdGlvbihlLHIpe3ZhciBpLHMsdT0iIjtpZih0LnR5cGUocikhPT0ic3RyaW5nInx8KGk9ZChyKSkpe3I9byhpfHxyKTtpZighZi5yZ2JhJiZyLl9yZ2JhWzNdIT09MSl7cz1uPT09ImJhY2tncm91bmRDb2xvciI/ZS5wYXJlbnROb2RlOmU7d2hpbGUoKHU9PT0iInx8dT09PSJ0cmFuc3BhcmVudCIpJiZzJiZzLnN0eWxlKXRyeXt1PXQuY3NzKHMsImJhY2tncm91bmRDb2xvciIpLHM9cy5wYXJlbnROb2RlfWNhdGNoKGEpe31yPXIuYmxlbmQodSYmdSE9PSJ0cmFuc3BhcmVudCI/dToiX2RlZmF1bHQiKX1yPXIudG9SZ2JhU3RyaW5nKCl9dHJ5e2Uuc3R5bGVbbl09cn1jYXRjaChyKXt9fX0sdC5meC5zdGVwW25dPWZ1bmN0aW9uKGUpe2UuY29sb3JJbml0fHwoZS5zdGFydD1vKGUuZWxlbSxuKSxlLmVuZD1vKGUuZW5kKSxlLmNvbG9ySW5pdD0hMCksdC5jc3NIb29rc1tuXS5zZXQoZS5lbGVtLGUuc3RhcnQudHJhbnNpdGlvbihlLmVuZCxlLnBvcykpfX0pLHQuY3NzSG9va3MuYm9yZGVyQ29sb3I9e2V4cGFuZDpmdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gaChbIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLGZ1bmN0aW9uKG4scil7dFsiYm9yZGVyIityKyJDb2xvciJdPWV9KSx0fX0sYz10LkNvbG9yLm5hbWVzPXthcXVhOiIjMDBmZmZmIixibGFjazoiIzAwMDAwMCIsYmx1ZToiIzAwMDBmZiIsZnVjaHNpYToiI2ZmMDBmZiIsZ3JheToiIzgwODA4MCIsZ3JlZW46IiMwMDgwMDAiLGxpbWU6IiMwMGZmMDAiLG1hcm9vbjoiIzgwMDAwMCIsbmF2eToiIzAwMDA4MCIsb2xpdmU6IiM4MDgwMDAiLHB1cnBsZToiIzgwMDA4MCIscmVkOiIjZmYwMDAwIixzaWx2ZXI6IiNjMGMwYzAiLHRlYWw6IiMwMDgwODAiLHdoaXRlOiIjZmZmZmZmIix5ZWxsb3c6IiNmZmZmMDAiLHRyYW5zcGFyZW50OltudWxsLG51bGwsbnVsbCwwXSxfZGVmYXVsdDoiI2ZmZmZmZiJ9fShqUXVlcnkpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSgpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldz90aGlzLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpOnRoaXMuY3VycmVudFN0eWxlLG49e30scixpLHM7aWYodCYmdC5sZW5ndGgmJnRbMF0mJnRbdFswXV0pe3M9dC5sZW5ndGg7d2hpbGUocy0tKXI9dFtzXSx0eXBlb2YgdFtyXT09InN0cmluZyImJihuW2UuY2FtZWxDYXNlKHIpXT10W3JdKX1lbHNlIGZvcihyIGluIHQpdHlwZW9mIHRbcl09PSJzdHJpbmciJiYobltyXT10W3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBzKHQsbil7dmFyIGk9e30scyxvO2ZvcihzIGluIG4pbz1uW3NdLHRbc10hPT1vJiYhcltzXSYmKGUuZnguc3RlcFtzXXx8IWlzTmFOKHBhcnNlRmxvYXQobykpKSYmKGlbc109byk7cmV0dXJuIGl9dmFyIG49WyJhZGQiLCJyZW1vdmUiLCJ0b2dnbGUiXSxyPXtib3JkZXI6MSxib3JkZXJCb3R0b206MSxib3JkZXJDb2xvcjoxLGJvcmRlckxlZnQ6MSxib3JkZXJSaWdodDoxLGJvcmRlclRvcDoxLGJvcmRlcldpZHRoOjEsbWFyZ2luOjEscGFkZGluZzoxfTtlLmVhY2goWyJib3JkZXJMZWZ0U3R5bGUiLCJib3JkZXJSaWdodFN0eWxlIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJUb3BTdHlsZSJdLGZ1bmN0aW9uKHQsbil7ZS5meC5zdGVwW25dPWZ1bmN0aW9uKGUpe2lmKGUuZW5kIT09Im5vbmUiJiYhZS5zZXRBdHRyfHxlLnBvcz09PTEmJiFlLnNldEF0dHIpalF1ZXJ5LnN0eWxlKGUuZWxlbSxuLGUuZW5kKSxlLnNldEF0dHI9ITB9fSksZS5lZmZlY3RzLmFuaW1hdGVDbGFzcz1mdW5jdGlvbih0LHIsbyx1KXt2YXIgYT1lLnNwZWVkKHIsbyx1KTtyZXR1cm4gdGhpcy5xdWV1ZShmdW5jdGlvbigpe3ZhciByPWUodGhpcyksbz1yLmF0dHIoImNsYXNzIil8fCIiLHUsZj1hLmNoaWxkcmVuP3IuZmluZCgiKiIpLmFuZFNlbGYoKTpyO2Y9Zi5tYXAoZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3JldHVybntlbDp0LHN0YXJ0OmkuY2FsbCh0aGlzKX19KSx1PWZ1bmN0aW9uKCl7ZS5lYWNoKG4sZnVuY3Rpb24oZSxuKXt0W25dJiZyW24rIkNsYXNzIl0odFtuXSl9KX0sdSgpLGY9Zi5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmQ9aS5jYWxsKHRoaXMuZWxbMF0pLHRoaXMuZGlmZj1zKHRoaXMuc3RhcnQsdGhpcy5lbmQpLHRoaXN9KSxyLmF0dHIoImNsYXNzIixvKSxmPWYubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWUuRGVmZXJyZWQoKSxyPWpRdWVyeS5leHRlbmQoe30sYSx7cXVldWU6ITEsY29tcGxldGU6ZnVuY3Rpb24oKXtuLnJlc29sdmUodCl9fSk7cmV0dXJuIHRoaXMuZWwuYW5pbWF0ZSh0aGlzLmRpZmYsciksbi5wcm9taXNlKCl9KSxlLndoZW4uYXBwbHkoZSxmLmdldCgpKS5kb25lKGZ1bmN0aW9uKCl7dSgpLGUuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsO2UuZWFjaCh0aGlzLmRpZmYsZnVuY3Rpb24oZSl7dC5jc3MoZSwiIil9KX0pLGEuY29tcGxldGUuY2FsbChyWzBdKX0pfSl9LGUuZm4uZXh0ZW5kKHtfYWRkQ2xhc3M6ZS5mbi5hZGRDbGFzcyxhZGRDbGFzczpmdW5jdGlvbih0LG4scixpKXtyZXR1cm4gbj9lLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7YWRkOnR9LG4scixpKTp0aGlzLl9hZGRDbGFzcyh0KX0sX3JlbW92ZUNsYXNzOmUuZm4ucmVtb3ZlQ2xhc3MscmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCxuLHIsaSl7cmV0dXJuIG4/ZS5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse3JlbW92ZTp0fSxuLHIsaSk6dGhpcy5fcmVtb3ZlQ2xhc3ModCl9LF90b2dnbGVDbGFzczplLmZuLnRvZ2dsZUNsYXNzLHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKG4scixpLHMsbyl7cmV0dXJuIHR5cGVvZiByPT0iYm9vbGVhbiJ8fHI9PT10P2k/ZS5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMscj97YWRkOm59OntyZW1vdmU6bn0saSxzLG8pOnRoaXMuX3RvZ2dsZUNsYXNzKG4scik6ZS5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse3RvZ2dsZTpufSxyLGkscyl9LHN3aXRjaENsYXNzOmZ1bmN0aW9uKHQsbixyLGkscyl7cmV0dXJuIGUuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHthZGQ6bixyZW1vdmU6dH0scixpLHMpfX0pfSgpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gaShuLHIsaSxzKXtlLmlzUGxhaW5PYmplY3QobikmJihyPW4sbj1uLmVmZmVjdCksbj17ZWZmZWN0Om59LHI9PT10JiYocj17fSksZS5pc0Z1bmN0aW9uKHIpJiYocz1yLGk9bnVsbCxyPXt9KTtpZih0eXBlb2Ygcj09Im51bWJlciJ8fGUuZnguc3BlZWRzW3JdKXM9aSxpPXIscj17fTtyZXR1cm4gZS5pc0Z1bmN0aW9uKGkpJiYocz1pLGk9bnVsbCksciYmZS5leHRlbmQobixyKSxpPWl8fHIuZHVyYXRpb24sbi5kdXJhdGlvbj1lLmZ4Lm9mZj8wOnR5cGVvZiBpPT0ibnVtYmVyIj9pOmkgaW4gZS5meC5zcGVlZHM/ZS5meC5zcGVlZHNbaV06ZS5meC5zcGVlZHMuX2RlZmF1bHQsbi5jb21wbGV0ZT1zfHxyLmNvbXBsZXRlLG59ZnVuY3Rpb24gcyh0KXtyZXR1cm4hdHx8dHlwZW9mIHQ9PSJudW1iZXIifHxlLmZ4LnNwZWVkc1t0XT8hMDp0eXBlb2YgdD09InN0cmluZyImJiFlLmVmZmVjdHMuZWZmZWN0W3RdP24mJmUuZWZmZWN0c1t0XT8hMTohMDohMX1lLmV4dGVuZChlLmVmZmVjdHMse3ZlcnNpb246IjEuOS4wIixzYXZlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXSE9PW51bGwmJmUuZGF0YShyK3Rbbl0sZVswXS5zdHlsZVt0W25dXSl9LHJlc3RvcmU6ZnVuY3Rpb24oZSxuKXt2YXIgaSxzO2ZvcihzPTA7czxuLmxlbmd0aDtzKyspbltzXSE9PW51bGwmJihpPWUuZGF0YShyK25bc10pLGk9PT10JiYoaT0iIiksZS5jc3MobltzXSxpKSl9LHNldE1vZGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD09PSJ0b2dnbGUiJiYodD1lLmlzKCI6aGlkZGVuIik/InNob3ciOiJoaWRlIiksdH0sZ2V0QmFzZWxpbmU6ZnVuY3Rpb24oZSx0KXt2YXIgbixyO3N3aXRjaChlWzBdKXtjYXNlInRvcCI6bj0wO2JyZWFrO2Nhc2UibWlkZGxlIjpuPS41O2JyZWFrO2Nhc2UiYm90dG9tIjpuPTE7YnJlYWs7ZGVmYXVsdDpuPWVbMF0vdC5oZWlnaHR9c3dpdGNoKGVbMV0pe2Nhc2UibGVmdCI6cj0wO2JyZWFrO2Nhc2UiY2VudGVyIjpyPS41O2JyZWFrO2Nhc2UicmlnaHQiOnI9MTticmVhaztkZWZhdWx0OnI9ZVsxXS90LndpZHRofXJldHVybnt4OnIseTpufX0sY3JlYXRlV3JhcHBlcjpmdW5jdGlvbih0KXtpZih0LnBhcmVudCgpLmlzKCIudWktZWZmZWN0cy13cmFwcGVyIikpcmV0dXJuIHQucGFyZW50KCk7dmFyIG49e3dpZHRoOnQub3V0ZXJXaWR0aCghMCksaGVpZ2h0OnQub3V0ZXJIZWlnaHQoITApLCJmbG9hdCI6dC5jc3MoImZsb2F0Iil9LHI9ZSgiPGRpdj48L2Rpdj4iKS5hZGRDbGFzcygidWktZWZmZWN0cy13cmFwcGVyIikuY3NzKHtmb250U2l6ZToiMTAwJSIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsbWFyZ2luOjAscGFkZGluZzowfSksaT17d2lkdGg6dC53aWR0aCgpLGhlaWdodDp0LmhlaWdodCgpfSxzPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7dHJ5e3MuaWR9Y2F0Y2gobyl7cz1kb2N1bWVudC5ib2R5fXJldHVybiB0LndyYXAociksKHRbMF09PT1zfHxlLmNvbnRhaW5zKHRbMF0scykpJiZlKHMpLmZvY3VzKCkscj10LnBhcmVudCgpLHQuY3NzKCJwb3NpdGlvbiIpPT09InN0YXRpYyI/KHIuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUifSksdC5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSJ9KSk6KGUuZXh0ZW5kKG4se3Bvc2l0aW9uOnQuY3NzKCJwb3NpdGlvbiIpLHpJbmRleDp0LmNzcygiei1pbmRleCIpfSksZS5lYWNoKFsidG9wIiwibGVmdCIsImJvdHRvbSIsInJpZ2h0Il0sZnVuY3Rpb24oZSxyKXtuW3JdPXQuY3NzKHIpLGlzTmFOKHBhcnNlSW50KG5bcl0sMTApKSYmKG5bcl09ImF1dG8iKX0pLHQuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUiLHRvcDowLGxlZnQ6MCxyaWdodDoiYXV0byIsYm90dG9tOiJhdXRvIn0pKSx0LmNzcyhpKSxyLmNzcyhuKS5zaG93KCl9LHJlbW92ZVdyYXBwZXI6ZnVuY3Rpb24odCl7dmFyIG49ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtyZXR1cm4gdC5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpJiYodC5wYXJlbnQoKS5yZXBsYWNlV2l0aCh0KSwodFswXT09PW58fGUuY29udGFpbnModFswXSxuKSkmJmUobikuZm9jdXMoKSksdH0sc2V0VHJhbnNpdGlvbjpmdW5jdGlvbih0LG4scixpKXtyZXR1cm4gaT1pfHx7fSxlLmVhY2gobixmdW5jdGlvbihlLG4pe3ZhciBzPXQuY3NzVW5pdChuKTtzWzBdPjAmJihpW25dPXNbMF0qcitzWzFdKX0pLGl9fSksZS5mbi5leHRlbmQoe2VmZmVjdDpmdW5jdGlvbih0LHIscyxvKXtmdW5jdGlvbiBoKHQpe2Z1bmN0aW9uIHMoKXtlLmlzRnVuY3Rpb24ocikmJnIuY2FsbChuWzBdKSxlLmlzRnVuY3Rpb24odCkmJnQoKX12YXIgbj1lKHRoaXMpLHI9dS5jb21wbGV0ZSxpPXUubW9kZTsobi5pcygiOmhpZGRlbiIpP2k9PT0iaGlkZSI6aT09PSJzaG93Iik/cygpOmwuY2FsbChuWzBdLHUscyl9dmFyIHU9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyksYT11Lm1vZGUsZj11LnF1ZXVlLGw9ZS5lZmZlY3RzLmVmZmVjdFt1LmVmZmVjdF0sYz0hbCYmbiYmZS5lZmZlY3RzW3UuZWZmZWN0XTtyZXR1cm4gZS5meC5vZmZ8fCFsJiYhYz9hP3RoaXNbYV0odS5kdXJhdGlvbix1LmNvbXBsZXRlKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt1LmNvbXBsZXRlJiZ1LmNvbXBsZXRlLmNhbGwodGhpcyl9KTpsP2Y9PT0hMT90aGlzLmVhY2goaCk6dGhpcy5xdWV1ZShmfHwiZngiLGgpOmMuY2FsbCh0aGlzLHtvcHRpb25zOnUsZHVyYXRpb246dS5kdXJhdGlvbixjYWxsYmFjazp1LmNvbXBsZXRlLG1vZGU6dS5tb2RlfSl9LF9zaG93OmUuZm4uc2hvdyxzaG93OmZ1bmN0aW9uKGUpe2lmKHMoZSkpcmV0dXJuIHRoaXMuX3Nob3cuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciB0PWkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB0Lm1vZGU9InNob3ciLHRoaXMuZWZmZWN0LmNhbGwodGhpcyx0KX0sX2hpZGU6ZS5mbi5oaWRlLGhpZGU6ZnVuY3Rpb24oZSl7aWYocyhlKSlyZXR1cm4gdGhpcy5faGlkZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHQubW9kZT0iaGlkZSIsdGhpcy5lZmZlY3QuY2FsbCh0aGlzLHQpfSxfX3RvZ2dsZTplLmZuLnRvZ2dsZSx0b2dnbGU6ZnVuY3Rpb24odCl7aWYocyh0KXx8dHlwZW9mIHQ9PSJib29sZWFuInx8ZS5pc0Z1bmN0aW9uKHQpKXJldHVybiB0aGlzLl9fdG9nZ2xlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgbj1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbi5tb2RlPSJ0b2dnbGUiLHRoaXMuZWZmZWN0LmNhbGwodGhpcyxuKX0sY3NzVW5pdDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLmNzcyh0KSxyPVtdO3JldHVybiBlLmVhY2goWyJlbSIsInB4IiwiJSIsInB0Il0sZnVuY3Rpb24oZSx0KXtuLmluZGV4T2YodCk+MCYmKHI9W3BhcnNlRmxvYXQobiksdF0pfSkscn19KX0oKSxmdW5jdGlvbigpe3ZhciB0PXt9O2UuZWFjaChbIlF1YWQiLCJDdWJpYyIsIlF1YXJ0IiwiUXVpbnQiLCJFeHBvIl0sZnVuY3Rpb24oZSxuKXt0W25dPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LGUrMil9fSksZS5leHRlbmQodCx7U2luZTpmdW5jdGlvbihlKXtyZXR1cm4gMS1NYXRoLmNvcyhlKk1hdGguUEkvMil9LENpcmM6ZnVuY3Rpb24oZSl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZSplKX0sRWxhc3RpYzpmdW5jdGlvbihlKXtyZXR1cm4gZT09PTB8fGU9PT0xP2U6LU1hdGgucG93KDIsOCooZS0xKSkqTWF0aC5zaW4oKChlLTEpKjgwLTcuNSkqTWF0aC5QSS8xNSl9LEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqZSooMyplLTIpfSxCb3VuY2U6ZnVuY3Rpb24oZSl7dmFyIHQsbj00O3doaWxlKGU8KCh0PU1hdGgucG93KDIsLS1uKSktMSkvMTEpO3JldHVybiAxL01hdGgucG93KDQsMy1uKS03LjU2MjUqTWF0aC5wb3coKHQqMy0yKS8yMi1lLDIpfX0pLGUuZWFjaCh0LGZ1bmN0aW9uKHQsbil7ZS5lYXNpbmdbImVhc2VJbiIrdF09bixlLmVhc2luZ1siZWFzZU91dCIrdF09ZnVuY3Rpb24oZSl7cmV0dXJuIDEtbigxLWUpfSxlLmVhc2luZ1siZWFzZUluT3V0Iit0XT1mdW5jdGlvbihlKXtyZXR1cm4gZTwuNT9uKGUqMikvMjoxLW4oZSotMisyKS8yfX0pfSgpfShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuPS91cHxkb3dufHZlcnRpY2FsLyxyPS91cHxsZWZ0fHZlcnRpY2FsfGhvcml6b250YWwvO2UuZWZmZWN0cy5lZmZlY3QuYmxpbmQ9ZnVuY3Rpb24odCxpKXt2YXIgcz1lKHRoaXMpLG89WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0sdT1lLmVmZmVjdHMuc2V0TW9kZShzLHQubW9kZXx8ImhpZGUiKSxhPXQuZGlyZWN0aW9ufHwidXAiLGY9bi50ZXN0KGEpLGw9Zj8iaGVpZ2h0Ijoid2lkdGgiLGM9Zj8idG9wIjoibGVmdCIsaD1yLnRlc3QoYSkscD17fSxkPXU9PT0ic2hvdyIsdixtLGc7cy5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpP2UuZWZmZWN0cy5zYXZlKHMucGFyZW50KCksbyk6ZS5lZmZlY3RzLnNhdmUocyxvKSxzLnNob3coKSx2PWUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKHMpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxtPXZbbF0oKSxnPXBhcnNlRmxvYXQodi5jc3MoYykpfHwwLHBbbF09ZD9tOjAsaHx8KHMuY3NzKGY/ImJvdHRvbSI6InJpZ2h0IiwwKS5jc3MoZj8idG9wIjoibGVmdCIsImF1dG8iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSJ9KSxwW2NdPWQ/ZzptK2cpLGQmJih2LmNzcyhsLDApLGh8fHYuY3NzKGMsZyttKSksdi5hbmltYXRlKHAse2R1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLHF1ZXVlOiExLGNvbXBsZXRlOmZ1bmN0aW9uKCl7dT09PSJoaWRlIiYmcy5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUocyxvKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihzKSxpKCl9fSl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LmJvdW5jZT1mdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcyksaT1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiaGVpZ2h0Iiwid2lkdGgiXSxzPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwiZWZmZWN0Iiksbz1zPT09ImhpZGUiLHU9cz09PSJzaG93IixhPXQuZGlyZWN0aW9ufHwidXAiLGY9dC5kaXN0YW5jZSxsPXQudGltZXN8fDUsYz1sKjIrKHV8fG8/MTowKSxoPXQuZHVyYXRpb24vYyxwPXQuZWFzaW5nLGQ9YT09PSJ1cCJ8fGE9PT0iZG93biI/InRvcCI6ImxlZnQiLHY9YT09PSJ1cCJ8fGE9PT0ibGVmdCIsbSxnLHksYj1yLnF1ZXVlKCksdz1iLmxlbmd0aDsodXx8bykmJmkucHVzaCgib3BhY2l0eSIpLGUuZWZmZWN0cy5zYXZlKHIsaSksci5zaG93KCksZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIociksZnx8KGY9cltkPT09InRvcCI/Im91dGVySGVpZ2h0Ijoib3V0ZXJXaWR0aCJdKCkvMyksdSYmKHk9e29wYWNpdHk6MX0seVtkXT0wLHIuY3NzKCJvcGFjaXR5IiwwKS5jc3MoZCx2Py1mKjI6ZioyKS5hbmltYXRlKHksaCxwKSksbyYmKGYvPU1hdGgucG93KDIsbC0xKSkseT17fSx5W2RdPTA7Zm9yKG09MDttPGw7bSsrKWc9e30sZ1tkXT0odj8iLT0iOiIrPSIpK2Ysci5hbmltYXRlKGcsaCxwKS5hbmltYXRlKHksaCxwKSxmPW8/ZioyOmYvMjtvJiYoZz17b3BhY2l0eTowfSxnW2RdPSh2PyItPSI6Iis9IikrZixyLmFuaW1hdGUoZyxoLHApKSxyLnF1ZXVlKGZ1bmN0aW9uKCl7byYmci5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUocixpKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihyKSxuKCl9KSx3PjEmJmIuc3BsaWNlLmFwcGx5KGIsWzEsMF0uY29uY2F0KGIuc3BsaWNlKHcsYysxKSkpLHIuZGVxdWV1ZSgpfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5jbGlwPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLHM9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJoaWRlIiksbz1zPT09InNob3ciLHU9dC5kaXJlY3Rpb258fCJ2ZXJ0aWNhbCIsYT11PT09InZlcnRpY2FsIixmPWE/ImhlaWdodCI6IndpZHRoIixsPWE/InRvcCI6ImxlZnQiLGM9e30saCxwLGQ7ZS5lZmZlY3RzLnNhdmUocixpKSxyLnNob3coKSxoPWUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKHIpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxwPXJbMF0udGFnTmFtZT09PSJJTUciP2g6cixkPXBbZl0oKSxvJiYocC5jc3MoZiwwKSxwLmNzcyhsLGQvMikpLGNbZl09bz9kOjAsY1tsXT1vPzA6ZC8yLHAuYW5pbWF0ZShjLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpe298fHIuaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKHIsaSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIociksbigpfX0pfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5kcm9wPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJvcGFjaXR5IiwiaGVpZ2h0Iiwid2lkdGgiXSxzPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwiaGlkZSIpLG89cz09PSJzaG93Iix1PXQuZGlyZWN0aW9ufHwibGVmdCIsYT11PT09InVwInx8dT09PSJkb3duIj8idG9wIjoibGVmdCIsZj11PT09InVwInx8dT09PSJsZWZ0Ij8icG9zIjoibmVnIixsPXtvcGFjaXR5Om8/MTowfSxjO2UuZWZmZWN0cy5zYXZlKHIsaSksci5zaG93KCksZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIociksYz10LmRpc3RhbmNlfHxyW2E9PT0idG9wIj8ib3V0ZXJIZWlnaHQiOiJvdXRlcldpZHRoIl0oITApLzIsbyYmci5jc3MoIm9wYWNpdHkiLDApLmNzcyhhLGY9PT0icG9zIj8tYzpjKSxsW2FdPShvP2Y9PT0icG9zIj8iKz0iOiItPSI6Zj09PSJwb3MiPyItPSI6Iis9IikrYyxyLmFuaW1hdGUobCx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtzPT09ImhpZGUiJiZyLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShyLGkpLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKHIpLG4oKX19KX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2UuZWZmZWN0cy5lZmZlY3QuZXhwbG9kZT1mdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHkoKXtjLnB1c2godGhpcyksYy5sZW5ndGg9PT1yKmkmJmIoKX1mdW5jdGlvbiBiKCl7cy5jc3Moe3Zpc2liaWxpdHk6InZpc2libGUifSksZShjKS5yZW1vdmUoKSx1fHxzLmhpZGUoKSxuKCl9dmFyIHI9dC5waWVjZXM/TWF0aC5yb3VuZChNYXRoLnNxcnQodC5waWVjZXMpKTozLGk9cixzPWUodGhpcyksbz1lLmVmZmVjdHMuc2V0TW9kZShzLHQubW9kZXx8ImhpZGUiKSx1PW89PT0ic2hvdyIsYT1zLnNob3coKS5jc3MoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5vZmZzZXQoKSxmPU1hdGguY2VpbChzLm91dGVyV2lkdGgoKS9pKSxsPU1hdGguY2VpbChzLm91dGVySGVpZ2h0KCkvciksYz1bXSxoLHAsZCx2LG0sZztmb3IoaD0wO2g8cjtoKyspe3Y9YS50b3AraCpsLGc9aC0oci0xKS8yO2ZvcihwPTA7cDxpO3ArKylkPWEubGVmdCtwKmYsbT1wLShpLTEpLzIscy5jbG9uZSgpLmFwcGVuZFRvKCJib2R5Iikud3JhcCgiPGRpdj48L2Rpdj4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToidmlzaWJsZSIsbGVmdDotcCpmLHRvcDotaCpsfSkucGFyZW50KCkuYWRkQ2xhc3MoInVpLWVmZmVjdHMtZXhwbG9kZSIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIixvdmVyZmxvdzoiaGlkZGVuIix3aWR0aDpmLGhlaWdodDpsLGxlZnQ6ZCsodT9tKmY6MCksdG9wOnYrKHU/ZypsOjApLG9wYWNpdHk6dT8wOjF9KS5hbmltYXRlKHtsZWZ0OmQrKHU/MDptKmYpLHRvcDp2Kyh1PzA6ZypsKSxvcGFjaXR5OnU/MTowfSx0LmR1cmF0aW9ufHw1MDAsdC5lYXNpbmcseSl9fX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5mYWRlPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwidG9nZ2xlIik7ci5hbmltYXRlKHtvcGFjaXR5Oml9LHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpufSl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LmZvbGQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0scz1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8ImhpZGUiKSxvPXM9PT0ic2hvdyIsdT1zPT09ImhpZGUiLGE9dC5zaXplfHwxNSxmPS8oWzAtOV0rKSUvLmV4ZWMoYSksbD0hIXQuaG9yaXpGaXJzdCxjPW8hPT1sLGg9Yz9bIndpZHRoIiwiaGVpZ2h0Il06WyJoZWlnaHQiLCJ3aWR0aCJdLHA9dC5kdXJhdGlvbi8yLGQsdixtPXt9LGc9e307ZS5lZmZlY3RzLnNhdmUocixpKSxyLnNob3coKSxkPWUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKHIpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSx2PWM/W2Qud2lkdGgoKSxkLmhlaWdodCgpXTpbZC5oZWlnaHQoKSxkLndpZHRoKCldLGYmJihhPXBhcnNlSW50KGZbMV0sMTApLzEwMCp2W3U/MDoxXSksbyYmZC5jc3MobD97aGVpZ2h0OjAsd2lkdGg6YX06e2hlaWdodDphLHdpZHRoOjB9KSxtW2hbMF1dPW8/dlswXTphLGdbaFsxXV09bz92WzFdOjAsZC5hbmltYXRlKG0scCx0LmVhc2luZykuYW5pbWF0ZShnLHAsdC5lYXNpbmcsZnVuY3Rpb24oKXt1JiZyLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShyLGkpLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKHIpLG4oKX0pfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5oaWdobGlnaHQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kQ29sb3IiLCJvcGFjaXR5Il0scz1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8InNob3ciKSxvPXtiYWNrZ3JvdW5kQ29sb3I6ci5jc3MoImJhY2tncm91bmRDb2xvciIpfTtzPT09ImhpZGUiJiYoby5vcGFjaXR5PTApLGUuZWZmZWN0cy5zYXZlKHIsaSksci5zaG93KCkuY3NzKHtiYWNrZ3JvdW5kSW1hZ2U6Im5vbmUiLGJhY2tncm91bmRDb2xvcjp0LmNvbG9yfHwiI2ZmZmY5OSJ9KS5hbmltYXRlKG8se3F1ZXVlOiExLGR1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7cz09PSJoaWRlIiYmci5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUocixpKSxuKCl9fSl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LnB1bHNhdGU9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJzaG93Iikscz1pPT09InNob3ciLG89aT09PSJoaWRlIix1PXN8fGk9PT0iaGlkZSIsYT0odC50aW1lc3x8NSkqMisodT8xOjApLGY9dC5kdXJhdGlvbi9hLGw9MCxjPXIucXVldWUoKSxoPWMubGVuZ3RoLHA7aWYoc3x8IXIuaXMoIjp2aXNpYmxlIikpci5jc3MoIm9wYWNpdHkiLDApLnNob3coKSxsPTE7Zm9yKHA9MTtwPGE7cCsrKXIuYW5pbWF0ZSh7b3BhY2l0eTpsfSxmLHQuZWFzaW5nKSxsPTEtbDtyLmFuaW1hdGUoe29wYWNpdHk6bH0sZix0LmVhc2luZyksci5xdWV1ZShmdW5jdGlvbigpe28mJnIuaGlkZSgpLG4oKX0pLGg+MSYmYy5zcGxpY2UuYXBwbHkoYyxbMSwwXS5jb25jYXQoYy5zcGxpY2UoaCxhKzEpKSksci5kZXF1ZXVlKCl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LnB1ZmY9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJoaWRlIikscz1pPT09ImhpZGUiLG89cGFyc2VJbnQodC5wZXJjZW50LDEwKXx8MTUwLHU9by8xMDAsYT17aGVpZ2h0OnIuaGVpZ2h0KCksd2lkdGg6ci53aWR0aCgpfTtlLmV4dGVuZCh0LHtlZmZlY3Q6InNjYWxlIixxdWV1ZTohMSxmYWRlOiEwLG1vZGU6aSxjb21wbGV0ZTpuLHBlcmNlbnQ6cz9vOjEwMCxmcm9tOnM/YTp7aGVpZ2h0OmEuaGVpZ2h0KnUsd2lkdGg6YS53aWR0aCp1fX0pLHIuZWZmZWN0KHQpfSxlLmVmZmVjdHMuZWZmZWN0LnNjYWxlPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPWUuZXh0ZW5kKCEwLHt9LHQpLHM9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJlZmZlY3QiKSxvPXBhcnNlSW50KHQucGVyY2VudCwxMCl8fChwYXJzZUludCh0LnBlcmNlbnQsMTApPT09MD8wOnM9PT0iaGlkZSI/MDoxMDApLHU9dC5kaXJlY3Rpb258fCJib3RoIixhPXQub3JpZ2luLGY9e2hlaWdodDpyLmhlaWdodCgpLHdpZHRoOnIud2lkdGgoKSxvdXRlckhlaWdodDpyLm91dGVySGVpZ2h0KCksb3V0ZXJXaWR0aDpyLm91dGVyV2lkdGgoKX0sbD17eTp1IT09Imhvcml6b250YWwiP28vMTAwOjEseDp1IT09InZlcnRpY2FsIj9vLzEwMDoxfTtpLmVmZmVjdD0ic2l6ZSIsaS5xdWV1ZT0hMSxpLmNvbXBsZXRlPW4scyE9PSJlZmZlY3QiJiYoaS5vcmlnaW49YXx8WyJtaWRkbGUiLCJjZW50ZXIiXSxpLnJlc3RvcmU9ITApLGkuZnJvbT10LmZyb218fChzPT09InNob3ciP3toZWlnaHQ6MCx3aWR0aDowfTpmKSxpLnRvPXtoZWlnaHQ6Zi5oZWlnaHQqbC55LHdpZHRoOmYud2lkdGgqbC54LG91dGVySGVpZ2h0OmYub3V0ZXJIZWlnaHQqbC55LG91dGVyV2lkdGg6Zi5vdXRlcldpZHRoKmwueH0saS5mYWRlJiYocz09PSJzaG93IiYmKGkuZnJvbS5vcGFjaXR5PTAsaS50by5vcGFjaXR5PTEpLHM9PT0iaGlkZSImJihpLmZyb20ub3BhY2l0eT0xLGkudG8ub3BhY2l0eT0wKSksci5lZmZlY3QoaSl9LGUuZWZmZWN0cy5lZmZlY3Quc2l6ZT1mdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcyksaT1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Iiwid2lkdGgiLCJoZWlnaHQiLCJvdmVyZmxvdyIsIm9wYWNpdHkiXSxzPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJvdmVyZmxvdyIsIm9wYWNpdHkiXSxvPVsid2lkdGgiLCJoZWlnaHQiLCJvdmVyZmxvdyJdLHU9WyJmb250U2l6ZSJdLGE9WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxmPVsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0Il0sbD1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8ImVmZmVjdCIpLGM9dC5yZXN0b3JlfHxsIT09ImVmZmVjdCIsaD10LnNjYWxlfHwiYm90aCIscD10Lm9yaWdpbnx8WyJtaWRkbGUiLCJjZW50ZXIiXSxkLHYsbSxnPXIuY3NzKCJwb3NpdGlvbiIpO2w9PT0ic2hvdyImJnIuc2hvdygpLGQ9e2hlaWdodDpyLmhlaWdodCgpLHdpZHRoOnIud2lkdGgoKSxvdXRlckhlaWdodDpyLm91dGVySGVpZ2h0KCksb3V0ZXJXaWR0aDpyLm91dGVyV2lkdGgoKX0sci5mcm9tPXQuZnJvbXx8ZCxyLnRvPXQudG98fGQsbT17ZnJvbTp7eTpyLmZyb20uaGVpZ2h0L2QuaGVpZ2h0LHg6ci5mcm9tLndpZHRoL2Qud2lkdGh9LHRvOnt5OnIudG8uaGVpZ2h0L2QuaGVpZ2h0LHg6ci50by53aWR0aC9kLndpZHRofX07aWYoaD09PSJib3gifHxoPT09ImJvdGgiKW0uZnJvbS55IT09bS50by55JiYoaT1pLmNvbmNhdChhKSxyLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24ocixhLG0uZnJvbS55LHIuZnJvbSksci50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihyLGEsbS50by55LHIudG8pKSxtLmZyb20ueCE9PW0udG8ueCYmKGk9aS5jb25jYXQoZiksci5mcm9tPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKHIsZixtLmZyb20ueCxyLmZyb20pLHIudG89ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24ocixmLG0udG8ueCxyLnRvKSk7KGg9PT0iY29udGVudCJ8fGg9PT0iYm90aCIpJiZtLmZyb20ueSE9PW0udG8ueSYmKGk9aS5jb25jYXQodSksci5mcm9tPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKHIsdSxtLmZyb20ueSxyLmZyb20pLHIudG89ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24ocix1LG0udG8ueSxyLnRvKSksZS5lZmZlY3RzLnNhdmUocixjP2k6cyksci5zaG93KCksZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIociksci5jc3MoIm92ZXJmbG93IiwiaGlkZGVuIikuY3NzKHIuZnJvbSkscCYmKHY9ZS5lZmZlY3RzLmdldEJhc2VsaW5lKHAsZCksci5mcm9tLnRvcD0oZC5vdXRlckhlaWdodC1yLm91dGVySGVpZ2h0KCkpKnYueSxyLmZyb20ubGVmdD0oZC5vdXRlcldpZHRoLXIub3V0ZXJXaWR0aCgpKSp2Lngsci50by50b3A9KGQub3V0ZXJIZWlnaHQtci50by5vdXRlckhlaWdodCkqdi55LHIudG8ubGVmdD0oZC5vdXRlcldpZHRoLXIudG8ub3V0ZXJXaWR0aCkqdi54KSxyLmNzcyhyLmZyb20pO2lmKGg9PT0iY29udGVudCJ8fGg9PT0iYm90aCIpYT1hLmNvbmNhdChbIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSJdKS5jb25jYXQodSksZj1mLmNvbmNhdChbIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCJdKSxvPWkuY29uY2F0KGEpLmNvbmNhdChmKSxyLmZpbmQoIipbd2lkdGhdIikuZWFjaChmdW5jdGlvbigpe3ZhciBuPWUodGhpcykscj17aGVpZ2h0Om4uaGVpZ2h0KCksd2lkdGg6bi53aWR0aCgpfTtjJiZlLmVmZmVjdHMuc2F2ZShuLG8pLG4uZnJvbT17aGVpZ2h0OnIuaGVpZ2h0Km0uZnJvbS55LHdpZHRoOnIud2lkdGgqbS5mcm9tLnh9LG4udG89e2hlaWdodDpyLmhlaWdodCptLnRvLnksd2lkdGg6ci53aWR0aCptLnRvLnh9LG0uZnJvbS55IT09bS50by55JiYobi5mcm9tPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG4sYSxtLmZyb20ueSxuLmZyb20pLG4udG89ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obixhLG0udG8ueSxuLnRvKSksbS5mcm9tLnghPT1tLnRvLngmJihuLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obixmLG0uZnJvbS54LG4uZnJvbSksbi50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihuLGYsbS50by54LG4udG8pKSxuLmNzcyhuLmZyb20pLG4uYW5pbWF0ZShuLnRvLHQuZHVyYXRpb24sdC5lYXNpbmcsZnVuY3Rpb24oKXtjJiZlLmVmZmVjdHMucmVzdG9yZShuLG8pfSl9KTtyLmFuaW1hdGUoci50byx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtyLnRvLm9wYWNpdHk9PT0wJiZyLmNzcygib3BhY2l0eSIsci5mcm9tLm9wYWNpdHkpLGw9PT0iaGlkZSImJnIuaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKHIsYz9pOnMpLGN8fChnPT09InN0YXRpYyI/ci5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSIsdG9wOnIudG8udG9wLGxlZnQ6ci50by5sZWZ0fSk6ZS5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGUsdCl7ci5jc3ModCxmdW5jdGlvbih0LG4pe3ZhciBpPXBhcnNlSW50KG4sMTApLHM9ZT9yLnRvLmxlZnQ6ci50by50b3A7cmV0dXJuIG49PT0iYXV0byI/cysicHgiOmkrcysicHgifSl9KSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIociksbigpfX0pfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5zaGFrZT1mdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcyksaT1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiaGVpZ2h0Iiwid2lkdGgiXSxzPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwiZWZmZWN0Iiksbz10LmRpcmVjdGlvbnx8ImxlZnQiLHU9dC5kaXN0YW5jZXx8MjAsYT10LnRpbWVzfHwzLGY9YSoyKzEsbD1NYXRoLnJvdW5kKHQuZHVyYXRpb24vZiksYz1vPT09InVwInx8bz09PSJkb3duIj8idG9wIjoibGVmdCIsaD1vPT09InVwInx8bz09PSJsZWZ0IixwPXt9LGQ9e30sdj17fSxtLGc9ci5xdWV1ZSgpLHk9Zy5sZW5ndGg7ZS5lZmZlY3RzLnNhdmUocixpKSxyLnNob3coKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihyKSxwW2NdPShoPyItPSI6Iis9IikrdSxkW2NdPShoPyIrPSI6Ii09IikrdSoyLHZbY109KGg/Ii09IjoiKz0iKSt1KjIsci5hbmltYXRlKHAsbCx0LmVhc2luZyk7Zm9yKG09MTttPGE7bSsrKXIuYW5pbWF0ZShkLGwsdC5lYXNpbmcpLmFuaW1hdGUodixsLHQuZWFzaW5nKTtyLmFuaW1hdGUoZCxsLHQuZWFzaW5nKS5hbmltYXRlKHAsbC8yLHQuZWFzaW5nKS5xdWV1ZShmdW5jdGlvbigpe3M9PT0iaGlkZSImJnIuaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKHIsaSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIociksbigpfSkseT4xJiZnLnNwbGljZS5hcHBseShnLFsxLDBdLmNvbmNhdChnLnNwbGljZSh5LGYrMSkpKSxyLmRlcXVldWUoKX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2UuZWZmZWN0cy5lZmZlY3Quc2xpZGU9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsIndpZHRoIiwiaGVpZ2h0Il0scz1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8InNob3ciKSxvPXM9PT0ic2hvdyIsdT10LmRpcmVjdGlvbnx8ImxlZnQiLGE9dT09PSJ1cCJ8fHU9PT0iZG93biI/InRvcCI6ImxlZnQiLGY9dT09PSJ1cCJ8fHU9PT0ibGVmdCIsbCxjPXt9O2UuZWZmZWN0cy5zYXZlKHIsaSksci5zaG93KCksbD10LmRpc3RhbmNlfHxyW2E9PT0idG9wIj8ib3V0ZXJIZWlnaHQiOiJvdXRlcldpZHRoIl0oITApLGUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKHIpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxvJiZyLmNzcyhhLGY/aXNOYU4obCk/Ii0iK2w6LWw6bCksY1thXT0obz9mPyIrPSI6Ii09IjpmPyItPSI6Iis9IikrbCxyLmFuaW1hdGUoYyx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtzPT09ImhpZGUiJiZyLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShyLGkpLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKHIpLG4oKX19KX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2UuZWZmZWN0cy5lZmZlY3QudHJhbnNmZXI9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9ZSh0LnRvKSxzPWkuY3NzKCJwb3NpdGlvbiIpPT09ImZpeGVkIixvPWUoImJvZHkiKSx1PXM/by5zY3JvbGxUb3AoKTowLGE9cz9vLnNjcm9sbExlZnQoKTowLGY9aS5vZmZzZXQoKSxsPXt0b3A6Zi50b3AtdSxsZWZ0OmYubGVmdC1hLGhlaWdodDppLmlubmVySGVpZ2h0KCksd2lkdGg6aS5pbm5lcldpZHRoKCl9LGM9ci5vZmZzZXQoKSxoPWUoJzxkaXYgY2xhc3M9InVpLWVmZmVjdHMtdHJhbnNmZXIiPjwvZGl2PicpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKHQuY2xhc3NOYW1lKS5jc3Moe3RvcDpjLnRvcC11LGxlZnQ6Yy5sZWZ0LWEsaGVpZ2h0OnIuaW5uZXJIZWlnaHQoKSx3aWR0aDpyLmlubmVyV2lkdGgoKSxwb3NpdGlvbjpzPyJmaXhlZCI6ImFic29sdXRlIn0pLmFuaW1hdGUobCx0LmR1cmF0aW9uLHQuZWFzaW5nLGZ1bmN0aW9uKCl7aC5yZW1vdmUoKSxuKCl9KX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuPSExO2Uud2lkZ2V0KCJ1aS5tZW51Iix7dmVyc2lvbjoiMS45LjAiLGRlZmF1bHRFbGVtZW50OiI8dWw+IixkZWxheTozMDAsb3B0aW9uczp7aWNvbnM6e3N1Ym1lbnU6InVpLWljb24tY2FyYXQtMS1lIn0sbWVudXM6InVsIixwb3NpdGlvbjp7bXk6ImxlZnQgdG9wIixhdDoicmlnaHQgdG9wIn0scm9sZToibWVudSIsYmx1cjpudWxsLGZvY3VzOm51bGwsc2VsZWN0Om51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZU1lbnU9dGhpcy5lbGVtZW50LHRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmFkZENsYXNzKCJ1aS1tZW51IHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikudG9nZ2xlQ2xhc3MoInVpLW1lbnUtaWNvbnMiLCEhdGhpcy5lbGVtZW50LmZpbmQoIi51aS1pY29uIikubGVuZ3RoKS5hdHRyKHtyb2xlOnRoaXMub3B0aW9ucy5yb2xlLHRhYkluZGV4OjB9KS5iaW5kKCJjbGljayIrdGhpcy5ldmVudE5hbWVzcGFjZSxlLnByb3h5KGZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucy5kaXNhYmxlZCYmZS5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzKSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsInRydWUiKSx0aGlzLl9vbih7Im1vdXNlZG93biAudWktbWVudS1pdGVtID4gYSI6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSwiY2xpY2sgLnVpLXN0YXRlLWRpc2FibGVkID4gYSI6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSwiY2xpY2sgLnVpLW1lbnUtaXRlbTpoYXMoYSkiOmZ1bmN0aW9uKHQpe3ZhciByPWUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKTshbiYmci5ub3QoIi51aS1zdGF0ZS1kaXNhYmxlZCIpLmxlbmd0aCYmKG49ITAsdGhpcy5zZWxlY3QodCksci5oYXMoIi51aS1tZW51IikubGVuZ3RoP3RoaXMuZXhwYW5kKHQpOnRoaXMuZWxlbWVudC5pcygiOmZvY3VzIil8fCh0aGlzLmVsZW1lbnQudHJpZ2dlcigiZm9jdXMiLFshMF0pLHRoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZS5wYXJlbnRzKCIudWktbWVudSIpLmxlbmd0aD09PTEmJmNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSkpfSwibW91c2VlbnRlciAudWktbWVudS1pdGVtIjpmdW5jdGlvbih0KXt2YXIgbj1lKHQuY3VycmVudFRhcmdldCk7bi5zaWJsaW5ncygpLmNoaWxkcmVuKCIudWktc3RhdGUtYWN0aXZlIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHRoaXMuZm9jdXModCxuKX0sbW91c2VsZWF2ZToiY29sbGFwc2VBbGwiLCJtb3VzZWxlYXZlIC51aS1tZW51IjoiY29sbGFwc2VBbGwiLGZvY3VzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5hY3RpdmV8fHRoaXMuZWxlbWVudC5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmVxKDApO3R8fHRoaXMuZm9jdXMoZSxuKX0sYmx1cjpmdW5jdGlvbih0KXt0aGlzLl9kZWxheShmdW5jdGlvbigpe2UuY29udGFpbnModGhpcy5lbGVtZW50WzBdLHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCl8fHRoaXMuY29sbGFwc2VBbGwodCl9KX0sa2V5ZG93bjoiX2tleWRvd24ifSksdGhpcy5yZWZyZXNoKCksdGhpcy5fb24odGhpcy5kb2N1bWVudCx7Y2xpY2s6ZnVuY3Rpb24odCl7ZSh0LnRhcmdldCkuY2xvc2VzdCgiLnVpLW1lbnUiKS5sZW5ndGh8fHRoaXMuY29sbGFwc2VBbGwodCksbj0hMX19KX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50IikuZmluZCgiLnVpLW1lbnUiKS5hbmRTZWxmKCkucmVtb3ZlQ2xhc3MoInVpLW1lbnUgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwgdWktbWVudS1pY29ucyIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJ0YWJJbmRleCIpLnJlbW92ZUF0dHIoImFyaWEtbGFiZWxsZWRieSIpLnJlbW92ZUF0dHIoImFyaWEtZXhwYW5kZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKS5yZW1vdmVVbmlxdWVJZCgpLnNob3coKSx0aGlzLmVsZW1lbnQuZmluZCgiLnVpLW1lbnUtaXRlbSIpLnJlbW92ZUNsYXNzKCJ1aS1tZW51LWl0ZW0iKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpLmNoaWxkcmVuKCJhIikucmVtb3ZlVW5pcXVlSWQoKS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCB1aS1zdGF0ZS1ob3ZlciIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtaGFzcG9wdXAiKS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3QuZGF0YSgidWktbWVudS1zdWJtZW51LWNhcmF0IikmJnQucmVtb3ZlKCl9KSx0aGlzLmVsZW1lbnQuZmluZCgiLnVpLW1lbnUtZGl2aWRlciIpLnJlbW92ZUNsYXNzKCJ1aS1tZW51LWRpdmlkZXIgdWktd2lkZ2V0LWNvbnRlbnQiKX0sX2tleWRvd246ZnVuY3Rpb24odCl7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXC1cW1xde30oKSorPy4sXFxcXiR8I1xzXS9nLCJcXCQmIil9dmFyIG4scixpLHMsbyx1PSEwO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLlBBR0VfVVA6dGhpcy5wcmV2aW91c1BhZ2UodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOnRoaXMubmV4dFBhZ2UodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuSE9NRTp0aGlzLl9tb3ZlKCJmaXJzdCIsImZpcnN0Iix0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FTkQ6dGhpcy5fbW92ZSgibGFzdCIsImxhc3QiLHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlVQOnRoaXMucHJldmlvdXModCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRE9XTjp0aGlzLm5leHQodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuTEVGVDp0aGlzLmNvbGxhcHNlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlJJR0hUOnRoaXMuYWN0aXZlJiYhdGhpcy5hY3RpdmUuaXMoIi51aS1zdGF0ZS1kaXNhYmxlZCIpJiZ0aGlzLmV4cGFuZCh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FTlRFUjpjYXNlIGUudWkua2V5Q29kZS5TUEFDRTp0aGlzLl9hY3RpdmF0ZSh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FU0NBUEU6dGhpcy5jb2xsYXBzZSh0KTticmVhaztkZWZhdWx0OnU9ITEscj10aGlzLnByZXZpb3VzRmlsdGVyfHwiIixpPVN0cmluZy5mcm9tQ2hhckNvZGUodC5rZXlDb2RlKSxzPSExLGNsZWFyVGltZW91dCh0aGlzLmZpbHRlclRpbWVyKSxpPT09cj9zPSEwOmk9citpLG89bmV3IFJlZ0V4cCgiXiIrYShpKSwiaSIpLG49dGhpcy5hY3RpdmVNZW51LmNoaWxkcmVuKCIudWktbWVudS1pdGVtIikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIG8udGVzdChlKHRoaXMpLmNoaWxkcmVuKCJhIikudGV4dCgpKX0pLG49cyYmbi5pbmRleCh0aGlzLmFjdGl2ZS5uZXh0KCkpIT09LTE/dGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpOm4sbi5sZW5ndGh8fChpPVN0cmluZy5mcm9tQ2hhckNvZGUodC5rZXlDb2RlKSxvPW5ldyBSZWdFeHAoIl4iK2EoaSksImkiKSxuPXRoaXMuYWN0aXZlTWVudS5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBvLnRlc3QoZSh0aGlzKS5jaGlsZHJlbigiYSIpLnRleHQoKSl9KSksbi5sZW5ndGg/KHRoaXMuZm9jdXModCxuKSxuLmxlbmd0aD4xPyh0aGlzLnByZXZpb3VzRmlsdGVyPWksdGhpcy5maWx0ZXJUaW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLnByZXZpb3VzRmlsdGVyfSwxZTMpKTpkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcik6ZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXJ9dSYmdC5wcmV2ZW50RGVmYXVsdCgpfSxfYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dGhpcy5hY3RpdmUuaXMoIi51aS1zdGF0ZS1kaXNhYmxlZCIpfHwodGhpcy5hY3RpdmUuY2hpbGRyZW4oImFbYXJpYS1oYXNwb3B1cD0ndHJ1ZSddIikubGVuZ3RoP3RoaXMuZXhwYW5kKGUpOnRoaXMuc2VsZWN0KGUpKX0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0LG49dGhpcy5vcHRpb25zLmljb25zLnN1Ym1lbnUscj10aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMubWVudXMrIjpub3QoLnVpLW1lbnUpIikuYWRkQ2xhc3MoInVpLW1lbnUgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS5oaWRlKCkuYXR0cih7cm9sZTp0aGlzLm9wdGlvbnMucm9sZSwiYXJpYS1oaWRkZW4iOiJ0cnVlIiwiYXJpYS1leHBhbmRlZCI6ImZhbHNlIn0pO3Q9ci5hZGQodGhpcy5lbGVtZW50KSx0LmNoaWxkcmVuKCI6bm90KC51aS1tZW51LWl0ZW0pOmhhcyhhKSIpLmFkZENsYXNzKCJ1aS1tZW51LWl0ZW0iKS5hdHRyKCJyb2xlIiwicHJlc2VudGF0aW9uIikuY2hpbGRyZW4oImEiKS51bmlxdWVJZCgpLmFkZENsYXNzKCJ1aS1jb3JuZXItYWxsIikuYXR0cih7dGFiSW5kZXg6LTEscm9sZTp0aGlzLl9pdGVtUm9sZSgpfSksdC5jaGlsZHJlbigiOm5vdCgudWktbWVudS1pdGVtKSIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpOy9bXlwt4oCU4oCTXHNdLy50ZXN0KHQudGV4dCgpKXx8dC5hZGRDbGFzcygidWktd2lkZ2V0LWNvbnRlbnQgdWktbWVudS1kaXZpZGVyIil9KSx0LmNoaWxkcmVuKCIudWktc3RhdGUtZGlzYWJsZWQiKS5hdHRyKCJhcmlhLWRpc2FibGVkIiwidHJ1ZSIpLHIuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcykscj10LnByZXYoImEiKSxpPWUoIjxzcGFuPiIpLmFkZENsYXNzKCJ1aS1tZW51LWljb24gdWktaWNvbiAiK24pLmRhdGEoInVpLW1lbnUtc3VibWVudS1jYXJhdCIsITApO3IuYXR0cigiYXJpYS1oYXNwb3B1cCIsInRydWUiKS5wcmVwZW5kKGkpLHQuYXR0cigiYXJpYS1sYWJlbGxlZGJ5IixyLmF0dHIoImlkIikpfSksdGhpcy5hY3RpdmUmJiFlLmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSx0aGlzLmFjdGl2ZVswXSkmJnRoaXMuYmx1cigpfSxfaXRlbVJvbGU6ZnVuY3Rpb24oKXtyZXR1cm57bWVudToibWVudWl0ZW0iLGxpc3Rib3g6Im9wdGlvbiJ9W3RoaXMub3B0aW9ucy5yb2xlXX0sZm9jdXM6ZnVuY3Rpb24oZSx0KXt2YXIgbixyO3RoaXMuYmx1cihlLGUmJmUudHlwZT09PSJmb2N1cyIpLHRoaXMuX3Njcm9sbEludG9WaWV3KHQpLHRoaXMuYWN0aXZlPXQuZmlyc3QoKSxyPXRoaXMuYWN0aXZlLmNoaWxkcmVuKCJhIikuYWRkQ2xhc3MoInVpLXN0YXRlLWZvY3VzIiksdGhpcy5vcHRpb25zLnJvbGUmJnRoaXMuZWxlbWVudC5hdHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLHIuYXR0cigiaWQiKSksdGhpcy5hY3RpdmUucGFyZW50KCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIpLmNoaWxkcmVuKCJhOmZpcnN0IikuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLGUmJmUudHlwZT09PSJrZXlkb3duIj90aGlzLl9jbG9zZSgpOnRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9jbG9zZSgpfSx0aGlzLmRlbGF5KSxuPXQuY2hpbGRyZW4oIi51aS1tZW51Iiksbi5sZW5ndGgmJi9ebW91c2UvLnRlc3QoZS50eXBlKSYmdGhpcy5fc3RhcnRPcGVuaW5nKG4pLHRoaXMuYWN0aXZlTWVudT10LnBhcmVudCgpLHRoaXMuX3RyaWdnZXIoImZvY3VzIixlLHtpdGVtOnR9KX0sX3Njcm9sbEludG9WaWV3OmZ1bmN0aW9uKHQpe3ZhciBuLHIsaSxzLG8sdTt0aGlzLl9oYXNTY3JvbGwoKSYmKG49cGFyc2VGbG9hdChlLmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sImJvcmRlclRvcFdpZHRoIikpfHwwLHI9cGFyc2VGbG9hdChlLmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sInBhZGRpbmdUb3AiKSl8fDAsaT10Lm9mZnNldCgpLnRvcC10aGlzLmFjdGl2ZU1lbnUub2Zmc2V0KCkudG9wLW4tcixzPXRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AoKSxvPXRoaXMuYWN0aXZlTWVudS5oZWlnaHQoKSx1PXQuaGVpZ2h0KCksaTwwP3RoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AocytpKTppK3U+byYmdGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcChzK2ktbyt1KSl9LGJsdXI6ZnVuY3Rpb24oZSx0KXt0fHxjbGVhclRpbWVvdXQodGhpcy50aW1lcik7aWYoIXRoaXMuYWN0aXZlKXJldHVybjt0aGlzLmFjdGl2ZS5jaGlsZHJlbigiYSIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpLHRoaXMuYWN0aXZlPW51bGwsdGhpcy5fdHJpZ2dlcigiYmx1ciIsZSx7aXRlbTp0aGlzLmFjdGl2ZX0pfSxfc3RhcnRPcGVuaW5nOmZ1bmN0aW9uKGUpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtpZihlLmF0dHIoImFyaWEtaGlkZGVuIikhPT0idHJ1ZSIpcmV0dXJuO3RoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9jbG9zZSgpLHRoaXMuX29wZW4oZSl9LHRoaXMuZGVsYXkpfSxfb3BlbjpmdW5jdGlvbih0KXt2YXIgbj1lLmV4dGVuZCh7b2Y6dGhpcy5hY3RpdmV9LHRoaXMub3B0aW9ucy5wb3NpdGlvbik7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudSIpLm5vdCh0LnBhcmVudHMoIi51aS1tZW51IikpLmhpZGUoKS5hdHRyKCJhcmlhLWhpZGRlbiIsInRydWUiKSx0LnNob3coKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJ0cnVlIikucG9zaXRpb24obil9LGNvbGxhcHNlQWxsOmZ1bmN0aW9uKHQsbil7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt2YXIgcj1uP3RoaXMuZWxlbWVudDplKHQmJnQudGFyZ2V0KS5jbG9zZXN0KHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudSIpKTtyLmxlbmd0aHx8KHI9dGhpcy5lbGVtZW50KSx0aGlzLl9jbG9zZShyKSx0aGlzLmJsdXIodCksdGhpcy5hY3RpdmVNZW51PXJ9LHRoaXMuZGVsYXkpfSxfY2xvc2U6ZnVuY3Rpb24oZSl7ZXx8KGU9dGhpcy5hY3RpdmU/dGhpcy5hY3RpdmUucGFyZW50KCk6dGhpcy5lbGVtZW50KSxlLmZpbmQoIi51aS1tZW51IikuaGlkZSgpLmF0dHIoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJmYWxzZSIpLmVuZCgpLmZpbmQoImEudWktc3RhdGUtYWN0aXZlIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSxjb2xsYXBzZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmFjdGl2ZSYmdGhpcy5hY3RpdmUucGFyZW50KCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIsdGhpcy5lbGVtZW50KTt0JiZ0Lmxlbmd0aCYmKHRoaXMuX2Nsb3NlKCksdGhpcy5mb2N1cyhlLHQpKX0sZXhwYW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZS5jaGlsZHJlbigiLnVpLW1lbnUgIikuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKS5maXJzdCgpO3QmJnQubGVuZ3RoJiYodGhpcy5fb3Blbih0LnBhcmVudCgpKSx0aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuZm9jdXMoZSx0KX0pKX0sbmV4dDpmdW5jdGlvbihlKXt0aGlzLl9tb3ZlKCJuZXh0IiwiZmlyc3QiLGUpfSxwcmV2aW91czpmdW5jdGlvbihlKXt0aGlzLl9tb3ZlKCJwcmV2IiwibGFzdCIsZSl9LGlzRmlyc3RJdGVtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlJiYhdGhpcy5hY3RpdmUucHJldkFsbCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aH0saXNMYXN0SXRlbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLm5leHRBbGwoIi51aS1tZW51LWl0ZW0iKS5sZW5ndGh9LF9tb3ZlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjt0aGlzLmFjdGl2ZSYmKGU9PT0iZmlyc3QifHxlPT09Imxhc3QiP3I9dGhpcy5hY3RpdmVbZT09PSJmaXJzdCI/InByZXZBbGwiOiJuZXh0QWxsIl0oIi51aS1tZW51LWl0ZW0iKS5lcSgtMSk6cj10aGlzLmFjdGl2ZVtlKyJBbGwiXSgiLnVpLW1lbnUtaXRlbSIpLmVxKDApKTtpZighcnx8IXIubGVuZ3RofHwhdGhpcy5hY3RpdmUpcj10aGlzLmFjdGl2ZU1lbnUuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKVt0XSgpO3RoaXMuZm9jdXMobixyKX0sbmV4dFBhZ2U6ZnVuY3Rpb24odCl7dmFyIG4scixpO2lmKCF0aGlzLmFjdGl2ZSl7dGhpcy5uZXh0KHQpO3JldHVybn1pZih0aGlzLmlzTGFzdEl0ZW0oKSlyZXR1cm47dGhpcy5faGFzU2Nyb2xsKCk/KHI9dGhpcy5hY3RpdmUub2Zmc2V0KCkudG9wLGk9dGhpcy5lbGVtZW50LmhlaWdodCgpLHRoaXMuYWN0aXZlLm5leHRBbGwoIi51aS1tZW51LWl0ZW0iKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIG49ZSh0aGlzKSxuLm9mZnNldCgpLnRvcC1yLWk8MH0pLHRoaXMuZm9jdXModCxuKSk6dGhpcy5mb2N1cyh0LHRoaXMuYWN0aXZlTWVudS5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpW3RoaXMuYWN0aXZlPyJsYXN0IjoiZmlyc3QiXSgpKX0scHJldmlvdXNQYWdlOmZ1bmN0aW9uKHQpe3ZhciBuLHIsaTtpZighdGhpcy5hY3RpdmUpe3RoaXMubmV4dCh0KTtyZXR1cm59aWYodGhpcy5pc0ZpcnN0SXRlbSgpKXJldHVybjt0aGlzLl9oYXNTY3JvbGwoKT8ocj10aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3AsaT10aGlzLmVsZW1lbnQuaGVpZ2h0KCksdGhpcy5hY3RpdmUucHJldkFsbCgiLnVpLW1lbnUtaXRlbSIpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gbj1lKHRoaXMpLG4ub2Zmc2V0KCkudG9wLXIraT4wfSksdGhpcy5mb2N1cyh0LG4pKTp0aGlzLmZvY3VzKHQsdGhpcy5hY3RpdmVNZW51LmNoaWxkcmVuKCIudWktbWVudS1pdGVtIikuZmlyc3QoKSl9LF9oYXNTY3JvbGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCk8dGhpcy5lbGVtZW50LnByb3AoInNjcm9sbEhlaWdodCIpfSxzZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5hY3RpdmU9dGhpcy5hY3RpdmV8fGUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKTt2YXIgbj17aXRlbTp0aGlzLmFjdGl2ZX07dGhpcy5hY3RpdmUuaGFzKCIudWktbWVudSIpLmxlbmd0aHx8dGhpcy5jb2xsYXBzZUFsbCh0LCEwKSx0aGlzLl90cmlnZ2VyKCJzZWxlY3QiLHQsbil9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2Uud2lkZ2V0KCJ1aS5wcm9ncmVzc2JhciIse3ZlcnNpb246IjEuOS4wIixvcHRpb25zOnt2YWx1ZTowLG1heDoxMDB9LG1pbjowLF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXByb2dyZXNzYmFyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikuYXR0cih7cm9sZToicHJvZ3Jlc3NiYXIiLCJhcmlhLXZhbHVlbWluIjp0aGlzLm1pbiwiYXJpYS12YWx1ZW1heCI6dGhpcy5vcHRpb25zLm1heCwiYXJpYS12YWx1ZW5vdyI6dGhpcy5fdmFsdWUoKX0pLHRoaXMudmFsdWVEaXY9ZSgiPGRpdiBjbGFzcz0ndWktcHJvZ3Jlc3NiYXItdmFsdWUgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItbGVmdCc+PC9kaXY+IikuYXBwZW5kVG8odGhpcy5lbGVtZW50KSx0aGlzLm9sZFZhbHVlPXRoaXMuX3ZhbHVlKCksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1wcm9ncmVzc2JhciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbWluIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1heCIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVub3ciKSx0aGlzLnZhbHVlRGl2LnJlbW92ZSgpfSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQ/dGhpcy5fdmFsdWUoKToodGhpcy5fc2V0T3B0aW9uKCJ2YWx1ZSIsZSksdGhpcyl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtlPT09InZhbHVlIiYmKHRoaXMub3B0aW9ucy52YWx1ZT10LHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX3ZhbHVlKCk9PT10aGlzLm9wdGlvbnMubWF4JiZ0aGlzLl90cmlnZ2VyKCJjb21wbGV0ZSIpKSx0aGlzLl9zdXBlcihlLHQpfSxfdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMudmFsdWU7cmV0dXJuIHR5cGVvZiBlIT0ibnVtYmVyIiYmKGU9MCksTWF0aC5taW4odGhpcy5vcHRpb25zLm1heCxNYXRoLm1heCh0aGlzLm1pbixlKSl9LF9wZXJjZW50YWdlOmZ1bmN0aW9uKCl7cmV0dXJuIDEwMCp0aGlzLl92YWx1ZSgpL3RoaXMub3B0aW9ucy5tYXh9LF9yZWZyZXNoVmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnZhbHVlKCksdD10aGlzLl9wZXJjZW50YWdlKCk7dGhpcy5vbGRWYWx1ZSE9PWUmJih0aGlzLm9sZFZhbHVlPWUsdGhpcy5fdHJpZ2dlcigiY2hhbmdlIikpLHRoaXMudmFsdWVEaXYudG9nZ2xlKGU+dGhpcy5taW4pLnRvZ2dsZUNsYXNzKCJ1aS1jb3JuZXItcmlnaHQiLGU9PT10aGlzLm9wdGlvbnMubWF4KS53aWR0aCh0LnRvRml4ZWQoMCkrIiUiKSx0aGlzLmVsZW1lbnQuYXR0cigiYXJpYS12YWx1ZW5vdyIsZSl9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2Uud2lkZ2V0KCJ1aS5yZXNpemFibGUiLGUudWkubW91c2Use3ZlcnNpb246IjEuOS4wIix3aWRnZXRFdmVudFByZWZpeDoicmVzaXplIixvcHRpb25zOnthbHNvUmVzaXplOiExLGFuaW1hdGU6ITEsYW5pbWF0ZUR1cmF0aW9uOiJzbG93IixhbmltYXRlRWFzaW5nOiJzd2luZyIsYXNwZWN0UmF0aW86ITEsYXV0b0hpZGU6ITEsY29udGFpbm1lbnQ6ITEsZ2hvc3Q6ITEsZ3JpZDohMSxoYW5kbGVzOiJlLHMsc2UiLGhlbHBlcjohMSxtYXhIZWlnaHQ6bnVsbCxtYXhXaWR0aDpudWxsLG1pbkhlaWdodDoxMCxtaW5XaWR0aDoxMCx6SW5kZXg6MWUzfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPXRoaXMub3B0aW9uczt0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZSIpLGUuZXh0ZW5kKHRoaXMse19hc3BlY3RSYXRpbzohIW4uYXNwZWN0UmF0aW8sYXNwZWN0UmF0aW86bi5hc3BlY3RSYXRpbyxvcmlnaW5hbEVsZW1lbnQ6dGhpcy5lbGVtZW50LF9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzOltdLF9oZWxwZXI6bi5oZWxwZXJ8fG4uZ2hvc3R8fG4uYW5pbWF0ZT9uLmhlbHBlcnx8InVpLXJlc2l6YWJsZS1oZWxwZXIiOm51bGx9KSx0aGlzLmVsZW1lbnRbMF0ubm9kZU5hbWUubWF0Y2goL2NhbnZhc3x0ZXh0YXJlYXxpbnB1dHxzZWxlY3R8YnV0dG9ufGltZy9pKSYmKHRoaXMuZWxlbWVudC53cmFwKGUoJzxkaXYgY2xhc3M9InVpLXdyYXBwZXIiIHN0eWxlPSJvdmVyZmxvdzogaGlkZGVuOyI+PC9kaXY+JykuY3NzKHtwb3NpdGlvbjp0aGlzLmVsZW1lbnQuY3NzKCJwb3NpdGlvbiIpLHdpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLHRvcDp0aGlzLmVsZW1lbnQuY3NzKCJ0b3AiKSxsZWZ0OnRoaXMuZWxlbWVudC5jc3MoImxlZnQiKX0pKSx0aGlzLmVsZW1lbnQ9dGhpcy5lbGVtZW50LnBhcmVudCgpLmRhdGEoInJlc2l6YWJsZSIsdGhpcy5lbGVtZW50LmRhdGEoInJlc2l6YWJsZSIpKSx0aGlzLmVsZW1lbnRJc1dyYXBwZXI9ITAsdGhpcy5lbGVtZW50LmNzcyh7bWFyZ2luTGVmdDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpbkxlZnQiKSxtYXJnaW5Ub3A6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5Ub3AiKSxtYXJnaW5SaWdodDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpblJpZ2h0IiksbWFyZ2luQm90dG9tOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luQm90dG9tIil9KSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe21hcmdpbkxlZnQ6MCxtYXJnaW5Ub3A6MCxtYXJnaW5SaWdodDowLG1hcmdpbkJvdHRvbTowfSksdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlPXRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygicmVzaXplIiksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJyZXNpemUiLCJub25lIiksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5wdXNoKHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7cG9zaXRpb246InN0YXRpYyIsem9vbToxLGRpc3BsYXk6ImJsb2NrIn0pKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe21hcmdpbjp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpbiIpfSksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSksdGhpcy5oYW5kbGVzPW4uaGFuZGxlc3x8KGUoIi51aS1yZXNpemFibGUtaGFuZGxlIix0aGlzLmVsZW1lbnQpLmxlbmd0aD97bjoiLnVpLXJlc2l6YWJsZS1uIixlOiIudWktcmVzaXphYmxlLWUiLHM6Ii51aS1yZXNpemFibGUtcyIsdzoiLnVpLXJlc2l6YWJsZS13IixzZToiLnVpLXJlc2l6YWJsZS1zZSIsc3c6Ii51aS1yZXNpemFibGUtc3ciLG5lOiIudWktcmVzaXphYmxlLW5lIixudzoiLnVpLXJlc2l6YWJsZS1udyJ9OiJlLHMsc2UiKTtpZih0aGlzLmhhbmRsZXMuY29uc3RydWN0b3I9PVN0cmluZyl7dGhpcy5oYW5kbGVzPT0iYWxsIiYmKHRoaXMuaGFuZGxlcz0ibixlLHMsdyxzZSxzdyxuZSxudyIpO3ZhciByPXRoaXMuaGFuZGxlcy5zcGxpdCgiLCIpO3RoaXMuaGFuZGxlcz17fTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIHM9ZS50cmltKHJbaV0pLG89InVpLXJlc2l6YWJsZS0iK3MsdT1lKCc8ZGl2IGNsYXNzPSJ1aS1yZXNpemFibGUtaGFuZGxlICcrbysnIj48L2Rpdj4nKTt1LmNzcyh7ekluZGV4Om4uekluZGV4fSksInNlIj09cyYmdS5hZGRDbGFzcygidWktaWNvbiB1aS1pY29uLWdyaXBzbWFsbC1kaWFnb25hbC1zZSIpLHRoaXMuaGFuZGxlc1tzXT0iLnVpLXJlc2l6YWJsZS0iK3MsdGhpcy5lbGVtZW50LmFwcGVuZCh1KX19dGhpcy5fcmVuZGVyQXhpcz1mdW5jdGlvbih0KXt0PXR8fHRoaXMuZWxlbWVudDtmb3IodmFyIG4gaW4gdGhpcy5oYW5kbGVzKXt0aGlzLmhhbmRsZXNbbl0uY29uc3RydWN0b3I9PVN0cmluZyYmKHRoaXMuaGFuZGxlc1tuXT1lKHRoaXMuaGFuZGxlc1tuXSx0aGlzLmVsZW1lbnQpLnNob3coKSk7aWYodGhpcy5lbGVtZW50SXNXcmFwcGVyJiZ0aGlzLm9yaWdpbmFsRWxlbWVudFswXS5ub2RlTmFtZS5tYXRjaCgvdGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbi9pKSl7dmFyIHI9ZSh0aGlzLmhhbmRsZXNbbl0sdGhpcy5lbGVtZW50KSxpPTA7aT0vc3d8bmV8bnd8c2V8bnxzLy50ZXN0KG4pP3Iub3V0ZXJIZWlnaHQoKTpyLm91dGVyV2lkdGgoKTt2YXIgcz1bInBhZGRpbmciLC9uZXxud3xuLy50ZXN0KG4pPyJUb3AiOi9zZXxzd3xzLy50ZXN0KG4pPyJCb3R0b20iOi9eZSQvLnRlc3Qobik/IlJpZ2h0IjoiTGVmdCJdLmpvaW4oIiIpO3QuY3NzKHMsaSksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKX1pZighZSh0aGlzLmhhbmRsZXNbbl0pLmxlbmd0aCljb250aW51ZX19LHRoaXMuX3JlbmRlckF4aXModGhpcy5lbGVtZW50KSx0aGlzLl9oYW5kbGVzPWUoIi51aS1yZXNpemFibGUtaGFuZGxlIix0aGlzLmVsZW1lbnQpLmRpc2FibGVTZWxlY3Rpb24oKSx0aGlzLl9oYW5kbGVzLm1vdXNlb3ZlcihmdW5jdGlvbigpe2lmKCF0LnJlc2l6aW5nKXtpZih0aGlzLmNsYXNzTmFtZSl2YXIgZT10aGlzLmNsYXNzTmFtZS5tYXRjaCgvdWktcmVzaXphYmxlLShzZXxzd3xuZXxud3xufGV8c3x3KS9pKTt0LmF4aXM9ZSYmZVsxXT9lWzFdOiJzZSJ9fSksbi5hdXRvSGlkZSYmKHRoaXMuX2hhbmRsZXMuaGlkZSgpLGUodGhpcy5lbGVtZW50KS5hZGRDbGFzcygidWktcmVzaXphYmxlLWF1dG9oaWRlIikubW91c2VlbnRlcihmdW5jdGlvbigpe2lmKG4uZGlzYWJsZWQpcmV0dXJuO2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpLHQuX2hhbmRsZXMuc2hvdygpfSkubW91c2VsZWF2ZShmdW5jdGlvbigpe2lmKG4uZGlzYWJsZWQpcmV0dXJuO3QucmVzaXppbmd8fChlKHRoaXMpLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtYXV0b2hpZGUiKSx0Ll9oYW5kbGVzLmhpZGUoKSl9KSksdGhpcy5fbW91c2VJbml0KCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fbW91c2VEZXN0cm95KCk7dmFyIHQ9ZnVuY3Rpb24odCl7ZSh0KS5yZW1vdmVDbGFzcygidWktcmVzaXphYmxlIHVpLXJlc2l6YWJsZS1kaXNhYmxlZCB1aS1yZXNpemFibGUtcmVzaXppbmciKS5yZW1vdmVEYXRhKCJyZXNpemFibGUiKS5yZW1vdmVEYXRhKCJ1aS1yZXNpemFibGUiKS51bmJpbmQoIi5yZXNpemFibGUiKS5maW5kKCIudWktcmVzaXphYmxlLWhhbmRsZSIpLnJlbW92ZSgpfTtpZih0aGlzLmVsZW1lbnRJc1dyYXBwZXIpe3QodGhpcy5lbGVtZW50KTt2YXIgbj10aGlzLmVsZW1lbnQ7bi5hZnRlcih0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe3Bvc2l0aW9uOm4uY3NzKCJwb3NpdGlvbiIpLHdpZHRoOm4ub3V0ZXJXaWR0aCgpLGhlaWdodDpuLm91dGVySGVpZ2h0KCksdG9wOm4uY3NzKCJ0b3AiKSxsZWZ0Om4uY3NzKCJsZWZ0Iil9KSkucmVtb3ZlKCl9cmV0dXJuIHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygicmVzaXplIix0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGUpLHQodGhpcy5vcmlnaW5hbEVsZW1lbnQpLHRoaXN9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24odCl7dmFyIG49ITE7Zm9yKHZhciByIGluIHRoaXMuaGFuZGxlcyllKHRoaXMuaGFuZGxlc1tyXSlbMF09PXQudGFyZ2V0JiYobj0hMCk7cmV0dXJuIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmbn0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5vcHRpb25zLGk9dGhpcy5lbGVtZW50LnBvc2l0aW9uKCkscz10aGlzLmVsZW1lbnQ7dGhpcy5yZXNpemluZz0hMCx0aGlzLmRvY3VtZW50U2Nyb2xsPXt0b3A6ZShkb2N1bWVudCkuc2Nyb2xsVG9wKCksbGVmdDplKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCl9LChzLmlzKCIudWktZHJhZ2dhYmxlIil8fC9hYnNvbHV0ZS8udGVzdChzLmNzcygicG9zaXRpb24iKSkpJiZzLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6aS50b3AsbGVmdDppLmxlZnR9KSx0aGlzLl9yZW5kZXJQcm94eSgpO3ZhciBvPW4odGhpcy5oZWxwZXIuY3NzKCJsZWZ0IikpLHU9bih0aGlzLmhlbHBlci5jc3MoInRvcCIpKTtyLmNvbnRhaW5tZW50JiYobys9ZShyLmNvbnRhaW5tZW50KS5zY3JvbGxMZWZ0KCl8fDAsdSs9ZShyLmNvbnRhaW5tZW50KS5zY3JvbGxUb3AoKXx8MCksdGhpcy5vZmZzZXQ9dGhpcy5oZWxwZXIub2Zmc2V0KCksdGhpcy5wb3NpdGlvbj17bGVmdDpvLHRvcDp1fSx0aGlzLnNpemU9dGhpcy5faGVscGVyP3t3aWR0aDpzLm91dGVyV2lkdGgoKSxoZWlnaHQ6cy5vdXRlckhlaWdodCgpfTp7d2lkdGg6cy53aWR0aCgpLGhlaWdodDpzLmhlaWdodCgpfSx0aGlzLm9yaWdpbmFsU2l6ZT10aGlzLl9oZWxwZXI/e3dpZHRoOnMub3V0ZXJXaWR0aCgpLGhlaWdodDpzLm91dGVySGVpZ2h0KCl9Ont3aWR0aDpzLndpZHRoKCksaGVpZ2h0OnMuaGVpZ2h0KCl9LHRoaXMub3JpZ2luYWxQb3NpdGlvbj17bGVmdDpvLHRvcDp1fSx0aGlzLnNpemVEaWZmPXt3aWR0aDpzLm91dGVyV2lkdGgoKS1zLndpZHRoKCksaGVpZ2h0OnMub3V0ZXJIZWlnaHQoKS1zLmhlaWdodCgpfSx0aGlzLm9yaWdpbmFsTW91c2VQb3NpdGlvbj17bGVmdDp0LnBhZ2VYLHRvcDp0LnBhZ2VZfSx0aGlzLmFzcGVjdFJhdGlvPXR5cGVvZiByLmFzcGVjdFJhdGlvPT0ibnVtYmVyIj9yLmFzcGVjdFJhdGlvOnRoaXMub3JpZ2luYWxTaXplLndpZHRoL3RoaXMub3JpZ2luYWxTaXplLmhlaWdodHx8MTt2YXIgYT1lKCIudWktcmVzaXphYmxlLSIrdGhpcy5heGlzKS5jc3MoImN1cnNvciIpO3JldHVybiBlKCJib2R5IikuY3NzKCJjdXJzb3IiLGE9PSJhdXRvIj90aGlzLmF4aXMrIi1yZXNpemUiOmEpLHMuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1yZXNpemluZyIpLHRoaXMuX3Byb3BhZ2F0ZSgic3RhcnQiLHQpLCEwfSxfbW91c2VEcmFnOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGVscGVyLG49dGhpcy5vcHRpb25zLHI9e30saT10aGlzLHM9dGhpcy5vcmlnaW5hbE1vdXNlUG9zaXRpb24sbz10aGlzLmF4aXMsdT1lLnBhZ2VYLXMubGVmdHx8MCxhPWUucGFnZVktcy50b3B8fDAsZj10aGlzLl9jaGFuZ2Vbb107aWYoIWYpcmV0dXJuITE7dmFyIGw9Zi5hcHBseSh0aGlzLFtlLHUsYV0pO3RoaXMuX3VwZGF0ZVZpcnR1YWxCb3VuZGFyaWVzKGUuc2hpZnRLZXkpO2lmKHRoaXMuX2FzcGVjdFJhdGlvfHxlLnNoaWZ0S2V5KWw9dGhpcy5fdXBkYXRlUmF0aW8obCxlKTtyZXR1cm4gbD10aGlzLl9yZXNwZWN0U2l6ZShsLGUpLHRoaXMuX3Byb3BhZ2F0ZSgicmVzaXplIixlKSx0LmNzcyh7dG9wOnRoaXMucG9zaXRpb24udG9wKyJweCIsbGVmdDp0aGlzLnBvc2l0aW9uLmxlZnQrInB4Iix3aWR0aDp0aGlzLnNpemUud2lkdGgrInB4IixoZWlnaHQ6dGhpcy5zaXplLmhlaWdodCsicHgifSksIXRoaXMuX2hlbHBlciYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGgmJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCksdGhpcy5fdXBkYXRlQ2FjaGUobCksdGhpcy5fdHJpZ2dlcigicmVzaXplIixlLHRoaXMudWkoKSksITF9LF9tb3VzZVN0b3A6ZnVuY3Rpb24odCl7dGhpcy5yZXNpemluZz0hMTt2YXIgbj10aGlzLm9wdGlvbnMscj10aGlzO2lmKHRoaXMuX2hlbHBlcil7dmFyIGk9dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cyxzPWkubGVuZ3RoJiYvdGV4dGFyZWEvaS50ZXN0KGlbMF0ubm9kZU5hbWUpLG89cyYmZS51aS5oYXNTY3JvbGwoaVswXSwibGVmdCIpPzA6ci5zaXplRGlmZi5oZWlnaHQsdT1zPzA6ci5zaXplRGlmZi53aWR0aCxhPXt3aWR0aDpyLmhlbHBlci53aWR0aCgpLXUsaGVpZ2h0OnIuaGVscGVyLmhlaWdodCgpLW99LGY9cGFyc2VJbnQoci5lbGVtZW50LmNzcygibGVmdCIpLDEwKSsoci5wb3NpdGlvbi5sZWZ0LXIub3JpZ2luYWxQb3NpdGlvbi5sZWZ0KXx8bnVsbCxsPXBhcnNlSW50KHIuZWxlbWVudC5jc3MoInRvcCIpLDEwKSsoci5wb3NpdGlvbi50b3Atci5vcmlnaW5hbFBvc2l0aW9uLnRvcCl8fG51bGw7bi5hbmltYXRlfHx0aGlzLmVsZW1lbnQuY3NzKGUuZXh0ZW5kKGEse3RvcDpsLGxlZnQ6Zn0pKSxyLmhlbHBlci5oZWlnaHQoci5zaXplLmhlaWdodCksci5oZWxwZXIud2lkdGgoci5zaXplLndpZHRoKSx0aGlzLl9oZWxwZXImJiFuLmFuaW1hdGUmJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCl9cmV0dXJuIGUoImJvZHkiKS5jc3MoImN1cnNvciIsImF1dG8iKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZS1yZXNpemluZyIpLHRoaXMuX3Byb3BhZ2F0ZSgic3RvcCIsdCksdGhpcy5faGVscGVyJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSwhMX0sX3VwZGF0ZVZpcnR1YWxCb3VuZGFyaWVzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub3B0aW9ucyxuLGkscyxvLHU7dT17bWluV2lkdGg6cih0Lm1pbldpZHRoKT90Lm1pbldpZHRoOjAsbWF4V2lkdGg6cih0Lm1heFdpZHRoKT90Lm1heFdpZHRoOkluZmluaXR5LG1pbkhlaWdodDpyKHQubWluSGVpZ2h0KT90Lm1pbkhlaWdodDowLG1heEhlaWdodDpyKHQubWF4SGVpZ2h0KT90Lm1heEhlaWdodDpJbmZpbml0eX07aWYodGhpcy5fYXNwZWN0UmF0aW98fGUpbj11Lm1pbkhlaWdodCp0aGlzLmFzcGVjdFJhdGlvLHM9dS5taW5XaWR0aC90aGlzLmFzcGVjdFJhdGlvLGk9dS5tYXhIZWlnaHQqdGhpcy5hc3BlY3RSYXRpbyxvPXUubWF4V2lkdGgvdGhpcy5hc3BlY3RSYXRpbyxuPnUubWluV2lkdGgmJih1Lm1pbldpZHRoPW4pLHM+dS5taW5IZWlnaHQmJih1Lm1pbkhlaWdodD1zKSxpPHUubWF4V2lkdGgmJih1Lm1heFdpZHRoPWkpLG88dS5tYXhIZWlnaHQmJih1Lm1heEhlaWdodD1vKTt0aGlzLl92Qm91bmRhcmllcz11fSxfdXBkYXRlQ2FjaGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vcHRpb25zO3RoaXMub2Zmc2V0PXRoaXMuaGVscGVyLm9mZnNldCgpLHIoZS5sZWZ0KSYmKHRoaXMucG9zaXRpb24ubGVmdD1lLmxlZnQpLHIoZS50b3ApJiYodGhpcy5wb3NpdGlvbi50b3A9ZS50b3ApLHIoZS5oZWlnaHQpJiYodGhpcy5zaXplLmhlaWdodD1lLmhlaWdodCkscihlLndpZHRoKSYmKHRoaXMuc2l6ZS53aWR0aD1lLndpZHRoKX0sX3VwZGF0ZVJhdGlvOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5vcHRpb25zLGk9dGhpcy5wb3NpdGlvbixzPXRoaXMuc2l6ZSxvPXRoaXMuYXhpcztyZXR1cm4gcihlLmhlaWdodCk/ZS53aWR0aD1lLmhlaWdodCp0aGlzLmFzcGVjdFJhdGlvOnIoZS53aWR0aCkmJihlLmhlaWdodD1lLndpZHRoL3RoaXMuYXNwZWN0UmF0aW8pLG89PSJzdyImJihlLmxlZnQ9aS5sZWZ0KyhzLndpZHRoLWUud2lkdGgpLGUudG9wPW51bGwpLG89PSJudyImJihlLnRvcD1pLnRvcCsocy5oZWlnaHQtZS5oZWlnaHQpLGUubGVmdD1pLmxlZnQrKHMud2lkdGgtZS53aWR0aCkpLGV9LF9yZXNwZWN0U2l6ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuaGVscGVyLGk9dGhpcy5fdkJvdW5kYXJpZXMscz10aGlzLl9hc3BlY3RSYXRpb3x8dC5zaGlmdEtleSxvPXRoaXMuYXhpcyx1PXIoZS53aWR0aCkmJmkubWF4V2lkdGgmJmkubWF4V2lkdGg8ZS53aWR0aCxhPXIoZS5oZWlnaHQpJiZpLm1heEhlaWdodCYmaS5tYXhIZWlnaHQ8ZS5oZWlnaHQsZj1yKGUud2lkdGgpJiZpLm1pbldpZHRoJiZpLm1pbldpZHRoPmUud2lkdGgsbD1yKGUuaGVpZ2h0KSYmaS5taW5IZWlnaHQmJmkubWluSGVpZ2h0PmUuaGVpZ2h0O2YmJihlLndpZHRoPWkubWluV2lkdGgpLGwmJihlLmhlaWdodD1pLm1pbkhlaWdodCksdSYmKGUud2lkdGg9aS5tYXhXaWR0aCksYSYmKGUuaGVpZ2h0PWkubWF4SGVpZ2h0KTt2YXIgYz10aGlzLm9yaWdpbmFsUG9zaXRpb24ubGVmdCt0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aCxoPXRoaXMucG9zaXRpb24udG9wK3RoaXMuc2l6ZS5oZWlnaHQscD0vc3d8bnd8dy8udGVzdChvKSxkPS9ud3xuZXxuLy50ZXN0KG8pO2YmJnAmJihlLmxlZnQ9Yy1pLm1pbldpZHRoKSx1JiZwJiYoZS5sZWZ0PWMtaS5tYXhXaWR0aCksbCYmZCYmKGUudG9wPWgtaS5taW5IZWlnaHQpLGEmJmQmJihlLnRvcD1oLWkubWF4SGVpZ2h0KTt2YXIgdj0hZS53aWR0aCYmIWUuaGVpZ2h0O3JldHVybiB2JiYhZS5sZWZ0JiZlLnRvcD9lLnRvcD1udWxsOnYmJiFlLnRvcCYmZS5sZWZ0JiYoZS5sZWZ0PW51bGwpLGV9LF9wcm9wb3J0aW9uYWxseVJlc2l6ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucztpZighdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGgpcmV0dXJuO3ZhciBuPXRoaXMuaGVscGVyfHx0aGlzLmVsZW1lbnQ7Zm9yKHZhciByPTA7cjx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aDtyKyspe3ZhciBpPXRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHNbcl07aWYoIXRoaXMuYm9yZGVyRGlmKXt2YXIgcz1baS5jc3MoImJvcmRlclRvcFdpZHRoIiksaS5jc3MoImJvcmRlclJpZ2h0V2lkdGgiKSxpLmNzcygiYm9yZGVyQm90dG9tV2lkdGgiKSxpLmNzcygiYm9yZGVyTGVmdFdpZHRoIildLG89W2kuY3NzKCJwYWRkaW5nVG9wIiksaS5jc3MoInBhZGRpbmdSaWdodCIpLGkuY3NzKCJwYWRkaW5nQm90dG9tIiksaS5jc3MoInBhZGRpbmdMZWZ0IildO3RoaXMuYm9yZGVyRGlmPWUubWFwKHMsZnVuY3Rpb24oZSx0KXt2YXIgbj1wYXJzZUludChlLDEwKXx8MCxyPXBhcnNlSW50KG9bdF0sMTApfHwwO3JldHVybiBuK3J9KX1pLmNzcyh7aGVpZ2h0Om4uaGVpZ2h0KCktdGhpcy5ib3JkZXJEaWZbMF0tdGhpcy5ib3JkZXJEaWZbMl18fDAsd2lkdGg6bi53aWR0aCgpLXRoaXMuYm9yZGVyRGlmWzFdLXRoaXMuYm9yZGVyRGlmWzNdfHwwfSl9fSxfcmVuZGVyUHJveHk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQsbj10aGlzLm9wdGlvbnM7dGhpcy5lbGVtZW50T2Zmc2V0PXQub2Zmc2V0KCk7aWYodGhpcy5faGVscGVyKXt0aGlzLmhlbHBlcj10aGlzLmhlbHBlcnx8ZSgnPGRpdiBzdHlsZT0ib3ZlcmZsb3c6aGlkZGVuOyI+PC9kaXY+Jyk7dmFyIHI9ZS5icm93c2VyLm1zaWUmJmUuYnJvd3Nlci52ZXJzaW9uPDcsaT1yPzE6MCxzPXI/MjotMTt0aGlzLmhlbHBlci5hZGRDbGFzcyh0aGlzLl9oZWxwZXIpLmNzcyh7d2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKStzLGhlaWdodDp0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKStzLHBvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDp0aGlzLmVsZW1lbnRPZmZzZXQubGVmdC1pKyJweCIsdG9wOnRoaXMuZWxlbWVudE9mZnNldC50b3AtaSsicHgiLHpJbmRleDorK24uekluZGV4fSksdGhpcy5oZWxwZXIuYXBwZW5kVG8oImJvZHkiKS5kaXNhYmxlU2VsZWN0aW9uKCl9ZWxzZSB0aGlzLmhlbHBlcj10aGlzLmVsZW1lbnR9LF9jaGFuZ2U6e2U6ZnVuY3Rpb24oZSx0LG4pe3JldHVybnt3aWR0aDp0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aCt0fX0sdzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5vcHRpb25zLGk9dGhpcy5vcmlnaW5hbFNpemUscz10aGlzLm9yaWdpbmFsUG9zaXRpb247cmV0dXJue2xlZnQ6cy5sZWZ0K3Qsd2lkdGg6aS53aWR0aC10fX0sbjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5vcHRpb25zLGk9dGhpcy5vcmlnaW5hbFNpemUscz10aGlzLm9yaWdpbmFsUG9zaXRpb247cmV0dXJue3RvcDpzLnRvcCtuLGhlaWdodDppLmhlaWdodC1ufX0sczpmdW5jdGlvbihlLHQsbil7cmV0dXJue2hlaWdodDp0aGlzLm9yaWdpbmFsU2l6ZS5oZWlnaHQrbn19LHNlOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gZS5leHRlbmQodGhpcy5fY2hhbmdlLnMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS5lLmFwcGx5KHRoaXMsW3QsbixyXSkpfSxzdzpmdW5jdGlvbih0LG4scil7cmV0dXJuIGUuZXh0ZW5kKHRoaXMuX2NoYW5nZS5zLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2Uudy5hcHBseSh0aGlzLFt0LG4scl0pKX0sbmU6ZnVuY3Rpb24odCxuLHIpe3JldHVybiBlLmV4dGVuZCh0aGlzLl9jaGFuZ2Uubi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLmUuYXBwbHkodGhpcyxbdCxuLHJdKSl9LG53OmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gZS5leHRlbmQodGhpcy5fY2hhbmdlLm4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS53LmFwcGx5KHRoaXMsW3QsbixyXSkpfX0sX3Byb3BhZ2F0ZTpmdW5jdGlvbih0LG4pe2UudWkucGx1Z2luLmNhbGwodGhpcyx0LFtuLHRoaXMudWkoKV0pLHQhPSJyZXNpemUiJiZ0aGlzLl90cmlnZ2VyKHQsbix0aGlzLnVpKCkpfSxwbHVnaW5zOnt9LHVpOmZ1bmN0aW9uKCl7cmV0dXJue29yaWdpbmFsRWxlbWVudDp0aGlzLm9yaWdpbmFsRWxlbWVudCxlbGVtZW50OnRoaXMuZWxlbWVudCxoZWxwZXI6dGhpcy5oZWxwZXIscG9zaXRpb246dGhpcy5wb3NpdGlvbixzaXplOnRoaXMuc2l6ZSxvcmlnaW5hbFNpemU6dGhpcy5vcmlnaW5hbFNpemUsb3JpZ2luYWxQb3NpdGlvbjp0aGlzLm9yaWdpbmFsUG9zaXRpb259fX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiYWxzb1Jlc2l6ZSIse3N0YXJ0OmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxpPXIub3B0aW9ucyxzPWZ1bmN0aW9uKHQpe2UodCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dC5kYXRhKCJyZXNpemFibGUtYWxzb3Jlc2l6ZSIse3dpZHRoOnBhcnNlSW50KHQud2lkdGgoKSwxMCksaGVpZ2h0OnBhcnNlSW50KHQuaGVpZ2h0KCksMTApLGxlZnQ6cGFyc2VJbnQodC5jc3MoImxlZnQiKSwxMCksdG9wOnBhcnNlSW50KHQuY3NzKCJ0b3AiKSwxMCl9KX0pfTt0eXBlb2YgaS5hbHNvUmVzaXplPT0ib2JqZWN0IiYmIWkuYWxzb1Jlc2l6ZS5wYXJlbnROb2RlP2kuYWxzb1Jlc2l6ZS5sZW5ndGg/KGkuYWxzb1Jlc2l6ZT1pLmFsc29SZXNpemVbMF0scyhpLmFsc29SZXNpemUpKTplLmVhY2goaS5hbHNvUmVzaXplLGZ1bmN0aW9uKGUpe3MoZSl9KTpzKGkuYWxzb1Jlc2l6ZSl9LHJlc2l6ZTpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgicmVzaXphYmxlIiksaT1yLm9wdGlvbnMscz1yLm9yaWdpbmFsU2l6ZSxvPXIub3JpZ2luYWxQb3NpdGlvbix1PXtoZWlnaHQ6ci5zaXplLmhlaWdodC1zLmhlaWdodHx8MCx3aWR0aDpyLnNpemUud2lkdGgtcy53aWR0aHx8MCx0b3A6ci5wb3NpdGlvbi50b3Atby50b3B8fDAsbGVmdDpyLnBvc2l0aW9uLmxlZnQtby5sZWZ0fHwwfSxhPWZ1bmN0aW9uKHQscil7ZSh0KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKSxpPWUodGhpcykuZGF0YSgicmVzaXphYmxlLWFsc29yZXNpemUiKSxzPXt9LG89ciYmci5sZW5ndGg/cjp0LnBhcmVudHMobi5vcmlnaW5hbEVsZW1lbnRbMF0pLmxlbmd0aD9bIndpZHRoIiwiaGVpZ2h0Il06WyJ3aWR0aCIsImhlaWdodCIsInRvcCIsImxlZnQiXTtlLmVhY2gobyxmdW5jdGlvbihlLHQpe3ZhciBuPShpW3RdfHwwKSsodVt0XXx8MCk7biYmbj49MCYmKHNbdF09bnx8bnVsbCl9KSx0LmNzcyhzKX0pfTt0eXBlb2YgaS5hbHNvUmVzaXplPT0ib2JqZWN0IiYmIWkuYWxzb1Jlc2l6ZS5ub2RlVHlwZT9lLmVhY2goaS5hbHNvUmVzaXplLGZ1bmN0aW9uKGUsdCl7YShlLHQpfSk6YShpLmFsc29SZXNpemUpfSxzdG9wOmZ1bmN0aW9uKHQsbil7ZSh0aGlzKS5yZW1vdmVEYXRhKCJyZXNpemFibGUtYWxzb3Jlc2l6ZSIpfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiYW5pbWF0ZSIse3N0b3A6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGk9ci5vcHRpb25zLHM9ci5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cyxvPXMubGVuZ3RoJiYvdGV4dGFyZWEvaS50ZXN0KHNbMF0ubm9kZU5hbWUpLHU9byYmZS51aS5oYXNTY3JvbGwoc1swXSwibGVmdCIpPzA6ci5zaXplRGlmZi5oZWlnaHQsYT1vPzA6ci5zaXplRGlmZi53aWR0aCxmPXt3aWR0aDpyLnNpemUud2lkdGgtYSxoZWlnaHQ6ci5zaXplLmhlaWdodC11fSxsPXBhcnNlSW50KHIuZWxlbWVudC5jc3MoImxlZnQiKSwxMCkrKHIucG9zaXRpb24ubGVmdC1yLm9yaWdpbmFsUG9zaXRpb24ubGVmdCl8fG51bGwsYz1wYXJzZUludChyLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCkrKHIucG9zaXRpb24udG9wLXIub3JpZ2luYWxQb3NpdGlvbi50b3ApfHxudWxsO3IuZWxlbWVudC5hbmltYXRlKGUuZXh0ZW5kKGYsYyYmbD97dG9wOmMsbGVmdDpsfTp7fSkse2R1cmF0aW9uOmkuYW5pbWF0ZUR1cmF0aW9uLGVhc2luZzppLmFuaW1hdGVFYXNpbmcsc3RlcDpmdW5jdGlvbigpe3ZhciBuPXt3aWR0aDpwYXJzZUludChyLmVsZW1lbnQuY3NzKCJ3aWR0aCIpLDEwKSxoZWlnaHQ6cGFyc2VJbnQoci5lbGVtZW50LmNzcygiaGVpZ2h0IiksMTApLHRvcDpwYXJzZUludChyLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCksbGVmdDpwYXJzZUludChyLmVsZW1lbnQuY3NzKCJsZWZ0IiksMTApfTtzJiZzLmxlbmd0aCYmZShzWzBdKS5jc3Moe3dpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0fSksci5fdXBkYXRlQ2FjaGUobiksci5fcHJvcGFnYXRlKCJyZXNpemUiLHQpfX0pfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiY29udGFpbm1lbnQiLHtzdGFydDpmdW5jdGlvbih0LHIpe3ZhciBpPWUodGhpcykuZGF0YSgicmVzaXphYmxlIikscz1pLm9wdGlvbnMsbz1pLmVsZW1lbnQsdT1zLmNvbnRhaW5tZW50LGE9dSBpbnN0YW5jZW9mIGU/dS5nZXQoMCk6L3BhcmVudC8udGVzdCh1KT9vLnBhcmVudCgpLmdldCgwKTp1O2lmKCFhKXJldHVybjtpLmNvbnRhaW5lckVsZW1lbnQ9ZShhKTtpZigvZG9jdW1lbnQvLnRlc3QodSl8fHU9PWRvY3VtZW50KWkuY29udGFpbmVyT2Zmc2V0PXtsZWZ0OjAsdG9wOjB9LGkuY29udGFpbmVyUG9zaXRpb249e2xlZnQ6MCx0b3A6MH0saS5wYXJlbnREYXRhPXtlbGVtZW50OmUoZG9jdW1lbnQpLGxlZnQ6MCx0b3A6MCx3aWR0aDplKGRvY3VtZW50KS53aWR0aCgpLGhlaWdodDplKGRvY3VtZW50KS5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodH07ZWxzZXt2YXIgZj1lKGEpLGw9W107ZShbIlRvcCIsIlJpZ2h0IiwiTGVmdCIsIkJvdHRvbSJdKS5lYWNoKGZ1bmN0aW9uKGUsdCl7bFtlXT1uKGYuY3NzKCJwYWRkaW5nIit0KSl9KSxpLmNvbnRhaW5lck9mZnNldD1mLm9mZnNldCgpLGkuY29udGFpbmVyUG9zaXRpb249Zi5wb3NpdGlvbigpLGkuY29udGFpbmVyU2l6ZT17aGVpZ2h0OmYuaW5uZXJIZWlnaHQoKS1sWzNdLHdpZHRoOmYuaW5uZXJXaWR0aCgpLWxbMV19O3ZhciBjPWkuY29udGFpbmVyT2Zmc2V0LGg9aS5jb250YWluZXJTaXplLmhlaWdodCxwPWkuY29udGFpbmVyU2l6ZS53aWR0aCxkPWUudWkuaGFzU2Nyb2xsKGEsImxlZnQiKT9hLnNjcm9sbFdpZHRoOnAsdj1lLnVpLmhhc1Njcm9sbChhKT9hLnNjcm9sbEhlaWdodDpoO2kucGFyZW50RGF0YT17ZWxlbWVudDphLGxlZnQ6Yy5sZWZ0LHRvcDpjLnRvcCx3aWR0aDpkLGhlaWdodDp2fX19LHJlc2l6ZTpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgicmVzaXphYmxlIiksaT1yLm9wdGlvbnMscz1yLmNvbnRhaW5lclNpemUsbz1yLmNvbnRhaW5lck9mZnNldCx1PXIuc2l6ZSxhPXIucG9zaXRpb24sZj1yLl9hc3BlY3RSYXRpb3x8dC5zaGlmdEtleSxsPXt0b3A6MCxsZWZ0OjB9LGM9ci5jb250YWluZXJFbGVtZW50O2NbMF0hPWRvY3VtZW50JiYvc3RhdGljLy50ZXN0KGMuY3NzKCJwb3NpdGlvbiIpKSYmKGw9byksYS5sZWZ0PChyLl9oZWxwZXI/by5sZWZ0OjApJiYoci5zaXplLndpZHRoPXIuc2l6ZS53aWR0aCsoci5faGVscGVyP3IucG9zaXRpb24ubGVmdC1vLmxlZnQ6ci5wb3NpdGlvbi5sZWZ0LWwubGVmdCksZiYmKHIuc2l6ZS5oZWlnaHQ9ci5zaXplLndpZHRoL3IuYXNwZWN0UmF0aW8pLHIucG9zaXRpb24ubGVmdD1pLmhlbHBlcj9vLmxlZnQ6MCksYS50b3A8KHIuX2hlbHBlcj9vLnRvcDowKSYmKHIuc2l6ZS5oZWlnaHQ9ci5zaXplLmhlaWdodCsoci5faGVscGVyP3IucG9zaXRpb24udG9wLW8udG9wOnIucG9zaXRpb24udG9wKSxmJiYoci5zaXplLndpZHRoPXIuc2l6ZS5oZWlnaHQqci5hc3BlY3RSYXRpbyksci5wb3NpdGlvbi50b3A9ci5faGVscGVyP28udG9wOjApLHIub2Zmc2V0LmxlZnQ9ci5wYXJlbnREYXRhLmxlZnQrci5wb3NpdGlvbi5sZWZ0LHIub2Zmc2V0LnRvcD1yLnBhcmVudERhdGEudG9wK3IucG9zaXRpb24udG9wO3ZhciBoPU1hdGguYWJzKChyLl9oZWxwZXI/ci5vZmZzZXQubGVmdC1sLmxlZnQ6ci5vZmZzZXQubGVmdC1sLmxlZnQpK3Iuc2l6ZURpZmYud2lkdGgpLHA9TWF0aC5hYnMoKHIuX2hlbHBlcj9yLm9mZnNldC50b3AtbC50b3A6ci5vZmZzZXQudG9wLW8udG9wKStyLnNpemVEaWZmLmhlaWdodCksZD1yLmNvbnRhaW5lckVsZW1lbnQuZ2V0KDApPT1yLmVsZW1lbnQucGFyZW50KCkuZ2V0KDApLHY9L3JlbGF0aXZlfGFic29sdXRlLy50ZXN0KHIuY29udGFpbmVyRWxlbWVudC5jc3MoInBvc2l0aW9uIikpO2QmJnYmJihoLT1yLnBhcmVudERhdGEubGVmdCksaCtyLnNpemUud2lkdGg+PXIucGFyZW50RGF0YS53aWR0aCYmKHIuc2l6ZS53aWR0aD1yLnBhcmVudERhdGEud2lkdGgtaCxmJiYoci5zaXplLmhlaWdodD1yLnNpemUud2lkdGgvci5hc3BlY3RSYXRpbykpLHArci5zaXplLmhlaWdodD49ci5wYXJlbnREYXRhLmhlaWdodCYmKHIuc2l6ZS5oZWlnaHQ9ci5wYXJlbnREYXRhLmhlaWdodC1wLGYmJihyLnNpemUud2lkdGg9ci5zaXplLmhlaWdodCpyLmFzcGVjdFJhdGlvKSl9LHN0b3A6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGk9ci5vcHRpb25zLHM9ci5wb3NpdGlvbixvPXIuY29udGFpbmVyT2Zmc2V0LHU9ci5jb250YWluZXJQb3NpdGlvbixhPXIuY29udGFpbmVyRWxlbWVudCxmPWUoci5oZWxwZXIpLGw9Zi5vZmZzZXQoKSxjPWYub3V0ZXJXaWR0aCgpLXIuc2l6ZURpZmYud2lkdGgsaD1mLm91dGVySGVpZ2h0KCktci5zaXplRGlmZi5oZWlnaHQ7ci5faGVscGVyJiYhaS5hbmltYXRlJiYvcmVsYXRpdmUvLnRlc3QoYS5jc3MoInBvc2l0aW9uIikpJiZlKHRoaXMpLmNzcyh7bGVmdDpsLmxlZnQtdS5sZWZ0LW8ubGVmdCx3aWR0aDpjLGhlaWdodDpofSksci5faGVscGVyJiYhaS5hbmltYXRlJiYvc3RhdGljLy50ZXN0KGEuY3NzKCJwb3NpdGlvbiIpKSYmZSh0aGlzKS5jc3Moe2xlZnQ6bC5sZWZ0LXUubGVmdC1vLmxlZnQsd2lkdGg6YyxoZWlnaHQ6aH0pfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiZ2hvc3QiLHtzdGFydDpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgicmVzaXphYmxlIiksaT1yLm9wdGlvbnMscz1yLnNpemU7ci5naG9zdD1yLm9yaWdpbmFsRWxlbWVudC5jbG9uZSgpLHIuZ2hvc3QuY3NzKHtvcGFjaXR5Oi4yNSxkaXNwbGF5OiJibG9jayIscG9zaXRpb246InJlbGF0aXZlIixoZWlnaHQ6cy5oZWlnaHQsd2lkdGg6cy53aWR0aCxtYXJnaW46MCxsZWZ0OjAsdG9wOjB9KS5hZGRDbGFzcygidWktcmVzaXphYmxlLWdob3N0IikuYWRkQ2xhc3ModHlwZW9mIGkuZ2hvc3Q9PSJzdHJpbmciP2kuZ2hvc3Q6IiIpLHIuZ2hvc3QuYXBwZW5kVG8oci5oZWxwZXIpfSxyZXNpemU6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGk9ci5vcHRpb25zO3IuZ2hvc3QmJnIuZ2hvc3QuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUiLGhlaWdodDpyLnNpemUuaGVpZ2h0LHdpZHRoOnIuc2l6ZS53aWR0aH0pfSxzdG9wOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxpPXIub3B0aW9ucztyLmdob3N0JiZyLmhlbHBlciYmci5oZWxwZXIuZ2V0KDApLnJlbW92ZUNoaWxkKHIuZ2hvc3QuZ2V0KDApKX19KSxlLnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsImdyaWQiLHtyZXNpemU6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGk9ci5vcHRpb25zLHM9ci5zaXplLG89ci5vcmlnaW5hbFNpemUsdT1yLm9yaWdpbmFsUG9zaXRpb24sYT1yLmF4aXMsZj1pLl9hc3BlY3RSYXRpb3x8dC5zaGlmdEtleTtpLmdyaWQ9dHlwZW9mIGkuZ3JpZD09Im51bWJlciI/W2kuZ3JpZCxpLmdyaWRdOmkuZ3JpZDt2YXIgbD1NYXRoLnJvdW5kKChzLndpZHRoLW8ud2lkdGgpLyhpLmdyaWRbMF18fDEpKSooaS5ncmlkWzBdfHwxKSxjPU1hdGgucm91bmQoKHMuaGVpZ2h0LW8uaGVpZ2h0KS8oaS5ncmlkWzFdfHwxKSkqKGkuZ3JpZFsxXXx8MSk7L14oc2V8c3xlKSQvLnRlc3QoYSk/KHIuc2l6ZS53aWR0aD1vLndpZHRoK2wsci5zaXplLmhlaWdodD1vLmhlaWdodCtjKTovXihuZSkkLy50ZXN0KGEpPyhyLnNpemUud2lkdGg9by53aWR0aCtsLHIuc2l6ZS5oZWlnaHQ9by5oZWlnaHQrYyxyLnBvc2l0aW9uLnRvcD11LnRvcC1jKTovXihzdykkLy50ZXN0KGEpPyhyLnNpemUud2lkdGg9by53aWR0aCtsLHIuc2l6ZS5oZWlnaHQ9by5oZWlnaHQrYyxyLnBvc2l0aW9uLmxlZnQ9dS5sZWZ0LWwpOihyLnNpemUud2lkdGg9by53aWR0aCtsLHIuc2l6ZS5oZWlnaHQ9by5oZWlnaHQrYyxyLnBvc2l0aW9uLnRvcD11LnRvcC1jLHIucG9zaXRpb24ubGVmdD11LmxlZnQtbCl9fSk7dmFyIG49ZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfHwwfSxyPWZ1bmN0aW9uKGUpe3JldHVybiFpc05hTihwYXJzZUludChlLDEwKSl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLndpZGdldCgidWkuc2VsZWN0YWJsZSIsZS51aS5tb3VzZSx7dmVyc2lvbjoiMS45LjAiLG9wdGlvbnM6e2FwcGVuZFRvOiJib2R5IixhdXRvUmVmcmVzaDohMCxkaXN0YW5jZTowLGZpbHRlcjoiKiIsdG9sZXJhbmNlOiJ0b3VjaCJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc2VsZWN0YWJsZSIpLHRoaXMuZHJhZ2dlZD0hMTt2YXIgbjt0aGlzLnJlZnJlc2g9ZnVuY3Rpb24oKXtuPWUodC5vcHRpb25zLmZpbHRlcix0LmVsZW1lbnRbMF0pLG4uYWRkQ2xhc3MoInVpLXNlbGVjdGVlIiksbi5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKSxuPXQub2Zmc2V0KCk7ZS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIse2VsZW1lbnQ6dGhpcywkZWxlbWVudDp0LGxlZnQ6bi5sZWZ0LHRvcDpuLnRvcCxyaWdodDpuLmxlZnQrdC5vdXRlcldpZHRoKCksYm90dG9tOm4udG9wK3Qub3V0ZXJIZWlnaHQoKSxzdGFydHNlbGVjdGVkOiExLHNlbGVjdGVkOnQuaGFzQ2xhc3MoInVpLXNlbGVjdGVkIiksc2VsZWN0aW5nOnQuaGFzQ2xhc3MoInVpLXNlbGVjdGluZyIpLHVuc2VsZWN0aW5nOnQuaGFzQ2xhc3MoInVpLXVuc2VsZWN0aW5nIil9KX0pfSx0aGlzLnJlZnJlc2goKSx0aGlzLnNlbGVjdGVlcz1uLmFkZENsYXNzKCJ1aS1zZWxlY3RlZSIpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMuaGVscGVyPWUoIjxkaXYgY2xhc3M9J3VpLXNlbGVjdGFibGUtaGVscGVyJz48L2Rpdj4iKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVlcy5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWUiKS5yZW1vdmVEYXRhKCJzZWxlY3RhYmxlLWl0ZW0iKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGFibGUgdWktc2VsZWN0YWJsZS1kaXNhYmxlZCIpLHRoaXMuX21vdXNlRGVzdHJveSgpfSxfbW91c2VTdGFydDpmdW5jdGlvbih0KXt2YXIgbj10aGlzO3RoaXMub3Bvcz1bdC5wYWdlWCx0LnBhZ2VZXTtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWQpcmV0dXJuO3ZhciByPXRoaXMub3B0aW9uczt0aGlzLnNlbGVjdGVlcz1lKHIuZmlsdGVyLHRoaXMuZWxlbWVudFswXSksdGhpcy5fdHJpZ2dlcigic3RhcnQiLHQpLGUoci5hcHBlbmRUbykuYXBwZW5kKHRoaXMuaGVscGVyKSx0aGlzLmhlbHBlci5jc3Moe2xlZnQ6dC5jbGllbnRYLHRvcDp0LmNsaWVudFksd2lkdGg6MCxoZWlnaHQ6MH0pLHIuYXV0b1JlZnJlc2gmJnRoaXMucmVmcmVzaCgpLHRoaXMuc2VsZWN0ZWVzLmZpbHRlcigiLnVpLXNlbGVjdGVkIikuZWFjaChmdW5jdGlvbigpe3ZhciByPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKTtyLnN0YXJ0c2VsZWN0ZWQ9ITAsIXQubWV0YUtleSYmIXQuY3RybEtleSYmKHIuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGVkIiksci5zZWxlY3RlZD0hMSxyLiRlbGVtZW50LmFkZENsYXNzKCJ1aS11bnNlbGVjdGluZyIpLHIudW5zZWxlY3Rpbmc9ITAsbi5fdHJpZ2dlcigidW5zZWxlY3RpbmciLHQse3Vuc2VsZWN0aW5nOnIuZWxlbWVudH0pKX0pLGUodC50YXJnZXQpLnBhcmVudHMoKS5hbmRTZWxmKCkuZWFjaChmdW5jdGlvbigpe3ZhciByPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKTtpZihyKXt2YXIgaT0hdC5tZXRhS2V5JiYhdC5jdHJsS2V5fHwhci4kZWxlbWVudC5oYXNDbGFzcygidWktc2VsZWN0ZWQiKTtyZXR1cm4gci4kZWxlbWVudC5yZW1vdmVDbGFzcyhpPyJ1aS11bnNlbGVjdGluZyI6InVpLXNlbGVjdGVkIikuYWRkQ2xhc3MoaT8idWktc2VsZWN0aW5nIjoidWktdW5zZWxlY3RpbmciKSxyLnVuc2VsZWN0aW5nPSFpLHIuc2VsZWN0aW5nPWksci5zZWxlY3RlZD1pLGk/bi5fdHJpZ2dlcigic2VsZWN0aW5nIix0LHtzZWxlY3Rpbmc6ci5lbGVtZW50fSk6bi5fdHJpZ2dlcigidW5zZWxlY3RpbmciLHQse3Vuc2VsZWN0aW5nOnIuZWxlbWVudH0pLCExfX0pfSxfbW91c2VEcmFnOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7dGhpcy5kcmFnZ2VkPSEwO2lmKHRoaXMub3B0aW9ucy5kaXNhYmxlZClyZXR1cm47dmFyIHI9dGhpcy5vcHRpb25zLGk9dGhpcy5vcG9zWzBdLHM9dGhpcy5vcG9zWzFdLG89dC5wYWdlWCx1PXQucGFnZVk7aWYoaT5vKXt2YXIgYT1vO289aSxpPWF9aWYocz51KXt2YXIgYT11O3U9cyxzPWF9cmV0dXJuIHRoaXMuaGVscGVyLmNzcyh7bGVmdDppLHRvcDpzLHdpZHRoOm8taSxoZWlnaHQ6dS1zfSksdGhpcy5zZWxlY3RlZXMuZWFjaChmdW5jdGlvbigpe3ZhciBhPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKTtpZighYXx8YS5lbGVtZW50PT1uLmVsZW1lbnRbMF0pcmV0dXJuO3ZhciBmPSExO3IudG9sZXJhbmNlPT0idG91Y2giP2Y9IShhLmxlZnQ+b3x8YS5yaWdodDxpfHxhLnRvcD51fHxhLmJvdHRvbTxzKTpyLnRvbGVyYW5jZT09ImZpdCImJihmPWEubGVmdD5pJiZhLnJpZ2h0PG8mJmEudG9wPnMmJmEuYm90dG9tPHUpLGY/KGEuc2VsZWN0ZWQmJihhLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZCIpLGEuc2VsZWN0ZWQ9ITEpLGEudW5zZWxlY3RpbmcmJihhLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS11bnNlbGVjdGluZyIpLGEudW5zZWxlY3Rpbmc9ITEpLGEuc2VsZWN0aW5nfHwoYS4kZWxlbWVudC5hZGRDbGFzcygidWktc2VsZWN0aW5nIiksYS5zZWxlY3Rpbmc9ITAsbi5fdHJpZ2dlcigic2VsZWN0aW5nIix0LHtzZWxlY3Rpbmc6YS5lbGVtZW50fSkpKTooYS5zZWxlY3RpbmcmJigodC5tZXRhS2V5fHx0LmN0cmxLZXkpJiZhLnN0YXJ0c2VsZWN0ZWQ/KGEuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGluZyIpLGEuc2VsZWN0aW5nPSExLGEuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXNlbGVjdGVkIiksYS5zZWxlY3RlZD0hMCk6KGEuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGluZyIpLGEuc2VsZWN0aW5nPSExLGEuc3RhcnRzZWxlY3RlZCYmKGEuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXVuc2VsZWN0aW5nIiksYS51bnNlbGVjdGluZz0hMCksbi5fdHJpZ2dlcigidW5zZWxlY3RpbmciLHQse3Vuc2VsZWN0aW5nOmEuZWxlbWVudH0pKSksYS5zZWxlY3RlZCYmIXQubWV0YUtleSYmIXQuY3RybEtleSYmIWEuc3RhcnRzZWxlY3RlZCYmKGEuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGVkIiksYS5zZWxlY3RlZD0hMSxhLiRlbGVtZW50LmFkZENsYXNzKCJ1aS11bnNlbGVjdGluZyIpLGEudW5zZWxlY3Rpbmc9ITAsbi5fdHJpZ2dlcigidW5zZWxlY3RpbmciLHQse3Vuc2VsZWN0aW5nOmEuZWxlbWVudH0pKSl9KSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0KXt2YXIgbj10aGlzO3RoaXMuZHJhZ2dlZD0hMTt2YXIgcj10aGlzLm9wdGlvbnM7cmV0dXJuIGUoIi51aS11bnNlbGVjdGluZyIsdGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIpO3IuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXVuc2VsZWN0aW5nIiksci51bnNlbGVjdGluZz0hMSxyLnN0YXJ0c2VsZWN0ZWQ9ITEsbi5fdHJpZ2dlcigidW5zZWxlY3RlZCIsdCx7dW5zZWxlY3RlZDpyLmVsZW1lbnR9KX0pLGUoIi51aS1zZWxlY3RpbmciLHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe3ZhciByPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKTtyLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RpbmciKS5hZGRDbGFzcygidWktc2VsZWN0ZWQiKSxyLnNlbGVjdGluZz0hMSxyLnNlbGVjdGVkPSEwLHIuc3RhcnRzZWxlY3RlZD0hMCxuLl90cmlnZ2VyKCJzZWxlY3RlZCIsdCx7c2VsZWN0ZWQ6ci5lbGVtZW50fSl9KSx0aGlzLl90cmlnZ2VyKCJzdG9wIix0KSx0aGlzLmhlbHBlci5yZW1vdmUoKSwhMX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7dmFyIG49NTtlLndpZGdldCgidWkuc2xpZGVyIixlLnVpLm1vdXNlLHt2ZXJzaW9uOiIxLjkuMCIsd2lkZ2V0RXZlbnRQcmVmaXg6InNsaWRlIixvcHRpb25zOnthbmltYXRlOiExLGRpc3RhbmNlOjAsbWF4OjEwMCxtaW46MCxvcmllbnRhdGlvbjoiaG9yaXpvbnRhbCIscmFuZ2U6ITEsc3RlcDoxLHZhbHVlOjAsdmFsdWVzOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdCxyPXRoaXMub3B0aW9ucyxpPXRoaXMuZWxlbWVudC5maW5kKCIudWktc2xpZGVyLWhhbmRsZSIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKSxzPSI8YSBjbGFzcz0ndWktc2xpZGVyLWhhbmRsZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwnIGhyZWY9JyMnPjwvYT4iLG89ci52YWx1ZXMmJnIudmFsdWVzLmxlbmd0aHx8MSx1PVtdO3RoaXMuX2tleVNsaWRpbmc9ITEsdGhpcy5fbW91c2VTbGlkaW5nPSExLHRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5faGFuZGxlSW5kZXg9bnVsbCx0aGlzLl9kZXRlY3RPcmllbnRhdGlvbigpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc2xpZGVyIHVpLXNsaWRlci0iK3RoaXMub3JpZW50YXRpb24rIiB1aS13aWRnZXQiKyIgdWktd2lkZ2V0LWNvbnRlbnQiKyIgdWktY29ybmVyLWFsbCIrKHIuZGlzYWJsZWQ/IiB1aS1zbGlkZXItZGlzYWJsZWQgdWktZGlzYWJsZWQiOiIiKSksdGhpcy5yYW5nZT1lKFtdKSxyLnJhbmdlJiYoci5yYW5nZT09PSEwJiYoci52YWx1ZXN8fChyLnZhbHVlcz1bdGhpcy5fdmFsdWVNaW4oKSx0aGlzLl92YWx1ZU1pbigpXSksci52YWx1ZXMubGVuZ3RoJiZyLnZhbHVlcy5sZW5ndGghPT0yJiYoci52YWx1ZXM9W3IudmFsdWVzWzBdLHIudmFsdWVzWzBdXSkpLHRoaXMucmFuZ2U9ZSgiPGRpdj48L2Rpdj4iKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpLmFkZENsYXNzKCJ1aS1zbGlkZXItcmFuZ2UgdWktd2lkZ2V0LWhlYWRlciIrKHIucmFuZ2U9PT0ibWluInx8ci5yYW5nZT09PSJtYXgiPyIgdWktc2xpZGVyLXJhbmdlLSIrci5yYW5nZToiIikpKTtmb3IodD1pLmxlbmd0aDt0PG87dCsrKXUucHVzaChzKTt0aGlzLmhhbmRsZXM9aS5hZGQoZSh1LmpvaW4oIiIpKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpKSx0aGlzLmhhbmRsZT10aGlzLmhhbmRsZXMuZXEoMCksdGhpcy5oYW5kbGVzLmFkZCh0aGlzLnJhbmdlKS5maWx0ZXIoImEiKS5jbGljayhmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9KS5tb3VzZWVudGVyKGZ1bmN0aW9uKCl7ci5kaXNhYmxlZHx8ZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKX0pLm1vdXNlbGVhdmUoZnVuY3Rpb24oKXtlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfSkuZm9jdXMoZnVuY3Rpb24oKXtyLmRpc2FibGVkP2UodGhpcykuYmx1cigpOihlKCIudWktc2xpZGVyIC51aS1zdGF0ZS1mb2N1cyIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpLGUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWZvY3VzIikpfSkuYmx1cihmdW5jdGlvbigpe2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIil9KSx0aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbih0KXtlKHRoaXMpLmRhdGEoInVpLXNsaWRlci1oYW5kbGUtaW5kZXgiLHQpfSksdGhpcy5fb24odGhpcy5oYW5kbGVzLHtrZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciByLGkscyxvLHU9ZSh0LnRhcmdldCkuZGF0YSgidWktc2xpZGVyLWhhbmRsZS1pbmRleCIpO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6Y2FzZSBlLnVpLmtleUNvZGUuRU5EOmNhc2UgZS51aS5rZXlDb2RlLlBBR0VfVVA6Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOmNhc2UgZS51aS5rZXlDb2RlLlVQOmNhc2UgZS51aS5rZXlDb2RlLlJJR0hUOmNhc2UgZS51aS5rZXlDb2RlLkRPV046Y2FzZSBlLnVpLmtleUNvZGUuTEVGVDp0LnByZXZlbnREZWZhdWx0KCk7aWYoIXRoaXMuX2tleVNsaWRpbmcpe3RoaXMuX2tleVNsaWRpbmc9ITAsZSh0LnRhcmdldCkuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHI9dGhpcy5fc3RhcnQodCx1KTtpZihyPT09ITEpcmV0dXJufX1vPXRoaXMub3B0aW9ucy5zdGVwLHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoP2k9cz10aGlzLnZhbHVlcyh1KTppPXM9dGhpcy52YWx1ZSgpO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6cz10aGlzLl92YWx1ZU1pbigpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkVORDpzPXRoaXMuX3ZhbHVlTWF4KCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9VUDpzPXRoaXMuX3RyaW1BbGlnblZhbHVlKGkrKHRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSkvbik7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOnM9dGhpcy5fdHJpbUFsaWduVmFsdWUoaS0odGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpKS9uKTticmVhaztjYXNlIGUudWkua2V5Q29kZS5VUDpjYXNlIGUudWkua2V5Q29kZS5SSUdIVDppZihpPT09dGhpcy5fdmFsdWVNYXgoKSlyZXR1cm47cz10aGlzLl90cmltQWxpZ25WYWx1ZShpK28pO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkRPV046Y2FzZSBlLnVpLmtleUNvZGUuTEVGVDppZihpPT09dGhpcy5fdmFsdWVNaW4oKSlyZXR1cm47cz10aGlzLl90cmltQWxpZ25WYWx1ZShpLW8pfXRoaXMuX3NsaWRlKHQsdSxzKX0sa2V5dXA6ZnVuY3Rpb24odCl7dmFyIG49ZSh0LnRhcmdldCkuZGF0YSgidWktc2xpZGVyLWhhbmRsZS1pbmRleCIpO3RoaXMuX2tleVNsaWRpbmcmJih0aGlzLl9rZXlTbGlkaW5nPSExLHRoaXMuX3N0b3AodCxuKSx0aGlzLl9jaGFuZ2UodCxuKSxlKHQudGFyZ2V0KS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikpfX0pLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX2FuaW1hdGVPZmY9ITF9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVzLnJlbW92ZSgpLHRoaXMucmFuZ2UucmVtb3ZlKCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zbGlkZXIgdWktc2xpZGVyLWhvcml6b250YWwgdWktc2xpZGVyLXZlcnRpY2FsIHVpLXNsaWRlci1kaXNhYmxlZCB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLHRoaXMuX21vdXNlRGVzdHJveSgpfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKHQpe3ZhciBuLHIsaSxzLG8sdSxhLGYsbD10aGlzLGM9dGhpcy5vcHRpb25zO3JldHVybiBjLmRpc2FibGVkPyExOih0aGlzLmVsZW1lbnRTaXplPXt3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKX0sdGhpcy5lbGVtZW50T2Zmc2V0PXRoaXMuZWxlbWVudC5vZmZzZXQoKSxuPXt4OnQucGFnZVgseTp0LnBhZ2VZfSxyPXRoaXMuX25vcm1WYWx1ZUZyb21Nb3VzZShuKSxpPXRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSsxLHRoaXMuaGFuZGxlcy5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPU1hdGguYWJzKHItbC52YWx1ZXModCkpO2k+biYmKGk9bixzPWUodGhpcyksbz10KX0pLGMucmFuZ2U9PT0hMCYmdGhpcy52YWx1ZXMoMSk9PT1jLm1pbiYmKG8rPTEscz1lKHRoaXMuaGFuZGxlc1tvXSkpLHU9dGhpcy5fc3RhcnQodCxvKSx1PT09ITE/ITE6KHRoaXMuX21vdXNlU2xpZGluZz0hMCx0aGlzLl9oYW5kbGVJbmRleD1vLHMuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmZvY3VzKCksYT1zLm9mZnNldCgpLGY9IWUodC50YXJnZXQpLnBhcmVudHMoKS5hbmRTZWxmKCkuaXMoIi51aS1zbGlkZXItaGFuZGxlIiksdGhpcy5fY2xpY2tPZmZzZXQ9Zj97bGVmdDowLHRvcDowfTp7bGVmdDp0LnBhZ2VYLWEubGVmdC1zLndpZHRoKCkvMix0b3A6dC5wYWdlWS1hLnRvcC1zLmhlaWdodCgpLzItKHBhcnNlSW50KHMuY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCktKHBhcnNlSW50KHMuY3NzKCJib3JkZXJCb3R0b21XaWR0aCIpLDEwKXx8MCkrKHBhcnNlSW50KHMuY3NzKCJtYXJnaW5Ub3AiKSwxMCl8fDApfSx0aGlzLmhhbmRsZXMuaGFzQ2xhc3MoInVpLXN0YXRlLWhvdmVyIil8fHRoaXMuX3NsaWRlKHQsbyxyKSx0aGlzLl9hbmltYXRlT2ZmPSEwLCEwKSl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKGUpe3JldHVybiEwfSxfbW91c2VEcmFnOmZ1bmN0aW9uKGUpe3ZhciB0PXt4OmUucGFnZVgseTplLnBhZ2VZfSxuPXRoaXMuX25vcm1WYWx1ZUZyb21Nb3VzZSh0KTtyZXR1cm4gdGhpcy5fc2xpZGUoZSx0aGlzLl9oYW5kbGVJbmRleCxuKSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5oYW5kbGVzLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0aGlzLl9tb3VzZVNsaWRpbmc9ITEsdGhpcy5fc3RvcChlLHRoaXMuX2hhbmRsZUluZGV4KSx0aGlzLl9jaGFuZ2UoZSx0aGlzLl9oYW5kbGVJbmRleCksdGhpcy5faGFuZGxlSW5kZXg9bnVsbCx0aGlzLl9jbGlja09mZnNldD1udWxsLHRoaXMuX2FuaW1hdGVPZmY9ITEsITF9LF9kZXRlY3RPcmllbnRhdGlvbjpmdW5jdGlvbigpe3RoaXMub3JpZW50YXRpb249dGhpcy5vcHRpb25zLm9yaWVudGF0aW9uPT09InZlcnRpY2FsIj8idmVydGljYWwiOiJob3Jpem9udGFsIn0sX25vcm1WYWx1ZUZyb21Nb3VzZTpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxzO3JldHVybiB0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiPyh0PXRoaXMuZWxlbWVudFNpemUud2lkdGgsbj1lLngtdGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQtKHRoaXMuX2NsaWNrT2Zmc2V0P3RoaXMuX2NsaWNrT2Zmc2V0LmxlZnQ6MCkpOih0PXRoaXMuZWxlbWVudFNpemUuaGVpZ2h0LG49ZS55LXRoaXMuZWxlbWVudE9mZnNldC50b3AtKHRoaXMuX2NsaWNrT2Zmc2V0P3RoaXMuX2NsaWNrT2Zmc2V0LnRvcDowKSkscj1uL3Qscj4xJiYocj0xKSxyPDAmJihyPTApLHRoaXMub3JpZW50YXRpb249PT0idmVydGljYWwiJiYocj0xLXIpLGk9dGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpLHM9dGhpcy5fdmFsdWVNaW4oKStyKmksdGhpcy5fdHJpbUFsaWduVmFsdWUocyl9LF9zdGFydDpmdW5jdGlvbihlLHQpe3ZhciBuPXtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOnRoaXMudmFsdWUoKX07cmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoJiYobi52YWx1ZT10aGlzLnZhbHVlcyh0KSxuLnZhbHVlcz10aGlzLnZhbHVlcygpKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsZSxuKX0sX3NsaWRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLHM7dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg/KHI9dGhpcy52YWx1ZXModD8wOjEpLHRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoPT09MiYmdGhpcy5vcHRpb25zLnJhbmdlPT09ITAmJih0PT09MCYmbj5yfHx0PT09MSYmbjxyKSYmKG49ciksbiE9PXRoaXMudmFsdWVzKHQpJiYoaT10aGlzLnZhbHVlcygpLGlbdF09bixzPXRoaXMuX3RyaWdnZXIoInNsaWRlIixlLHtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOm4sdmFsdWVzOml9KSxyPXRoaXMudmFsdWVzKHQ/MDoxKSxzIT09ITEmJnRoaXMudmFsdWVzKHQsbiwhMCkpKTpuIT09dGhpcy52YWx1ZSgpJiYocz10aGlzLl90cmlnZ2VyKCJzbGlkZSIsZSx7aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTpufSkscyE9PSExJiZ0aGlzLnZhbHVlKG4pKX0sX3N0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgbj17aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTp0aGlzLnZhbHVlKCl9O3RoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoJiYobi52YWx1ZT10aGlzLnZhbHVlcyh0KSxuLnZhbHVlcz10aGlzLnZhbHVlcygpKSx0aGlzLl90cmlnZ2VyKCJzdG9wIixlLG4pfSxfY2hhbmdlOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuX2tleVNsaWRpbmcmJiF0aGlzLl9tb3VzZVNsaWRpbmcpe3ZhciBuPXtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOnRoaXMudmFsdWUoKX07dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgmJihuLnZhbHVlPXRoaXMudmFsdWVzKHQpLG4udmFsdWVzPXRoaXMudmFsdWVzKCkpLHRoaXMuX3RyaWdnZXIoImNoYW5nZSIsZSxuKX19LHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGFyZ3VtZW50cy5sZW5ndGgpe3RoaXMub3B0aW9ucy52YWx1ZT10aGlzLl90cmltQWxpZ25WYWx1ZShlKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCwwKTtyZXR1cm59cmV0dXJuIHRoaXMuX3ZhbHVlKCl9LHZhbHVlczpmdW5jdGlvbih0LG4pe3ZhciByLGkscztpZihhcmd1bWVudHMubGVuZ3RoPjEpe3RoaXMub3B0aW9ucy52YWx1ZXNbdF09dGhpcy5fdHJpbUFsaWduVmFsdWUobiksdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fY2hhbmdlKG51bGwsdCk7cmV0dXJufWlmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl92YWx1ZXMoKTtpZighZS5pc0FycmF5KGFyZ3VtZW50c1swXSkpcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoP3RoaXMuX3ZhbHVlcyh0KTp0aGlzLnZhbHVlKCk7cj10aGlzLm9wdGlvbnMudmFsdWVzLGk9YXJndW1lbnRzWzBdO2ZvcihzPTA7czxyLmxlbmd0aDtzKz0xKXJbc109dGhpcy5fdHJpbUFsaWduVmFsdWUoaVtzXSksdGhpcy5fY2hhbmdlKG51bGwscyk7dGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxuKXt2YXIgcixpPTA7ZS5pc0FycmF5KHRoaXMub3B0aW9ucy52YWx1ZXMpJiYoaT10aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCksZS5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpO3N3aXRjaCh0KXtjYXNlImRpc2FibGVkIjpuPyh0aGlzLmhhbmRsZXMuZmlsdGVyKCIudWktc3RhdGUtZm9jdXMiKS5ibHVyKCksdGhpcy5oYW5kbGVzLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLHRoaXMuaGFuZGxlcy5wcm9wKCJkaXNhYmxlZCIsITApLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZGlzYWJsZWQiKSk6KHRoaXMuaGFuZGxlcy5wcm9wKCJkaXNhYmxlZCIsITEpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktZGlzYWJsZWQiKSk7YnJlYWs7Y2FzZSJvcmllbnRhdGlvbiI6dGhpcy5fZGV0ZWN0T3JpZW50YXRpb24oKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNsaWRlci1ob3Jpem9udGFsIHVpLXNsaWRlci12ZXJ0aWNhbCIpLmFkZENsYXNzKCJ1aS1zbGlkZXItIit0aGlzLm9yaWVudGF0aW9uKSx0aGlzLl9yZWZyZXNoVmFsdWUoKTticmVhaztjYXNlInZhbHVlIjp0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX2NoYW5nZShudWxsLDApLHRoaXMuX2FuaW1hdGVPZmY9ITE7YnJlYWs7Y2FzZSJ2YWx1ZXMiOnRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fcmVmcmVzaFZhbHVlKCk7Zm9yKHI9MDtyPGk7cis9MSl0aGlzLl9jaGFuZ2UobnVsbCxyKTt0aGlzLl9hbmltYXRlT2ZmPSExfX0sX3ZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLnZhbHVlO3JldHVybiBlPXRoaXMuX3RyaW1BbGlnblZhbHVlKGUpLGV9LF92YWx1ZXM6ZnVuY3Rpb24oZSl7dmFyIHQsbixyO2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQ9dGhpcy5vcHRpb25zLnZhbHVlc1tlXSx0PXRoaXMuX3RyaW1BbGlnblZhbHVlKHQpLHQ7bj10aGlzLm9wdGlvbnMudmFsdWVzLnNsaWNlKCk7Zm9yKHI9MDtyPG4ubGVuZ3RoO3IrPTEpbltyXT10aGlzLl90cmltQWxpZ25WYWx1ZShuW3JdKTtyZXR1cm4gbn0sX3RyaW1BbGlnblZhbHVlOmZ1bmN0aW9uKGUpe2lmKGU8PXRoaXMuX3ZhbHVlTWluKCkpcmV0dXJuIHRoaXMuX3ZhbHVlTWluKCk7aWYoZT49dGhpcy5fdmFsdWVNYXgoKSlyZXR1cm4gdGhpcy5fdmFsdWVNYXgoKTt2YXIgdD10aGlzLm9wdGlvbnMuc3RlcD4wP3RoaXMub3B0aW9ucy5zdGVwOjEsbj0oZS10aGlzLl92YWx1ZU1pbigpKSV0LHI9ZS1uO3JldHVybiBNYXRoLmFicyhuKSoyPj10JiYocis9bj4wP3Q6LXQpLHBhcnNlRmxvYXQoci50b0ZpeGVkKDUpKX0sX3ZhbHVlTWluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5taW59LF92YWx1ZU1heDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMubWF4fSxfcmVmcmVzaFZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsbixyLGkscyxvPXRoaXMub3B0aW9ucy5yYW5nZSx1PXRoaXMub3B0aW9ucyxhPXRoaXMsZj10aGlzLl9hbmltYXRlT2ZmPyExOnUuYW5pbWF0ZSxsPXt9O3RoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoP3RoaXMuaGFuZGxlcy5lYWNoKGZ1bmN0aW9uKHIsaSl7bj0oYS52YWx1ZXMociktYS5fdmFsdWVNaW4oKSkvKGEuX3ZhbHVlTWF4KCktYS5fdmFsdWVNaW4oKSkqMTAwLGxbYS5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIj8ibGVmdCI6ImJvdHRvbSJdPW4rIiUiLGUodGhpcykuc3RvcCgxLDEpW2Y/ImFuaW1hdGUiOiJjc3MiXShsLHUuYW5pbWF0ZSksYS5vcHRpb25zLnJhbmdlPT09ITAmJihhLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiPyhyPT09MCYmYS5yYW5nZS5zdG9wKDEsMSlbZj8iYW5pbWF0ZSI6ImNzcyJdKHtsZWZ0Om4rIiUifSx1LmFuaW1hdGUpLHI9PT0xJiZhLnJhbmdlW2Y/ImFuaW1hdGUiOiJjc3MiXSh7d2lkdGg6bi10KyIlIn0se3F1ZXVlOiExLGR1cmF0aW9uOnUuYW5pbWF0ZX0pKToocj09PTAmJmEucmFuZ2Uuc3RvcCgxLDEpW2Y/ImFuaW1hdGUiOiJjc3MiXSh7Ym90dG9tOm4rIiUifSx1LmFuaW1hdGUpLHI9PT0xJiZhLnJhbmdlW2Y/ImFuaW1hdGUiOiJjc3MiXSh7aGVpZ2h0Om4tdCsiJSJ9LHtxdWV1ZTohMSxkdXJhdGlvbjp1LmFuaW1hdGV9KSkpLHQ9bn0pOihyPXRoaXMudmFsdWUoKSxpPXRoaXMuX3ZhbHVlTWluKCkscz10aGlzLl92YWx1ZU1heCgpLG49cyE9PWk/KHItaSkvKHMtaSkqMTAwOjAsbFt0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiPyJsZWZ0IjoiYm90dG9tIl09bisiJSIsdGhpcy5oYW5kbGUuc3RvcCgxLDEpW2Y/ImFuaW1hdGUiOiJjc3MiXShsLHUuYW5pbWF0ZSksbz09PSJtaW4iJiZ0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiJiZ0aGlzLnJhbmdlLnN0b3AoMSwxKVtmPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOm4rIiUifSx1LmFuaW1hdGUpLG89PT0ibWF4IiYmdGhpcy5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIiYmdGhpcy5yYW5nZVtmPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOjEwMC1uKyIlIn0se3F1ZXVlOiExLGR1cmF0aW9uOnUuYW5pbWF0ZX0pLG89PT0ibWluIiYmdGhpcy5vcmllbnRhdGlvbj09PSJ2ZXJ0aWNhbCImJnRoaXMucmFuZ2Uuc3RvcCgxLDEpW2Y/ImFuaW1hdGUiOiJjc3MiXSh7aGVpZ2h0Om4rIiUifSx1LmFuaW1hdGUpLG89PT0ibWF4IiYmdGhpcy5vcmllbnRhdGlvbj09PSJ2ZXJ0aWNhbCImJnRoaXMucmFuZ2VbZj8iYW5pbWF0ZSI6ImNzcyJdKHtoZWlnaHQ6MTAwLW4rIiUifSx7cXVldWU6ITEsZHVyYXRpb246dS5hbmltYXRlfSkpfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLndpZGdldCgidWkuc29ydGFibGUiLGUudWkubW91c2Use3ZlcnNpb246IjEuOS4wIix3aWRnZXRFdmVudFByZWZpeDoic29ydCIscmVhZHk6ITEsb3B0aW9uczp7YXBwZW5kVG86InBhcmVudCIsYXhpczohMSxjb25uZWN0V2l0aDohMSxjb250YWlubWVudDohMSxjdXJzb3I6ImF1dG8iLGN1cnNvckF0OiExLGRyb3BPbkVtcHR5OiEwLGZvcmNlUGxhY2Vob2xkZXJTaXplOiExLGZvcmNlSGVscGVyU2l6ZTohMSxncmlkOiExLGhhbmRsZTohMSxoZWxwZXI6Im9yaWdpbmFsIixpdGVtczoiPiAqIixvcGFjaXR5OiExLHBsYWNlaG9sZGVyOiExLHJldmVydDohMSxzY3JvbGw6ITAsc2Nyb2xsU2Vuc2l0aXZpdHk6MjAsc2Nyb2xsU3BlZWQ6MjAsc2NvcGU6ImRlZmF1bHQiLHRvbGVyYW5jZToiaW50ZXJzZWN0Iix6SW5kZXg6MWUzfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3RoaXMuY29udGFpbmVyQ2FjaGU9e30sdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zb3J0YWJsZSIpLHRoaXMucmVmcmVzaCgpLHRoaXMuZmxvYXRpbmc9dGhpcy5pdGVtcy5sZW5ndGg/ZS5heGlzPT09IngifHwvbGVmdHxyaWdodC8udGVzdCh0aGlzLml0ZW1zWzBdLml0ZW0uY3NzKCJmbG9hdCIpKXx8L2lubGluZXx0YWJsZS1jZWxsLy50ZXN0KHRoaXMuaXRlbXNbMF0uaXRlbS5jc3MoImRpc3BsYXkiKSk6ITEsdGhpcy5vZmZzZXQ9dGhpcy5lbGVtZW50Lm9mZnNldCgpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMucmVhZHk9ITB9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZSB1aS1zb3J0YWJsZS1kaXNhYmxlZCIpLHRoaXMuX21vdXNlRGVzdHJveSgpO2Zvcih2YXIgZT10aGlzLml0ZW1zLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMuaXRlbXNbZV0uaXRlbS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0TmFtZSsiLWl0ZW0iKTtyZXR1cm4gdGhpc30sX3NldE9wdGlvbjpmdW5jdGlvbih0LG4pe3Q9PT0iZGlzYWJsZWQiPyh0aGlzLm9wdGlvbnNbdF09bix0aGlzLndpZGdldCgpLnRvZ2dsZUNsYXNzKCJ1aS1zb3J0YWJsZS1kaXNhYmxlZCIsISFuKSk6ZS5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKHQsbil7dmFyIHI9dGhpcztpZih0aGlzLnJldmVydGluZylyZXR1cm4hMTtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fHRoaXMub3B0aW9ucy50eXBlPT0ic3RhdGljIilyZXR1cm4hMTt0aGlzLl9yZWZyZXNoSXRlbXModCk7dmFyIGk9bnVsbCxzPWUodC50YXJnZXQpLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7aWYoZS5kYXRhKHRoaXMsci53aWRnZXROYW1lKyItaXRlbSIpPT1yKXJldHVybiBpPWUodGhpcyksITF9KTtlLmRhdGEodC50YXJnZXQsci53aWRnZXROYW1lKyItaXRlbSIpPT1yJiYoaT1lKHQudGFyZ2V0KSk7aWYoIWkpcmV0dXJuITE7aWYodGhpcy5vcHRpb25zLmhhbmRsZSYmIW4pe3ZhciBvPSExO2UodGhpcy5vcHRpb25zLmhhbmRsZSxpKS5maW5kKCIqIikuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oKXt0aGlzPT10LnRhcmdldCYmKG89ITApfSk7aWYoIW8pcmV0dXJuITF9cmV0dXJuIHRoaXMuY3VycmVudEl0ZW09aSx0aGlzLl9yZW1vdmVDdXJyZW50c0Zyb21JdGVtcygpLCEwfSxfbW91c2VTdGFydDpmdW5jdGlvbih0LG4scil7dmFyIGk9dGhpcy5vcHRpb25zO3RoaXMuY3VycmVudENvbnRhaW5lcj10aGlzLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpLHRoaXMuaGVscGVyPXRoaXMuX2NyZWF0ZUhlbHBlcih0KSx0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksdGhpcy5fY2FjaGVNYXJnaW5zKCksdGhpcy5zY3JvbGxQYXJlbnQ9dGhpcy5oZWxwZXIuc2Nyb2xsUGFyZW50KCksdGhpcy5vZmZzZXQ9dGhpcy5jdXJyZW50SXRlbS5vZmZzZXQoKSx0aGlzLm9mZnNldD17dG9wOnRoaXMub2Zmc2V0LnRvcC10aGlzLm1hcmdpbnMudG9wLGxlZnQ6dGhpcy5vZmZzZXQubGVmdC10aGlzLm1hcmdpbnMubGVmdH0sZS5leHRlbmQodGhpcy5vZmZzZXQse2NsaWNrOntsZWZ0OnQucGFnZVgtdGhpcy5vZmZzZXQubGVmdCx0b3A6dC5wYWdlWS10aGlzLm9mZnNldC50b3B9LHBhcmVudDp0aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSxyZWxhdGl2ZTp0aGlzLl9nZXRSZWxhdGl2ZU9mZnNldCgpfSksdGhpcy5oZWxwZXIuY3NzKCJwb3NpdGlvbiIsImFic29sdXRlIiksdGhpcy5jc3NQb3NpdGlvbj10aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiksdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCksdGhpcy5vcmlnaW5hbFBhZ2VYPXQucGFnZVgsdGhpcy5vcmlnaW5hbFBhZ2VZPXQucGFnZVksaS5jdXJzb3JBdCYmdGhpcy5fYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcihpLmN1cnNvckF0KSx0aGlzLmRvbVBvc2l0aW9uPXtwcmV2OnRoaXMuY3VycmVudEl0ZW0ucHJldigpWzBdLHBhcmVudDp0aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpWzBdfSx0aGlzLmhlbHBlclswXSE9dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5jdXJyZW50SXRlbS5oaWRlKCksdGhpcy5fY3JlYXRlUGxhY2Vob2xkZXIoKSxpLmNvbnRhaW5tZW50JiZ0aGlzLl9zZXRDb250YWlubWVudCgpLGkuY3Vyc29yJiYoZSgiYm9keSIpLmNzcygiY3Vyc29yIikmJih0aGlzLl9zdG9yZWRDdXJzb3I9ZSgiYm9keSIpLmNzcygiY3Vyc29yIikpLGUoImJvZHkiKS5jc3MoImN1cnNvciIsaS5jdXJzb3IpKSxpLm9wYWNpdHkmJih0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiKSYmKHRoaXMuX3N0b3JlZE9wYWNpdHk9dGhpcy5oZWxwZXIuY3NzKCJvcGFjaXR5IikpLHRoaXMuaGVscGVyLmNzcygib3BhY2l0eSIsaS5vcGFjaXR5KSksaS56SW5kZXgmJih0aGlzLmhlbHBlci5jc3MoInpJbmRleCIpJiYodGhpcy5fc3RvcmVkWkluZGV4PXRoaXMuaGVscGVyLmNzcygiekluZGV4IikpLHRoaXMuaGVscGVyLmNzcygiekluZGV4IixpLnpJbmRleCkpLHRoaXMuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmdGhpcy5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSE9IkhUTUwiJiYodGhpcy5vdmVyZmxvd09mZnNldD10aGlzLnNjcm9sbFBhcmVudC5vZmZzZXQoKSksdGhpcy5fdHJpZ2dlcigic3RhcnQiLHQsdGhpcy5fdWlIYXNoKCkpLHRoaXMuX3ByZXNlcnZlSGVscGVyUHJvcG9ydGlvbnN8fHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKTtpZighcilmb3IodmFyIHM9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO3M+PTA7cy0tKXRoaXMuY29udGFpbmVyc1tzXS5fdHJpZ2dlcigiYWN0aXZhdGUiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKTtyZXR1cm4gZS51aS5kZG1hbmFnZXImJihlLnVpLmRkbWFuYWdlci5jdXJyZW50PXRoaXMpLGUudWkuZGRtYW5hZ2VyJiYhaS5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLHQpLHRoaXMuZHJhZ2dpbmc9ITAsdGhpcy5oZWxwZXIuYWRkQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpLHRoaXMuX21vdXNlRHJhZyh0KSwhMH0sX21vdXNlRHJhZzpmdW5jdGlvbih0KXt0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSx0aGlzLmxhc3RQb3NpdGlvbkFic3x8KHRoaXMubGFzdFBvc2l0aW9uQWJzPXRoaXMucG9zaXRpb25BYnMpO2lmKHRoaXMub3B0aW9ucy5zY3JvbGwpe3ZhciBuPXRoaXMub3B0aW9ucyxyPSExO3RoaXMuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmdGhpcy5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSE9IkhUTUwiPyh0aGlzLm92ZXJmbG93T2Zmc2V0LnRvcCt0aGlzLnNjcm9sbFBhcmVudFswXS5vZmZzZXRIZWlnaHQtdC5wYWdlWTxuLnNjcm9sbFNlbnNpdGl2aXR5P3RoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcCtuLnNjcm9sbFNwZWVkOnQucGFnZVktdGhpcy5vdmVyZmxvd09mZnNldC50b3A8bi5zY3JvbGxTZW5zaXRpdml0eSYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcC1uLnNjcm9sbFNwZWVkKSx0aGlzLm92ZXJmbG93T2Zmc2V0LmxlZnQrdGhpcy5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0V2lkdGgtdC5wYWdlWDxuLnNjcm9sbFNlbnNpdGl2aXR5P3RoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9cj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0K24uc2Nyb2xsU3BlZWQ6dC5wYWdlWC10aGlzLm92ZXJmbG93T2Zmc2V0LmxlZnQ8bi5zY3JvbGxTZW5zaXRpdml0eSYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9cj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0LW4uc2Nyb2xsU3BlZWQpKToodC5wYWdlWS1lKGRvY3VtZW50KS5zY3JvbGxUb3AoKTxuLnNjcm9sbFNlbnNpdGl2aXR5P3I9ZShkb2N1bWVudCkuc2Nyb2xsVG9wKGUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpLW4uc2Nyb2xsU3BlZWQpOmUod2luZG93KS5oZWlnaHQoKS0odC5wYWdlWS1lKGRvY3VtZW50KS5zY3JvbGxUb3AoKSk8bi5zY3JvbGxTZW5zaXRpdml0eSYmKHI9ZShkb2N1bWVudCkuc2Nyb2xsVG9wKGUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpK24uc2Nyb2xsU3BlZWQpKSx0LnBhZ2VYLWUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKTxuLnNjcm9sbFNlbnNpdGl2aXR5P3I9ZShkb2N1bWVudCkuc2Nyb2xsTGVmdChlKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCktbi5zY3JvbGxTcGVlZCk6ZSh3aW5kb3cpLndpZHRoKCktKHQucGFnZVgtZShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKTxuLnNjcm9sbFNlbnNpdGl2aXR5JiYocj1lKGRvY3VtZW50KS5zY3JvbGxMZWZ0KGUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKStuLnNjcm9sbFNwZWVkKSkpLHIhPT0hMSYmZS51aS5kZG1hbmFnZXImJiFuLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsdCl9dGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKTtpZighdGhpcy5vcHRpb25zLmF4aXN8fHRoaXMub3B0aW9ucy5heGlzIT0ieSIpdGhpcy5oZWxwZXJbMF0uc3R5bGUubGVmdD10aGlzLnBvc2l0aW9uLmxlZnQrInB4IjtpZighdGhpcy5vcHRpb25zLmF4aXN8fHRoaXMub3B0aW9ucy5heGlzIT0ieCIpdGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wKyJweCI7Zm9yKHZhciBpPXRoaXMuaXRlbXMubGVuZ3RoLTE7aT49MDtpLS0pe3ZhciBzPXRoaXMuaXRlbXNbaV0sbz1zLml0ZW1bMF0sdT10aGlzLl9pbnRlcnNlY3RzV2l0aFBvaW50ZXIocyk7aWYoIXUpY29udGludWU7aWYocy5pbnN0YW5jZSE9PXRoaXMuY3VycmVudENvbnRhaW5lciljb250aW51ZTtpZihvIT10aGlzLmN1cnJlbnRJdGVtWzBdJiZ0aGlzLnBsYWNlaG9sZGVyW3U9PTE/Im5leHQiOiJwcmV2Il0oKVswXSE9byYmIWUuY29udGFpbnModGhpcy5wbGFjZWhvbGRlclswXSxvKSYmKHRoaXMub3B0aW9ucy50eXBlPT0ic2VtaS1keW5hbWljIj8hZS5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sbyk6ITApKXt0aGlzLmRpcmVjdGlvbj11PT0xPyJkb3duIjoidXAiO2lmKHRoaXMub3B0aW9ucy50b2xlcmFuY2UhPSJwb2ludGVyIiYmIXRoaXMuX2ludGVyc2VjdHNXaXRoU2lkZXMocykpYnJlYWs7dGhpcy5fcmVhcnJhbmdlKHQscyksdGhpcy5fdHJpZ2dlcigiY2hhbmdlIix0LHRoaXMuX3VpSGFzaCgpKTticmVha319cmV0dXJuIHRoaXMuX2NvbnRhY3RDb250YWluZXJzKHQpLGUudWkuZGRtYW5hZ2VyJiZlLnVpLmRkbWFuYWdlci5kcmFnKHRoaXMsdCksdGhpcy5fdHJpZ2dlcigic29ydCIsdCx0aGlzLl91aUhhc2goKSksdGhpcy5sYXN0UG9zaXRpb25BYnM9dGhpcy5wb3NpdGlvbkFicywhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0LG4pe2lmKCF0KXJldHVybjtlLnVpLmRkbWFuYWdlciYmIXRoaXMub3B0aW9ucy5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5kcm9wKHRoaXMsdCk7aWYodGhpcy5vcHRpb25zLnJldmVydCl7dmFyIHI9dGhpcyxpPXRoaXMucGxhY2Vob2xkZXIub2Zmc2V0KCk7dGhpcy5yZXZlcnRpbmc9ITAsZSh0aGlzLmhlbHBlcikuYW5pbWF0ZSh7bGVmdDppLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQtdGhpcy5tYXJnaW5zLmxlZnQrKHRoaXMub2Zmc2V0UGFyZW50WzBdPT1kb2N1bWVudC5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsTGVmdCksdG9wOmkudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AtdGhpcy5tYXJnaW5zLnRvcCsodGhpcy5vZmZzZXRQYXJlbnRbMF09PWRvY3VtZW50LmJvZHk/MDp0aGlzLm9mZnNldFBhcmVudFswXS5zY3JvbGxUb3ApfSxwYXJzZUludCh0aGlzLm9wdGlvbnMucmV2ZXJ0LDEwKXx8NTAwLGZ1bmN0aW9uKCl7ci5fY2xlYXIodCl9KX1lbHNlIHRoaXMuX2NsZWFyKHQsbik7cmV0dXJuITF9LGNhbmNlbDpmdW5jdGlvbigpe2lmKHRoaXMuZHJhZ2dpbmcpe3RoaXMuX21vdXNlVXAoe3RhcmdldDpudWxsfSksdGhpcy5vcHRpb25zLmhlbHBlcj09Im9yaWdpbmFsIj90aGlzLmN1cnJlbnRJdGVtLmNzcyh0aGlzLl9zdG9yZWRDU1MpLnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZS1oZWxwZXIiKTp0aGlzLmN1cnJlbnRJdGVtLnNob3coKTtmb3IodmFyIHQ9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO3Q+PTA7dC0tKXRoaXMuY29udGFpbmVyc1t0XS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsbnVsbCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1t0XS5jb250YWluZXJDYWNoZS5vdmVyJiYodGhpcy5jb250YWluZXJzW3RdLl90cmlnZ2VyKCJvdXQiLG51bGwsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbdF0uY29udGFpbmVyQ2FjaGUub3Zlcj0wKX1yZXR1cm4gdGhpcy5wbGFjZWhvbGRlciYmKHRoaXMucGxhY2Vob2xkZXJbMF0ucGFyZW50Tm9kZSYmdGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pLHRoaXMub3B0aW9ucy5oZWxwZXIhPSJvcmlnaW5hbCImJnRoaXMuaGVscGVyJiZ0aGlzLmhlbHBlclswXS5wYXJlbnROb2RlJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSxlLmV4dGVuZCh0aGlzLHtoZWxwZXI6bnVsbCxkcmFnZ2luZzohMSxyZXZlcnRpbmc6ITEsX25vRmluYWxTb3J0Om51bGx9KSx0aGlzLmRvbVBvc2l0aW9uLnByZXY/ZSh0aGlzLmRvbVBvc2l0aW9uLnByZXYpLmFmdGVyKHRoaXMuY3VycmVudEl0ZW0pOmUodGhpcy5kb21Qb3NpdGlvbi5wYXJlbnQpLnByZXBlbmQodGhpcy5jdXJyZW50SXRlbSkpLHRoaXN9LHNlcmlhbGl6ZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KHQmJnQuY29ubmVjdGVkKSxyPVtdO3JldHVybiB0PXR8fHt9LGUobikuZWFjaChmdW5jdGlvbigpe3ZhciBuPShlKHQuaXRlbXx8dGhpcykuYXR0cih0LmF0dHJpYnV0ZXx8ImlkIil8fCIiKS5tYXRjaCh0LmV4cHJlc3Npb258fC8oLispWy09X10oLispLyk7biYmci5wdXNoKCh0LmtleXx8blsxXSsiW10iKSsiPSIrKHQua2V5JiZ0LmV4cHJlc3Npb24/blsxXTpuWzJdKSl9KSwhci5sZW5ndGgmJnQua2V5JiZyLnB1c2godC5rZXkrIj0iKSxyLmpvaW4oIiYiKX0sdG9BcnJheTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KHQmJnQuY29ubmVjdGVkKSxyPVtdO3JldHVybiB0PXR8fHt9LG4uZWFjaChmdW5jdGlvbigpe3IucHVzaChlKHQuaXRlbXx8dGhpcykuYXR0cih0LmF0dHJpYnV0ZXx8ImlkIil8fCIiKX0pLHJ9LF9pbnRlcnNlY3RzV2l0aDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnBvc2l0aW9uQWJzLmxlZnQsbj10K3RoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgscj10aGlzLnBvc2l0aW9uQWJzLnRvcCxpPXIrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQscz1lLmxlZnQsbz1zK2Uud2lkdGgsdT1lLnRvcCxhPXUrZS5oZWlnaHQsZj10aGlzLm9mZnNldC5jbGljay50b3AsbD10aGlzLm9mZnNldC5jbGljay5sZWZ0LGM9citmPnUmJnIrZjxhJiZ0K2w+cyYmdCtsPG87cmV0dXJuIHRoaXMub3B0aW9ucy50b2xlcmFuY2U9PSJwb2ludGVyInx8dGhpcy5vcHRpb25zLmZvcmNlUG9pbnRlckZvckNvbnRhaW5lcnN8fHRoaXMub3B0aW9ucy50b2xlcmFuY2UhPSJwb2ludGVyIiYmdGhpcy5oZWxwZXJQcm9wb3J0aW9uc1t0aGlzLmZsb2F0aW5nPyJ3aWR0aCI6ImhlaWdodCJdPmVbdGhpcy5mbG9hdGluZz8id2lkdGgiOiJoZWlnaHQiXT9jOnM8dCt0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzImJm4tdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yPG8mJnU8cit0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yJiZpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI8YX0sX2ludGVyc2VjdHNXaXRoUG9pbnRlcjpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm9wdGlvbnMuYXhpcz09PSJ4Inx8ZS51aS5pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMudG9wK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCx0LnRvcCx0LmhlaWdodCkscj10aGlzLm9wdGlvbnMuYXhpcz09PSJ5Inx8ZS51aS5pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMubGVmdCt0aGlzLm9mZnNldC5jbGljay5sZWZ0LHQubGVmdCx0LndpZHRoKSxpPW4mJnIscz10aGlzLl9nZXREcmFnVmVydGljYWxEaXJlY3Rpb24oKSxvPXRoaXMuX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uKCk7cmV0dXJuIGk/dGhpcy5mbG9hdGluZz9vJiZvPT0icmlnaHQifHxzPT0iZG93biI/MjoxOnMmJihzPT0iZG93biI/MjoxKTohMX0sX2ludGVyc2VjdHNXaXRoU2lkZXM6ZnVuY3Rpb24odCl7dmFyIG49ZS51aS5pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMudG9wK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCx0LnRvcCt0LmhlaWdodC8yLHQuaGVpZ2h0KSxyPWUudWkuaXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLmxlZnQrdGhpcy5vZmZzZXQuY2xpY2subGVmdCx0LmxlZnQrdC53aWR0aC8yLHQud2lkdGgpLGk9dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCkscz10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpO3JldHVybiB0aGlzLmZsb2F0aW5nJiZzP3M9PSJyaWdodCImJnJ8fHM9PSJsZWZ0IiYmIXI6aSYmKGk9PSJkb3duIiYmbnx8aT09InVwIiYmIW4pfSxfZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wb3NpdGlvbkFicy50b3AtdGhpcy5sYXN0UG9zaXRpb25BYnMudG9wO3JldHVybiBlIT0wJiYoZT4wPyJkb3duIjoidXAiKX0sX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LXRoaXMubGFzdFBvc2l0aW9uQWJzLmxlZnQ7cmV0dXJuIGUhPTAmJihlPjA/InJpZ2h0IjoibGVmdCIpfSxyZWZyZXNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yZWZyZXNoSXRlbXMoZSksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCksdGhpc30sX2Nvbm5lY3RXaXRoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3JldHVybiBlLmNvbm5lY3RXaXRoLmNvbnN0cnVjdG9yPT1TdHJpbmc/W2UuY29ubmVjdFdpdGhdOmUuY29ubmVjdFdpdGh9LF9nZXRJdGVtc0FzalF1ZXJ5OmZ1bmN0aW9uKHQpe3ZhciBuPVtdLHI9W10saT10aGlzLl9jb25uZWN0V2l0aCgpO2lmKGkmJnQpZm9yKHZhciBzPWkubGVuZ3RoLTE7cz49MDtzLS0pe3ZhciBvPWUoaVtzXSk7Zm9yKHZhciB1PW8ubGVuZ3RoLTE7dT49MDt1LS0pe3ZhciBhPWUuZGF0YShvW3VdLHRoaXMud2lkZ2V0TmFtZSk7YSYmYSE9dGhpcyYmIWEub3B0aW9ucy5kaXNhYmxlZCYmci5wdXNoKFtlLmlzRnVuY3Rpb24oYS5vcHRpb25zLml0ZW1zKT9hLm9wdGlvbnMuaXRlbXMuY2FsbChhLmVsZW1lbnQpOmUoYS5vcHRpb25zLml0ZW1zLGEuZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSxhXSl9fXIucHVzaChbZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50LG51bGwse29wdGlvbnM6dGhpcy5vcHRpb25zLGl0ZW06dGhpcy5jdXJyZW50SXRlbX0pOmUodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSx0aGlzXSk7Zm9yKHZhciBzPXIubGVuZ3RoLTE7cz49MDtzLS0pcltzXVswXS5lYWNoKGZ1bmN0aW9uKCl7bi5wdXNoKHRoaXMpfSk7cmV0dXJuIGUobil9LF9yZW1vdmVDdXJyZW50c0Zyb21JdGVtczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudEl0ZW0uZmluZCgiOmRhdGEoIit0aGlzLndpZGdldE5hbWUrIi1pdGVtKSIpO2Zvcih2YXIgdD0wO3Q8dGhpcy5pdGVtcy5sZW5ndGg7dCsrKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWVbbl09PXRoaXMuaXRlbXNbdF0uaXRlbVswXSYmdGhpcy5pdGVtcy5zcGxpY2UodCwxKX0sX3JlZnJlc2hJdGVtczpmdW5jdGlvbih0KXt0aGlzLml0ZW1zPVtdLHRoaXMuY29udGFpbmVycz1bdGhpc107dmFyIG49dGhpcy5pdGVtcyxyPVtbZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50WzBdLHQse2l0ZW06dGhpcy5jdXJyZW50SXRlbX0pOmUodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCksdGhpc11dLGk9dGhpcy5fY29ubmVjdFdpdGgoKTtpZihpJiZ0aGlzLnJlYWR5KWZvcih2YXIgcz1pLmxlbmd0aC0xO3M+PTA7cy0tKXt2YXIgbz1lKGlbc10pO2Zvcih2YXIgdT1vLmxlbmd0aC0xO3U+PTA7dS0tKXt2YXIgYT1lLmRhdGEob1t1XSx0aGlzLndpZGdldE5hbWUpO2EmJmEhPXRoaXMmJiFhLm9wdGlvbnMuZGlzYWJsZWQmJihyLnB1c2goW2UuaXNGdW5jdGlvbihhLm9wdGlvbnMuaXRlbXMpP2Eub3B0aW9ucy5pdGVtcy5jYWxsKGEuZWxlbWVudFswXSx0LHtpdGVtOnRoaXMuY3VycmVudEl0ZW19KTplKGEub3B0aW9ucy5pdGVtcyxhLmVsZW1lbnQpLGFdKSx0aGlzLmNvbnRhaW5lcnMucHVzaChhKSl9fWZvcih2YXIgcz1yLmxlbmd0aC0xO3M+PTA7cy0tKXt2YXIgZj1yW3NdWzFdLGw9cltzXVswXTtmb3IodmFyIHU9MCxjPWwubGVuZ3RoO3U8Yzt1Kyspe3ZhciBoPWUobFt1XSk7aC5kYXRhKHRoaXMud2lkZ2V0TmFtZSsiLWl0ZW0iLGYpLG4ucHVzaCh7aXRlbTpoLGluc3RhbmNlOmYsd2lkdGg6MCxoZWlnaHQ6MCxsZWZ0OjAsdG9wOjB9KX19fSxyZWZyZXNoUG9zaXRpb25zOmZ1bmN0aW9uKHQpe3RoaXMub2Zmc2V0UGFyZW50JiZ0aGlzLmhlbHBlciYmKHRoaXMub2Zmc2V0LnBhcmVudD10aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSk7Zm9yKHZhciBuPXRoaXMuaXRlbXMubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciByPXRoaXMuaXRlbXNbbl07aWYoci5pbnN0YW5jZSE9dGhpcy5jdXJyZW50Q29udGFpbmVyJiZ0aGlzLmN1cnJlbnRDb250YWluZXImJnIuaXRlbVswXSE9dGhpcy5jdXJyZW50SXRlbVswXSljb250aW51ZTt2YXIgaT10aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudD9lKHRoaXMub3B0aW9ucy50b2xlcmFuY2VFbGVtZW50LHIuaXRlbSk6ci5pdGVtO3R8fChyLndpZHRoPWkub3V0ZXJXaWR0aCgpLHIuaGVpZ2h0PWkub3V0ZXJIZWlnaHQoKSk7dmFyIHM9aS5vZmZzZXQoKTtyLmxlZnQ9cy5sZWZ0LHIudG9wPXMudG9wfWlmKHRoaXMub3B0aW9ucy5jdXN0b20mJnRoaXMub3B0aW9ucy5jdXN0b20ucmVmcmVzaENvbnRhaW5lcnMpdGhpcy5vcHRpb25zLmN1c3RvbS5yZWZyZXNoQ29udGFpbmVycy5jYWxsKHRoaXMpO2Vsc2UgZm9yKHZhciBuPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIHM9dGhpcy5jb250YWluZXJzW25dLmVsZW1lbnQub2Zmc2V0KCk7dGhpcy5jb250YWluZXJzW25dLmNvbnRhaW5lckNhY2hlLmxlZnQ9cy5sZWZ0LHRoaXMuY29udGFpbmVyc1tuXS5jb250YWluZXJDYWNoZS50b3A9cy50b3AsdGhpcy5jb250YWluZXJzW25dLmNvbnRhaW5lckNhY2hlLndpZHRoPXRoaXMuY29udGFpbmVyc1tuXS5lbGVtZW50Lm91dGVyV2lkdGgoKSx0aGlzLmNvbnRhaW5lcnNbbl0uY29udGFpbmVyQ2FjaGUuaGVpZ2h0PXRoaXMuY29udGFpbmVyc1tuXS5lbGVtZW50Lm91dGVySGVpZ2h0KCl9cmV0dXJuIHRoaXN9LF9jcmVhdGVQbGFjZWhvbGRlcjpmdW5jdGlvbih0KXt0PXR8fHRoaXM7dmFyIG49dC5vcHRpb25zO2lmKCFuLnBsYWNlaG9sZGVyfHxuLnBsYWNlaG9sZGVyLmNvbnN0cnVjdG9yPT1TdHJpbmcpe3ZhciByPW4ucGxhY2Vob2xkZXI7bi5wbGFjZWhvbGRlcj17ZWxlbWVudDpmdW5jdGlvbigpe3ZhciBuPWUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0LmN1cnJlbnRJdGVtWzBdLm5vZGVOYW1lKSkuYWRkQ2xhc3Mocnx8dC5jdXJyZW50SXRlbVswXS5jbGFzc05hbWUrIiB1aS1zb3J0YWJsZS1wbGFjZWhvbGRlciIpLnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZS1oZWxwZXIiKVswXTtyZXR1cm4gcnx8KG4uc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIiksbn0sdXBkYXRlOmZ1bmN0aW9uKGUsaSl7aWYociYmIW4uZm9yY2VQbGFjZWhvbGRlclNpemUpcmV0dXJuO2kuaGVpZ2h0KCl8fGkuaGVpZ2h0KHQuY3VycmVudEl0ZW0uaW5uZXJIZWlnaHQoKS1wYXJzZUludCh0LmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ1RvcCIpfHwwLDEwKS1wYXJzZUludCh0LmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ0JvdHRvbSIpfHwwLDEwKSksaS53aWR0aCgpfHxpLndpZHRoKHQuY3VycmVudEl0ZW0uaW5uZXJXaWR0aCgpLXBhcnNlSW50KHQuY3VycmVudEl0ZW0uY3NzKCJwYWRkaW5nTGVmdCIpfHwwLDEwKS1wYXJzZUludCh0LmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ1JpZ2h0Iil8fDAsMTApKX19fXQucGxhY2Vob2xkZXI9ZShuLnBsYWNlaG9sZGVyLmVsZW1lbnQuY2FsbCh0LmVsZW1lbnQsdC5jdXJyZW50SXRlbSkpLHQuY3VycmVudEl0ZW0uYWZ0ZXIodC5wbGFjZWhvbGRlciksbi5wbGFjZWhvbGRlci51cGRhdGUodCx0LnBsYWNlaG9sZGVyKX0sX2NvbnRhY3RDb250YWluZXJzOmZ1bmN0aW9uKHQpe3ZhciBuPW51bGwscj1udWxsO2Zvcih2YXIgaT10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7aT49MDtpLS0pe2lmKGUuY29udGFpbnModGhpcy5jdXJyZW50SXRlbVswXSx0aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudFswXSkpY29udGludWU7aWYodGhpcy5faW50ZXJzZWN0c1dpdGgodGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlKSl7aWYobiYmZS5jb250YWlucyh0aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudFswXSxuLmVsZW1lbnRbMF0pKWNvbnRpbnVlO249dGhpcy5jb250YWluZXJzW2ldLHI9aX1lbHNlIHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS5vdmVyJiYodGhpcy5jb250YWluZXJzW2ldLl90cmlnZ2VyKCJvdXQiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3Zlcj0wKX1pZighbilyZXR1cm47aWYodGhpcy5jb250YWluZXJzLmxlbmd0aD09PTEpdGhpcy5jb250YWluZXJzW3JdLl90cmlnZ2VyKCJvdmVyIix0LHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW3JdLmNvbnRhaW5lckNhY2hlLm92ZXI9MTtlbHNlIGlmKHRoaXMuY3VycmVudENvbnRhaW5lciE9dGhpcy5jb250YWluZXJzW3JdKXt2YXIgcz0xZTQsbz1udWxsLHU9dGhpcy5wb3NpdGlvbkFic1t0aGlzLmNvbnRhaW5lcnNbcl0uZmxvYXRpbmc/ImxlZnQiOiJ0b3AiXTtmb3IodmFyIGE9dGhpcy5pdGVtcy5sZW5ndGgtMTthPj0wO2EtLSl7aWYoIWUuY29udGFpbnModGhpcy5jb250YWluZXJzW3JdLmVsZW1lbnRbMF0sdGhpcy5pdGVtc1thXS5pdGVtWzBdKSljb250aW51ZTt2YXIgZj10aGlzLmNvbnRhaW5lcnNbcl0uZmxvYXRpbmc/dGhpcy5pdGVtc1thXS5pdGVtLm9mZnNldCgpLmxlZnQ6dGhpcy5pdGVtc1thXS5pdGVtLm9mZnNldCgpLnRvcDtNYXRoLmFicyhmLXUpPHMmJihzPU1hdGguYWJzKGYtdSksbz10aGlzLml0ZW1zW2FdLHRoaXMuZGlyZWN0aW9uPWYtdT4wPyJkb3duIjoidXAiKX1pZighbyYmIXRoaXMub3B0aW9ucy5kcm9wT25FbXB0eSlyZXR1cm47dGhpcy5jdXJyZW50Q29udGFpbmVyPXRoaXMuY29udGFpbmVyc1tyXSxvP3RoaXMuX3JlYXJyYW5nZSh0LG8sbnVsbCwhMCk6dGhpcy5fcmVhcnJhbmdlKHQsbnVsbCx0aGlzLmNvbnRhaW5lcnNbcl0uZWxlbWVudCwhMCksdGhpcy5fdHJpZ2dlcigiY2hhbmdlIix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLmNvbnRhaW5lcnNbcl0uX3RyaWdnZXIoImNoYW5nZSIsdCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlci51cGRhdGUodGhpcy5jdXJyZW50Q29udGFpbmVyLHRoaXMucGxhY2Vob2xkZXIpLHRoaXMuY29udGFpbmVyc1tyXS5fdHJpZ2dlcigib3ZlciIsdCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1tyXS5jb250YWluZXJDYWNoZS5vdmVyPTF9fSxfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyPWUuaXNGdW5jdGlvbihuLmhlbHBlcik/ZShuLmhlbHBlci5hcHBseSh0aGlzLmVsZW1lbnRbMF0sW3QsdGhpcy5jdXJyZW50SXRlbV0pKTpuLmhlbHBlcj09ImNsb25lIj90aGlzLmN1cnJlbnRJdGVtLmNsb25lKCk6dGhpcy5jdXJyZW50SXRlbTtyZXR1cm4gci5wYXJlbnRzKCJib2R5IikubGVuZ3RofHxlKG4uYXBwZW5kVG8hPSJwYXJlbnQiP24uYXBwZW5kVG86dGhpcy5jdXJyZW50SXRlbVswXS5wYXJlbnROb2RlKVswXS5hcHBlbmRDaGlsZChyWzBdKSxyWzBdPT10aGlzLmN1cnJlbnRJdGVtWzBdJiYodGhpcy5fc3RvcmVkQ1NTPXt3aWR0aDp0aGlzLmN1cnJlbnRJdGVtWzBdLnN0eWxlLndpZHRoLGhlaWdodDp0aGlzLmN1cnJlbnRJdGVtWzBdLnN0eWxlLmhlaWdodCxwb3NpdGlvbjp0aGlzLmN1cnJlbnRJdGVtLmNzcygicG9zaXRpb24iKSx0b3A6dGhpcy5jdXJyZW50SXRlbS5jc3MoInRvcCIpLGxlZnQ6dGhpcy5jdXJyZW50SXRlbS5jc3MoImxlZnQiKX0pLChyWzBdLnN0eWxlLndpZHRoPT0iInx8bi5mb3JjZUhlbHBlclNpemUpJiZyLndpZHRoKHRoaXMuY3VycmVudEl0ZW0ud2lkdGgoKSksKHJbMF0uc3R5bGUuaGVpZ2h0PT0iInx8bi5mb3JjZUhlbHBlclNpemUpJiZyLmhlaWdodCh0aGlzLmN1cnJlbnRJdGVtLmhlaWdodCgpKSxyfSxfYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcjpmdW5jdGlvbih0KXt0eXBlb2YgdD09InN0cmluZyImJih0PXQuc3BsaXQoIiAiKSksZS5pc0FycmF5KHQpJiYodD17bGVmdDordFswXSx0b3A6K3RbMV18fDB9KSwibGVmdCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2subGVmdD10LmxlZnQrdGhpcy5tYXJnaW5zLmxlZnQpLCJyaWdodCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2subGVmdD10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXQucmlnaHQrdGhpcy5tYXJnaW5zLmxlZnQpLCJ0b3AiaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10LnRvcCt0aGlzLm1hcmdpbnMudG9wKSwiYm90dG9tImluIHQmJih0aGlzLm9mZnNldC5jbGljay50b3A9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdC5ib3R0b20rdGhpcy5tYXJnaW5zLnRvcCl9LF9nZXRQYXJlbnRPZmZzZXQ6ZnVuY3Rpb24oKXt0aGlzLm9mZnNldFBhcmVudD10aGlzLmhlbHBlci5vZmZzZXRQYXJlbnQoKTt2YXIgdD10aGlzLm9mZnNldFBhcmVudC5vZmZzZXQoKTt0aGlzLmNzc1Bvc2l0aW9uPT0iYWJzb2x1dGUiJiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJmUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYodC5sZWZ0Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksdC50b3ArPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKTtpZih0aGlzLm9mZnNldFBhcmVudFswXT09ZG9jdW1lbnQuYm9keXx8dGhpcy5vZmZzZXRQYXJlbnRbMF0udGFnTmFtZSYmdGhpcy5vZmZzZXRQYXJlbnRbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0iaHRtbCImJmUuYnJvd3Nlci5tc2llKXQ9e3RvcDowLGxlZnQ6MH07cmV0dXJue3RvcDp0LnRvcCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCksbGVmdDp0LmxlZnQrKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKX19LF9nZXRSZWxhdGl2ZU9mZnNldDpmdW5jdGlvbigpe2lmKHRoaXMuY3NzUG9zaXRpb249PSJyZWxhdGl2ZSIpe3ZhciBlPXRoaXMuY3VycmVudEl0ZW0ucG9zaXRpb24oKTtyZXR1cm57dG9wOmUudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoInRvcCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksbGVmdDplLmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcygibGVmdCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfX1yZXR1cm57dG9wOjAsbGVmdDowfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmN1cnJlbnRJdGVtLmNzcygibWFyZ2luTGVmdCIpLDEwKXx8MCx0b3A6cGFyc2VJbnQodGhpcy5jdXJyZW50SXRlbS5jc3MoIm1hcmdpblRvcCIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3QuY29udGFpbm1lbnQ9PSJwYXJlbnQiJiYodC5jb250YWlubWVudD10aGlzLmhlbHBlclswXS5wYXJlbnROb2RlKTtpZih0LmNvbnRhaW5tZW50PT0iZG9jdW1lbnQifHx0LmNvbnRhaW5tZW50PT0id2luZG93Iil0aGlzLmNvbnRhaW5tZW50PVswLXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQsMC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCxlKHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/ZG9jdW1lbnQ6d2luZG93KS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKGUodC5jb250YWlubWVudD09ImRvY3VtZW50Ij9kb2N1bWVudDp3aW5kb3cpLmhlaWdodCgpfHxkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXTtpZighL14oZG9jdW1lbnR8d2luZG93fHBhcmVudCkkLy50ZXN0KHQuY29udGFpbm1lbnQpKXt2YXIgbj1lKHQuY29udGFpbm1lbnQpWzBdLHI9ZSh0LmNvbnRhaW5tZW50KS5vZmZzZXQoKSxpPWUobikuY3NzKCJvdmVyZmxvdyIpIT0iaGlkZGVuIjt0aGlzLmNvbnRhaW5tZW50PVtyLmxlZnQrKHBhcnNlSW50KGUobikuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChlKG4pLmNzcygicGFkZGluZ0xlZnQiKSwxMCl8fDApLXRoaXMubWFyZ2lucy5sZWZ0LHIudG9wKyhwYXJzZUludChlKG4pLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChlKG4pLmNzcygicGFkZGluZ1RvcCIpLDEwKXx8MCktdGhpcy5tYXJnaW5zLnRvcCxyLmxlZnQrKGk/TWF0aC5tYXgobi5zY3JvbGxXaWR0aCxuLm9mZnNldFdpZHRoKTpuLm9mZnNldFdpZHRoKS0ocGFyc2VJbnQoZShuKS5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCktKHBhcnNlSW50KGUobikuY3NzKCJwYWRkaW5nUmlnaHQiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsci50b3ArKGk/TWF0aC5tYXgobi5zY3JvbGxIZWlnaHQsbi5vZmZzZXRIZWlnaHQpOm4ub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoZShuKS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoZShuKS5jc3MoInBhZGRpbmdCb3R0b20iKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdfX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKHQsbil7bnx8KG49dGhpcy5wb3NpdGlvbik7dmFyIHI9dD09ImFic29sdXRlIj8xOi0xLGk9dGhpcy5vcHRpb25zLHM9dGhpcy5jc3NQb3NpdGlvbiE9ImFic29sdXRlInx8dGhpcy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiYhIWUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LG89LyhodG1sfGJvZHkpL2kudGVzdChzWzBdLnRhZ05hbWUpO3JldHVybnt0b3A6bi50b3ArdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wKnIrdGhpcy5vZmZzZXQucGFyZW50LnRvcCpyLSh0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKTpvPzA6cy5zY3JvbGxUb3AoKSkqcixsZWZ0Om4ubGVmdCt0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0KnIrdGhpcy5vZmZzZXQucGFyZW50LmxlZnQqci0odGhpcy5jc3NQb3NpdGlvbj09ImZpeGVkIj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpOm8/MDpzLnNjcm9sbExlZnQoKSkqcn19LF9nZW5lcmF0ZVBvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyPXRoaXMuY3NzUG9zaXRpb24hPSJhYnNvbHV0ZSJ8fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmISFlLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKT90aGlzLnNjcm9sbFBhcmVudDp0aGlzLm9mZnNldFBhcmVudCxpPS8oaHRtbHxib2R5KS9pLnRlc3QoclswXS50YWdOYW1lKTt0aGlzLmNzc1Bvc2l0aW9uPT0icmVsYXRpdmUiJiYodGhpcy5zY3JvbGxQYXJlbnRbMF09PWRvY3VtZW50fHx0aGlzLnNjcm9sbFBhcmVudFswXT09dGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYodGhpcy5vZmZzZXQucmVsYXRpdmU9dGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKSk7dmFyIHM9dC5wYWdlWCxvPXQucGFnZVk7aWYodGhpcy5vcmlnaW5hbFBvc2l0aW9uKXt0aGlzLmNvbnRhaW5tZW50JiYodC5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PHRoaXMuY29udGFpbm1lbnRbMF0mJihzPXRoaXMuY29udGFpbm1lbnRbMF0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksdC5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A8dGhpcy5jb250YWlubWVudFsxXSYmKG89dGhpcy5jb250YWlubWVudFsxXSt0aGlzLm9mZnNldC5jbGljay50b3ApLHQucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdD50aGlzLmNvbnRhaW5tZW50WzJdJiYocz10aGlzLmNvbnRhaW5tZW50WzJdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLHQucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPnRoaXMuY29udGFpbm1lbnRbM10mJihvPXRoaXMuY29udGFpbm1lbnRbM10rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSk7aWYobi5ncmlkKXt2YXIgdT10aGlzLm9yaWdpbmFsUGFnZVkrTWF0aC5yb3VuZCgoby10aGlzLm9yaWdpbmFsUGFnZVkpL24uZ3JpZFsxXSkqbi5ncmlkWzFdO289dGhpcy5jb250YWlubWVudD91LXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx0aGlzLmNvbnRhaW5tZW50WzFdfHx1LXRoaXMub2Zmc2V0LmNsaWNrLnRvcD50aGlzLmNvbnRhaW5tZW50WzNdP3UtdGhpcy5vZmZzZXQuY2xpY2sudG9wPHRoaXMuY29udGFpbm1lbnRbMV0/dStuLmdyaWRbMV06dS1uLmdyaWRbMV06dTp1O3ZhciBhPXRoaXMub3JpZ2luYWxQYWdlWCtNYXRoLnJvdW5kKChzLXRoaXMub3JpZ2luYWxQYWdlWCkvbi5ncmlkWzBdKSpuLmdyaWRbMF07cz10aGlzLmNvbnRhaW5tZW50P2EtdGhpcy5vZmZzZXQuY2xpY2subGVmdDx0aGlzLmNvbnRhaW5tZW50WzBdfHxhLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+dGhpcy5jb250YWlubWVudFsyXT9hLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dGhpcy5jb250YWlubWVudFswXT9hK24uZ3JpZFswXTphLW4uZ3JpZFswXTphOmF9fXJldHVybnt0b3A6by10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKHRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOmk/MDpyLnNjcm9sbFRvcCgpKSxsZWZ0OnMtdGhpcy5vZmZzZXQuY2xpY2subGVmdC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0Kyh0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6aT8wOnIuc2Nyb2xsTGVmdCgpKX19LF9yZWFycmFuZ2U6ZnVuY3Rpb24oZSx0LG4scil7bj9uWzBdLmFwcGVuZENoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pOnQuaXRlbVswXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLnBsYWNlaG9sZGVyWzBdLHRoaXMuZGlyZWN0aW9uPT0iZG93biI/dC5pdGVtWzBdOnQuaXRlbVswXS5uZXh0U2libGluZyksdGhpcy5jb3VudGVyPXRoaXMuY291bnRlcj8rK3RoaXMuY291bnRlcjoxO3ZhciBpPXRoaXMuY291bnRlcjt0aGlzLl9kZWxheShmdW5jdGlvbigpe2k9PXRoaXMuY291bnRlciYmdGhpcy5yZWZyZXNoUG9zaXRpb25zKCFyKX0pfSxfY2xlYXI6ZnVuY3Rpb24odCxuKXt0aGlzLnJldmVydGluZz0hMTt2YXIgcj1bXTshdGhpcy5fbm9GaW5hbFNvcnQmJnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KCkubGVuZ3RoJiZ0aGlzLnBsYWNlaG9sZGVyLmJlZm9yZSh0aGlzLmN1cnJlbnRJdGVtKSx0aGlzLl9ub0ZpbmFsU29ydD1udWxsO2lmKHRoaXMuaGVscGVyWzBdPT10aGlzLmN1cnJlbnRJdGVtWzBdKXtmb3IodmFyIGkgaW4gdGhpcy5fc3RvcmVkQ1NTKWlmKHRoaXMuX3N0b3JlZENTU1tpXT09ImF1dG8ifHx0aGlzLl9zdG9yZWRDU1NbaV09PSJzdGF0aWMiKXRoaXMuX3N0b3JlZENTU1tpXT0iIjt0aGlzLmN1cnJlbnRJdGVtLmNzcyh0aGlzLl9zdG9yZWRDU1MpLnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZS1oZWxwZXIiKX1lbHNlIHRoaXMuY3VycmVudEl0ZW0uc2hvdygpO3RoaXMuZnJvbU91dHNpZGUmJiFuJiZyLnB1c2goZnVuY3Rpb24oZSl7dGhpcy5fdHJpZ2dlcigicmVjZWl2ZSIsZSx0aGlzLl91aUhhc2godGhpcy5mcm9tT3V0c2lkZSkpfSksKHRoaXMuZnJvbU91dHNpZGV8fHRoaXMuZG9tUG9zaXRpb24ucHJldiE9dGhpcy5jdXJyZW50SXRlbS5wcmV2KCkubm90KCIudWktc29ydGFibGUtaGVscGVyIilbMF18fHRoaXMuZG9tUG9zaXRpb24ucGFyZW50IT10aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpWzBdKSYmIW4mJnIucHVzaChmdW5jdGlvbihlKXt0aGlzLl90cmlnZ2VyKCJ1cGRhdGUiLGUsdGhpcy5fdWlIYXNoKCkpfSksdGhpcyE9PXRoaXMuY3VycmVudENvbnRhaW5lciYmKG58fChyLnB1c2goZnVuY3Rpb24oZSl7dGhpcy5fdHJpZ2dlcigicmVtb3ZlIixlLHRoaXMuX3VpSGFzaCgpKX0pLHIucHVzaChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7ZS5fdHJpZ2dlcigicmVjZWl2ZSIsdCx0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY3VycmVudENvbnRhaW5lcikpLHIucHVzaChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7ZS5fdHJpZ2dlcigidXBkYXRlIix0LHRoaXMuX3VpSGFzaCh0aGlzKSl9fS5jYWxsKHRoaXMsdGhpcy5jdXJyZW50Q29udGFpbmVyKSkpKTtmb3IodmFyIGk9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2k+PTA7aS0tKW58fHIucHVzaChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7ZS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsdCx0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY29udGFpbmVyc1tpXSkpLHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS5vdmVyJiYoci5wdXNoKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtlLl90cmlnZ2VyKCJvdXQiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKX19LmNhbGwodGhpcyx0aGlzLmNvbnRhaW5lcnNbaV0pKSx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3Zlcj0wKTt0aGlzLl9zdG9yZWRDdXJzb3ImJmUoImJvZHkiKS5jc3MoImN1cnNvciIsdGhpcy5fc3RvcmVkQ3Vyc29yKSx0aGlzLl9zdG9yZWRPcGFjaXR5JiZ0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiLHRoaXMuX3N0b3JlZE9wYWNpdHkpLHRoaXMuX3N0b3JlZFpJbmRleCYmdGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiLHRoaXMuX3N0b3JlZFpJbmRleD09ImF1dG8iPyIiOnRoaXMuX3N0b3JlZFpJbmRleCksdGhpcy5kcmFnZ2luZz0hMTtpZih0aGlzLmNhbmNlbEhlbHBlclJlbW92YWwpe2lmKCFuKXt0aGlzLl90cmlnZ2VyKCJiZWZvcmVTdG9wIix0LHRoaXMuX3VpSGFzaCgpKTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKylyW2ldLmNhbGwodGhpcyx0KTt0aGlzLl90cmlnZ2VyKCJzdG9wIix0LHRoaXMuX3VpSGFzaCgpKX1yZXR1cm4gdGhpcy5mcm9tT3V0c2lkZT0hMSwhMX1ufHx0aGlzLl90cmlnZ2VyKCJiZWZvcmVTdG9wIix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSksdGhpcy5oZWxwZXJbMF0hPXRoaXMuY3VycmVudEl0ZW1bMF0mJnRoaXMuaGVscGVyLnJlbW92ZSgpLHRoaXMuaGVscGVyPW51bGw7aWYoIW4pe2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKXJbaV0uY2FsbCh0aGlzLHQpO3RoaXMuX3RyaWdnZXIoInN0b3AiLHQsdGhpcy5fdWlIYXNoKCkpfXJldHVybiB0aGlzLmZyb21PdXRzaWRlPSExLCEwfSxfdHJpZ2dlcjpmdW5jdGlvbigpe2UuV2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk9PT0hMSYmdGhpcy5jYW5jZWwoKX0sX3VpSGFzaDpmdW5jdGlvbih0KXt2YXIgbj10fHx0aGlzO3JldHVybntoZWxwZXI6bi5oZWxwZXIscGxhY2Vob2xkZXI6bi5wbGFjZWhvbGRlcnx8ZShbXSkscG9zaXRpb246bi5wb3NpdGlvbixvcmlnaW5hbFBvc2l0aW9uOm4ub3JpZ2luYWxQb3NpdGlvbixvZmZzZXQ6bi5wb3NpdGlvbkFicyxpdGVtOm4uY3VycmVudEl0ZW0sc2VuZGVyOnQ/dC5lbGVtZW50Om51bGx9fX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQudmFsKCk7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fcmVmcmVzaCgpLHQhPT10aGlzLmVsZW1lbnQudmFsKCkmJnRoaXMuX3RyaWdnZXIoImNoYW5nZSIpfX1lLndpZGdldCgidWkuc3Bpbm5lciIse3ZlcnNpb246IjEuOS4wIixkZWZhdWx0RWxlbWVudDoiPGlucHV0PiIsd2lkZ2V0RXZlbnRQcmVmaXg6InNwaW4iLG9wdGlvbnM6e2N1bHR1cmU6bnVsbCxpY29uczp7ZG93bjoidWktaWNvbi10cmlhbmdsZS0xLXMiLHVwOiJ1aS1pY29uLXRyaWFuZ2xlLTEtbiJ9LGluY3JlbWVudGFsOiEwLG1heDpudWxsLG1pbjpudWxsLG51bWJlckZvcm1hdDpudWxsLHBhZ2U6MTAsc3RlcDoxLGNoYW5nZTpudWxsLHNwaW46bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX3NldE9wdGlvbigibWF4Iix0aGlzLm9wdGlvbnMubWF4KSx0aGlzLl9zZXRPcHRpb24oIm1pbiIsdGhpcy5vcHRpb25zLm1pbiksdGhpcy5fc2V0T3B0aW9uKCJzdGVwIix0aGlzLm9wdGlvbnMuc3RlcCksdGhpcy5fdmFsdWUodGhpcy5lbGVtZW50LnZhbCgpLCEwKSx0aGlzLl9kcmF3KCksdGhpcy5fb24odGhpcy5fZXZlbnRzKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5fb24odGhpcy53aW5kb3cse2JlZm9yZXVubG9hZDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKX19KX0sX2dldENyZWF0ZU9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgdD17fSxuPXRoaXMuZWxlbWVudDtyZXR1cm4gZS5lYWNoKFsibWluIiwibWF4Iiwic3RlcCJdLGZ1bmN0aW9uKGUscil7dmFyIGk9bi5hdHRyKHIpO2khPT11bmRlZmluZWQmJmkubGVuZ3RoJiYodFtyXT1pKX0pLHR9LF9ldmVudHM6e2tleWRvd246ZnVuY3Rpb24oZSl7dGhpcy5fc3RhcnQoZSkmJnRoaXMuX2tleWRvd24oZSkmJmUucHJldmVudERlZmF1bHQoKX0sa2V5dXA6Il9zdG9wIixmb2N1czpmdW5jdGlvbigpe3RoaXMudWlTcGlubmVyLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0aGlzLnByZXZpb3VzPXRoaXMuZWxlbWVudC52YWwoKX0sYmx1cjpmdW5jdGlvbihlKXtpZih0aGlzLmNhbmNlbEJsdXIpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXI7cmV0dXJufXRoaXMuX3JlZnJlc2goKSx0aGlzLnVpU3Bpbm5lci5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdGhpcy5wcmV2aW91cyE9PXRoaXMuZWxlbWVudC52YWwoKSYmdGhpcy5fdHJpZ2dlcigiY2hhbmdlIixlKX0sbW91c2V3aGVlbDpmdW5jdGlvbihlLHQpe2lmKCF0KXJldHVybjtpZighdGhpcy5zcGlubmluZyYmIXRoaXMuX3N0YXJ0KGUpKXJldHVybiExO3RoaXMuX3NwaW4oKHQ+MD8xOi0xKSp0aGlzLm9wdGlvbnMuc3RlcCxlKSxjbGVhclRpbWVvdXQodGhpcy5tb3VzZXdoZWVsVGltZXIpLHRoaXMubW91c2V3aGVlbFRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5zcGlubmluZyYmdGhpcy5fc3RvcChlKX0sMTAwKSxlLnByZXZlbnREZWZhdWx0KCl9LCJtb3VzZWRvd24gLnVpLXNwaW5uZXItYnV0dG9uIjpmdW5jdGlvbih0KXtmdW5jdGlvbiByKCl7dmFyIGU9dGhpcy5lbGVtZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50O2V8fCh0aGlzLmVsZW1lbnQuZm9jdXMoKSx0aGlzLnByZXZpb3VzPW4sdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPW59KSl9dmFyIG47bj10aGlzLmVsZW1lbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQ/dGhpcy5wcmV2aW91czp0aGlzLmVsZW1lbnQudmFsKCksdC5wcmV2ZW50RGVmYXVsdCgpLHIuY2FsbCh0aGlzKSx0aGlzLmNhbmNlbEJsdXI9ITAsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5jYW5jZWxCbHVyLHIuY2FsbCh0aGlzKX0pO2lmKHRoaXMuX3N0YXJ0KHQpPT09ITEpcmV0dXJuO3RoaXMuX3JlcGVhdChudWxsLGUodC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3Bpbm5lci11cCIpPzE6LTEsdCl9LCJtb3VzZXVwIC51aS1zcGlubmVyLWJ1dHRvbiI6Il9zdG9wIiwibW91c2VlbnRlciAudWktc3Bpbm5lci1idXR0b24iOmZ1bmN0aW9uKHQpe2lmKCFlKHQuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpKXJldHVybjtpZih0aGlzLl9zdGFydCh0KT09PSExKXJldHVybiExO3RoaXMuX3JlcGVhdChudWxsLGUodC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3Bpbm5lci11cCIpPzE6LTEsdCl9LCJtb3VzZWxlYXZlIC51aS1zcGlubmVyLWJ1dHRvbiI6Il9zdG9wIn0sX2RyYXc6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnVpU3Bpbm5lcj10aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNwaW5uZXItaW5wdXQiKS5hdHRyKCJhdXRvY29tcGxldGUiLCJvZmYiKS53cmFwKHRoaXMuX3VpU3Bpbm5lckh0bWwoKSkucGFyZW50KCkuYXBwZW5kKHRoaXMuX2J1dHRvbkh0bWwoKSk7dGhpcy5faG92ZXJhYmxlKGUpLHRoaXMuZWxlbWVudC5hdHRyKCJyb2xlIiwic3BpbmJ1dHRvbiIpLHRoaXMuYnV0dG9ucz1lLmZpbmQoIi51aS1zcGlubmVyLWJ1dHRvbiIpLmF0dHIoInRhYkluZGV4IiwtMSkuYnV0dG9uKCkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwiKSx0aGlzLmJ1dHRvbnMuaGVpZ2h0KCk+TWF0aC5jZWlsKGUuaGVpZ2h0KCkqLjUpJiZlLmhlaWdodCgpPjAmJmUuaGVpZ2h0KGUuaGVpZ2h0KCkpLHRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5kaXNhYmxlKCl9LF9rZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyPWUudWkua2V5Q29kZTtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIHIuVVA6cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLDEsdCksITA7Y2FzZSByLkRPV046cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLC0xLHQpLCEwO2Nhc2Ugci5QQUdFX1VQOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCxuLnBhZ2UsdCksITA7Y2FzZSByLlBBR0VfRE9XTjpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsLW4ucGFnZSx0KSwhMH1yZXR1cm4hMX0sX3VpU3Bpbm5lckh0bWw6ZnVuY3Rpb24oKXtyZXR1cm4iPHNwYW4gY2xhc3M9J3VpLXNwaW5uZXIgdWktc3RhdGUtZGVmYXVsdCB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCc+PC9zcGFuPiJ9LF9idXR0b25IdG1sOmZ1bmN0aW9uKCl7cmV0dXJuIjxhIGNsYXNzPSd1aS1zcGlubmVyLWJ1dHRvbiB1aS1zcGlubmVyLXVwIHVpLWNvcm5lci10cic+PHNwYW4gY2xhc3M9J3VpLWljb24gIit0aGlzLm9wdGlvbnMuaWNvbnMudXArIic+JiM5NjUwOzwvc3Bhbj4iKyI8L2E+IisiPGEgY2xhc3M9J3VpLXNwaW5uZXItYnV0dG9uIHVpLXNwaW5uZXItZG93biB1aS1jb3JuZXItYnInPiIrIjxzcGFuIGNsYXNzPSd1aS1pY29uICIrdGhpcy5vcHRpb25zLmljb25zLmRvd24rIic+JiM5NjYwOzwvc3Bhbj4iKyI8L2E+In0sX3N0YXJ0OmZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLnNwaW5uaW5nJiZ0aGlzLl90cmlnZ2VyKCJzdGFydCIsZSk9PT0hMT8hMToodGhpcy5jb3VudGVyfHwodGhpcy5jb3VudGVyPTEpLHRoaXMuc3Bpbm5pbmc9ITAsITApfSxfcmVwZWF0OmZ1bmN0aW9uKGUsdCxuKXtlPWV8fDUwMCxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX3JlcGVhdCg0MCx0LG4pfSxlKSx0aGlzLl9zcGluKHQqdGhpcy5vcHRpb25zLnN0ZXAsbil9LF9zcGluOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy52YWx1ZSgpfHwwO3RoaXMuY291bnRlcnx8KHRoaXMuY291bnRlcj0xKSxuPXRoaXMuX2FkanVzdFZhbHVlKG4rZSp0aGlzLl9pbmNyZW1lbnQodGhpcy5jb3VudGVyKSk7aWYoIXRoaXMuc3Bpbm5pbmd8fHRoaXMuX3RyaWdnZXIoInNwaW4iLHQse3ZhbHVlOm59KSE9PSExKXRoaXMuX3ZhbHVlKG4pLHRoaXMuY291bnRlcisrfSxfaW5jcmVtZW50OmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucy5pbmNyZW1lbnRhbDtyZXR1cm4gbj9lLmlzRnVuY3Rpb24obik/bih0KTpNYXRoLmZsb29yKHQqdCp0LzVlNC10KnQvNTAwKzE3KnQvMjAwKzEpOjF9LF9wcmVjaXNpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcmVjaXNpb25PZih0aGlzLm9wdGlvbnMuc3RlcCk7cmV0dXJuIHRoaXMub3B0aW9ucy5taW4hPT1udWxsJiYoZT1NYXRoLm1heChlLHRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5taW4pKSksZX0sX3ByZWNpc2lvbk9mOmZ1bmN0aW9uKGUpe3ZhciB0PWUudG9TdHJpbmcoKSxuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPT09LTE/MDp0Lmxlbmd0aC1uLTF9LF9hZGp1c3RWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcy5vcHRpb25zO3JldHVybiB0PXIubWluIT09bnVsbD9yLm1pbjowLG49ZS10LG49TWF0aC5yb3VuZChuL3Iuc3RlcCkqci5zdGVwLGU9dCtuLGU9cGFyc2VGbG9hdChlLnRvRml4ZWQodGhpcy5fcHJlY2lzaW9uKCkpKSxyLm1heCE9PW51bGwmJmU+ci5tYXg/ci5tYXg6ci5taW4hPT1udWxsJiZlPHIubWluP3IubWluOmV9LF9zdG9wOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLnNwaW5uaW5nKXJldHVybjtjbGVhclRpbWVvdXQodGhpcy50aW1lciksY2xlYXJUaW1lb3V0KHRoaXMubW91c2V3aGVlbFRpbWVyKSx0aGlzLmNvdW50ZXI9MCx0aGlzLnNwaW5uaW5nPSExLHRoaXMuX3RyaWdnZXIoInN0b3AiLGUpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7aWYoZT09PSJjdWx0dXJlInx8ZT09PSJudW1iZXJGb3JtYXQiKXt2YXIgbj10aGlzLl9wYXJzZSh0aGlzLmVsZW1lbnQudmFsKCkpO3RoaXMub3B0aW9uc1tlXT10LHRoaXMuZWxlbWVudC52YWwodGhpcy5fZm9ybWF0KG4pKTtyZXR1cm59KGU9PT0ibWF4Inx8ZT09PSJtaW4ifHxlPT09InN0ZXAiKSYmdHlwZW9mIHQ9PSJzdHJpbmciJiYodD10aGlzLl9wYXJzZSh0KSksdGhpcy5fc3VwZXIoZSx0KSxlPT09ImRpc2FibGVkIiYmKHQ/KHRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsITApLHRoaXMuYnV0dG9ucy5idXR0b24oImRpc2FibGUiKSk6KHRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsITEpLHRoaXMuYnV0dG9ucy5idXR0b24oImVuYWJsZSIpKSl9LF9zZXRPcHRpb25zOnQoZnVuY3Rpb24oZSl7dGhpcy5fc3VwZXIoZSksdGhpcy5fdmFsdWUodGhpcy5lbGVtZW50LnZhbCgpKX0pLF9wYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciJiZlIT09IiImJihlPXdpbmRvdy5HbG9iYWxpemUmJnRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQ/R2xvYmFsaXplLnBhcnNlRmxvYXQoZSwxMCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6K2UpLGU9PT0iInx8aXNOYU4oZSk/bnVsbDplfSxfZm9ybWF0OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09IiI/IiI6d2luZG93Lkdsb2JhbGl6ZSYmdGhpcy5vcHRpb25zLm51bWJlckZvcm1hdD9HbG9iYWxpemUuZm9ybWF0KGUsdGhpcy5vcHRpb25zLm51bWJlckZvcm1hdCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6ZX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYXR0cih7ImFyaWEtdmFsdWVtaW4iOnRoaXMub3B0aW9ucy5taW4sImFyaWEtdmFsdWVtYXgiOnRoaXMub3B0aW9ucy5tYXgsImFyaWEtdmFsdWVub3ciOnRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSl9KX0sX3ZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG47ZSE9PSIiJiYobj10aGlzLl9wYXJzZShlKSxuIT09bnVsbCYmKHR8fChuPXRoaXMuX2FkanVzdFZhbHVlKG4pKSxlPXRoaXMuX2Zvcm1hdChuKSkpLHRoaXMuZWxlbWVudC52YWwoZSksdGhpcy5fcmVmcmVzaCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc3Bpbm5lci1pbnB1dCIpLnByb3AoImRpc2FibGVkIiwhMSkucmVtb3ZlQXR0cigiYXV0b2NvbXBsZXRlIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVtaW4iKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbWF4IikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW5vdyIpLHRoaXMudWlTcGlubmVyLnJlcGxhY2VXaXRoKHRoaXMuZWxlbWVudCl9LHN0ZXBVcDp0KGZ1bmN0aW9uKGUpe3RoaXMuX3N0ZXBVcChlKX0pLF9zdGVwVXA6ZnVuY3Rpb24oZSl7dGhpcy5fc3BpbigoZXx8MSkqdGhpcy5vcHRpb25zLnN0ZXApfSxzdGVwRG93bjp0KGZ1bmN0aW9uKGUpe3RoaXMuX3N0ZXBEb3duKGUpfSksX3N0ZXBEb3duOmZ1bmN0aW9uKGUpe3RoaXMuX3NwaW4oKGV8fDEpKi10aGlzLm9wdGlvbnMuc3RlcCl9LHBhZ2VVcDp0KGZ1bmN0aW9uKGUpe3RoaXMuX3N0ZXBVcCgoZXx8MSkqdGhpcy5vcHRpb25zLnBhZ2UpfSkscGFnZURvd246dChmdW5jdGlvbihlKXt0aGlzLl9zdGVwRG93bigoZXx8MSkqdGhpcy5vcHRpb25zLnBhZ2UpfSksdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSk7dCh0aGlzLl92YWx1ZSkuY2FsbCh0aGlzLGUpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51aVNwaW5uZXJ9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXtyZXR1cm4rK259ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZT1lLmNsb25lTm9kZSghMSksZS5oYXNoLmxlbmd0aD4xJiZlLmhyZWYucmVwbGFjZShyLCIiKT09PWxvY2F0aW9uLmhyZWYucmVwbGFjZShyLCIiKX12YXIgbj0wLHI9LyMuKiQvO2Uud2lkZ2V0KCJ1aS50YWJzIix7dmVyc2lvbjoiMS45LjAiLGRlbGF5OjMwMCxvcHRpb25zOnthY3RpdmU6bnVsbCxjb2xsYXBzaWJsZTohMSxldmVudDoiY2xpY2siLGhlaWdodFN0eWxlOiJjb250ZW50IixoaWRlOm51bGwsc2hvdzpudWxsLGFjdGl2YXRlOm51bGwsYmVmb3JlQWN0aXZhdGU6bnVsbCxiZWZvcmVMb2FkOm51bGwsbG9hZDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzLHI9dGhpcy5vcHRpb25zLGk9ci5hY3RpdmU7dGhpcy5ydW5uaW5nPSExLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktdGFicyB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLnRvZ2dsZUNsYXNzKCJ1aS10YWJzLWNvbGxhcHNpYmxlIixyLmNvbGxhcHNpYmxlKS5kZWxlZ2F0ZSgiLnVpLXRhYnMtbmF2ID4gbGkiLCJtb3VzZWRvd24iK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24odCl7ZSh0aGlzKS5pcygiLnVpLXN0YXRlLWRpc2FibGVkIikmJnQucHJldmVudERlZmF1bHQoKX0pLmRlbGVnYXRlKCIudWktdGFicy1hbmNob3IiLCJmb2N1cyIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2UodGhpcykuY2xvc2VzdCgibGkiKS5pcygiLnVpLXN0YXRlLWRpc2FibGVkIikmJnRoaXMuYmx1cigpfSksdGhpcy5fcHJvY2Vzc1RhYnMoKTtpZihpPT09bnVsbCl7bG9jYXRpb24uaGFzaCYmdGhpcy5hbmNob3JzLmVhY2goZnVuY3Rpb24oZSx0KXtpZih0Lmhhc2g9PT1sb2NhdGlvbi5oYXNoKXJldHVybiBpPWUsITF9KSxpPT09bnVsbCYmKGk9dGhpcy50YWJzLmZpbHRlcigiLnVpLXRhYnMtYWN0aXZlIikuaW5kZXgoKSk7aWYoaT09PW51bGx8fGk9PT0tMSlpPXRoaXMudGFicy5sZW5ndGg/MDohMX1pIT09ITEmJihpPXRoaXMudGFicy5pbmRleCh0aGlzLnRhYnMuZXEoaSkpLGk9PT0tMSYmKGk9ci5jb2xsYXBzaWJsZT8hMTowKSksci5hY3RpdmU9aSwhci5jb2xsYXBzaWJsZSYmci5hY3RpdmU9PT0hMSYmdGhpcy5hbmNob3JzLmxlbmd0aCYmKHIuYWN0aXZlPTApLGUuaXNBcnJheShyLmRpc2FibGVkKSYmKHIuZGlzYWJsZWQ9ZS51bmlxdWUoci5kaXNhYmxlZC5jb25jYXQoZS5tYXAodGhpcy50YWJzLmZpbHRlcigiLnVpLXN0YXRlLWRpc2FibGVkIiksZnVuY3Rpb24oZSl7cmV0dXJuIG4udGFicy5pbmRleChlKX0pKSkuc29ydCgpKSx0aGlzLm9wdGlvbnMuYWN0aXZlIT09ITEmJnRoaXMuYW5jaG9ycy5sZW5ndGg/dGhpcy5hY3RpdmU9dGhpcy5fZmluZEFjdGl2ZSh0aGlzLm9wdGlvbnMuYWN0aXZlKTp0aGlzLmFjdGl2ZT1lKCksdGhpcy5fcmVmcmVzaCgpLHRoaXMuYWN0aXZlLmxlbmd0aCYmdGhpcy5sb2FkKHIuYWN0aXZlKX0sX2dldENyZWF0ZUV2ZW50RGF0YTpmdW5jdGlvbigpe3JldHVybnt0YWI6dGhpcy5hY3RpdmUscGFuZWw6dGhpcy5hY3RpdmUubGVuZ3RoP3RoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKTplKCl9fSxfdGFiS2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCkuY2xvc2VzdCgibGkiKSxyPXRoaXMudGFicy5pbmRleChuKSxpPSEwO2lmKHRoaXMuX2hhbmRsZVBhZ2VOYXYodCkpcmV0dXJuO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLlJJR0hUOmNhc2UgZS51aS5rZXlDb2RlLkRPV046cisrO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlVQOmNhc2UgZS51aS5rZXlDb2RlLkxFRlQ6aT0hMSxyLS07YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5EOnI9dGhpcy5hbmNob3JzLmxlbmd0aC0xO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6cj0wO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlNQQUNFOnQucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSx0aGlzLl9hY3RpdmF0ZShyKTtyZXR1cm47Y2FzZSBlLnVpLmtleUNvZGUuRU5URVI6dC5wcmV2ZW50RGVmYXVsdCgpLGNsZWFyVGltZW91dCh0aGlzLmFjdGl2YXRpbmcpLHRoaXMuX2FjdGl2YXRlKHI9PT10aGlzLm9wdGlvbnMuYWN0aXZlPyExOnIpO3JldHVybjtkZWZhdWx0OnJldHVybn10LnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZykscj10aGlzLl9mb2N1c05leHRUYWIocixpKSx0LmN0cmxLZXl8fChuLmF0dHIoImFyaWEtc2VsZWN0ZWQiLCJmYWxzZSIpLHRoaXMudGFicy5lcShyKS5hdHRyKCJhcmlhLXNlbGVjdGVkIiwidHJ1ZSIpLHRoaXMuYWN0aXZhdGluZz10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMub3B0aW9uKCJhY3RpdmUiLHIpfSx0aGlzLmRlbGF5KSl9LF9wYW5lbEtleWRvd246ZnVuY3Rpb24odCl7aWYodGhpcy5faGFuZGxlUGFnZU5hdih0KSlyZXR1cm47dC5jdHJsS2V5JiZ0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuVVAmJih0LnByZXZlbnREZWZhdWx0KCksdGhpcy5hY3RpdmUuZm9jdXMoKSl9LF9oYW5kbGVQYWdlTmF2OmZ1bmN0aW9uKHQpe2lmKHQuYWx0S2V5JiZ0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuUEFHRV9VUClyZXR1cm4gdGhpcy5fYWN0aXZhdGUodGhpcy5fZm9jdXNOZXh0VGFiKHRoaXMub3B0aW9ucy5hY3RpdmUtMSwhMSkpLCEwO2lmKHQuYWx0S2V5JiZ0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuUEFHRV9ET1dOKXJldHVybiB0aGlzLl9hY3RpdmF0ZSh0aGlzLl9mb2N1c05leHRUYWIodGhpcy5vcHRpb25zLmFjdGl2ZSsxLCEwKSksITB9LF9maW5kTmV4dFRhYjpmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGkoKXtyZXR1cm4gdD5yJiYodD0wKSx0PDAmJih0PXIpLHR9dmFyIHI9dGhpcy50YWJzLmxlbmd0aC0xO3doaWxlKGUuaW5BcnJheShpKCksdGhpcy5vcHRpb25zLmRpc2FibGVkKSE9PS0xKXQ9bj90KzE6dC0xO3JldHVybiB0fSxfZm9jdXNOZXh0VGFiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9dGhpcy5fZmluZE5leHRUYWIoZSx0KSx0aGlzLnRhYnMuZXEoZSkuZm9jdXMoKSxlfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7aWYoZT09PSJhY3RpdmUiKXt0aGlzLl9hY3RpdmF0ZSh0KTtyZXR1cm59aWYoZT09PSJkaXNhYmxlZCIpe3RoaXMuX3NldHVwRGlzYWJsZWQodCk7cmV0dXJufXRoaXMuX3N1cGVyKGUsdCksZT09PSJjb2xsYXBzaWJsZSImJih0aGlzLmVsZW1lbnQudG9nZ2xlQ2xhc3MoInVpLXRhYnMtY29sbGFwc2libGUiLHQpLCF0JiZ0aGlzLm9wdGlvbnMuYWN0aXZlPT09ITEmJnRoaXMuX2FjdGl2YXRlKDApKSxlPT09ImV2ZW50IiYmdGhpcy5fc2V0dXBFdmVudHModCksZT09PSJoZWlnaHRTdHlsZSImJnRoaXMuX3NldHVwSGVpZ2h0U3R5bGUodCl9LF90YWJJZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5hdHRyKCJhcmlhLWNvbnRyb2xzIil8fCJ1aS10YWJzLSIraSgpfSxfc2FuaXRpemVTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gZT9lLnJlcGxhY2UoL1shIiQlJicoKSorLC5cLzo7PD0+P0BcW1xdXF5ge3x9fl0vZywiXFwkJiIpOiIifSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzLm9wdGlvbnMscj10aGlzLnRhYmxpc3QuY2hpbGRyZW4oIjpoYXMoYVtocmVmXSkiKTtuLmRpc2FibGVkPWUubWFwKHIuZmlsdGVyKCIudWktc3RhdGUtZGlzYWJsZWQiKSxmdW5jdGlvbihlKXtyZXR1cm4gci5pbmRleChlKX0pLHRoaXMuX3Byb2Nlc3NUYWJzKCksbi5hY3RpdmU9PT0hMXx8IXRoaXMuYW5jaG9ycy5sZW5ndGg/KG4uYWN0aXZlPSExLHRoaXMuYWN0aXZlPWUoKSk6dGhpcy5hY3RpdmUubGVuZ3RoJiYhZS5jb250YWlucyh0aGlzLnRhYmxpc3RbMF0sdGhpcy5hY3RpdmVbMF0pP3RoaXMudGFicy5sZW5ndGg9PT1uLmRpc2FibGVkLmxlbmd0aD8obi5hY3RpdmU9ITEsdGhpcy5hY3RpdmU9ZSgpKTp0aGlzLl9hY3RpdmF0ZSh0aGlzLl9maW5kTmV4dFRhYihNYXRoLm1heCgwLG4uYWN0aXZlLTEpLCExKSk6bi5hY3RpdmU9dGhpcy50YWJzLmluZGV4KHRoaXMuYWN0aXZlKSx0aGlzLl9yZWZyZXNoKCl9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5fc2V0dXBEaXNhYmxlZCh0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLHRoaXMuX3NldHVwRXZlbnRzKHRoaXMub3B0aW9ucy5ldmVudCksdGhpcy5fc2V0dXBIZWlnaHRTdHlsZSh0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUpLHRoaXMudGFicy5ub3QodGhpcy5hY3RpdmUpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLHRhYkluZGV4Oi0xfSksdGhpcy5wYW5lbHMubm90KHRoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKSkuaGlkZSgpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLCJhcmlhLWhpZGRlbiI6InRydWUifSksdGhpcy5hY3RpdmUubGVuZ3RoPyh0aGlzLmFjdGl2ZS5hZGRDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIikuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJ0cnVlIix0YWJJbmRleDowfSksdGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpLnNob3coKS5hdHRyKHsiYXJpYS1leHBhbmRlZCI6InRydWUiLCJhcmlhLWhpZGRlbiI6ImZhbHNlIn0pKTp0aGlzLnRhYnMuZXEoMCkuYXR0cigidGFiSW5kZXgiLDApfSxfcHJvY2Vzc1RhYnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMudGFibGlzdD10aGlzLl9nZXRMaXN0KCkuYWRkQ2xhc3MoInVpLXRhYnMtbmF2IHVpLWhlbHBlci1yZXNldCB1aS1oZWxwZXItY2xlYXJmaXggdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIikuYXR0cigicm9sZSIsInRhYmxpc3QiKSx0aGlzLnRhYnM9dGhpcy50YWJsaXN0LmZpbmQoIj4gbGk6aGFzKGFbaHJlZl0pIikuYWRkQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLXRvcCIpLmF0dHIoe3JvbGU6InRhYiIsdGFiSW5kZXg6LTF9KSx0aGlzLmFuY2hvcnM9dGhpcy50YWJzLm1hcChmdW5jdGlvbigpe3JldHVybiBlKCJhIix0aGlzKVswXX0pLmFkZENsYXNzKCJ1aS10YWJzLWFuY2hvciIpLmF0dHIoe3JvbGU6InByZXNlbnRhdGlvbiIsdGFiSW5kZXg6LTF9KSx0aGlzLnBhbmVscz1lKCksdGhpcy5hbmNob3JzLmVhY2goZnVuY3Rpb24obixyKXt2YXIgaSxvLHUsYT1lKHIpLnVuaXF1ZUlkKCkuYXR0cigiaWQiKSxmPWUocikuY2xvc2VzdCgibGkiKSxsPWYuYXR0cigiYXJpYS1jb250cm9scyIpO3Mocik/KGk9ci5oYXNoLG89dC5lbGVtZW50LmZpbmQodC5fc2FuaXRpemVTZWxlY3RvcihpKSkpOih1PXQuX3RhYklkKGYpLGk9IiMiK3Usbz10LmVsZW1lbnQuZmluZChpKSxvLmxlbmd0aHx8KG89dC5fY3JlYXRlUGFuZWwodSksby5pbnNlcnRBZnRlcih0LnBhbmVsc1tuLTFdfHx0LnRhYmxpc3QpKSxvLmF0dHIoImFyaWEtbGl2ZSIsInBvbGl0ZSIpKSxvLmxlbmd0aCYmKHQucGFuZWxzPXQucGFuZWxzLmFkZChvKSksbCYmZi5kYXRhKCJ1aS10YWJzLWFyaWEtY29udHJvbHMiLGwpLGYuYXR0cih7ImFyaWEtY29udHJvbHMiOmkuc3Vic3RyaW5nKDEpLCJhcmlhLWxhYmVsbGVkYnkiOmF9KSxvLmF0dHIoImFyaWEtbGFiZWxsZWRieSIsYSl9KSx0aGlzLnBhbmVscy5hZGRDbGFzcygidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuYXR0cigicm9sZSIsInRhYnBhbmVsIil9LF9nZXRMaXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5maW5kKCJvbCx1bCIpLmVxKDApfSxfY3JlYXRlUGFuZWw6ZnVuY3Rpb24odCl7cmV0dXJuIGUoIjxkaXY+IikuYXR0cigiaWQiLHQpLmFkZENsYXNzKCJ1aS10YWJzLXBhbmVsIHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20iKS5kYXRhKCJ1aS10YWJzLWRlc3Ryb3kiLCEwKX0sX3NldHVwRGlzYWJsZWQ6ZnVuY3Rpb24odCl7ZS5pc0FycmF5KHQpJiYodC5sZW5ndGg/dC5sZW5ndGg9PT10aGlzLmFuY2hvcnMubGVuZ3RoJiYodD0hMCk6dD0hMSk7Zm9yKHZhciBuPTAscjtyPXRoaXMudGFic1tuXTtuKyspdD09PSEwfHxlLmluQXJyYXkobix0KSE9PS0xP2UocikuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsInRydWUiKTplKHIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKTt0aGlzLm9wdGlvbnMuZGlzYWJsZWQ9dH0sX3NldHVwRXZlbnRzOmZ1bmN0aW9uKHQpe3ZhciBuPXtjbGljazpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9fTt0JiZlLmVhY2godC5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7blt0XT0iX2V2ZW50SGFuZGxlciJ9KSx0aGlzLl9vZmYodGhpcy5hbmNob3JzLmFkZCh0aGlzLnRhYnMpLmFkZCh0aGlzLnBhbmVscykpLHRoaXMuX29uKHRoaXMuYW5jaG9ycyxuKSx0aGlzLl9vbih0aGlzLnRhYnMse2tleWRvd246Il90YWJLZXlkb3duIn0pLHRoaXMuX29uKHRoaXMucGFuZWxzLHtrZXlkb3duOiJfcGFuZWxLZXlkb3duIn0pLHRoaXMuX2ZvY3VzYWJsZSh0aGlzLnRhYnMpLHRoaXMuX2hvdmVyYWJsZSh0aGlzLnRhYnMpfSxfc2V0dXBIZWlnaHRTdHlsZTpmdW5jdGlvbih0KXt2YXIgbixyLGk9dGhpcy5lbGVtZW50LnBhcmVudCgpO3Q9PT0iZmlsbCI/KGUuc3VwcG9ydC5taW5IZWlnaHR8fChyPWkuY3NzKCJvdmVyZmxvdyIpLGkuY3NzKCJvdmVyZmxvdyIsImhpZGRlbiIpKSxuPWkuaGVpZ2h0KCksdGhpcy5lbGVtZW50LnNpYmxpbmdzKCI6dmlzaWJsZSIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLHI9dC5jc3MoInBvc2l0aW9uIik7aWYocj09PSJhYnNvbHV0ZSJ8fHI9PT0iZml4ZWQiKXJldHVybjtuLT10Lm91dGVySGVpZ2h0KCEwKX0pLHImJmkuY3NzKCJvdmVyZmxvdyIsciksdGhpcy5lbGVtZW50LmNoaWxkcmVuKCkubm90KHRoaXMucGFuZWxzKS5lYWNoKGZ1bmN0aW9uKCl7bi09ZSh0aGlzKS5vdXRlckhlaWdodCghMCl9KSx0aGlzLnBhbmVscy5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5oZWlnaHQoTWF0aC5tYXgoMCxuLWUodGhpcykuaW5uZXJIZWlnaHQoKStlKHRoaXMpLmhlaWdodCgpKSl9KS5jc3MoIm92ZXJmbG93IiwiYXV0byIpKTp0PT09ImF1dG8iJiYobj0wLHRoaXMucGFuZWxzLmVhY2goZnVuY3Rpb24oKXtuPU1hdGgubWF4KG4sZSh0aGlzKS5oZWlnaHQoIiIpLmhlaWdodCgpKX0pLmhlaWdodChuKSl9LF9ldmVudEhhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zLHI9dGhpcy5hY3RpdmUsaT1lKHQuY3VycmVudFRhcmdldCkscz1pLmNsb3Nlc3QoImxpIiksbz1zWzBdPT09clswXSx1PW8mJm4uY29sbGFwc2libGUsYT11P2UoKTp0aGlzLl9nZXRQYW5lbEZvclRhYihzKSxmPXIubGVuZ3RoP3RoaXMuX2dldFBhbmVsRm9yVGFiKHIpOmUoKSxsPXtvbGRUYWI6cixvbGRQYW5lbDpmLG5ld1RhYjp1P2UoKTpzLG5ld1BhbmVsOmF9O3QucHJldmVudERlZmF1bHQoKTtpZihzLmhhc0NsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpfHxzLmhhc0NsYXNzKCJ1aS10YWJzLWxvYWRpbmciKXx8dGhpcy5ydW5uaW5nfHxvJiYhbi5jb2xsYXBzaWJsZXx8dGhpcy5fdHJpZ2dlcigiYmVmb3JlQWN0aXZhdGUiLHQsbCk9PT0hMSlyZXR1cm47bi5hY3RpdmU9dT8hMTp0aGlzLnRhYnMuaW5kZXgocyksdGhpcy5hY3RpdmU9bz9lKCk6cyx0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKSwhZi5sZW5ndGgmJiFhLmxlbmd0aCYmZS5lcnJvcigialF1ZXJ5IFVJIFRhYnM6IE1pc21hdGNoaW5nIGZyYWdtZW50IGlkZW50aWZpZXIuIiksYS5sZW5ndGgmJnRoaXMubG9hZCh0aGlzLnRhYnMuaW5kZXgocyksdCksdGhpcy5fdG9nZ2xlKHQsbCl9LF90b2dnbGU6ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBvKCl7ci5ydW5uaW5nPSExLHIuX3RyaWdnZXIoImFjdGl2YXRlIix0LG4pfWZ1bmN0aW9uIHUoKXtuLm5ld1RhYi5jbG9zZXN0KCJsaSIpLmFkZENsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKSxpLmxlbmd0aCYmci5vcHRpb25zLnNob3c/ci5fc2hvdyhpLHIub3B0aW9ucy5zaG93LG8pOihpLnNob3coKSxvKCkpfXZhciByPXRoaXMsaT1uLm5ld1BhbmVsLHM9bi5vbGRQYW5lbDt0aGlzLnJ1bm5pbmc9ITAscy5sZW5ndGgmJnRoaXMub3B0aW9ucy5oaWRlP3RoaXMuX2hpZGUocyx0aGlzLm9wdGlvbnMuaGlkZSxmdW5jdGlvbigpe24ub2xkVGFiLmNsb3Nlc3QoImxpIikucmVtb3ZlQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLHUoKX0pOihuLm9sZFRhYi5jbG9zZXN0KCJsaSIpLnJlbW92ZUNsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKSxzLmhpZGUoKSx1KCkpLHMuYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJmYWxzZSIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxuLm9sZFRhYi5hdHRyKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSxpLmxlbmd0aCYmcy5sZW5ndGg/bi5vbGRUYWIuYXR0cigidGFiSW5kZXgiLC0xKTppLmxlbmd0aCYmdGhpcy50YWJzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmF0dHIoInRhYkluZGV4Iik9PT0wfSkuYXR0cigidGFiSW5kZXgiLC0xKSxpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsImFyaWEtaGlkZGVuIjoiZmFsc2UifSksbi5uZXdUYWIuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJ0cnVlIix0YWJJbmRleDowfSl9LF9hY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgbixyPXRoaXMuX2ZpbmRBY3RpdmUodCk7aWYoclswXT09PXRoaXMuYWN0aXZlWzBdKXJldHVybjtyLmxlbmd0aHx8KHI9dGhpcy5hY3RpdmUpLG49ci5maW5kKCIudWktdGFicy1hbmNob3IiKVswXSx0aGlzLl9ldmVudEhhbmRsZXIoe3RhcmdldDpuLGN1cnJlbnRUYXJnZXQ6bixwcmV2ZW50RGVmYXVsdDplLm5vb3B9KX0sX2ZpbmRBY3RpdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT0hMT9lKCk6dGhpcy50YWJzLmVxKHQpfSxfZ2V0SW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9dGhpcy5hbmNob3JzLmluZGV4KHRoaXMuYW5jaG9ycy5maWx0ZXIoIltocmVmJD0nIitlKyInXSIpKSksZX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXRhYnMgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwgdWktdGFicy1jb2xsYXBzaWJsZSIpLHRoaXMudGFibGlzdC5yZW1vdmVDbGFzcygidWktdGFicy1uYXYgdWktaGVscGVyLXJlc2V0IHVpLWhlbHBlci1jbGVhcmZpeCB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1hbGwiKS5yZW1vdmVBdHRyKCJyb2xlIiksdGhpcy5hbmNob3JzLnJlbW92ZUNsYXNzKCJ1aS10YWJzLWFuY2hvciIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJ0YWJJbmRleCIpLnJlbW92ZURhdGEoImhyZWYudGFicyIpLnJlbW92ZURhdGEoImxvYWQudGFicyIpLnJlbW92ZVVuaXF1ZUlkKCksdGhpcy50YWJzLmFkZCh0aGlzLnBhbmVscykuZWFjaChmdW5jdGlvbigpe2UuZGF0YSh0aGlzLCJ1aS10YWJzLWRlc3Ryb3kiKT9lKHRoaXMpLnJlbW92ZSgpOmUodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktc3RhdGUtYWN0aXZlIHVpLXN0YXRlLWRpc2FibGVkIHVpLWNvcm5lci10b3AgdWktY29ybmVyLWJvdHRvbSB1aS13aWRnZXQtY29udGVudCB1aS10YWJzLWFjdGl2ZSB1aS10YWJzLXBhbmVsIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVBdHRyKCJhcmlhLWxpdmUiKS5yZW1vdmVBdHRyKCJhcmlhLWJ1c3kiKS5yZW1vdmVBdHRyKCJhcmlhLXNlbGVjdGVkIikucmVtb3ZlQXR0cigiYXJpYS1sYWJlbGxlZGJ5IikucmVtb3ZlQXR0cigiYXJpYS1oaWRkZW4iKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigicm9sZSIpfSksdGhpcy50YWJzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLG49dC5kYXRhKCJ1aS10YWJzLWFyaWEtY29udHJvbHMiKTtuP3QuYXR0cigiYXJpYS1jb250cm9scyIsbik6dC5yZW1vdmVBdHRyKCJhcmlhLWNvbnRyb2xzIil9KSx0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUhPT0iY29udGVudCImJnRoaXMucGFuZWxzLmNzcygiaGVpZ2h0IiwiIil9LGVuYWJsZTpmdW5jdGlvbihuKXt2YXIgcj10aGlzLm9wdGlvbnMuZGlzYWJsZWQ7aWYocj09PSExKXJldHVybjtuPT09dD9yPSExOihuPXRoaXMuX2dldEluZGV4KG4pLGUuaXNBcnJheShyKT9yPWUubWFwKHIsZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1uP2U6bnVsbH0pOnI9ZS5tYXAodGhpcy50YWJzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQhPT1uP3Q6bnVsbH0pKSx0aGlzLl9zZXR1cERpc2FibGVkKHIpfSxkaXNhYmxlOmZ1bmN0aW9uKG4pe3ZhciByPXRoaXMub3B0aW9ucy5kaXNhYmxlZDtpZihyPT09ITApcmV0dXJuO2lmKG49PT10KXI9ITA7ZWxzZXtuPXRoaXMuX2dldEluZGV4KG4pO2lmKGUuaW5BcnJheShuLHIpIT09LTEpcmV0dXJuO2UuaXNBcnJheShyKT9yPWUubWVyZ2UoW25dLHIpLnNvcnQoKTpyPVtuXX10aGlzLl9zZXR1cERpc2FibGVkKHIpfSxsb2FkOmZ1bmN0aW9uKHQsbil7dD10aGlzLl9nZXRJbmRleCh0KTt2YXIgcj10aGlzLGk9dGhpcy50YWJzLmVxKHQpLG89aS5maW5kKCIudWktdGFicy1hbmNob3IiKSx1PXRoaXMuX2dldFBhbmVsRm9yVGFiKGkpLGE9e3RhYjppLHBhbmVsOnV9O2lmKHMob1swXSkpcmV0dXJuO3RoaXMueGhyPWUuYWpheCh0aGlzLl9hamF4U2V0dGluZ3MobyxuLGEpKSx0aGlzLnhociYmdGhpcy54aHIuc3RhdHVzVGV4dCE9PSJjYW5jZWxlZCImJihpLmFkZENsYXNzKCJ1aS10YWJzLWxvYWRpbmciKSx1LmF0dHIoImFyaWEtYnVzeSIsInRydWUiKSx0aGlzLnhoci5zdWNjZXNzKGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt1Lmh0bWwoZSksci5fdHJpZ2dlcigibG9hZCIsbixhKX0sMSl9KS5jb21wbGV0ZShmdW5jdGlvbihlLHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0PT09ImFib3J0IiYmci5wYW5lbHMuc3RvcCghMSwhMCksaS5yZW1vdmVDbGFzcygidWktdGFicy1sb2FkaW5nIiksdS5yZW1vdmVBdHRyKCJhcmlhLWJ1c3kiKSxlPT09ci54aHImJmRlbGV0ZSByLnhocn0sMSl9KSl9LF9hamF4U2V0dGluZ3M6ZnVuY3Rpb24odCxuLHIpe3ZhciBpPXRoaXM7cmV0dXJue3VybDp0LmF0dHIoImhyZWYiKSxiZWZvcmVTZW5kOmZ1bmN0aW9uKHQscyl7cmV0dXJuIGkuX3RyaWdnZXIoImJlZm9yZUxvYWQiLG4sZS5leHRlbmQoe2pxWEhSOnQsYWpheFNldHRpbmdzOnN9LHIpKX19fSxfZ2V0UGFuZWxGb3JUYWI6ZnVuY3Rpb24odCl7dmFyIG49ZSh0KS5hdHRyKCJhcmlhLWNvbnRyb2xzIik7cmV0dXJuIHRoaXMuZWxlbWVudC5maW5kKHRoaXMuX3Nhbml0aXplU2VsZWN0b3IoIiMiK24pKX19KSxlLnVpQmFja0NvbXBhdCE9PSExJiYoZS51aS50YWJzLnByb3RvdHlwZS5fdWk9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dGFiOmUscGFuZWw6dCxpbmRleDp0aGlzLmFuY2hvcnMuaW5kZXgoZSl9fSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHt1cmw6ZnVuY3Rpb24oZSx0KXt0aGlzLmFuY2hvcnMuZXEoZSkuYXR0cigiaHJlZiIsdCl9fSksZS53aWRnZXQoInVpLnRhYnMiLGUudWkudGFicyx7b3B0aW9uczp7YWpheE9wdGlvbnM6bnVsbCxjYWNoZTohMX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX3N1cGVyKCk7dmFyIHQ9dGhpczt0aGlzLl9vbih7dGFic2JlZm9yZWxvYWQ6ZnVuY3Rpb24obixyKXtpZihlLmRhdGEoci50YWJbMF0sImNhY2hlLnRhYnMiKSl7bi5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1yLmpxWEhSLnN1Y2Nlc3MoZnVuY3Rpb24oKXt0Lm9wdGlvbnMuY2FjaGUmJmUuZGF0YShyLnRhYlswXSwiY2FjaGUudGFicyIsITApfSl9fSl9LF9hamF4U2V0dGluZ3M6ZnVuY3Rpb24odCxuLHIpe3ZhciBpPXRoaXMub3B0aW9ucy5hamF4T3B0aW9ucztyZXR1cm4gZS5leHRlbmQoe30saSx7ZXJyb3I6ZnVuY3Rpb24oZSx0LG4pe3RyeXtpLmVycm9yKGUsdCxyLnRhYi5jbG9zZXN0KCJsaSIpLmluZGV4KCksci50YWJbMF0pfWNhdGNoKG4pe319fSx0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cykpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7ZT09PSJjYWNoZSImJnQ9PT0hMSYmdGhpcy5hbmNob3JzLnJlbW92ZURhdGEoImNhY2hlLnRhYnMiKSx0aGlzLl9zdXBlcihlLHQpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuYW5jaG9ycy5yZW1vdmVEYXRhKCJjYWNoZS50YWJzIiksdGhpcy5fc3VwZXIoKX0sdXJsOmZ1bmN0aW9uKGUsdCl7dGhpcy5hbmNob3JzLmVxKGUpLnJlbW92ZURhdGEoImNhY2hlLnRhYnMiKSx0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyl9fSksZS53aWRnZXQoInVpLnRhYnMiLGUudWkudGFicyx7YWJvcnQ6ZnVuY3Rpb24oKXt0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKX19KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtvcHRpb25zOntzcGlubmVyOiI8ZW0+TG9hZGluZyYjODIzMDs8L2VtPiJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlcigpLHRoaXMuX29uKHt0YWJzYmVmb3JlbG9hZDpmdW5jdGlvbihlLHQpe2lmKGUudGFyZ2V0IT09dGhpcy5lbGVtZW50WzBdfHwhdGhpcy5vcHRpb25zLnNwaW5uZXIpcmV0dXJuO3ZhciBuPXQudGFiLmZpbmQoInNwYW4iKSxyPW4uaHRtbCgpO24uaHRtbCh0aGlzLm9wdGlvbnMuc3Bpbm5lciksdC5qcVhIUi5jb21wbGV0ZShmdW5jdGlvbigpe24uaHRtbChyKX0pfX0pfX0pLGUud2lkZ2V0KCJ1aS50YWJzIixlLnVpLnRhYnMse29wdGlvbnM6e2VuYWJsZTpudWxsLGRpc2FibGU6bnVsbH0sZW5hYmxlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyO2lmKHQmJm4uZGlzYWJsZWQ9PT0hMHx8ZS5pc0FycmF5KG4uZGlzYWJsZWQpJiZlLmluQXJyYXkodCxuLmRpc2FibGVkKSE9PS0xKXI9ITA7dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpLHImJnRoaXMuX3RyaWdnZXIoImVuYWJsZSIsbnVsbCx0aGlzLl91aSh0aGlzLmFuY2hvcnNbdF0sdGhpcy5wYW5lbHNbdF0pKX0sZGlzYWJsZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm9wdGlvbnMscjtpZih0JiZuLmRpc2FibGVkPT09ITF8fGUuaXNBcnJheShuLmRpc2FibGVkKSYmZS5pbkFycmF5KHQsbi5kaXNhYmxlZCk9PT0tMSlyPSEwO3RoaXMuX3N1cGVyQXBwbHkoYXJndW1lbnRzKSxyJiZ0aGlzLl90cmlnZ2VyKCJkaXNhYmxlIixudWxsLHRoaXMuX3VpKHRoaXMuYW5jaG9yc1t0XSx0aGlzLnBhbmVsc1t0XSkpfX0pLGUud2lkZ2V0KCJ1aS50YWJzIixlLnVpLnRhYnMse29wdGlvbnM6e2FkZDpudWxsLHJlbW92ZTpudWxsLHRhYlRlbXBsYXRlOiI8bGk+PGEgaHJlZj0nI3tocmVmfSc+PHNwYW4+I3tsYWJlbH08L3NwYW4+PC9hPjwvbGk+In0sYWRkOmZ1bmN0aW9uKG4scixpKXtpPT09dCYmKGk9dGhpcy5hbmNob3JzLmxlbmd0aCk7dmFyIHMsbyx1PXRoaXMub3B0aW9ucyxhPWUodS50YWJUZW1wbGF0ZS5yZXBsYWNlKC8jXHtocmVmXH0vZyxuKS5yZXBsYWNlKC8jXHtsYWJlbFx9L2cscikpLGY9bi5pbmRleE9mKCIjIik/dGhpcy5fdGFiSWQoYSk6bi5yZXBsYWNlKCIjIiwiIik7cmV0dXJuIGEuYWRkQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLXRvcCIpLmRhdGEoInVpLXRhYnMtZGVzdHJveSIsITApLGEuYXR0cigiYXJpYS1jb250cm9scyIsZikscz1pPj10aGlzLnRhYnMubGVuZ3RoLG89dGhpcy5lbGVtZW50LmZpbmQoIiMiK2YpLG8ubGVuZ3RofHwobz10aGlzLl9jcmVhdGVQYW5lbChmKSxzP2k+MD9vLmluc2VydEFmdGVyKHRoaXMucGFuZWxzLmVxKC0xKSk6by5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpOm8uaW5zZXJ0QmVmb3JlKHRoaXMucGFuZWxzW2ldKSksby5hZGRDbGFzcygidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuaGlkZSgpLHM/YS5hcHBlbmRUbyh0aGlzLnRhYmxpc3QpOmEuaW5zZXJ0QmVmb3JlKHRoaXMudGFic1tpXSksdS5kaXNhYmxlZD1lLm1hcCh1LmRpc2FibGVkLGZ1bmN0aW9uKGUpe3JldHVybiBlPj1pPysrZTplfSksdGhpcy5yZWZyZXNoKCksdGhpcy50YWJzLmxlbmd0aD09PTEmJnUuYWN0aXZlPT09ITEmJnRoaXMub3B0aW9uKCJhY3RpdmUiLDApLHRoaXMuX3RyaWdnZXIoImFkZCIsbnVsbCx0aGlzLl91aSh0aGlzLmFuY2hvcnNbaV0sdGhpcy5wYW5lbHNbaV0pKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dD10aGlzLl9nZXRJbmRleCh0KTt2YXIgbj10aGlzLm9wdGlvbnMscj10aGlzLnRhYnMuZXEodCkucmVtb3ZlKCksaT10aGlzLl9nZXRQYW5lbEZvclRhYihyKS5yZW1vdmUoKTtyZXR1cm4gci5oYXNDbGFzcygidWktdGFicy1hY3RpdmUiKSYmdGhpcy5hbmNob3JzLmxlbmd0aD4yJiZ0aGlzLl9hY3RpdmF0ZSh0Kyh0KzE8dGhpcy5hbmNob3JzLmxlbmd0aD8xOi0xKSksbi5kaXNhYmxlZD1lLm1hcChlLmdyZXAobi5kaXNhYmxlZCxmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXR9KSxmdW5jdGlvbihlKXtyZXR1cm4gZT49dD8tLWU6ZX0pLHRoaXMucmVmcmVzaCgpLHRoaXMuX3RyaWdnZXIoInJlbW92ZSIsbnVsbCx0aGlzLl91aShyLmZpbmQoImEiKVswXSxpWzBdKSksdGhpc319KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbmNob3JzLmxlbmd0aH19KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtvcHRpb25zOntpZFByZWZpeDoidWktdGFicy0ifSxfdGFiSWQ6ZnVuY3Rpb24odCl7dmFyIG49dC5pcygibGkiKT90LmZpbmQoImFbaHJlZl0iKTp0O3JldHVybiBuPW5bMF0sZShuKS5jbG9zZXN0KCJsaSIpLmF0dHIoImFyaWEtY29udHJvbHMiKXx8bi50aXRsZSYmbi50aXRsZS5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZSgvW15cd1x1MDBjMC1cdUZGRkZcLV0vZywiIil8fHRoaXMub3B0aW9ucy5pZFByZWZpeCtpKCl9fSksZS53aWRnZXQoInVpLnRhYnMiLGUudWkudGFicyx7b3B0aW9uczp7cGFuZWxUZW1wbGF0ZToiPGRpdj48L2Rpdj4ifSxfY3JlYXRlUGFuZWw6ZnVuY3Rpb24odCl7cmV0dXJuIGUodGhpcy5vcHRpb25zLnBhbmVsVGVtcGxhdGUpLmF0dHIoImlkIix0KS5hZGRDbGFzcygidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuZGF0YSgidWktdGFicy1kZXN0cm95IiwhMCl9fSksZS53aWRnZXQoInVpLnRhYnMiLGUudWkudGFicyx7X2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztlLmFjdGl2ZT09PW51bGwmJmUuc2VsZWN0ZWQhPT10JiYoZS5hY3RpdmU9ZS5zZWxlY3RlZD09PS0xPyExOmUuc2VsZWN0ZWQpLHRoaXMuX3N1cGVyKCksZS5zZWxlY3RlZD1lLmFjdGl2ZSxlLnNlbGVjdGVkPT09ITEmJihlLnNlbGVjdGVkPS0xKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe2lmKGUhPT0ic2VsZWN0ZWQiKXJldHVybiB0aGlzLl9zdXBlcihlLHQpO3ZhciBuPXRoaXMub3B0aW9uczt0aGlzLl9zdXBlcigiYWN0aXZlIix0PT09LTE/ITE6dCksbi5zZWxlY3RlZD1uLmFjdGl2ZSxuLnNlbGVjdGVkPT09ITEmJihuLnNlbGVjdGVkPS0xKX0sX2V2ZW50SGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyksdGhpcy5vcHRpb25zLnNlbGVjdGVkPXRoaXMub3B0aW9ucy5hY3RpdmUsdGhpcy5vcHRpb25zLnNlbGVjdGVkPT09ITEmJih0aGlzLm9wdGlvbnMuc2VsZWN0ZWQ9LTEpfX0pLGUud2lkZ2V0KCJ1aS50YWJzIixlLnVpLnRhYnMse29wdGlvbnM6e3Nob3c6bnVsbCxzZWxlY3Q6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX3N1cGVyKCksdGhpcy5vcHRpb25zLmFjdGl2ZSE9PSExJiZ0aGlzLl90cmlnZ2VyKCJzaG93IixudWxsLHRoaXMuX3VpKHRoaXMuYWN0aXZlLmZpbmQoIi51aS10YWJzLWFuY2hvciIpWzBdLHRoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKVswXSkpfSxfdHJpZ2dlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpO3JldHVybiByPyhlPT09ImJlZm9yZUFjdGl2YXRlIiYmbi5uZXdUYWIubGVuZ3RoP3I9dGhpcy5fc3VwZXIoInNlbGVjdCIsdCx7dGFiOm4ubmV3VGFiLmZpbmQoIi51aS10YWJzLWFuY2hvciIpWzBdLHBhbmVsOm4ubmV3UGFuZWxbMF0saW5kZXg6bi5uZXdUYWIuY2xvc2VzdCgibGkiKS5pbmRleCgpfSk6ZT09PSJhY3RpdmF0ZSImJm4ubmV3VGFiLmxlbmd0aCYmKHI9dGhpcy5fc3VwZXIoInNob3ciLHQse3RhYjpuLm5ld1RhYi5maW5kKCIudWktdGFicy1hbmNob3IiKVswXSxwYW5lbDpuLm5ld1BhbmVsWzBdLGluZGV4Om4ubmV3VGFiLmNsb3Nlc3QoImxpIikuaW5kZXgoKX0pKSxyKTohMX19KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtzZWxlY3Q6ZnVuY3Rpb24oZSl7ZT10aGlzLl9nZXRJbmRleChlKTtpZihlPT09LTEpe2lmKCF0aGlzLm9wdGlvbnMuY29sbGFwc2libGV8fHRoaXMub3B0aW9ucy5zZWxlY3RlZD09PS0xKXJldHVybjtlPXRoaXMub3B0aW9ucy5zZWxlY3RlZH10aGlzLmFuY2hvcnMuZXEoZSkudHJpZ2dlcih0aGlzLm9wdGlvbnMuZXZlbnQrdGhpcy5ldmVudE5hbWVzcGFjZSl9fSksZnVuY3Rpb24oKXt2YXIgdD0wO2Uud2lkZ2V0KCJ1aS50YWJzIixlLnVpLnRhYnMse29wdGlvbnM6e2Nvb2tpZTpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLHQ7ZS5hY3RpdmU9PW51bGwmJmUuY29va2llJiYodD1wYXJzZUludCh0aGlzLl9jb29raWUoKSwxMCksdD09PS0xJiYodD0hMSksZS5hY3RpdmU9dCksdGhpcy5fc3VwZXIoKX0sX2Nvb2tpZTpmdW5jdGlvbihuKXt2YXIgcj1bdGhpcy5jb29raWV8fCh0aGlzLmNvb2tpZT10aGlzLm9wdGlvbnMuY29va2llLm5hbWV8fCJ1aS10YWJzLSIrICsrdCldO3JldHVybiBhcmd1bWVudHMubGVuZ3RoJiYoci5wdXNoKG49PT0hMT8tMTpuKSxyLnB1c2godGhpcy5vcHRpb25zLmNvb2tpZSkpLGUuY29va2llLmFwcGx5KG51bGwscil9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIoKSx0aGlzLm9wdGlvbnMuY29va2llJiZ0aGlzLl9jb29raWUodGhpcy5vcHRpb25zLmFjdGl2ZSx0aGlzLm9wdGlvbnMuY29va2llKX0sX2V2ZW50SGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyksdGhpcy5vcHRpb25zLmNvb2tpZSYmdGhpcy5fY29va2llKHRoaXMub3B0aW9ucy5hY3RpdmUsdGhpcy5vcHRpb25zLmNvb2tpZSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIoKSx0aGlzLm9wdGlvbnMuY29va2llJiZ0aGlzLl9jb29raWUobnVsbCx0aGlzLm9wdGlvbnMuY29va2llKX19KX0oKSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtfdHJpZ2dlcjpmdW5jdGlvbih0LG4scil7dmFyIGk9ZS5leHRlbmQoe30scik7cmV0dXJuIHQ9PT0ibG9hZCImJihpLnBhbmVsPWkucGFuZWxbMF0saS50YWI9aS50YWIuZmluZCgiLnVpLXRhYnMtYW5jaG9yIilbMF0pLHRoaXMuX3N1cGVyKHQsbixpKX19KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtvcHRpb25zOntmeDpudWxsfSxfZ2V0Rng6ZnVuY3Rpb24oKXt2YXIgdCxuLHI9dGhpcy5vcHRpb25zLmZ4O3JldHVybiByJiYoZS5pc0FycmF5KHIpPyh0PXJbMF0sbj1yWzFdKTp0PW49cikscj97c2hvdzpuLGhpZGU6dH06bnVsbH0sX3RvZ2dsZTpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG8oKXtuLnJ1bm5pbmc9ITEsbi5fdHJpZ2dlcigiYWN0aXZhdGUiLGUsdCl9ZnVuY3Rpb24gdSgpe3QubmV3VGFiLmNsb3Nlc3QoImxpIikuYWRkQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLHIubGVuZ3RoJiZzLnNob3c/ci5hbmltYXRlKHMuc2hvdyxzLnNob3cuZHVyYXRpb24sZnVuY3Rpb24oKXtvKCl9KTooci5zaG93KCksbygpKX12YXIgbj10aGlzLHI9dC5uZXdQYW5lbCxpPXQub2xkUGFuZWwscz10aGlzLl9nZXRGeCgpO2lmKCFzKXJldHVybiB0aGlzLl9zdXBlcihlLHQpO24ucnVubmluZz0hMCxpLmxlbmd0aCYmcy5oaWRlP2kuYW5pbWF0ZShzLmhpZGUscy5oaWRlLmR1cmF0aW9uLGZ1bmN0aW9uKCl7dC5vbGRUYWIuY2xvc2VzdCgibGkiKS5yZW1vdmVDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiksdSgpfSk6KHQub2xkVGFiLmNsb3Nlc3QoImxpIikucmVtb3ZlQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLGkuaGlkZSgpLHUoKSl9fSkpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LG4pe3ZhciByPSh0LmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKXx8IiIpLnNwbGl0KC9ccysvKTtyLnB1c2gobiksdC5kYXRhKCJ1aS10b29sdGlwLWlkIixuKS5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IixlLnRyaW0oci5qb2luKCIgIikpKX1mdW5jdGlvbiByKHQpe3ZhciBuPXQuZGF0YSgidWktdG9vbHRpcC1pZCIpLHI9KHQuYXR0cigiYXJpYS1kZXNjcmliZWRieSIpfHwiIikuc3BsaXQoL1xzKy8pLGk9ZS5pbkFycmF5KG4scik7aSE9PS0xJiZyLnNwbGljZShpLDEpLHQucmVtb3ZlRGF0YSgidWktdG9vbHRpcC1pZCIpLHI9ZS50cmltKHIuam9pbigiICIpKSxyP3QuYXR0cigiYXJpYS1kZXNjcmliZWRieSIscik6dC5yZW1vdmVBdHRyKCJhcmlhLWRlc2NyaWJlZGJ5Iil9dmFyIHQ9MDtlLndpZGdldCgidWkudG9vbHRpcCIse3ZlcnNpb246IjEuOS4wIixvcHRpb25zOntjb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcykuYXR0cigidGl0bGUiKX0saGlkZTohMCxpdGVtczoiW3RpdGxlXSIscG9zaXRpb246e215OiJsZWZ0KzE1IGNlbnRlciIsYXQ6InJpZ2h0IGNlbnRlciIsY29sbGlzaW9uOiJmbGlwZml0IGZsaXBmaXQifSxzaG93OiEwLHRvb2x0aXBDbGFzczpudWxsLHRyYWNrOiExLGNsb3NlOm51bGwsb3BlbjpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fb24oe21vdXNlb3Zlcjoib3BlbiIsZm9jdXNpbjoib3BlbiJ9KSx0aGlzLnRvb2x0aXBzPXt9fSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsbil7dmFyIHI9dGhpcztpZih0PT09ImRpc2FibGVkIil7dGhpc1tuPyJfZGlzYWJsZSI6Il9lbmFibGUiXSgpLHRoaXMub3B0aW9uc1t0XT1uO3JldHVybn10aGlzLl9zdXBlcih0LG4pLHQ9PT0iY29udGVudCImJmUuZWFjaCh0aGlzLnRvb2x0aXBzLGZ1bmN0aW9uKGUsdCl7ci5fdXBkYXRlQ29udGVudCh0KX0pfSxfZGlzYWJsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7ZS5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24obixyKXt2YXIgaT1lLkV2ZW50KCJibHVyIik7aS50YXJnZXQ9aS5jdXJyZW50VGFyZ2V0PXJbMF0sdC5jbG9zZShpLCEwKX0pLHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3QuaXMoIlt0aXRsZV0iKSYmdC5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIix0LmF0dHIoInRpdGxlIikpLmF0dHIoInRpdGxlIiwiIil9KX0sX2VuYWJsZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3QuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpJiZ0LmF0dHIoInRpdGxlIix0LmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSl9KX0sb3BlbjpmdW5jdGlvbih0KXt2YXIgbj1lKHQ/dC50YXJnZXQ6dGhpcy5lbGVtZW50KS5jbG9zZXN0KHRoaXMub3B0aW9ucy5pdGVtcyk7aWYoIW4ubGVuZ3RoKXJldHVybjtpZih0aGlzLm9wdGlvbnMudHJhY2smJm4uZGF0YSgidWktdG9vbHRpcC1pZCIpKXt0aGlzLl9maW5kKG4pLnBvc2l0aW9uKGUuZXh0ZW5kKHtvZjpufSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSx0aGlzLl9vZmYodGhpcy5kb2N1bWVudCwibW91c2Vtb3ZlIik7cmV0dXJufW4uYXR0cigidGl0bGUiKSYmbi5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIixuLmF0dHIoInRpdGxlIikpLG4uZGF0YSgidG9vbHRpcC1vcGVuIiwhMCksdGhpcy5fdXBkYXRlQ29udGVudChuLHQpfSxfdXBkYXRlQ29udGVudDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcy5vcHRpb25zLmNvbnRlbnQsaT10aGlzO2lmKHR5cGVvZiByPT0ic3RyaW5nIilyZXR1cm4gdGhpcy5fb3Blbih0LGUscik7bj1yLmNhbGwoZVswXSxmdW5jdGlvbihuKXtpZighZS5kYXRhKCJ0b29sdGlwLW9wZW4iKSlyZXR1cm47aS5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9vcGVuKHQsZSxuKX0pfSksbiYmdGhpcy5fb3Blbih0LGUsbil9LF9vcGVuOmZ1bmN0aW9uKHQscixpKXtmdW5jdGlvbiB1KGUpe28ub2Y9ZSxzLnBvc2l0aW9uKG8pfXZhciBzLG87aWYoIWkpcmV0dXJuO3M9dGhpcy5fZmluZChyKTtpZihzLmxlbmd0aCl7cy5maW5kKCIudWktdG9vbHRpcC1jb250ZW50IikuaHRtbChpKTtyZXR1cm59ci5pcygiW3RpdGxlXSIpJiYodCYmdC50eXBlPT09Im1vdXNlb3ZlciI/ci5hdHRyKCJ0aXRsZSIsIiIpOnIucmVtb3ZlQXR0cigidGl0bGUiKSkscz10aGlzLl90b29sdGlwKHIpLG4ocixzLmF0dHIoImlkIikpLHMuZmluZCgiLnVpLXRvb2x0aXAtY29udGVudCIpLmh0bWwoaSksdGhpcy5vcHRpb25zLnRyYWNrJiZ0JiYvXm1vdXNlLy50ZXN0KHQub3JpZ2luYWxFdmVudC50eXBlKT8obz1lLmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pLHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse21vdXNlbW92ZTp1fSksdSh0KSk6cy5wb3NpdGlvbihlLmV4dGVuZCh7b2Y6cn0sdGhpcy5vcHRpb25zLnBvc2l0aW9uKSkscy5oaWRlKCksdGhpcy5fc2hvdyhzLHRoaXMub3B0aW9ucy5zaG93KSx0aGlzLl90cmlnZ2VyKCJvcGVuIix0LHt0b29sdGlwOnN9KSx0aGlzLl9vbihyLHttb3VzZWxlYXZlOiJjbG9zZSIsZm9jdXNvdXQ6ImNsb3NlIixrZXl1cDpmdW5jdGlvbih0KXtpZih0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuRVNDQVBFKXt2YXIgbj1lLkV2ZW50KHQpO24uY3VycmVudFRhcmdldD1yWzBdLHRoaXMuY2xvc2UobiwhMCl9fX0pfSxjbG9zZTpmdW5jdGlvbih0LG4pe3ZhciBpPXRoaXMscz1lKHQ/dC5jdXJyZW50VGFyZ2V0OnRoaXMuZWxlbWVudCksbz10aGlzLl9maW5kKHMpO2lmKHRoaXMuY2xvc2luZylyZXR1cm47aWYoIW4mJnQmJnQudHlwZSE9PSJmb2N1c291dCImJnRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudD09PXNbMF0pcmV0dXJuO3MuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpJiZzLmF0dHIoInRpdGxlIixzLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSkscihzKSxvLnN0b3AoITApLHRoaXMuX2hpZGUobyx0aGlzLm9wdGlvbnMuaGlkZSxmdW5jdGlvbigpe2UodGhpcykucmVtb3ZlKCksZGVsZXRlIGkudG9vbHRpcHNbdGhpcy5pZF19KSxzLnJlbW92ZURhdGEoInRvb2x0aXAtb3BlbiIpLHRoaXMuX29mZihzLCJtb3VzZWxlYXZlIGZvY3Vzb3V0IGtleXVwIiksdGhpcy5fb2ZmKHRoaXMuZG9jdW1lbnQsIm1vdXNlbW92ZSIpLHRoaXMuY2xvc2luZz0hMCx0aGlzLl90cmlnZ2VyKCJjbG9zZSIsdCx7dG9vbHRpcDpvfSksdGhpcy5jbG9zaW5nPSExfSxfdG9vbHRpcDpmdW5jdGlvbihuKXt2YXIgcj0idWktdG9vbHRpcC0iK3QrKyxpPWUoIjxkaXY+IikuYXR0cih7aWQ6cixyb2xlOiJ0b29sdGlwIn0pLmFkZENsYXNzKCJ1aS10b29sdGlwIHVpLXdpZGdldCB1aS1jb3JuZXItYWxsIHVpLXdpZGdldC1jb250ZW50ICIrKHRoaXMub3B0aW9ucy50b29sdGlwQ2xhc3N8fCIiKSk7cmV0dXJuIGUoIjxkaXY+IikuYWRkQ2xhc3MoInVpLXRvb2x0aXAtY29udGVudCIpLmFwcGVuZFRvKGkpLGkuYXBwZW5kVG8odGhpcy5kb2N1bWVudFswXS5ib2R5KSxlLmZuLmJnaWZyYW1lJiZpLmJnaWZyYW1lKCksdGhpcy50b29sdGlwc1tyXT1uLGl9LF9maW5kOmZ1bmN0aW9uKHQpe3ZhciBuPXQuZGF0YSgidWktdG9vbHRpcC1pZCIpO3JldHVybiBuP2UoIiMiK24pOmUoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2UuZWFjaCh0aGlzLnRvb2x0aXBzLGZ1bmN0aW9uKG4scil7dmFyIGk9ZS5FdmVudCgiYmx1ciIpO2kudGFyZ2V0PWkuY3VycmVudFRhcmdldD1yWzBdLHQuY2xvc2UoaSwhMCksZSgiIyIrbikucmVtb3ZlKCksci5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikmJihyLmF0dHIoInRpdGxlIixyLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSksci5yZW1vdmVEYXRhKCJ1aS10b29sdGlwLXRpdGxlIikpfSl9fSl9KShqUXVlcnkpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2pxdWVyeS5qcyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2pxdWVyeS5qcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYzNmYmM4Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvanF1ZXJ5LmpzCkBAIC0wLDAgKzEsMiBAQAorLyohIGpRdWVyeSB2MS44LjIganF1ZXJ5LmNvbSB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLworKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gRyhhKXt2YXIgYj1GW2FdPXt9O3JldHVybiBwLmVhY2goYS5zcGxpdChzKSxmdW5jdGlvbihhLGMpe2JbY109ITB9KSxifWZ1bmN0aW9uIEooYSxjLGQpe2lmKGQ9PT1iJiZhLm5vZGVUeXBlPT09MSl7dmFyIGU9ImRhdGEtIitjLnJlcGxhY2UoSSwiLSQxIikudG9Mb3dlckNhc2UoKTtkPWEuZ2V0QXR0cmlidXRlKGUpO2lmKHR5cGVvZiBkPT0ic3RyaW5nIil7dHJ5e2Q9ZD09PSJ0cnVlIj8hMDpkPT09ImZhbHNlIj8hMTpkPT09Im51bGwiP251bGw6K2QrIiI9PT1kPytkOkgudGVzdChkKT9wLnBhcnNlSlNPTihkKTpkfWNhdGNoKGYpe31wLmRhdGEoYSxjLGQpfWVsc2UgZD1ifXJldHVybiBkfWZ1bmN0aW9uIEsoYSl7dmFyIGI7Zm9yKGIgaW4gYSl7aWYoYj09PSJkYXRhIiYmcC5pc0VtcHR5T2JqZWN0KGFbYl0pKWNvbnRpbnVlO2lmKGIhPT0idG9KU09OIilyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBiYSgpe3JldHVybiExfWZ1bmN0aW9uIGJiKCl7cmV0dXJuITB9ZnVuY3Rpb24gYmgoYSl7cmV0dXJuIWF8fCFhLnBhcmVudE5vZGV8fGEucGFyZW50Tm9kZS5ub2RlVHlwZT09PTExfWZ1bmN0aW9uIGJpKGEsYil7ZG8gYT1hW2JdO3doaWxlKGEmJmEubm9kZVR5cGUhPT0xKTtyZXR1cm4gYX1mdW5jdGlvbiBiaihhLGIsYyl7Yj1ifHwwO2lmKHAuaXNGdW5jdGlvbihiKSlyZXR1cm4gcC5ncmVwKGEsZnVuY3Rpb24oYSxkKXt2YXIgZT0hIWIuY2FsbChhLGQsYSk7cmV0dXJuIGU9PT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gcC5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gYT09PWI9PT1jfSk7aWYodHlwZW9mIGI9PSJzdHJpbmciKXt2YXIgZD1wLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlVHlwZT09PTF9KTtpZihiZS50ZXN0KGIpKXJldHVybiBwLmZpbHRlcihiLGQsIWMpO2I9cC5maWx0ZXIoYixkKX1yZXR1cm4gcC5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gcC5pbkFycmF5KGEsYik+PTA9PT1jfSl9ZnVuY3Rpb24gYmsoYSl7dmFyIGI9Ymwuc3BsaXQoInwiKSxjPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2lmKGMuY3JlYXRlRWxlbWVudCl3aGlsZShiLmxlbmd0aCljLmNyZWF0ZUVsZW1lbnQoYi5wb3AoKSk7cmV0dXJuIGN9ZnVuY3Rpb24gYkMoYSxiKXtyZXR1cm4gYS5nZXRFbGVtZW50c0J5VGFnTmFtZShiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChiKSl9ZnVuY3Rpb24gYkQoYSxiKXtpZihiLm5vZGVUeXBlIT09MXx8IXAuaGFzRGF0YShhKSlyZXR1cm47dmFyIGMsZCxlLGY9cC5fZGF0YShhKSxnPXAuX2RhdGEoYixmKSxoPWYuZXZlbnRzO2lmKGgpe2RlbGV0ZSBnLmhhbmRsZSxnLmV2ZW50cz17fTtmb3IoYyBpbiBoKWZvcihkPTAsZT1oW2NdLmxlbmd0aDtkPGU7ZCsrKXAuZXZlbnQuYWRkKGIsYyxoW2NdW2RdKX1nLmRhdGEmJihnLmRhdGE9cC5leHRlbmQoe30sZy5kYXRhKSl9ZnVuY3Rpb24gYkUoYSxiKXt2YXIgYztpZihiLm5vZGVUeXBlIT09MSlyZXR1cm47Yi5jbGVhckF0dHJpYnV0ZXMmJmIuY2xlYXJBdHRyaWJ1dGVzKCksYi5tZXJnZUF0dHJpYnV0ZXMmJmIubWVyZ2VBdHRyaWJ1dGVzKGEpLGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGM9PT0ib2JqZWN0Ij8oYi5wYXJlbnROb2RlJiYoYi5vdXRlckhUTUw9YS5vdXRlckhUTUwpLHAuc3VwcG9ydC5odG1sNUNsb25lJiZhLmlubmVySFRNTCYmIXAudHJpbShiLmlubmVySFRNTCkmJihiLmlubmVySFRNTD1hLmlubmVySFRNTCkpOmM9PT0iaW5wdXQiJiZidi50ZXN0KGEudHlwZSk/KGIuZGVmYXVsdENoZWNrZWQ9Yi5jaGVja2VkPWEuY2hlY2tlZCxiLnZhbHVlIT09YS52YWx1ZSYmKGIudmFsdWU9YS52YWx1ZSkpOmM9PT0ib3B0aW9uIj9iLnNlbGVjdGVkPWEuZGVmYXVsdFNlbGVjdGVkOmM9PT0iaW5wdXQifHxjPT09InRleHRhcmVhIj9iLmRlZmF1bHRWYWx1ZT1hLmRlZmF1bHRWYWx1ZTpjPT09InNjcmlwdCImJmIudGV4dCE9PWEudGV4dCYmKGIudGV4dD1hLnRleHQpLGIucmVtb3ZlQXR0cmlidXRlKHAuZXhwYW5kbyl9ZnVuY3Rpb24gYkYoYSl7cmV0dXJuIHR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIj9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6dHlwZW9mIGEucXVlcnlTZWxlY3RvckFsbCE9InVuZGVmaW5lZCI/YS5xdWVyeVNlbGVjdG9yQWxsKCIqIik6W119ZnVuY3Rpb24gYkcoYSl7YnYudGVzdChhLnR5cGUpJiYoYS5kZWZhdWx0Q2hlY2tlZD1hLmNoZWNrZWQpfWZ1bmN0aW9uIGJZKGEsYil7aWYoYiBpbiBhKXJldHVybiBiO3ZhciBjPWIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYi5zbGljZSgxKSxkPWIsZT1iVy5sZW5ndGg7d2hpbGUoZS0tKXtiPWJXW2VdK2M7aWYoYiBpbiBhKXJldHVybiBifXJldHVybiBkfWZ1bmN0aW9uIGJaKGEsYil7cmV0dXJuIGE9Ynx8YSxwLmNzcyhhLCJkaXNwbGF5Iik9PT0ibm9uZSJ8fCFwLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKX1mdW5jdGlvbiBiJChhLGIpe3ZhciBjLGQsZT1bXSxmPTAsZz1hLmxlbmd0aDtmb3IoO2Y8ZztmKyspe2M9YVtmXTtpZighYy5zdHlsZSljb250aW51ZTtlW2ZdPXAuX2RhdGEoYywib2xkZGlzcGxheSIpLGI/KCFlW2ZdJiZjLnN0eWxlLmRpc3BsYXk9PT0ibm9uZSImJihjLnN0eWxlLmRpc3BsYXk9IiIpLGMuc3R5bGUuZGlzcGxheT09PSIiJiZiWihjKSYmKGVbZl09cC5fZGF0YShjLCJvbGRkaXNwbGF5IixjYyhjLm5vZGVOYW1lKSkpKTooZD1iSChjLCJkaXNwbGF5IiksIWVbZl0mJmQhPT0ibm9uZSImJnAuX2RhdGEoYywib2xkZGlzcGxheSIsZCkpfWZvcihmPTA7ZjxnO2YrKyl7Yz1hW2ZdO2lmKCFjLnN0eWxlKWNvbnRpbnVlO2lmKCFifHxjLnN0eWxlLmRpc3BsYXk9PT0ibm9uZSJ8fGMuc3R5bGUuZGlzcGxheT09PSIiKWMuc3R5bGUuZGlzcGxheT1iP2VbZl18fCIiOiJub25lIn1yZXR1cm4gYX1mdW5jdGlvbiBiXyhhLGIsYyl7dmFyIGQ9YlAuZXhlYyhiKTtyZXR1cm4gZD9NYXRoLm1heCgwLGRbMV0tKGN8fDApKSsoZFsyXXx8InB4Iik6Yn1mdW5jdGlvbiBjYShhLGIsYyxkKXt2YXIgZT1jPT09KGQ/ImJvcmRlciI6ImNvbnRlbnQiKT80OmI9PT0id2lkdGgiPzE6MCxmPTA7Zm9yKDtlPDQ7ZSs9MiljPT09Im1hcmdpbiImJihmKz1wLmNzcyhhLGMrYlZbZV0sITApKSxkPyhjPT09ImNvbnRlbnQiJiYoZi09cGFyc2VGbG9hdChiSChhLCJwYWRkaW5nIitiVltlXSkpfHwwKSxjIT09Im1hcmdpbiImJihmLT1wYXJzZUZsb2F0KGJIKGEsImJvcmRlciIrYlZbZV0rIldpZHRoIikpfHwwKSk6KGYrPXBhcnNlRmxvYXQoYkgoYSwicGFkZGluZyIrYlZbZV0pKXx8MCxjIT09InBhZGRpbmciJiYoZis9cGFyc2VGbG9hdChiSChhLCJib3JkZXIiK2JWW2VdKyJXaWR0aCIpKXx8MCkpO3JldHVybiBmfWZ1bmN0aW9uIGNiKGEsYixjKXt2YXIgZD1iPT09IndpZHRoIj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0LGU9ITAsZj1wLnN1cHBvcnQuYm94U2l6aW5nJiZwLmNzcyhhLCJib3hTaXppbmciKT09PSJib3JkZXItYm94IjtpZihkPD0wfHxkPT1udWxsKXtkPWJIKGEsYik7aWYoZDwwfHxkPT1udWxsKWQ9YS5zdHlsZVtiXTtpZihiUS50ZXN0KGQpKXJldHVybiBkO2U9ZiYmKHAuc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZXx8ZD09PWEuc3R5bGVbYl0pLGQ9cGFyc2VGbG9hdChkKXx8MH1yZXR1cm4gZCtjYShhLGIsY3x8KGY/ImJvcmRlciI6ImNvbnRlbnQiKSxlKSsicHgifWZ1bmN0aW9uIGNjKGEpe2lmKGJTW2FdKXJldHVybiBiU1thXTt2YXIgYj1wKCI8IithKyI+IikuYXBwZW5kVG8oZS5ib2R5KSxjPWIuY3NzKCJkaXNwbGF5Iik7Yi5yZW1vdmUoKTtpZihjPT09Im5vbmUifHxjPT09IiIpe2JJPWUuYm9keS5hcHBlbmRDaGlsZChiSXx8cC5leHRlbmQoZS5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSx7ZnJhbWVCb3JkZXI6MCx3aWR0aDowLGhlaWdodDowfSkpO2lmKCFiSnx8IWJJLmNyZWF0ZUVsZW1lbnQpYko9KGJJLmNvbnRlbnRXaW5kb3d8fGJJLmNvbnRlbnREb2N1bWVudCkuZG9jdW1lbnQsYkoud3JpdGUoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxib2R5PiIpLGJKLmNsb3NlKCk7Yj1iSi5ib2R5LmFwcGVuZENoaWxkKGJKLmNyZWF0ZUVsZW1lbnQoYSkpLGM9YkgoYiwiZGlzcGxheSIpLGUuYm9keS5yZW1vdmVDaGlsZChiSSl9cmV0dXJuIGJTW2FdPWMsY31mdW5jdGlvbiBjaShhLGIsYyxkKXt2YXIgZTtpZihwLmlzQXJyYXkoYikpcC5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHxjZS50ZXN0KGEpP2QoYSxlKTpjaShhKyJbIisodHlwZW9mIGU9PSJvYmplY3QiP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKCFjJiZwLnR5cGUoYik9PT0ib2JqZWN0Iilmb3IoZSBpbiBiKWNpKGErIlsiK2UrIl0iLGJbZV0sYyxkKTtlbHNlIGQoYSxiKX1mdW5jdGlvbiBjeihhKXtyZXR1cm4gZnVuY3Rpb24oYixjKXt0eXBlb2YgYiE9InN0cmluZyImJihjPWIsYj0iKiIpO3ZhciBkLGUsZixnPWIudG9Mb3dlckNhc2UoKS5zcGxpdChzKSxoPTAsaT1nLmxlbmd0aDtpZihwLmlzRnVuY3Rpb24oYykpZm9yKDtoPGk7aCsrKWQ9Z1toXSxmPS9eXCsvLnRlc3QoZCksZiYmKGQ9ZC5zdWJzdHIoMSl8fCIqIiksZT1hW2RdPWFbZF18fFtdLGVbZj8idW5zaGlmdCI6InB1c2giXShjKX19ZnVuY3Rpb24gY0EoYSxjLGQsZSxmLGcpe2Y9Znx8Yy5kYXRhVHlwZXNbMF0sZz1nfHx7fSxnW2ZdPSEwO3ZhciBoLGk9YVtmXSxqPTAsaz1pP2kubGVuZ3RoOjAsbD1hPT09Y3Y7Zm9yKDtqPGsmJihsfHwhaCk7aisrKWg9aVtqXShjLGQsZSksdHlwZW9mIGg9PSJzdHJpbmciJiYoIWx8fGdbaF0/aD1iOihjLmRhdGFUeXBlcy51bnNoaWZ0KGgpLGg9Y0EoYSxjLGQsZSxoLGcpKSk7cmV0dXJuKGx8fCFoKSYmIWdbIioiXSYmKGg9Y0EoYSxjLGQsZSwiKiIsZykpLGh9ZnVuY3Rpb24gY0IoYSxjKXt2YXIgZCxlLGY9cC5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihkIGluIGMpY1tkXSE9PWImJigoZltkXT9hOmV8fChlPXt9KSlbZF09Y1tkXSk7ZSYmcC5leHRlbmQoITAsYSxlKX1mdW5jdGlvbiBjQyhhLGMsZCl7dmFyIGUsZixnLGgsaT1hLmNvbnRlbnRzLGo9YS5kYXRhVHlwZXMsaz1hLnJlc3BvbnNlRmllbGRzO2ZvcihmIGluIGspZiBpbiBkJiYoY1trW2ZdXT1kW2ZdKTt3aGlsZShqWzBdPT09IioiKWouc2hpZnQoKSxlPT09YiYmKGU9YS5taW1lVHlwZXx8Yy5nZXRSZXNwb25zZUhlYWRlcigiY29udGVudC10eXBlIikpO2lmKGUpZm9yKGYgaW4gaSlpZihpW2ZdJiZpW2ZdLnRlc3QoZSkpe2oudW5zaGlmdChmKTticmVha31pZihqWzBdaW4gZClnPWpbMF07ZWxzZXtmb3IoZiBpbiBkKXtpZighalswXXx8YS5jb252ZXJ0ZXJzW2YrIiAiK2pbMF1dKXtnPWY7YnJlYWt9aHx8KGg9Zil9Zz1nfHxofWlmKGcpcmV0dXJuIGchPT1qWzBdJiZqLnVuc2hpZnQoZyksZFtnXX1mdW5jdGlvbiBjRChhLGIpe3ZhciBjLGQsZSxmLGc9YS5kYXRhVHlwZXMuc2xpY2UoKSxoPWdbMF0saT17fSxqPTA7YS5kYXRhRmlsdGVyJiYoYj1hLmRhdGFGaWx0ZXIoYixhLmRhdGFUeXBlKSk7aWYoZ1sxXSlmb3IoYyBpbiBhLmNvbnZlcnRlcnMpaVtjLnRvTG93ZXJDYXNlKCldPWEuY29udmVydGVyc1tjXTtmb3IoO2U9Z1srK2pdOylpZihlIT09IioiKXtpZihoIT09IioiJiZoIT09ZSl7Yz1pW2grIiAiK2VdfHxpWyIqICIrZV07aWYoIWMpZm9yKGQgaW4gaSl7Zj1kLnNwbGl0KCIgIik7aWYoZlsxXT09PWUpe2M9aVtoKyIgIitmWzBdXXx8aVsiKiAiK2ZbMF1dO2lmKGMpe2M9PT0hMD9jPWlbZF06aVtkXSE9PSEwJiYoZT1mWzBdLGcuc3BsaWNlKGotLSwwLGUpKTticmVha319fWlmKGMhPT0hMClpZihjJiZhWyJ0aHJvd3MiXSliPWMoYik7ZWxzZSB0cnl7Yj1jKGIpfWNhdGNoKGspe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmM/azoiTm8gY29udmVyc2lvbiBmcm9tICIraCsiIHRvICIrZX19fWg9ZX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6Yn19ZnVuY3Rpb24gY0woKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gY00oKXt0cnl7cmV0dXJuIG5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYil7fX1mdW5jdGlvbiBjVSgpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Y049Yn0sMCksY049cC5ub3coKX1mdW5jdGlvbiBjVihhLGIpe3AuZWFjaChiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9KGNUW2JdfHxbXSkuY29uY2F0KGNUWyIqIl0pLGU9MCxmPWQubGVuZ3RoO2Zvcig7ZTxmO2UrKylpZihkW2VdLmNhbGwoYSxiLGMpKXJldHVybn0pfWZ1bmN0aW9uIGNXKGEsYixjKXt2YXIgZCxlPTAsZj0wLGc9Y1MubGVuZ3RoLGg9cC5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7dmFyIGI9Y058fGNVKCksYz1NYXRoLm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRpb24tYiksZD0xLShjL2ouZHVyYXRpb258fDApLGU9MCxmPWoudHdlZW5zLmxlbmd0aDtmb3IoO2U8ZjtlKyspai50d2VlbnNbZV0ucnVuKGQpO3JldHVybiBoLm5vdGlmeVdpdGgoYSxbaixkLGNdKSxkPDEmJmY/YzooaC5yZXNvbHZlV2l0aChhLFtqXSksITEpfSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOnAuZXh0ZW5kKHt9LGIpLG9wdHM6cC5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LGMpLG9yaWdpbmFsUHJvcGVydGllczpiLG9yaWdpbmFsT3B0aW9uczpjLHN0YXJ0VGltZTpjTnx8Y1UoKSxkdXJhdGlvbjpjLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihiLGMsZCl7dmFyIGU9cC5Ud2VlbihhLGoub3B0cyxiLGMsai5vcHRzLnNwZWNpYWxFYXNpbmdbYl18fGoub3B0cy5lYXNpbmcpO3JldHVybiBqLnR3ZWVucy5wdXNoKGUpLGV9LHN0b3A6ZnVuY3Rpb24oYil7dmFyIGM9MCxkPWI/ai50d2VlbnMubGVuZ3RoOjA7Zm9yKDtjPGQ7YysrKWoudHdlZW5zW2NdLnJ1bigxKTtyZXR1cm4gYj9oLnJlc29sdmVXaXRoKGEsW2osYl0pOmgucmVqZWN0V2l0aChhLFtqLGJdKSx0aGlzfX0pLGs9ai5wcm9wcztjWChrLGoub3B0cy5zcGVjaWFsRWFzaW5nKTtmb3IoO2U8ZztlKyspe2Q9Y1NbZV0uY2FsbChqLGEsayxqLm9wdHMpO2lmKGQpcmV0dXJuIGR9cmV0dXJuIGNWKGosaykscC5pc0Z1bmN0aW9uKGoub3B0cy5zdGFydCkmJmoub3B0cy5zdGFydC5jYWxsKGEsaikscC5meC50aW1lcihwLmV4dGVuZChpLHthbmltOmoscXVldWU6ai5vcHRzLnF1ZXVlLGVsZW06YX0pKSxqLnByb2dyZXNzKGoub3B0cy5wcm9ncmVzcykuZG9uZShqLm9wdHMuZG9uZSxqLm9wdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3YXlzKX1mdW5jdGlvbiBjWChhLGIpe3ZhciBjLGQsZSxmLGc7Zm9yKGMgaW4gYSl7ZD1wLmNhbWVsQ2FzZShjKSxlPWJbZF0sZj1hW2NdLHAuaXNBcnJheShmKSYmKGU9ZlsxXSxmPWFbY109ZlswXSksYyE9PWQmJihhW2RdPWYsZGVsZXRlIGFbY10pLGc9cC5jc3NIb29rc1tkXTtpZihnJiYiZXhwYW5kImluIGcpe2Y9Zy5leHBhbmQoZiksZGVsZXRlIGFbZF07Zm9yKGMgaW4gZiljIGluIGF8fChhW2NdPWZbY10sYltjXT1lKX1lbHNlIGJbZF09ZX19ZnVuY3Rpb24gY1koYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbD10aGlzLG09YS5zdHlsZSxuPXt9LG89W10scT1hLm5vZGVUeXBlJiZiWihhKTtjLnF1ZXVlfHwoaj1wLl9xdWV1ZUhvb2tzKGEsImZ4Iiksai51bnF1ZXVlZD09bnVsbCYmKGoudW5xdWV1ZWQ9MCxrPWouZW1wdHkuZmlyZSxqLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXtqLnVucXVldWVkfHxrKCl9KSxqLnVucXVldWVkKyssbC5hbHdheXMoZnVuY3Rpb24oKXtsLmFsd2F5cyhmdW5jdGlvbigpe2oudW5xdWV1ZWQtLSxwLnF1ZXVlKGEsImZ4IikubGVuZ3RofHxqLmVtcHR5LmZpcmUoKX0pfSkpLGEubm9kZVR5cGU9PT0xJiYoImhlaWdodCJpbiBifHwid2lkdGgiaW4gYikmJihjLm92ZXJmbG93PVttLm92ZXJmbG93LG0ub3ZlcmZsb3dYLG0ub3ZlcmZsb3dZXSxwLmNzcyhhLCJkaXNwbGF5Iik9PT0iaW5saW5lIiYmcC5jc3MoYSwiZmxvYXQiKT09PSJub25lIiYmKCFwLnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dHx8Y2MoYS5ub2RlTmFtZSk9PT0iaW5saW5lIj9tLmRpc3BsYXk9ImlubGluZS1ibG9jayI6bS56b29tPTEpKSxjLm92ZXJmbG93JiYobS5vdmVyZmxvdz0iaGlkZGVuIixwLnN1cHBvcnQuc2hyaW5rV3JhcEJsb2Nrc3x8bC5kb25lKGZ1bmN0aW9uKCl7bS5vdmVyZmxvdz1jLm92ZXJmbG93WzBdLG0ub3ZlcmZsb3dYPWMub3ZlcmZsb3dbMV0sbS5vdmVyZmxvd1k9Yy5vdmVyZmxvd1syXX0pKTtmb3IoZCBpbiBiKXtmPWJbZF07aWYoY1AuZXhlYyhmKSl7ZGVsZXRlIGJbZF07aWYoZj09PShxPyJoaWRlIjoic2hvdyIpKWNvbnRpbnVlO28ucHVzaChkKX19Zz1vLmxlbmd0aDtpZihnKXtoPXAuX2RhdGEoYSwiZnhzaG93Iil8fHAuX2RhdGEoYSwiZnhzaG93Iix7fSkscT9wKGEpLnNob3coKTpsLmRvbmUoZnVuY3Rpb24oKXtwKGEpLmhpZGUoKX0pLGwuZG9uZShmdW5jdGlvbigpe3ZhciBiO3AucmVtb3ZlRGF0YShhLCJmeHNob3ciLCEwKTtmb3IoYiBpbiBuKXAuc3R5bGUoYSxiLG5bYl0pfSk7Zm9yKGQ9MDtkPGc7ZCsrKWU9b1tkXSxpPWwuY3JlYXRlVHdlZW4oZSxxP2hbZV06MCksbltlXT1oW2VdfHxwLnN0eWxlKGEsZSksZSBpbiBofHwoaFtlXT1pLnN0YXJ0LHEmJihpLmVuZD1pLnN0YXJ0LGkuc3RhcnQ9ZT09PSJ3aWR0aCJ8fGU9PT0iaGVpZ2h0Ij8xOjApKX19ZnVuY3Rpb24gY1ooYSxiLGMsZCxlKXtyZXR1cm4gbmV3IGNaLnByb3RvdHlwZS5pbml0KGEsYixjLGQsZSl9ZnVuY3Rpb24gYyQoYSxiKXt2YXIgYyxkPXtoZWlnaHQ6YX0sZT0wO2I9Yj8xOjA7Zm9yKDtlPDQ7ZSs9Mi1iKWM9YlZbZV0sZFsibWFyZ2luIitjXT1kWyJwYWRkaW5nIitjXT1hO3JldHVybiBiJiYoZC5vcGFjaXR5PWQud2lkdGg9YSksZH1mdW5jdGlvbiBkYShhKXtyZXR1cm4gcC5pc1dpbmRvdyhhKT9hOmEubm9kZVR5cGU9PT05P2EuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93OiExfXZhciBjLGQsZT1hLmRvY3VtZW50LGY9YS5sb2NhdGlvbixnPWEubmF2aWdhdG9yLGg9YS5qUXVlcnksaT1hLiQsaj1BcnJheS5wcm90b3R5cGUucHVzaCxrPUFycmF5LnByb3RvdHlwZS5zbGljZSxsPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLG09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbz1TdHJpbmcucHJvdG90eXBlLnRyaW0scD1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgcC5mbi5pbml0KGEsYixjKX0scT0vW1wtK10/KD86XGQqXC58KVxkKyg/OltlRV1bXC0rXT9cZCt8KS8uc291cmNlLHI9L1xTLyxzPS9ccysvLHQ9L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLHU9L14oPzpbXiM8XSooPFtcd1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLHY9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyx3PS9eW1xdLDp7fVxzXSokLyx4PS8oPzpefDp8LCkoPzpccypcWykrL2cseT0vXFwoPzpbIlxcXC9iZm5ydF18dVtcZGEtZkEtRl17NH0pL2csej0vIlteIlxcXHJcbl0qInx0cnVlfGZhbHNlfG51bGx8LT8oPzpcZFxkKlwufClcZCsoPzpbZUVdW1wtK10/XGQrfCkvZyxBPS9eLW1zLS8sQj0vLShbXGRhLXpdKS9naSxDPWZ1bmN0aW9uKGEsYil7cmV0dXJuKGIrIiIpLnRvVXBwZXJDYXNlKCl9LEQ9ZnVuY3Rpb24oKXtlLmFkZEV2ZW50TGlzdGVuZXI/KGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsRCwhMSkscC5yZWFkeSgpKTplLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiJiYoZS5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixEKSxwLnJlYWR5KCkpfSxFPXt9O3AuZm49cC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnAsaW5pdDpmdW5jdGlvbihhLGMsZCl7dmFyIGYsZyxoLGk7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYS5ub2RlVHlwZSlyZXR1cm4gdGhpcy5jb250ZXh0PXRoaXNbMF09YSx0aGlzLmxlbmd0aD0xLHRoaXM7aWYodHlwZW9mIGE9PSJzdHJpbmciKXthLmNoYXJBdCgwKT09PSI8IiYmYS5jaGFyQXQoYS5sZW5ndGgtMSk9PT0iPiImJmEubGVuZ3RoPj0zP2Y9W251bGwsYSxudWxsXTpmPXUuZXhlYyhhKTtpZihmJiYoZlsxXXx8IWMpKXtpZihmWzFdKXJldHVybiBjPWMgaW5zdGFuY2VvZiBwP2NbMF06YyxpPWMmJmMubm9kZVR5cGU/Yy5vd25lckRvY3VtZW50fHxjOmUsYT1wLnBhcnNlSFRNTChmWzFdLGksITApLHYudGVzdChmWzFdKSYmcC5pc1BsYWluT2JqZWN0KGMpJiZ0aGlzLmF0dHIuY2FsbChhLGMsITApLHAubWVyZ2UodGhpcyxhKTtnPWUuZ2V0RWxlbWVudEJ5SWQoZlsyXSk7aWYoZyYmZy5wYXJlbnROb2RlKXtpZihnLmlkIT09ZlsyXSlyZXR1cm4gZC5maW5kKGEpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1nfXJldHVybiB0aGlzLmNvbnRleHQ9ZSx0aGlzLnNlbGVjdG9yPWEsdGhpc31yZXR1cm4hY3x8Yy5qcXVlcnk/KGN8fGQpLmZpbmQoYSk6dGhpcy5jb25zdHJ1Y3RvcihjKS5maW5kKGEpfXJldHVybiBwLmlzRnVuY3Rpb24oYSk/ZC5yZWFkeShhKTooYS5zZWxlY3RvciE9PWImJih0aGlzLnNlbGVjdG9yPWEuc2VsZWN0b3IsdGhpcy5jb250ZXh0PWEuY29udGV4dCkscC5tYWtlQXJyYXkoYSx0aGlzKSl9LHNlbGVjdG9yOiIiLGpxdWVyeToiMS44LjIiLGxlbmd0aDowLHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gay5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/dGhpcy50b0FycmF5KCk6YTwwP3RoaXNbdGhpcy5sZW5ndGgrYV06dGhpc1thXX0scHVzaFN0YWNrOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1wLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxhKTtyZXR1cm4gZC5wcmV2T2JqZWN0PXRoaXMsZC5jb250ZXh0PXRoaXMuY29udGV4dCxiPT09ImZpbmQiP2Quc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisodGhpcy5zZWxlY3Rvcj8iICI6IiIpK2M6YiYmKGQuc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisiLiIrYisiKCIrYysiKSIpLGR9LGVhY2g6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gcC5lYWNoKHRoaXMsYSxiKX0scmVhZHk6ZnVuY3Rpb24oYSl7cmV0dXJuIHAucmVhZHkucHJvbWlzZSgpLmRvbmUoYSksdGhpc30sZXE6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9K2EsYT09PS0xP3RoaXMuc2xpY2UoYSk6dGhpcy5zbGljZShhLGErMSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGsuYXBwbHkodGhpcyxhcmd1bWVudHMpLCJzbGljZSIsay5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX0sbWFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhwLm1hcCh0aGlzLGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEuY2FsbChiLGMsYil9KSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6aixzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX0scC5mbi5pbml0LnByb3RvdHlwZT1wLmZuLHAuZXh0ZW5kPXAuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYyxkLGUsZixnLGg9YXJndW1lbnRzWzBdfHx7fSxpPTEsaj1hcmd1bWVudHMubGVuZ3RoLGs9ITE7dHlwZW9mIGg9PSJib29sZWFuIiYmKGs9aCxoPWFyZ3VtZW50c1sxXXx8e30saT0yKSx0eXBlb2YgaCE9Im9iamVjdCImJiFwLmlzRnVuY3Rpb24oaCkmJihoPXt9KSxqPT09aSYmKGg9dGhpcywtLWkpO2Zvcig7aTxqO2krKylpZigoYT1hcmd1bWVudHNbaV0pIT1udWxsKWZvcihjIGluIGEpe2Q9aFtjXSxlPWFbY107aWYoaD09PWUpY29udGludWU7ayYmZSYmKHAuaXNQbGFpbk9iamVjdChlKXx8KGY9cC5pc0FycmF5KGUpKSk/KGY/KGY9ITEsZz1kJiZwLmlzQXJyYXkoZCk/ZDpbXSk6Zz1kJiZwLmlzUGxhaW5PYmplY3QoZCk/ZDp7fSxoW2NdPXAuZXh0ZW5kKGssZyxlKSk6ZSE9PWImJihoW2NdPWUpfXJldHVybiBofSxwLmV4dGVuZCh7bm9Db25mbGljdDpmdW5jdGlvbihiKXtyZXR1cm4gYS4kPT09cCYmKGEuJD1pKSxiJiZhLmpRdWVyeT09PXAmJihhLmpRdWVyeT1oKSxwfSxpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihhKXthP3AucmVhZHlXYWl0Kys6cC5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGEpe2lmKGE9PT0hMD8tLXAucmVhZHlXYWl0OnAuaXNSZWFkeSlyZXR1cm47aWYoIWUuYm9keSlyZXR1cm4gc2V0VGltZW91dChwLnJlYWR5LDEpO3AuaXNSZWFkeT0hMDtpZihhIT09ITAmJi0tcC5yZWFkeVdhaXQ+MClyZXR1cm47ZC5yZXNvbHZlV2l0aChlLFtwXSkscC5mbi50cmlnZ2VyJiZwKGUpLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIpfSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiBwLnR5cGUoYSk9PT0iZnVuY3Rpb24ifSxpc0FycmF5OkFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVybiBwLnR5cGUoYSk9PT0iYXJyYXkifSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gYSE9bnVsbCYmYT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChhKSkmJmlzRmluaXRlKGEpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP1N0cmluZyhhKTpFW20uY2FsbChhKV18fCJvYmplY3QifSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe2lmKCFhfHxwLnR5cGUoYSkhPT0ib2JqZWN0Inx8YS5ub2RlVHlwZXx8cC5pc1dpbmRvdyhhKSlyZXR1cm4hMTt0cnl7aWYoYS5jb25zdHJ1Y3RvciYmIW4uY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhbi5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2goYyl7cmV0dXJuITF9dmFyIGQ7Zm9yKGQgaW4gYSk7cmV0dXJuIGQ9PT1ifHxuLmNhbGwoYSxkKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LHBhcnNlSFRNTDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIWF8fHR5cGVvZiBhIT0ic3RyaW5nIj9udWxsOih0eXBlb2YgYj09ImJvb2xlYW4iJiYoYz1iLGI9MCksYj1ifHxlLChkPXYuZXhlYyhhKSk/W2IuY3JlYXRlRWxlbWVudChkWzFdKV06KGQ9cC5idWlsZEZyYWdtZW50KFthXSxiLGM/bnVsbDpbXSkscC5tZXJnZShbXSwoZC5jYWNoZWFibGU/cC5jbG9uZShkLmZyYWdtZW50KTpkLmZyYWdtZW50KS5jaGlsZE5vZGVzKSkpfSxwYXJzZUpTT046ZnVuY3Rpb24oYil7aWYoIWJ8fHR5cGVvZiBiIT0ic3RyaW5nIilyZXR1cm4gbnVsbDtiPXAudHJpbShiKTtpZihhLkpTT04mJmEuSlNPTi5wYXJzZSlyZXR1cm4gYS5KU09OLnBhcnNlKGIpO2lmKHcudGVzdChiLnJlcGxhY2UoeSwiQCIpLnJlcGxhY2UoeiwiXSIpLnJlcGxhY2UoeCwiIikpKXJldHVybihuZXcgRnVuY3Rpb24oInJldHVybiAiK2IpKSgpO3AuZXJyb3IoIkludmFsaWQgSlNPTjogIitiKX0scGFyc2VYTUw6ZnVuY3Rpb24oYyl7dmFyIGQsZTtpZighY3x8dHlwZW9mIGMhPSJzdHJpbmciKXJldHVybiBudWxsO3RyeXthLkRPTVBhcnNlcj8oZT1uZXcgRE9NUGFyc2VyLGQ9ZS5wYXJzZUZyb21TdHJpbmcoYywidGV4dC94bWwiKSk6KGQ9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxkLmFzeW5jPSJmYWxzZSIsZC5sb2FkWE1MKGMpKX1jYXRjaChmKXtkPWJ9cmV0dXJuKCFkfHwhZC5kb2N1bWVudEVsZW1lbnR8fGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RoKSYmcC5lcnJvcigiSW52YWxpZCBYTUw6ICIrYyksZH0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZyLnRlc3QoYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoQSwibXMtIikucmVwbGFjZShCLEMpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iLnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlLGY9MCxnPWEubGVuZ3RoLGg9Zz09PWJ8fHAuaXNGdW5jdGlvbihhKTtpZihkKXtpZihoKXtmb3IoZSBpbiBhKWlmKGMuYXBwbHkoYVtlXSxkKT09PSExKWJyZWFrfWVsc2UgZm9yKDtmPGc7KWlmKGMuYXBwbHkoYVtmKytdLGQpPT09ITEpYnJlYWt9ZWxzZSBpZihoKXtmb3IoZSBpbiBhKWlmKGMuY2FsbChhW2VdLGUsYVtlXSk9PT0hMSlicmVha31lbHNlIGZvcig7ZjxnOylpZihjLmNhbGwoYVtmXSxmLGFbZisrXSk9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpvJiYhby5jYWxsKCLvu7/CoCIpP2Z1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOm8uY2FsbChhKX06ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6KGErIiIpLnJlcGxhY2UodCwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9Ynx8W107cmV0dXJuIGEhPW51bGwmJihjPXAudHlwZShhKSxhLmxlbmd0aD09bnVsbHx8Yz09PSJzdHJpbmcifHxjPT09ImZ1bmN0aW9uInx8Yz09PSJyZWdleHAifHxwLmlzV2luZG93KGEpP2ouY2FsbChkLGEpOnAubWVyZ2UoZCxhKSksZH0saW5BcnJheTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7aWYoYil7aWYobClyZXR1cm4gbC5jYWxsKGIsYSxjKTtkPWIubGVuZ3RoLGM9Yz9jPDA/TWF0aC5tYXgoMCxkK2MpOmM6MDtmb3IoO2M8ZDtjKyspaWYoYyBpbiBiJiZiW2NdPT09YSlyZXR1cm4gY31yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxjKXt2YXIgZD1jLmxlbmd0aCxlPWEubGVuZ3RoLGY9MDtpZih0eXBlb2YgZD09Im51bWJlciIpZm9yKDtmPGQ7ZisrKWFbZSsrXT1jW2ZdO2Vsc2Ugd2hpbGUoY1tmXSE9PWIpYVtlKytdPWNbZisrXTtyZXR1cm4gYS5sZW5ndGg9ZSxhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlPVtdLGY9MCxnPWEubGVuZ3RoO2M9ISFjO2Zvcig7ZjxnO2YrKylkPSEhYihhW2ZdLGYpLGMhPT1kJiZlLnB1c2goYVtmXSk7cmV0dXJuIGV9LG1hcDpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZixnPVtdLGg9MCxpPWEubGVuZ3RoLGo9YSBpbnN0YW5jZW9mIHB8fGkhPT1iJiZ0eXBlb2YgaT09Im51bWJlciImJihpPjAmJmFbMF0mJmFbaS0xXXx8aT09PTB8fHAuaXNBcnJheShhKSk7aWYoailmb3IoO2g8aTtoKyspZT1jKGFbaF0saCxkKSxlIT1udWxsJiYoZ1tnLmxlbmd0aF09ZSk7ZWxzZSBmb3IoZiBpbiBhKWU9YyhhW2ZdLGYsZCksZSE9bnVsbCYmKGdbZy5sZW5ndGhdPWUpO3JldHVybiBnLmNvbmNhdC5hcHBseShbXSxnKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYyl7dmFyIGQsZSxmO3JldHVybiB0eXBlb2YgYz09InN0cmluZyImJihkPWFbY10sYz1hLGE9ZCkscC5pc0Z1bmN0aW9uKGEpPyhlPWsuY2FsbChhcmd1bWVudHMsMiksZj1mdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGMsZS5jb25jYXQoay5jYWxsKGFyZ3VtZW50cykpKX0sZi5ndWlkPWEuZ3VpZD1hLmd1aWR8fHAuZ3VpZCsrLGYpOmJ9LGFjY2VzczpmdW5jdGlvbihhLGMsZCxlLGYsZyxoKXt2YXIgaSxqPWQ9PW51bGwsaz0wLGw9YS5sZW5ndGg7aWYoZCYmdHlwZW9mIGQ9PSJvYmplY3QiKXtmb3IoayBpbiBkKXAuYWNjZXNzKGEsYyxrLGRba10sMSxnLGUpO2Y9MX1lbHNlIGlmKGUhPT1iKXtpPWg9PT1iJiZwLmlzRnVuY3Rpb24oZSksaiYmKGk/KGk9YyxjPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gaS5jYWxsKHAoYSksYyl9KTooYy5jYWxsKGEsZSksYz1udWxsKSk7aWYoYylmb3IoO2s8bDtrKyspYyhhW2tdLGQsaT9lLmNhbGwoYVtrXSxrLGMoYVtrXSxkKSk6ZSxoKTtmPTF9cmV0dXJuIGY/YTpqP2MuY2FsbChhKTpsP2MoYVswXSxkKTpnfSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19KSxwLnJlYWR5LnByb21pc2U9ZnVuY3Rpb24oYil7aWYoIWQpe2Q9cC5EZWZlcnJlZCgpO2lmKGUucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpc2V0VGltZW91dChwLnJlYWR5LDEpO2Vsc2UgaWYoZS5hZGRFdmVudExpc3RlbmVyKWUuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsRCwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixwLnJlYWR5LCExKTtlbHNle2UuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsRCksYS5hdHRhY2hFdmVudCgib25sb2FkIixwLnJlYWR5KTt2YXIgYz0hMTt0cnl7Yz1hLmZyYW1lRWxlbWVudD09bnVsbCYmZS5kb2N1bWVudEVsZW1lbnR9Y2F0Y2goZil7fWMmJmMuZG9TY3JvbGwmJmZ1bmN0aW9uIGcoKXtpZighcC5pc1JlYWR5KXt0cnl7Yy5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGEpe3JldHVybiBzZXRUaW1lb3V0KGcsNTApfXAucmVhZHkoKX19KCl9fXJldHVybiBkLnByb21pc2UoYil9LHAuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe0VbIltvYmplY3QgIitiKyJdIl09Yi50b0xvd2VyQ2FzZSgpfSksYz1wKGUpO3ZhciBGPXt9O3AuQ2FsbGJhY2tzPWZ1bmN0aW9uKGEpe2E9dHlwZW9mIGE9PSJzdHJpbmciP0ZbYV18fEcoYSk6cC5leHRlbmQoe30sYSk7dmFyIGMsZCxlLGYsZyxoLGk9W10saj0hYS5vbmNlJiZbXSxrPWZ1bmN0aW9uKGIpe2M9YS5tZW1vcnkmJmIsZD0hMCxoPWZ8fDAsZj0wLGc9aS5sZW5ndGgsZT0hMDtmb3IoO2kmJmg8ZztoKyspaWYoaVtoXS5hcHBseShiWzBdLGJbMV0pPT09ITEmJmEuc3RvcE9uRmFsc2Upe2M9ITE7YnJlYWt9ZT0hMSxpJiYoaj9qLmxlbmd0aCYmayhqLnNoaWZ0KCkpOmM/aT1bXTpsLmRpc2FibGUoKSl9LGw9e2FkZDpmdW5jdGlvbigpe2lmKGkpe3ZhciBiPWkubGVuZ3RoOyhmdW5jdGlvbiBkKGIpe3AuZWFjaChiLGZ1bmN0aW9uKGIsYyl7dmFyIGU9cC50eXBlKGMpO2U9PT0iZnVuY3Rpb24iJiYoIWEudW5pcXVlfHwhbC5oYXMoYykpP2kucHVzaChjKTpjJiZjLmxlbmd0aCYmZSE9PSJzdHJpbmciJiZkKGMpfSl9KShhcmd1bWVudHMpLGU/Zz1pLmxlbmd0aDpjJiYoZj1iLGsoYykpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gaSYmcC5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihhLGIpe3ZhciBjO3doaWxlKChjPXAuaW5BcnJheShiLGksYykpPi0xKWkuc3BsaWNlKGMsMSksZSYmKGM8PWcmJmctLSxjPD1oJiZoLS0pfSksdGhpc30saGFzOmZ1bmN0aW9uKGEpe3JldHVybiBwLmluQXJyYXkoYSxpKT4tMX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gaT1bXSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGk9aj1jPWIsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4haX0sbG9jazpmdW5jdGlvbigpe3JldHVybiBqPWIsY3x8bC5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWp9LGZpcmVXaXRoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9Ynx8W10sYj1bYSxiLnNsaWNlP2Iuc2xpY2UoKTpiXSxpJiYoIWR8fGopJiYoZT9qLnB1c2goYik6ayhiKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBsLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZH19O3JldHVybiBsfSxwLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9W1sicmVzb2x2ZSIsImRvbmUiLHAuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIscC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlamVjdGVkIl0sWyJub3RpZnkiLCJwcm9ncmVzcyIscC5DYWxsYmFja3MoIm1lbW9yeSIpXV0sYz0icGVuZGluZyIsZD17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSx0aGVuOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiBwLkRlZmVycmVkKGZ1bmN0aW9uKGMpe3AuZWFjaChiLGZ1bmN0aW9uKGIsZCl7dmFyIGY9ZFswXSxnPWFbYl07ZVtkWzFdXShwLmlzRnVuY3Rpb24oZyk/ZnVuY3Rpb24oKXt2YXIgYT1nLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthJiZwLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9hLnByb21pc2UoKS5kb25lKGMucmVzb2x2ZSkuZmFpbChjLnJlamVjdCkucHJvZ3Jlc3MoYy5ub3RpZnkpOmNbZisiV2l0aCJdKHRoaXM9PT1lP2M6dGhpcyxbYV0pfTpjW2ZdKX0pLGE9bnVsbH0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtyZXR1cm4gYSE9bnVsbD9wLmV4dGVuZChhLGQpOmR9fSxlPXt9O3JldHVybiBkLnBpcGU9ZC50aGVuLHAuZWFjaChiLGZ1bmN0aW9uKGEsZil7dmFyIGc9ZlsyXSxoPWZbM107ZFtmWzFdXT1nLmFkZCxoJiZnLmFkZChmdW5jdGlvbigpe2M9aH0sYlthXjFdWzJdLmRpc2FibGUsYlsyXVsyXS5sb2NrKSxlW2ZbMF1dPWcuZmlyZSxlW2ZbMF0rIldpdGgiXT1nLmZpcmVXaXRofSksZC5wcm9taXNlKGUpLGEmJmEuY2FsbChlLGUpLGV9LHdoZW46ZnVuY3Rpb24oYSl7dmFyIGI9MCxjPWsuY2FsbChhcmd1bWVudHMpLGQ9Yy5sZW5ndGgsZT1kIT09MXx8YSYmcC5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/ZDowLGY9ZT09PTE/YTpwLkRlZmVycmVkKCksZz1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe2JbYV09dGhpcyxjW2FdPWFyZ3VtZW50cy5sZW5ndGg+MT9rLmNhbGwoYXJndW1lbnRzKTpkLGM9PT1oP2Yubm90aWZ5V2l0aChiLGMpOi0tZXx8Zi5yZXNvbHZlV2l0aChiLGMpfX0saCxpLGo7aWYoZD4xKXtoPW5ldyBBcnJheShkKSxpPW5ldyBBcnJheShkKSxqPW5ldyBBcnJheShkKTtmb3IoO2I8ZDtiKyspY1tiXSYmcC5pc0Z1bmN0aW9uKGNbYl0ucHJvbWlzZSk/Y1tiXS5wcm9taXNlKCkuZG9uZShnKGIsaixjKSkuZmFpbChmLnJlamVjdCkucHJvZ3Jlc3MoZyhiLGksaCkpOi0tZX1yZXR1cm4gZXx8Zi5yZXNvbHZlV2l0aChqLGMpLGYucHJvbWlzZSgpfX0pLHAuc3VwcG9ydD1mdW5jdGlvbigpe3ZhciBiLGMsZCxmLGcsaCxpLGosayxsLG0sbj1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpO24uc2V0QXR0cmlidXRlKCJjbGFzc05hbWUiLCJ0Iiksbi5pbm5lckhUTUw9IiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsYz1uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIiksZD1uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF0sZC5zdHlsZS5jc3NUZXh0PSJ0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNSI7aWYoIWN8fCFjLmxlbmd0aClyZXR1cm57fTtmPWUuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksZz1mLmFwcGVuZENoaWxkKGUuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLGg9bi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXSxiPXtsZWFkaW5nV2hpdGVzcGFjZTpuLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0zLHRib2R5OiFuLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCxodG1sU2VyaWFsaXplOiEhbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxzdHlsZTovdG9wLy50ZXN0KGQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxocmVmTm9ybWFsaXplZDpkLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09Ii9hIixvcGFjaXR5Oi9eMC41Ly50ZXN0KGQuc3R5bGUub3BhY2l0eSksY3NzRmxvYXQ6ISFkLnN0eWxlLmNzc0Zsb2F0LGNoZWNrT246aC52YWx1ZT09PSJvbiIsb3B0U2VsZWN0ZWQ6Zy5zZWxlY3RlZCxnZXRTZXRBdHRyaWJ1dGU6bi5jbGFzc05hbWUhPT0idCIsZW5jdHlwZTohIWUuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsaHRtbDVDbG9uZTplLmNyZWF0ZUVsZW1lbnQoIm5hdiIpLmNsb25lTm9kZSghMCkub3V0ZXJIVE1MIT09Ijw6bmF2PjwvOm5hdj4iLGJveE1vZGVsOmUuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IixzdWJtaXRCdWJibGVzOiEwLGNoYW5nZUJ1YmJsZXM6ITAsZm9jdXNpbkJ1YmJsZXM6ITEsZGVsZXRlRXhwYW5kbzohMCxub0Nsb25lRXZlbnQ6ITAsaW5saW5lQmxvY2tOZWVkc0xheW91dDohMSxzaHJpbmtXcmFwQmxvY2tzOiExLHJlbGlhYmxlTWFyZ2luUmlnaHQ6ITAsYm94U2l6aW5nUmVsaWFibGU6ITAscGl4ZWxQb3NpdGlvbjohMX0saC5jaGVja2VkPSEwLGIubm9DbG9uZUNoZWNrZWQ9aC5jbG9uZU5vZGUoITApLmNoZWNrZWQsZi5kaXNhYmxlZD0hMCxiLm9wdERpc2FibGVkPSFnLmRpc2FibGVkO3RyeXtkZWxldGUgbi50ZXN0fWNhdGNoKG8pe2IuZGVsZXRlRXhwYW5kbz0hMX0hbi5hZGRFdmVudExpc3RlbmVyJiZuLmF0dGFjaEV2ZW50JiZuLmZpcmVFdmVudCYmKG4uYXR0YWNoRXZlbnQoIm9uY2xpY2siLG09ZnVuY3Rpb24oKXtiLm5vQ2xvbmVFdmVudD0hMX0pLG4uY2xvbmVOb2RlKCEwKS5maXJlRXZlbnQoIm9uY2xpY2siKSxuLmRldGFjaEV2ZW50KCJvbmNsaWNrIixtKSksaD1lLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksaC52YWx1ZT0idCIsaC5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGIucmFkaW9WYWx1ZT1oLnZhbHVlPT09InQiLGguc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLGguc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLG4uYXBwZW5kQ2hpbGQoaCksaT1lLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxpLmFwcGVuZENoaWxkKG4ubGFzdENoaWxkKSxiLmNoZWNrQ2xvbmU9aS5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsYi5hcHBlbmRDaGVja2VkPWguY2hlY2tlZCxpLnJlbW92ZUNoaWxkKGgpLGkuYXBwZW5kQ2hpbGQobik7aWYobi5hdHRhY2hFdmVudClmb3IoayBpbntzdWJtaXQ6ITAsY2hhbmdlOiEwLGZvY3VzaW46ITB9KWo9Im9uIitrLGw9aiBpbiBuLGx8fChuLnNldEF0dHJpYnV0ZShqLCJyZXR1cm47IiksbD10eXBlb2YgbltqXT09ImZ1bmN0aW9uIiksYltrKyJCdWJibGVzIl09bDtyZXR1cm4gcChmdW5jdGlvbigpe3ZhciBjLGQsZixnLGg9InBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjsiLGk9ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO2lmKCFpKXJldHVybjtjPWUuY3JlYXRlRWxlbWVudCgiZGl2IiksYy5zdHlsZS5jc3NUZXh0PSJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3Bvc2l0aW9uOnN0YXRpYzt0b3A6MDttYXJnaW4tdG9wOjFweCIsaS5pbnNlcnRCZWZvcmUoYyxpLmZpcnN0Q2hpbGQpLGQ9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSxjLmFwcGVuZENoaWxkKGQpLGQuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZD48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IixmPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIiksZlswXS5zdHlsZS5jc3NUZXh0PSJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25lIixsPWZbMF0ub2Zmc2V0SGVpZ2h0PT09MCxmWzBdLnN0eWxlLmRpc3BsYXk9IiIsZlsxXS5zdHlsZS5kaXNwbGF5PSJub25lIixiLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cz1sJiZmWzBdLm9mZnNldEhlaWdodD09PTAsZC5pbm5lckhUTUw9IiIsZC5zdHlsZS5jc3NUZXh0PSJib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxcHg7Ym9yZGVyOjFweDtkaXNwbGF5OmJsb2NrO3dpZHRoOjRweDttYXJnaW4tdG9wOjElO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxJTsiLGIuYm94U2l6aW5nPWQub2Zmc2V0V2lkdGg9PT00LGIuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQ9aS5vZmZzZXRUb3AhPT0xLGEuZ2V0Q29tcHV0ZWRTdHlsZSYmKGIucGl4ZWxQb3NpdGlvbj0oYS5nZXRDb21wdXRlZFN0eWxlKGQsbnVsbCl8fHt9KS50b3AhPT0iMSUiLGIuYm94U2l6aW5nUmVsaWFibGU9KGEuZ2V0Q29tcHV0ZWRTdHlsZShkLG51bGwpfHx7d2lkdGg6IjRweCJ9KS53aWR0aD09PSI0cHgiLGc9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSxnLnN0eWxlLmNzc1RleHQ9ZC5zdHlsZS5jc3NUZXh0PWgsZy5zdHlsZS5tYXJnaW5SaWdodD1nLnN0eWxlLndpZHRoPSIwIixkLnN0eWxlLndpZHRoPSIxcHgiLGQuYXBwZW5kQ2hpbGQoZyksYi5yZWxpYWJsZU1hcmdpblJpZ2h0PSFwYXJzZUZsb2F0KChhLmdldENvbXB1dGVkU3R5bGUoZyxudWxsKXx8e30pLm1hcmdpblJpZ2h0KSksdHlwZW9mIGQuc3R5bGUuem9vbSE9InVuZGVmaW5lZCImJihkLmlubmVySFRNTD0iIixkLnN0eWxlLmNzc1RleHQ9aCsid2lkdGg6MXB4O3BhZGRpbmc6MXB4O2Rpc3BsYXk6aW5saW5lO3pvb206MSIsYi5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWQub2Zmc2V0V2lkdGg9PT0zLGQuc3R5bGUuZGlzcGxheT0iYmxvY2siLGQuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiLGQuaW5uZXJIVE1MPSI8ZGl2PjwvZGl2PiIsZC5maXJzdENoaWxkLnN0eWxlLndpZHRoPSI1cHgiLGIuc2hyaW5rV3JhcEJsb2Nrcz1kLm9mZnNldFdpZHRoIT09MyxjLnN0eWxlLnpvb209MSksaS5yZW1vdmVDaGlsZChjKSxjPWQ9Zj1nPW51bGx9KSxpLnJlbW92ZUNoaWxkKG4pLGM9ZD1mPWc9aD1pPW49bnVsbCxifSgpO3ZhciBIPS8oPzpce1tcc1xTXSpcfXxcW1tcc1xTXSpcXSkkLyxJPS8oW0EtWl0pL2c7cC5leHRlbmQoe2NhY2hlOnt9LGRlbGV0ZWRJZHM6W10sdXVpZDowLGV4cGFuZG86ImpRdWVyeSIrKHAuZm4uanF1ZXJ5K01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLG5vRGF0YTp7ZW1iZWQ6ITAsb2JqZWN0OiJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLGFwcGxldDohMH0saGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gYT1hLm5vZGVUeXBlP3AuY2FjaGVbYVtwLmV4cGFuZG9dXTphW3AuZXhwYW5kb10sISFhJiYhSyhhKX0sZGF0YTpmdW5jdGlvbihhLGMsZCxlKXtpZighcC5hY2NlcHREYXRhKGEpKXJldHVybjt2YXIgZixnLGg9cC5leHBhbmRvLGk9dHlwZW9mIGM9PSJzdHJpbmciLGo9YS5ub2RlVHlwZSxrPWo/cC5jYWNoZTphLGw9aj9hW2hdOmFbaF0mJmg7aWYoKCFsfHwha1tsXXx8IWUmJiFrW2xdLmRhdGEpJiZpJiZkPT09YilyZXR1cm47bHx8KGo/YVtoXT1sPXAuZGVsZXRlZElkcy5wb3AoKXx8cC5ndWlkKys6bD1oKSxrW2xdfHwoa1tsXT17fSxqfHwoa1tsXS50b0pTT049cC5ub29wKSk7aWYodHlwZW9mIGM9PSJvYmplY3QifHx0eXBlb2YgYz09ImZ1bmN0aW9uIillP2tbbF09cC5leHRlbmQoa1tsXSxjKTprW2xdLmRhdGE9cC5leHRlbmQoa1tsXS5kYXRhLGMpO3JldHVybiBmPWtbbF0sZXx8KGYuZGF0YXx8KGYuZGF0YT17fSksZj1mLmRhdGEpLGQhPT1iJiYoZltwLmNhbWVsQ2FzZShjKV09ZCksaT8oZz1mW2NdLGc9PW51bGwmJihnPWZbcC5jYW1lbENhc2UoYyldKSk6Zz1mLGd9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiLGMpe2lmKCFwLmFjY2VwdERhdGEoYSkpcmV0dXJuO3ZhciBkLGUsZixnPWEubm9kZVR5cGUsaD1nP3AuY2FjaGU6YSxpPWc/YVtwLmV4cGFuZG9dOnAuZXhwYW5kbztpZighaFtpXSlyZXR1cm47aWYoYil7ZD1jP2hbaV06aFtpXS5kYXRhO2lmKGQpe3AuaXNBcnJheShiKXx8KGIgaW4gZD9iPVtiXTooYj1wLmNhbWVsQ2FzZShiKSxiIGluIGQ/Yj1bYl06Yj1iLnNwbGl0KCIgIikpKTtmb3IoZT0wLGY9Yi5sZW5ndGg7ZTxmO2UrKylkZWxldGUgZFtiW2VdXTtpZighKGM/SzpwLmlzRW1wdHlPYmplY3QpKGQpKXJldHVybn19aWYoIWMpe2RlbGV0ZSBoW2ldLmRhdGE7aWYoIUsoaFtpXSkpcmV0dXJufWc/cC5jbGVhbkRhdGEoW2FdLCEwKTpwLnN1cHBvcnQuZGVsZXRlRXhwYW5kb3x8aCE9aC53aW5kb3c/ZGVsZXRlIGhbaV06aFtpXT1udWxsfSxfZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHAuZGF0YShhLGIsYywhMCl9LGFjY2VwdERhdGE6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZSYmcC5ub0RhdGFbYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtyZXR1cm4hYnx8YiE9PSEwJiZhLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09Yn19KSxwLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGMpe3ZhciBkLGUsZixnLGgsaT10aGlzWzBdLGo9MCxrPW51bGw7aWYoYT09PWIpe2lmKHRoaXMubGVuZ3RoKXtrPXAuZGF0YShpKTtpZihpLm5vZGVUeXBlPT09MSYmIXAuX2RhdGEoaSwicGFyc2VkQXR0cnMiKSl7Zj1pLmF0dHJpYnV0ZXM7Zm9yKGg9Zi5sZW5ndGg7ajxoO2orKylnPWZbal0ubmFtZSxnLmluZGV4T2YoImRhdGEtIil8fChnPXAuY2FtZWxDYXNlKGcuc3Vic3RyaW5nKDUpKSxKKGksZyxrW2ddKSk7cC5fZGF0YShpLCJwYXJzZWRBdHRycyIsITApfX1yZXR1cm4ga31yZXR1cm4gdHlwZW9mIGE9PSJvYmplY3QiP3RoaXMuZWFjaChmdW5jdGlvbigpe3AuZGF0YSh0aGlzLGEpfSk6KGQ9YS5zcGxpdCgiLiIsMiksZFsxXT1kWzFdPyIuIitkWzFdOiIiLGU9ZFsxXSsiISIscC5hY2Nlc3ModGhpcyxmdW5jdGlvbihjKXtpZihjPT09YilyZXR1cm4gaz10aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIitlLFtkWzBdXSksaz09PWImJmkmJihrPXAuZGF0YShpLGEpLGs9SihpLGEsaykpLGs9PT1iJiZkWzFdP3RoaXMuZGF0YShkWzBdKTprO2RbMV09Yyx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1wKHRoaXMpO2IudHJpZ2dlckhhbmRsZXIoInNldERhdGEiK2UsZCkscC5kYXRhKHRoaXMsYSxjKSxiLnRyaWdnZXJIYW5kbGVyKCJjaGFuZ2VEYXRhIitlLGQpfSl9LG51bGwsYyxhcmd1bWVudHMubGVuZ3RoPjEsbnVsbCwhMSkpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtwLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLHAuZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7aWYoYSlyZXR1cm4gYj0oYnx8ImZ4IikrInF1ZXVlIixkPXAuX2RhdGEoYSxiKSxjJiYoIWR8fHAuaXNBcnJheShjKT9kPXAuX2RhdGEoYSxiLHAubWFrZUFycmF5KGMpKTpkLnB1c2goYykpLGR8fFtdfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPXAucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9cC5fcXVldWVIb29rcyhhLGIpLGc9ZnVuY3Rpb24oKXtwLmRlcXVldWUoYSxiKX07ZT09PSJpbnByb2dyZXNzIiYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKGI9PT0iZngiJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iKyJxdWV1ZUhvb2tzIjtyZXR1cm4gcC5fZGF0YShhLGMpfHxwLl9kYXRhKGEsYyx7ZW1wdHk6cC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7cC5yZW1vdmVEYXRhKGEsYisicXVldWUiLCEwKSxwLnJlbW92ZURhdGEoYSxjLCEwKX0pfSl9fSkscC5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9MjtyZXR1cm4gdHlwZW9mIGEhPSJzdHJpbmciJiYoYz1hLGE9ImZ4IixkLS0pLGFyZ3VtZW50cy5sZW5ndGg8ZD9wLnF1ZXVlKHRoaXNbMF0sYSk6Yz09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1wLnF1ZXVlKHRoaXMsYSxjKTtwLl9xdWV1ZUhvb2tzKHRoaXMsYSksYT09PSJmeCImJmJbMF0hPT0iaW5wcm9ncmVzcyImJnAuZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3AuZGVxdWV1ZSh0aGlzLGEpfSl9LGRlbGF5OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9cC5meD9wLmZ4LnNwZWVkc1thXXx8YTphLGI9Ynx8ImZ4Iix0aGlzLnF1ZXVlKGIsZnVuY3Rpb24oYixjKXt2YXIgZD1zZXRUaW1lb3V0KGIsYSk7Yy5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGQpfX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnF1ZXVlKGF8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGEsYyl7dmFyIGQsZT0xLGY9cC5EZWZlcnJlZCgpLGc9dGhpcyxoPXRoaXMubGVuZ3RoLGk9ZnVuY3Rpb24oKXstLWV8fGYucmVzb2x2ZVdpdGgoZyxbZ10pfTt0eXBlb2YgYSE9InN0cmluZyImJihjPWEsYT1iKSxhPWF8fCJmeCI7d2hpbGUoaC0tKWQ9cC5fZGF0YShnW2hdLGErInF1ZXVlSG9va3MiKSxkJiZkLmVtcHR5JiYoZSsrLGQuZW1wdHkuYWRkKGkpKTtyZXR1cm4gaSgpLGYucHJvbWlzZShjKX19KTt2YXIgTCxNLE4sTz0vW1x0XHJcbl0vZyxQPS9cci9nLFE9L14oPzpidXR0b258aW5wdXQpJC9pLFI9L14oPzpidXR0b258aW5wdXR8b2JqZWN0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksUz0vXmEoPzpyZWF8KSQvaSxUPS9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5jfGNoZWNrZWR8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWR8c2VsZWN0ZWQpJC9pLFU9cC5zdXBwb3J0LmdldFNldEF0dHJpYnV0ZTtwLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiBwLmFjY2Vzcyh0aGlzLHAuYXR0cixhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cC5yZW1vdmVBdHRyKHRoaXMsYSl9KX0scHJvcDpmdW5jdGlvbihhLGIpe3JldHVybiBwLmFjY2Vzcyh0aGlzLHAucHJvcCxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihhKXtyZXR1cm4gYT1wLnByb3BGaXhbYV18fGEsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbYV09YixkZWxldGUgdGhpc1thXX1jYXRjaChjKXt9fSl9LGFkZENsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2lmKHAuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3AodGhpcykuYWRkQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoYSYmdHlwZW9mIGE9PSJzdHJpbmciKXtiPWEuc3BsaXQocyk7Zm9yKGM9MCxkPXRoaXMubGVuZ3RoO2M8ZDtjKyspe2U9dGhpc1tjXTtpZihlLm5vZGVUeXBlPT09MSlpZighZS5jbGFzc05hbWUmJmIubGVuZ3RoPT09MSllLmNsYXNzTmFtZT1hO2Vsc2V7Zj0iICIrZS5jbGFzc05hbWUrIiAiO2ZvcihnPTAsaD1iLmxlbmd0aDtnPGg7ZysrKWYuaW5kZXhPZigiICIrYltnXSsiICIpPDAmJihmKz1iW2ddKyIgIik7ZS5jbGFzc05hbWU9cC50cmltKGYpfX19cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe3ZhciBjLGQsZSxmLGcsaCxpO2lmKHAuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3AodGhpcykucmVtb3ZlQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoYSYmdHlwZW9mIGE9PSJzdHJpbmcifHxhPT09Yil7Yz0oYXx8IiIpLnNwbGl0KHMpO2ZvcihoPTAsaT10aGlzLmxlbmd0aDtoPGk7aCsrKXtlPXRoaXNbaF07aWYoZS5ub2RlVHlwZT09PTEmJmUuY2xhc3NOYW1lKXtkPSgiICIrZS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKE8sIiAiKTtmb3IoZj0wLGc9Yy5sZW5ndGg7ZjxnO2YrKyl3aGlsZShkLmluZGV4T2YoIiAiK2NbZl0rIiAiKT49MClkPWQucmVwbGFjZSgiICIrY1tmXSsiICIsIiAiKTtlLmNsYXNzTmFtZT1hP3AudHJpbShkKToiIn19fXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhLGQ9dHlwZW9mIGI9PSJib29sZWFuIjtyZXR1cm4gcC5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihjKXtwKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsdGhpcy5jbGFzc05hbWUsYiksYil9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihjPT09InN0cmluZyIpe3ZhciBlLGY9MCxnPXAodGhpcyksaD1iLGk9YS5zcGxpdChzKTt3aGlsZShlPWlbZisrXSloPWQ/aDohZy5oYXNDbGFzcyhlKSxnW2g/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXShlKX1lbHNlIGlmKGM9PT0idW5kZWZpbmVkInx8Yz09PSJib29sZWFuIil0aGlzLmNsYXNzTmFtZSYmcC5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjpwLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiJ9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGI9IiAiK2ErIiAiLGM9MCxkPXRoaXMubGVuZ3RoO2Zvcig7YzxkO2MrKylpZih0aGlzW2NdLm5vZGVUeXBlPT09MSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoTywiICIpLmluZGV4T2YoYik+PTApcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZj10aGlzWzBdO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtpZihmKXJldHVybiBjPXAudmFsSG9va3NbZi50eXBlXXx8cC52YWxIb29rc1tmLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGMmJiJnZXQiaW4gYyYmKGQ9Yy5nZXQoZiwidmFsdWUiKSkhPT1iP2Q6KGQ9Zi52YWx1ZSx0eXBlb2YgZD09InN0cmluZyI/ZC5yZXBsYWNlKFAsIiIpOmQ9PW51bGw/IiI6ZCk7cmV0dXJufXJldHVybiBlPXAuaXNGdW5jdGlvbihhKSx0aGlzLmVhY2goZnVuY3Rpb24oZCl7dmFyIGYsZz1wKHRoaXMpO2lmKHRoaXMubm9kZVR5cGUhPT0xKXJldHVybjtlP2Y9YS5jYWxsKHRoaXMsZCxnLnZhbCgpKTpmPWEsZj09bnVsbD9mPSIiOnR5cGVvZiBmPT0ibnVtYmVyIj9mKz0iIjpwLmlzQXJyYXkoZikmJihmPXAubWFwKGYsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6YSsiIn0pKSxjPXAudmFsSG9va3NbdGhpcy50eXBlXXx8cC52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldO2lmKCFjfHwhKCJzZXQiaW4gYyl8fGMuc2V0KHRoaXMsZiwidmFsdWUiKT09PWIpdGhpcy52YWx1ZT1mfSl9fSkscC5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLmF0dHJpYnV0ZXMudmFsdWU7cmV0dXJuIWJ8fGIuc3BlY2lmaWVkP2EudmFsdWU6YS50ZXh0fX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZj1hLnNlbGVjdGVkSW5kZXgsZz1bXSxoPWEub3B0aW9ucyxpPWEudHlwZT09PSJzZWxlY3Qtb25lIjtpZihmPDApcmV0dXJuIG51bGw7Yz1pP2Y6MCxkPWk/ZisxOmgubGVuZ3RoO2Zvcig7YzxkO2MrKyl7ZT1oW2NdO2lmKGUuc2VsZWN0ZWQmJihwLnN1cHBvcnQub3B0RGlzYWJsZWQ/IWUuZGlzYWJsZWQ6ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIik9PT1udWxsKSYmKCFlLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFwLm5vZGVOYW1lKGUucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2I9cChlKS52YWwoKTtpZihpKXJldHVybiBiO2cucHVzaChiKX19cmV0dXJuIGkmJiFnLmxlbmd0aCYmaC5sZW5ndGg/cChoW2ZdKS52YWwoKTpnfSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1wLm1ha2VBcnJheShiKTtyZXR1cm4gcChhKS5maW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD1wLmluQXJyYXkocCh0aGlzKS52YWwoKSxjKT49MH0pLGMubGVuZ3RofHwoYS5zZWxlY3RlZEluZGV4PS0xKSxjfX19LGF0dHJGbjp7fSxhdHRyOmZ1bmN0aW9uKGEsYyxkLGUpe3ZhciBmLGcsaCxpPWEubm9kZVR5cGU7aWYoIWF8fGk9PT0zfHxpPT09OHx8aT09PTIpcmV0dXJuO2lmKGUmJnAuaXNGdW5jdGlvbihwLmZuW2NdKSlyZXR1cm4gcChhKVtjXShkKTtpZih0eXBlb2YgYS5nZXRBdHRyaWJ1dGU9PSJ1bmRlZmluZWQiKXJldHVybiBwLnByb3AoYSxjLGQpO2g9aSE9PTF8fCFwLmlzWE1MRG9jKGEpLGgmJihjPWMudG9Mb3dlckNhc2UoKSxnPXAuYXR0ckhvb2tzW2NdfHwoVC50ZXN0KGMpP006TCkpO2lmKGQhPT1iKXtpZihkPT09bnVsbCl7cC5yZW1vdmVBdHRyKGEsYyk7cmV0dXJufXJldHVybiBnJiYic2V0ImluIGcmJmgmJihmPWcuc2V0KGEsZCxjKSkhPT1iP2Y6KGEuc2V0QXR0cmlidXRlKGMsZCsiIiksZCl9cmV0dXJuIGcmJiJnZXQiaW4gZyYmaCYmKGY9Zy5nZXQoYSxjKSkhPT1udWxsP2Y6KGY9YS5nZXRBdHRyaWJ1dGUoYyksZj09PW51bGw/YjpmKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9MDtpZihiJiZhLm5vZGVUeXBlPT09MSl7ZD1iLnNwbGl0KHMpO2Zvcig7ZzxkLmxlbmd0aDtnKyspZT1kW2ddLGUmJihjPXAucHJvcEZpeFtlXXx8ZSxmPVQudGVzdChlKSxmfHxwLmF0dHIoYSxlLCIiKSxhLnJlbW92ZUF0dHJpYnV0ZShVP2U6YyksZiYmYyBpbiBhJiYoYVtjXT0hMSkpfX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oYSxiKXtpZihRLnRlc3QoYS5ub2RlTmFtZSkmJmEucGFyZW50Tm9kZSlwLmVycm9yKCJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiKTtlbHNlIGlmKCFwLnN1cHBvcnQucmFkaW9WYWx1ZSYmYj09PSJyYWRpbyImJnAubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoInR5cGUiLGIpLGMmJihhLnZhbHVlPWMpLGJ9fX0sdmFsdWU6e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBMJiZwLm5vZGVOYW1lKGEsImJ1dHRvbiIpP0wuZ2V0KGEsYik6YiBpbiBhP2EudmFsdWU6bnVsbH0sc2V0OmZ1bmN0aW9uKGEsYixjKXtpZihMJiZwLm5vZGVOYW1lKGEsImJ1dHRvbiIpKXJldHVybiBMLnNldChhLGIsYyk7YS52YWx1ZT1ifX19LHByb3BGaXg6e3RhYmluZGV4OiJ0YWJJbmRleCIscmVhZG9ubHk6InJlYWRPbmx5IiwiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIixtYXhsZW5ndGg6Im1heExlbmd0aCIsY2VsbHNwYWNpbmc6ImNlbGxTcGFjaW5nIixjZWxscGFkZGluZzoiY2VsbFBhZGRpbmciLHJvd3NwYW46InJvd1NwYW4iLGNvbHNwYW46ImNvbFNwYW4iLHVzZW1hcDoidXNlTWFwIixmcmFtZWJvcmRlcjoiZnJhbWVCb3JkZXIiLGNvbnRlbnRlZGl0YWJsZToiY29udGVudEVkaXRhYmxlIn0scHJvcDpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZixnLGg9YS5ub2RlVHlwZTtpZighYXx8aD09PTN8fGg9PT04fHxoPT09MilyZXR1cm47cmV0dXJuIGc9aCE9PTF8fCFwLmlzWE1MRG9jKGEpLGcmJihjPXAucHJvcEZpeFtjXXx8YyxmPXAucHJvcEhvb2tzW2NdKSxkIT09Yj9mJiYic2V0ImluIGYmJihlPWYuc2V0KGEsZCxjKSkhPT1iP2U6YVtjXT1kOmYmJiJnZXQiaW4gZiYmKGU9Zi5nZXQoYSxjKSkhPT1udWxsP2U6YVtjXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBjPWEuZ2V0QXR0cmlidXRlTm9kZSgidGFiaW5kZXgiKTtyZXR1cm4gYyYmYy5zcGVjaWZpZWQ/cGFyc2VJbnQoYy52YWx1ZSwxMCk6Ui50ZXN0KGEubm9kZU5hbWUpfHxTLnRlc3QoYS5ub2RlTmFtZSkmJmEuaHJlZj8wOmJ9fX19KSxNPXtnZXQ6ZnVuY3Rpb24oYSxjKXt2YXIgZCxlPXAucHJvcChhLGMpO3JldHVybiBlPT09ITB8fHR5cGVvZiBlIT0iYm9vbGVhbiImJihkPWEuZ2V0QXR0cmlidXRlTm9kZShjKSkmJmQubm9kZVZhbHVlIT09ITE/Yy50b0xvd2VyQ2FzZSgpOmJ9LHNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGI9PT0hMT9wLnJlbW92ZUF0dHIoYSxjKTooZD1wLnByb3BGaXhbY118fGMsZCBpbiBhJiYoYVtkXT0hMCksYS5zZXRBdHRyaWJ1dGUoYyxjLnRvTG93ZXJDYXNlKCkpKSxjfX0sVXx8KE49e25hbWU6ITAsaWQ6ITAsY29vcmRzOiEwfSxMPXAudmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oYSxjKXt2YXIgZDtyZXR1cm4gZD1hLmdldEF0dHJpYnV0ZU5vZGUoYyksZCYmKE5bY10/ZC52YWx1ZSE9PSIiOmQuc3BlY2lmaWVkKT9kLnZhbHVlOmJ9LHNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpO3JldHVybiBkfHwoZD1lLmNyZWF0ZUF0dHJpYnV0ZShjKSxhLnNldEF0dHJpYnV0ZU5vZGUoZCkpLGQudmFsdWU9YisiIn19LHAuZWFjaChbIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxiKXtwLmF0dHJIb29rc1tiXT1wLmV4dGVuZChwLmF0dHJIb29rc1tiXSx7c2V0OmZ1bmN0aW9uKGEsYyl7aWYoYz09PSIiKXJldHVybiBhLnNldEF0dHJpYnV0ZShiLCJhdXRvIiksY319KX0pLHAuYXR0ckhvb2tzLmNvbnRlbnRlZGl0YWJsZT17Z2V0OkwuZ2V0LHNldDpmdW5jdGlvbihhLGIsYyl7Yj09PSIiJiYoYj0iZmFsc2UiKSxMLnNldChhLGIsYyl9fSkscC5zdXBwb3J0LmhyZWZOb3JtYWxpemVkfHxwLmVhY2goWyJocmVmIiwic3JjIiwid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGMpe3AuYXR0ckhvb2tzW2NdPXAuZXh0ZW5kKHAuYXR0ckhvb2tzW2NdLHtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGUoYywyKTtyZXR1cm4gZD09PW51bGw/YjpkfX0pfSkscC5zdXBwb3J0LnN0eWxlfHwocC5hdHRySG9va3Muc3R5bGU9e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0LnRvTG93ZXJDYXNlKCl8fGJ9LHNldDpmdW5jdGlvbihhLGIpe3JldHVybiBhLnN0eWxlLmNzc1RleHQ9YisiIn19KSxwLnN1cHBvcnQub3B0U2VsZWN0ZWR8fChwLnByb3BIb29rcy5zZWxlY3RlZD1wLmV4dGVuZChwLnByb3BIb29rcy5zZWxlY3RlZCx7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmKGIuc2VsZWN0ZWRJbmRleCxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KSxudWxsfX0pKSxwLnN1cHBvcnQuZW5jdHlwZXx8KHAucHJvcEZpeC5lbmN0eXBlPSJlbmNvZGluZyIpLHAuc3VwcG9ydC5jaGVja09ufHxwLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtwLnZhbEhvb2tzW3RoaXNdPXtnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPT09bnVsbD8ib24iOmEudmFsdWV9fX0pLHAuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe3AudmFsSG9va3NbdGhpc109cC5leHRlbmQocC52YWxIb29rc1t0aGlzXSx7c2V0OmZ1bmN0aW9uKGEsYil7aWYocC5pc0FycmF5KGIpKXJldHVybiBhLmNoZWNrZWQ9cC5pbkFycmF5KHAoYSkudmFsKCksYik+PTB9fSl9KTt2YXIgVj0vXig/OnRleHRhcmVhfGlucHV0fHNlbGVjdCkkL2ksVz0vXihbXlwuXSp8KSg/OlwuKC4rKXwpJC8sWD0vKD86Xnxccylob3ZlcihcLlxTK3wpXGIvLFk9L15rZXkvLFo9L14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLCQ9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLF89ZnVuY3Rpb24oYSl7cmV0dXJuIHAuZXZlbnQuc3BlY2lhbC5ob3Zlcj9hOmEucmVwbGFjZShYLCJtb3VzZWVudGVyJDEgbW91c2VsZWF2ZSQxIil9O3AuZXZlbnQ9e2FkZDpmdW5jdGlvbihhLGMsZCxlLGYpe3ZhciBnLGgsaSxqLGssbCxtLG4sbyxxLHI7aWYoYS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04fHwhY3x8IWR8fCEoZz1wLl9kYXRhKGEpKSlyZXR1cm47ZC5oYW5kbGVyJiYobz1kLGQ9by5oYW5kbGVyLGY9by5zZWxlY3RvciksZC5ndWlkfHwoZC5ndWlkPXAuZ3VpZCsrKSxpPWcuZXZlbnRzLGl8fChnLmV2ZW50cz1pPXt9KSxoPWcuaGFuZGxlLGh8fChnLmhhbmRsZT1oPWZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgcCE9InVuZGVmaW5lZCImJighYXx8cC5ldmVudC50cmlnZ2VyZWQhPT1hLnR5cGUpP3AuZXZlbnQuZGlzcGF0Y2guYXBwbHkoaC5lbGVtLGFyZ3VtZW50cyk6Yn0saC5lbGVtPWEpLGM9cC50cmltKF8oYykpLnNwbGl0KCIgIik7Zm9yKGo9MDtqPGMubGVuZ3RoO2orKyl7az1XLmV4ZWMoY1tqXSl8fFtdLGw9a1sxXSxtPShrWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCkscj1wLmV2ZW50LnNwZWNpYWxbbF18fHt9LGw9KGY/ci5kZWxlZ2F0ZVR5cGU6ci5iaW5kVHlwZSl8fGwscj1wLmV2ZW50LnNwZWNpYWxbbF18fHt9LG49cC5leHRlbmQoe3R5cGU6bCxvcmlnVHlwZTprWzFdLGRhdGE6ZSxoYW5kbGVyOmQsZ3VpZDpkLmd1aWQsc2VsZWN0b3I6ZixuZWVkc0NvbnRleHQ6ZiYmcC5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KGYpLG5hbWVzcGFjZTptLmpvaW4oIi4iKX0sbykscT1pW2xdO2lmKCFxKXtxPWlbbF09W10scS5kZWxlZ2F0ZUNvdW50PTA7aWYoIXIuc2V0dXB8fHIuc2V0dXAuY2FsbChhLGUsbSxoKT09PSExKWEuYWRkRXZlbnRMaXN0ZW5lcj9hLmFkZEV2ZW50TGlzdGVuZXIobCxoLCExKTphLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbiIrbCxoKX1yLmFkZCYmKHIuYWRkLmNhbGwoYSxuKSxuLmhhbmRsZXIuZ3VpZHx8KG4uaGFuZGxlci5ndWlkPWQuZ3VpZCkpLGY/cS5zcGxpY2UocS5kZWxlZ2F0ZUNvdW50KyssMCxuKTpxLnB1c2gobikscC5ldmVudC5nbG9iYWxbbF09ITB9YT1udWxsfSxnbG9iYWw6e30scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scSxyPXAuaGFzRGF0YShhKSYmcC5fZGF0YShhKTtpZighcnx8IShtPXIuZXZlbnRzKSlyZXR1cm47Yj1wLnRyaW0oXyhifHwiIikpLnNwbGl0KCIgIik7Zm9yKGY9MDtmPGIubGVuZ3RoO2YrKyl7Zz1XLmV4ZWMoYltmXSl8fFtdLGg9aT1nWzFdLGo9Z1syXTtpZighaCl7Zm9yKGggaW4gbSlwLmV2ZW50LnJlbW92ZShhLGgrYltmXSxjLGQsITApO2NvbnRpbnVlfW49cC5ldmVudC5zcGVjaWFsW2hdfHx7fSxoPShkP24uZGVsZWdhdGVUeXBlOm4uYmluZFR5cGUpfHxoLG89bVtoXXx8W10saz1vLmxlbmd0aCxqPWo/bmV3IFJlZ0V4cCgiKF58XFwuKSIrai5zcGxpdCgiLiIpLnNvcnQoKS5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsO2ZvcihsPTA7bDxvLmxlbmd0aDtsKyspcT1vW2xdLChlfHxpPT09cS5vcmlnVHlwZSkmJighY3x8Yy5ndWlkPT09cS5ndWlkKSYmKCFqfHxqLnRlc3QocS5uYW1lc3BhY2UpKSYmKCFkfHxkPT09cS5zZWxlY3Rvcnx8ZD09PSIqKiImJnEuc2VsZWN0b3IpJiYoby5zcGxpY2UobC0tLDEpLHEuc2VsZWN0b3ImJm8uZGVsZWdhdGVDb3VudC0tLG4ucmVtb3ZlJiZuLnJlbW92ZS5jYWxsKGEscSkpO28ubGVuZ3RoPT09MCYmayE9PW8ubGVuZ3RoJiYoKCFuLnRlYXJkb3dufHxuLnRlYXJkb3duLmNhbGwoYSxqLHIuaGFuZGxlKT09PSExKSYmcC5yZW1vdmVFdmVudChhLGgsci5oYW5kbGUpLGRlbGV0ZSBtW2hdKX1wLmlzRW1wdHlPYmplY3QobSkmJihkZWxldGUgci5oYW5kbGUscC5yZW1vdmVEYXRhKGEsImV2ZW50cyIsITApKX0sY3VzdG9tRXZlbnQ6e2dldERhdGE6ITAsc2V0RGF0YTohMCxjaGFuZ2VEYXRhOiEwfSx0cmlnZ2VyOmZ1bmN0aW9uKGMsZCxmLGcpe2lmKCFmfHxmLm5vZGVUeXBlIT09MyYmZi5ub2RlVHlwZSE9PTgpe3ZhciBoLGksaixrLGwsbSxuLG8scSxyLHM9Yy50eXBlfHxjLHQ9W107aWYoJC50ZXN0KHMrcC5ldmVudC50cmlnZ2VyZWQpKXJldHVybjtzLmluZGV4T2YoIiEiKT49MCYmKHM9cy5zbGljZSgwLC0xKSxpPSEwKSxzLmluZGV4T2YoIi4iKT49MCYmKHQ9cy5zcGxpdCgiLiIpLHM9dC5zaGlmdCgpLHQuc29ydCgpKTtpZigoIWZ8fHAuZXZlbnQuY3VzdG9tRXZlbnRbc10pJiYhcC5ldmVudC5nbG9iYWxbc10pcmV0dXJuO2M9dHlwZW9mIGM9PSJvYmplY3QiP2NbcC5leHBhbmRvXT9jOm5ldyBwLkV2ZW50KHMsYyk6bmV3IHAuRXZlbnQocyksYy50eXBlPXMsYy5pc1RyaWdnZXI9ITAsYy5leGNsdXNpdmU9aSxjLm5hbWVzcGFjZT10LmpvaW4oIi4iKSxjLm5hbWVzcGFjZV9yZT1jLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIit0LmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsbT1zLmluZGV4T2YoIjoiKTwwPyJvbiIrczoiIjtpZighZil7aD1wLmNhY2hlO2ZvcihqIGluIGgpaFtqXS5ldmVudHMmJmhbal0uZXZlbnRzW3NdJiZwLmV2ZW50LnRyaWdnZXIoYyxkLGhbal0uaGFuZGxlLmVsZW0sITApO3JldHVybn1jLnJlc3VsdD1iLGMudGFyZ2V0fHwoYy50YXJnZXQ9ZiksZD1kIT1udWxsP3AubWFrZUFycmF5KGQpOltdLGQudW5zaGlmdChjKSxuPXAuZXZlbnQuc3BlY2lhbFtzXXx8e307aWYobi50cmlnZ2VyJiZuLnRyaWdnZXIuYXBwbHkoZixkKT09PSExKXJldHVybjtxPVtbZixuLmJpbmRUeXBlfHxzXV07aWYoIWcmJiFuLm5vQnViYmxlJiYhcC5pc1dpbmRvdyhmKSl7cj1uLmRlbGVnYXRlVHlwZXx8cyxrPSQudGVzdChyK3MpP2Y6Zi5wYXJlbnROb2RlO2ZvcihsPWY7aztrPWsucGFyZW50Tm9kZSlxLnB1c2goW2sscl0pLGw9aztsPT09KGYub3duZXJEb2N1bWVudHx8ZSkmJnEucHVzaChbbC5kZWZhdWx0Vmlld3x8bC5wYXJlbnRXaW5kb3d8fGEscl0pfWZvcihqPTA7ajxxLmxlbmd0aCYmIWMuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtqKyspaz1xW2pdWzBdLGMudHlwZT1xW2pdWzFdLG89KHAuX2RhdGEoaywiZXZlbnRzIil8fHt9KVtjLnR5cGVdJiZwLl9kYXRhKGssImhhbmRsZSIpLG8mJm8uYXBwbHkoayxkKSxvPW0mJmtbbV0sbyYmcC5hY2NlcHREYXRhKGspJiZvLmFwcGx5JiZvLmFwcGx5KGssZCk9PT0hMSYmYy5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBjLnR5cGU9cywhZyYmIWMuaXNEZWZhdWx0UHJldmVudGVkKCkmJighbi5fZGVmYXVsdHx8bi5fZGVmYXVsdC5hcHBseShmLm93bmVyRG9jdW1lbnQsZCk9PT0hMSkmJihzIT09ImNsaWNrInx8IXAubm9kZU5hbWUoZiwiYSIpKSYmcC5hY2NlcHREYXRhKGYpJiZtJiZmW3NdJiYocyE9PSJmb2N1cyImJnMhPT0iYmx1ciJ8fGMudGFyZ2V0Lm9mZnNldFdpZHRoIT09MCkmJiFwLmlzV2luZG93KGYpJiYobD1mW21dLGwmJihmW21dPW51bGwpLHAuZXZlbnQudHJpZ2dlcmVkPXMsZltzXSgpLHAuZXZlbnQudHJpZ2dlcmVkPWIsbCYmKGZbbV09bCkpLGMucmVzdWx0fXJldHVybn0sZGlzcGF0Y2g6ZnVuY3Rpb24oYyl7Yz1wLmV2ZW50LmZpeChjfHxhLmV2ZW50KTt2YXIgZCxlLGYsZyxoLGksaixsLG0sbixvPShwLl9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbYy50eXBlXXx8W10scT1vLmRlbGVnYXRlQ291bnQscj1rLmNhbGwoYXJndW1lbnRzKSxzPSFjLmV4Y2x1c2l2ZSYmIWMubmFtZXNwYWNlLHQ9cC5ldmVudC5zcGVjaWFsW2MudHlwZV18fHt9LHU9W107clswXT1jLGMuZGVsZWdhdGVUYXJnZXQ9dGhpcztpZih0LnByZURpc3BhdGNoJiZ0LnByZURpc3BhdGNoLmNhbGwodGhpcyxjKT09PSExKXJldHVybjtpZihxJiYoIWMuYnV0dG9ufHxjLnR5cGUhPT0iY2xpY2siKSlmb3IoZj1jLnRhcmdldDtmIT10aGlzO2Y9Zi5wYXJlbnROb2RlfHx0aGlzKWlmKGYuZGlzYWJsZWQhPT0hMHx8Yy50eXBlIT09ImNsaWNrIil7aD17fSxqPVtdO2ZvcihkPTA7ZDxxO2QrKylsPW9bZF0sbT1sLnNlbGVjdG9yLGhbbV09PT1iJiYoaFttXT1sLm5lZWRzQ29udGV4dD9wKG0sdGhpcykuaW5kZXgoZik+PTA6cC5maW5kKG0sdGhpcyxudWxsLFtmXSkubGVuZ3RoKSxoW21dJiZqLnB1c2gobCk7ai5sZW5ndGgmJnUucHVzaCh7ZWxlbTpmLG1hdGNoZXM6an0pfW8ubGVuZ3RoPnEmJnUucHVzaCh7ZWxlbTp0aGlzLG1hdGNoZXM6by5zbGljZShxKX0pO2ZvcihkPTA7ZDx1Lmxlbmd0aCYmIWMuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtkKyspe2k9dVtkXSxjLmN1cnJlbnRUYXJnZXQ9aS5lbGVtO2ZvcihlPTA7ZTxpLm1hdGNoZXMubGVuZ3RoJiYhYy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpO2UrKyl7bD1pLm1hdGNoZXNbZV07aWYoc3x8IWMubmFtZXNwYWNlJiYhbC5uYW1lc3BhY2V8fGMubmFtZXNwYWNlX3JlJiZjLm5hbWVzcGFjZV9yZS50ZXN0KGwubmFtZXNwYWNlKSljLmRhdGE9bC5kYXRhLGMuaGFuZGxlT2JqPWwsZz0oKHAuZXZlbnQuc3BlY2lhbFtsLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8bC5oYW5kbGVyKS5hcHBseShpLmVsZW0sciksZyE9PWImJihjLnJlc3VsdD1nLGc9PT0hMSYmKGMucHJldmVudERlZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpKSl9fXJldHVybiB0LnBvc3REaXNwYXRjaCYmdC5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLGMpLGMucmVzdWx0fSxwcm9wczoiYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEud2hpY2g9PW51bGwmJihhLndoaWNoPWIuY2hhckNvZGUhPW51bGw/Yi5jaGFyQ29kZTpiLmtleUNvZGUpLGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGMpe3ZhciBkLGYsZyxoPWMuYnV0dG9uLGk9Yy5mcm9tRWxlbWVudDtyZXR1cm4gYS5wYWdlWD09bnVsbCYmYy5jbGllbnRYIT1udWxsJiYoZD1hLnRhcmdldC5vd25lckRvY3VtZW50fHxlLGY9ZC5kb2N1bWVudEVsZW1lbnQsZz1kLmJvZHksYS5wYWdlWD1jLmNsaWVudFgrKGYmJmYuc2Nyb2xsTGVmdHx8ZyYmZy5zY3JvbGxMZWZ0fHwwKS0oZiYmZi5jbGllbnRMZWZ0fHxnJiZnLmNsaWVudExlZnR8fDApLGEucGFnZVk9Yy5jbGllbnRZKyhmJiZmLnNjcm9sbFRvcHx8ZyYmZy5zY3JvbGxUb3B8fDApLShmJiZmLmNsaWVudFRvcHx8ZyYmZy5jbGllbnRUb3B8fDApKSwhYS5yZWxhdGVkVGFyZ2V0JiZpJiYoYS5yZWxhdGVkVGFyZ2V0PWk9PT1hLnRhcmdldD9jLnRvRWxlbWVudDppKSwhYS53aGljaCYmaCE9PWImJihhLndoaWNoPWgmMT8xOmgmMj8zOmgmND8yOjApLGF9fSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtwLmV4cGFuZG9dKXJldHVybiBhO3ZhciBiLGMsZD1hLGY9cC5ldmVudC5maXhIb29rc1thLnR5cGVdfHx7fSxnPWYucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoZi5wcm9wcyk6dGhpcy5wcm9wczthPXAuRXZlbnQoZCk7Zm9yKGI9Zy5sZW5ndGg7YjspYz1nWy0tYl0sYVtjXT1kW2NdO3JldHVybiBhLnRhcmdldHx8KGEudGFyZ2V0PWQuc3JjRWxlbWVudHx8ZSksYS50YXJnZXQubm9kZVR5cGU9PT0zJiYoYS50YXJnZXQ9YS50YXJnZXQucGFyZW50Tm9kZSksYS5tZXRhS2V5PSEhYS5tZXRhS2V5LGYuZmlsdGVyP2YuZmlsdGVyKGEsZCk6YX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOntkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOntkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0In0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihhLGIsYyl7cC5pc1dpbmRvdyh0aGlzKSYmKHRoaXMub25iZWZvcmV1bmxvYWQ9Yyl9LHRlYXJkb3duOmZ1bmN0aW9uKGEsYil7dGhpcy5vbmJlZm9yZXVubG9hZD09PWImJih0aGlzLm9uYmVmb3JldW5sb2FkPW51bGwpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXAuZXh0ZW5kKG5ldyBwLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7ZD9wLmV2ZW50LnRyaWdnZXIoZSxudWxsLGIpOnAuZXZlbnQuZGlzcGF0Y2guY2FsbChiLGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkmJmMucHJldmVudERlZmF1bHQoKX19LHAuZXZlbnQuaGFuZGxlPXAuZXZlbnQuZGlzcGF0Y2gscC5yZW1vdmVFdmVudD1lLnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD0ib24iK2I7YS5kZXRhY2hFdmVudCYmKHR5cGVvZiBhW2RdPT0idW5kZWZpbmVkIiYmKGFbZF09bnVsbCksYS5kZXRhY2hFdmVudChkLGMpKX0scC5FdmVudD1mdW5jdGlvbihhLGIpe2lmKHRoaXMgaW5zdGFuY2VvZiBwLkV2ZW50KWEmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhpcy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQcmV2ZW50ZWR8fGEucmV0dXJuVmFsdWU9PT0hMXx8YS5nZXRQcmV2ZW50RGVmYXVsdCYmYS5nZXRQcmV2ZW50RGVmYXVsdCgpP2JiOmJhKTp0aGlzLnR5cGU9YSxiJiZwLmV4dGVuZCh0aGlzLGIpLHRoaXMudGltZVN0YW1wPWEmJmEudGltZVN0YW1wfHxwLm5vdygpLHRoaXNbcC5leHBhbmRvXT0hMDtlbHNlIHJldHVybiBuZXcgcC5FdmVudChhLGIpfSxwLkV2ZW50LnByb3RvdHlwZT17cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1iYjt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7aWYoIWEpcmV0dXJuO2EucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmEucmV0dXJuVmFsdWU9ITF9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9YmI7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O2lmKCFhKXJldHVybjthLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKSxhLmNhbmNlbEJ1YmJsZT0hMH0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1iYix0aGlzLnN0b3BQcm9wYWdhdGlvbigpfSxpc0RlZmF1bHRQcmV2ZW50ZWQ6YmEsaXNQcm9wYWdhdGlvblN0b3BwZWQ6YmEsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6YmF9LHAuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGEsYil7cC5ldmVudC5zcGVjaWFsW2FdPXtkZWxlZ2F0ZVR5cGU6YixiaW5kVHlwZTpiLGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYyxkPXRoaXMsZT1hLnJlbGF0ZWRUYXJnZXQsZj1hLmhhbmRsZU9iaixnPWYuc2VsZWN0b3I7aWYoIWV8fGUhPT1kJiYhcC5jb250YWlucyhkLGUpKWEudHlwZT1mLm9yaWdUeXBlLGM9Zi5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhLnR5cGU9YjtyZXR1cm4gY319fSkscC5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXN8fChwLmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe2lmKHAubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO3AuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGM9YS50YXJnZXQsZD1wLm5vZGVOYW1lKGMsImlucHV0Iil8fHAubm9kZU5hbWUoYywiYnV0dG9uIik/Yy5mb3JtOmI7ZCYmIXAuX2RhdGEoZCwiX3N1Ym1pdF9hdHRhY2hlZCIpJiYocC5ldmVudC5hZGQoZCwic3VibWl0Ll9zdWJtaXQiLGZ1bmN0aW9uKGEpe2EuX3N1Ym1pdF9idWJibGU9ITB9KSxwLl9kYXRhKGQsIl9zdWJtaXRfYXR0YWNoZWQiLCEwKSl9KX0scG9zdERpc3BhdGNoOmZ1bmN0aW9uKGEpe2EuX3N1Ym1pdF9idWJibGUmJihkZWxldGUgYS5fc3VibWl0X2J1YmJsZSx0aGlzLnBhcmVudE5vZGUmJiFhLmlzVHJpZ2dlciYmcC5ldmVudC5zaW11bGF0ZSgic3VibWl0Iix0aGlzLnBhcmVudE5vZGUsYSwhMCkpfSx0ZWFyZG93bjpmdW5jdGlvbigpe2lmKHAubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO3AuZXZlbnQucmVtb3ZlKHRoaXMsIi5fc3VibWl0Iil9fSkscC5zdXBwb3J0LmNoYW5nZUJ1YmJsZXN8fChwLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe2lmKFYudGVzdCh0aGlzLm5vZGVOYW1lKSl7aWYodGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlvIilwLmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXthLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lPT09ImNoZWNrZWQiJiYodGhpcy5fanVzdF9jaGFuZ2VkPSEwKX0pLHAuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMuX2p1c3RfY2hhbmdlZCYmIWEuaXNUcmlnZ2VyJiYodGhpcy5fanVzdF9jaGFuZ2VkPSExKSxwLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsYSwhMCl9KTtyZXR1cm4hMX1wLmV2ZW50LmFkZCh0aGlzLCJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtWLnRlc3QoYi5ub2RlTmFtZSkmJiFwLl9kYXRhKGIsIl9jaGFuZ2VfYXR0YWNoZWQiKSYmKHAuZXZlbnQuYWRkKGIsImNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJiFhLmlzU2ltdWxhdGVkJiYhYS5pc1RyaWdnZXImJnAuZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcy5wYXJlbnROb2RlLGEsITApfSkscC5fZGF0YShiLCJfY2hhbmdlX2F0dGFjaGVkIiwhMCkpfSl9LGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtpZih0aGlzIT09Ynx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fGIudHlwZSE9PSJyYWRpbyImJmIudHlwZSE9PSJjaGVja2JveCIpcmV0dXJuIGEuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybiBwLmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpLCFWLnRlc3QodGhpcy5ub2RlTmFtZSl9fSkscC5zdXBwb3J0LmZvY3VzaW5CdWJibGVzfHxwLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGM9MCxkPWZ1bmN0aW9uKGEpe3AuZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxwLmV2ZW50LmZpeChhKSwhMCl9O3AuZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXtjKys9PT0wJiZlLmFkZEV2ZW50TGlzdGVuZXIoYSxkLCEwKX0sdGVhcmRvd246ZnVuY3Rpb24oKXstLWM9PT0wJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxkLCEwKX19fSkscC5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGEsYyxkLGUsZil7dmFyIGcsaDtpZih0eXBlb2YgYT09Im9iamVjdCIpe3R5cGVvZiBjIT0ic3RyaW5nIiYmKGQ9ZHx8YyxjPWIpO2ZvcihoIGluIGEpdGhpcy5vbihoLGMsZCxhW2hdLGYpO3JldHVybiB0aGlzfWQ9PW51bGwmJmU9PW51bGw/KGU9YyxkPWM9Yik6ZT09bnVsbCYmKHR5cGVvZiBjPT0ic3RyaW5nIj8oZT1kLGQ9Yik6KGU9ZCxkPWMsYz1iKSk7aWYoZT09PSExKWU9YmE7ZWxzZSBpZighZSlyZXR1cm4gdGhpcztyZXR1cm4gZj09PTEmJihnPWUsZT1mdW5jdGlvbihhKXtyZXR1cm4gcCgpLm9mZihhKSxnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZS5ndWlkPWcuZ3VpZHx8KGcuZ3VpZD1wLmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe3AuZXZlbnQuYWRkKHRoaXMsYSxlLGQsYyl9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZjtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZT1hLmhhbmRsZU9iaixwKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihlLm5hbWVzcGFjZT9lLm9yaWdUeXBlKyIuIitlLm5hbWVzcGFjZTplLm9yaWdUeXBlLGUuc2VsZWN0b3IsZS5oYW5kbGVyKSx0aGlzO2lmKHR5cGVvZiBhPT0ib2JqZWN0Iil7Zm9yKGYgaW4gYSl0aGlzLm9mZihmLGMsYVtmXSk7cmV0dXJuIHRoaXN9aWYoYz09PSExfHx0eXBlb2YgYz09ImZ1bmN0aW9uIilkPWMsYz1iO3JldHVybiBkPT09ITEmJihkPWJhKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtwLmV2ZW50LnJlbW92ZSh0aGlzLGEsZCxjKX0pfSxiaW5kOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5vbihhLG51bGwsYixjKX0sdW5iaW5kOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMub2ZmKGEsbnVsbCxiKX0sbGl2ZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHAodGhpcy5jb250ZXh0KS5vbihhLHRoaXMuc2VsZWN0b3IsYixjKSx0aGlzfSxkaWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gcCh0aGlzLmNvbnRleHQpLm9mZihhLHRoaXMuc2VsZWN0b3J8fCIqKiIsYiksdGhpc30sZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24oYixhLGMsZCl9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT90aGlzLm9mZihhLCIqKiIpOnRoaXMub2ZmKGIsYXx8IioqIixjKX0sdHJpZ2dlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtwLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGEsYil7aWYodGhpc1swXSlyZXR1cm4gcC5ldmVudC50cmlnZ2VyKGEsYix0aGlzWzBdLCEwKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3ZhciBiPWFyZ3VtZW50cyxjPWEuZ3VpZHx8cC5ndWlkKyssZD0wLGU9ZnVuY3Rpb24oYyl7dmFyIGU9KHAuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkKXx8MCklZDtyZXR1cm4gcC5fZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIithLmd1aWQsZSsxKSxjLnByZXZlbnREZWZhdWx0KCksYltlXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fCExfTtlLmd1aWQ9Yzt3aGlsZShkPGIubGVuZ3RoKWJbZCsrXS5ndWlkPWM7cmV0dXJuIHRoaXMuY2xpY2soZSl9LGhvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfX0pLHAuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe3AuZm5bYl09ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYz09bnVsbCYmKGM9YSxhPW51bGwpLGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKGIsbnVsbCxhLGMpOnRoaXMudHJpZ2dlcihiKX0sWS50ZXN0KGIpJiYocC5ldmVudC5maXhIb29rc1tiXT1wLmV2ZW50LmtleUhvb2tzKSxaLnRlc3QoYikmJihwLmV2ZW50LmZpeEhvb2tzW2JdPXAuZXZlbnQubW91c2VIb29rcyl9KSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGJjKGEsYixjLGQpe2M9Y3x8W10sYj1ifHxyO3ZhciBlLGYsaSxqLGs9Yi5ub2RlVHlwZTtpZighYXx8dHlwZW9mIGEhPSJzdHJpbmciKXJldHVybiBjO2lmKGshPT0xJiZrIT09OSlyZXR1cm5bXTtpPWcoYik7aWYoIWkmJiFkKWlmKGU9UC5leGVjKGEpKWlmKGo9ZVsxXSl7aWYoaz09PTkpe2Y9Yi5nZXRFbGVtZW50QnlJZChqKTtpZighZnx8IWYucGFyZW50Tm9kZSlyZXR1cm4gYztpZihmLmlkPT09ailyZXR1cm4gYy5wdXNoKGYpLGN9ZWxzZSBpZihiLm93bmVyRG9jdW1lbnQmJihmPWIub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChqKSkmJmgoYixmKSYmZi5pZD09PWopcmV0dXJuIGMucHVzaChmKSxjfWVsc2V7aWYoZVsyXSlyZXR1cm4gdy5hcHBseShjLHguY2FsbChiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpLDApKSxjO2lmKChqPWVbM10pJiZfJiZiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIHcuYXBwbHkoYyx4LmNhbGwoYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGopLDApKSxjfXJldHVybiBicChhLnJlcGxhY2UoTCwiJDEiKSxiLGMsZCxpKX1mdW5jdGlvbiBiZChhKXtyZXR1cm4gZnVuY3Rpb24oYil7dmFyIGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiBjPT09ImlucHV0IiYmYi50eXBlPT09YX19ZnVuY3Rpb24gYmUoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oYz09PSJpbnB1dCJ8fGM9PT0iYnV0dG9uIikmJmIudHlwZT09PWF9fWZ1bmN0aW9uIGJmKGEpe3JldHVybiB6KGZ1bmN0aW9uKGIpe3JldHVybiBiPStiLHooZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEoW10sYy5sZW5ndGgsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pY1tlPWZbZ11dJiYoY1tlXT0hKGRbZV09Y1tlXSkpfSl9KX1mdW5jdGlvbiBiZyhhLGIsYyl7aWYoYT09PWIpcmV0dXJuIGM7dmFyIGQ9YS5uZXh0U2libGluZzt3aGlsZShkKXtpZihkPT09YilyZXR1cm4tMTtkPWQubmV4dFNpYmxpbmd9cmV0dXJuIDF9ZnVuY3Rpb24gYmgoYSxiKXt2YXIgYyxkLGYsZyxoLGksaixrPUNbb11bYV07aWYoaylyZXR1cm4gYj8wOmsuc2xpY2UoMCk7aD1hLGk9W10saj1lLnByZUZpbHRlcjt3aGlsZShoKXtpZighY3x8KGQ9TS5leGVjKGgpKSlkJiYoaD1oLnNsaWNlKGRbMF0ubGVuZ3RoKSksaS5wdXNoKGY9W10pO2M9ITE7aWYoZD1OLmV4ZWMoaCkpZi5wdXNoKGM9bmV3IHEoZC5zaGlmdCgpKSksaD1oLnNsaWNlKGMubGVuZ3RoKSxjLnR5cGU9ZFswXS5yZXBsYWNlKEwsIiAiKTtmb3IoZyBpbiBlLmZpbHRlcikoZD1XW2ddLmV4ZWMoaCkpJiYoIWpbZ118fChkPWpbZ10oZCxyLCEwKSkpJiYoZi5wdXNoKGM9bmV3IHEoZC5zaGlmdCgpKSksaD1oLnNsaWNlKGMubGVuZ3RoKSxjLnR5cGU9ZyxjLm1hdGNoZXM9ZCk7aWYoIWMpYnJlYWt9cmV0dXJuIGI/aC5sZW5ndGg6aD9iYy5lcnJvcihhKTpDKGEsaSkuc2xpY2UoMCl9ZnVuY3Rpb24gYmkoYSxiLGQpe3ZhciBlPWIuZGlyLGY9ZCYmYi5kaXI9PT0icGFyZW50Tm9kZSIsZz11Kys7cmV0dXJuIGIuZmlyc3Q/ZnVuY3Rpb24oYixjLGQpe3doaWxlKGI9YltlXSlpZihmfHxiLm5vZGVUeXBlPT09MSlyZXR1cm4gYShiLGMsZCl9OmZ1bmN0aW9uKGIsZCxoKXtpZighaCl7dmFyIGksaj10KyIgIitnKyIgIixrPWorYzt3aGlsZShiPWJbZV0paWYoZnx8Yi5ub2RlVHlwZT09PTEpe2lmKChpPWJbb10pPT09aylyZXR1cm4gYi5zaXpzZXQ7aWYodHlwZW9mIGk9PSJzdHJpbmciJiZpLmluZGV4T2Yoaik9PT0wKXtpZihiLnNpenNldClyZXR1cm4gYn1lbHNle2Jbb109aztpZihhKGIsZCxoKSlyZXR1cm4gYi5zaXpzZXQ9ITAsYjtiLnNpenNldD0hMX19fWVsc2Ugd2hpbGUoYj1iW2VdKWlmKGZ8fGIubm9kZVR5cGU9PT0xKWlmKGEoYixkLGgpKXJldHVybiBifX1mdW5jdGlvbiBiaihhKXtyZXR1cm4gYS5sZW5ndGg+MT9mdW5jdGlvbihiLGMsZCl7dmFyIGU9YS5sZW5ndGg7d2hpbGUoZS0tKWlmKCFhW2VdKGIsYyxkKSlyZXR1cm4hMTtyZXR1cm4hMH06YVswXX1mdW5jdGlvbiBiayhhLGIsYyxkLGUpe3ZhciBmLGc9W10saD0wLGk9YS5sZW5ndGgsaj1iIT1udWxsO2Zvcig7aDxpO2grKylpZihmPWFbaF0paWYoIWN8fGMoZixkLGUpKWcucHVzaChmKSxqJiZiLnB1c2goaCk7cmV0dXJuIGd9ZnVuY3Rpb24gYmwoYSxiLGMsZCxlLGYpe3JldHVybiBkJiYhZFtvXSYmKGQ9YmwoZCkpLGUmJiFlW29dJiYoZT1ibChlLGYpKSx6KGZ1bmN0aW9uKGYsZyxoLGkpe2lmKGYmJmUpcmV0dXJuO3ZhciBqLGssbCxtPVtdLG49W10sbz1nLmxlbmd0aCxwPWZ8fGJvKGJ8fCIqIixoLm5vZGVUeXBlP1toXTpoLFtdLGYpLHE9YSYmKGZ8fCFiKT9iayhwLG0sYSxoLGkpOnAscj1jP2V8fChmP2E6b3x8ZCk/W106ZzpxO2MmJmMocSxyLGgsaSk7aWYoZCl7bD1iayhyLG4pLGQobCxbXSxoLGkpLGo9bC5sZW5ndGg7d2hpbGUoai0tKWlmKGs9bFtqXSlyW25bal1dPSEocVtuW2pdXT1rKX1pZihmKXtqPWEmJnIubGVuZ3RoO3doaWxlKGotLSlpZihrPXJbal0pZlttW2pdXT0hKGdbbVtqXV09ayl9ZWxzZSByPWJrKHI9PT1nP3Iuc3BsaWNlKG8sci5sZW5ndGgpOnIpLGU/ZShudWxsLGcscixpKTp3LmFwcGx5KGcscil9KX1mdW5jdGlvbiBibShhKXt2YXIgYixjLGQsZj1hLmxlbmd0aCxnPWUucmVsYXRpdmVbYVswXS50eXBlXSxoPWd8fGUucmVsYXRpdmVbIiAiXSxpPWc/MTowLGo9YmkoZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1ifSxoLCEwKSxrPWJpKGZ1bmN0aW9uKGEpe3JldHVybiB5LmNhbGwoYixhKT4tMX0saCwhMCksbT1bZnVuY3Rpb24oYSxjLGQpe3JldHVybiFnJiYoZHx8YyE9PWwpfHwoKGI9Yykubm9kZVR5cGU/aihhLGMsZCk6ayhhLGMsZCkpfV07Zm9yKDtpPGY7aSsrKWlmKGM9ZS5yZWxhdGl2ZVthW2ldLnR5cGVdKW09W2JpKGJqKG0pLGMpXTtlbHNle2M9ZS5maWx0ZXJbYVtpXS50eXBlXS5hcHBseShudWxsLGFbaV0ubWF0Y2hlcyk7aWYoY1tvXSl7ZD0rK2k7Zm9yKDtkPGY7ZCsrKWlmKGUucmVsYXRpdmVbYVtkXS50eXBlXSlicmVhaztyZXR1cm4gYmwoaT4xJiZiaihtKSxpPjEmJmEuc2xpY2UoMCxpLTEpLmpvaW4oIiIpLnJlcGxhY2UoTCwiJDEiKSxjLGk8ZCYmYm0oYS5zbGljZShpLGQpKSxkPGYmJmJtKGE9YS5zbGljZShkKSksZDxmJiZhLmpvaW4oIiIpKX1tLnB1c2goYyl9cmV0dXJuIGJqKG0pfWZ1bmN0aW9uIGJuKGEsYil7dmFyIGQ9Yi5sZW5ndGg+MCxmPWEubGVuZ3RoPjAsZz1mdW5jdGlvbihoLGksaixrLG0pe3ZhciBuLG8scCxxPVtdLHM9MCx1PSIwIix4PWgmJltdLHk9bSE9bnVsbCx6PWwsQT1ofHxmJiZlLmZpbmQuVEFHKCIqIixtJiZpLnBhcmVudE5vZGV8fGkpLEI9dCs9ej09bnVsbD8xOk1hdGguRTt5JiYobD1pIT09ciYmaSxjPWcuZWwpO2Zvcig7KG49QVt1XSkhPW51bGw7dSsrKXtpZihmJiZuKXtmb3Iobz0wO3A9YVtvXTtvKyspaWYocChuLGksaikpe2sucHVzaChuKTticmVha315JiYodD1CLGM9KytnLmVsKX1kJiYoKG49IXAmJm4pJiZzLS0saCYmeC5wdXNoKG4pKX1zKz11O2lmKGQmJnUhPT1zKXtmb3Iobz0wO3A9YltvXTtvKyspcCh4LHEsaSxqKTtpZihoKXtpZihzPjApd2hpbGUodS0tKSF4W3VdJiYhcVt1XSYmKHFbdV09di5jYWxsKGspKTtxPWJrKHEpfXcuYXBwbHkoayxxKSx5JiYhaCYmcS5sZW5ndGg+MCYmcytiLmxlbmd0aD4xJiZiYy51bmlxdWVTb3J0KGspfXJldHVybiB5JiYodD1CLGw9eikseH07cmV0dXJuIGcuZWw9MCxkP3ooZyk6Z31mdW5jdGlvbiBibyhhLGIsYyxkKXt2YXIgZT0wLGY9Yi5sZW5ndGg7Zm9yKDtlPGY7ZSsrKWJjKGEsYltlXSxjLGQpO3JldHVybiBjfWZ1bmN0aW9uIGJwKGEsYixjLGQsZil7dmFyIGcsaCxqLGssbCxtPWJoKGEpLG49bS5sZW5ndGg7aWYoIWQmJm0ubGVuZ3RoPT09MSl7aD1tWzBdPW1bMF0uc2xpY2UoMCk7aWYoaC5sZW5ndGg+MiYmKGo9aFswXSkudHlwZT09PSJJRCImJmIubm9kZVR5cGU9PT05JiYhZiYmZS5yZWxhdGl2ZVtoWzFdLnR5cGVdKXtiPWUuZmluZC5JRChqLm1hdGNoZXNbMF0ucmVwbGFjZShWLCIiKSxiLGYpWzBdO2lmKCFiKXJldHVybiBjO2E9YS5zbGljZShoLnNoaWZ0KCkubGVuZ3RoKX1mb3IoZz1XLlBPUy50ZXN0KGEpPy0xOmgubGVuZ3RoLTE7Zz49MDtnLS0pe2o9aFtnXTtpZihlLnJlbGF0aXZlW2s9ai50eXBlXSlicmVhaztpZihsPWUuZmluZFtrXSlpZihkPWwoai5tYXRjaGVzWzBdLnJlcGxhY2UoViwiIiksUi50ZXN0KGhbMF0udHlwZSkmJmIucGFyZW50Tm9kZXx8YixmKSl7aC5zcGxpY2UoZywxKSxhPWQubGVuZ3RoJiZoLmpvaW4oIiIpO2lmKCFhKXJldHVybiB3LmFwcGx5KGMseC5jYWxsKGQsMCkpLGM7YnJlYWt9fX1yZXR1cm4gaShhLG0pKGQsYixmLGMsUi50ZXN0KGEpKSxjfWZ1bmN0aW9uIGJxKCl7fXZhciBjLGQsZSxmLGcsaCxpLGosayxsLG09ITAsbj0idW5kZWZpbmVkIixvPSgic2l6Y2FjaGUiK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoIi4iLCIiKSxxPVN0cmluZyxyPWEuZG9jdW1lbnQscz1yLmRvY3VtZW50RWxlbWVudCx0PTAsdT0wLHY9W10ucG9wLHc9W10ucHVzaCx4PVtdLnNsaWNlLHk9W10uaW5kZXhPZnx8ZnVuY3Rpb24oYSl7dmFyIGI9MCxjPXRoaXMubGVuZ3RoO2Zvcig7YjxjO2IrKylpZih0aGlzW2JdPT09YSlyZXR1cm4gYjtyZXR1cm4tMX0sej1mdW5jdGlvbihhLGIpe3JldHVybiBhW29dPWI9PW51bGx8fGIsYX0sQT1mdW5jdGlvbigpe3ZhciBhPXt9LGI9W107cmV0dXJuIHooZnVuY3Rpb24oYyxkKXtyZXR1cm4gYi5wdXNoKGMpPmUuY2FjaGVMZW5ndGgmJmRlbGV0ZSBhW2Iuc2hpZnQoKV0sYVtjXT1kfSxhKX0sQj1BKCksQz1BKCksRD1BKCksRT0iW1xceDIwXFx0XFxyXFxuXFxmXSIsRj0iKD86XFxcXC58Wy1cXHddfFteXFx4MDAtXFx4YTBdKSsiLEc9Ri5yZXBsYWNlKCJ3IiwidyMiKSxIPSIoWypeJHwhfl0/PSkiLEk9IlxcWyIrRSsiKigiK0YrIikiK0UrIiooPzoiK0grRSsiKig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIrRysiKXwpfCkiK0UrIipcXF0iLEo9IjooIitGKyIpKD86XFwoKD86KFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcMnwoW14oKVtcXF1dKnwoPzooPzoiK0krIil8W146XXxcXFxcLikqfC4qKSlcXCl8KSIsSz0iOihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK0UrIiooKD86LVxcZCk/XFxkKikiK0UrIipcXCl8KSg/PVteLV18JCkiLEw9bmV3IFJlZ0V4cCgiXiIrRSsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitFKyIrJCIsImciKSxNPW5ldyBSZWdFeHAoIl4iK0UrIiosIitFKyIqIiksTj1uZXcgUmVnRXhwKCJeIitFKyIqKFtcXHgyMFxcdFxcclxcblxcZj4rfl0pIitFKyIqIiksTz1uZXcgUmVnRXhwKEopLFA9L14oPzojKFtcd1wtXSspfChcdyspfFwuKFtcd1wtXSspKSQvLFE9L146bm90LyxSPS9bXHgyMFx0XHJcblxmXSpbK35dLyxTPS86bm90XCgkLyxUPS9oXGQvaSxVPS9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2ksVj0vXFwoPyFcXCkvZyxXPXtJRDpuZXcgUmVnRXhwKCJeIygiK0YrIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrRisiKSIpLE5BTUU6bmV3IFJlZ0V4cCgiXlxcW25hbWU9WydcIl0/KCIrRisiKVsnXCJdP1xcXSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrRi5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrSSksUFNFVURPOm5ldyBSZWdFeHAoIl4iK0opLFBPUzpuZXcgUmVnRXhwKEssImkiKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fG50aHxmaXJzdHxsYXN0KS1jaGlsZCg/OlxcKCIrRSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrRSsiKig/OihbKy1dfCkiK0UrIiooXFxkKyl8KSkiK0UrIipcXCl8KSIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrRSsiKls+K35dfCIrSywiaSIpfSxYPWZ1bmN0aW9uKGEpe3ZhciBiPXIuY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiBhKGIpfWNhdGNoKGMpe3JldHVybiExfWZpbmFsbHl7Yj1udWxsfX0sWT1YKGZ1bmN0aW9uKGEpe3JldHVybiBhLmFwcGVuZENoaWxkKHIuY3JlYXRlQ29tbWVudCgiIikpLCFhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksWj1YKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsYS5maXJzdENoaWxkJiZ0eXBlb2YgYS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSE9PW4mJmEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIjIn0pLCQ9WChmdW5jdGlvbihhKXthLmlubmVySFRNTD0iPHNlbGVjdD48L3NlbGVjdD4iO3ZhciBiPXR5cGVvZiBhLmxhc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIm11bHRpcGxlIik7cmV0dXJuIGIhPT0iYm9vbGVhbiImJmIhPT0ic3RyaW5nIn0pLF89WChmdW5jdGlvbihhKXtyZXR1cm4gYS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J2hpZGRlbiBlJz48L2Rpdj48ZGl2IGNsYXNzPSdoaWRkZW4nPjwvZGl2PiIsIWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZXx8IWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aD8hMTooYS5sYXN0Q2hpbGQuY2xhc3NOYW1lPSJlIixhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGg9PT0yKX0pLGJhPVgoZnVuY3Rpb24oYSl7YS5pZD1vKzAsYS5pbm5lckhUTUw9IjxhIG5hbWU9JyIrbysiJz48L2E+PGRpdiBuYW1lPSciK28rIic+PC9kaXY+IixzLmluc2VydEJlZm9yZShhLHMuZmlyc3RDaGlsZCk7dmFyIGI9ci5nZXRFbGVtZW50c0J5TmFtZSYmci5nZXRFbGVtZW50c0J5TmFtZShvKS5sZW5ndGg9PT0yK3IuZ2V0RWxlbWVudHNCeU5hbWUobyswKS5sZW5ndGg7cmV0dXJuIGQ9IXIuZ2V0RWxlbWVudEJ5SWQobykscy5yZW1vdmVDaGlsZChhKSxifSk7dHJ5e3guY2FsbChzLmNoaWxkTm9kZXMsMClbMF0ubm9kZVR5cGV9Y2F0Y2goYmIpe3g9ZnVuY3Rpb24oYSl7dmFyIGIsYz1bXTtmb3IoO2I9dGhpc1thXTthKyspYy5wdXNoKGIpO3JldHVybiBjfX1iYy5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJjKGEsbnVsbCxudWxsLGIpfSxiYy5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYmMoYixudWxsLG51bGwsW2FdKS5sZW5ndGg+MH0sZj1iYy5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9IiIsZD0wLGU9YS5ub2RlVHlwZTtpZihlKXtpZihlPT09MXx8ZT09PTl8fGU9PT0xMSl7aWYodHlwZW9mIGEudGV4dENvbnRlbnQ9PSJzdHJpbmciKXJldHVybiBhLnRleHRDb250ZW50O2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyljKz1mKGEpfWVsc2UgaWYoZT09PTN8fGU9PT00KXJldHVybiBhLm5vZGVWYWx1ZX1lbHNlIGZvcig7Yj1hW2RdO2QrKyljKz1mKGIpO3JldHVybiBjfSxnPWJjLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJihhLm93bmVyRG9jdW1lbnR8fGEpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj9iLm5vZGVOYW1lIT09IkhUTUwiOiExfSxoPWJjLmNvbnRhaW5zPXMuY29udGFpbnM/ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLm5vZGVUeXBlPT09OT9hLmRvY3VtZW50RWxlbWVudDphLGQ9YiYmYi5wYXJlbnROb2RlO3JldHVybiBhPT09ZHx8ISEoZCYmZC5ub2RlVHlwZT09PTEmJmMuY29udGFpbnMmJmMuY29udGFpbnMoZCkpfTpzLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGEsYil7cmV0dXJuIGImJiEhKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmMTYpfTpmdW5jdGlvbihhLGIpe3doaWxlKGI9Yi5wYXJlbnROb2RlKWlmKGI9PT1hKXJldHVybiEwO3JldHVybiExfSxiYy5hdHRyPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1nKGEpO3JldHVybiBkfHwoYj1iLnRvTG93ZXJDYXNlKCkpLChjPWUuYXR0ckhhbmRsZVtiXSk/YyhhKTpkfHwkP2EuZ2V0QXR0cmlidXRlKGIpOihjPWEuZ2V0QXR0cmlidXRlTm9kZShiKSxjP3R5cGVvZiBhW2JdPT0iYm9vbGVhbiI/YVtiXT9iOm51bGw6Yy5zcGVjaWZpZWQ/Yy52YWx1ZTpudWxsOm51bGwpfSxlPWJjLnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOnosbWF0Y2g6VyxhdHRySGFuZGxlOlo/e306e2hyZWY6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJocmVmIiwyKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoInR5cGUiKX19LGZpbmQ6e0lEOmQ/ZnVuY3Rpb24oYSxiLGMpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRCeUlkIT09biYmIWMpe3ZhciBkPWIuZ2V0RWxlbWVudEJ5SWQoYSk7cmV0dXJuIGQmJmQucGFyZW50Tm9kZT9bZF06W119fTpmdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGMuZ2V0RWxlbWVudEJ5SWQhPT1uJiYhZCl7dmFyIGU9Yy5nZXRFbGVtZW50QnlJZChhKTtyZXR1cm4gZT9lLmlkPT09YXx8dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSE9PW4mJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS52YWx1ZT09PWE/W2VdOmI6W119fSxUQUc6WT9mdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09bilyZXR1cm4gYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKX06ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO2lmKGE9PT0iKiIpe3ZhciBkLGU9W10sZj0wO2Zvcig7ZD1jW2ZdO2YrKylkLm5vZGVUeXBlPT09MSYmZS5wdXNoKGQpO3JldHVybiBlfXJldHVybiBjfSxOQU1FOmJhJiZmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlOYW1lIT09bilyZXR1cm4gYi5nZXRFbGVtZW50c0J5TmFtZShuYW1lKX0sQ0xBU1M6XyYmZnVuY3Rpb24oYSxiLGMpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT1uJiYhYylyZXR1cm4gYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpfX0scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS5yZXBsYWNlKFYsIiIpLGFbM109KGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKFYsIiIpLGFbMl09PT0ifj0iJiYoYVszXT0iICIrYVszXSsiICIpLGEuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS50b0xvd2VyQ2FzZSgpLGFbMV09PT0ibnRoIj8oYVsyXXx8YmMuZXJyb3IoYVswXSksYVszXT0rKGFbM10/YVs0XSsoYVs1XXx8MSk6MiooYVsyXT09PSJldmVuInx8YVsyXT09PSJvZGQiKSksYVs0XT0rKGFbNl0rYVs3XXx8YVsyXT09PSJvZGQiKSk6YVsyXSYmYmMuZXJyb3IoYVswXSksYX0sUFNFVURPOmZ1bmN0aW9uKGEpe3ZhciBiLGM7aWYoVy5DSElMRC50ZXN0KGFbMF0pKXJldHVybiBudWxsO2lmKGFbM10pYVsyXT1hWzNdO2Vsc2UgaWYoYj1hWzRdKU8udGVzdChiKSYmKGM9YmgoYiwhMCkpJiYoYz1iLmluZGV4T2YoIikiLGIubGVuZ3RoLWMpLWIubGVuZ3RoKSYmKGI9Yi5zbGljZSgwLGMpLGFbMF09YVswXS5zbGljZSgwLGMpKSxhWzJdPWI7cmV0dXJuIGEuc2xpY2UoMCwzKX19LGZpbHRlcjp7SUQ6ZD9mdW5jdGlvbihhKXtyZXR1cm4gYT1hLnJlcGxhY2UoViwiIiksZnVuY3Rpb24oYil7cmV0dXJuIGIuZ2V0QXR0cmlidXRlKCJpZCIpPT09YX19OmZ1bmN0aW9uKGEpe3JldHVybiBhPWEucmVwbGFjZShWLCIiKSxmdW5jdGlvbihiKXt2YXIgYz10eXBlb2YgYi5nZXRBdHRyaWJ1dGVOb2RlIT09biYmYi5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBjJiZjLnZhbHVlPT09YX19LFRBRzpmdW5jdGlvbihhKXtyZXR1cm4gYT09PSIqIj9mdW5jdGlvbigpe3JldHVybiEwfTooYT1hLnJlcGxhY2UoViwiIikudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihiKXtyZXR1cm4gYi5ub2RlTmFtZSYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09YX0pfSxDTEFTUzpmdW5jdGlvbihhKXt2YXIgYj1CW29dW2FdO3JldHVybiBifHwoYj1CKGEsbmV3IFJlZ0V4cCgiKF58IitFKyIpIithKyIoIitFKyJ8JCkiKSkpLGZ1bmN0aW9uKGEpe3JldHVybiBiLnRlc3QoYS5jbGFzc05hbWV8fHR5cGVvZiBhLmdldEF0dHJpYnV0ZSE9PW4mJmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9fSxBVFRSOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZCxlKXt2YXIgZj1iYy5hdHRyKGQsYSk7cmV0dXJuIGY9PW51bGw/Yj09PSIhPSI6Yj8oZis9IiIsYj09PSI9Ij9mPT09YzpiPT09IiE9Ij9mIT09YzpiPT09Il49Ij9jJiZmLmluZGV4T2YoYyk9PT0wOmI9PT0iKj0iP2MmJmYuaW5kZXhPZihjKT4tMTpiPT09IiQ9Ij9jJiZmLnN1YnN0cihmLmxlbmd0aC1jLmxlbmd0aCk9PT1jOmI9PT0ifj0iPygiICIrZisiICIpLmluZGV4T2YoYyk+LTE6Yj09PSJ8PSI/Zj09PWN8fGYuc3Vic3RyKDAsYy5sZW5ndGgrMSk9PT1jKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYT09PSJudGgiP2Z1bmN0aW9uKGEpe3ZhciBiLGUsZj1hLnBhcmVudE5vZGU7aWYoYz09PTEmJmQ9PT0wKXJldHVybiEwO2lmKGYpe2U9MDtmb3IoYj1mLmZpcnN0Q2hpbGQ7YjtiPWIubmV4dFNpYmxpbmcpaWYoYi5ub2RlVHlwZT09PTEpe2UrKztpZihhPT09YilicmVha319cmV0dXJuIGUtPWQsZT09PWN8fGUlYz09PTAmJmUvYz49MH06ZnVuY3Rpb24oYil7dmFyIGM9Yjtzd2l0Y2goYSl7Y2FzZSJvbmx5IjpjYXNlImZpcnN0Ijp3aGlsZShjPWMucHJldmlvdXNTaWJsaW5nKWlmKGMubm9kZVR5cGU9PT0xKXJldHVybiExO2lmKGE9PT0iZmlyc3QiKXJldHVybiEwO2M9YjtjYXNlImxhc3QiOndoaWxlKGM9Yy5uZXh0U2libGluZylpZihjLm5vZGVUeXBlPT09MSlyZXR1cm4hMTtyZXR1cm4hMH19fSxQU0VVRE86ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPWUucHNldWRvc1thXXx8ZS5zZXRGaWx0ZXJzW2EudG9Mb3dlckNhc2UoKV18fGJjLmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrYSk7cmV0dXJuIGRbb10/ZChiKTpkLmxlbmd0aD4xPyhjPVthLGEsIiIsYl0sZS5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGEudG9Mb3dlckNhc2UoKSk/eihmdW5jdGlvbihhLGMpe3ZhciBlLGY9ZChhLGIpLGc9Zi5sZW5ndGg7d2hpbGUoZy0tKWU9eS5jYWxsKGEsZltnXSksYVtlXT0hKGNbZV09ZltnXSl9KTpmdW5jdGlvbihhKXtyZXR1cm4gZChhLDAsYyl9KTpkfX0scHNldWRvczp7bm90OnooZnVuY3Rpb24oYSl7dmFyIGI9W10sYz1bXSxkPWkoYS5yZXBsYWNlKEwsIiQxIikpO3JldHVybiBkW29dP3ooZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGYsZz1kKGEsbnVsbCxlLFtdKSxoPWEubGVuZ3RoO3doaWxlKGgtLSlpZihmPWdbaF0pYVtoXT0hKGJbaF09Zil9KTpmdW5jdGlvbihhLGUsZil7cmV0dXJuIGJbMF09YSxkKGIsbnVsbCxmLGMpLCFjLnBvcCgpfX0pLGhhczp6KGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gYmMoYSxiKS5sZW5ndGg+MH19KSxjb250YWluczp6KGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4oYi50ZXh0Q29udGVudHx8Yi5pbm5lclRleHR8fGYoYikpLmluZGV4T2YoYSk+LTF9fSksZW5hYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSExfSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gYj09PSJpbnB1dCImJiEhYS5jaGVja2VkfHxiPT09Im9wdGlvbiImJiEhYS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsYS5zZWxlY3RlZD09PSEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIWUucHNldWRvcy5lbXB0eShhKX0sZW1wdHk6ZnVuY3Rpb24oYSl7dmFyIGI7YT1hLmZpcnN0Q2hpbGQ7d2hpbGUoYSl7aWYoYS5ub2RlTmFtZT4iQCJ8fChiPWEubm9kZVR5cGUpPT09M3x8Yj09PTQpcmV0dXJuITE7YT1hLm5leHRTaWJsaW5nfXJldHVybiEwfSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIFQudGVzdChhLm5vZGVOYW1lKX0sdGV4dDpmdW5jdGlvbihhKXt2YXIgYixjO3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYoYj1hLnR5cGUpPT09InRleHQiJiYoKGM9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSk9PW51bGx8fGMudG9Mb3dlckNhc2UoKT09PWIpfSxyYWRpbzpiZCgicmFkaW8iKSxjaGVja2JveDpiZCgiY2hlY2tib3giKSxmaWxlOmJkKCJmaWxlIikscGFzc3dvcmQ6YmQoInBhc3N3b3JkIiksaW1hZ2U6YmQoImltYWdlIiksc3VibWl0OmJlKCJzdWJtaXQiKSxyZXNldDpiZSgicmVzZXQiKSxidXR0b246ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiBiPT09ImlucHV0IiYmYS50eXBlPT09ImJ1dHRvbiJ8fGI9PT0iYnV0dG9uIn0saW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFUudGVzdChhLm5vZGVOYW1lKX0sZm9jdXM6ZnVuY3Rpb24oYSl7dmFyIGI9YS5vd25lckRvY3VtZW50O3JldHVybiBhPT09Yi5hY3RpdmVFbGVtZW50JiYoIWIuaGFzRm9jdXN8fGIuaGFzRm9jdXMoKSkmJighIWEudHlwZXx8ISFhLmhyZWYpfSxhY3RpdmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1hLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudH0sZmlyc3Q6YmYoZnVuY3Rpb24oYSxiLGMpe3JldHVyblswXX0pLGxhc3Q6YmYoZnVuY3Rpb24oYSxiLGMpe3JldHVybltiLTFdfSksZXE6YmYoZnVuY3Rpb24oYSxiLGMpe3JldHVybltjPDA/YytiOmNdfSksZXZlbjpiZihmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPTA7ZDxiO2QrPTIpYS5wdXNoKGQpO3JldHVybiBhfSksb2RkOmJmKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MTtkPGI7ZCs9MilhLnB1c2goZCk7cmV0dXJuIGF9KSxsdDpiZihmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPWM8MD9jK2I6YzstLWQ+PTA7KWEucHVzaChkKTtyZXR1cm4gYX0pLGd0OmJmKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9YzwwP2MrYjpjOysrZDxiOylhLnB1c2goZCk7cmV0dXJuIGF9KX19LGo9cy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihhLGIpe3JldHVybiBhPT09Yj8oaz0hMCwwKTooIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb258fCFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2EuY29tcGFyZURvY3VtZW50UG9zaXRpb246YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSY0KT8tMToxfTpmdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVybiBrPSEwLDA7aWYoYS5zb3VyY2VJbmRleCYmYi5zb3VyY2VJbmRleClyZXR1cm4gYS5zb3VyY2VJbmRleC1iLnNvdXJjZUluZGV4O3ZhciBjLGQsZT1bXSxmPVtdLGc9YS5wYXJlbnROb2RlLGg9Yi5wYXJlbnROb2RlLGk9ZztpZihnPT09aClyZXR1cm4gYmcoYSxiKTtpZighZylyZXR1cm4tMTtpZighaClyZXR1cm4gMTt3aGlsZShpKWUudW5zaGlmdChpKSxpPWkucGFyZW50Tm9kZTtpPWg7d2hpbGUoaSlmLnVuc2hpZnQoaSksaT1pLnBhcmVudE5vZGU7Yz1lLmxlbmd0aCxkPWYubGVuZ3RoO2Zvcih2YXIgaj0wO2o8YyYmajxkO2orKylpZihlW2pdIT09ZltqXSlyZXR1cm4gYmcoZVtqXSxmW2pdKTtyZXR1cm4gaj09PWM/YmcoYSxmW2pdLC0xKTpiZyhlW2pdLGIsMSl9LFswLDBdLnNvcnQoaiksbT0hayxiYy51bmlxdWVTb3J0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9MTtrPW0sYS5zb3J0KGopO2lmKGspZm9yKDtiPWFbY107YysrKWI9PT1hW2MtMV0mJmEuc3BsaWNlKGMtLSwxKTtyZXR1cm4gYX0sYmMuZXJyb3I9ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2EpfSxpPWJjLmNvbXBpbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9W10sZj1EW29dW2FdO2lmKCFmKXtifHwoYj1iaChhKSksYz1iLmxlbmd0aDt3aGlsZShjLS0pZj1ibShiW2NdKSxmW29dP2QucHVzaChmKTplLnB1c2goZik7Zj1EKGEsYm4oZSxkKSl9cmV0dXJuIGZ9LHIucXVlcnlTZWxlY3RvckFsbCYmZnVuY3Rpb24oKXt2YXIgYSxiPWJwLGM9Lyd8XFwvZyxkPS9cPVtceDIwXHRcclxuXGZdKihbXiciXF1dKilbXHgyMFx0XHJcblxmXSpcXS9nLGU9WyI6Zm9jdXMiXSxmPVsiOmFjdGl2ZSIsIjpmb2N1cyJdLGg9cy5tYXRjaGVzU2VsZWN0b3J8fHMubW96TWF0Y2hlc1NlbGVjdG9yfHxzLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8cy5vTWF0Y2hlc1NlbGVjdG9yfHxzLm1zTWF0Y2hlc1NlbGVjdG9yO1goZnVuY3Rpb24oYSl7YS5pbm5lckhUTUw9IjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGEucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8ZS5wdXNoKCJcXFsiK0UrIiooPzpjaGVja2VkfGRpc2FibGVkfGlzbWFwfG11bHRpcGxlfHJlYWRvbmx5fHNlbGVjdGVkfHZhbHVlKSIpLGEucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fGUucHVzaCgiOmNoZWNrZWQiKX0pLFgoZnVuY3Rpb24oYSl7YS5pbm5lckhUTUw9IjxwIHRlc3Q9Jyc+PC9wPiIsYS5xdWVyeVNlbGVjdG9yQWxsKCJbdGVzdF49JyddIikubGVuZ3RoJiZlLnB1c2goIlsqXiRdPSIrRSsiKig/OlwiXCJ8JycpIiksYS5pbm5lckhUTUw9IjxpbnB1dCB0eXBlPSdoaWRkZW4nLz4iLGEucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGh8fGUucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKX0pLGU9bmV3IFJlZ0V4cChlLmpvaW4oInwiKSksYnA9ZnVuY3Rpb24oYSxkLGYsZyxoKXtpZighZyYmIWgmJighZXx8IWUudGVzdChhKSkpe3ZhciBpLGosaz0hMCxsPW8sbT1kLG49ZC5ub2RlVHlwZT09PTkmJmE7aWYoZC5ub2RlVHlwZT09PTEmJmQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJvYmplY3QiKXtpPWJoKGEpLChrPWQuZ2V0QXR0cmlidXRlKCJpZCIpKT9sPWsucmVwbGFjZShjLCJcXCQmIik6ZC5zZXRBdHRyaWJ1dGUoImlkIixsKSxsPSJbaWQ9JyIrbCsiJ10gIixqPWkubGVuZ3RoO3doaWxlKGotLSlpW2pdPWwraVtqXS5qb2luKCIiKTttPVIudGVzdChhKSYmZC5wYXJlbnROb2RlfHxkLG49aS5qb2luKCIsIil9aWYobil0cnl7cmV0dXJuIHcuYXBwbHkoZix4LmNhbGwobS5xdWVyeVNlbGVjdG9yQWxsKG4pLDApKSxmfWNhdGNoKHApe31maW5hbGx5e2t8fGQucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX1yZXR1cm4gYihhLGQsZixnLGgpfSxoJiYoWChmdW5jdGlvbihiKXthPWguY2FsbChiLCJkaXYiKTt0cnl7aC5jYWxsKGIsIlt0ZXN0IT0nJ106c2l6emxlIiksZi5wdXNoKCIhPSIsSil9Y2F0Y2goYyl7fX0pLGY9bmV3IFJlZ0V4cChmLmpvaW4oInwiKSksYmMubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGIsYyl7Yz1jLnJlcGxhY2UoZCwiPSckMSddIik7aWYoIWcoYikmJiFmLnRlc3QoYykmJighZXx8IWUudGVzdChjKSkpdHJ5e3ZhciBpPWguY2FsbChiLGMpO2lmKGl8fGF8fGIuZG9jdW1lbnQmJmIuZG9jdW1lbnQubm9kZVR5cGUhPT0xMSlyZXR1cm4gaX1jYXRjaChqKXt9cmV0dXJuIGJjKGMsbnVsbCxudWxsLFtiXSkubGVuZ3RoPjB9KX0oKSxlLnBzZXVkb3MubnRoPWUucHNldWRvcy5lcSxlLmZpbHRlcnM9YnEucHJvdG90eXBlPWUucHNldWRvcyxlLnNldEZpbHRlcnM9bmV3IGJxLGJjLmF0dHI9cC5hdHRyLHAuZmluZD1iYyxwLmV4cHI9YmMuc2VsZWN0b3JzLHAuZXhwclsiOiJdPXAuZXhwci5wc2V1ZG9zLHAudW5pcXVlPWJjLnVuaXF1ZVNvcnQscC50ZXh0PWJjLmdldFRleHQscC5pc1hNTERvYz1iYy5pc1hNTCxwLmNvbnRhaW5zPWJjLmNvbnRhaW5zfShhKTt2YXIgYmM9L1VudGlsJC8sYmQ9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sYmU9L14uW146I1xbXC4sXSokLyxiZj1wLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LGJnPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O3AuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPXRoaXM7aWYodHlwZW9mIGEhPSJzdHJpbmciKXJldHVybiBwKGEpLmZpbHRlcihmdW5jdGlvbigpe2ZvcihiPTAsYz1oLmxlbmd0aDtiPGM7YisrKWlmKHAuY29udGFpbnMoaFtiXSx0aGlzKSlyZXR1cm4hMH0pO2c9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpO2ZvcihiPTAsYz10aGlzLmxlbmd0aDtiPGM7YisrKXtkPWcubGVuZ3RoLHAuZmluZChhLHRoaXNbYl0sZyk7aWYoYj4wKWZvcihlPWQ7ZTxnLmxlbmd0aDtlKyspZm9yKGY9MDtmPGQ7ZisrKWlmKGdbZl09PT1nW2VdKXtnLnNwbGljZShlLS0sMSk7YnJlYWt9fXJldHVybiBnfSxoYXM6ZnVuY3Rpb24oYSl7dmFyIGIsYz1wKGEsdGhpcyksZD1jLmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2I8ZDtiKyspaWYocC5jb250YWlucyh0aGlzLGNbYl0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYmoodGhpcyxhLCExKSwibm90IixhKX0sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhiaih0aGlzLGEsITApLCJmaWx0ZXIiLGEpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIWEmJih0eXBlb2YgYT09InN0cmluZyI/YmYudGVzdChhKT9wKGEsdGhpcy5jb250ZXh0KS5pbmRleCh0aGlzWzBdKT49MDpwLmZpbHRlcihhLHRoaXMpLmxlbmd0aD4wOnRoaXMuZmlsdGVyKGEpLmxlbmd0aD4wKX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9MCxlPXRoaXMubGVuZ3RoLGY9W10sZz1iZi50ZXN0KGEpfHx0eXBlb2YgYSE9InN0cmluZyI/cChhLGJ8fHRoaXMuY29udGV4dCk6MDtmb3IoO2Q8ZTtkKyspe2M9dGhpc1tkXTt3aGlsZShjJiZjLm93bmVyRG9jdW1lbnQmJmMhPT1iJiZjLm5vZGVUeXBlIT09MTEpe2lmKGc/Zy5pbmRleChjKT4tMTpwLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGMsYSkpe2YucHVzaChjKTticmVha31jPWMucGFyZW50Tm9kZX19cmV0dXJuIGY9Zi5sZW5ndGg+MT9wLnVuaXF1ZShmKTpmLHRoaXMucHVzaFN0YWNrKGYsImNsb3Nlc3QiLGEpfSxpbmRleDpmdW5jdGlvbihhKXtyZXR1cm4gYT90eXBlb2YgYT09InN0cmluZyI/cC5pbkFycmF5KHRoaXNbMF0scChhKSk6cC5pbkFycmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYT09InN0cmluZyI/cChhLGIpOnAubWFrZUFycmF5KGEmJmEubm9kZVR5cGU/W2FdOmEpLGQ9cC5tZXJnZSh0aGlzLmdldCgpLGMpO3JldHVybiB0aGlzLnB1c2hTdGFjayhiaChjWzBdKXx8YmgoZFswXSk/ZDpwLnVuaXF1ZShkKSl9LGFkZEJhY2s6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYWRkKGE9PW51bGw/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoYSkpfX0pLHAuZm4uYW5kU2VsZj1wLmZuLmFkZEJhY2sscC5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiZiLm5vZGVUeXBlIT09MTE/YjpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBwLmRpcihhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHAuZGlyKGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBiaShhLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGEpe3JldHVybiBiaShhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gcC5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gcC5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHAuZGlyKGEsIm5leHRTaWJsaW5nIixjKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gcC5kaXIoYSwicHJldmlvdXNTaWJsaW5nIixjKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIHAuc2libGluZygoYS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIHAuc2libGluZyhhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gcC5ub2RlTmFtZShhLCJpZnJhbWUiKT9hLmNvbnRlbnREb2N1bWVudHx8YS5jb250ZW50V2luZG93LmRvY3VtZW50OnAubWVyZ2UoW10sYS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGEsYil7cC5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPXAubWFwKHRoaXMsYixjKTtyZXR1cm4gYmMudGVzdChhKXx8KGQ9YyksZCYmdHlwZW9mIGQ9PSJzdHJpbmciJiYoZT1wLmZpbHRlcihkLGUpKSxlPXRoaXMubGVuZ3RoPjEmJiFiZ1thXT9wLnVuaXF1ZShlKTplLHRoaXMubGVuZ3RoPjEmJmJkLnRlc3QoYSkmJihlPWUucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhlLGEsay5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX19KSxwLmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYyYmKGE9Ijpub3QoIithKyIpIiksYi5sZW5ndGg9PT0xP3AuZmluZC5tYXRjaGVzU2VsZWN0b3IoYlswXSxhKT9bYlswXV06W106cC5maW5kLm1hdGNoZXMoYSxiKX0sZGlyOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1bXSxmPWFbY107d2hpbGUoZiYmZi5ub2RlVHlwZSE9PTkmJihkPT09Ynx8Zi5ub2RlVHlwZSE9PTF8fCFwKGYpLmlzKGQpKSlmLm5vZGVUeXBlPT09MSYmZS5wdXNoKGYpLGY9ZltjXTtyZXR1cm4gZX0sc2libGluZzpmdW5jdGlvbihhLGIpe3ZhciBjPVtdO2Zvcig7YTthPWEubmV4dFNpYmxpbmcpYS5ub2RlVHlwZT09PTEmJmEhPT1iJiZjLnB1c2goYSk7cmV0dXJuIGN9fSk7dmFyIGJsPSJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0aW1lfHZpZGVvIixibT0vIGpRdWVyeVxkKz0iKD86bnVsbHxcZCspIi9nLGJuPS9eXHMrLyxibz0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpLGJwPS88KFtcdzpdKykvLGJxPS88dGJvZHkvaSxicj0vPHwmIz9cdys7Lyxicz0vPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLGJ0PS88KD86c2NyaXB0fG9iamVjdHxlbWJlZHxvcHRpb258c3R5bGUpL2ksYnU9bmV3IFJlZ0V4cCgiPCg/OiIrYmwrIilbXFxzLz5dIiwiaSIpLGJ2PS9eKD86Y2hlY2tib3h8cmFkaW8pJC8sYnc9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksYng9L1wvKGphdmF8ZWNtYSlzY3JpcHQvaSxieT0vXlxzKjwhKD86XFtDREFUQVxbfFwtXC0pfFtcXVwtXXsyfT5ccyokL2csYno9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX0sYkE9YmsoZSksYkI9YkEuYXBwZW5kQ2hpbGQoZS5jcmVhdGVFbGVtZW50KCJkaXYiKSk7Ynoub3B0Z3JvdXA9Ynoub3B0aW9uLGJ6LnRib2R5PWJ6LnRmb290PWJ6LmNvbGdyb3VwPWJ6LmNhcHRpb249YnoudGhlYWQsYnoudGg9YnoudGQscC5zdXBwb3J0Lmh0bWxTZXJpYWxpemV8fChiei5fZGVmYXVsdD1bMSwiWDxkaXY+IiwiPC9kaXY+Il0pLHAuZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBwLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09Yj9wLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHxlKS5jcmVhdGVUZXh0Tm9kZShhKSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0sd3JhcEFsbDpmdW5jdGlvbihhKXtpZihwLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtwKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsYikpfSk7aWYodGhpc1swXSl7dmFyIGI9cChhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApO3RoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1swXSksYi5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RDaGlsZCYmYS5maXJzdENoaWxkLm5vZGVUeXBlPT09MSlhPWEuZmlyc3RDaGlsZDtyZXR1cm4gYX0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGEpe3JldHVybiBwLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3AodGhpcykud3JhcElubmVyKGEuY2FsbCh0aGlzLGIpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPXAodGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7dmFyIGI9cC5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7cCh0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsYyk6YSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe3Aubm9kZU5hbWUodGhpcywiYm9keSIpfHxwKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9uKGEpeyh0aGlzLm5vZGVUeXBlPT09MXx8dGhpcy5ub2RlVHlwZT09PTExKSYmdGhpcy5hcHBlbmRDaGlsZChhKX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9uKGEpeyh0aGlzLm5vZGVUeXBlPT09MXx8dGhpcy5ub2RlVHlwZT09PTExKSYmdGhpcy5pbnNlcnRCZWZvcmUoYSx0aGlzLmZpcnN0Q2hpbGQpfSl9LGJlZm9yZTpmdW5jdGlvbigpe2lmKCFiaCh0aGlzWzBdKSlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMpfSk7aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9cC5jbGVhbihhcmd1bWVudHMpO3JldHVybiB0aGlzLnB1c2hTdGFjayhwLm1lcmdlKGEsdGhpcyksImJlZm9yZSIsdGhpcy5zZWxlY3Rvcil9fSxhZnRlcjpmdW5jdGlvbigpe2lmKCFiaCh0aGlzWzBdKSlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMubmV4dFNpYmxpbmcpfSk7aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9cC5jbGVhbihhcmd1bWVudHMpO3JldHVybiB0aGlzLnB1c2hTdGFjayhwLm1lcmdlKHRoaXMsYSksImFmdGVyIix0aGlzLnNlbGVjdG9yKX19LHJlbW92ZTpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9MDtmb3IoOyhjPXRoaXNbZF0pIT1udWxsO2QrKylpZighYXx8cC5maWx0ZXIoYSxbY10pLmxlbmd0aCkhYiYmYy5ub2RlVHlwZT09PTEmJihwLmNsZWFuRGF0YShjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLHAuY2xlYW5EYXRhKFtjXSkpLGMucGFyZW50Tm9kZSYmYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe3ZhciBhLGI9MDtmb3IoOyhhPXRoaXNbYl0pIT1udWxsO2IrKyl7YS5ub2RlVHlwZT09PTEmJnAuY2xlYW5EYXRhKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSk7d2hpbGUoYS5maXJzdENoaWxkKWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKX1yZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1hPT1udWxsPyExOmEsYj1iPT1udWxsP2E6Yix0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBwLmNsb25lKHRoaXMsYSxiKX0pfSxodG1sOmZ1bmN0aW9uKGEpe3JldHVybiBwLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGEpe3ZhciBjPXRoaXNbMF18fHt9LGQ9MCxlPXRoaXMubGVuZ3RoO2lmKGE9PT1iKXJldHVybiBjLm5vZGVUeXBlPT09MT9jLmlubmVySFRNTC5yZXBsYWNlKGJtLCIiKTpiO2lmKHR5cGVvZiBhPT0ic3RyaW5nIiYmIWJzLnRlc3QoYSkmJihwLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZXx8IWJ1LnRlc3QoYSkpJiYocC5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlfHwhYm4udGVzdChhKSkmJiFielsoYnAuZXhlYyhhKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2E9YS5yZXBsYWNlKGJvLCI8JDE+PC8kMj4iKTt0cnl7Zm9yKDtkPGU7ZCsrKWM9dGhpc1tkXXx8e30sYy5ub2RlVHlwZT09PTEmJihwLmNsZWFuRGF0YShjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLGMuaW5uZXJIVE1MPWEpO2M9MH1jYXRjaChmKXt9fWMmJnRoaXMuZW1wdHkoKS5hcHBlbmQoYSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oYSl7cmV0dXJuIGJoKHRoaXNbMF0pP3RoaXMubGVuZ3RoP3RoaXMucHVzaFN0YWNrKHAocC5pc0Z1bmN0aW9uKGEpP2EoKTphKSwicmVwbGFjZVdpdGgiLGEpOnRoaXM6cC5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1wKHRoaXMpLGQ9Yy5odG1sKCk7Yy5yZXBsYWNlV2l0aChhLmNhbGwodGhpcyxiLGQpKX0pOih0eXBlb2YgYSE9InN0cmluZyImJihhPXAoYSkuZGV0YWNoKCkpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPXRoaXMubmV4dFNpYmxpbmcsYz10aGlzLnBhcmVudE5vZGU7cCh0aGlzKS5yZW1vdmUoKSxiP3AoYikuYmVmb3JlKGEpOnAoYykuYXBwZW5kKGEpfSkpfSxkZXRhY2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucmVtb3ZlKGEsITApfSxkb21NYW5pcDpmdW5jdGlvbihhLGMsZCl7YT1bXS5jb25jYXQuYXBwbHkoW10sYSk7dmFyIGUsZixnLGgsaT0wLGo9YVswXSxrPVtdLGw9dGhpcy5sZW5ndGg7aWYoIXAuc3VwcG9ydC5jaGVja0Nsb25lJiZsPjEmJnR5cGVvZiBqPT0ic3RyaW5nIiYmYncudGVzdChqKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cCh0aGlzKS5kb21NYW5pcChhLGMsZCl9KTtpZihwLmlzRnVuY3Rpb24oaikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgZj1wKHRoaXMpO2FbMF09ai5jYWxsKHRoaXMsZSxjP2YuaHRtbCgpOmIpLGYuZG9tTWFuaXAoYSxjLGQpfSk7aWYodGhpc1swXSl7ZT1wLmJ1aWxkRnJhZ21lbnQoYSx0aGlzLGspLGc9ZS5mcmFnbWVudCxmPWcuZmlyc3RDaGlsZCxnLmNoaWxkTm9kZXMubGVuZ3RoPT09MSYmKGc9Zik7aWYoZil7Yz1jJiZwLm5vZGVOYW1lKGYsInRyIik7Zm9yKGg9ZS5jYWNoZWFibGV8fGwtMTtpPGw7aSsrKWQuY2FsbChjJiZwLm5vZGVOYW1lKHRoaXNbaV0sInRhYmxlIik/YkModGhpc1tpXSwidGJvZHkiKTp0aGlzW2ldLGk9PT1oP2c6cC5jbG9uZShnLCEwLCEwKSl9Zz1mPW51bGwsay5sZW5ndGgmJnAuZWFjaChrLGZ1bmN0aW9uKGEsYil7Yi5zcmM/cC5hamF4P3AuYWpheCh7dXJsOmIuc3JjLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsYXN5bmM6ITEsZ2xvYmFsOiExLCJ0aHJvd3MiOiEwfSk6cC5lcnJvcigibm8gYWpheCIpOnAuZ2xvYmFsRXZhbCgoYi50ZXh0fHxiLnRleHRDb250ZW50fHxiLmlubmVySFRNTHx8IiIpLnJlcGxhY2UoYnksIiIpKSxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX0pfXJldHVybiB0aGlzfX0pLHAuYnVpbGRGcmFnbWVudD1mdW5jdGlvbihhLGMsZCl7dmFyIGYsZyxoLGk9YVswXTtyZXR1cm4gYz1jfHxlLGM9IWMubm9kZVR5cGUmJmNbMF18fGMsYz1jLm93bmVyRG9jdW1lbnR8fGMsYS5sZW5ndGg9PT0xJiZ0eXBlb2YgaT09InN0cmluZyImJmkubGVuZ3RoPDUxMiYmYz09PWUmJmkuY2hhckF0KDApPT09IjwiJiYhYnQudGVzdChpKSYmKHAuc3VwcG9ydC5jaGVja0Nsb25lfHwhYncudGVzdChpKSkmJihwLnN1cHBvcnQuaHRtbDVDbG9uZXx8IWJ1LnRlc3QoaSkpJiYoZz0hMCxmPXAuZnJhZ21lbnRzW2ldLGg9ZiE9PWIpLGZ8fChmPWMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHAuY2xlYW4oYSxjLGYsZCksZyYmKHAuZnJhZ21lbnRzW2ldPWgmJmYpKSx7ZnJhZ21lbnQ6ZixjYWNoZWFibGU6Z319LHAuZnJhZ21lbnRzPXt9LHAuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGEsYil7cC5mblthXT1mdW5jdGlvbihjKXt2YXIgZCxlPTAsZj1bXSxnPXAoYyksaD1nLmxlbmd0aCxpPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO2lmKChpPT1udWxsfHxpJiZpLm5vZGVUeXBlPT09MTEmJmkuY2hpbGROb2Rlcy5sZW5ndGg9PT0xKSYmaD09PTEpcmV0dXJuIGdbYl0odGhpc1swXSksdGhpcztmb3IoO2U8aDtlKyspZD0oZT4wP3RoaXMuY2xvbmUoITApOnRoaXMpLmdldCgpLHAoZ1tlXSlbYl0oZCksZj1mLmNvbmNhdChkKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZixhLGcuc2VsZWN0b3IpfX0pLHAuZXh0ZW5kKHtjbG9uZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGc7cC5zdXBwb3J0Lmh0bWw1Q2xvbmV8fHAuaXNYTUxEb2MoYSl8fCFidS50ZXN0KCI8IithLm5vZGVOYW1lKyI+Iik/Zz1hLmNsb25lTm9kZSghMCk6KGJCLmlubmVySFRNTD1hLm91dGVySFRNTCxiQi5yZW1vdmVDaGlsZChnPWJCLmZpcnN0Q2hpbGQpKTtpZigoIXAuc3VwcG9ydC5ub0Nsb25lRXZlbnR8fCFwLnN1cHBvcnQubm9DbG9uZUNoZWNrZWQpJiYoYS5ub2RlVHlwZT09PTF8fGEubm9kZVR5cGU9PT0xMSkmJiFwLmlzWE1MRG9jKGEpKXtiRShhLGcpLGQ9YkYoYSksZT1iRihnKTtmb3IoZj0wO2RbZl07KytmKWVbZl0mJmJFKGRbZl0sZVtmXSl9aWYoYil7YkQoYSxnKTtpZihjKXtkPWJGKGEpLGU9YkYoZyk7Zm9yKGY9MDtkW2ZdOysrZiliRChkW2ZdLGVbZl0pfX1yZXR1cm4gZD1lPW51bGwsZ30sY2xlYW46ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scSxyLHM9Yj09PWUmJmJBLHQ9W107aWYoIWJ8fHR5cGVvZiBiLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQ9PSJ1bmRlZmluZWQiKWI9ZTtmb3IoZj0wOyhoPWFbZl0pIT1udWxsO2YrKyl7dHlwZW9mIGg9PSJudW1iZXIiJiYoaCs9IiIpO2lmKCFoKWNvbnRpbnVlO2lmKHR5cGVvZiBoPT0ic3RyaW5nIilpZighYnIudGVzdChoKSloPWIuY3JlYXRlVGV4dE5vZGUoaCk7ZWxzZXtzPXN8fGJrKGIpLGw9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKSxzLmFwcGVuZENoaWxkKGwpLGg9aC5yZXBsYWNlKGJvLCI8JDE+PC8kMj4iKSxpPShicC5leGVjKGgpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLGo9YnpbaV18fGJ6Ll9kZWZhdWx0LGs9alswXSxsLmlubmVySFRNTD1qWzFdK2gralsyXTt3aGlsZShrLS0pbD1sLmxhc3RDaGlsZDtpZighcC5zdXBwb3J0LnRib2R5KXttPWJxLnRlc3QoaCksbj1pPT09InRhYmxlIiYmIW0/bC5maXJzdENoaWxkJiZsLmZpcnN0Q2hpbGQuY2hpbGROb2RlczpqWzFdPT09Ijx0YWJsZT4iJiYhbT9sLmNoaWxkTm9kZXM6W107Zm9yKGc9bi5sZW5ndGgtMTtnPj0wOy0tZylwLm5vZGVOYW1lKG5bZ10sInRib2R5IikmJiFuW2ddLmNoaWxkTm9kZXMubGVuZ3RoJiZuW2ddLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobltnXSl9IXAuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSYmYm4udGVzdChoKSYmbC5pbnNlcnRCZWZvcmUoYi5jcmVhdGVUZXh0Tm9kZShibi5leGVjKGgpWzBdKSxsLmZpcnN0Q2hpbGQpLGg9bC5jaGlsZE5vZGVzLGwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsKX1oLm5vZGVUeXBlP3QucHVzaChoKTpwLm1lcmdlKHQsaCl9bCYmKGg9bD1zPW51bGwpO2lmKCFwLnN1cHBvcnQuYXBwZW5kQ2hlY2tlZClmb3IoZj0wOyhoPXRbZl0pIT1udWxsO2YrKylwLm5vZGVOYW1lKGgsImlucHV0Iik/YkcoaCk6dHlwZW9mIGguZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiJiZwLmdyZXAoaC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKSxiRyk7aWYoYyl7cT1mdW5jdGlvbihhKXtpZighYS50eXBlfHxieC50ZXN0KGEudHlwZSkpcmV0dXJuIGQ/ZC5wdXNoKGEucGFyZW50Tm9kZT9hLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSk6YSk6Yy5hcHBlbmRDaGlsZChhKX07Zm9yKGY9MDsoaD10W2ZdKSE9bnVsbDtmKyspaWYoIXAubm9kZU5hbWUoaCwic2NyaXB0Iil8fCFxKGgpKWMuYXBwZW5kQ2hpbGQoaCksdHlwZW9mIGguZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiJiYocj1wLmdyZXAocC5tZXJnZShbXSxoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSkscSksdC5zcGxpY2UuYXBwbHkodCxbZisxLDBdLmNvbmNhdChyKSksZis9ci5sZW5ndGgpfXJldHVybiB0fSxjbGVhbkRhdGE6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnPTAsaD1wLmV4cGFuZG8saT1wLmNhY2hlLGo9cC5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8saz1wLmV2ZW50LnNwZWNpYWw7Zm9yKDsoZT1hW2ddKSE9bnVsbDtnKyspaWYoYnx8cC5hY2NlcHREYXRhKGUpKXtkPWVbaF0sYz1kJiZpW2RdO2lmKGMpe2lmKGMuZXZlbnRzKWZvcihmIGluIGMuZXZlbnRzKWtbZl0/cC5ldmVudC5yZW1vdmUoZSxmKTpwLnJlbW92ZUV2ZW50KGUsZixjLmhhbmRsZSk7aVtkXSYmKGRlbGV0ZSBpW2RdLGo/ZGVsZXRlIGVbaF06ZS5yZW1vdmVBdHRyaWJ1dGU/ZS5yZW1vdmVBdHRyaWJ1dGUoaCk6ZVtoXT1udWxsLHAuZGVsZXRlZElkcy5wdXNoKGQpKX19fX0pLGZ1bmN0aW9uKCl7dmFyIGEsYjtwLnVhTWF0Y2g9ZnVuY3Rpb24oYSl7YT1hLnRvTG93ZXJDYXNlKCk7dmFyIGI9LyhjaHJvbWUpWyBcL10oW1x3Ll0rKS8uZXhlYyhhKXx8Lyh3ZWJraXQpWyBcL10oW1x3Ll0rKS8uZXhlYyhhKXx8LyhvcGVyYSkoPzouKnZlcnNpb258KVsgXC9dKFtcdy5dKykvLmV4ZWMoYSl8fC8obXNpZSkgKFtcdy5dKykvLmV4ZWMoYSl8fGEuaW5kZXhPZigiY29tcGF0aWJsZSIpPDAmJi8obW96aWxsYSkoPzouKj8gcnY6KFtcdy5dKyl8KS8uZXhlYyhhKXx8W107cmV0dXJue2Jyb3dzZXI6YlsxXXx8IiIsdmVyc2lvbjpiWzJdfHwiMCJ9fSxhPXAudWFNYXRjaChnLnVzZXJBZ2VudCksYj17fSxhLmJyb3dzZXImJihiW2EuYnJvd3Nlcl09ITAsYi52ZXJzaW9uPWEudmVyc2lvbiksYi5jaHJvbWU/Yi53ZWJraXQ9ITA6Yi53ZWJraXQmJihiLnNhZmFyaT0hMCkscC5icm93c2VyPWIscC5zdWI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGIsYyl7cmV0dXJuIG5ldyBhLmZuLmluaXQoYixjKX1wLmV4dGVuZCghMCxhLHRoaXMpLGEuc3VwZXJjbGFzcz10aGlzLGEuZm49YS5wcm90b3R5cGU9dGhpcygpLGEuZm4uY29uc3RydWN0b3I9YSxhLnN1Yj10aGlzLnN1YixhLmZuLmluaXQ9ZnVuY3Rpb24gYyhjLGQpe3JldHVybiBkJiZkIGluc3RhbmNlb2YgcCYmIShkIGluc3RhbmNlb2YgYSkmJihkPWEoZCkpLHAuZm4uaW5pdC5jYWxsKHRoaXMsYyxkLGIpfSxhLmZuLmluaXQucHJvdG90eXBlPWEuZm47dmFyIGI9YShlKTtyZXR1cm4gYX19KCk7dmFyIGJILGJJLGJKLGJLPS9hbHBoYVwoW14pXSpcKS9pLGJMPS9vcGFjaXR5PShbXildKikvLGJNPS9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkLyxiTj0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sYk89L15tYXJnaW4vLGJQPW5ldyBSZWdFeHAoIl4oIitxKyIpKC4qKSQiLCJpIiksYlE9bmV3IFJlZ0V4cCgiXigiK3ErIikoPyFweClbYS16JV0rJCIsImkiKSxiUj1uZXcgUmVnRXhwKCJeKFstK10pPSgiK3ErIikiLCJpIiksYlM9e30sYlQ9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LGJVPXtsZXR0ZXJTcGFjaW5nOjAsZm9udFdlaWdodDo0MDB9LGJWPVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sYlc9WyJXZWJraXQiLCJPIiwiTW96IiwibXMiXSxiWD1wLmZuLnRvZ2dsZTtwLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIHAuYWNjZXNzKHRoaXMsZnVuY3Rpb24oYSxjLGQpe3JldHVybiBkIT09Yj9wLnN0eWxlKGEsYyxkKTpwLmNzcyhhLGMpfSxhLGMsYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBiJCh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBiJCh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGE9PSJib29sZWFuIjtyZXR1cm4gcC5pc0Z1bmN0aW9uKGEpJiZwLmlzRnVuY3Rpb24oYik/YlguYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuZWFjaChmdW5jdGlvbigpeyhjP2E6YloodGhpcykpP3AodGhpcykuc2hvdygpOnAodGhpcykuaGlkZSgpfSl9fSkscC5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oYSxiKXtpZihiKXt2YXIgYz1iSChhLCJvcGFjaXR5Iik7cmV0dXJuIGM9PT0iIj8iMSI6Y319fX0sY3NzTnVtYmVyOntmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6cC5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGMsZCxlKXtpZighYXx8YS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04fHwhYS5zdHlsZSlyZXR1cm47dmFyIGYsZyxoLGk9cC5jYW1lbENhc2UoYyksaj1hLnN0eWxlO2M9cC5jc3NQcm9wc1tpXXx8KHAuY3NzUHJvcHNbaV09YlkoaixpKSksaD1wLmNzc0hvb2tzW2NdfHxwLmNzc0hvb2tzW2ldO2lmKGQ9PT1iKXJldHVybiBoJiYiZ2V0ImluIGgmJihmPWguZ2V0KGEsITEsZSkpIT09Yj9mOmpbY107Zz10eXBlb2YgZCxnPT09InN0cmluZyImJihmPWJSLmV4ZWMoZCkpJiYoZD0oZlsxXSsxKSpmWzJdK3BhcnNlRmxvYXQocC5jc3MoYSxjKSksZz0ibnVtYmVyIik7aWYoZD09bnVsbHx8Zz09PSJudW1iZXIiJiZpc05hTihkKSlyZXR1cm47Zz09PSJudW1iZXIiJiYhcC5jc3NOdW1iZXJbaV0mJihkKz0icHgiKTtpZighaHx8ISgic2V0ImluIGgpfHwoZD1oLnNldChhLGQsZSkpIT09Yil0cnl7altjXT1kfWNhdGNoKGspe319LGNzczpmdW5jdGlvbihhLGMsZCxlKXt2YXIgZixnLGgsaT1wLmNhbWVsQ2FzZShjKTtyZXR1cm4gYz1wLmNzc1Byb3BzW2ldfHwocC5jc3NQcm9wc1tpXT1iWShhLnN0eWxlLGkpKSxoPXAuY3NzSG9va3NbY118fHAuY3NzSG9va3NbaV0saCYmImdldCJpbiBoJiYoZj1oLmdldChhLCEwLGUpKSxmPT09YiYmKGY9YkgoYSxjKSksZj09PSJub3JtYWwiJiZjIGluIGJVJiYoZj1iVVtjXSksZHx8ZSE9PWI/KGc9cGFyc2VGbG9hdChmKSxkfHxwLmlzTnVtZXJpYyhnKT9nfHwwOmYpOmZ9LHN3YXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj17fTtmb3IoZSBpbiBiKWZbZV09YS5zdHlsZVtlXSxhLnN0eWxlW2VdPWJbZV07ZD1jLmNhbGwoYSk7Zm9yKGUgaW4gYilhLnN0eWxlW2VdPWZbZV07cmV0dXJuIGR9fSksYS5nZXRDb21wdXRlZFN0eWxlP2JIPWZ1bmN0aW9uKGIsYyl7dmFyIGQsZSxmLGcsaD1hLmdldENvbXB1dGVkU3R5bGUoYixudWxsKSxpPWIuc3R5bGU7cmV0dXJuIGgmJihkPWhbY10sZD09PSIiJiYhcC5jb250YWlucyhiLm93bmVyRG9jdW1lbnQsYikmJihkPXAuc3R5bGUoYixjKSksYlEudGVzdChkKSYmYk8udGVzdChjKSYmKGU9aS53aWR0aCxmPWkubWluV2lkdGgsZz1pLm1heFdpZHRoLGkubWluV2lkdGg9aS5tYXhXaWR0aD1pLndpZHRoPWQsZD1oLndpZHRoLGkud2lkdGg9ZSxpLm1pbldpZHRoPWYsaS5tYXhXaWR0aD1nKSksZH06ZS5kb2N1bWVudEVsZW1lbnQuY3VycmVudFN0eWxlJiYoYkg9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9YS5jdXJyZW50U3R5bGUmJmEuY3VycmVudFN0eWxlW2JdLGY9YS5zdHlsZTtyZXR1cm4gZT09bnVsbCYmZiYmZltiXSYmKGU9ZltiXSksYlEudGVzdChlKSYmIWJNLnRlc3QoYikmJihjPWYubGVmdCxkPWEucnVudGltZVN0eWxlJiZhLnJ1bnRpbWVTdHlsZS5sZWZ0LGQmJihhLnJ1bnRpbWVTdHlsZS5sZWZ0PWEuY3VycmVudFN0eWxlLmxlZnQpLGYubGVmdD1iPT09ImZvbnRTaXplIj8iMWVtIjplLGU9Zi5waXhlbExlZnQrInB4IixmLmxlZnQ9YyxkJiYoYS5ydW50aW1lU3R5bGUubGVmdD1kKSksZT09PSIiPyJhdXRvIjplfSkscC5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihhLGIpe3AuY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZCl7aWYoYylyZXR1cm4gYS5vZmZzZXRXaWR0aD09PTAmJmJOLnRlc3QoYkgoYSwiZGlzcGxheSIpKT9wLnN3YXAoYSxiVCxmdW5jdGlvbigpe3JldHVybiBjYihhLGIsZCl9KTpjYihhLGIsZCl9LHNldDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGJfKGEsYyxkP2NhKGEsYixkLHAuc3VwcG9ydC5ib3hTaXppbmcmJnAuY3NzKGEsImJveFNpemluZyIpPT09ImJvcmRlci1ib3giKTowKX19fSkscC5zdXBwb3J0Lm9wYWNpdHl8fChwLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBiTC50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/LjAxKnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZSxkPWEuY3VycmVudFN0eWxlLGU9cC5pc051bWVyaWMoYik/ImFscGhhKG9wYWNpdHk9IitiKjEwMCsiKSI6IiIsZj1kJiZkLmZpbHRlcnx8Yy5maWx0ZXJ8fCIiO2Muem9vbT0xO2lmKGI+PTEmJnAudHJpbShmLnJlcGxhY2UoYkssIiIpKT09PSIiJiZjLnJlbW92ZUF0dHJpYnV0ZSl7Yy5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpO2lmKGQmJiFkLmZpbHRlcilyZXR1cm59Yy5maWx0ZXI9YksudGVzdChmKT9mLnJlcGxhY2UoYkssZSk6ZisiICIrZX19KSxwKGZ1bmN0aW9uKCl7cC5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHR8fChwLmNzc0hvb2tzLm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gcC5zd2FwKGEse2Rpc3BsYXk6ImlubGluZS1ibG9jayJ9LGZ1bmN0aW9uKCl7aWYoYilyZXR1cm4gYkgoYSwibWFyZ2luUmlnaHQiKX0pfX0pLCFwLnN1cHBvcnQucGl4ZWxQb3NpdGlvbiYmcC5mbi5wb3NpdGlvbiYmcC5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGEsYil7cC5jc3NIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEsYyl7aWYoYyl7dmFyIGQ9YkgoYSxiKTtyZXR1cm4gYlEudGVzdChkKT9wKGEpLnBvc2l0aW9uKClbYl0rInB4IjpkfX19fSl9KSxwLmV4cHImJnAuZXhwci5maWx0ZXJzJiYocC5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGEpe3JldHVybiBhLm9mZnNldFdpZHRoPT09MCYmYS5vZmZzZXRIZWlnaHQ9PT0wfHwhcC5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyYmKGEuc3R5bGUmJmEuc3R5bGUuZGlzcGxheXx8YkgoYSwiZGlzcGxheSIpKT09PSJub25lIn0scC5leHByLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihhKXtyZXR1cm4hcC5leHByLmZpbHRlcnMuaGlkZGVuKGEpfSkscC5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oYSxiKXtwLmNzc0hvb2tzW2ErYl09e2V4cGFuZDpmdW5jdGlvbihjKXt2YXIgZCxlPXR5cGVvZiBjPT0ic3RyaW5nIj9jLnNwbGl0KCIgIik6W2NdLGY9e307Zm9yKGQ9MDtkPDQ7ZCsrKWZbYStiVltkXStiXT1lW2RdfHxlW2QtMl18fGVbMF07cmV0dXJuIGZ9fSxiTy50ZXN0KGEpfHwocC5jc3NIb29rc1thK2JdLnNldD1iXyl9KTt2YXIgY2Q9LyUyMC9nLGNlPS9cW1xdJC8sY2Y9L1xyP1xuL2csY2c9L14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lLWxvY2FsfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLGNoPS9eKD86c2VsZWN0fHRleHRhcmVhKS9pO3AuZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gcC5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnRzP3AubWFrZUFycmF5KHRoaXMuZWxlbWVudHMpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lJiYhdGhpcy5kaXNhYmxlZCYmKHRoaXMuY2hlY2tlZHx8Y2gudGVzdCh0aGlzLm5vZGVOYW1lKXx8Y2cudGVzdCh0aGlzLnR5cGUpKX0pLm1hcChmdW5jdGlvbihhLGIpe3ZhciBjPXAodGhpcykudmFsKCk7cmV0dXJuIGM9PW51bGw/bnVsbDpwLmlzQXJyYXkoYyk/cC5tYXAoYyxmdW5jdGlvbihhLGMpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxhY2UoY2YsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKGNmLCJcclxuIil9fSkuZ2V0KCl9fSkscC5wYXJhbT1mdW5jdGlvbihhLGMpe3ZhciBkLGU9W10sZj1mdW5jdGlvbihhLGIpe2I9cC5pc0Z1bmN0aW9uKGIpP2IoKTpiPT1udWxsPyIiOmIsZVtlLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYil9O2M9PT1iJiYoYz1wLmFqYXhTZXR0aW5ncyYmcC5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO2lmKHAuaXNBcnJheShhKXx8YS5qcXVlcnkmJiFwLmlzUGxhaW5PYmplY3QoYSkpcC5lYWNoKGEsZnVuY3Rpb24oKXtmKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKGQgaW4gYSljaShkLGFbZF0sYyxmKTtyZXR1cm4gZS5qb2luKCImIikucmVwbGFjZShjZCwiKyIpfTt2YXIgY2osY2ssY2w9LyMuKiQvLGNtPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcsY249L14oPzphYm91dHxhcHB8YXBwXC1zdG9yYWdlfC4rXC1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxjbz0vXig/OkdFVHxIRUFEKSQvLGNwPS9eXC9cLy8sY3E9L1w/Lyxjcj0vPHNjcmlwdFxiW148XSooPzooPyE8XC9zY3JpcHQ+KTxbXjxdKikqPFwvc2NyaXB0Pi9naSxjcz0vKFs/Jl0pXz1bXiZdKi8sY3Q9L14oW1x3XCtcLlwtXSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKXwpfCkvLGN1PXAuZm4ubG9hZCxjdj17fSxjdz17fSxjeD1bIiovIl0rWyIqIl07dHJ5e2NrPWYuaHJlZn1jYXRjaChjeSl7Y2s9ZS5jcmVhdGVFbGVtZW50KCJhIiksY2suaHJlZj0iIixjaz1jay5ocmVmfWNqPWN0LmV4ZWMoY2sudG9Mb3dlckNhc2UoKSl8fFtdLHAuZm4ubG9hZD1mdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGEhPSJzdHJpbmciJiZjdSlyZXR1cm4gY3UuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZSxmLGcsaD10aGlzLGk9YS5pbmRleE9mKCIgIik7cmV0dXJuIGk+PTAmJihlPWEuc2xpY2UoaSxhLmxlbmd0aCksYT1hLnNsaWNlKDAsaSkpLHAuaXNGdW5jdGlvbihjKT8oZD1jLGM9Yik6YyYmdHlwZW9mIGM9PSJvYmplY3QiJiYoZj0iUE9TVCIpLHAuYWpheCh7dXJsOmEsdHlwZTpmLGRhdGFUeXBlOiJodG1sIixkYXRhOmMsY29tcGxldGU6ZnVuY3Rpb24oYSxiKXtkJiZoLmVhY2goZCxnfHxbYS5yZXNwb25zZVRleHQsYixhXSl9fSkuZG9uZShmdW5jdGlvbihhKXtnPWFyZ3VtZW50cyxoLmh0bWwoZT9wKCI8ZGl2PiIpLmFwcGVuZChhLnJlcGxhY2UoY3IsIiIpKS5maW5kKGUpOmEpfSksdGhpc30scC5lYWNoKCJhamF4U3RhcnQgYWpheFN0b3AgYWpheENvbXBsZXRlIGFqYXhFcnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe3AuZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub24oYixhKX19KSxwLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxjKXtwW2NdPWZ1bmN0aW9uKGEsZCxlLGYpe3JldHVybiBwLmlzRnVuY3Rpb24oZCkmJihmPWZ8fGUsZT1kLGQ9YikscC5hamF4KHt0eXBlOmMsdXJsOmEsZGF0YTpkLHN1Y2Nlc3M6ZSxkYXRhVHlwZTpmfSl9fSkscC5leHRlbmQoe2dldFNjcmlwdDpmdW5jdGlvbihhLGMpe3JldHVybiBwLmdldChhLGIsYywic2NyaXB0Iil9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBwLmdldChhLGIsYywianNvbiIpfSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9jQihhLHAuYWpheFNldHRpbmdzKTooYj1hLGE9cC5hamF4U2V0dGluZ3MpLGNCKGEsYiksYX0sYWpheFNldHRpbmdzOnt1cmw6Y2ssaXNMb2NhbDpjbi50ZXN0KGNqWzFdKSxnbG9iYWw6ITAsdHlwZToiR0VUIixjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04Iixwcm9jZXNzRGF0YTohMCxhc3luYzohMCxhY2NlcHRzOnt4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6InRleHQvaHRtbCIsdGV4dDoidGV4dC9wbGFpbiIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwiKiI6Y3h9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjphLlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpwLnBhcnNlSlNPTiwidGV4dCB4bWwiOnAucGFyc2VYTUx9LGZsYXRPcHRpb25zOntjb250ZXh0OiEwLHVybDohMH19LGFqYXhQcmVmaWx0ZXI6Y3ooY3YpLGFqYXhUcmFuc3BvcnQ6Y3ooY3cpLGFqYXg6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiB5KGEsYyxmLGkpe3ZhciBrLHMsdCx1LHcseT1jO2lmKHY9PT0yKXJldHVybjt2PTIsaCYmY2xlYXJUaW1lb3V0KGgpLGc9YixlPWl8fCIiLHgucmVhZHlTdGF0ZT1hPjA/NDowLGYmJih1PWNDKGwseCxmKSk7aWYoYT49MjAwJiZhPDMwMHx8YT09PTMwNClsLmlmTW9kaWZpZWQmJih3PXguZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSx3JiYocC5sYXN0TW9kaWZpZWRbZF09dyksdz14LmdldFJlc3BvbnNlSGVhZGVyKCJFdGFnIiksdyYmKHAuZXRhZ1tkXT13KSksYT09PTMwND8oeT0ibm90bW9kaWZpZWQiLGs9ITApOihrPWNEKGwsdSkseT1rLnN0YXRlLHM9ay5kYXRhLHQ9ay5lcnJvcixrPSF0KTtlbHNle3Q9eTtpZigheXx8YSl5PSJlcnJvciIsYTwwJiYoYT0wKX14LnN0YXR1cz1hLHguc3RhdHVzVGV4dD0oY3x8eSkrIiIsaz9vLnJlc29sdmVXaXRoKG0sW3MseSx4XSk6by5yZWplY3RXaXRoKG0sW3gseSx0XSkseC5zdGF0dXNDb2RlKHIpLHI9YixqJiZuLnRyaWdnZXIoImFqYXgiKyhrPyJTdWNjZXNzIjoiRXJyb3IiKSxbeCxsLGs/czp0XSkscS5maXJlV2l0aChtLFt4LHldKSxqJiYobi50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt4LGxdKSwtLXAuYWN0aXZlfHxwLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpfXR5cGVvZiBhPT0ib2JqZWN0IiYmKGM9YSxhPWIpLGM9Y3x8e307dmFyIGQsZSxmLGcsaCxpLGosayxsPXAuYWpheFNldHVwKHt9LGMpLG09bC5jb250ZXh0fHxsLG49bSE9PWwmJihtLm5vZGVUeXBlfHxtIGluc3RhbmNlb2YgcCk/cChtKTpwLmV2ZW50LG89cC5EZWZlcnJlZCgpLHE9cC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iikscj1sLnN0YXR1c0NvZGV8fHt9LHQ9e30sdT17fSx2PTAsdz0iY2FuY2VsZWQiLHg9e3JlYWR5U3RhdGU6MCxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7aWYoIXYpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTthPXVbY109dVtjXXx8YSx0W2FdPWJ9cmV0dXJuIHRoaXN9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiB2PT09Mj9lOm51bGx9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBjO2lmKHY9PT0yKXtpZighZil7Zj17fTt3aGlsZShjPWNtLmV4ZWMoZSkpZltjWzFdLnRvTG93ZXJDYXNlKCldPWNbMl19Yz1mW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIGM9PT1iP251bGw6Y30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gdnx8KGwubWltZVR5cGU9YSksdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YXx8dyxnJiZnLmFib3J0KGEpLHkoMCxhKSx0aGlzfX07by5wcm9taXNlKHgpLHguc3VjY2Vzcz14LmRvbmUseC5lcnJvcj14LmZhaWwseC5jb21wbGV0ZT1xLmFkZCx4LnN0YXR1c0NvZGU9ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI7aWYodjwyKWZvcihiIGluIGEpcltiXT1bcltiXSxhW2JdXTtlbHNlIGI9YVt4LnN0YXR1c10seC5hbHdheXMoYil9cmV0dXJuIHRoaXN9LGwudXJsPSgoYXx8bC51cmwpKyIiKS5yZXBsYWNlKGNsLCIiKS5yZXBsYWNlKGNwLGNqWzFdKyIvLyIpLGwuZGF0YVR5cGVzPXAudHJpbShsLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkuc3BsaXQocyksbC5jcm9zc0RvbWFpbj09bnVsbCYmKGk9Y3QuZXhlYyhsLnVybC50b0xvd2VyQ2FzZSgpKXx8ITEsbC5jcm9zc0RvbWFpbj1pJiZpLmpvaW4oIjoiKSsoaVszXT8iIjppWzFdPT09Imh0dHA6Ij84MDo0NDMpIT09Y2ouam9pbigiOiIpKyhjalszXT8iIjpjalsxXT09PSJodHRwOiI/ODA6NDQzKSksbC5kYXRhJiZsLnByb2Nlc3NEYXRhJiZ0eXBlb2YgbC5kYXRhIT0ic3RyaW5nIiYmKGwuZGF0YT1wLnBhcmFtKGwuZGF0YSxsLnRyYWRpdGlvbmFsKSksY0EoY3YsbCxjLHgpO2lmKHY9PT0yKXJldHVybiB4O2o9bC5nbG9iYWwsbC50eXBlPWwudHlwZS50b1VwcGVyQ2FzZSgpLGwuaGFzQ29udGVudD0hY28udGVzdChsLnR5cGUpLGomJnAuYWN0aXZlKys9PT0wJiZwLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpO2lmKCFsLmhhc0NvbnRlbnQpe2wuZGF0YSYmKGwudXJsKz0oY3EudGVzdChsLnVybCk/IiYiOiI/IikrbC5kYXRhLGRlbGV0ZSBsLmRhdGEpLGQ9bC51cmw7aWYobC5jYWNoZT09PSExKXt2YXIgej1wLm5vdygpLEE9bC51cmwucmVwbGFjZShjcywiJDFfPSIreik7bC51cmw9QSsoQT09PWwudXJsPyhjcS50ZXN0KGwudXJsKT8iJiI6Ij8iKSsiXz0iK3o6IiIpfX0obC5kYXRhJiZsLmhhc0NvbnRlbnQmJmwuY29udGVudFR5cGUhPT0hMXx8Yy5jb250ZW50VHlwZSkmJnguc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixsLmNvbnRlbnRUeXBlKSxsLmlmTW9kaWZpZWQmJihkPWR8fGwudXJsLHAubGFzdE1vZGlmaWVkW2RdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixwLmxhc3RNb2RpZmllZFtkXSkscC5ldGFnW2RdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLHAuZXRhZ1tkXSkpLHguc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixsLmRhdGFUeXBlc1swXSYmbC5hY2NlcHRzW2wuZGF0YVR5cGVzWzBdXT9sLmFjY2VwdHNbbC5kYXRhVHlwZXNbMF1dKyhsLmRhdGFUeXBlc1swXSE9PSIqIj8iLCAiK2N4KyI7IHE9MC4wMSI6IiIpOmwuYWNjZXB0c1siKiJdKTtmb3IoayBpbiBsLmhlYWRlcnMpeC5zZXRSZXF1ZXN0SGVhZGVyKGssbC5oZWFkZXJzW2tdKTtpZighbC5iZWZvcmVTZW5kfHxsLmJlZm9yZVNlbmQuY2FsbChtLHgsbCkhPT0hMSYmdiE9PTIpe3c9ImFib3J0Ijtmb3IoayBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSl4W2tdKGxba10pO2c9Y0EoY3csbCxjLHgpO2lmKCFnKXkoLTEsIk5vIFRyYW5zcG9ydCIpO2Vsc2V7eC5yZWFkeVN0YXRlPTEsaiYmbi50cmlnZ2VyKCJhamF4U2VuZCIsW3gsbF0pLGwuYXN5bmMmJmwudGltZW91dD4wJiYoaD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eC5hYm9ydCgidGltZW91dCIpfSxsLnRpbWVvdXQpKTt0cnl7dj0xLGcuc2VuZCh0LHkpfWNhdGNoKEIpe2lmKHY8Mil5KC0xLEIpO2Vsc2UgdGhyb3cgQn19cmV0dXJuIHh9cmV0dXJuIHguYWJvcnQoKX0sYWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e319KTt2YXIgY0U9W10sY0Y9L1w/LyxjRz0vKD0pXD8oPz0mfCQpfFw/XD8vLGNIPXAubm93KCk7cC5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBhPWNFLnBvcCgpfHxwLmV4cGFuZG8rIl8iK2NIKys7cmV0dXJuIHRoaXNbYV09ITAsYX19KSxwLmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9uKGMsZCxlKXt2YXIgZixnLGgsaT1jLmRhdGEsaj1jLnVybCxrPWMuanNvbnAhPT0hMSxsPWsmJmNHLnRlc3QoaiksbT1rJiYhbCYmdHlwZW9mIGk9PSJzdHJpbmciJiYhKGMuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmY0cudGVzdChpKTtpZihjLmRhdGFUeXBlc1swXT09PSJqc29ucCJ8fGx8fG0pcmV0dXJuIGY9Yy5qc29ucENhbGxiYWNrPXAuaXNGdW5jdGlvbihjLmpzb25wQ2FsbGJhY2spP2MuanNvbnBDYWxsYmFjaygpOmMuanNvbnBDYWxsYmFjayxnPWFbZl0sbD9jLnVybD1qLnJlcGxhY2UoY0csIiQxIitmKTptP2MuZGF0YT1pLnJlcGxhY2UoY0csIiQxIitmKTprJiYoYy51cmwrPShjRi50ZXN0KGopPyImIjoiPyIpK2MuanNvbnArIj0iK2YpLGMuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBofHxwLmVycm9yKGYrIiB3YXMgbm90IGNhbGxlZCIpLGhbMF19LGMuZGF0YVR5cGVzWzBdPSJqc29uIixhW2ZdPWZ1bmN0aW9uKCl7aD1hcmd1bWVudHN9LGUuYWx3YXlzKGZ1bmN0aW9uKCl7YVtmXT1nLGNbZl0mJihjLmpzb25wQ2FsbGJhY2s9ZC5qc29ucENhbGxiYWNrLGNFLnB1c2goZikpLGgmJnAuaXNGdW5jdGlvbihnKSYmZyhoWzBdKSxoPWc9Yn0pLCJzY3JpcHQifSkscC5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi9qYXZhc2NyaXB0fGVjbWFzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe3JldHVybiBwLmdsb2JhbEV2YWwoYSksYX19fSkscC5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2EuY2FjaGU9PT1iJiYoYS5jYWNoZT0hMSksYS5jcm9zc0RvbWFpbiYmKGEudHlwZT0iR0VUIixhLmdsb2JhbD0hMSl9KSxwLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24oYSl7aWYoYS5jcm9zc0RvbWFpbil7dmFyIGMsZD1lLmhlYWR8fGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8ZS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZixnKXtjPWUuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksYy5hc3luYz0iYXN5bmMiLGEuc2NyaXB0Q2hhcnNldCYmKGMuY2hhcnNldD1hLnNjcmlwdENoYXJzZXQpLGMuc3JjPWEudXJsLGMub25sb2FkPWMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGEsZSl7aWYoZXx8IWMucmVhZHlTdGF0ZXx8L2xvYWRlZHxjb21wbGV0ZS8udGVzdChjLnJlYWR5U3RhdGUpKWMub25sb2FkPWMub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsZCYmYy5wYXJlbnROb2RlJiZkLnJlbW92ZUNoaWxkKGMpLGM9YixlfHxnKDIwMCwic3VjY2VzcyIpfSxkLmluc2VydEJlZm9yZShjLGQuZmlyc3RDaGlsZCl9LGFib3J0OmZ1bmN0aW9uKCl7YyYmYy5vbmxvYWQoMCwxKX19fX0pO3ZhciBjSSxjSj1hLkFjdGl2ZVhPYmplY3Q/ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gY0kpY0lbYV0oMCwxKX06ITEsY0s9MDtwLmFqYXhTZXR0aW5ncy54aHI9YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNMb2NhbCYmY0woKXx8Y00oKX06Y0wsZnVuY3Rpb24oYSl7cC5leHRlbmQocC5zdXBwb3J0LHthamF4OiEhYSxjb3JzOiEhYSYmIndpdGhDcmVkZW50aWFscyJpbiBhfSl9KHAuYWpheFNldHRpbmdzLnhocigpKSxwLnN1cHBvcnQuYWpheCYmcC5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGMpe2lmKCFjLmNyb3NzRG9tYWlufHxwLnN1cHBvcnQuY29ycyl7dmFyIGQ7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSxmKXt2YXIgZyxoLGk9Yy54aHIoKTtjLnVzZXJuYW1lP2kub3BlbihjLnR5cGUsYy51cmwsYy5hc3luYyxjLnVzZXJuYW1lLGMucGFzc3dvcmQpOmkub3BlbihjLnR5cGUsYy51cmwsYy5hc3luYyk7aWYoYy54aHJGaWVsZHMpZm9yKGggaW4gYy54aHJGaWVsZHMpaVtoXT1jLnhockZpZWxkc1toXTtjLm1pbWVUeXBlJiZpLm92ZXJyaWRlTWltZVR5cGUmJmkub3ZlcnJpZGVNaW1lVHlwZShjLm1pbWVUeXBlKSwhYy5jcm9zc0RvbWFpbiYmIWVbIlgtUmVxdWVzdGVkLVdpdGgiXSYmKGVbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTt0cnl7Zm9yKGggaW4gZSlpLnNldFJlcXVlc3RIZWFkZXIoaCxlW2hdKX1jYXRjaChqKXt9aS5zZW5kKGMuaGFzQ29udGVudCYmYy5kYXRhfHxudWxsKSxkPWZ1bmN0aW9uKGEsZSl7dmFyIGgsaixrLGwsbTt0cnl7aWYoZCYmKGV8fGkucmVhZHlTdGF0ZT09PTQpKXtkPWIsZyYmKGkub25yZWFkeXN0YXRlY2hhbmdlPXAubm9vcCxjSiYmZGVsZXRlIGNJW2ddKTtpZihlKWkucmVhZHlTdGF0ZSE9PTQmJmkuYWJvcnQoKTtlbHNle2g9aS5zdGF0dXMsaz1pLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLGw9e30sbT1pLnJlc3BvbnNlWE1MLG0mJm0uZG9jdW1lbnRFbGVtZW50JiYobC54bWw9bSk7dHJ5e2wudGV4dD1pLnJlc3BvbnNlVGV4dH1jYXRjaChhKXt9dHJ5e2o9aS5zdGF0dXNUZXh0fWNhdGNoKG4pe2o9IiJ9IWgmJmMuaXNMb2NhbCYmIWMuY3Jvc3NEb21haW4/aD1sLnRleHQ/MjAwOjQwNDpoPT09MTIyMyYmKGg9MjA0KX19fWNhdGNoKG8pe2V8fGYoLTEsbyl9bCYmZihoLGosbCxrKX0sYy5hc3luYz9pLnJlYWR5U3RhdGU9PT00P3NldFRpbWVvdXQoZCwwKTooZz0rK2NLLGNKJiYoY0l8fChjST17fSxwKGEpLnVubG9hZChjSikpLGNJW2ddPWQpLGkub25yZWFkeXN0YXRlY2hhbmdlPWQpOmQoKX0sYWJvcnQ6ZnVuY3Rpb24oKXtkJiZkKDAsMSl9fX19KTt2YXIgY04sY08sY1A9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGNRPW5ldyBSZWdFeHAoIl4oPzooWy0rXSk9fCkoIitxKyIpKFthLXolXSopJCIsImkiKSxjUj0vcXVldWVIb29rcyQvLGNTPVtjWV0sY1Q9eyIqIjpbZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9dGhpcy5jcmVhdGVUd2VlbihhLGIpLGY9Y1EuZXhlYyhiKSxnPWUuY3VyKCksaD0rZ3x8MCxpPTEsaj0yMDtpZihmKXtjPStmWzJdLGQ9ZlszXXx8KHAuY3NzTnVtYmVyW2FdPyIiOiJweCIpO2lmKGQhPT0icHgiJiZoKXtoPXAuY3NzKGUuZWxlbSxhLCEwKXx8Y3x8MTtkbyBpPWl8fCIuNSIsaD1oL2kscC5zdHlsZShlLmVsZW0sYSxoK2QpO3doaWxlKGkhPT0oaT1lLmN1cigpL2cpJiZpIT09MSYmLS1qKX1lLnVuaXQ9ZCxlLnN0YXJ0PWgsZS5lbmQ9ZlsxXT9oKyhmWzFdKzEpKmM6Y31yZXR1cm4gZX1dfTtwLkFuaW1hdGlvbj1wLmV4dGVuZChjVyx7dHdlZW5lcjpmdW5jdGlvbihhLGIpe3AuaXNGdW5jdGlvbihhKT8oYj1hLGE9WyIqIl0pOmE9YS5zcGxpdCgiICIpO3ZhciBjLGQ9MCxlPWEubGVuZ3RoO2Zvcig7ZDxlO2QrKyljPWFbZF0sY1RbY109Y1RbY118fFtdLGNUW2NdLnVuc2hpZnQoYil9LHByZWZpbHRlcjpmdW5jdGlvbihhLGIpe2I/Y1MudW5zaGlmdChhKTpjUy5wdXNoKGEpfX0pLHAuVHdlZW49Y1osY1oucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjWixpbml0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmVsZW09YSx0aGlzLnByb3A9Yyx0aGlzLmVhc2luZz1lfHwic3dpbmciLHRoaXMub3B0aW9ucz1iLHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1kLHRoaXMudW5pdD1mfHwocC5jc3NOdW1iZXJbY10/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBhPWNaLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBhJiZhLmdldD9hLmdldCh0aGlzKTpjWi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oYSl7dmFyIGIsYz1jWi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uP3RoaXMucG9zPWI9cC5lYXNpbmdbdGhpcy5lYXNpbmddKGEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmEsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9Yj1hLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSpiK3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLGMmJmMuc2V0P2Muc2V0KHRoaXMpOmNaLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LGNaLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1jWi5wcm90b3R5cGUsY1oucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBhLmVsZW1bYS5wcm9wXT09bnVsbHx8ISFhLmVsZW0uc3R5bGUmJmEuZWxlbS5zdHlsZVthLnByb3BdIT1udWxsPyhiPXAuY3NzKGEuZWxlbSxhLnByb3AsITEsIiIpLCFifHxiPT09ImF1dG8iPzA6Yik6YS5lbGVtW2EucHJvcF19LHNldDpmdW5jdGlvbihhKXtwLmZ4LnN0ZXBbYS5wcm9wXT9wLmZ4LnN0ZXBbYS5wcm9wXShhKTphLmVsZW0uc3R5bGUmJihhLmVsZW0uc3R5bGVbcC5jc3NQcm9wc1thLnByb3BdXSE9bnVsbHx8cC5jc3NIb29rc1thLnByb3BdKT9wLnN0eWxlKGEuZWxlbSxhLnByb3AsYS5ub3crYS51bml0KTphLmVsZW1bYS5wcm9wXT1hLm5vd319fSxjWi5wcm9wSG9va3Muc2Nyb2xsVG9wPWNaLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oYSl7YS5lbGVtLm5vZGVUeXBlJiZhLmVsZW0ucGFyZW50Tm9kZSYmKGEuZWxlbVthLnByb3BdPWEubm93KX19LHAuZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24oYSxiKXt2YXIgYz1wLmZuW2JdO3AuZm5bYl09ZnVuY3Rpb24oZCxlLGYpe3JldHVybiBkPT1udWxsfHx0eXBlb2YgZD09ImJvb2xlYW4ifHwhYSYmcC5pc0Z1bmN0aW9uKGQpJiZwLmlzRnVuY3Rpb24oZSk/Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKGMkKGIsITApLGQsZSxmKX19KSxwLmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmZpbHRlcihiWikuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9cC5pc0VtcHR5T2JqZWN0KGEpLGY9cC5zcGVlZChiLGMsZCksZz1mdW5jdGlvbigpe3ZhciBiPWNXKHRoaXMscC5leHRlbmQoe30sYSksZik7ZSYmYi5zdG9wKCEwKX07cmV0dXJuIGV8fGYucXVldWU9PT0hMT90aGlzLmVhY2goZyk6dGhpcy5xdWV1ZShmLnF1ZXVlLGcpfSxzdG9wOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1mdW5jdGlvbihhKXt2YXIgYj1hLnN0b3A7ZGVsZXRlIGEuc3RvcCxiKGQpfTtyZXR1cm4gdHlwZW9mIGEhPSJzdHJpbmciJiYoZD1jLGM9YSxhPWIpLGMmJmEhPT0hMSYmdGhpcy5xdWV1ZShhfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj0hMCxjPWEhPW51bGwmJmErInF1ZXVlSG9va3MiLGY9cC50aW1lcnMsZz1wLl9kYXRhKHRoaXMpO2lmKGMpZ1tjXSYmZ1tjXS5zdG9wJiZlKGdbY10pO2Vsc2UgZm9yKGMgaW4gZylnW2NdJiZnW2NdLnN0b3AmJmNSLnRlc3QoYykmJmUoZ1tjXSk7Zm9yKGM9Zi5sZW5ndGg7Yy0tOylmW2NdLmVsZW09PT10aGlzJiYoYT09bnVsbHx8ZltjXS5xdWV1ZT09PWEpJiYoZltjXS5hbmltLnN0b3AoZCksYj0hMSxmLnNwbGljZShjLDEpKTsoYnx8IWQpJiZwLmRlcXVldWUodGhpcyxhKX0pfX0pLHAuZWFjaCh7c2xpZGVEb3duOmMkKCJzaG93Iiksc2xpZGVVcDpjJCgiaGlkZSIpLHNsaWRlVG9nZ2xlOmMkKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7cC5mblthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxwLnNwZWVkPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hJiZ0eXBlb2YgYT09Im9iamVjdCI/cC5leHRlbmQoe30sYSk6e2NvbXBsZXRlOmN8fCFjJiZifHxwLmlzRnVuY3Rpb24oYSkmJmEsZHVyYXRpb246YSxlYXNpbmc6YyYmYnx8YiYmIXAuaXNGdW5jdGlvbihiKSYmYn07ZC5kdXJhdGlvbj1wLmZ4Lm9mZj8wOnR5cGVvZiBkLmR1cmF0aW9uPT0ibnVtYmVyIj9kLmR1cmF0aW9uOmQuZHVyYXRpb24gaW4gcC5meC5zcGVlZHM/cC5meC5zcGVlZHNbZC5kdXJhdGlvbl06cC5meC5zcGVlZHMuX2RlZmF1bHQ7aWYoZC5xdWV1ZT09bnVsbHx8ZC5xdWV1ZT09PSEwKWQucXVldWU9ImZ4IjtyZXR1cm4gZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7cC5pc0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZwLmRlcXVldWUodGhpcyxkLnF1ZXVlKX0sZH0scC5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihhKXtyZXR1cm4gYX0sc3dpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuLjUtTWF0aC5jb3MoYSpNYXRoLlBJKS8yfX0scC50aW1lcnM9W10scC5meD1jWi5wcm90b3R5cGUuaW5pdCxwLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPXAudGltZXJzLGM9MDtmb3IoO2M8Yi5sZW5ndGg7YysrKWE9YltjXSwhYSgpJiZiW2NdPT09YSYmYi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxwLmZ4LnN0b3AoKX0scC5meC50aW1lcj1mdW5jdGlvbihhKXthKCkmJnAudGltZXJzLnB1c2goYSkmJiFjTyYmKGNPPXNldEludGVydmFsKHAuZngudGljayxwLmZ4LmludGVydmFsKSl9LHAuZnguaW50ZXJ2YWw9MTMscC5meC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChjTyksY089bnVsbH0scC5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0scC5meC5zdGVwPXt9LHAuZXhwciYmcC5leHByLmZpbHRlcnMmJihwLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gcC5ncmVwKHAudGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofSk7dmFyIGNfPS9eKD86Ym9keXxodG1sKSQvaTtwLmZuLm9mZnNldD1mdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBhPT09Yj90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihiKXtwLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7dmFyIGMsZCxlLGYsZyxoLGksaj17dG9wOjAsbGVmdDowfSxrPXRoaXNbMF0sbD1rJiZrLm93bmVyRG9jdW1lbnQ7aWYoIWwpcmV0dXJuO3JldHVybihkPWwuYm9keSk9PT1rP3Aub2Zmc2V0LmJvZHlPZmZzZXQoayk6KGM9bC5kb2N1bWVudEVsZW1lbnQscC5jb250YWlucyhjLGspPyh0eXBlb2Ygay5nZXRCb3VuZGluZ0NsaWVudFJlY3QhPSJ1bmRlZmluZWQiJiYoaj1rLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxlPWRhKGwpLGY9Yy5jbGllbnRUb3B8fGQuY2xpZW50VG9wfHwwLGc9Yy5jbGllbnRMZWZ0fHxkLmNsaWVudExlZnR8fDAsaD1lLnBhZ2VZT2Zmc2V0fHxjLnNjcm9sbFRvcCxpPWUucGFnZVhPZmZzZXR8fGMuc2Nyb2xsTGVmdCx7dG9wOmoudG9wK2gtZixsZWZ0OmoubGVmdCtpLWd9KTpqKX0scC5vZmZzZXQ9e2JvZHlPZmZzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5vZmZzZXRUb3AsYz1hLm9mZnNldExlZnQ7cmV0dXJuIHAuc3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCYmKGIrPXBhcnNlRmxvYXQocC5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMrPXBhcnNlRmxvYXQocC5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCkse3RvcDpiLGxlZnQ6Y319LHNldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9cC5jc3MoYSwicG9zaXRpb24iKTtkPT09InN0YXRpYyImJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciBlPXAoYSksZj1lLm9mZnNldCgpLGc9cC5jc3MoYSwidG9wIiksaD1wLmNzcyhhLCJsZWZ0IiksaT0oZD09PSJhYnNvbHV0ZSJ8fGQ9PT0iZml4ZWQiKSYmcC5pbkFycmF5KCJhdXRvIixbZyxoXSk+LTEsaj17fSxrPXt9LGwsbTtpPyhrPWUucG9zaXRpb24oKSxsPWsudG9wLG09ay5sZWZ0KToobD1wYXJzZUZsb2F0KGcpfHwwLG09cGFyc2VGbG9hdChoKXx8MCkscC5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGYpKSxiLnRvcCE9bnVsbCYmKGoudG9wPWIudG9wLWYudG9wK2wpLGIubGVmdCE9bnVsbCYmKGoubGVmdD1iLmxlZnQtZi5sZWZ0K20pLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLGopOmUuY3NzKGopfX0scC5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pcmV0dXJuO3ZhciBhPXRoaXNbMF0sYj10aGlzLm9mZnNldFBhcmVudCgpLGM9dGhpcy5vZmZzZXQoKSxkPWNfLnRlc3QoYlswXS5ub2RlTmFtZSk/e3RvcDowLGxlZnQ6MH06Yi5vZmZzZXQoKTtyZXR1cm4gYy50b3AtPXBhcnNlRmxvYXQocC5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMubGVmdC09cGFyc2VGbG9hdChwLmNzcyhhLCJtYXJnaW5MZWZ0IikpfHwwLGQudG9wKz1wYXJzZUZsb2F0KHAuY3NzKGJbMF0sImJvcmRlclRvcFdpZHRoIikpfHwwLGQubGVmdCs9cGFyc2VGbG9hdChwLmNzcyhiWzBdLCJib3JkZXJMZWZ0V2lkdGgiKSl8fDAse3RvcDpjLnRvcC1kLnRvcCxsZWZ0OmMubGVmdC1kLmxlZnR9fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldFBhcmVudHx8ZS5ib2R5O3doaWxlKGEmJiFjXy50ZXN0KGEubm9kZU5hbWUpJiZwLmNzcyhhLCJwb3NpdGlvbiIpPT09InN0YXRpYyIpYT1hLm9mZnNldFBhcmVudDtyZXR1cm4gYXx8ZS5ib2R5fSl9fSkscC5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKGEsYyl7dmFyIGQ9L1kvLnRlc3QoYyk7cC5mblthXT1mdW5jdGlvbihlKXtyZXR1cm4gcC5hY2Nlc3ModGhpcyxmdW5jdGlvbihhLGUsZil7dmFyIGc9ZGEoYSk7aWYoZj09PWIpcmV0dXJuIGc/YyBpbiBnP2dbY106Zy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbZV06YVtlXTtnP2cuc2Nyb2xsVG8oZD9wKGcpLnNjcm9sbExlZnQoKTpmLGQ/ZjpwKGcpLnNjcm9sbFRvcCgpKTphW2VdPWZ9LGEsZSxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pLHAuZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGEsYyl7cC5lYWNoKHtwYWRkaW5nOiJpbm5lciIrYSxjb250ZW50OmMsIiI6Im91dGVyIithfSxmdW5jdGlvbihkLGUpe3AuZm5bZV09ZnVuY3Rpb24oZSxmKXt2YXIgZz1hcmd1bWVudHMubGVuZ3RoJiYoZHx8dHlwZW9mIGUhPSJib29sZWFuIiksaD1kfHwoZT09PSEwfHxmPT09ITA/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiBwLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGMsZCxlKXt2YXIgZjtyZXR1cm4gcC5pc1dpbmRvdyhjKT9jLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IithXTpjLm5vZGVUeXBlPT09OT8oZj1jLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChjLmJvZHlbInNjcm9sbCIrYV0sZlsic2Nyb2xsIithXSxjLmJvZHlbIm9mZnNldCIrYV0sZlsib2Zmc2V0IithXSxmWyJjbGllbnQiK2FdKSk6ZT09PWI/cC5jc3MoYyxkLGUsaCk6cC5zdHlsZShjLGQsZSxoKX0sYyxnP2U6YixnLG51bGwpfX0pfSksYS5qUXVlcnk9YS4kPXAsdHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZCYmZGVmaW5lLmFtZC5qUXVlcnkmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiBwfSl9KSh3aW5kb3cpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL2pxdWVyeS5sYXlvdXQuanMgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9qcXVlcnkubGF5b3V0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRkZDQ4NjcKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9qcXVlcnkubGF5b3V0LmpzCkBAIC0wLDAgKzEsNTQ4NiBAQAorLyoqCisgKiBAcHJlc2VydmUganF1ZXJ5LmxheW91dCAxLjMuMCAtIFJlbGVhc2UgQ2FuZGlkYXRlIDMwLjYyCisgKiAkRGF0ZTogMjAxMi0wOC0wNCAwODowMDowMCAoVGh1LCAyMyBBdWcgMjAxMikgJAorICogJFJldjogMzAzMDA2ICQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgCisgKiAgIEZhYnJpemlvIEJhbGxpYW5vIChodHRwOi8vd3d3LmZhYnJpemlvYmFsbGlhbm8ubmV0KQorICogICBLZXZpbiBEYWxtYW4gKGh0dHA6Ly9hbGxwcm8ubmV0KQorICoKKyAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sKQorICogYW5kIE1JVCAoaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHApIGxpY2Vuc2VzLgorICoKKyAqIENoYW5nZWxvZzogaHR0cDovL2xheW91dC5qcXVlcnktZGV2Lm5ldC9jaGFuZ2Vsb2cuY2ZtIzEuMy4wLnJjMzAuNjIKKyAqIE5PVEU6IFRoaXMgaXMgYSBzaG9ydC10ZXJtIHJlbGVhc2UgdG8gcGF0Y2ggYSBjb3VwbGUgb2YgYnVncy4KKyAqIFRoZXNlIGJ1Z3MgYXJlIGxpc3RlZCBhcyBvZmZpY2lhbGx5IGZpeGVkIGluIFJDMzAuNywgd2hpY2ggd2lsbCBiZSByZWxlYXNlZCBzaG9ydGx5LgorICoKKyAqIERvY3M6IGh0dHA6Ly9sYXlvdXQuanF1ZXJ5LWRldi5uZXQvZG9jdW1lbnRhdGlvbi5odG1sCisgKiBUaXBzOiBodHRwOi8vbGF5b3V0LmpxdWVyeS1kZXYubmV0L3RpcHMuaHRtbAorICogSGVscDogaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2pxdWVyeS11aS1sYXlvdXQKKyAqLworCisvKiBKYXZhRG9jIEluZm86IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vY2xvc3VyZS9jb21waWxlci9kb2NzL2pzLWZvci1jb21waWxlci5odG1sCisgKiB7IU9iamVjdH0Jbm9uLW51bGxhYmxlIHR5cGUgKG5ldmVyIE5VTEwpCisgKiB7P3N0cmluZ30JbnVsbGFibGUgdHlwZSAoc29tZXRpbWVzIE5VTEwpIC0gZGVmYXVsdCBmb3Ige09iamVjdH0KKyAqIHtudW1iZXI9fQlvcHRpb25hbCBwYXJhbWV0ZXIKKyAqIHsqfQkJCUFMTCB0eXBlcworICovCisKKy8vIE5PVEU6IEZvciBiZXN0IHJlYWRhYmlsaXR5LCB2aWV3IHdpdGggYSBmaXhlZC13aWR0aCBmb250IGFuZCB0YWJzIGVxdWFsIHRvIDQtY2hhcnMKKworOyhmdW5jdGlvbiAoJCkgeworCisvLyBhbGlhcyBNYXRoIG1ldGhvZHMgLSB1c2VkIGEgbG90IQordmFyCW1pbgkJPSBNYXRoLm1pbgorLAltYXgJCT0gTWF0aC5tYXgKKywJcm91bmQJPSBNYXRoLmZsb29yCisKKywJaXNTdHIJPSAgZnVuY3Rpb24gKHYpIHsgcmV0dXJuICQudHlwZSh2KSA9PT0gInN0cmluZyI7IH0KKworLAlydW5QbHVnaW5DYWxsYmFja3MgPSBmdW5jdGlvbiAoSW5zdGFuY2UsIGFfZm4pIHsKKwkJaWYgKCQuaXNBcnJheShhX2ZuKSkKKwkJCWZvciAodmFyIGk9MCwgYz1hX2ZuLmxlbmd0aDsgaTxjOyBpKyspIHsKKwkJCQl2YXIgZm4gPSBhX2ZuW2ldOworCQkJCXRyeSB7CisJCQkJCWlmIChpc1N0cihmbikpIC8vICduYW1lJyBvZiBhIGZ1bmN0aW9uCisJCQkJCQlmbiA9IGV2YWwoZm4pOworCQkJCQlpZiAoJC5pc0Z1bmN0aW9uKGZuKSkKKwkJCQkJCWZuKCBJbnN0YW5jZSApOworCQkJCX0gY2F0Y2ggKGV4KSB7fQorCQkJfQorCX0KKworOworCisKKy8qCisgKglHRU5FUklDICQubGF5b3V0IE1FVEhPRFMgLSB1c2VkIGJ5IGFsbCBsYXlvdXRzCisgKi8KKyQubGF5b3V0ID0geworCisJdmVyc2lvbjoJIjEuMy5yYzMwLjYyIgorLAlyZXZpc2lvbjoJMC4wMzMwMDYgLy8gMS4zLjAgZmluYWwgPSAxLjAzMDAgLSBtYWpvcihuKykubWlub3Iobm4pK3BhdGNoKG5uKykKKworCS8vIGNhbiB1cGRhdGUgY29kZSBoZXJlIGlmICQuYnJvd3NlciBpcyBwaGFzZWQgb3V0CissCWJyb3dzZXI6IHsKKwkJbW96aWxsYToJISEkLmJyb3dzZXIubW96aWxsYQorCSwJd2Via2l0OgkJISEkLmJyb3dzZXIud2Via2l0IHx8ICEhJC5icm93c2VyLnNhZmFyaSAvLyB3ZWJraXQgPSBqUSAxLjQKKwksCW1zaWU6CQkhISQuYnJvd3Nlci5tc2llCisJLAlpc0lFNjoJCSQuYnJvd3Nlci5tc2llICYmICQuYnJvd3Nlci52ZXJzaW9uID09IDYKKwksCWJveE1vZGVsOgkkLnN1cHBvcnQuYm94TW9kZWwgIT09IGZhbHNlIHx8ICEkLmJyb3dzZXIubXNpZSAvLyBPTkxZIElFIHJldmVydHMgdG8gb2xkIGJveC1tb2RlbCAtIHVwZGF0ZSBmb3Igb2xkZXIgalEgb25SZWFkeQorCSwJdmVyc2lvbjoJJC5icm93c2VyLnZlcnNpb24gLy8gbm90IHVzZWQgaW4gTGF5b3V0IGNvcmUsIGJ1dCBtYXkgYmUgdXNlZCBieSBwbHVnaW5zCisJfQorCisJLy8gKlBSRURFRklORUQqIEVGRkVDVFMgJiBERUZBVUxUUyAKKwkvLyBNVVNUIGxpc3QgZWZmZWN0IGhlcmUgLSBPUiBNVVNUIHNldCBhbiBmeFNldHRpbmdzIG9wdGlvbiAoY2FuIGJlIGFuIGVtcHR5IGhhc2g6IHt9KQorLAllZmZlY3RzOiB7CisKKwkvLwlQYW5lIE9wZW4vQ2xvc2UgQW5pbWF0aW9ucworCQlzbGlkZTogeworCQkJYWxsOgl7IGR1cmF0aW9uOiAgImZhc3QiCX0gLy8gZWc6IGR1cmF0aW9uOiAxMDAwLCBlYXNpbmc6ICJlYXNlT3V0Qm91bmNlIgorCQksCW5vcnRoOgl7IGRpcmVjdGlvbjogInVwIgl9CisJCSwJc291dGg6CXsgZGlyZWN0aW9uOiAiZG93biIJfQorCQksCWVhc3Q6CXsgZGlyZWN0aW9uOiAicmlnaHQifQorCQksCXdlc3Q6CXsgZGlyZWN0aW9uOiAibGVmdCIJfQorCQl9CisJLAlkcm9wOiB7CisJCQlhbGw6CXsgZHVyYXRpb246ICAic2xvdyIJfQorCQksCW5vcnRoOgl7IGRpcmVjdGlvbjogInVwIgl9CisJCSwJc291dGg6CXsgZGlyZWN0aW9uOiAiZG93biIJfQorCQksCWVhc3Q6CXsgZGlyZWN0aW9uOiAicmlnaHQifQorCQksCXdlc3Q6CXsgZGlyZWN0aW9uOiAibGVmdCIJfQorCQl9CisJLAlzY2FsZTogeworCQkJYWxsOgl7IGR1cmF0aW9uOgkiZmFzdCIJfQorCQl9CisJLy8JdGhlc2UgYXJlIG5vdCByZWNvbW1lbmRlZCwgYnV0IGNhbiBiZSB1c2VkCisJLAlibGluZDoJCXt9CisJLAljbGlwOgkJe30KKwksCWV4cGxvZGU6CXt9CisJLAlmYWRlOgkJe30KKwksCWZvbGQ6CQl7fQorCSwJcHVmZjoJCXt9CisKKwkvLwlQYW5lIFJlc2l6ZSBBbmltYXRpb25zCisJLAlzaXplOiB7CisJCQlhbGw6CXsgZWFzaW5nOgkic3dpbmciCX0KKwkJfQorCX0KKworCS8vIElOVEVSTkFMIENPTkZJRyBEQVRBIC0gRE8gTk9UIENIQU5HRSBUSElTIQorLAljb25maWc6IHsKKwkJb3B0aW9uUm9vdEtleXM6CSJlZmZlY3RzLHBhbmVzLG5vcnRoLHNvdXRoLHdlc3QsZWFzdCxjZW50ZXIiLnNwbGl0KCIsIikKKwksCWFsbFBhbmVzOgkJIm5vcnRoLHNvdXRoLHdlc3QsZWFzdCxjZW50ZXIiLnNwbGl0KCIsIikKKwksCWJvcmRlclBhbmVzOgkibm9ydGgsc291dGgsd2VzdCxlYXN0Ii5zcGxpdCgiLCIpCisJLAlvcHBvc2l0ZUVkZ2U6IHsKKwkJCW5vcnRoOgkic291dGgiCisJCSwJc291dGg6CSJub3J0aCIKKwkJLAllYXN0OiAJIndlc3QiCisJCSwJd2VzdDogCSJlYXN0IgorCQl9CisJLy8Jb2Zmc2NyZWVuIGRhdGEKKwksCW9mZnNjcmVlbkNTUzoJeyBsZWZ0OiAiLTk5OTk5cHgiLCByaWdodDogImF1dG8iIH0gLy8gdXNlZCBieSBoaWRlL2Nsb3NlIGlmIHVzZU9mZnNjcmVlbkNsb3NlPXRydWUKKwksCW9mZnNjcmVlblJlc2V0Ogkib2Zmc2NyZWVuUmVzZXQiIC8vIGtleSB1c2VkIGZvciBkYXRhCisJLy8JQ1NTIHVzZWQgaW4gbXVsdGlwbGUgcGxhY2VzCisJLAloaWRkZW46CQl7IHZpc2liaWxpdHk6ICJoaWRkZW4iIH0KKwksCXZpc2libGU6CXsgdmlzaWJpbGl0eTogInZpc2libGUiIH0KKwkvLwlsYXlvdXQgZWxlbWVudCBzZXR0aW5ncworCSwJcmVzaXplcnM6IHsKKwkJCWNzc1JlcTogeworCQkJCXBvc2l0aW9uOiAJImFic29sdXRlIgorCQkJLAlwYWRkaW5nOiAJMAorCQkJLAltYXJnaW46IAkwCisJCQksCWZvbnRTaXplOgkiMXB4IgorCQkJLAl0ZXh0QWxpZ246CSJsZWZ0IgkvLyB0byBjb3VudGVyLWFjdCAiY2VudGVyIiBhbGlnbm1lbnQhCisJCQksCW92ZXJmbG93OiAJImhpZGRlbiIgLy8gcHJldmVudCB0b2dnbGVyLWJ1dHRvbiBmcm9tIG92ZXJmbG93aW5nCisJCQkvLwlTRUUgJC5sYXlvdXQuZGVmYXVsdHMuekluZGV4ZXMucmVzaXplcl9ub3JtYWwKKwkJCX0KKwkJLAljc3NEZW1vOiB7IC8vIERFTU8gQ1NTIC0gYXBwbGllZCBpZjogb3B0aW9ucy5QQU5FLmFwcGx5RGVtb1N0eWxlcz10cnVlCisJCQkJYmFja2dyb3VuZDogIiNEREQiCisJCQksCWJvcmRlcjoJCSJub25lIgorCQkJfQorCQl9CisJLAl0b2dnbGVyczogeworCQkJY3NzUmVxOiB7CisJCQkJcG9zaXRpb246IAkiYWJzb2x1dGUiCisJCQksCWRpc3BsYXk6IAkiYmxvY2siCisJCQksCXBhZGRpbmc6IAkwCisJCQksCW1hcmdpbjogCTAKKwkJCSwJb3ZlcmZsb3c6CSJoaWRkZW4iCisJCQksCXRleHRBbGlnbjoJImNlbnRlciIKKwkJCSwJZm9udFNpemU6CSIxcHgiCisJCQksCWN1cnNvcjogCSJwb2ludGVyIgorCQkJLAl6SW5kZXg6IAkxCisJCQl9CisJCSwJY3NzRGVtbzogeyAvLyBERU1PIENTUyAtIGFwcGxpZWQgaWY6IG9wdGlvbnMuUEFORS5hcHBseURlbW9TdHlsZXM9dHJ1ZQorCQkJCWJhY2tncm91bmQ6ICIjQUFBIgorCQkJfQorCQl9CisJLAljb250ZW50OiB7CisJCQljc3NSZXE6IHsKKwkJCQlwb3NpdGlvbjoJInJlbGF0aXZlIiAvKiBjb250YWluIGZsb2F0ZWQgb3IgcG9zaXRpb25lZCBlbGVtZW50cyAqLworCQkJfQorCQksCWNzc0RlbW86IHsgLy8gREVNTyBDU1MgLSBhcHBsaWVkIGlmOiBvcHRpb25zLlBBTkUuYXBwbHlEZW1vU3R5bGVzPXRydWUKKwkJCQlvdmVyZmxvdzoJImF1dG8iCisJCQksCXBhZGRpbmc6CSIxMHB4IgorCQkJfQorCQksCWNzc0RlbW9QYW5lOiB7IC8vIERFTU8gQ1NTIC0gUkVNT1ZFIHNjcm9sbGluZyBmcm9tICdwYW5lJyB3aGVuIGl0IGhhcyBhIGNvbnRlbnQtZGl2CisJCQkJb3ZlcmZsb3c6CSJoaWRkZW4iCisJCQksCXBhZGRpbmc6CTAKKwkJCX0KKwkJfQorCSwJcGFuZXM6IHsgLy8gZGVmYXVsdHMgZm9yIEFMTCBwYW5lcyAtIG92ZXJyaWRkZW4gYnkgJ3Blci1wYW5lIHNldHRpbmdzJyBiZWxvdworCQkJY3NzUmVxOiB7CisJCQkJcG9zaXRpb246IAkiYWJzb2x1dGUiCisJCQksCW1hcmdpbjoJCTAKKwkJCS8vCSQubGF5b3V0LmRlZmF1bHRzLnpJbmRleGVzLnBhbmVfbm9ybWFsCisJCQl9CisJCSwJY3NzRGVtbzogeyAvLyBERU1PIENTUyAtIGFwcGxpZWQgaWY6IG9wdGlvbnMuUEFORS5hcHBseURlbW9TdHlsZXM9dHJ1ZQorCQkJCXBhZGRpbmc6CSIxMHB4IgorCQkJLAliYWNrZ3JvdW5kOgkiI0ZGRiIKKwkJCSwJYm9yZGVyOgkJIjFweCBzb2xpZCAjQkJCIgorCQkJLAlvdmVyZmxvdzoJImF1dG8iCisJCQl9CisJCX0KKwksCW5vcnRoOiB7CisJCQlzaWRlOgkJCSJUb3AiCisJCSwJc2l6ZVR5cGU6CQkiSGVpZ2h0IgorCQksCWRpcjoJCQkiaG9yeiIKKwkJLAljc3NSZXE6IHsKKwkJCQl0b3A6IAkJMAorCQkJLAlib3R0b206IAkiYXV0byIKKwkJCSwJbGVmdDogCQkwCisJCQksCXJpZ2h0OiAJCTAKKwkJCSwJd2lkdGg6IAkJImF1dG8iCisJCQkvLwloZWlnaHQ6IAlEWU5BTUlDCisJCQl9CisJCX0KKwksCXNvdXRoOiB7CisJCQlzaWRlOgkJCSJCb3R0b20iCisJCSwJc2l6ZVR5cGU6CQkiSGVpZ2h0IgorCQksCWRpcjoJCQkiaG9yeiIKKwkJLAljc3NSZXE6IHsKKwkJCQl0b3A6IAkJImF1dG8iCisJCQksCWJvdHRvbTogCTAKKwkJCSwJbGVmdDogCQkwCisJCQksCXJpZ2h0OiAJCTAKKwkJCSwJd2lkdGg6IAkJImF1dG8iCisJCQkvLwloZWlnaHQ6IAlEWU5BTUlDCisJCQl9CisJCX0KKwksCWVhc3Q6IHsKKwkJCXNpZGU6CQkJIlJpZ2h0IgorCQksCXNpemVUeXBlOgkJIldpZHRoIgorCQksCWRpcjoJCQkidmVydCIKKwkJLAljc3NSZXE6IHsKKwkJCQlsZWZ0OiAJCSJhdXRvIgorCQkJLAlyaWdodDogCQkwCisJCQksCXRvcDogCQkiYXV0byIgLy8gRFlOQU1JQworCQkJLAlib3R0b206IAkiYXV0byIgLy8gRFlOQU1JQworCQkJLAloZWlnaHQ6IAkiYXV0byIKKwkJCS8vCXdpZHRoOiAJCURZTkFNSUMKKwkJCX0KKwkJfQorCSwJd2VzdDogeworCQkJc2lkZToJCQkiTGVmdCIKKwkJLAlzaXplVHlwZToJCSJXaWR0aCIKKwkJLAlkaXI6CQkJInZlcnQiCisJCSwJY3NzUmVxOiB7CisJCQkJbGVmdDogCQkwCisJCQksCXJpZ2h0OiAJCSJhdXRvIgorCQkJLAl0b3A6IAkJImF1dG8iIC8vIERZTkFNSUMKKwkJCSwJYm90dG9tOiAJImF1dG8iIC8vIERZTkFNSUMKKwkJCSwJaGVpZ2h0OiAJImF1dG8iCisJCQkvLwl3aWR0aDogCQlEWU5BTUlDCisJCQl9CisJCX0KKwksCWNlbnRlcjogeworCQkJZGlyOgkJCSJjZW50ZXIiCisJCSwJY3NzUmVxOiB7CisJCQkJbGVmdDogCQkiYXV0byIgLy8gRFlOQU1JQworCQkJLAlyaWdodDogCQkiYXV0byIgLy8gRFlOQU1JQworCQkJLAl0b3A6IAkJImF1dG8iIC8vIERZTkFNSUMKKwkJCSwJYm90dG9tOiAJImF1dG8iIC8vIERZTkFNSUMKKwkJCSwJaGVpZ2h0OiAJImF1dG8iCisJCQksCXdpZHRoOiAJCSJhdXRvIgorCQkJfQorCQl9CisJfQorCisJLy8gQ0FMTEJBQ0sgRlVOQ1RJT04gTkFNRVNQQUNFIC0gdXNlZCB0byBzdG9yZSByZXVzYWJsZSBjYWxsYmFjayBmdW5jdGlvbnMKKywJY2FsbGJhY2tzOiB7fQorCissCWdldFBhcmVudFBhbmVFbGVtOiBmdW5jdGlvbiAoZWwpIHsKKwkJLy8gbXVzdCBwYXNzIGVpdGhlciBhIGNvbnRhaW5lciBvciBwYW5lIGVsZW1lbnQKKwkJdmFyICRlbCA9ICQoZWwpCisJCSwJbGF5b3V0ID0gJGVsLmRhdGEoImxheW91dCIpIHx8ICRlbC5kYXRhKCJwYXJlbnRMYXlvdXQiKTsKKwkJaWYgKGxheW91dCkgeworCQkJdmFyICRjb250ID0gbGF5b3V0LmNvbnRhaW5lcjsKKwkJCS8vIHNlZSBpZiB0aGlzIGNvbnRhaW5lciBpcyBkaXJlY3RseS1uZXN0ZWQgaW5zaWRlIGFuIG91dGVyLXBhbmUKKwkJCWlmICgkY29udC5kYXRhKCJsYXlvdXRQYW5lIikpIHJldHVybiAkY29udDsKKwkJCXZhciAkcGFuZSA9ICRjb250LmNsb3Nlc3QoIi4iKyAkLmxheW91dC5kZWZhdWx0cy5wYW5lcy5wYW5lQ2xhc3MpOworCQkJLy8gaWYgYSBwYW5lIHdhcyBmb3VuZCwgcmV0dXJuIGl0CisJCQlpZiAoJHBhbmUuZGF0YSgibGF5b3V0UGFuZSIpKSByZXR1cm4gJHBhbmU7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCissCWdldFBhcmVudFBhbmVJbnN0YW5jZTogZnVuY3Rpb24gKGVsKSB7CisJCS8vIG11c3QgcGFzcyBlaXRoZXIgYSBjb250YWluZXIgb3IgcGFuZSBlbGVtZW50CisJCXZhciAkcGFuZSA9ICQubGF5b3V0LmdldFBhcmVudFBhbmVFbGVtKGVsKTsKKwkJcmV0dXJuICRwYW5lID8gJHBhbmUuZGF0YSgibGF5b3V0UGFuZSIpIDogbnVsbDsKKwl9CisKKywJZ2V0UGFyZW50TGF5b3V0SW5zdGFuY2U6IGZ1bmN0aW9uIChlbCkgeworCQkvLyBtdXN0IHBhc3MgZWl0aGVyIGEgY29udGFpbmVyIG9yIHBhbmUgZWxlbWVudAorCQl2YXIgJHBhbmUgPSAkLmxheW91dC5nZXRQYXJlbnRQYW5lRWxlbShlbCk7CisJCXJldHVybiAkcGFuZSA/ICRwYW5lLmRhdGEoInBhcmVudExheW91dCIpIDogbnVsbDsKKwl9CisKKywJZ2V0RXZlbnRPYmplY3Q6IGZ1bmN0aW9uIChldnQpIHsKKwkJcmV0dXJuIHR5cGVvZiBldnQgPT09ICJvYmplY3QiICYmIGV2dC5zdG9wUHJvcGFnYXRpb24gPyBldnQgOiBudWxsOworCX0KKywJcGFyc2VQYW5lTmFtZTogZnVuY3Rpb24gKGV2dF9vcl9wYW5lKSB7CisJCS8vIGdldEV2ZW50T2JqZWN0KCkgYXV0b21hdGljYWxseSBjYWxscyAuc3RvcFByb3BhZ2F0aW9uKCksIFdISUNIIE1VU1QgQkUgRE9ORSEKKwkJdmFyIGV2dCA9ICQubGF5b3V0LmdldEV2ZW50T2JqZWN0KCBldnRfb3JfcGFuZSApOworCQlpZiAoZXZ0KSB7CisJCQkvLyBBTFdBWVMgc3RvcCBwcm9wYWdhdGlvbiBvZiBldmVudHMgdHJpZ2dlcmVkIGluIExheW91dCEKKwkJCWV2dC5zdG9wUHJvcGFnYXRpb24oKTsKKwkJCXJldHVybiAkKHRoaXMpLmRhdGEoImxheW91dEVkZ2UiKTsKKwkJfQorCQllbHNlCisJCQlyZXR1cm4gZXZ0X29yX3BhbmU7CisJfQorCisKKwkvLyBMQVlPVVQtUExVR0lOIFJFR0lTVFJBVElPTgorCS8vIG1vcmUgcGx1Z2lucyBjYW4gYWRkZWQgYmV5b25kIHRoaXMgZGVmYXVsdCBsaXN0CissCXBsdWdpbnM6IHsKKwkJZHJhZ2dhYmxlOgkJISEkLmZuLmRyYWdnYWJsZSAvLyByZXNpemluZworCSwJZWZmZWN0czogeworCQkJY29yZToJCSEhJC5lZmZlY3RzCQkvLyBhbmltaW1hdGlvbnMgKHNwZWNpZmljIGVmZmVjdHMgdGVzdGVkIGJ5IGluaXRPcHRpb25zKQorCQksCXNsaWRlOgkJJC5lZmZlY3RzICYmICQuZWZmZWN0cy5zbGlkZSAvLyBkZWZhdWx0IGVmZmVjdAorCQl9CisJfQorCisvLwlhcnJheXMgb2YgcGx1Z2luIG9yIG90aGVyIG1ldGhvZHMgdG8gYmUgdHJpZ2dlcmVkIGZvciBldmVudHMgaW4gKmVhY2ggbGF5b3V0KiAtIHdpbGwgYmUgcGFzc2VkICdJbnN0YW5jZScKKywJb25DcmVhdGU6CVtdCS8vIHJ1bnMgd2hlbiBsYXlvdXQgaXMganVzdCBzdGFydGluZyB0byBiZSBjcmVhdGVkIC0gcmlnaHQgYWZ0ZXIgb3B0aW9ucyBhcmUgc2V0CissCW9uTG9hZDoJCVtdCS8vIHJ1bnMgYWZ0ZXIgbGF5b3V0IGNvbnRhaW5lciBhbmQgZ2xvYmFsIGV2ZW50cyBpbml0LCBidXQgYmVmb3JlIGluaXRQYW5lcyBpcyBjYWxsZWQKKywJb25SZWFkeToJW10JLy8gcnVucyBhZnRlciBpbml0aWFsaXphdGlvbiAqY29tcGxldGVzKiAtIGllLCBhZnRlciBpbml0UGFuZXMgY29tcGxldGVzIHN1Y2Nlc3NmdWxseQorLAlvbkRlc3Ryb3k6CVtdCS8vIHJ1bnMgYWZ0ZXIgbGF5b3V0IGlzIGRlc3Ryb3llZAorLAlvblVubG9hZDoJW10JLy8gcnVucyBhZnRlciBsYXlvdXQgaXMgZGVzdHJveWVkIE9SIHdoZW4gcGFnZSB1bmxvYWRzCissCWFmdGVyT3BlbjoJW10JLy8gcnVucyBhZnRlciBzZXRBc09wZW4oKSBjb21wbGV0ZXMKKywJYWZ0ZXJDbG9zZToJW10JLy8gcnVucyBhZnRlciBzZXRBc0Nsb3NlZCgpIGNvbXBsZXRlcworCisJLyoKKwkqCUdFTkVSSUMgVVRJTElUWSBNRVRIT0RTCisJKi8KKworCS8vIGNhbGN1bGF0ZSBhbmQgcmV0dXJuIHRoZSBzY3JvbGxiYXIgd2lkdGgsIGFzIGFuIGludGVnZXIKKywJc2Nyb2xsYmFyV2lkdGg6CQlmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3cuc2Nyb2xsYmFyV2lkdGggIHx8ICQubGF5b3V0LmdldFNjcm9sbGJhclNpemUoJ3dpZHRoJyk7IH0KKywJc2Nyb2xsYmFySGVpZ2h0OglmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3cuc2Nyb2xsYmFySGVpZ2h0IHx8ICQubGF5b3V0LmdldFNjcm9sbGJhclNpemUoJ2hlaWdodCcpOyB9CissCWdldFNjcm9sbGJhclNpemU6CWZ1bmN0aW9uIChkaW0pIHsKKwkJdmFyICRjCT0gJCgnPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IC0xMDAwMHB4OyBsZWZ0OiAtMTAwMDBweDsgd2lkdGg6IDEwMHB4OyBoZWlnaHQ6IDEwMHB4OyBvdmVyZmxvdzogc2Nyb2xsOyI+PC9kaXY+JykuYXBwZW5kVG8oImJvZHkiKTsKKwkJdmFyIGQJPSB7IHdpZHRoOiAkYy53aWR0aCgpIC0gJGNbMF0uY2xpZW50V2lkdGgsIGhlaWdodDogJGMuaGVpZ2h0KCkgLSAkY1swXS5jbGllbnRIZWlnaHQgfTsKKwkJJGMucmVtb3ZlKCk7CisJCXdpbmRvdy5zY3JvbGxiYXJXaWR0aAk9IGQud2lkdGg7CisJCXdpbmRvdy5zY3JvbGxiYXJIZWlnaHQJPSBkLmhlaWdodDsKKwkJcmV0dXJuIGRpbS5tYXRjaCgvXih3aWR0aHxoZWlnaHQpJC8pID8gZFtkaW1dIDogZDsKKwl9CisKKworCS8qKgorCSogUmV0dXJucyBoYXNoIGNvbnRhaW5lciAnZGlzcGxheScgYW5kICd2aXNpYmlsaXR5JworCSoKKwkqIEBzZWUJJC5zd2FwKCkgLSBzd2FwcyBDU1MsIHJ1bnMgY2FsbGJhY2ssIHJlc2V0cyBDU1MKKwkqLworLAlzaG93SW52aXNpYmx5OiBmdW5jdGlvbiAoJEUsIGZvcmNlKSB7CisJCWlmICgkRSAmJiAkRS5sZW5ndGggJiYgKGZvcmNlIHx8ICRFLmNzcygnZGlzcGxheScpID09PSAibm9uZSIpKSB7IC8vIG9ubHkgaWYgbm90ICphbHJlYWR5IGhpZGRlbioKKwkJCXZhciBzID0gJEVbMF0uc3R5bGUKKwkJCQkvLyBzYXZlIE9OTFkgdGhlICdzdHlsZScgcHJvcHMgYmVjYXVzZSB0aGF0IGlzIHdoYXQgd2UgbXVzdCByZXN0b3JlCisJCQksCUNTUyA9IHsgZGlzcGxheTogcy5kaXNwbGF5IHx8ICcnLCB2aXNpYmlsaXR5OiBzLnZpc2liaWxpdHkgfHwgJycgfTsKKwkJCS8vIHNob3cgZWxlbWVudCAnaW52aXNpYmx5JyBzbyBjYW4gYmUgbWVhc3VyZWQKKwkJCSRFLmNzcyh7IGRpc3BsYXk6ICJibG9jayIsIHZpc2liaWxpdHk6ICJoaWRkZW4iIH0pOworCQkJcmV0dXJuIENTUzsKKwkJfQorCQlyZXR1cm4ge307CisJfQorCisJLyoqCisJKiBSZXR1cm5zIGRhdGEgZm9yIHNldHRpbmcgc2l6ZSBvZiBhbiBlbGVtZW50IChjb250YWluZXIgb3IgYSBwYW5lKS4KKwkqCisJKiBAc2VlICBfY3JlYXRlKCksIG9uV2luZG93UmVzaXplKCkgZm9yIGNvbnRhaW5lciwgcGx1cyBvdGhlcnMgZm9yIHBhbmUKKwkqIEByZXR1cm4gSlNPTiAgUmV0dXJucyBhIGhhc2ggb2YgYWxsIGRpbWVuc2lvbnM6IHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCwgb3V0ZXJXaWR0aCwgaW5uZXJIZWlnaHQsIGV0YworCSovCissCWdldEVsZW1lbnREaW1lbnNpb25zOiBmdW5jdGlvbiAoJEUpIHsKKwkJdmFyCisJCQlkCT0ge30JCQkvLyBkaW1lbnNpb25zIGhhc2gKKwkJLAl4CT0gZC5jc3MgPSB7fQkvLyBDU1MgaGFzaAorCQksCWkJPSB7fQkJCS8vIFRFTVAgaW5zZXRzCisJCSwJYiwgcAkJCQkvLyBURU1QIGJvcmRlciwgcGFkZGluZworCQksCU4JPSAkLmxheW91dC5jc3NOdW0KKwkJLAlvZmYgPSAkRS5vZmZzZXQoKQorCQk7CisJCWQub2Zmc2V0TGVmdCA9IG9mZi5sZWZ0OworCQlkLm9mZnNldFRvcCAgPSBvZmYudG9wOworCisJCSQuZWFjaCgiTGVmdCxSaWdodCxUb3AsQm90dG9tIi5zcGxpdCgiLCIpLCBmdW5jdGlvbiAoaWR4LCBlKSB7IC8vIGUgPSBlZGdlCisJCQliID0geFsiYm9yZGVyIiArIGVdID0gJC5sYXlvdXQuYm9yZGVyV2lkdGgoJEUsIGUpOworCQkJcCA9IHhbInBhZGRpbmciKyBlXSA9ICQubGF5b3V0LmNzc051bSgkRSwgInBhZGRpbmciK2UpOworCQkJaVtlXSA9IGIgKyBwOyAvLyB0b3RhbCBvZmZzZXQgb2YgY29udGVudCBmcm9tIG91dGVyIHNpZGUKKwkJCWRbImluc2V0IisgZV0gPSBwOwkvLyBlZzogaW5zZXRMZWZ0ID0gcGFkZGluZ0xlZnQKKwkJfSk7CisKKwkJZC5vZmZzZXRXaWR0aAk9ICRFLmlubmVyV2lkdGgoKTsJLy8gb2Zmc2V0V2lkdGggaXMgdXNlZCBpbiBjYWxjIHdoZW4gZG9pbmcgbWFudWFsIHJlc2l6ZQorCQlkLm9mZnNldEhlaWdodAk9ICRFLmlubmVySGVpZ2h0KCk7CS8vIGRpdHRvCisJCWQub3V0ZXJXaWR0aAk9ICRFLm91dGVyV2lkdGgoKTsKKwkJZC5vdXRlckhlaWdodAk9ICRFLm91dGVySGVpZ2h0KCk7CisJCWQuaW5uZXJXaWR0aAk9IG1heCgwLCBkLm91dGVyV2lkdGggIC0gaS5MZWZ0IC0gaS5SaWdodCk7CisJCWQuaW5uZXJIZWlnaHQJPSBtYXgoMCwgZC5vdXRlckhlaWdodCAtIGkuVG9wICAtIGkuQm90dG9tKTsKKworCQl4LndpZHRoCQk9ICRFLndpZHRoKCk7CisJCXguaGVpZ2h0CT0gJEUuaGVpZ2h0KCk7CisJCXgudG9wCQk9IE4oJEUsInRvcCIsdHJ1ZSk7CisJCXguYm90dG9tCT0gTigkRSwiYm90dG9tIix0cnVlKTsKKwkJeC5sZWZ0CQk9IE4oJEUsImxlZnQiLHRydWUpOworCQl4LnJpZ2h0CQk9IE4oJEUsInJpZ2h0Iix0cnVlKTsKKworCQkvL2QudmlzaWJsZQk9ICRFLmlzKCI6dmlzaWJsZSIpOy8vICYmIHgud2lkdGggPiAwICYmIHguaGVpZ2h0ID4gMDsKKworCQlyZXR1cm4gZDsKKwl9CisKKywJZ2V0RWxlbWVudENTUzogZnVuY3Rpb24gKCRFLCBsaXN0KSB7CisJCXZhcgorCQkJQ1NTCT0ge30KKwkJLAlzdHlsZQk9ICRFWzBdLnN0eWxlCisJCSwJcHJvcHMJPSBsaXN0LnNwbGl0KCIsIikKKwkJLAlzaWRlcwk9ICJUb3AsQm90dG9tLExlZnQsUmlnaHQiLnNwbGl0KCIsIikKKwkJLAlhdHRycwk9ICJDb2xvcixTdHlsZSxXaWR0aCIuc3BsaXQoIiwiKQorCQksCXAsIHMsIGEsIGksIGosIGsKKwkJOworCQlmb3IgKGk9MDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7CisJCQlwID0gcHJvcHNbaV07CisJCQlpZiAocC5tYXRjaCgvKGJvcmRlcnxwYWRkaW5nfG1hcmdpbikkLykpCisJCQkJZm9yIChqPTA7IGogPCA0OyBqKyspIHsKKwkJCQkJcyA9IHNpZGVzW2pdOworCQkJCQlpZiAocCA9PT0gImJvcmRlciIpCisJCQkJCQlmb3IgKGs9MDsgayA8IDM7IGsrKykgeworCQkJCQkJCWEgPSBhdHRyc1trXTsKKwkJCQkJCQlDU1NbcCtzK2FdID0gc3R5bGVbcCtzK2FdOworCQkJCQkJfQorCQkJCQllbHNlCisJCQkJCQlDU1NbcCtzXSA9IHN0eWxlW3Arc107CisJCQkJfQorCQkJZWxzZQorCQkJCUNTU1twXSA9IHN0eWxlW3BdOworCQl9OworCQlyZXR1cm4gQ1NTCisJfQorCisJLyoqCisJKiBSZXR1cm4gdGhlIGlubmVyV2lkdGggZm9yIHRoZSBjdXJyZW50IGJyb3dzZXIvZG9jdHlwZQorCSoKKwkqIEBzZWUgIGluaXRQYW5lcygpLCBzaXplTWlkUGFuZXMoKSwgaW5pdEhhbmRsZXMoKSwgc2l6ZUhhbmRsZXMoKQorCSogQHBhcmFtICB7QXJyYXkuPE9iamVjdD59CSRFICBNdXN0IHBhc3MgYSBqUXVlcnkgb2JqZWN0IC0gZmlyc3QgZWxlbWVudCBpcyBwcm9jZXNzZWQKKwkqIEBwYXJhbSAge251bWJlcj19CQkJb3V0ZXJXaWR0aCAob3B0aW9uYWwpIENhbiBwYXNzIGEgd2lkdGgsIGFsbG93aW5nIGNhbGN1bGF0aW9ucyBCRUZPUkUgZWxlbWVudCBpcyByZXNpemVkCisJKiBAcmV0dXJuIHtudW1iZXJ9CQkJUmV0dXJucyB0aGUgaW5uZXJXaWR0aCBvZiB0aGUgZWxlbSBieSBzdWJ0cmFjdGluZyBwYWRkaW5nIGFuZCBib3JkZXJzCisJKi8KKywJY3NzV2lkdGg6IGZ1bmN0aW9uICgkRSwgb3V0ZXJXaWR0aCkgeworCQkvLyBhICdjYWxjdWxhdGVkJyBvdXRlckhlaWdodCBjYW4gYmUgcGFzc2VkIHNvIGJvcmRlcnMgYW5kL29yIHBhZGRpbmcgYXJlIHJlbW92ZWQgaWYgbmVlZGVkCisJCWlmIChvdXRlcldpZHRoIDw9IDApIHJldHVybiAwOworCisJCWlmICghJC5sYXlvdXQuYnJvd3Nlci5ib3hNb2RlbCkgcmV0dXJuIG91dGVyV2lkdGg7CisKKwkJLy8gc3RyaXAgYm9yZGVyIGFuZCBwYWRkaW5nIGZyb20gb3V0ZXJXaWR0aCB0byBnZXQgQ1NTIFdpZHRoCisJCXZhciBiID0gJC5sYXlvdXQuYm9yZGVyV2lkdGgKKwkJLAluID0gJC5sYXlvdXQuY3NzTnVtCisJCSwJVyA9IG91dGVyV2lkdGgKKwkJCQktIGIoJEUsICJMZWZ0IikKKwkJCQktIGIoJEUsICJSaWdodCIpCisJCQkJLSBuKCRFLCAicGFkZGluZ0xlZnQiKQkJCisJCQkJLSBuKCRFLCAicGFkZGluZ1JpZ2h0Iik7CisKKwkJcmV0dXJuIG1heCgwLFcpOworCX0KKworCS8qKgorCSogUmV0dXJuIHRoZSBpbm5lckhlaWdodCBmb3IgdGhlIGN1cnJlbnQgYnJvd3Nlci9kb2N0eXBlCisJKgorCSogQHNlZSAgaW5pdFBhbmVzKCksIHNpemVNaWRQYW5lcygpLCBpbml0SGFuZGxlcygpLCBzaXplSGFuZGxlcygpCisJKiBAcGFyYW0gIHtBcnJheS48T2JqZWN0Pn0JJEUgIE11c3QgcGFzcyBhIGpRdWVyeSBvYmplY3QgLSBmaXJzdCBlbGVtZW50IGlzIHByb2Nlc3NlZAorCSogQHBhcmFtICB7bnVtYmVyPX0JCQlvdXRlckhlaWdodCAgKG9wdGlvbmFsKSBDYW4gcGFzcyBhIHdpZHRoLCBhbGxvd2luZyBjYWxjdWxhdGlvbnMgQkVGT1JFIGVsZW1lbnQgaXMgcmVzaXplZAorCSogQHJldHVybiB7bnVtYmVyfQkJCVJldHVybnMgdGhlIGlubmVySGVpZ2h0IG9mIHRoZSBlbGVtIGJ5IHN1YnRyYWN0aW5nIHBhZGRpbmcgYW5kIGJvcmRlcnMKKwkqLworLAljc3NIZWlnaHQ6IGZ1bmN0aW9uICgkRSwgb3V0ZXJIZWlnaHQpIHsKKwkJLy8gYSAnY2FsY3VsYXRlZCcgb3V0ZXJIZWlnaHQgY2FuIGJlIHBhc3NlZCBzbyBib3JkZXJzIGFuZC9vciBwYWRkaW5nIGFyZSByZW1vdmVkIGlmIG5lZWRlZAorCQlpZiAob3V0ZXJIZWlnaHQgPD0gMCkgcmV0dXJuIDA7CisKKwkJaWYgKCEkLmxheW91dC5icm93c2VyLmJveE1vZGVsKSByZXR1cm4gb3V0ZXJIZWlnaHQ7CisKKwkJLy8gc3RyaXAgYm9yZGVyIGFuZCBwYWRkaW5nIGZyb20gb3V0ZXJIZWlnaHQgdG8gZ2V0IENTUyBIZWlnaHQKKwkJdmFyIGIgPSAkLmxheW91dC5ib3JkZXJXaWR0aAorCQksCW4gPSAkLmxheW91dC5jc3NOdW0KKwkJLAlIID0gb3V0ZXJIZWlnaHQKKwkJCS0gYigkRSwgIlRvcCIpCisJCQktIGIoJEUsICJCb3R0b20iKQorCQkJLSBuKCRFLCAicGFkZGluZ1RvcCIpCisJCQktIG4oJEUsICJwYWRkaW5nQm90dG9tIik7CisKKwkJcmV0dXJuIG1heCgwLEgpOworCX0KKworCS8qKgorCSogUmV0dXJucyB0aGUgJ2N1cnJlbnQgQ1NTIG51bWVyaWMgdmFsdWUnIGZvciBhIENTUyBwcm9wZXJ0eSAtIDAgaWYgcHJvcGVydHkgZG9lcyBub3QgZXhpc3QKKwkqCisJKiBAc2VlICBDYWxsZWQgYnkgbWFueSBtZXRob2RzCisJKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fQkkRQkJCQkJTXVzdCBwYXNzIGEgalF1ZXJ5IG9iamVjdCAtIGZpcnN0IGVsZW1lbnQgaXMgcHJvY2Vzc2VkCisJKiBAcGFyYW0ge3N0cmluZ30JCQlwcm9wCQkJCVRoZSBuYW1lIG9mIHRoZSBDU1MgcHJvcGVydHksIGVnOiB0b3AsIHdpZHRoLCBldGMuCisJKiBAcGFyYW0ge2Jvb2xlYW49fQkJCVthbGxvd0F1dG89ZmFsc2VdCXRydWUgPSByZXR1cm4gJ2F1dG8nIGlmIHRoYXQgaXMgdmFsdWU7IGZhbHNlID0gcmV0dXJuIDAKKwkqIEByZXR1cm4geyhzdHJpbmd8bnVtYmVyKX0JCQkJCQlVc3VhbGx5IHVzZWQgdG8gZ2V0IGFuIGludGVnZXIgdmFsdWUgZm9yIHBvc2l0aW9uICh0b3AsIGxlZnQpIG9yIHNpemUgKGhlaWdodCwgd2lkdGgpCisJKi8KKywJY3NzTnVtOiBmdW5jdGlvbiAoJEUsIHByb3AsIGFsbG93QXV0bykgeworCQlpZiAoISRFLmpxdWVyeSkgJEUgPSAkKCRFKTsKKwkJdmFyIENTUyA9ICQubGF5b3V0LnNob3dJbnZpc2libHkoJEUpCisJCSwJcAk9ICQuY3NzKCRFWzBdLCBwcm9wLCB0cnVlKQorCQksCXYJPSBhbGxvd0F1dG8gJiYgcD09ImF1dG8iID8gcCA6IChwYXJzZUludChwLCAxMCkgfHwgMCk7CisJCSRFLmNzcyggQ1NTICk7IC8vIFJFU0VUCisJCXJldHVybiB2OworCX0KKworLAlib3JkZXJXaWR0aDogZnVuY3Rpb24gKGVsLCBzaWRlKSB7CisJCWlmIChlbC5qcXVlcnkpIGVsID0gZWxbMF07CisJCXZhciBiID0gImJvcmRlciIrIHNpZGUuc3Vic3RyKDAsMSkudG9VcHBlckNhc2UoKSArIHNpZGUuc3Vic3RyKDEpOyAvLyBsZWZ0ID0+IExlZnQKKwkJcmV0dXJuICQuY3NzKGVsLCBiKyJTdHlsZSIsIHRydWUpID09PSAibm9uZSIgPyAwIDogKHBhcnNlSW50KCQuY3NzKGVsLCBiKyJXaWR0aCIsIHRydWUpLCAxMCkgfHwgMCk7CisJfQorCisJLyoqCisJKiBNb3VzZS10cmFja2luZyB1dGlsaXR5IC0gRlVUVVJFIFJFRkVSRU5DRQorCSoKKwkqIGluaXQ6IGlmICghd2luZG93Lm1vdXNlKSB7CisJKgkJCXdpbmRvdy5tb3VzZSA9IHsgeDogMCwgeTogMCB9OworCSoJCQkkKGRvY3VtZW50KS5tb3VzZW1vdmUoICQubGF5b3V0LnRyYWNrTW91c2UgKTsKKwkqCQl9CisJKgorCSogQHBhcmFtIHtPYmplY3R9CQlldnQKKwkqCissCXRyYWNrTW91c2U6IGZ1bmN0aW9uIChldnQpIHsKKwkJd2luZG93Lm1vdXNlID0geyB4OiBldnQuY2xpZW50WCwgeTogZXZ0LmNsaWVudFkgfTsKKwl9CisJKi8KKworCS8qKgorCSogU1VCUk9VVElORSBmb3IgcHJldmVudFByZW1hdHVyZVNsaWRlQ2xvc2Ugb3B0aW9uCisJKgorCSogQHBhcmFtIHtPYmplY3R9CQlldnQKKwkqIEBwYXJhbSB7T2JqZWN0PX0JCWVsCisJKi8KKywJaXNNb3VzZU92ZXJFbGVtOiBmdW5jdGlvbiAoZXZ0LCBlbCkgeworCQl2YXIKKwkJCSRFCT0gJChlbCB8fCB0aGlzKQorCQksCWQJPSAkRS5vZmZzZXQoKQorCQksCVQJPSBkLnRvcAorCQksCUwJPSBkLmxlZnQKKwkJLAlSCT0gTCArICRFLm91dGVyV2lkdGgoKQorCQksCUIJPSBUICsgJEUub3V0ZXJIZWlnaHQoKQorCQksCXgJPSBldnQucGFnZVgJLy8gZXZ0LmNsaWVudFggPworCQksCXkJPSBldnQucGFnZVkJLy8gZXZ0LmNsaWVudFkgPworCQk7CisJCS8vIGlmIFggJiBZIGFyZSA8IDAsIHByb2JhYmx5IG1lYW5zIGlzIG92ZXIgYW4gb3BlbiBTRUxFQ1QKKwkJcmV0dXJuICgkLmxheW91dC5icm93c2VyLm1zaWUgJiYgeCA8IDAgJiYgeSA8IDApIHx8ICgoeCA+PSBMICYmIHggPD0gUikgJiYgKHkgPj0gVCAmJiB5IDw9IEIpKTsKKwl9CisKKwkvKioKKwkqIE1lc3NhZ2UvTG9nZ2luZyBVdGlsaXR5CisJKgorCSogQGV4YW1wbGUgJC5sYXlvdXQubXNnKCJNeSBtZXNzYWdlIik7CQkJCS8vIGxvZyB0ZXh0CisJKiBAZXhhbXBsZSAkLmxheW91dC5tc2coIk15IG1lc3NhZ2UiLCB0cnVlKTsJCS8vIGFsZXJ0IHRleHQKKwkqIEBleGFtcGxlICQubGF5b3V0Lm1zZyh7IGZvbzogImJhciIgfSwgIlRpdGxlIik7CS8vIGxvZyBoYXNoLWRhdGEsIHdpdGggY3VzdG9tIHRpdGxlCisJKiBAZXhhbXBsZSAkLmxheW91dC5tc2coeyBmb286ICJiYXIiIH0sIHRydWUsICJUaXRsZSIsIHsgc29ydDogZmFsc2UgfSk7IC1PUi0KKwkqIEBleGFtcGxlICQubGF5b3V0Lm1zZyh7IGZvbzogImJhciIgfSwgIlRpdGxlIiwgeyBzb3J0OiBmYWxzZSwgZGlzcGxheTogdHJ1ZSB9KTsgLy8gYWxlcnQgaGFzaC1kYXRhCisJKgorCSogQHBhcmFtIHsoT2JqZWN0fHN0cmluZyl9CQkJaW5mbwkJCVN0cmluZyBtZXNzYWdlIE9SIEhhc2gvQXJyYXkKKwkqIEBwYXJhbSB7KEJvb2xlYW58c3RyaW5nfE9iamVjdCk9fQlbcG9wdXA9ZmFsc2VdCVRydWUgbWVhbnMgYWxlcnQtYm94IC0gY2FuIGJlIHNraXBwZWQKKwkqIEBwYXJhbSB7KE9iamVjdHxzdHJpbmcpPX0JCQlbZGVidWdUaXRsZT0iIl0JVGl0bGUgZm9yIEhhc2ggZGF0YSAtIGNhbiBiZSBza2lwcGVkCisJKiBAcGFyYW0ge09iamVjdD19CQkJCQlbZGVidWdPcHRzXQkJRXh0cmEgb3B0aW9ucyBmb3IgZGVidWcgb3V0cHV0CisJKi8KKywJbXNnOiBmdW5jdGlvbiAoaW5mbywgcG9wdXAsIGRlYnVnVGl0bGUsIGRlYnVnT3B0cykgeworCQlpZiAoJC5pc1BsYWluT2JqZWN0KGluZm8pICYmIHdpbmRvdy5kZWJ1Z0RhdGEpIHsKKwkJCWlmICh0eXBlb2YgcG9wdXAgPT09ICJzdHJpbmciKSB7CisJCQkJZGVidWdPcHRzCT0gZGVidWdUaXRsZTsKKwkJCQlkZWJ1Z1RpdGxlCT0gcG9wdXA7CisJCQl9CisJCQllbHNlIGlmICh0eXBlb2YgZGVidWdUaXRsZSA9PT0gIm9iamVjdCIpIHsKKwkJCQlkZWJ1Z09wdHMJPSBkZWJ1Z1RpdGxlOworCQkJCWRlYnVnVGl0bGUJPSBudWxsOworCQkJfQorCQkJdmFyIHQgPSBkZWJ1Z1RpdGxlIHx8ICJsb2coIDxvYmplY3Q+ICkiCisJCQksCW8gPSAkLmV4dGVuZCh7IHNvcnQ6IGZhbHNlLCByZXR1cm5IVE1MOiBmYWxzZSwgZGlzcGxheTogZmFsc2UgfSwgZGVidWdPcHRzKTsKKwkJCWlmIChwb3B1cCA9PT0gdHJ1ZSB8fCBvLmRpc3BsYXkpCisJCQkJZGVidWdEYXRhKCBpbmZvLCB0LCBvICk7CisJCQllbHNlIGlmICh3aW5kb3cuY29uc29sZSkKKwkJCQljb25zb2xlLmxvZyhkZWJ1Z0RhdGEoIGluZm8sIHQsIG8gKSk7CisJCX0KKwkJZWxzZSBpZiAocG9wdXApCisJCQlhbGVydChpbmZvKTsKKwkJZWxzZSBpZiAod2luZG93LmNvbnNvbGUpCisJCQljb25zb2xlLmxvZyhpbmZvKTsKKwkJZWxzZSB7CisJCQl2YXIgaWQJPSAiI2xheW91dExvZ2dlciIKKwkJCSwJJGwgPSAkKGlkKTsKKwkJCWlmICghJGwubGVuZ3RoKQorCQkJCSRsID0gY3JlYXRlTG9nKCk7CisJCQkkbC5jaGlsZHJlbigidWwiKS5hcHBlbmQoJzxsaSBzdHlsZT0icGFkZGluZzogNHB4IDEwcHg7IG1hcmdpbjogMDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNDQ0M7Ij4nKyBpbmZvLnJlcGxhY2UoL1w8L2csIiZsdDsiKS5yZXBsYWNlKC9cPi9nLCImZ3Q7IikgKyc8L2xpPicpOworCQl9CisKKwkJZnVuY3Rpb24gY3JlYXRlTG9nICgpIHsKKwkJCXZhciBwb3MgPSAkLnN1cHBvcnQuZml4ZWRQb3NpdGlvbiA/ICdmaXhlZCcgOiAnYWJzb2x1dGUnCisJCQksCSRlID0gJCgnPGRpdiBpZD0ibGF5b3V0TG9nZ2VyIiBzdHlsZT0icG9zaXRpb246ICcrIHBvcyArJzsgdG9wOiA1cHg7IHotaW5kZXg6IDk5OTk5OTsgbWF4LXdpZHRoOiAyNSU7IG92ZXJmbG93OiBoaWRkZW47IGJvcmRlcjogMXB4IHNvbGlkICMwMDA7IGJvcmRlci1yYWRpdXM6IDVweDsgYmFja2dyb3VuZDogI0ZCRkJGQjsgYm94LXNoYWRvdzogMCAycHggMTBweCByZ2JhKDAsMCwwLDAuMyk7Ij4nCisJCQkJKwknPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxM3B4OyBmb250LXdlaWdodDogYm9sZDsgcGFkZGluZzogNXB4IDEwcHg7IGJhY2tncm91bmQ6ICNGNkY2RjY7IGJvcmRlci1yYWRpdXM6IDVweCA1cHggMCAwOyBjdXJzb3I6IG1vdmU7Ij4nCisJCQkJKwknPHNwYW4gc3R5bGU9ImZsb2F0OiByaWdodDsgcGFkZGluZy1sZWZ0OiA3cHg7IGN1cnNvcjogcG9pbnRlcjsiIHRpdGxlPSJSZW1vdmUgQ29uc29sZSIgb25jbGljaz0iJCh0aGlzKS5jbG9zZXN0KFwnI2xheW91dExvZ2dlclwnKS5yZW1vdmUoKSI+WDwvc3Bhbj5MYXlvdXQgY29uc29sZS5sb2c8L2Rpdj4nCisJCQkJKwknPHVsIHN0eWxlPSJmb250LXNpemU6IDEzcHg7IGZvbnQtd2VpZ2h0OiBub25lOyBsaXN0LXN0eWxlOiBub25lOyBtYXJnaW46IDA7IHBhZGRpbmc6IDAgMCAycHg7Ij48L3VsPicKKwkJCQkrICc8L2Rpdj4nCisJCQkJKS5hcHBlbmRUbygiYm9keSIpOworCQkJJGUuY3NzKCdsZWZ0JywgJCh3aW5kb3cpLndpZHRoKCkgLSAkZS5vdXRlcldpZHRoKCkgLSA1KQorCQkJaWYgKCQudWkuZHJhZ2dhYmxlKSAkZS5kcmFnZ2FibGUoeyBoYW5kbGU6ICc6Zmlyc3QtY2hpbGQnIH0pOworCQkJcmV0dXJuICRlOworCQl9OworCX0KKworfTsKKworLy8gREVGQVVMVCBPUFRJT05TCiskLmxheW91dC5kZWZhdWx0cyA9IHsKKy8qCisgKglMQVlPVVQgJiBMQVlPVVQtQ09OVEFJTkVSIE9QVElPTlMKKyAqCS0gbm9uZSBvZiB0aGVzZSBvcHRpb25zIGFyZSBhcHBsaWNhYmxlIHRvIGluZGl2aWR1YWwgcGFuZXMKKyAqLworCW5hbWU6CQkJCQkJIiIJCQkvLyBOb3QgcmVxdWlyZWQsIGJ1dCB1c2VmdWwgZm9yIGJ1dHRvbnMgYW5kIHVzZWQgZm9yIHRoZSBzdGF0ZS1jb29raWUKKywJY29udGFpbmVyU2VsZWN0b3I6CQkJIiIJCQkvLyBPTkxZIHVzZWQgd2hlbiBzcGVjaWZ5aW5nIGEgY2hpbGRPcHRpb25zIC0gdG8gZmluZCBjb250YWluZXItZWxlbWVudCB0aGF0IGlzIE5PVCBkaXJlY3RseS1uZXN0ZWQKKywJY29udGFpbmVyQ2xhc3M6CQkJCSJ1aS1sYXlvdXQtY29udGFpbmVyIiAvLyBsYXlvdXQtY29udGFpbmVyIGVsZW1lbnQKKywJc2Nyb2xsVG9Cb29rbWFya09uTG9hZDoJCXRydWUJCS8vIGFmdGVyIGNyZWF0aW5nIGEgbGF5b3V0LCBzY3JvbGwgdG8gYm9va21hcmsgaW4gVVJMICguLi4vcGFnZS5odG0jbXlCb29rbWFyaykKKywJcmVzaXplV2l0aFdpbmRvdzoJCQl0cnVlCQkvLyBiaW5kIHRoaXNMYXlvdXQucmVzaXplQWxsKCkgdG8gdGhlIHdpbmRvdy5yZXNpemUgZXZlbnQKKywJcmVzaXplV2l0aFdpbmRvd0RlbGF5OgkJMjAwCQkJLy8gZGVsYXkgY2FsbGluZyByZXNpemVBbGwgYmVjYXVzZSBtYWtlcyB3aW5kb3cgcmVzaXppbmcgdmVyeSBqZXJreQorLAlyZXNpemVXaXRoV2luZG93TWF4RGVsYXk6CTAJCQkvLyAwID0gbm9uZSAtIGZvcmNlIHJlc2l6ZSBldmVyeSBYWCBtcyB3aGlsZSB3aW5kb3cgaXMgYmVpbmcgcmVzaXplZAorLAlvbnJlc2l6ZWFsbF9zdGFydDoJCQludWxsCQkvLyBDQUxMQkFDSyB3aGVuIHJlc2l6ZUFsbCgpIFNUQVJUUwktIE5PVCBwYW5lLXNwZWNpZmljCissCW9ucmVzaXplYWxsX2VuZDoJCQludWxsCQkvLyBDQUxMQkFDSyB3aGVuIHJlc2l6ZUFsbCgpIEVORFMJLSBOT1QgcGFuZS1zcGVjaWZpYworLAlvbmxvYWRfc3RhcnQ6CQkJCW51bGwJCS8vIENBTExCQUNLIHdoZW4gTGF5b3V0IGluaXRzIC0gYWZ0ZXIgb3B0aW9ucyBpbml0aWFsaXplZCwgYnV0IGJlZm9yZSBlbGVtZW50cworLAlvbmxvYWRfZW5kOgkJCQkJbnVsbAkJLy8gQ0FMTEJBQ0sgd2hlbiBMYXlvdXQgaW5pdHMgLSBhZnRlciBFVkVSWVRISU5HIGhhcyBiZWVuIGluaXRpYWxpemVkCissCW9udW5sb2FkX3N0YXJ0OgkJCQludWxsCQkvLyBDQUxMQkFDSyB3aGVuIExheW91dCBpcyBkZXN0cm95ZWQgT1Igb25XaW5kb3dVbmxvYWQKKywJb251bmxvYWRfZW5kOgkJCQludWxsCQkvLyBDQUxMQkFDSyB3aGVuIExheW91dCBpcyBkZXN0cm95ZWQgT1Igb25XaW5kb3dVbmxvYWQKKywJaW5pdFBhbmVzOgkJCQkJdHJ1ZQkJLy8gZmFsc2UgPSBETyBOT1QgaW5pdGlhbGl6ZSB0aGUgcGFuZXMgb25Mb2FkIC0gd2lsbCBpbml0IGxhdGVyCissCXNob3dFcnJvck1lc3NhZ2VzOgkJCXRydWUJCS8vIGVuYWJsZXMgZmF0YWwgZXJyb3IgbWVzc2FnZXMgdG8gd2FybiBkZXZlbG9wZXJzIG9mIGNvbW1vbiBlcnJvcnMKKywJc2hvd0RlYnVnTWVzc2FnZXM6CQkJZmFsc2UJCS8vIGRpc3BsYXkgY29uc29sZS1hbmQtYWxlcnQgZGVidWcgbXNncyAtIElGIHRoaXMgTGF5b3V0IHZlcnNpb24gX2hhc18gZGVidWdnaW5nIGNvZGUhCisvLwlDaGFuZ2luZyB0aGlzIHpJbmRleCB2YWx1ZSB3aWxsIGNhdXNlIG90aGVyIHpJbmRleCB2YWx1ZXMgdG8gYXV0b21hdGljYWxseSBjaGFuZ2UKKywJekluZGV4OgkJCQkJCW51bGwJCS8vIHRoZSBQQU5FIHpJbmRleCAtIHJlc2l6ZXJzIGFuZCBtYXNrcyB3aWxsIGJlICsxCisvLwlETyBOT1QgQ0hBTkdFIHRoZSB6SW5kZXggdmFsdWVzIGJlbG93IHVubGVzcyB5b3UgY2xlYXJseSB1bmRlcnN0YW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMKKywJekluZGV4ZXM6IHsJCQkJCQkJCS8vIHNldCBfZGVmYXVsdF8gei1pbmRleCB2YWx1ZXMgaGVyZS4uLgorCQlwYW5lX25vcm1hbDoJCQkwCQkJLy8gbm9ybWFsIHotaW5kZXggZm9yIHBhbmVzCisJLAljb250ZW50X21hc2s6CQkJMQkJCS8vIGFwcGxpZWQgdG8gb3ZlcmxheXMgdXNlZCB0byBtYXNrIGNvbnRlbnQgSU5TSURFIHBhbmVzIGR1cmluZyByZXNpemluZworCSwJcmVzaXplcl9ub3JtYWw6CQkJMgkJCS8vIG5vcm1hbCB6LWluZGV4IGZvciByZXNpemVyLWJhcnMKKwksCXBhbmVfc2xpZGluZzoJCQkxMDAJCQkvLyBhcHBsaWVkIHRvICpCT1RIKiB0aGUgcGFuZSBhbmQgaXRzIHJlc2l6ZXIgd2hlbiBhIHBhbmUgaXMgJ3NsaWQgb3BlbicKKwksCXBhbmVfYW5pbWF0ZToJCQkxMDAwCQkvLyBhcHBsaWVkIHRvIHRoZSBwYW5lIHdoZW4gYmVpbmcgYW5pbWF0ZWQgLSBub3QgYXBwbGllZCB0byB0aGUgcmVzaXplcgorCSwJcmVzaXplcl9kcmFnOgkJCTEwMDAwCQkvLyBhcHBsaWVkIHRvIHRoZSBDTE9ORUQgcmVzaXplci1iYXIgd2hlbiBiZWluZyAnZHJhZ2dlZCcKKwl9CissCWVycm9yczogeworCQlwYW5lOgkJCQkJInBhbmUiCQkvLyBkZXNjcmlwdGlvbiBvZiAibGF5b3V0IHBhbmUgZWxlbWVudCIgLSB1c2VkIG9ubHkgaW4gZXJyb3IgbWVzc2FnZXMKKwksCXNlbGVjdG9yOgkJCQkic2VsZWN0b3IiCS8vIGRlc2NyaXB0aW9uIG9mICJqUXVlcnktc2VsZWN0b3IiIC0gdXNlZCBvbmx5IGluIGVycm9yIG1lc3NhZ2VzCisJLAlhZGRCdXR0b25FcnJvcjoJCQkiRXJyb3IgQWRkaW5nIEJ1dHRvbiBcblxuSW52YWxpZCAiCisJLAljb250YWluZXJNaXNzaW5nOgkJIlVJIExheW91dCBJbml0aWFsaXphdGlvbiBFcnJvclxuXG5UaGUgc3BlY2lmaWVkIGxheW91dC1jb250YWluZXIgZG9lcyBub3QgZXhpc3QuIgorCSwJY2VudGVyUGFuZU1pc3Npbmc6CQkiVUkgTGF5b3V0IEluaXRpYWxpemF0aW9uIEVycm9yXG5cblRoZSBjZW50ZXItcGFuZSBlbGVtZW50IGRvZXMgbm90IGV4aXN0LlxuXG5UaGUgY2VudGVyLXBhbmUgaXMgYSByZXF1aXJlZCBlbGVtZW50LiIKKwksCW5vQ29udGFpbmVySGVpZ2h0OgkJIlVJIExheW91dCBJbml0aWFsaXphdGlvbiBXYXJuaW5nXG5cblRoZSBsYXlvdXQtY29udGFpbmVyIFwiQ09OVEFJTkVSXCIgaGFzIG5vIGhlaWdodC5cblxuVGhlcmVmb3JlIHRoZSBsYXlvdXQgaXMgMC1oZWlnaHQgYW5kIGhlbmNlICdpbnZpc2libGUnISIKKwksCWNhbGxiYWNrRXJyb3I6CQkJIlVJIExheW91dCBDYWxsYmFjayBFcnJvclxuXG5UaGUgRVZFTlQgY2FsbGJhY2sgaXMgbm90IGEgdmFsaWQgZnVuY3Rpb24uIgorCX0KKy8qCisgKglQQU5FIERFRkFVTFQgU0VUVElOR1MKKyAqCS0gc2V0dGluZ3MgdW5kZXIgdGhlICdwYW5lcycga2V5IGJlY29tZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgKmFsbCBwYW5lcyoKKyAqCS0gQUxMIHBhbmUtb3B0aW9ucyBjYW4gYWxzbyBiZSBzZXQgc3BlY2lmaWNhbGx5IGZvciBlYWNoIHBhbmVzLCB3aGljaCB3aWxsIG92ZXJyaWRlIHRoZXNlICdkZWZhdWx0IHZhbHVlcycKKyAqLworLAlwYW5lczogeyAvLyBkZWZhdWx0IG9wdGlvbnMgZm9yICdhbGwgcGFuZXMnIC0gd2lsbCBiZSBvdmVycmlkZGVuIGJ5ICdwZXItcGFuZSBzZXR0aW5ncycKKwkJYXBwbHlEZW1vU3R5bGVzOiAJCWZhbHNlCQkvLyBOT1RFOiByZW5hbWVkIGZyb20gYXBwbHlEZWZhdWx0U3R5bGVzIGZvciBjbGFyaXR5CisJLAljbG9zYWJsZToJCQkJdHJ1ZQkJLy8gcGFuZSBjYW4gb3BlbiAmIGNsb3NlCisJLAlyZXNpemFibGU6CQkJCXRydWUJCS8vIHdoZW4gb3BlbiwgcGFuZSBjYW4gYmUgcmVzaXplZCAKKwksCXNsaWRhYmxlOgkJCQl0cnVlCQkvLyB3aGVuIGNsb3NlZCwgcGFuZSBjYW4gJ3NsaWRlIG9wZW4nIG92ZXIgb3RoZXIgcGFuZXMgLSBjbG9zZXMgb24gbW91c2Utb3V0CisJLAlpbml0Q2xvc2VkOgkJCQlmYWxzZQkJLy8gdHJ1ZSA9IGluaXQgcGFuZSBhcyAnY2xvc2VkJworCSwJaW5pdEhpZGRlbjogCQkJZmFsc2UgCQkvLyB0cnVlID0gaW5pdCBwYW5lIGFzICdoaWRkZW4nIC0gbm8gcmVzaXplci1iYXIvc3BhY2luZworCS8vCVNFTEVDVE9SUworCS8vLAlwYW5lU2VsZWN0b3I6CQkJIiIJCQkvLyBNVVNUIGJlIHBhbmUtc3BlY2lmaWMgLSBqUXVlcnkgc2VsZWN0b3IgZm9yIHBhbmUKKwksCWNvbnRlbnRTZWxlY3RvcjoJCSIudWktbGF5b3V0LWNvbnRlbnQiIC8vIElOTkVSIGRpdi9lbGVtZW50IHRvIGF1dG8tc2l6ZSBzbyBvbmx5IGl0IHNjcm9sbHMsIG5vdCB0aGUgZW50aXJlIHBhbmUhCisJLAljb250ZW50SWdub3JlU2VsZWN0b3I6CSIudWktbGF5b3V0LWlnbm9yZSIJLy8gZWxlbWVudChzKSB0byAnaWdub3JlJyB3aGVuIG1lYXN1cmluZyAnY29udGVudCcKKwksCWZpbmROZXN0ZWRDb250ZW50OgkJZmFsc2UJCS8vIHRydWUgPSAkUC5maW5kKGNvbnRlbnRTZWxlY3RvciksIGZhbHNlID0gJFAuY2hpbGRyZW4oY29udGVudFNlbGVjdG9yKQorCS8vCUdFTkVSSUMgUk9PVC1DTEFTU0VTIC0gZm9yIGF1dG8tZ2VuZXJhdGVkIGNsYXNzTmFtZXMKKwksCXBhbmVDbGFzczoJCQkJInVpLWxheW91dC1wYW5lIgkvLyBMYXlvdXQgUGFuZQorCSwJcmVzaXplckNsYXNzOgkJCSJ1aS1sYXlvdXQtcmVzaXplciIJLy8gUmVzaXplciBCYXIKKwksCXRvZ2dsZXJDbGFzczoJCQkidWktbGF5b3V0LXRvZ2dsZXIiCS8vIFRvZ2dsZXIgQnV0dG9uCisJLAlidXR0b25DbGFzczoJCQkidWktbGF5b3V0LWJ1dHRvbiIJLy8gQ1VTVE9NIEJ1dHRvbnMJLSBlZzogJ1t1aS1sYXlvdXQtYnV0dG9uXS10b2dnbGUvLW9wZW4vLWNsb3NlLy1waW4nCisJLy8JRUxFTUVOVCBTSVpFICYgU1BBQ0lORworCS8vLAlzaXplOgkJCQkJMTAwCQkJLy8gTVVTVCBiZSBwYW5lLXNwZWNpZmljIC1pbml0aWFsIHNpemUgb2YgcGFuZQorCSwJbWluU2l6ZToJCQkJMAkJCS8vIHdoZW4gbWFudWFsbHkgcmVzaXppbmcgYSBwYW5lCisJLAltYXhTaXplOgkJCQkwCQkJLy8gZGl0dG8sIDAgPSBubyBsaW1pdAorCSwJc3BhY2luZ19vcGVuOgkJCTYJCQkvLyBzcGFjZSBiZXR3ZWVuIHBhbmUgYW5kIGFkamFjZW50IHBhbmVzIC0gd2hlbiBwYW5lIGlzICdvcGVuJworCSwJc3BhY2luZ19jbG9zZWQ6CQkJNgkJCS8vIGRpdHRvIC0gd2hlbiBwYW5lIGlzICdjbG9zZWQnCisJLAl0b2dnbGVyTGVuZ3RoX29wZW46CQk1MAkJCS8vIExlbmd0aCA9IFdJRFRIIG9mIHRvZ2dsZXIgYnV0dG9uIG9uIG5vcnRoL3NvdXRoIHNpZGVzIC0gSEVJR0hUIG9uIGVhc3Qvd2VzdCBzaWRlcworCSwJdG9nZ2xlckxlbmd0aF9jbG9zZWQ6IAk1MAkJCS8vIDEwMCUgT1IgLTEgbWVhbnMgJ2Z1bGwgaGVpZ2h0L3dpZHRoIG9mIHJlc2l6ZXIgYmFyJyAtIDAgbWVhbnMgJ2hpZGRlbicKKwksCXRvZ2dsZXJBbGlnbl9vcGVuOgkJImNlbnRlciIJLy8gdG9wL2xlZnQsIGJvdHRvbS9yaWdodCwgY2VudGVyLCBPUi4uLgorCSwJdG9nZ2xlckFsaWduX2Nsb3NlZDoJImNlbnRlciIJLy8gMSA9PiBubiA9IG9mZnNldCBmcm9tIHRvcC9sZWZ0LCAtMSA9PiAtbm4gPT0gb2Zmc2V0IGZyb20gYm90dG9tL3JpZ2h0CisJLAl0b2dnbGVyQ29udGVudF9vcGVuOgkiIgkJCS8vIHRleHQgb3IgSFRNTCB0byBwdXQgSU5TSURFIHRoZSB0b2dnbGVyCisJLAl0b2dnbGVyQ29udGVudF9jbG9zZWQ6CSIiCQkJLy8gZGl0dG8KKwkvLwlSRVNJWklORyBPUFRJT05TCisJLAlyZXNpemVyRGJsQ2xpY2tUb2dnbGU6CXRydWUJCS8vIAorCSwJYXV0b1Jlc2l6ZToJCQkJdHJ1ZQkJLy8gSUYgc2l6ZSBpcyAnYXV0bycgb3IgYSBwZXJjZW50YWdlLCB0aGVuIHJlY2FsYyAncGl4ZWwgc2l6ZScgd2hlbmV2ZXIgdGhlIGxheW91dCByZXNpemVzCisJLAlhdXRvUmVvcGVuOgkJCQl0cnVlCQkvLyBJRiBhIHBhbmUgd2FzIGF1dG8tY2xvc2VkIGR1ZSB0byBub1Jvb20sIHJlb3BlbiBpdCB3aGVuIHRoZXJlIGlzIHJvb20/IEZhbHNlID0gbGVhdmUgaXQgY2xvc2VkCisJLAlyZXNpemVyRHJhZ09wYWNpdHk6CQkxCQkJLy8gb3B0aW9uIGZvciB1aS5kcmFnZ2FibGUKKwkvLywJcmVzaXplckN1cnNvcjoJCQkiIgkJCS8vIE1VU1QgYmUgcGFuZS1zcGVjaWZpYyAtIGN1cnNvciB3aGVuIG92ZXIgcmVzaXplci1iYXIKKwksCW1hc2tDb250ZW50czoJCQlmYWxzZQkJLy8gdHJ1ZSA9IGFkZCBESVYtbWFzayBvdmVyLW9yLWluc2lkZSB0aGlzIHBhbmUgc28gY2FuICdkcmFnJyBvdmVyIElGUkFNRVMKKwksCW1hc2tPYmplY3RzOgkJCWZhbHNlCQkvLyB0cnVlID0gYWRkIElGUkFNRS1tYXNrIG92ZXItb3ItaW5zaWRlIHRoaXMgcGFuZSB0byBjb3ZlciBvYmplY3RzL2FwcGxldHMgLSBjb250ZW50LW1hc2sgd2lsbCBvdmVybGF5IHRoaXMgbWFzaworCSwJbWFza1ppbmRleDoJCQkJbnVsbAkJLy8gd2lsbCBvdmVycmlkZSB6SW5kZXhlcy5jb250ZW50X21hc2sgaWYgc3BlY2lmaWVkIC0gbm90IGFwcGxpY2FibGUgdG8gaWZyYW1lLXBhbmVzCisJLAlyZXNpemluZ0dyaWQ6CQkJZmFsc2UJCS8vIGdyaWQgc2l6ZSB0aGF0IHRoZSByZXNpemVycyB3aWxsIHNuYXAtdG8gZHVyaW5nIHJlc2l6aW5nLCBlZzogWzIwLDIwXQorCSwJbGl2ZVBhbmVSZXNpemluZzoJCWZhbHNlCQkvLyB0cnVlID0gTElWRSBSZXNpemluZyBhcyByZXNpemVyIGlzIGRyYWdnZWQKKwksCWxpdmVDb250ZW50UmVzaXppbmc6CWZhbHNlCQkvLyB0cnVlID0gcmUtbWVhc3VyZSBoZWFkZXIvZm9vdGVyIGhlaWdodHMgYXMgcmVzaXplciBpcyBkcmFnZ2VkCisJLAlsaXZlUmVzaXppbmdUb2xlcmFuY2U6CTEJCQkvLyBob3cgbWFueSBweCBjaGFuZ2UgYmVmb3JlIHBhbmUgcmVzaXplcywgdG8gY29udHJvbCBwZXJmb3JtYW5jZQorCS8vCVNMSURJTkcgT1BUSU9OUworCSwJc2xpZGVyQ3Vyc29yOgkJCSJwb2ludGVyIgkvLyBjdXJzb3Igd2hlbiByZXNpemVyLWJhciB3aWxsIHRyaWdnZXIgJ3NsaWRpbmcnCisJLAlzbGlkZVRyaWdnZXJfb3BlbjoJCSJjbGljayIJCS8vIGNsaWNrLCBkYmxjbGljaywgbW91c2VlbnRlcgorCSwJc2xpZGVUcmlnZ2VyX2Nsb3NlOgkJIm1vdXNlbGVhdmUiLy8gY2xpY2ssIG1vdXNlbGVhdmUKKwksCXNsaWRlRGVsYXlfb3BlbjoJCTMwMAkJCS8vIGFwcGxpZXMgb25seSBmb3IgbW91c2VlbnRlciBldmVudCAtIDAgPSBpbnN0YW50IG9wZW4KKwksCXNsaWRlRGVsYXlfY2xvc2U6CQkzMDAJCQkvLyBhcHBsaWVzIG9ubHkgZm9yIG1vdXNlbGVhdmUgZXZlbnQgKDMwMG1zIGlzIHRoZSBtaW5pbXVtISkKKwksCWhpZGVUb2dnbGVyT25TbGlkZToJCWZhbHNlCQkvLyB3aGVuIHBhbmUgaXMgc2xpZC1vcGVuLCBzaG91bGQgdGhlIHRvZ2dsZXIgc2hvdz8KKwksCXByZXZlbnRRdWlja1NsaWRlQ2xvc2U6CSQubGF5b3V0LmJyb3dzZXIud2Via2l0IC8vIENocm9tZSB0cmlnZ2VycyBzbGlkZUNsb3NlZCBhcyBpdCBpcyBvcGVuaW5nCisJLAlwcmV2ZW50UHJlbWF0dXJlU2xpZGVDbG9zZTogZmFsc2UJLy8gaGFuZGxlIGluY29ycmVjdCBtb3VzZWxlYXZlIHRyaWdnZXIsIGxpa2Ugd2hlbiBvdmVyIGEgU0VMRUNULWxpc3QgaW4gSUUKKwkvLwlQQU5FLVNQRUNJRklDIFRJUFMgJiBNRVNTQUdFUworCSwJdGlwczogeworCQkJT3BlbjoJCQkJIk9wZW4iCQkvLyBlZzogIk9wZW4gUGFuZSIKKwkJLAlDbG9zZToJCQkJIkNsb3NlIgorCQksCVJlc2l6ZToJCQkJIlJlc2l6ZSIKKwkJLAlTbGlkZToJCQkJIlNsaWRlIE9wZW4iCisJCSwJUGluOgkJCQkiUGluIgorCQksCVVucGluOgkJCQkiVW4tUGluIgorCQksCW5vUm9vbVRvT3BlbjoJCSJOb3QgZW5vdWdoIHJvb20gdG8gc2hvdyB0aGlzIHBhbmVsLiIJLy8gYWxlcnQgaWYgdXNlciB0cmllcyB0byBvcGVuIGEgcGFuZSB0aGF0IGNhbm5vdAorCQksCW1pblNpemVXYXJuaW5nOgkJIlBhbmVsIGhhcyByZWFjaGVkIGl0cyBtaW5pbXVtIHNpemUiCS8vIGRpc3BsYXlzIGluIGJyb3dzZXIgc3RhdHVzYmFyCisJCSwJbWF4U2l6ZVdhcm5pbmc6CQkiUGFuZWwgaGFzIHJlYWNoZWQgaXRzIG1heGltdW0gc2l6ZSIJLy8gZGl0dG8KKwkJfQorCS8vCUhPVC1LRVlTICYgTUlTQworCSwJc2hvd092ZXJmbG93T25Ib3ZlcjoJZmFsc2UJCS8vIHdpbGwgYmluZCBhbGxvd092ZXJmbG93KCkgdXRpbGl0eSB0byBwYW5lLm9uTW91c2VPdmVyCisJLAllbmFibGVDdXJzb3JIb3RrZXk6CQl0cnVlCQkvLyBlbmFibGVkICdjdXJzb3InIGhvdGtleXMKKwkvLywJY3VzdG9tSG90a2V5OgkJCSIiCQkJLy8gTVVTVCBiZSBwYW5lLXNwZWNpZmljIC0gRUlUSEVSIGEgY2hhckNvZGUgT1IgYSBjaGFyYWN0ZXIKKwksCWN1c3RvbUhvdGtleU1vZGlmaWVyOgkiU0hJRlQiCQkvLyBlaXRoZXIgJ1NISUZUJywgJ0NUUkwnIG9yICdDVFJMK1NISUZUJyAtIE5PVCAnQUxUJworCS8vCVBBTkUgQU5JTUFUSU9OCisJLy8JTk9URTogZnhTc3Nfb3BlbiwgZnhTc3NfY2xvc2UgJiBmeFNzc19zaXplIG9wdGlvbnMgKGVnOiBmeE5hbWVfb3BlbikgYXJlIGF1dG8tZ2VuZXJhdGVkIGlmIG5vdCBwYXNzZWQKKwksCWZ4TmFtZToJCQkJCSJzbGlkZSIgCS8vICgnbm9uZScgb3IgYmxhbmspLCBzbGlkZSwgZHJvcCwgc2NhbGUgLS0gb25seSByZWxldmFudCB0byAnb3BlbicgJiAnY2xvc2UnLCBOT1QgJ3NpemUnCisJLAlmeFNwZWVkOgkJCQludWxsCQkvLyBzbG93LCBub3JtYWwsIGZhc3QsIDIwMCwgbm5uIC0gaWYgcGFzc2VkLCB3aWxsIE9WRVJSSURFIGZ4U2V0dGluZ3MuZHVyYXRpb24KKwksCWZ4U2V0dGluZ3M6CQkJCXt9CQkJLy8gY2FuIGJlIHBhc3NlZCwgZWc6IHsgZWFzaW5nOiAiZWFzZU91dEJvdW5jZSIsIGR1cmF0aW9uOiAxNTAwIH0KKwksCWZ4T3BhY2l0eUZpeDoJCQl0cnVlCQkvLyB0cmllcyB0byBmaXggb3BhY2l0eSBpbiBJRSB0byByZXN0b3JlIGFudGktYWxpYXNpbmcgYWZ0ZXIgYW5pbWF0aW9uCisJLAlhbmltYXRlUGFuZVNpemluZzoJCWZhbHNlCQkvLyB0cnVlID0gYW5pbWF0ZSByZXNpemluZyBhZnRlciBkcmFnZ2luZyByZXNpemVyLWJhciBPUiBzaXplUGFuZSgpIGlzIGNhbGxlZAorCS8qICBOT1RFOiBBY3Rpb24tc3BlY2lmaWMgRlggb3B0aW9ucyBhcmUgYXV0by1nZW5lcmF0ZWQgZnJvbSB0aGUgb3B0aW9ucyBhYm92ZSBpZiBub3Qgc3BlY2lmaWNhbGx5IHNldDoKKwkJZnhOYW1lX29wZW46CQkJInNsaWRlIgkJLy8gJ09wZW4nIHBhbmUgYW5pbWF0aW9uCisJCWZuTmFtZV9jbG9zZToJCQkic2xpZGUiCQkvLyAnQ2xvc2UnIHBhbmUgYW5pbWF0aW9uCisJCWZ4TmFtZV9zaXplOgkJCSJzbGlkZSIJCS8vICdTaXplJyBwYW5lIGFuaW1hdGlvbiAtIHdoZW4gYW5pbWF0ZVBhbmVTaXppbmcgPSB0cnVlCisJCWZ4U3BlZWRfb3BlbjoJCQludWxsCisJCWZ4U3BlZWRfY2xvc2U6CQkJbnVsbAorCQlmeFNwZWVkX3NpemU6CQkJbnVsbAorCQlmeFNldHRpbmdzX29wZW46CQl7fQorCQlmeFNldHRpbmdzX2Nsb3NlOgkJe30KKwkJZnhTZXR0aW5nc19zaXplOgkJe30KKwkqLworCS8vCUNISUxEL05FU1RFRCBMQVlPVVRTCisJLAljaGlsZE9wdGlvbnM6CQkJbnVsbAkJLy8gTGF5b3V0LW9wdGlvbnMgZm9yIG5lc3RlZC9jaGlsZCBsYXlvdXQgLSBldmVuIHt9IGlzIHZhbGlkIGFzIG9wdGlvbnMKKwksCWluaXRDaGlsZExheW91dDoJCXRydWUJCS8vIHRydWUgPSBjaGlsZCBsYXlvdXQgd2lsbCBiZSBjcmVhdGVkIGFzIHNvb24gYXMgX3RoaXNfIGxheW91dCBjb21wbGV0ZXMgaW5pdGlhbGl6YXRpb24KKwksCWRlc3Ryb3lDaGlsZExheW91dDoJCXRydWUJCS8vIHRydWUgPSBkZXN0cm95IGNoaWxkLWxheW91dCBpZiB0aGlzIHBhbmUgaXMgZGVzdHJveWVkCisJLAlyZXNpemVDaGlsZExheW91dDoJCXRydWUJCS8vIHRydWUgPSB0cmlnZ2VyIGNoaWxkLWxheW91dC5yZXNpemVBbGwoKSB3aGVuIHRoaXMgcGFuZSBpcyByZXNpemVkCisJLy8JRVZFTlQgVFJJR0dFUklORworCSwJdHJpZ2dlckV2ZW50c09uTG9hZDoJZmFsc2UJCS8vIHRydWUgPSB0cmlnZ2VyIG9ub3BlbiBPUiBvbmNsb3NlIGNhbGxiYWNrcyB3aGVuIGxheW91dCBpbml0aWFsaXplcworCSwJdHJpZ2dlckV2ZW50c0R1cmluZ0xpdmVSZXNpemU6IHRydWUJLy8gdHJ1ZSA9IHRyaWdnZXIgb25yZXNpemUgY2FsbGJhY2sgUkVQRUFURURMWSBpZiBsaXZlUGFuZVJlc2l6aW5nPT10cnVlCisJLy8JUEFORSBDQUxMQkFDS1MKKwksCW9uc2hvd19zdGFydDoJCQludWxsCQkvLyBDQUxMQkFDSyB3aGVuIHBhbmUgU1RBUlRTIHRvIFNob3cJLSBCRUZPUkUgb25vcGVuL29uaGlkZV9zdGFydAorCSwJb25zaG93X2VuZDoJCQkJbnVsbAkJLy8gQ0FMTEJBQ0sgd2hlbiBwYW5lIEVORFMgYmVpbmcgU2hvd24JLSBBRlRFUiAgb25vcGVuL29uaGlkZV9lbmQKKwksCW9uaGlkZV9zdGFydDoJCQludWxsCQkvLyBDQUxMQkFDSyB3aGVuIHBhbmUgU1RBUlRTIHRvIENsb3NlCS0gQkVGT1JFIG9uY2xvc2Vfc3RhcnQKKwksCW9uaGlkZV9lbmQ6CQkJCW51bGwJCS8vIENBTExCQUNLIHdoZW4gcGFuZSBFTkRTIGJlaW5nIENsb3NlZAktIEFGVEVSICBvbmNsb3NlX2VuZAorCSwJb25vcGVuX3N0YXJ0OgkJCW51bGwJCS8vIENBTExCQUNLIHdoZW4gcGFuZSBTVEFSVFMgdG8gT3BlbgorCSwJb25vcGVuX2VuZDoJCQkJbnVsbAkJLy8gQ0FMTEJBQ0sgd2hlbiBwYW5lIEVORFMgYmVpbmcgT3BlbmVkCisJLAlvbmNsb3NlX3N0YXJ0OgkJCW51bGwJCS8vIENBTExCQUNLIHdoZW4gcGFuZSBTVEFSVFMgdG8gQ2xvc2UKKwksCW9uY2xvc2VfZW5kOgkJCW51bGwJCS8vIENBTExCQUNLIHdoZW4gcGFuZSBFTkRTIGJlaW5nIENsb3NlZAorCSwJb25yZXNpemVfc3RhcnQ6CQkJbnVsbAkJLy8gQ0FMTEJBQ0sgd2hlbiBwYW5lIFNUQVJUUyBiZWluZyBSZXNpemVkICoqKkZPUiBBTlkgUkVBU09OKioqCisJLAlvbnJlc2l6ZV9lbmQ6CQkJbnVsbAkJLy8gQ0FMTEJBQ0sgd2hlbiBwYW5lIEVORFMgYmVpbmcgUmVzaXplZCAqKipGT1IgQU5ZIFJFQVNPTioqKgorCSwJb25zaXplY29udGVudF9zdGFydDoJbnVsbAkJLy8gQ0FMTEJBQ0sgd2hlbiBzaXppbmcgb2YgY29udGVudC1lbGVtZW50IFNUQVJUUworCSwJb25zaXplY29udGVudF9lbmQ6CQludWxsCQkvLyBDQUxMQkFDSyB3aGVuIHNpemluZyBvZiBjb250ZW50LWVsZW1lbnQgRU5EUworCSwJb25zd2FwX3N0YXJ0OgkJCW51bGwJCS8vIENBTExCQUNLIHdoZW4gcGFuZSBTVEFSVFMgdG8gU3dhcAorCSwJb25zd2FwX2VuZDoJCQkJbnVsbAkJLy8gQ0FMTEJBQ0sgd2hlbiBwYW5lIEVORFMgYmVpbmcgU3dhcHBlZAorCSwJb25kcmFnX3N0YXJ0OgkJCW51bGwJCS8vIENBTExCQUNLIHdoZW4gcGFuZSBTVEFSVFMgYmVpbmcgKioqTUFOVUFMTFkqKiogUmVzaXplZAorCSwJb25kcmFnX2VuZDoJCQkJbnVsbAkJLy8gQ0FMTEJBQ0sgd2hlbiBwYW5lIEVORFMgYmVpbmcgKioqTUFOVUFMTFkqKiogUmVzaXplZAorCX0KKy8qCisgKglQQU5FLVNQRUNJRklDIFNFVFRJTkdTCisgKgktIG9wdGlvbnMgbGlzdGVkIGJlbG93IE1VU1QgYmUgc3BlY2lmaWVkIHBlci1wYW5lIC0gdGhleSBDQU5OT1QgYmUgc2V0IHVuZGVyICdwYW5lcycKKyAqCS0gYWxsIG9wdGlvbnMgdW5kZXIgdGhlICdwYW5lcycga2V5IGNhbiBhbHNvIGJlIHNldCBzcGVjaWZpY2FsbHkgZm9yIGFueSBwYW5lCisgKgktIG1vc3Qgb3B0aW9ucyB1bmRlciB0aGUgJ3BhbmVzJyBrZXkgYXBwbHkgb25seSB0byAnYm9yZGVyLXBhbmVzJyAtIE5PVCB0aGUgdGhlIGNlbnRlci1wYW5lCisgKi8KKywJbm9ydGg6IHsKKwkJcGFuZVNlbGVjdG9yOgkJCSIudWktbGF5b3V0LW5vcnRoIgorCSwJc2l6ZToJCQkJCSJhdXRvIgkJLy8gZWc6ICJhdXRvIiwgIjMwJSIsIC4zMCwgMjAwCisJLAlyZXNpemVyQ3Vyc29yOgkJCSJuLXJlc2l6ZSIJLy8gY3VzdG9tID0gdXJsKG15Q3Vyc29yLmN1cikKKwksCWN1c3RvbUhvdGtleToJCQkiIgkJCS8vIEVJVEhFUiBhIGNoYXJDb2RlICg0MykgT1IgYSBjaGFyYWN0ZXIgKCJvIikKKwl9CissCXNvdXRoOiB7CisJCXBhbmVTZWxlY3RvcjoJCQkiLnVpLWxheW91dC1zb3V0aCIKKwksCXNpemU6CQkJCQkiYXV0byIKKwksCXJlc2l6ZXJDdXJzb3I6CQkJInMtcmVzaXplIgorCSwJY3VzdG9tSG90a2V5OgkJCSIiCisJfQorLAllYXN0OiB7CisJCXBhbmVTZWxlY3RvcjoJCQkiLnVpLWxheW91dC1lYXN0IgorCSwJc2l6ZToJCQkJCTIwMAorCSwJcmVzaXplckN1cnNvcjoJCQkiZS1yZXNpemUiCisJLAljdXN0b21Ib3RrZXk6CQkJIiIKKwl9CissCXdlc3Q6IHsKKwkJcGFuZVNlbGVjdG9yOgkJCSIudWktbGF5b3V0LXdlc3QiCisJLAlzaXplOgkJCQkJMjAwCisJLAlyZXNpemVyQ3Vyc29yOgkJCSJ3LXJlc2l6ZSIKKwksCWN1c3RvbUhvdGtleToJCQkiIgorCX0KKywJY2VudGVyOiB7CisJCXBhbmVTZWxlY3RvcjoJCQkiLnVpLWxheW91dC1jZW50ZXIiCisJLAltaW5XaWR0aDoJCQkJMAorCSwJbWluSGVpZ2h0OgkJCQkwCisJfQorfTsKKworJC5sYXlvdXQub3B0aW9uc01hcCA9IHsKKwkvLyBsYXlvdXQvZ2xvYmFsIG9wdGlvbnMgLSBOT1QgcGFuZS1vcHRpb25zCisJbGF5b3V0OiAoInN0YXRlTWFuYWdlbWVudCxlZmZlY3RzLHpJbmRleGVzLGVycm9ycywiCisJKwkibmFtZSx6SW5kZXgsc2Nyb2xsVG9Cb29rbWFya09uTG9hZCxzaG93RXJyb3JNZXNzYWdlcywiCisJKwkicmVzaXplV2l0aFdpbmRvdyxyZXNpemVXaXRoV2luZG93RGVsYXkscmVzaXplV2l0aFdpbmRvd01heERlbGF5LCIKKwkrCSJvbnJlc2l6ZWFsbCxvbnJlc2l6ZWFsbF9zdGFydCxvbnJlc2l6ZWFsbF9lbmQsb25sb2FkLG9udW5sb2FkIikuc3BsaXQoIiwiKQorLy8JYm9yZGVyUGFuZXM6IFsgQUxMIG9wdGlvbnMgdGhhdCBhcmUgTk9UIHNwZWNpZmllZCBhcyAnbGF5b3V0JyBdCisJLy8gZGVmYXVsdC5wYW5lcyBvcHRpb25zIHRoYXQgYXBwbHkgdG8gdGhlIGNlbnRlci1wYW5lIChtb3N0IG9wdGlvbnMgYXBwbHkgX29ubHlfIHRvIGJvcmRlci1wYW5lcykKKywJY2VudGVyOiAoInBhbmVDbGFzcyxjb250ZW50U2VsZWN0b3IsY29udGVudElnbm9yZVNlbGVjdG9yLGZpbmROZXN0ZWRDb250ZW50LGFwcGx5RGVtb1N0eWxlcyx0cmlnZ2VyRXZlbnRzT25Mb2FkLCIKKwkrCSJzaG93T3ZlcmZsb3dPbkhvdmVyLG1hc2tDb250ZW50cyxtYXNrT2JqZWN0cyxsaXZlQ29udGVudFJlc2l6aW5nLCIKKwkrCSJjaGlsZE9wdGlvbnMsaW5pdENoaWxkTGF5b3V0LHJlc2l6ZUNoaWxkTGF5b3V0LGRlc3Ryb3lDaGlsZExheW91dCwiCisJKwkib25yZXNpemUsb25yZXNpemVfc3RhcnQsb25yZXNpemVfZW5kLG9uc2l6ZWNvbnRlbnQsb25zaXplY29udGVudF9zdGFydCxvbnNpemVjb250ZW50X2VuZCIpLnNwbGl0KCIsIikKKwkvLyBvcHRpb25zIHRoYXQgTVVTVCBiZSBzcGVjaWZpY2FsbHkgc2V0ICdwZXItcGFuZScgLSBDQU5OT1Qgc2V0IGluIHRoZSBwYW5lcyAoZGVmYXVsdHMpIGtleQorLAlub0RlZmF1bHQ6ICgicGFuZVNlbGVjdG9yLHJlc2l6ZXJDdXJzb3IsY3VzdG9tSG90a2V5Iikuc3BsaXQoIiwiKQorfTsKKworLyoqCisgKiBQcm9jZXNzZXMgb3B0aW9ucyBwYXNzZWQgaW4gY29udmVydHMgZmxhdC1mb3JtYXQgZGF0YSBpbnRvIHN1YmtleSAoSlNPTikgZm9ybWF0CisgKiBJbiBmbGF0LWZvcm1hdCwgc3Via2V5cyBhcmUgX2N1cnJlbnRseV8gc2VwYXJhdGVkIHdpdGggMiB1bmRlcnNjb3JlcywgbGlrZSBub3J0aF9fb3B0TmFtZQorICogUGx1Z2lucyBtYXkgYWxzbyBjYWxsIHRoaXMgbWV0aG9kIHNvIHRoZXkgY2FuIHRyYW5zZm9ybSB0aGVpciBvd24gZGF0YQorICoKKyAqIEBwYXJhbSAgeyFPYmplY3R9CWhhc2gJRGF0YS9vcHRpb25zIHBhc3NlZCBieSB1c2VyIC0gbWF5IGJlIGEgc2luZ2xlIGxldmVsIG9yIG5lc3RlZCBsZXZlbHMKKyAqIEByZXR1cm4ge09iamVjdH0JCQkJUmV0dXJucyBoYXNoIG9mIG1pbldpZHRoICYgbWluSGVpZ2h0CisgKi8KKyQubGF5b3V0LnRyYW5zZm9ybURhdGEgPSBmdW5jdGlvbiAoaGFzaCkgeworCXZhcglqc29uID0geyBwYW5lczoge30sIGNlbnRlcjoge30gfSAvLyBpbml0IHJldHVybiBvYmplY3QKKwksCWRhdGEsIGJyYW5jaCwgb3B0S2V5LCBrZXlzLCBrZXksIHZhbCwgaSwgYzsKKworCWlmICh0eXBlb2YgaGFzaCAhPT0gIm9iamVjdCIpIHJldHVybiBqc29uOyAvLyBubyBvcHRpb25zIHBhc3NlZAorCisJLy8gY29udmVydCBhbGwgJ2ZsYXQta2V5cycgdG8gJ3N1Yi1rZXknIGZvcm1hdAorCWZvciAob3B0S2V5IGluIGhhc2gpIHsKKwkJYnJhbmNoCT0ganNvbjsKKwkJZGF0YQk9ICQubGF5b3V0Lm9wdGlvbnNNYXAubGF5b3V0OworCQl2YWwJCT0gaGFzaFsgb3B0S2V5IF07CisJCWtleXMJPSBvcHRLZXkuc3BsaXQoIl9fIik7IC8vIGVnOiB3ZXN0X19zaXplIG9yIG5vcnRoX19meFNldHRpbmdzX19kdXJhdGlvbgorCQljCQk9IGtleXMubGVuZ3RoIC0gMTsKKwkJLy8gY29udmVydCB1bmRlcnNjb3JlLWRlbGltaXRlZCB0byBzdWJrZXlzCisJCWZvciAoaT0wOyBpIDw9IGM7IGkrKykgeworCQkJa2V5ID0ga2V5c1tpXTsKKwkJCWlmIChpID09PSBjKQorCQkJCWJyYW5jaFtrZXldID0gdmFsOworCQkJZWxzZSBpZiAoIWJyYW5jaFtrZXldKQorCQkJCWJyYW5jaFtrZXldID0ge307IC8vIGNyZWF0ZSB0aGUgc3Via2V5CisJCQkvLyByZWN1cnNlIHRvIHN1Yi1rZXkgZm9yIG5leHQgbG9vcCAtIGlmIG5vdCBkb25lCisJCQlicmFuY2ggPSBicmFuY2hba2V5XTsKKwkJfQorCX0KKworCXJldHVybiBqc29uOworfTsKKworLy8gSU5URVJOQUwgQ09ORklHIERBVEEgLSBETyBOT1QgQ0hBTkdFIFRISVMhCiskLmxheW91dC5iYWNrd2FyZENvbXBhdGliaWxpdHkgPSB7CisJLy8gZGF0YSB1c2VkIGJ5IHJlbmFtZU9sZE9wdGlvbnMoKQorCW1hcDogeworCS8vCU9MRCBPcHRpb24gTmFtZToJCQlORVcgT3B0aW9uIE5hbWUKKwkJYXBwbHlEZWZhdWx0U3R5bGVzOgkJCSJhcHBseURlbW9TdHlsZXMiCisJLAlyZXNpemVOZXN0ZWRMYXlvdXQ6CQkJInJlc2l6ZUNoaWxkTGF5b3V0IgorCSwJcmVzaXplV2hpbGVEcmFnZ2luZzoJCSJsaXZlUGFuZVJlc2l6aW5nIgorCSwJcmVzaXplQ29udGVudFdoaWxlRHJhZ2dpbmc6CSJsaXZlQ29udGVudFJlc2l6aW5nIgorCSwJdHJpZ2dlckV2ZW50c1doaWxlRHJhZ2dpbmc6CSJ0cmlnZ2VyRXZlbnRzRHVyaW5nTGl2ZVJlc2l6ZSIKKwksCW1hc2tJZnJhbWVzT25SZXNpemU6CQkibWFza0NvbnRlbnRzIgorCSwJdXNlU3RhdGVDb29raWU6CQkJCSJzdGF0ZU1hbmFnZW1lbnQuZW5hYmxlZCIKKwksCSJjb29raWUuYXV0b0xvYWQiOgkJCSJzdGF0ZU1hbmFnZW1lbnQuYXV0b0xvYWQiCisJLAkiY29va2llLmF1dG9TYXZlIjoJCQkic3RhdGVNYW5hZ2VtZW50LmF1dG9TYXZlIgorCSwJImNvb2tpZS5rZXlzIjoJCQkJInN0YXRlTWFuYWdlbWVudC5zdGF0ZUtleXMiCisJLAkiY29va2llLm5hbWUiOgkJCQkic3RhdGVNYW5hZ2VtZW50LmNvb2tpZS5uYW1lIgorCSwJImNvb2tpZS5kb21haW4iOgkJCSJzdGF0ZU1hbmFnZW1lbnQuY29va2llLmRvbWFpbiIKKwksCSJjb29raWUucGF0aCI6CQkJCSJzdGF0ZU1hbmFnZW1lbnQuY29va2llLnBhdGgiCisJLAkiY29va2llLmV4cGlyZXMiOgkJCSJzdGF0ZU1hbmFnZW1lbnQuY29va2llLmV4cGlyZXMiCisJLAkiY29va2llLnNlY3VyZSI6CQkJInN0YXRlTWFuYWdlbWVudC5jb29raWUuc2VjdXJlIgorCS8vCU9MRCBMYW5ndWFnZSBvcHRpb25zCisJLAlub1Jvb21Ub09wZW5UaXA6CQkJInRpcHMubm9Sb29tVG9PcGVuIgorCSwJdG9nZ2xlclRpcF9vcGVuOgkJCSJ0aXBzLkNsb3NlIgkvLyBvcGVuICAgPSBDbG9zZQorCSwJdG9nZ2xlclRpcF9jbG9zZWQ6CQkJInRpcHMuT3BlbiIJCS8vIGNsb3NlZCA9IE9wZW4KKwksCXJlc2l6ZXJUaXA6CQkJCQkidGlwcy5SZXNpemUiCisJLAlzbGlkZXJUaXA6CQkJCQkidGlwcy5TbGlkZSIKKwl9CisKKy8qKgorKiBAcGFyYW0ge09iamVjdH0Jb3B0cworKi8KKywJcmVuYW1lT3B0aW9uczogZnVuY3Rpb24gKG9wdHMpIHsKKwkJdmFyIG1hcCA9ICQubGF5b3V0LmJhY2t3YXJkQ29tcGF0aWJpbGl0eS5tYXAKKwkJLAlvbGREYXRhLCBuZXdEYXRhLCB2YWx1ZQorCQk7CisJCWZvciAodmFyIGl0ZW1QYXRoIGluIG1hcCkgeworCQkJb2xkRGF0YQk9IGdldEJyYW5jaCggaXRlbVBhdGggKTsKKwkJCXZhbHVlCT0gb2xkRGF0YS5icmFuY2hbIG9sZERhdGEua2V5IF07CisJCQlpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgeworCQkJCW5ld0RhdGEgPSBnZXRCcmFuY2goIG1hcFtpdGVtUGF0aF0sIHRydWUgKTsKKwkJCQluZXdEYXRhLmJyYW5jaFsgbmV3RGF0YS5rZXkgXSA9IHZhbHVlOworCQkJCWRlbGV0ZSBvbGREYXRhLmJyYW5jaFsgb2xkRGF0YS5rZXkgXTsKKwkJCX0KKwkJfQorCisJCS8qKgorCQkqIEBwYXJhbSB7c3RyaW5nfQlwYXRoCisJCSogQHBhcmFtIHtib29sZWFuPX0JW2NyZWF0ZT1mYWxzZV0JQ3JlYXRlIHBhdGggaWYgZG9lcyBub3QgZXhpc3QKKwkJKi8KKwkJZnVuY3Rpb24gZ2V0QnJhbmNoIChwYXRoLCBjcmVhdGUpIHsKKwkJCXZhciBhID0gcGF0aC5zcGxpdCgiLiIpIC8vIHNwbGl0IGtleXMgaW50byBhcnJheQorCQkJLAljID0gYS5sZW5ndGggLSAxCisJCQksCUQgPSB7IGJyYW5jaDogb3B0cywga2V5OiBhW2NdIH0gLy8gaW5pdCBicmFuY2ggYXQgdG9wICYgc2V0IGtleSAobGFzdCBpdGVtKQorCQkJLAlpID0gMCwgaywgdW5kZWY7CisJCQlmb3IgKDsgaTxjOyBpKyspIHsgLy8gc2tpcCB0aGUgbGFzdCBrZXkgKGRhdGEpCisJCQkJayA9IGFbaV07CisJCQkJaWYgKEQuYnJhbmNoWyBrIF0gPT0gdW5kZWZpbmVkKSB7IC8vIGNoaWxkLWtleSBkb2VzIG5vdCBleGlzdAorCQkJCQlpZiAoY3JlYXRlKSB7CisJCQkJCQlELmJyYW5jaCA9IEQuYnJhbmNoWyBrIF0gPSB7fTsgLy8gY3JlYXRlIGNoaWxkLWJyYW5jaAorCQkJCQl9CisJCQkJCWVsc2UgLy8gY2FuJ3QgZ28gYW55IGZhcnRoZXIKKwkJCQkJCUQuYnJhbmNoID0ge307IC8vIGJyYW5jaCBpcyB1bmRlZmluZWQKKwkJCQl9CisJCQkJZWxzZQorCQkJCQlELmJyYW5jaCA9IEQuYnJhbmNoWyBrIF07IC8vIGdldCBjaGlsZC1icmFuY2gKKwkJCX0KKwkJCXJldHVybiBEOworCQl9OworCX0KKworLyoqCisqIEBwYXJhbSB7T2JqZWN0fQlvcHRzCisqLworLAlyZW5hbWVBbGxPcHRpb25zOiBmdW5jdGlvbiAob3B0cykgeworCQl2YXIgcmVuID0gJC5sYXlvdXQuYmFja3dhcmRDb21wYXRpYmlsaXR5LnJlbmFtZU9wdGlvbnM7CisJCS8vIHJlbmFtZSByb290IChsYXlvdXQpIG9wdGlvbnMKKwkJcmVuKCBvcHRzICk7CisJCS8vIHJlbmFtZSAnZGVmYXVsdHMnIHRvICdwYW5lcycKKwkJaWYgKG9wdHMuZGVmYXVsdHMpIHsKKwkJCWlmICh0eXBlb2Ygb3B0cy5wYW5lcyAhPT0gIm9iamVjdCIpCisJCQkJb3B0cy5wYW5lcyA9IHt9OworCQkJJC5leHRlbmQodHJ1ZSwgb3B0cy5wYW5lcywgb3B0cy5kZWZhdWx0cyk7CisJCQlkZWxldGUgb3B0cy5kZWZhdWx0czsKKwkJfQorCQkvLyByZW5hbWUgb3B0aW9ucyBpbiB0aGUgdGhlIG9wdGlvbnMucGFuZXMga2V5CisJCWlmIChvcHRzLnBhbmVzKSByZW4oIG9wdHMucGFuZXMgKTsKKwkJLy8gcmVuYW1lIG9wdGlvbnMgaW5zaWRlICplYWNoIHBhbmUga2V5KiwgZWc6IG9wdGlvbnMud2VzdAorCQkkLmVhY2goJC5sYXlvdXQuY29uZmlnLmFsbFBhbmVzLCBmdW5jdGlvbiAoaSwgcGFuZSkgeworCQkJaWYgKG9wdHNbcGFuZV0pIHJlbiggb3B0c1twYW5lXSApOworCQl9KTsJCisJCXJldHVybiBvcHRzOworCX0KK307CisKKworCisKKy8qCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoJQkVHSU4gV0lER0VUOiAkKCBzZWxlY3RvciApLmxheW91dCgge29wdGlvbnN9ICk7CisgKgk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworJC5mbi5sYXlvdXQgPSBmdW5jdGlvbiAob3B0cykgeworCXZhcgorCisJLy8gbG9jYWwgYWxpYXNlcyB0byBnbG9iYWwgZGF0YQorCWJyb3dzZXIJPSAkLmxheW91dC5icm93c2VyCissCV9jCQk9ICQubGF5b3V0LmNvbmZpZworCisJLy8gbG9jYWwgYWxpYXNlcyB0byB1dGxpdHkgbWV0aG9kcworLAljc3NXCT0gJC5sYXlvdXQuY3NzV2lkdGgKKywJY3NzSAk9ICQubGF5b3V0LmNzc0hlaWdodAorLAllbERpbXMJPSAkLmxheW91dC5nZXRFbGVtZW50RGltZW5zaW9ucworLAllbENTUwk9ICQubGF5b3V0LmdldEVsZW1lbnRDU1MKKywJZXZ0T2JqCT0gJC5sYXlvdXQuZ2V0RXZlbnRPYmplY3QKKywJZXZ0UGFuZQk9ICQubGF5b3V0LnBhcnNlUGFuZU5hbWUKKworLyoqCisgKiBvcHRpb25zIC0gcG9wdWxhdGVkIGJ5IGluaXRPcHRpb25zKCkKKyAqLworLAlvcHRpb25zID0gJC5leHRlbmQodHJ1ZSwge30sICQubGF5b3V0LmRlZmF1bHRzKQorLAllZmZlY3RzCT0gb3B0aW9ucy5lZmZlY3RzID0gJC5leHRlbmQodHJ1ZSwge30sICQubGF5b3V0LmVmZmVjdHMpCisKKy8qKgorICogbGF5b3V0LXN0YXRlIG9iamVjdAorICovCissCXN0YXRlID0geworCQkvLyBnZW5lcmF0ZSB1bmlxdWUgSUQgdG8gdXNlIGZvciBldmVudC5uYW1lc3BhY2Ugc28gY2FuIHVuYmluZCBvbmx5IGV2ZW50cyBhZGRlZCBieSAndGhpcyBsYXlvdXQnCisJCWlkOgkJCSJsYXlvdXQiKyAkLm5vdygpCS8vIGNvZGUgdXNlcyBhbGlhczogc0lECisJLAlpbml0aWFsaXplZDogZmFsc2UKKwksCWNvbnRhaW5lcjoJe30gLy8gaW5pdCBhbGwga2V5cworCSwJbm9ydGg6CQl7fQorCSwJc291dGg6CQl7fQorCSwJZWFzdDoJCXt9CisJLAl3ZXN0OgkJe30KKwksCWNlbnRlcjoJCXt9CisJfQorCisvKioKKyAqIHBhcmVudC9jaGlsZC1sYXlvdXQgcG9pbnRlcnMKKyAqLworLy8sCWhhc1BhcmVudExheW91dAk9IGZhbHNlCS0gZXhpc3RzIE9OTFkgaW5zaWRlIEluc3RhbmNlIHNvIGNhbiBiZSBzZXQgZXh0ZXJuYWxseQorLAljaGlsZHJlbiA9IHsKKwkJbm9ydGg6CQludWxsCisJLAlzb3V0aDoJCW51bGwKKwksCWVhc3Q6CQludWxsCisJLAl3ZXN0OgkJbnVsbAorCSwJY2VudGVyOgkJbnVsbAorCX0KKworLyoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICogIElOVEVSTkFMIEhFTFBFUiBGVU5DVElPTlMKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICovCisKKwkvKioKKwkqIE1hbmFnZXMgYWxsIGludGVybmFsIHRpbWVycworCSovCissCXRpbWVyID0geworCQlkYXRhOgl7fQorCSwJc2V0OglmdW5jdGlvbiAocywgZm4sIG1zKSB7IHRpbWVyLmNsZWFyKHMpOyB0aW1lci5kYXRhW3NdID0gc2V0VGltZW91dChmbiwgbXMpOyB9CisJLAljbGVhcjoJZnVuY3Rpb24gKHMpIHsgdmFyIHQ9dGltZXIuZGF0YTsgaWYgKHRbc10pIHtjbGVhclRpbWVvdXQodFtzXSk7IGRlbGV0ZSB0W3NdO30gfQorCX0KKworCS8qKgorCSogQWxlcnQgb3IgY29uc29sZS5sb2cgYSBtZXNzYWdlIC0gSUYgb3B0aW9uIGlzIGVuYWJsZWQuCisJKgorCSogQHBhcmFtIHsoc3RyaW5nfCFPYmplY3QpfQltc2cJCU1lc3NhZ2UgKG9yIGRlYnVnLWRhdGEpIHRvIGRpc3BsYXkKKwkqIEBwYXJhbSB7P2Jvb2xlYW59CQkJcG9wdXAJVHJ1ZSBieSBkZWZhdWx0LCBtZWFucyAnYWxlcnQnLCBmYWxzZSBtZWFucyB1c2UgY29uc29sZS5sb2cKKwkqIEBwYXJhbSB7P2Jvb2xlYW59CQkJZGVidWcJVHJ1ZSBtZWFucyBpcyBhIHdpZGdldCBkZWJ1Z2dpbmcgbWVzc2FnZQorCSovCissCV9sb2cgPSBmdW5jdGlvbiAobXNnLCBwb3B1cCwgZGVidWcpIHsKKwkJdmFyIG8gPSBvcHRpb25zOworCQlpZiAoKG8uc2hvd0Vycm9yTWVzc2FnZXMgJiYgIWRlYnVnKSB8fCAoZGVidWcgJiYgby5zaG93RGVidWdNZXNzYWdlcykpCisJCQkkLmxheW91dC5tc2coIG8ubmFtZSArJyAvICcrIG1zZywgKHBvcHVwICE9PSBmYWxzZSkgKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSogRXhlY3V0ZXMgYSBDYWxsYmFjayBmdW5jdGlvbiBhZnRlciBhIHRyaWdnZXIgZXZlbnQsIGxpa2UgcmVzaXplLCBvcGVuIG9yIGNsb3NlCisJKgorCSogQHBhcmFtIHtzdHJpbmd9CQkJZXZ0TmFtZQkJCU5hbWUgb2YgdGhlIGxheW91dCBjYWxsYmFjaywgZWcgIm9ucmVzaXplX3N0YXJ0IgorCSogQHBhcmFtIHs/c3RyaW5nfQkJCXBhbmUJCQlUaGlzIGlzIHBhc3NlZCBvbmx5IHNvIHdlIGNhbiBwYXNzIHRoZSAncGFuZSBvYmplY3QnIHRvIHRoZSBjYWxsYmFjaworCSogQHBhcmFtIHs/c3RyaW5nfD9ib29sZWFufQlza2lwQm91bmRFdmVudHMJVHJ1ZSA9IGRvIG5vdCBydW4gZXZlbnRzIGJvdW5kIHRvIHRoZSBlbGVtZW50cyAtIG9ubHkgdGhlIGNhbGxiYWNrcyBzZXQgaW4gb3B0aW9ucworCSovCissCV9ydW5DYWxsYmFja3MgPSBmdW5jdGlvbiAoZXZ0TmFtZSwgcGFuZSwgc2tpcEJvdW5kRXZlbnRzKSB7CisJCXZhcglwYW5lQ0IJPSBwYW5lICYmIGlzU3RyKHBhbmUpCisJCSwJcwkJPSBwYW5lQ0IgPyBzdGF0ZVtwYW5lXSA6IHN0YXRlCisJCSwJbwkJPSBwYW5lQ0IgPyBvcHRpb25zW3BhbmVdIDogb3B0aW9ucworCQksCWxOYW1lCT0gb3B0aW9ucy5uYW1lCisJCQkvLyBuYW1lcyBsaWtlIG9ub3BlbiBhbmQgb25vcGVuX2VuZCBzZXBhcmF0ZSBhcmUgaW50ZXJjaGFuZ2VhYmxlIGluIG9wdGlvbnMuLi4KKwkJLAlsbmcJCT0gZXZ0TmFtZSArIChldnROYW1lLm1hdGNoKC9fLykgPyAiIiA6ICJfZW5kIikKKwkJLAlzaHJ0CT0gbG5nLm1hdGNoKC9fZW5kJC8pID8gbG5nLnN1YnN0cigwLCBsbmcubGVuZ3RoIC0gNCkgOiAiIgorCQksCWZuCQk9IG9bbG5nXSB8fCBvW3NocnRdCisJCSwJcmV0VmFsCT0gIk5DIiAvLyBOQyA9IE5vIENhbGxiYWNrCisJCSwJYXJncwk9IFtdCisJCSwJJFAKKwkJOworCQlpZiAoICFwYW5lQ0IgJiYgJC50eXBlKHNraXBCb3VuZEV2ZW50cykgIT09ICdib29sZWFuJyApCisJCQlza2lwQm91bmRFdmVudHMgPSBwYW5lOyAvLyBhbGxvdyBwYW5lIHBhcmFtIHRvIGJlIHNraXBwZWQgZm9yIExheW91dCBjYWxsYmFjaworCisJCS8vIGZpcnN0IHRyaWdnZXIgdGhlIGNhbGxiYWNrIHNldCBpbiB0aGUgb3B0aW9ucworCQlpZiAoZm4pIHsKKwkJCXRyeSB7CisJCQkJLy8gY29udmVydCBmdW5jdGlvbiBuYW1lIChzdHJpbmcpIHRvIGZ1bmN0aW9uIG9iamVjdAorCQkJCWlmIChpc1N0ciggZm4gKSkgeworCQkJCQlpZiAoZm4ubWF0Y2goLywvKSkgeworCQkJCQkJLy8gZnVuY3Rpb24gbmFtZSBjYW5ub3QgY29udGFpbiBhIGNvbW1hLCAKKwkJCQkJCS8vIHNvIG11c3QgYmUgYSBmdW5jdGlvbiBuYW1lIEFORCBhIHBhcmFtZXRlciB0byBwYXNzCisJCQkJCQlhcmdzID0gZm4uc3BsaXQoIiwiKQorCQkJCQkJLAlmbiA9IGV2YWwoYXJnc1swXSk7CisJCQkJCX0KKwkJCQkJZWxzZSAvLyBqdXN0IHRoZSBuYW1lIG9mIGFuIGV4dGVybmFsIGZ1bmN0aW9uPworCQkJCQkJZm4gPSBldmFsKGZuKTsKKwkJCQl9CisJCQkJLy8gZXhlY3V0ZSB0aGUgY2FsbGJhY2ssIGlmIGV4aXN0cworCQkJCWlmICgkLmlzRnVuY3Rpb24oIGZuICkpIHsKKwkJCQkJaWYgKGFyZ3MubGVuZ3RoKQorCQkJCQkJcmV0VmFsID0gZm4oYXJnc1sxXSk7IC8vIHBhc3MgdGhlIGFyZ3VtZW50IHBhcnNlZCBmcm9tICdsaXN0JworCQkJCQllbHNlIGlmICggcGFuZUNCICkKKwkJCQkJCS8vIHBhc3MgZGF0YTogcGFuZS1uYW1lLCBwYW5lLWVsZW1lbnQsIHBhbmUtc3RhdGUsIHBhbmUtb3B0aW9ucywgYW5kIGxheW91dC1uYW1lCisJCQkJCQlyZXRWYWwgPSBmbiggcGFuZSwgJFBzW3BhbmVdLCBzLCBvLCBsTmFtZSApOworCQkJCQllbHNlIC8vIG11c3QgYmUgYSBsYXlvdXQvY29udGFpbmVyIGNhbGxiYWNrIC0gcGFzcyBzdWl0YWJsZSBpbmZvCisJCQkJCQlyZXRWYWwgPSBmbiggSW5zdGFuY2UsIHMsIG8sIGxOYW1lICk7CisJCQkJfQorCQkJfQorCQkJY2F0Y2ggKGV4KSB7CisJCQkJX2xvZyggb3B0aW9ucy5lcnJvcnMuY2FsbGJhY2tFcnJvci5yZXBsYWNlKC9FVkVOVC8sICQudHJpbShwYW5lICsiICIrIGxuZykpLCBmYWxzZSApOworCQkJfQorCQl9CisKKwkJLy8gdHJpZ2dlciBhZGRpdGlvbmFsIGV2ZW50cyBib3VuZCBkaXJlY3RseSB0byB0aGUgcGFuZQorCQlpZiAoIXNraXBCb3VuZEV2ZW50cyAmJiByZXRWYWwgIT09IGZhbHNlKSB7CisJCQlpZiAoIHBhbmVDQiApIHsgLy8gUEFORSBldmVudHMgY2FuIGJlIGJvdW5kIHRvIGVhY2ggcGFuZS1lbGVtZW50cworCQkJCSRQCT0gJFBzW3BhbmVdOworCQkJCW8JPSBvcHRpb25zW3BhbmVdOworCQkJCXMJPSBzdGF0ZVtwYW5lXTsKKwkJCQkkUC50cmlnZ2VySGFuZGxlcignbGF5b3V0cGFuZScrIGxuZywgWyBwYW5lLCAkUCwgcywgbywgbE5hbWUgXSk7CisJCQkJaWYgKHNocnQpCisJCQkJCSRQLnRyaWdnZXJIYW5kbGVyKCdsYXlvdXRwYW5lJysgc2hydCwgWyBwYW5lLCAkUCwgcywgbywgbE5hbWUgXSk7CisJCQl9CisJCQllbHNlIHsgLy8gTEFZT1VUIGV2ZW50cyBjYW4gYmUgYm91bmQgdG8gdGhlIGNvbnRhaW5lci1lbGVtZW50CisJCQkJJE4udHJpZ2dlckhhbmRsZXIoJ2xheW91dCcrIGxuZywgWyBJbnN0YW5jZSwgcywgbywgbE5hbWUgXSk7CisJCQkJaWYgKHNocnQpCisJCQkJCSROLnRyaWdnZXJIYW5kbGVyKCdsYXlvdXQnKyBzaHJ0LCBbIEluc3RhbmNlLCBzLCBvLCBsTmFtZSBdKTsKKwkJCX0KKwkJfQorCisJCS8vIEFMV0FZUyByZXNpemVDaGlsZExheW91dCBhZnRlciBhIHJlc2l6ZSBldmVudCAtIGV2ZW4gZHVyaW5nIGluaXRpYWxpemF0aW9uCisJCWlmIChldnROYW1lID09PSAib25yZXNpemVfZW5kIiB8fCBldnROYW1lID09PSAib25zaXplY29udGVudF9lbmQiKQorCQkJcmVzaXplQ2hpbGRMYXlvdXQocGFuZSk7IAorCisJCXJldHVybiByZXRWYWw7CisJfQorCisKKwkvKioKKwkqIGN1cmUgaWZyYW1lIGRpc3BsYXkgaXNzdWVzIGluIElFICYgb3RoZXIgYnJvd3NlcnMKKwkqLworLAlfZml4SWZyYW1lID0gZnVuY3Rpb24gKHBhbmUpIHsKKwkJaWYgKGJyb3dzZXIubW96aWxsYSkgcmV0dXJuOyAvLyBza2lwIEZpcmVGb3ggLSBpdCBhdXRvLXJlZnJlc2hlcyBpZnJhbWVzIG9uU2hvdworCQl2YXIgJFAgPSAkUHNbcGFuZV07CisJCS8vIGlmIHRoZSAncGFuZScgaXMgYW4gaWZyYW1lLCBkbyBpdAorCQlpZiAoc3RhdGVbcGFuZV0udGFnTmFtZSA9PT0gIklGUkFNRSIpCisJCQkkUC5jc3MoX2MuaGlkZGVuKS5jc3MoX2MudmlzaWJsZSk7IAorCQllbHNlIC8vIGRpdHRvIGZvciBhbnkgaWZyYW1lcyBJTlNJREUgdGhlIHBhbmUKKwkJCSRQLmZpbmQoJ0lGUkFNRScpLmNzcyhfYy5oaWRkZW4pLmNzcyhfYy52aXNpYmxlKTsKKwl9CisKKwkvKioKKwkqIEBwYXJhbSAge3N0cmluZ30JCXBhbmUJCUNhbiBhY2NlcHQgT05MWSBhICdwYW5lJyAoZWFzdCwgd2VzdCwgZXRjKQorCSogQHBhcmFtICB7bnVtYmVyPX0JCW91dGVyU2l6ZQkob3B0aW9uYWwpIENhbiBwYXNzIGEgd2lkdGgsIGFsbG93aW5nIGNhbGN1bGF0aW9ucyBCRUZPUkUgZWxlbWVudCBpcyByZXNpemVkCisJKiBAcmV0dXJuIHtudW1iZXJ9CQlSZXR1cm5zIHRoZSBpbm5lckhlaWdodC9XaWR0aCBvZiBlbCBieSBzdWJ0cmFjdGluZyBwYWRkaW5nIGFuZCBib3JkZXJzCisJKi8KKywJY3NzU2l6ZSA9IGZ1bmN0aW9uIChwYW5lLCBvdXRlclNpemUpIHsKKwkJdmFyIGZuID0gX2NbcGFuZV0uZGlyPT0iaG9yeiIgPyBjc3NIIDogY3NzVzsKKwkJcmV0dXJuIGZuKCRQc1twYW5lXSwgb3V0ZXJTaXplKTsKKwl9CisKKwkvKioKKwkqIEBwYXJhbSAge3N0cmluZ30JCXBhbmUJCUNhbiBhY2NlcHQgT05MWSBhICdwYW5lJyAoZWFzdCwgd2VzdCwgZXRjKQorCSogQHJldHVybiB7T2JqZWN0fQkJUmV0dXJucyBoYXNoIG9mIG1pbldpZHRoICYgbWluSGVpZ2h0CisJKi8KKywJY3NzTWluRGltcyA9IGZ1bmN0aW9uIChwYW5lKSB7CisJCS8vIG1pbldpZHRoL0hlaWdodCBtZWFucyBDU1Mgd2lkdGgvaGVpZ2h0ID0gMXB4CisJCXZhcgkkUAk9ICRQc1twYW5lXQorCQksCWRpcgk9IF9jW3BhbmVdLmRpcgorCQksCWQJPSB7CisJCQkJbWluV2lkdGg6CTEwMDEgLSBjc3NXKCRQLCAxMDAwKQorCQkJLAltaW5IZWlnaHQ6CTEwMDEgLSBjc3NIKCRQLCAxMDAwKQorCQkJfQorCQk7CisJCWlmIChkaXIgPT09ICJob3J6IikgZC5taW5TaXplID0gZC5taW5IZWlnaHQ7CisJCWlmIChkaXIgPT09ICJ2ZXJ0IikgZC5taW5TaXplID0gZC5taW5XaWR0aDsKKwkJcmV0dXJuIGQ7CisJfQorCisJLy8gVE9ETzogc2VlIGlmIHRoZXNlIG1ldGhvZHMgY2FuIGJlIG1hZGUgbW9yZSB1c2VmdWwuLi4KKwkvLyBUT0RPOiAqbWF5YmUqIHJldHVybiBjc3NXL0ggZnJvbSB0aGVzZSBzbyBjYWxsZXIgY2FuIHVzZSB0aGlzIGluZm8KKworCS8qKgorCSogQHBhcmFtIHsoc3RyaW5nfCFPYmplY3QpfQkJZWwKKwkqIEBwYXJhbSB7bnVtYmVyPX0JCQkJb3V0ZXJXaWR0aAorCSogQHBhcmFtIHtib29sZWFuPX0JCQkJW2F1dG9IaWRlPWZhbHNlXQorCSovCissCXNldE91dGVyV2lkdGggPSBmdW5jdGlvbiAoZWwsIG91dGVyV2lkdGgsIGF1dG9IaWRlKSB7CisJCXZhciAkRSA9IGVsLCB3OworCQlpZiAoaXNTdHIoZWwpKSAkRSA9ICRQc1tlbF07IC8vIHdlc3QKKwkJZWxzZSBpZiAoIWVsLmpxdWVyeSkgJEUgPSAkKGVsKTsKKwkJdyA9IGNzc1coJEUsIG91dGVyV2lkdGgpOworCQkkRS5jc3MoeyB3aWR0aDogdyB9KTsKKwkJaWYgKHcgPiAwKSB7CisJCQlpZiAoYXV0b0hpZGUgJiYgJEUuZGF0YSgnYXV0b0hpZGRlbicpICYmICRFLmlubmVySGVpZ2h0KCkgPiAwKSB7CisJCQkJJEUuc2hvdygpLmRhdGEoJ2F1dG9IaWRkZW4nLCBmYWxzZSk7CisJCQkJaWYgKCFicm93c2VyLm1vemlsbGEpIC8vIEZpcmVGb3ggcmVmcmVzaGVzIGlmcmFtZXMgLSBJRSBkb2VzIG5vdAorCQkJCQkvLyBtYWtlIGhpZGRlbiwgdGhlbiB2aXNpYmxlIHRvICdyZWZyZXNoJyBkaXNwbGF5IGFmdGVyIGFuaW1hdGlvbgorCQkJCQkkRS5jc3MoX2MuaGlkZGVuKS5jc3MoX2MudmlzaWJsZSk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoYXV0b0hpZGUgJiYgISRFLmRhdGEoJ2F1dG9IaWRkZW4nKSkKKwkJCSRFLmhpZGUoKS5kYXRhKCdhdXRvSGlkZGVuJywgdHJ1ZSk7CisJfQorCisJLyoqCisJKiBAcGFyYW0geyhzdHJpbmd8IU9iamVjdCl9CQllbAorCSogQHBhcmFtIHtudW1iZXI9fQkJCQlvdXRlckhlaWdodAorCSogQHBhcmFtIHtib29sZWFuPX0JCQkJW2F1dG9IaWRlPWZhbHNlXQorCSovCissCXNldE91dGVySGVpZ2h0ID0gZnVuY3Rpb24gKGVsLCBvdXRlckhlaWdodCwgYXV0b0hpZGUpIHsKKwkJdmFyICRFID0gZWwsIGg7CisJCWlmIChpc1N0cihlbCkpICRFID0gJFBzW2VsXTsgLy8gd2VzdAorCQllbHNlIGlmICghZWwuanF1ZXJ5KSAkRSA9ICQoZWwpOworCQloID0gY3NzSCgkRSwgb3V0ZXJIZWlnaHQpOworCQkkRS5jc3MoeyBoZWlnaHQ6IGgsIHZpc2liaWxpdHk6ICJ2aXNpYmxlIiB9KTsgLy8gbWF5IGhhdmUgYmVlbiAnaGlkZGVuJyBieSBzaXplQ29udGVudAorCQlpZiAoaCA+IDAgJiYgJEUuaW5uZXJXaWR0aCgpID4gMCkgeworCQkJaWYgKGF1dG9IaWRlICYmICRFLmRhdGEoJ2F1dG9IaWRkZW4nKSkgeworCQkJCSRFLnNob3coKS5kYXRhKCdhdXRvSGlkZGVuJywgZmFsc2UpOworCQkJCWlmICghYnJvd3Nlci5tb3ppbGxhKSAvLyBGaXJlRm94IHJlZnJlc2hlcyBpZnJhbWVzIC0gSUUgZG9lcyBub3QKKwkJCQkJJEUuY3NzKF9jLmhpZGRlbikuY3NzKF9jLnZpc2libGUpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKGF1dG9IaWRlICYmICEkRS5kYXRhKCdhdXRvSGlkZGVuJykpCisJCQkkRS5oaWRlKCkuZGF0YSgnYXV0b0hpZGRlbicsIHRydWUpOworCX0KKworCS8qKgorCSogQHBhcmFtIHsoc3RyaW5nfCFPYmplY3QpfQkJZWwKKwkqIEBwYXJhbSB7bnVtYmVyPX0JCQkJb3V0ZXJTaXplCisJKiBAcGFyYW0ge2Jvb2xlYW49fQkJCQlbYXV0b0hpZGU9ZmFsc2VdCisJKi8KKywJc2V0T3V0ZXJTaXplID0gZnVuY3Rpb24gKGVsLCBvdXRlclNpemUsIGF1dG9IaWRlKSB7CisJCWlmIChfY1twYW5lXS5kaXI9PSJob3J6IikgLy8gcGFuZSA9IG5vcnRoIG9yIHNvdXRoCisJCQlzZXRPdXRlckhlaWdodChlbCwgb3V0ZXJTaXplLCBhdXRvSGlkZSk7CisJCWVsc2UgLy8gcGFuZSA9IGVhc3Qgb3Igd2VzdAorCQkJc2V0T3V0ZXJXaWR0aChlbCwgb3V0ZXJTaXplLCBhdXRvSGlkZSk7CisJfQorCisKKwkvKioKKwkqIENvbnZlcnRzIGFueSAnc2l6ZScgcGFyYW1zIHRvIGEgcGl4ZWwvaW50ZWdlciBzaXplLCBpZiBub3QgYWxyZWFkeQorCSogSWYgJ2F1dG8nIG9yIGEgZGVjaW1hbC9wZXJjZW50YWdlIGlzIHBhc3NlZCBhcyAnc2l6ZScsIGEgcGl4ZWwtc2l6ZSBpcyBjYWxjdWxhdGVkCisJKgorCS8qKgorCSogQHBhcmFtICB7c3RyaW5nfQkJCQlwYW5lCisJKiBAcGFyYW0gIHsoc3RyaW5nfG51bWJlcik9fQlzaXplCisJKiBAcGFyYW0gIHtzdHJpbmc9fQkJCQlbZGlyXQorCSogQHJldHVybiB7bnVtYmVyfQorCSovCissCV9wYXJzZVNpemUgPSBmdW5jdGlvbiAocGFuZSwgc2l6ZSwgZGlyKSB7CisJCWlmICghZGlyKSBkaXIgPSBfY1twYW5lXS5kaXI7CisKKwkJaWYgKGlzU3RyKHNpemUpICYmIHNpemUubWF0Y2goLyUvKSkKKwkJCXNpemUgPSAoc2l6ZSA9PT0gJzEwMCUnKSA/IC0xIDogcGFyc2VJbnQoc2l6ZSwgMTApIC8gMTAwOyAvLyBjb252ZXJ0ICUgdG8gZGVjaW1hbAorCisJCWlmIChzaXplID09PSAwKQorCQkJcmV0dXJuIDA7CisJCWVsc2UgaWYgKHNpemUgPj0gMSkKKwkJCXJldHVybiBwYXJzZUludChzaXplLCAxMCk7CisKKwkJdmFyIG8gPSBvcHRpb25zLCBhdmFpbCA9IDA7CisJCWlmIChkaXI9PSJob3J6IikgLy8gbm9ydGggb3Igc291dGggb3IgY2VudGVyLm1pbkhlaWdodAorCQkJYXZhaWwgPSBzQy5pbm5lckhlaWdodCAtICgkUHMubm9ydGggPyBvLm5vcnRoLnNwYWNpbmdfb3BlbiA6IDApIC0gKCRQcy5zb3V0aCA/IG8uc291dGguc3BhY2luZ19vcGVuIDogMCk7CisJCWVsc2UgaWYgKGRpcj09InZlcnQiKSAvLyBlYXN0IG9yIHdlc3Qgb3IgY2VudGVyLm1pbldpZHRoCisJCQlhdmFpbCA9IHNDLmlubmVyV2lkdGggLSAoJFBzLndlc3QgPyBvLndlc3Quc3BhY2luZ19vcGVuIDogMCkgLSAoJFBzLmVhc3QgPyBvLmVhc3Quc3BhY2luZ19vcGVuIDogMCk7CisKKwkJaWYgKHNpemUgPT09IC0xKSAvLyAtMSA9PSAxMDAlCisJCQlyZXR1cm4gYXZhaWw7CisJCWVsc2UgaWYgKHNpemUgPiAwKSAvLyBwZXJjZW50YWdlLCBlZzogLjI1CisJCQlyZXR1cm4gcm91bmQoYXZhaWwgKiBzaXplKTsKKwkJZWxzZSBpZiAocGFuZT09ImNlbnRlciIpCisJCQlyZXR1cm4gMDsKKwkJZWxzZSB7IC8vIHNpemUgPCAwIHx8IHNpemU9PSdhdXRvJyB8fCBzaXplPT1NaXNzaW5nIHx8IHNpemU9PUludmFsaWQKKwkJCS8vIGF1dG8tc2l6ZSB0aGUgcGFuZQorCQkJdmFyCWRpbQk9IChkaXIgPT09ICJob3J6IiA/ICJoZWlnaHQiIDogIndpZHRoIikKKwkJCSwJJFAJPSAkUHNbcGFuZV0KKwkJCSwJJEMJPSBkaW0gPT09ICdoZWlnaHQnID8gJENzW3BhbmVdIDogZmFsc2UKKwkJCSwJdmlzCT0gJC5sYXlvdXQuc2hvd0ludmlzaWJseSgkUCkgLy8gc2hvdyBwYW5lIGludmlzaWJseSBpZiBoaWRkZW4KKwkJCSwJc3pQCT0gJFAuY3NzKGRpbSkgLy8gU0FWRSBjdXJyZW50IHBhbmUgc2l6ZQorCQkJLAlzekMJPSAkQyA/ICRDLmNzcyhkaW0pIDogMCAvLyBTQVZFIGN1cnJlbnQgY29udGVudCBzaXplCisJCQk7CisJCQkkUC5jc3MoZGltLCAiYXV0byIpOworCQkJaWYgKCRDKSAkQy5jc3MoZGltLCAiYXV0byIpOworCQkJc2l6ZSA9IChkaW0gPT09ICJoZWlnaHQiKSA/ICRQLm91dGVySGVpZ2h0KCkgOiAkUC5vdXRlcldpZHRoKCk7IC8vIE1FQVNVUkUKKwkJCSRQLmNzcyhkaW0sIHN6UCkuY3NzKHZpcyk7IC8vIFJFU0VUIHNpemUgJiB2aXNpYmlsaXR5CisJCQlpZiAoJEMpICRDLmNzcyhkaW0sIHN6Qyk7CisJCQlyZXR1cm4gc2l6ZTsKKwkJfQorCX0KKworCS8qKgorCSogQ2FsY3VsYXRlcyBjdXJyZW50ICdzaXplJyAob3V0ZXItd2lkdGggb3Igb3V0ZXItaGVpZ2h0KSBvZiBhIGJvcmRlci1wYW5lIC0gb3B0aW9uYWxseSB3aXRoICdwYW5lLXNwYWNpbmcnIGFkZGVkCisJKgorCSogQHBhcmFtICB7KHN0cmluZ3whT2JqZWN0KX0JcGFuZQorCSogQHBhcmFtICB7Ym9vbGVhbj19CQkJW2luY2xTcGFjZT1mYWxzZV0KKwkqIEByZXR1cm4ge251bWJlcn0JCQkJUmV0dXJucyBFSVRIRVIgV2lkdGggZm9yIGVhc3Qvd2VzdCBwYW5lcyBPUiBIZWlnaHQgZm9yIG5vcnRoL3NvdXRoIHBhbmVzCisJKi8KKywJZ2V0UGFuZVNpemUgPSBmdW5jdGlvbiAocGFuZSwgaW5jbFNwYWNlKSB7CisJCXZhciAKKwkJCSRQCT0gJFBzW3BhbmVdCisJCSwJbwk9IG9wdGlvbnNbcGFuZV0KKwkJLAlzCT0gc3RhdGVbcGFuZV0KKwkJLAlvU3AJPSAoaW5jbFNwYWNlID8gby5zcGFjaW5nX29wZW4gOiAwKQorCQksCWNTcAk9IChpbmNsU3BhY2UgPyBvLnNwYWNpbmdfY2xvc2VkIDogMCkKKwkJOworCQlpZiAoISRQIHx8IHMuaXNIaWRkZW4pCisJCQlyZXR1cm4gMDsKKwkJZWxzZSBpZiAocy5pc0Nsb3NlZCB8fCAocy5pc1NsaWRpbmcgJiYgaW5jbFNwYWNlKSkKKwkJCXJldHVybiBjU3A7CisJCWVsc2UgaWYgKF9jW3BhbmVdLmRpciA9PT0gImhvcnoiKQorCQkJcmV0dXJuICRQLm91dGVySGVpZ2h0KCkgKyBvU3A7CisJCWVsc2UgLy8gZGlyID09PSAidmVydCIKKwkJCXJldHVybiAkUC5vdXRlcldpZHRoKCkgKyBvU3A7CisJfQorCisJLyoqCisJKiBDYWxjdWxhdGUgbWluL21heCBwYW5lIGRpbWVuc2lvbnMgYW5kIGxpbWl0cyBmb3IgcmVzaXppbmcKKwkqCisJKiBAcGFyYW0gIHtzdHJpbmd9CQlwYW5lCisJKiBAcGFyYW0gIHtib29sZWFuPX0JW3NsaWRlPWZhbHNlXQorCSovCissCXNldFNpemVMaW1pdHMgPSBmdW5jdGlvbiAocGFuZSwgc2xpZGUpIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJdmFyIAorCQkJbwkJCQk9IG9wdGlvbnNbcGFuZV0KKwkJLAlzCQkJCT0gc3RhdGVbcGFuZV0KKwkJLAljCQkJCT0gX2NbcGFuZV0KKwkJLAlkaXIJCQkJPSBjLmRpcgorCQksCXNpZGUJCQk9IGMuc2lkZS50b0xvd2VyQ2FzZSgpCisJCSwJdHlwZQkJCT0gYy5zaXplVHlwZS50b0xvd2VyQ2FzZSgpCisJCSwJaXNTbGlkaW5nCQk9IChzbGlkZSAhPSB1bmRlZmluZWQgPyBzbGlkZSA6IHMuaXNTbGlkaW5nKSAvLyBvbmx5IG9wZW4oKSBwYXNzZXMgJ3NsaWRlJyBwYXJhbQorCQksCSRQCQkJCT0gJFBzW3BhbmVdCisJCSwJcGFuZVNwYWNpbmcJCT0gby5zcGFjaW5nX29wZW4KKwkJLy8JbWVhc3VyZSB0aGUgcGFuZSBvbiB0aGUgKm9wcG9zaXRlIHNpZGUqIGZyb20gdGhpcyBwYW5lCisJCSwJYWx0UGFuZQkJCT0gX2Mub3Bwb3NpdGVFZGdlW3BhbmVdCisJCSwJYWx0UwkJCT0gc3RhdGVbYWx0UGFuZV0KKwkJLAkkYWx0UAkJCT0gJFBzW2FsdFBhbmVdCisJCSwJYWx0UGFuZVNpemUJCT0gKCEkYWx0UCB8fCBhbHRTLmlzVmlzaWJsZT09PWZhbHNlIHx8IGFsdFMuaXNTbGlkaW5nID8gMCA6IChkaXI9PSJob3J6IiA/ICRhbHRQLm91dGVySGVpZ2h0KCkgOiAkYWx0UC5vdXRlcldpZHRoKCkpKQorCQksCWFsdFBhbmVTcGFjaW5nCT0gKCghJGFsdFAgfHwgYWx0Uy5pc0hpZGRlbiA/IDAgOiBvcHRpb25zW2FsdFBhbmVdWyBhbHRTLmlzQ2xvc2VkICE9PSBmYWxzZSA/ICJzcGFjaW5nX2Nsb3NlZCIgOiAic3BhY2luZ19vcGVuIiBdKSB8fCAwKQorCQkvLwlsaW1pdFNpemUgcHJldmVudHMgdGhpcyBwYW5lIGZyb20gJ292ZXJsYXBwaW5nJyBvcHBvc2l0ZSBwYW5lCisJCSwJY29udGFpbmVyU2l6ZQk9IChkaXI9PSJob3J6IiA/IHNDLmlubmVySGVpZ2h0IDogc0MuaW5uZXJXaWR0aCkKKwkJLAltaW5DZW50ZXJEaW1zCT0gY3NzTWluRGltcygiY2VudGVyIikKKwkJLAltaW5DZW50ZXJTaXplCT0gZGlyPT0iaG9yeiIgPyBtYXgob3B0aW9ucy5jZW50ZXIubWluSGVpZ2h0LCBtaW5DZW50ZXJEaW1zLm1pbkhlaWdodCkgOiBtYXgob3B0aW9ucy5jZW50ZXIubWluV2lkdGgsIG1pbkNlbnRlckRpbXMubWluV2lkdGgpCisJCS8vCWlmIHBhbmUgaXMgJ3NsaWRpbmcnLCB0aGVuIGlnbm9yZSBjZW50ZXIgYW5kIGFsdC1wYW5lIHNpemVzIC0gYmVjYXVzZSAnb3ZlcmxheXMnIHRoZW0KKwkJLAlsaW1pdFNpemUJCT0gKGNvbnRhaW5lclNpemUgLSBwYW5lU3BhY2luZyAtIChpc1NsaWRpbmcgPyAwIDogKF9wYXJzZVNpemUoImNlbnRlciIsIG1pbkNlbnRlclNpemUsIGRpcikgKyBhbHRQYW5lU2l6ZSArIGFsdFBhbmVTcGFjaW5nKSkpCisJCSwJbWluU2l6ZQkJCT0gcy5taW5TaXplID0gbWF4KCBfcGFyc2VTaXplKHBhbmUsIG8ubWluU2l6ZSksIGNzc01pbkRpbXMocGFuZSkubWluU2l6ZSApCisJCSwJbWF4U2l6ZQkJCT0gcy5tYXhTaXplID0gbWluKCAoby5tYXhTaXplID8gX3BhcnNlU2l6ZShwYW5lLCBvLm1heFNpemUpIDogMTAwMDAwKSwgbGltaXRTaXplICkKKwkJLAlyCQkJCT0gcy5yZXNpemVyUG9zaXRpb24gPSB7fSAvLyB1c2VkIHRvIHNldCByZXNpemluZyBsaW1pdHMKKwkJLAl0b3AJCQkJPSBzQy5pbnNldFRvcAorCQksCWxlZnQJCQk9IHNDLmluc2V0TGVmdAorCQksCVcJCQkJPSBzQy5pbm5lcldpZHRoCisJCSwJSAkJCQk9IHNDLmlubmVySGVpZ2h0CisJCSwJclcJCQkJPSBvLnNwYWNpbmdfb3BlbiAvLyBzdWJ0cmFjdCByZXNpemVyLXdpZHRoIHRvIGdldCB0b3AvbGVmdCBwb3NpdGlvbiBmb3Igc291dGgvZWFzdAorCQk7CisJCXN3aXRjaCAocGFuZSkgeworCQkJY2FzZSAibm9ydGgiOglyLm1pbiA9IHRvcCArIG1pblNpemU7CisJCQkJCQkJci5tYXggPSB0b3AgKyBtYXhTaXplOworCQkJCQkJCWJyZWFrOworCQkJY2FzZSAid2VzdCI6CXIubWluID0gbGVmdCArIG1pblNpemU7CisJCQkJCQkJci5tYXggPSBsZWZ0ICsgbWF4U2l6ZTsKKwkJCQkJCQlicmVhazsKKwkJCWNhc2UgInNvdXRoIjoJci5taW4gPSB0b3AgKyBIIC0gbWF4U2l6ZSAtIHJXOworCQkJCQkJCXIubWF4ID0gdG9wICsgSCAtIG1pblNpemUgLSByVzsKKwkJCQkJCQlicmVhazsKKwkJCWNhc2UgImVhc3QiOglyLm1pbiA9IGxlZnQgKyBXIC0gbWF4U2l6ZSAtIHJXOworCQkJCQkJCXIubWF4ID0gbGVmdCArIFcgLSBtaW5TaXplIC0gclc7CisJCQkJCQkJYnJlYWs7CisJCX07CisJfQorCisJLyoqCisJKiBSZXR1cm5zIGRhdGEgZm9yIHNldHRpbmcgdGhlIHNpemUvcG9zaXRpb24gb2YgY2VudGVyIHBhbmUuIEFsc28gdXNlZCB0byBzZXQgSGVpZ2h0IGZvciBlYXN0L3dlc3QgcGFuZXMKKwkqCisJKiBAcmV0dXJuIEpTT04gIFJldHVybnMgYSBoYXNoIG9mIGFsbCBkaW1lbnNpb25zOiB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQsIChvdXRlcikgd2lkdGggYW5kIChvdXRlcikgaGVpZ2h0CisJKi8KKywJY2FsY05ld0NlbnRlclBhbmVEaW1zID0gZnVuY3Rpb24gKCkgeworCQl2YXIgZCA9IHsKKwkJCXRvcDoJZ2V0UGFuZVNpemUoIm5vcnRoIiwgdHJ1ZSkgLy8gdHJ1ZSA9IGluY2x1ZGUgJ3NwYWNpbmcnIHZhbHVlIGZvciBwYW5lCisJCSwJYm90dG9tOglnZXRQYW5lU2l6ZSgic291dGgiLCB0cnVlKQorCQksCWxlZnQ6CWdldFBhbmVTaXplKCJ3ZXN0IiwgdHJ1ZSkKKwkJLAlyaWdodDoJZ2V0UGFuZVNpemUoImVhc3QiLCB0cnVlKQorCQksCXdpZHRoOgkwCisJCSwJaGVpZ2h0OgkwCisJCX07CisKKwkJLy8gTk9URTogc0MgPSBzdGF0ZS5jb250YWluZXIKKwkJLy8gY2FsYyBjZW50ZXItcGFuZSBvdXRlciBkaW1lbnNpb25zCisJCWQud2lkdGgJCT0gc0MuaW5uZXJXaWR0aCAtIGQubGVmdCAtIGQucmlnaHQ7ICAvLyBvdXRlcldpZHRoCisJCWQuaGVpZ2h0CT0gc0MuaW5uZXJIZWlnaHQgLSBkLmJvdHRvbSAtIGQudG9wOyAvLyBvdXRlckhlaWdodAorCQkvLyBhZGQgdGhlICdjb250YWluZXIgYm9yZGVyL3BhZGRpbmcnIHRvIGdldCBmaW5hbCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gdGhlIGNvbnRhaW5lcgorCQlkLnRvcAkJKz0gc0MuaW5zZXRUb3A7CisJCWQuYm90dG9tCSs9IHNDLmluc2V0Qm90dG9tOworCQlkLmxlZnQJCSs9IHNDLmluc2V0TGVmdDsKKwkJZC5yaWdodAkJKz0gc0MuaW5zZXRSaWdodDsKKworCQlyZXR1cm4gZDsKKwl9CisKKworCS8qKgorCSogQHBhcmFtIHshT2JqZWN0fQkJZWwKKwkqIEBwYXJhbSB7Ym9vbGVhbj19CQlbYWxsU3RhdGVzPWZhbHNlXQorCSovCissCWdldEhvdmVyQ2xhc3NlcyA9IGZ1bmN0aW9uIChlbCwgYWxsU3RhdGVzKSB7CisJCXZhcgorCQkJJEVsCQk9ICQoZWwpCisJCSwJdHlwZQk9ICRFbC5kYXRhKCJsYXlvdXRSb2xlIikKKwkJLAlwYW5lCT0gJEVsLmRhdGEoImxheW91dEVkZ2UiKQorCQksCW8JCT0gb3B0aW9uc1twYW5lXQorCQksCXJvb3QJPSBvW3R5cGUgKyJDbGFzcyJdCisJCSwJX3BhbmUJPSAiLSIrIHBhbmUgLy8gZWc6ICItd2VzdCIKKwkJLAlfb3Blbgk9ICItb3BlbiIKKwkJLAlfY2xvc2VkCT0gIi1jbG9zZWQiCisJCSwJX3NsaWRlCT0gIi1zbGlkaW5nIgorCQksCV9ob3Zlcgk9ICItaG92ZXIgIiAvLyBOT1RFIHRoZSB0cmFpbGluZyBzcGFjZQorCQksCV9zdGF0ZQk9ICRFbC5oYXNDbGFzcyhyb290K19jbG9zZWQpID8gX2Nsb3NlZCA6IF9vcGVuCisJCSwJX2FsdAk9IF9zdGF0ZSA9PT0gX2Nsb3NlZCA/IF9vcGVuIDogX2Nsb3NlZAorCQksCWNsYXNzZXMgPSAocm9vdCtfaG92ZXIpICsgKHJvb3QrX3BhbmUrX2hvdmVyKSArIChyb290K19zdGF0ZStfaG92ZXIpICsgKHJvb3QrX3BhbmUrX3N0YXRlK19ob3ZlcikKKwkJOworCQlpZiAoYWxsU3RhdGVzKSAvLyB3aGVuICdyZW1vdmluZycgY2xhc3NlcywgYWxzbyByZW1vdmUgYWx0ZXJuYXRlLXN0YXRlIGNsYXNzZXMKKwkJCWNsYXNzZXMgKz0gKHJvb3QrX2FsdCtfaG92ZXIpICsgKHJvb3QrX3BhbmUrX2FsdCtfaG92ZXIpOworCisJCWlmICh0eXBlPT0icmVzaXplciIgJiYgJEVsLmhhc0NsYXNzKHJvb3QrX3NsaWRlKSkKKwkJCWNsYXNzZXMgKz0gKHJvb3QrX3NsaWRlK19ob3ZlcikgKyAocm9vdCtfcGFuZStfc2xpZGUrX2hvdmVyKTsKKworCQlyZXR1cm4gJC50cmltKGNsYXNzZXMpOworCX0KKywJYWRkSG92ZXIJPSBmdW5jdGlvbiAoZXZ0LCBlbCkgeworCQl2YXIgJEUgPSAkKGVsIHx8IHRoaXMpOworCQlpZiAoZXZ0ICYmICRFLmRhdGEoImxheW91dFJvbGUiKSA9PT0gInRvZ2dsZXIiKQorCQkJZXZ0LnN0b3BQcm9wYWdhdGlvbigpOyAvLyBwcmV2ZW50IHRyaWdnZXJpbmcgJ3NsaWRlJyBvbiBSZXNpemVyLWJhcgorCQkkRS5hZGRDbGFzcyggZ2V0SG92ZXJDbGFzc2VzKCRFKSApOworCX0KKywJcmVtb3ZlSG92ZXIJPSBmdW5jdGlvbiAoZXZ0LCBlbCkgeworCQl2YXIgJEUgPSAkKGVsIHx8IHRoaXMpOworCQkkRS5yZW1vdmVDbGFzcyggZ2V0SG92ZXJDbGFzc2VzKCRFLCB0cnVlKSApOworCX0KKworLAlvblJlc2l6ZXJFbnRlcgk9IGZ1bmN0aW9uIChldnQpIHsgLy8gQUxTTyBjYWxsZWQgYnkgdG9nZ2xlci5tb3VzZWVudGVyCisJCWlmICgkLmZuLmRpc2FibGVTZWxlY3Rpb24pCisJCQkkKCJib2R5IikuZGlzYWJsZVNlbGVjdGlvbigpOworCX0KKywJb25SZXNpemVyTGVhdmUJPSBmdW5jdGlvbiAoZXZ0LCBlbCkgeworCQl2YXIKKwkJCWUgPSBlbCB8fCB0aGlzIC8vIGVsIGlzIG9ubHkgcGFzc2VkIHdoZW4gY2FsbGVkIGJ5IHRoZSB0aW1lcgorCQksCXBhbmUgPSAkKGUpLmRhdGEoImxheW91dEVkZ2UiKQorCQksCW5hbWUgPSBwYW5lICsiUmVzaXplckxlYXZlIgorCQk7CisJCXRpbWVyLmNsZWFyKHBhbmUrIl9vcGVuU2xpZGVyIik7IC8vIGNhbmNlbCBzbGlkZU9wZW4gdGltZXIsIGlmIHNldAorCQl0aW1lci5jbGVhcihuYW1lKTsgLy8gY2FuY2VsIGVuYWJsZVNlbGVjdGlvbiB0aW1lciAtIG1heSByZS9zZXQgYmVsb3cKKwkJLy8gdGhpcyBtZXRob2QgY2FsbHMgaXRzZWxmIG9uIGEgdGltZXIgYmVjYXVzZSBpdCBuZWVkcyB0byBhbGxvdworCQkvLyBlbm91Z2ggdGltZSBmb3IgZHJhZ2dpbmcgdG8ga2ljay1pbiBhbmQgc2V0IHRoZSBpc1Jlc2l6aW5nIGZsYWcKKwkJLy8gZHJhZ2dpbmcgaGFzIGEgMTAwbXMgZGVsYXkgc2V0LCBzbyB0aGlzIGRlbGF5IG11c3QgYmUgPjEwMAorCQlpZiAoIWVsKSAvLyAxc3QgY2FsbCAtIG1vdXNlbGVhdmUgZXZlbnQKKwkJCXRpbWVyLnNldChuYW1lLCBmdW5jdGlvbigpeyBvblJlc2l6ZXJMZWF2ZShldnQsIGUpOyB9LCAyMDApOworCQkvLyBpZiB1c2VyIGlzIHJlc2l6aW5nLCB0aGVuIGRyYWdTdG9wIHdpbGwgZW5hYmxlU2VsZWN0aW9uKCksIHNvIGNhbiBza2lwIGl0IGhlcmUKKwkJZWxzZSBpZiAoIXN0YXRlW3BhbmVdLmlzUmVzaXppbmcgJiYgJC5mbi5lbmFibGVTZWxlY3Rpb24pIC8vIDJuZCBjYWxsIC0gYnkgdGltZXIKKwkJCSQoImJvZHkiKS5lbmFibGVTZWxlY3Rpb24oKTsKKwl9CisKKy8qCisgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqICAgSU5JVElBTElaQVRJT04gTUVUSE9EUworICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKi8KKworCS8qKgorCSogSW5pdGlhbGl6ZSB0aGUgbGF5b3V0IC0gY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgYW4gaW5zdGFuY2Ugb2YgbGF5b3V0IGlzIGNyZWF0ZWQKKwkqCisJKiBAc2VlICBub25lIC0gdHJpZ2dlcmVkIG9uSW5pdAorCSogQHJldHVybiAgbWl4ZWQJdHJ1ZSA9IGZ1bGx5IGluaXRpYWxpemVkIHwgZmFsc2UgPSBwYW5lcyBub3QgaW5pdGlhbGl6ZWQgKHlldCkgfCAnY2FuY2VsJyA9IGFib3J0CisJKi8KKywJX2NyZWF0ZSA9IGZ1bmN0aW9uICgpIHsKKwkJLy8gaW5pdGlhbGl6ZSBjb25maWcvb3B0aW9ucworCQlpbml0T3B0aW9ucygpOworCQl2YXIgbyA9IG9wdGlvbnM7CisKKwkJLy8gVEVNUCBzdGF0ZSBzbyBpc0luaXRpYWxpemVkIHJldHVybnMgdHJ1ZSBkdXJpbmcgaW5pdCBwcm9jZXNzCisJCXN0YXRlLmNyZWF0aW5nTGF5b3V0ID0gdHJ1ZTsKKworCQkvLyBpbml0IHBsdWdpbnMgZm9yIHRoaXMgbGF5b3V0LCBpZiB0aGVyZSBhcmUgYW55IChlZzogc3RhdGVNYW5hZ2VtZW50KQorCQlydW5QbHVnaW5DYWxsYmFja3MoIEluc3RhbmNlLCAkLmxheW91dC5vbkNyZWF0ZSApOworCisJCS8vIG9wdGlvbnMgJiBzdGF0ZSBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQsIHNvIG5vdyBydW4gYmVmb3JlTG9hZCBjYWxsYmFjaworCQkvLyBvbmxvYWQgd2lsbCBDQU5DRUwgbGF5b3V0IGNyZWF0aW9uIGlmIGl0IHJldHVybnMgZmFsc2UKKwkJaWYgKGZhbHNlID09PSBfcnVuQ2FsbGJhY2tzKCJvbmxvYWRfc3RhcnQiKSkKKwkJCXJldHVybiAnY2FuY2VsJzsKKworCQkvLyBpbml0aWFsaXplIHRoZSBjb250YWluZXIgZWxlbWVudAorCQlfaW5pdENvbnRhaW5lcigpOworCisJCS8vIGJpbmQgaG90a2V5IGZ1bmN0aW9uIC0ga2V5RG93biAtIGlmIHJlcXVpcmVkCisJCWluaXRIb3RrZXlzKCk7CisKKwkJLy8gYmluZCB3aW5kb3cub251bmxvYWQKKwkJJCh3aW5kb3cpLmJpbmQoInVubG9hZC4iKyBzSUQsIHVubG9hZCk7CisKKwkJLy8gaW5pdCBwbHVnaW5zIGZvciB0aGlzIGxheW91dCwgaWYgdGhlcmUgYXJlIGFueSAoZWc6IGN1c3RvbUJ1dHRvbnMpCisJCXJ1blBsdWdpbkNhbGxiYWNrcyggSW5zdGFuY2UsICQubGF5b3V0Lm9uTG9hZCApOworCisJCS8vIGlmIGxheW91dCBlbGVtZW50cyBhcmUgaGlkZGVuLCB0aGVuIGxheW91dCBXSUxMIE5PVCBjb21wbGV0ZSBpbml0aWFsaXphdGlvbiEKKwkJLy8gaW5pdExheW91dEVsZW1lbnRzIHdpbGwgc2V0IGluaXRpYWxpemVkPXRydWUgYW5kIHJ1biB0aGUgb25sb2FkIGNhbGxiYWNrIElGIHN1Y2Nlc3NmdWwKKwkJaWYgKG8uaW5pdFBhbmVzKSBfaW5pdExheW91dEVsZW1lbnRzKCk7CisKKwkJZGVsZXRlIHN0YXRlLmNyZWF0aW5nTGF5b3V0OworCisJCXJldHVybiBzdGF0ZS5pbml0aWFsaXplZDsKKwl9CisKKwkvKioKKwkqIEluaXRpYWxpemUgdGhlIGxheW91dCBJRiBub3QgYWxyZWFkeQorCSoKKwkqIEBzZWUgIEFsbCBtZXRob2RzIGluIEluc3RhbmNlIHJ1biB0aGlzIHRlc3QKKwkqIEByZXR1cm4gIGJvb2xlYW4JdHJ1ZSA9IGxheW91dEVsZW1lbnRzIGhhdmUgYmVlbiBpbml0aWFsaXplZCB8IGZhbHNlID0gcGFuZXMgYXJlIG5vdCBpbml0aWFsaXplZCAoeWV0KQorCSovCissCWlzSW5pdGlhbGl6ZWQgPSBmdW5jdGlvbiAoKSB7CisJCWlmIChzdGF0ZS5pbml0aWFsaXplZCB8fCBzdGF0ZS5jcmVhdGluZ0xheW91dCkgcmV0dXJuIHRydWU7CS8vIGFscmVhZHkgaW5pdGlhbGl6ZWQKKwkJZWxzZSByZXR1cm4gX2luaXRMYXlvdXRFbGVtZW50cygpOwkvLyB0cnkgdG8gaW5pdCBwYW5lcyBOT1cKKwl9CisKKwkvKioKKwkqIEluaXRpYWxpemUgdGhlIGxheW91dCAtIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW5ldmVyIGFuIGluc3RhbmNlIG9mIGxheW91dCBpcyBjcmVhdGVkCisJKgorCSogQHNlZSAgX2NyZWF0ZSgpICYgaXNJbml0aWFsaXplZAorCSogQHJldHVybiAgQW4gb2JqZWN0IHBvaW50ZXIgdG8gdGhlIGluc3RhbmNlIGNyZWF0ZWQKKwkqLworLAlfaW5pdExheW91dEVsZW1lbnRzID0gZnVuY3Rpb24gKHJldHJ5KSB7CisJCS8vIGluaXRpYWxpemUgY29uZmlnL29wdGlvbnMKKwkJdmFyIG8gPSBvcHRpb25zOworCisJCS8vIENBTk5PVCBpbml0IHBhbmVzIGluc2lkZSBhIGhpZGRlbiBjb250YWluZXIhCisJCWlmICghJE4uaXMoIjp2aXNpYmxlIikpIHsKKwkJCS8vIGhhbmRsZSBDaHJvbWUgYnVnIHdoZXJlIHBvcHVwIHdpbmRvdyAnaGFzIG5vIGhlaWdodCcKKwkJCS8vIGlmIGxheW91dCBpcyBCT0RZIGVsZW1lbnQsIHRyeSBhZ2FpbiBpbiA1MG1zCisJCQkvLyBTRUU6IGh0dHA6Ly9sYXlvdXQuanF1ZXJ5LWRldi5uZXQvc2FtcGxlcy90ZXN0X3BvcHVwX3dpbmRvdy5odG1sCisJCQlpZiAoICFyZXRyeSAmJiBicm93c2VyLndlYmtpdCAmJiAkTlswXS50YWdOYW1lID09PSAiQk9EWSIgKQorCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsgX2luaXRMYXlvdXRFbGVtZW50cyh0cnVlKTsgfSwgNTApOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLy8gYSBjZW50ZXIgcGFuZSBpcyByZXF1aXJlZCwgc28gbWFrZSBzdXJlIGl0IGV4aXN0cworCQlpZiAoIWdldFBhbmUoImNlbnRlciIpLmxlbmd0aCkgeworCQkJcmV0dXJuIF9sb2coIG8uZXJyb3JzLmNlbnRlclBhbmVNaXNzaW5nICk7CisJCX0KKworCQkvLyBURU1QIHN0YXRlIHNvIGlzSW5pdGlhbGl6ZWQgcmV0dXJucyB0cnVlIGR1cmluZyBpbml0IHByb2Nlc3MKKwkJc3RhdGUuY3JlYXRpbmdMYXlvdXQgPSB0cnVlOworCisJCS8vIHVwZGF0ZSBDb250YWluZXIgZGltcworCQkkLmV4dGVuZChzQywgZWxEaW1zKCAkTiApKTsKKworCQkvLyBpbml0aWFsaXplIGFsbCBsYXlvdXQgZWxlbWVudHMKKwkJaW5pdFBhbmVzKCk7CS8vIHNpemUgJiBwb3NpdGlvbiBwYW5lcyAtIGNhbGxzIGluaXRIYW5kbGVzKCkgLSB3aGljaCBjYWxscyBpbml0UmVzaXphYmxlKCkKKworCQlpZiAoby5zY3JvbGxUb0Jvb2ttYXJrT25Mb2FkKSB7CisJCQl2YXIgbCA9IHNlbGYubG9jYXRpb247CisJCQlpZiAobC5oYXNoKSBsLnJlcGxhY2UoIGwuaGFzaCApOyAvLyBzY3JvbGxUbyBCb29rbWFyaworCQl9CisKKwkJLy8gY2hlY2sgdG8gc2VlIGlmIHRoaXMgbGF5b3V0ICduZXN0ZWQnIGluc2lkZSBhIHBhbmUKKwkJaWYgKEluc3RhbmNlLmhhc1BhcmVudExheW91dCkKKwkJCW8ucmVzaXplV2l0aFdpbmRvdyA9IGZhbHNlOworCQkvLyBiaW5kIHJlc2l6ZUFsbCgpIGZvciAndGhpcyBsYXlvdXQgaW5zdGFuY2UnIHRvIHdpbmRvdy5yZXNpemUgZXZlbnQKKwkJZWxzZSBpZiAoby5yZXNpemVXaXRoV2luZG93KQorCQkJJCh3aW5kb3cpLmJpbmQoInJlc2l6ZS4iKyBzSUQsIHdpbmRvd1Jlc2l6ZSk7CisKKwkJZGVsZXRlIHN0YXRlLmNyZWF0aW5nTGF5b3V0OworCQlzdGF0ZS5pbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gaW5pdCBwbHVnaW5zIGZvciB0aGlzIGxheW91dCwgaWYgdGhlcmUgYXJlIGFueQorCQlydW5QbHVnaW5DYWxsYmFja3MoIEluc3RhbmNlLCAkLmxheW91dC5vblJlYWR5ICk7CisKKwkJLy8gbm93IHJ1biB0aGUgb25sb2FkIGNhbGxiYWNrLCBpZiBleGlzdHMKKwkJX3J1bkNhbGxiYWNrcygib25sb2FkX2VuZCIpOworCisJCXJldHVybiB0cnVlOyAvLyBlbGVtZW50cyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkKKwl9CisKKwkvKioKKwkqIEluaXRpYWxpemUgbmVzdGVkIGxheW91dHMgLSBjYWxsZWQgd2hlbiBfaW5pdExheW91dEVsZW1lbnRzIGNvbXBsZXRlcworCSoKKwkqIE5PVCBDVVJSRU5UTFkgVVNFRAorCSoKKwkqIEBzZWUgX2luaXRMYXlvdXRFbGVtZW50cworCSogQHJldHVybiAgQW4gb2JqZWN0IHBvaW50ZXIgdG8gdGhlIGluc3RhbmNlIGNyZWF0ZWQKKwkqLworLAlfaW5pdENoaWxkTGF5b3V0cyA9IGZ1bmN0aW9uICgpIHsKKwkJJC5lYWNoKF9jLmFsbFBhbmVzLCBmdW5jdGlvbiAoaWR4LCBwYW5lKSB7CisJCQlpZiAob3B0aW9uc1twYW5lXS5pbml0Q2hpbGRMYXlvdXQpCisJCQkJY3JlYXRlQ2hpbGRMYXlvdXQoIHBhbmUgKTsKKwkJfSk7CisJfQorCisJLyoqCisJKiBJbml0aWFsaXplIG5lc3RlZCBsYXlvdXRzIGZvciBhIHNwZWNpZmljIHBhbmUgLSBjYW4gb3B0aW9uYWxseSBwYXNzIGxheW91dC1vcHRpb25zCisJKgorCSogQHNlZSBfaW5pdENoaWxkTGF5b3V0cworCSogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fQlldnRfb3JfcGFuZQlUaGUgcGFuZSBiZWluZyBvcGVuZWQsIGllOiBub3J0aCwgc291dGgsIGVhc3QsIG9yIHdlc3QKKwkqIEBwYXJhbSB7T2JqZWN0PX0JCQlbb3B0c10JCUxheW91dC1vcHRpb25zIC0gaWYgcGFzc2VkLCB3aWxsIE9WRVJSUklERSBvcHRpb25zW3BhbmVdLmNoaWxkT3B0aW9ucworCSogQHJldHVybiAgQW4gb2JqZWN0IHBvaW50ZXIgdG8gdGhlIGxheW91dCBpbnN0YW5jZSBjcmVhdGVkIC0gb3IgbnVsbAorCSovCissCWNyZWF0ZUNoaWxkTGF5b3V0ID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lLCBvcHRzKSB7CisJCXZhcglwYW5lID0gZXZ0UGFuZS5jYWxsKHRoaXMsIGV2dF9vcl9wYW5lKQorCQksCSRQCT0gJFBzW3BhbmVdCisJCSwJQwk9IGNoaWxkcmVuCisJCTsKKwkJaWYgKCRQKSB7CisJCQl2YXIJJEMJPSAkQ3NbcGFuZV0KKwkJCSwJbwk9IG9wdHMgfHwgb3B0aW9uc1twYW5lXS5jaGlsZE9wdGlvbnMKKwkJCSwJZAk9ICJsYXlvdXQiCisJCQkvLwlkZXRlcm1pbmUgd2hpY2ggZWxlbWVudCBpcyBzdXBwb3NlZCB0byBiZSB0aGUgJ2NoaWxkIGNvbnRhaW5lcicKKwkJCS8vCWlmIHBhbmUgaGFzIGEgJ2NvbnRhaW5lclNlbGVjdG9yJyBPUiBhICdjb250ZW50LWRpdicsIHVzZSB0aG9zZSBpbnN0ZWFkIG9mIHRoZSBwYW5lCisJCQksCSRDb250ID0gby5jb250YWluZXJTZWxlY3RvciA/ICRQLmZpbmQoIG8uY29udGFpbmVyU2VsZWN0b3IgKSA6ICgkQyB8fCAkUCkKKwkJCSwJY29udGFpbmVyRm91bmQgPSAkQ29udC5sZW5ndGgKKwkJCS8vCXNlZSBpZiBhIGNoaWxkLWxheW91dCBBTFJFQURZIGV4aXN0cyBvbiB0aGlzIGVsZW1lbnQKKwkJCSwJY2hpbGQgPSBjb250YWluZXJGb3VuZCA/IChDW3BhbmVdID0gJENvbnQuZGF0YShkKSB8fCBudWxsKSA6IG51bGwKKwkJCTsKKwkJCS8vIGlmIG5vIGxheW91dCBleGlzdHMsIGJ1dCBjaGlsZE9wdGlvbnMgYXJlIHNldCwgdHJ5IHRvIGNyZWF0ZSB0aGUgbGF5b3V0IG5vdworCQkJaWYgKCFjaGlsZCAmJiBjb250YWluZXJGb3VuZCAmJiBvKQorCQkJCWNoaWxkID0gQ1twYW5lXSA9ICRDb250LmVxKDApLmxheW91dChvKSB8fCBudWxsOworCQkJaWYgKGNoaWxkKQorCQkJCWNoaWxkLmhhc1BhcmVudExheW91dCA9IHRydWU7CS8vIHNldCBwYXJlbnQtZmxhZyBpbiBjaGlsZAorCQl9CisJCUluc3RhbmNlW3BhbmVdLmNoaWxkID0gQ1twYW5lXTsgLy8gQUxXQVlTIHNldCBwYW5lLW9iamVjdCBwb2ludGVyLCBldmVuIGlmIG51bGwKKwl9CisKKywJd2luZG93UmVzaXplID0gZnVuY3Rpb24gKCkgeworCQl2YXIgZGVsYXkgPSBOdW1iZXIob3B0aW9ucy5yZXNpemVXaXRoV2luZG93RGVsYXkpOworCQlpZiAoZGVsYXkgPCAxMCkgZGVsYXkgPSAxMDA7IC8vIE1VU1QgaGF2ZSBhIGRlbGF5IQorCQkvLyByZXNpemluZyB1c2VzIGEgZGVsYXktbG9vcCBiZWNhdXNlIHRoZSByZXNpemUgZXZlbnQgZmlyZXMgcmVwZWF0bHkgLSBleGNlcHQgaW4gRkYsIGJ1dCBkZWxheSBhbnl3YXkKKwkJdGltZXIuY2xlYXIoIndpblJlc2l6ZSIpOyAvLyBpZiBhbHJlYWR5IHJ1bm5pbmcKKwkJdGltZXIuc2V0KCJ3aW5SZXNpemUiLCBmdW5jdGlvbigpeworCQkJdGltZXIuY2xlYXIoIndpblJlc2l6ZSIpOworCQkJdGltZXIuY2xlYXIoIndpblJlc2l6ZVJlcGVhdGVyIik7CisJCQl2YXIgZGltcyA9IGVsRGltcyggJE4gKTsKKwkJCS8vIG9ubHkgdHJpZ2dlciByZXNpemVBbGwoKSBpZiBjb250YWluZXIgaGFzIGNoYW5nZWQgc2l6ZQorCQkJaWYgKGRpbXMuaW5uZXJXaWR0aCAhPT0gc0MuaW5uZXJXaWR0aCB8fCBkaW1zLmlubmVySGVpZ2h0ICE9PSBzQy5pbm5lckhlaWdodCkKKwkJCQlyZXNpemVBbGwoKTsKKwkJfSwgZGVsYXkpOworCQkvLyBBTFNPIHNldCBmaXhlZC1kZWxheSB0aW1lciwgaWYgbm90IGFscmVhZHkgcnVubmluZworCQlpZiAoIXRpbWVyLmRhdGFbIndpblJlc2l6ZVJlcGVhdGVyIl0pIHNldFdpbmRvd1Jlc2l6ZVJlcGVhdGVyKCk7CisJfQorCissCXNldFdpbmRvd1Jlc2l6ZVJlcGVhdGVyID0gZnVuY3Rpb24gKCkgeworCQl2YXIgZGVsYXkgPSBOdW1iZXIob3B0aW9ucy5yZXNpemVXaXRoV2luZG93TWF4RGVsYXkpOworCQlpZiAoZGVsYXkgPiAwKQorCQkJdGltZXIuc2V0KCJ3aW5SZXNpemVSZXBlYXRlciIsIGZ1bmN0aW9uKCl7IHNldFdpbmRvd1Jlc2l6ZVJlcGVhdGVyKCk7IHJlc2l6ZUFsbCgpOyB9LCBkZWxheSk7CisJfQorCissCXVubG9hZCA9IGZ1bmN0aW9uICgpIHsKKwkJdmFyIG8gPSBvcHRpb25zOworCisJCV9ydW5DYWxsYmFja3MoIm9udW5sb2FkX3N0YXJ0Iik7CisKKwkJLy8gdHJpZ2dlciBwbHVnaW4gY2FsbGFiYWNrcyBmb3IgdGhpcyBsYXlvdXQgKGVnOiBzdGF0ZU1hbmFnZW1lbnQpCisJCXJ1blBsdWdpbkNhbGxiYWNrcyggSW5zdGFuY2UsICQubGF5b3V0Lm9uVW5sb2FkICk7CisKKwkJX3J1bkNhbGxiYWNrcygib251bmxvYWRfZW5kIik7CisJfQorCisJLyoqCisJKiBWYWxpZGF0ZSBhbmQgaW5pdGlhbGl6ZSBjb250YWluZXIgQ1NTIGFuZCBldmVudHMKKwkqCisJKiBAc2VlICBfY3JlYXRlKCkKKwkqLworLAlfaW5pdENvbnRhaW5lciA9IGZ1bmN0aW9uICgpIHsKKwkJdmFyCisJCQlOCQk9ICROWzBdCisJCSwJdGFnCQk9IHNDLnRhZ05hbWUgPSBOLnRhZ05hbWUKKwkJLAlpZAkJPSBzQy5pZCA9IE4uaWQKKwkJLAljbHMJCT0gc0MuY2xhc3NOYW1lID0gTi5jbGFzc05hbWUKKwkJLAlvCQk9IG9wdGlvbnMKKwkJLAluYW1lCT0gby5uYW1lCisJCSwJZnVsbFBhZ2U9ICh0YWcgPT09ICJCT0RZIikKKwkJLAlwcm9wcwk9ICJvdmVyZmxvdyxwb3NpdGlvbixtYXJnaW4scGFkZGluZyxib3JkZXIiCisJCSwJY3NzCQk9ICJsYXlvdXRDU1MiCisJCSwJQ1NTCQk9IHt9CisJCSwJaGlkCQk9ICJoaWRkZW4iIC8vIHVzZWQgQSBMT1QhCisJCS8vCXNlZSBpZiB0aGlzIGNvbnRhaW5lciBpcyBhICdwYW5lJyBpbnNpZGUgYW4gb3V0ZXItbGF5b3V0CisJCSwJcGFyZW50CT0gJE4uZGF0YSgicGFyZW50TGF5b3V0IikJLy8gcGFyZW50LWxheW91dCBJbnN0YW5jZQorCQksCXBhbmUJPSAkTi5kYXRhKCJsYXlvdXRFZGdlIikJCS8vIHBhbmUtbmFtZSBpbiBwYXJlbnQtbGF5b3V0CisJCSwJaXNDaGlsZAk9IHBhcmVudCAmJiBwYW5lCisJCTsKKwkJLy8gc0MgLT4gc3RhdGUuY29udGFpbmVyCisJCXNDLnNlbGVjdG9yID0gJE4uc2VsZWN0b3Iuc3BsaXQoIi5zbGljZSIpWzBdOworCQlzQy5yZWYJCT0gKG8ubmFtZSA/IG8ubmFtZSArJyBsYXlvdXQgLyAnIDogJycpICsgdGFnICsgKGlkID8gIiMiK2lkIDogY2xzID8gJy5bJytjbHMrJ10nIDogJycpOyAvLyB1c2VkIGluIG1lc3NhZ2VzCisKKwkJJE4JLmRhdGEoeworCQkJCWxheW91dDogSW5zdGFuY2UKKwkJCSwJbGF5b3V0Q29udGFpbmVyOiBzSUQgLy8gRkxBRyB0byBpbmRpY2F0ZSB0aGlzIGlzIGEgbGF5b3V0LWNvbnRhaW5lciAtIGNvbnRhaW5zIHVuaXF1ZSBpbnRlcm5hbCBJRAorCQkJfSkKKwkJCS5hZGRDbGFzcyhvLmNvbnRhaW5lckNsYXNzKQorCQk7CisJCXZhciBsYXlvdXRNZXRob2RzID0geworCQkJZGVzdHJveToJJycKKwkJLAlpbml0UGFuZXM6CScnCisJCSwJcmVzaXplQWxsOgkncmVzaXplQWxsJworCQksCXJlc2l6ZToJCSdyZXNpemVBbGwnCisJCX07CisJCS8vIGxvb3AgaGFzaCBhbmQgYmluZCBhbGwgbWV0aG9kcyAtIGluY2x1ZGUgbGF5b3V0SUQgbmFtZXNwYWNpbmcKKwkJZm9yIChuYW1lIGluIGxheW91dE1ldGhvZHMpIHsKKwkJCSROLmJpbmQoImxheW91dCIrIG5hbWUudG9Mb3dlckNhc2UoKSArIi4iKyBzSUQsIEluc3RhbmNlWyBsYXlvdXRNZXRob2RzW25hbWVdIHx8IG5hbWUgXSk7CisJCX0KKworCQkvLyBpZiB0aGlzIGNvbnRhaW5lciBpcyBhbm90aGVyIGxheW91dCdzICdwYW5lJywgdGhlbiBzZXQgY2hpbGQvcGFyZW50IHBvaW50ZXJzCisJCWlmIChpc0NoaWxkKSB7CisJCQkvLyB1cGRhdGUgcGFyZW50IGZsYWcKKwkJCUluc3RhbmNlLmhhc1BhcmVudExheW91dCA9IHRydWU7CisJCQkvLyBzZXQgcG9pbnRlcnMgdG8gVEhJUyBjaGlsZC1sYXlvdXQgKEluc3RhbmNlKSBpbiBwYXJlbnQtbGF5b3V0CisJCQkvLyBOT1RFOiBwYXJlbnQuUEFORS5jaGlsZCBpcyBhbiBBTElBUyB0byBwYXJlbnQuY2hpbGRyZW4uUEFORQorCQkJcGFyZW50W3BhbmVdLmNoaWxkID0gcGFyZW50LmNoaWxkcmVuW3BhbmVdID0gJE4uZGF0YSgibGF5b3V0Iik7CisJCX0KKworCQkvLyBTQVZFIG9yaWdpbmFsIGNvbnRhaW5lciBDU1MgZm9yIHVzZSBpbiBkZXN0cm95KCkKKwkJaWYgKCEkTi5kYXRhKGNzcykpIHsKKwkJCS8vIGhhbmRsZSBwcm9wcyBsaWtlIG92ZXJmbG93IGRpZmZlcmVudCBmb3IgQk9EWSAmIEhUTUwgLSBoYXMgJ3N5c3RlbSBkZWZhdWx0JyB2YWx1ZXMKKwkJCWlmIChmdWxsUGFnZSkgeworCQkJCUNTUyA9ICQuZXh0ZW5kKCBlbENTUygkTiwgcHJvcHMpLCB7CisJCQkJCWhlaWdodDoJCSROLmNzcygiaGVpZ2h0IikKKwkJCQksCW92ZXJmbG93OgkkTi5jc3MoIm92ZXJmbG93IikKKwkJCQksCW92ZXJmbG93WDoJJE4uY3NzKCJvdmVyZmxvd1giKQorCQkJCSwJb3ZlcmZsb3dZOgkkTi5jc3MoIm92ZXJmbG93WSIpCisJCQkJfSk7CisJCQkJLy8gQUxTTyBTQVZFIDxIVE1MPiBDU1MKKwkJCQl2YXIgJEggPSAkKCJodG1sIik7CisJCQkJJEguZGF0YShjc3MsIHsKKwkJCQkJaGVpZ2h0OgkJImF1dG8iIC8vIEZGIHdvdWxkIHJldHVybiBhIGZpeGVkIHB4LXNpemUhCisJCQkJLAlvdmVyZmxvdzoJJEguY3NzKCJvdmVyZmxvdyIpCisJCQkJLAlvdmVyZmxvd1g6CSRILmNzcygib3ZlcmZsb3dYIikKKwkJCQksCW92ZXJmbG93WToJJEguY3NzKCJvdmVyZmxvd1kiKQorCQkJCX0pOworCQkJfQorCQkJZWxzZSAvLyBoYW5kbGUgcHJvcHMgbm9ybWFsbHkgZm9yIG5vbi1ib2R5IGVsZW1lbnRzCisJCQkJQ1NTID0gZWxDU1MoJE4sIHByb3BzKyIsdG9wLGJvdHRvbSxsZWZ0LHJpZ2h0LHdpZHRoLGhlaWdodCxvdmVyZmxvdyxvdmVyZmxvd1gsb3ZlcmZsb3dZIik7CisKKwkJCSROLmRhdGEoY3NzLCBDU1MpOworCQl9CisKKwkJdHJ5IHsgLy8gZm9ybWF0IGh0bWwvYm9keSBpZiB0aGlzIGlzIGEgZnVsbCBwYWdlIGxheW91dAorCQkJaWYgKGZ1bGxQYWdlKSB7CisJCQkJJCgiaHRtbCIpLmNzcyh7CisJCQkJCWhlaWdodDoJCSIxMDAlIgorCQkJCSwJb3ZlcmZsb3c6CWhpZAorCQkJCSwJb3ZlcmZsb3dYOgloaWQKKwkJCQksCW92ZXJmbG93WToJaGlkCisJCQkJfSk7CisJCQkJJCgiYm9keSIpLmNzcyh7CisJCQkJCXBvc2l0aW9uOgkicmVsYXRpdmUiCisJCQkJLAloZWlnaHQ6CQkiMTAwJSIKKwkJCQksCW92ZXJmbG93OgloaWQKKwkJCQksCW92ZXJmbG93WDoJaGlkCisJCQkJLAlvdmVyZmxvd1k6CWhpZAorCQkJCSwJbWFyZ2luOgkJMAorCQkJCSwJcGFkZGluZzoJMAkJLy8gVE9ETzogdGVzdCB3aGV0aGVyIGJvZHktcGFkZGluZyBjb3VsZCBiZSBoYW5kbGVkPworCQkJCSwJYm9yZGVyOgkJIm5vbmUiCS8vIGEgYm9keS1ib3JkZXIgY3JlYXRlcyBwcm9ibGVtcyBiZWNhdXNlIGl0IGNhbm5vdCBiZSBtZWFzdXJlZCEKKwkJCQl9KTsKKworCQkJCS8vIHNldCBjdXJyZW50IGxheW91dC1jb250YWluZXIgZGltZW5zaW9ucworCQkJCSQuZXh0ZW5kKHNDLCBlbERpbXMoICROICkpOworCQkJfQorCQkJZWxzZSB7IC8vIHNldCByZXF1aXJlZCBDU1MgZm9yIG92ZXJmbG93IGFuZCBwb3NpdGlvbgorCQkJCS8vIEVOU1VSRSBjb250YWluZXIgd2lsbCBub3QgJ3Njcm9sbCcKKwkJCQlDU1MgPSB7IG92ZXJmbG93OiBoaWQsIG92ZXJmbG93WDogaGlkLCBvdmVyZmxvd1k6IGhpZCB9CisJCQkJdmFyCisJCQkJCXAgPSAkTi5jc3MoInBvc2l0aW9uIikKKwkJCQksCWggPSAkTi5jc3MoImhlaWdodCIpCisJCQkJOworCQkJCS8vIGlmIHRoaXMgaXMgYSBORVNURUQgbGF5b3V0LCB0aGVuIGNvbnRhaW5lci9vdXRlci1wYW5lIEFMUkVBRFkgaGFzIHBvc2l0aW9uIGFuZCBoZWlnaHQKKwkJCQlpZiAoIWlzQ2hpbGQpIHsKKwkJCQkJaWYgKCFwIHx8ICFwLm1hdGNoKC9maXhlZHxhYnNvbHV0ZXxyZWxhdGl2ZS8pKQorCQkJCQkJQ1NTLnBvc2l0aW9uID0gInJlbGF0aXZlIjsgLy8gY29udGFpbmVyIE1VU1QgaGF2ZSBhICdwb3NpdGlvbicKKwkJCQkJLyoKKwkJCQkJaWYgKCFoIHx8IGg9PSJhdXRvIikKKwkJCQkJCUNTUy5oZWlnaHQgPSAiMTAwJSI7IC8vIGNvbnRhaW5lciBNVVNUIGhhdmUgYSAnaGVpZ2h0JworCQkJCQkqLworCQkJCX0KKwkJCQkkTi5jc3MoIENTUyApOworCisJCQkJLy8gc2V0IGN1cnJlbnQgbGF5b3V0LWNvbnRhaW5lciBkaW1lbnNpb25zCisJCQkJaWYgKCAkTi5pcygiOnZpc2libGUiKSApIHsKKwkJCQkJJC5leHRlbmQoc0MsIGVsRGltcyggJE4gKSk7CisJCQkJCWlmIChzQy5pbm5lckhlaWdodCA8IDEpCisJCQkJCQlfbG9nKCBvLmVycm9ycy5ub0NvbnRhaW5lckhlaWdodC5yZXBsYWNlKC9DT05UQUlORVIvLCBzQy5yZWYpICk7CisJCQkJfQorCQkJfQorCQl9IGNhdGNoIChleCkge30KKwl9CisKKwkvKioKKwkqIEJpbmQgbGF5b3V0IGhvdGtleXMgLSBpZiBvcHRpb25zIGVuYWJsZWQKKwkqCisJKiBAc2VlICBfY3JlYXRlKCkgYW5kIGFkZFBhbmUoKQorCSogQHBhcmFtIHtzdHJpbmc9fQlbcGFuZXM9IiJdCVRoZSBlZGdlKHMpIHRvIHByb2Nlc3MKKwkqLworLAlpbml0SG90a2V5cyA9IGZ1bmN0aW9uIChwYW5lcykgeworCQlwYW5lcyA9IHBhbmVzID8gcGFuZXMuc3BsaXQoIiwiKSA6IF9jLmJvcmRlclBhbmVzOworCQkvLyBiaW5kIGtleURvd24gdG8gY2FwdHVyZSBob3RrZXlzLCBpZiBvcHRpb24gZW5hYmxlZCBmb3IgQU5ZIHBhbmUKKwkJJC5lYWNoKHBhbmVzLCBmdW5jdGlvbiAoaSwgcGFuZSkgeworCQkJdmFyIG8gPSBvcHRpb25zW3BhbmVdOworCQkJaWYgKG8uZW5hYmxlQ3Vyc29ySG90a2V5IHx8IG8uY3VzdG9tSG90a2V5KSB7CisJCQkJJChkb2N1bWVudCkuYmluZCgia2V5ZG93bi4iKyBzSUQsIGtleURvd24pOyAvLyBvbmx5IG5lZWQgdG8gYmluZCB0aGlzIE9OQ0UKKwkJCQlyZXR1cm4gZmFsc2U7IC8vIEJSRUFLIC0gYmluZGluZyB3YXMgZG9uZQorCQkJfQorCQl9KTsKKwl9CisKKwkvKioKKwkqIEJ1aWxkIGZpbmFsIE9QVElPTlMgZGF0YQorCSoKKwkqIEBzZWUgIF9jcmVhdGUoKQorCSovCissCWluaXRPcHRpb25zID0gZnVuY3Rpb24gKCkgeworCQl2YXIgZGF0YSwgZCwgcGFuZSwga2V5LCB2YWwsIGksIGMsIG87CisKKwkJLy8gcmVwcm9jZXNzIHVzZXIncyBsYXlvdXQtb3B0aW9ucyB0byBoYXZlIGNvcnJlY3Qgb3B0aW9ucyBzdWIta2V5IHN0cnVjdHVyZQorCQlvcHRzID0gJC5sYXlvdXQudHJhbnNmb3JtRGF0YSggb3B0cyApOyAvLyBwYW5lcyA9IGRlZmF1bHQgc3Via2V5CisKKwkJLy8gYXV0by1yZW5hbWUgb2xkIG9wdGlvbnMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKwkJb3B0cyA9ICQubGF5b3V0LmJhY2t3YXJkQ29tcGF0aWJpbGl0eS5yZW5hbWVBbGxPcHRpb25zKCBvcHRzICk7CisKKwkJLy8gaWYgdXNlci1vcHRpb25zIGhhcyAncGFuZXMnIGtleSAocGFuZS1kZWZhdWx0cyksIGNsZWFuIGl0Li4uCisJCWlmICghJC5pc0VtcHR5T2JqZWN0KG9wdHMucGFuZXMpKSB7CisJCQkvLyBSRU1PVkUgYW55IHBhbmUtZGVmYXVsdHMgdGhhdCBNVVNUIGJlIHNldCBwZXItcGFuZQorCQkJZGF0YSA9ICQubGF5b3V0Lm9wdGlvbnNNYXAubm9EZWZhdWx0OworCQkJZm9yIChpPTAsIGM9ZGF0YS5sZW5ndGg7IGk8YzsgaSsrKSB7CisJCQkJa2V5ID0gZGF0YVtpXTsKKwkJCQlkZWxldGUgb3B0cy5wYW5lc1trZXldOyAvLyBPSyBpZiBkb2VzIG5vdCBleGlzdAorCQkJfQorCQkJLy8gUkVNT1ZFIGFueSBsYXlvdXQtb3B0aW9ucyBzcGVjaWZpZWQgdW5kZXIgb3B0cy5wYW5lcworCQkJZGF0YSA9ICQubGF5b3V0Lm9wdGlvbnNNYXAubGF5b3V0OworCQkJZm9yIChpPTAsIGM9ZGF0YS5sZW5ndGg7IGk8YzsgaSsrKSB7CisJCQkJa2V5ID0gZGF0YVtpXTsKKwkJCQlkZWxldGUgb3B0cy5wYW5lc1trZXldOyAvLyBPSyBpZiBkb2VzIG5vdCBleGlzdAorCQkJfQorCQl9CisKKwkJLy8gTU9WRSBhbnkgTk9OLWxheW91dC1vcHRpb25zIGZyb20gb3B0cy1yb290IHRvIG9wdHMucGFuZXMKKwkJZGF0YSA9ICQubGF5b3V0Lm9wdGlvbnNNYXAubGF5b3V0OworCQl2YXIgcm9vdEtleXMgPSAkLmxheW91dC5jb25maWcub3B0aW9uUm9vdEtleXM7CisJCWZvciAoa2V5IGluIG9wdHMpIHsKKwkJCXZhbCA9IG9wdHNba2V5XTsKKwkJCWlmICgkLmluQXJyYXkoa2V5LCByb290S2V5cykgPCAwICYmICQuaW5BcnJheShrZXksIGRhdGEpIDwgMCkgeworCQkJCWlmICghb3B0cy5wYW5lc1trZXldKQorCQkJCQlvcHRzLnBhbmVzW2tleV0gPSAkLmlzUGxhaW5PYmplY3QodmFsKSA/ICQuZXh0ZW5kKHRydWUsIHt9LCB2YWwpIDogdmFsOworCQkJCWRlbGV0ZSBvcHRzW2tleV0KKwkJCX0KKwkJfQorCisJCS8vIFNUQVJUIGJ5IHVwZGF0aW5nIEFMTCBvcHRpb25zIGZyb20gb3B0cworCQkkLmV4dGVuZCh0cnVlLCBvcHRpb25zLCBvcHRzKTsKKworCQkvLyBDUkVBVEUgZmluYWwgb3B0aW9ucyAoYW5kIGNvbmZpZykgZm9yIEVBQ0ggcGFuZQorCQkkLmVhY2goX2MuYWxsUGFuZXMsIGZ1bmN0aW9uIChpLCBwYW5lKSB7CisKKwkJCS8vIGFwcGx5ICdwYW5lLWRlZmF1bHRzJyB0byBDT05GSUcuW1BBTkVdCisJCQlfY1twYW5lXSA9ICQuZXh0ZW5kKHRydWUsIHt9LCBfYy5wYW5lcywgX2NbcGFuZV0pOworCisJCQlkID0gb3B0aW9ucy5wYW5lczsKKwkJCW8gPSBvcHRpb25zW3BhbmVdOworCisJCQkvLyBjZW50ZXItcGFuZSB1c2VzIFNPTUUga2V5cyBpbiBkZWZhdWx0cy5wYW5lcyBicmFuY2gKKwkJCWlmIChwYW5lID09PSAnY2VudGVyJykgeworCQkJCS8vIE9OTFkgY29weSBrZXlzIGZyb20gb3B0cy5wYW5lcyBsaXN0ZWQgaW46ICQubGF5b3V0Lm9wdGlvbnNNYXAuY2VudGVyCisJCQkJZGF0YSA9ICQubGF5b3V0Lm9wdGlvbnNNYXAuY2VudGVyOwkJLy8gbGlzdCBvZiAnY2VudGVyLXBhbmUga2V5cycKKwkJCQlmb3IgKGk9MCwgYz1kYXRhLmxlbmd0aDsgaTxjOyBpKyspIHsJLy8gbG9vcCB0aGUgbGlzdC4uLgorCQkJCQlrZXkgPSBkYXRhW2ldOworCQkJCQkvLyBvbmx5IG5lZWQgdG8gdXNlIHBhbmUtZGVmYXVsdCBpZiBwYW5lLXNwZWNpZmljIHZhbHVlIG5vdCBzZXQKKwkJCQkJaWYgKCFvcHRzLmNlbnRlcltrZXldICYmIChvcHRzLnBhbmVzW2tleV0gfHwgIW9ba2V5XSkpCisJCQkJCQlvW2tleV0gPSBkW2tleV07IC8vIHBhbmUtZGVmYXVsdAorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCS8vIGJvcmRlci1wYW5lcyB1c2UgQUxMIGtleXMgaW4gZGVmYXVsdHMucGFuZXMgYnJhbmNoCisJCQkJbyA9IG9wdGlvbnNbcGFuZV0gPSAkLmV4dGVuZCh0cnVlLCB7fSwgZCwgbyk7IC8vIHJlLWFwcGx5IHBhbmUtc3BlY2lmaWMgb3B0cyBBRlRFUiBwYW5lLWRlZmF1bHRzCisJCQkJY3JlYXRlRnhPcHRpb25zKCBwYW5lICk7CisJCQkJLy8gZW5zdXJlIGFsbCBib3JkZXItcGFuZS1zcGVjaWZpYyBiYXNlLWNsYXNzZXMgZXhpc3QKKwkJCQlpZiAoIW8ucmVzaXplckNsYXNzKQlvLnJlc2l6ZXJDbGFzcwk9ICJ1aS1sYXlvdXQtcmVzaXplciI7CisJCQkJaWYgKCFvLnRvZ2dsZXJDbGFzcykJby50b2dnbGVyQ2xhc3MJPSAidWktbGF5b3V0LXRvZ2dsZXIiOworCQkJfQorCQkJLy8gZW5zdXJlIHdlIGhhdmUgYmFzZSBwYW5lLWNsYXNzIChBTEwgcGFuZXMpCisJCQlpZiAoIW8ucGFuZUNsYXNzKSBvLnBhbmVDbGFzcyA9ICJ1aS1sYXlvdXQtcGFuZSI7CisJCX0pOworCisJCS8vIHVwZGF0ZSBvcHRpb25zLnpJbmRleGVzIGlmIGEgekluZGV4LW9wdGlvbiBzcGVjaWZpZWQKKwkJdmFyIHpvCT0gb3B0cy56SW5kZXgKKwkJLAl6CT0gb3B0aW9ucy56SW5kZXhlczsKKwkJaWYgKHpvID4gMCkgeworCQkJei5wYW5lX25vcm1hbAkJPSB6bzsKKwkJCXouY29udGVudF9tYXNrCQk9IG1heCh6bysxLCB6LmNvbnRlbnRfbWFzayk7CS8vIE1JTiA9ICsxCisJCQl6LnJlc2l6ZXJfbm9ybWFsCT0gbWF4KHpvKzIsIHoucmVzaXplcl9ub3JtYWwpOwkvLyBNSU4gPSArMgorCQl9CisKKwkJLy8gREVMRVRFICdwYW5lcycga2V5IG5vdyB0aGF0IHdlIGFyZSBkb25lIC0gdmFsdWVzIHdlcmUgY29waWVkIHRvIEVBQ0ggcGFuZQorCQlkZWxldGUgb3B0aW9ucy5wYW5lczsKKworCisJCWZ1bmN0aW9uIGNyZWF0ZUZ4T3B0aW9ucyAoIHBhbmUgKSB7CisJCQl2YXIJbyA9IG9wdGlvbnNbcGFuZV0KKwkJCSwJZCA9IG9wdGlvbnMucGFuZXM7CisJCQkvLyBlbnN1cmUgZnhTZXR0aW5ncyBrZXkgdG8gYXZvaWQgZXJyb3JzCisJCQlpZiAoIW8uZnhTZXR0aW5ncykgby5meFNldHRpbmdzID0ge307CisJCQlpZiAoIWQuZnhTZXR0aW5ncykgZC5meFNldHRpbmdzID0ge307CisKKwkJCSQuZWFjaChbIl9vcGVuIiwiX2Nsb3NlIiwiX3NpemUiXSwgZnVuY3Rpb24gKGksbikgeyAKKwkJCQl2YXIKKwkJCQkJc05hbWUJCT0gImZ4TmFtZSIrIG4KKwkJCQksCXNTcGVlZAkJPSAiZnhTcGVlZCIrIG4KKwkJCQksCXNTZXR0aW5ncwk9ICJmeFNldHRpbmdzIisgbgorCQkJCQkvLyByZWNhbGN1bGF0ZSBmeE5hbWUgYWNjb3JkaW5nIHRvIHNwZWNpZmljaXR5IHJ1bGVzCisJCQkJLAlmeE5hbWUgPSBvW3NOYW1lXSA9CisJCQkJCQlvW3NOYW1lXQkvLyBvcHRpb25zLndlc3QuZnhOYW1lX29wZW4KKwkJCQkJfHwJZFtzTmFtZV0JLy8gb3B0aW9ucy5wYW5lcy5meE5hbWVfb3BlbgorCQkJCQl8fAlvLmZ4TmFtZQkvLyBvcHRpb25zLndlc3QuZnhOYW1lCisJCQkJCXx8CWQuZnhOYW1lCS8vIG9wdGlvbnMucGFuZXMuZnhOYW1lCisJCQkJCXx8CSJub25lIgkJLy8gTUVBTlMgJC5sYXlvdXQuZGVmYXVsdHMucGFuZXMuZnhOYW1lID09ICIiIHx8IGZhbHNlIHx8IG51bGwgfHwgMAorCQkJCTsKKwkJCQkvLyB2YWxpZGF0ZSBmeE5hbWUgdG8gZW5zdXJlIGlzIHZhbGlkIGVmZmVjdCAtIE1VU1QgaGF2ZSBlZmZlY3QtY29uZmlnIGRhdGEgaW4gb3B0aW9ucy5lZmZlY3RzCisJCQkJaWYgKGZ4TmFtZSA9PT0gIm5vbmUiIHx8ICEkLmVmZmVjdHMgfHwgISQuZWZmZWN0c1tmeE5hbWVdIHx8ICFvcHRpb25zLmVmZmVjdHNbZnhOYW1lXSkKKwkJCQkJZnhOYW1lID0gb1tzTmFtZV0gPSAibm9uZSI7IC8vIGVmZmVjdCBub3QgbG9hZGVkIE9SIHVucmVjb2duaXplZCBmeE5hbWUKKworCQkJCS8vIHNldCB2YXJzIGZvciBlZmZlY3RzIHN1YmtleXMgdG8gc2ltcGxpZnkgbG9naWMKKwkJCQl2YXIJZngJCT0gb3B0aW9ucy5lZmZlY3RzW2Z4TmFtZV0gfHwge30JLy8gZWZmZWN0cy5zbGlkZQorCQkJCSwJZnhfYWxsCT0gZnguYWxsCXx8IG51bGwJCQkJLy8gZWZmZWN0cy5zbGlkZS5hbGwKKwkJCQksCWZ4X3BhbmUJPSBmeFtwYW5lXQl8fCBudWxsCQkJCS8vIGVmZmVjdHMuc2xpZGUud2VzdAorCQkJCTsKKwkJCQkvLyBjcmVhdGUgZnhTcGVlZFtfb3BlbnxfY2xvc2V8X3NpemVdCisJCQkJb1tzU3BlZWRdID0KKwkJCQkJb1tzU3BlZWRdCQkJCS8vIG9wdGlvbnMud2VzdC5meFNwZWVkX29wZW4KKwkJCQl8fAlkW3NTcGVlZF0JCQkJLy8gb3B0aW9ucy53ZXN0LmZ4U3BlZWRfb3BlbgorCQkJCXx8CW8uZnhTcGVlZAkJCQkvLyBvcHRpb25zLndlc3QuZnhTcGVlZAorCQkJCXx8CWQuZnhTcGVlZAkJCQkvLyBvcHRpb25zLnBhbmVzLmZ4U3BlZWQKKwkJCQl8fAludWxsCQkJCQkvLyBERUZBVUxUIC0gbGV0IGZ4U2V0dGluZy5kdXJhdGlvbiBjb250cm9sIHNwZWVkCisJCQkJOworCQkJCS8vIGNyZWF0ZSBmeFNldHRpbmdzW19vcGVufF9jbG9zZXxfc2l6ZV0KKwkJCQlvW3NTZXR0aW5nc10gPSAkLmV4dGVuZCgKKwkJCQkJdHJ1ZQorCQkJCSwJe30KKwkJCQksCWZ4X2FsbAkJCQkJLy8gZWZmZWN0cy5zbGlkZS5hbGwKKwkJCQksCWZ4X3BhbmUJCQkJCS8vIGVmZmVjdHMuc2xpZGUud2VzdAorCQkJCSwJZC5meFNldHRpbmdzCQkJLy8gb3B0aW9ucy5wYW5lcy5meFNldHRpbmdzCisJCQkJLAlvLmZ4U2V0dGluZ3MJCQkvLyBvcHRpb25zLndlc3QuZnhTZXR0aW5ncworCQkJCSwJZFtzU2V0dGluZ3NdCQkJLy8gb3B0aW9ucy5wYW5lcy5meFNldHRpbmdzX29wZW4KKwkJCQksCW9bc1NldHRpbmdzXQkJCS8vIG9wdGlvbnMud2VzdC5meFNldHRpbmdzX29wZW4KKwkJCQkpOworCQkJfSk7CisKKwkJCS8vIERPTkUgY3JlYXRpbmcgYWN0aW9uLXNwZWNpZmljLXNldHRpbmdzIGZvciB0aGlzIHBhbmUsCisJCQkvLyBzbyBERUxFVEUgZ2VuZXJpYyBvcHRpb25zIC0gYXJlIG5vIGxvbmdlciBtZWFuaW5nZnVsCisJCQlkZWxldGUgby5meE5hbWU7CisJCQlkZWxldGUgby5meFNwZWVkOworCQkJZGVsZXRlIG8uZnhTZXR0aW5nczsKKwkJfQorCX0KKworCS8qKgorCSogSW5pdGlhbGl6ZSBtb2R1bGUgb2JqZWN0cywgc3R5bGluZywgc2l6ZSBhbmQgcG9zaXRpb24gZm9yIGFsbCBwYW5lcworCSoKKwkqIEBzZWUgIF9pbml0RWxlbWVudHMoKQorCSogQHBhcmFtIHtzdHJpbmd9CXBhbmUJCVRoZSBwYW5lIHRvIHByb2Nlc3MKKwkqLworLAlnZXRQYW5lID0gZnVuY3Rpb24gKHBhbmUpIHsKKwkJdmFyIHNlbCA9IG9wdGlvbnNbcGFuZV0ucGFuZVNlbGVjdG9yCisJCWlmIChzZWwuc3Vic3RyKDAsMSk9PT0iIyIpIC8vIElEIHNlbGVjdG9yCisJCQkvLyBOT1RFOiBlbGVtZW50cyBzZWxlY3RlZCAnYnkgSUQnIERPIE5PVCBoYXZlIHRvIGJlICdjaGlsZHJlbicKKwkJCXJldHVybiAkTi5maW5kKHNlbCkuZXEoMCk7CisJCWVsc2UgeyAvLyBjbGFzcyBvciBvdGhlciBzZWxlY3RvcgorCQkJdmFyICRQID0gJE4uY2hpbGRyZW4oc2VsKS5lcSgwKTsKKwkJCS8vIGxvb2sgZm9yIHRoZSBwYW5lIG5lc3RlZCBpbnNpZGUgYSAnZm9ybScgZWxlbWVudAorCQkJcmV0dXJuICRQLmxlbmd0aCA/ICRQIDogJE4uY2hpbGRyZW4oImZvcm06Zmlyc3QiKS5jaGlsZHJlbihzZWwpLmVxKDApOworCQl9CisJfQorCissCWluaXRQYW5lcyA9IGZ1bmN0aW9uIChldnQpIHsKKwkJLy8gc3RvcFByb3BhZ2F0aW9uIGlmIGNhbGxlZCBieSB0cmlnZ2VyKCJsYXlvdXRpbml0cGFuZXMiKSAtIHVzZSBldnRQYW5lIHV0aWxpdHkgCisJCWV2dFBhbmUoZXZ0KTsKKworCQkvLyBOT1RFOiBkbyBub3J0aCAmIHNvdXRoIEZJUlNUIHNvIHdlIGNhbiBtZWFzdXJlIHRoZWlyIGhlaWdodCAtIGRvIGNlbnRlciBMQVNUCisJCSQuZWFjaChfYy5hbGxQYW5lcywgZnVuY3Rpb24gKGlkeCwgcGFuZSkgeworCQkJYWRkUGFuZSggcGFuZSwgdHJ1ZSApOworCQl9KTsKKworCQkvLyBpbml0IHRoZSBwYW5lLWhhbmRsZXMgTk9XIGluIGNhc2Ugd2UgaGF2ZSB0byBoaWRlIG9yIGNsb3NlIHRoZSBwYW5lIGJlbG93CisJCWluaXRIYW5kbGVzKCk7CisKKwkJLy8gbm93IHRoYXQgYWxsIHBhbmVzIGhhdmUgYmVlbiBpbml0aWFsaXplZCBhbmQgaW5pdGlhbGx5LXNpemVkLAorCQkvLyBtYWtlIHN1cmUgdGhlcmUgaXMgcmVhbGx5IGVub3VnaCBzcGFjZSBhdmFpbGFibGUgZm9yIGVhY2ggcGFuZQorCQkkLmVhY2goX2MuYm9yZGVyUGFuZXMsIGZ1bmN0aW9uIChpLCBwYW5lKSB7CisJCQlpZiAoJFBzW3BhbmVdICYmIHN0YXRlW3BhbmVdLmlzVmlzaWJsZSkgeyAvLyBwYW5lIGlzIE9QRU4KKwkJCQlzZXRTaXplTGltaXRzKHBhbmUpOworCQkJCW1ha2VQYW5lRml0KHBhbmUpOyAvLyBwYW5lIG1heSBiZSBDbG9zZWQsIEhpZGRlbiBvciBSZXNpemVkIGJ5IG1ha2VQYW5lRml0KCkKKwkJCX0KKwkJfSk7CisJCS8vIHNpemUgY2VudGVyLXBhbmUgQUdBSU4gaW4gY2FzZSB3ZSAnY2xvc2VkJyBhIGJvcmRlci1wYW5lIGluIGxvb3AgYWJvdmUKKwkJc2l6ZU1pZFBhbmVzKCJjZW50ZXIiKTsKKworCQkvLwlDaHJvbWUvV2Via2l0IHNvbWV0aW1lcyBmaXJlcyBjYWxsYmFja3MgQkVGT1JFIGl0IGNvbXBsZXRlcyByZXNpemluZyEKKwkJLy8JQmVmb3JlIFJDMzAuMywgdGhlcmUgd2FzIGEgMTBtcyBkZWxheSBoZXJlLCBidXQgdGhhdCBjYXVzZWQgbGF5b3V0IAorCQkvLwl0byBsb2FkIGFzeW5jaHJvdXNseSwgd2hpY2ggaXMgQkFELCBzbyB0cnkgc2tpcHBpbmcgZGVsYXkgZm9yIG5vdworCisJCS8vIHByb2Nlc3MgcGFuZSBjb250ZW50cyBhbmQgY2FsbGJhY2tzLCBhbmQgaW5pdC9yZXNpemUgY2hpbGQtbGF5b3V0IGlmIGV4aXN0cworCQkkLmVhY2goX2MuYWxsUGFuZXMsIGZ1bmN0aW9uIChpLCBwYW5lKSB7CisJCQl2YXIgbyA9IG9wdGlvbnNbcGFuZV07CisJCQlpZiAoJFBzW3BhbmVdKSB7CisJCQkJaWYgKHN0YXRlW3BhbmVdLmlzVmlzaWJsZSkgeyAvLyBwYW5lIGlzIE9QRU4KKwkJCQkJc2l6ZUNvbnRlbnQocGFuZSk7CisJCQkJCS8vIHRyaWdnZXIgcGFuZS5vblJlc2l6ZSBpZiB0cmlnZ2VyRXZlbnRzT25Mb2FkID0gdHJ1ZQorCQkJCQlpZiAoby50cmlnZ2VyRXZlbnRzT25Mb2FkKQorCQkJCQkJX3J1bkNhbGxiYWNrcygib25yZXNpemVfZW5kIiwgcGFuZSk7CisJCQkJZWxzZSAvLyBhdXRvbWF0aWMgaWYgb25yZXNpemUgY2FsbGVkLCBvdGhlcndpc2UgY2FsbCBpdCBzcGVjaWZpY2FsbHkKKwkJCQkJLy8gcmVzaXplIGNoaWxkIC0gSUYgaW5uZXItbGF5b3V0IGFscmVhZHkgZXhpc3RzIChjcmVhdGVkIGJlZm9yZSB0aGlzIGxheW91dCkKKwkJCQkJcmVzaXplQ2hpbGRMYXlvdXQocGFuZSk7CisJCQkJfQorCQkJCS8vIGluaXQgY2hpbGRMYXlvdXQgLSBldmVuIGlmIHBhbmUgaXMgbm90IHZpc2libGUKKwkJCQlpZiAoby5pbml0Q2hpbGRMYXlvdXQgJiYgby5jaGlsZE9wdGlvbnMpCisJCQkJCWNyZWF0ZUNoaWxkTGF5b3V0KHBhbmUpOworCQkJfQorCQl9KTsKKwl9CisKKwkvKioKKwkqIEFkZCBhIHBhbmUgdG8gdGhlIGxheW91dCAtIHN1YnJvdXRpbmUgb2YgaW5pdFBhbmVzKCkKKwkqCisJKiBAc2VlICBpbml0UGFuZXMoKQorCSogQHBhcmFtIHtzdHJpbmd9CXBhbmUJCQlUaGUgcGFuZSB0byBwcm9jZXNzCisJKiBAcGFyYW0ge2Jvb2xlYW49fQlbZm9yY2U9ZmFsc2VdCVNpemUgY29udGVudCBhZnRlciBpbml0CisJKi8KKywJYWRkUGFuZSA9IGZ1bmN0aW9uIChwYW5lLCBmb3JjZSkgeworCQlpZiAoIWZvcmNlICYmICFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJdmFyCisJCQlvCQk9IG9wdGlvbnNbcGFuZV0KKwkJLAlzCQk9IHN0YXRlW3BhbmVdCisJCSwJYwkJPSBfY1twYW5lXQorCQksCWZ4CQk9IHMuZngKKwkJLAlkaXIJCT0gYy5kaXIKKwkJLAlzcGFjaW5nCT0gby5zcGFjaW5nX29wZW4gfHwgMAorCQksCWlzQ2VudGVyID0gKHBhbmUgPT09ICJjZW50ZXIiKQorCQksCUNTUwkJPSB7fQorCQksCSRQCQk9ICRQc1twYW5lXQorCQksCXNpemUsIG1pblNpemUsIG1heFNpemUKKwkJOworCQkvLyBpZiBwYW5lLXBvaW50ZXIgYWxyZWFkeSBleGlzdHMsIHJlbW92ZSB0aGUgb2xkIG9uZSBmaXJzdAorCQlpZiAoJFApCisJCQlyZW1vdmVQYW5lKCBwYW5lLCBmYWxzZSwgdHJ1ZSwgZmFsc2UgKTsKKwkJZWxzZQorCQkJJENzW3BhbmVdID0gZmFsc2U7IC8vIGluaXQKKworCQkkUCA9ICRQc1twYW5lXSA9IGdldFBhbmUocGFuZSk7CisJCWlmICghJFAubGVuZ3RoKSB7CisJCQkkUHNbcGFuZV0gPSBmYWxzZTsgLy8gbG9naWMKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIFNBVkUgb3JpZ2luYWwgUGFuZSBDU1MKKwkJaWYgKCEkUC5kYXRhKCJsYXlvdXRDU1MiKSkgeworCQkJdmFyIHByb3BzID0gInBvc2l0aW9uLHRvcCxsZWZ0LGJvdHRvbSxyaWdodCx3aWR0aCxoZWlnaHQsb3ZlcmZsb3csekluZGV4LGRpc3BsYXksYmFja2dyb3VuZENvbG9yLHBhZGRpbmcsbWFyZ2luLGJvcmRlciI7CisJCQkkUC5kYXRhKCJsYXlvdXRDU1MiLCBlbENTUygkUCwgcHJvcHMpKTsKKwkJfQorCisJCS8vIGNyZWF0ZSBhbGlhcyBmb3IgcGFuZSBkYXRhIGluIEluc3RhbmNlIC0gaW5pdEhhbmRsZXMgd2lsbCBhZGQgbW9yZQorCQlJbnN0YW5jZVtwYW5lXSA9IHsgbmFtZTogcGFuZSwgcGFuZTogJFBzW3BhbmVdLCBjb250ZW50OiAkQ3NbcGFuZV0sIG9wdGlvbnM6IG9wdGlvbnNbcGFuZV0sIHN0YXRlOiBzdGF0ZVtwYW5lXSwgY2hpbGQ6IGNoaWxkcmVuW3BhbmVdIH07CisKKwkJLy8gYWRkIGNsYXNzZXMsIGF0dHJpYnV0ZXMgJiBldmVudHMKKwkJJFAJLmRhdGEoeworCQkJCXBhcmVudExheW91dDoJSW5zdGFuY2UJCS8vIHBvaW50ZXIgdG8gTGF5b3V0IEluc3RhbmNlCisJCQksCWxheW91dFBhbmU6CQlJbnN0YW5jZVtwYW5lXQkvLyBORVcgcG9pbnRlciB0byBwYW5lLWFsaWFzLW9iamVjdAorCQkJLAlsYXlvdXRFZGdlOgkJcGFuZQorCQkJLAlsYXlvdXRSb2xlOgkJInBhbmUiCisJCQl9KQorCQkJLmNzcyhjLmNzc1JlcSkuY3NzKCJ6SW5kZXgiLCBvcHRpb25zLnpJbmRleGVzLnBhbmVfbm9ybWFsKQorCQkJLmNzcyhvLmFwcGx5RGVtb1N0eWxlcyA/IGMuY3NzRGVtbyA6IHt9KSAvLyBkZW1vIHN0eWxlcworCQkJLmFkZENsYXNzKCBvLnBhbmVDbGFzcyArIiAiKyBvLnBhbmVDbGFzcysiLSIrcGFuZSApIC8vIGRlZmF1bHQgPSAidWktbGF5b3V0LXBhbmUgdWktbGF5b3V0LXBhbmUtd2VzdCIgLSBtYXkgYmUgYSBkdXBlIG9mICdwYW5lU2VsZWN0b3InCisJCQkuYmluZCgibW91c2VlbnRlci4iKyBzSUQsIGFkZEhvdmVyICkKKwkJCS5iaW5kKCJtb3VzZWxlYXZlLiIrIHNJRCwgcmVtb3ZlSG92ZXIgKQorCQkJOworCQl2YXIgcGFuZU1ldGhvZHMgPSB7CisJCQkJaGlkZToJCQkJJycKKwkJCSwJc2hvdzoJCQkJJycKKwkJCSwJdG9nZ2xlOgkJCQknJworCQkJLAljbG9zZToJCQkJJycKKwkJCSwJb3BlbjoJCQkJJycKKwkJCSwJc2xpZGVPcGVuOgkJCScnCisJCQksCXNsaWRlQ2xvc2U6CQkJJycKKwkJCSwJc2xpZGVUb2dnbGU6CQknJworCQkJLAlzaXplOgkJCQknc2l6ZVBhbmUnCisJCQksCXNpemVQYW5lOgkJCSdzaXplUGFuZScKKwkJCSwJc2l6ZUNvbnRlbnQ6CQknJworCQkJLAlzaXplSGFuZGxlczoJCScnCisJCQksCWVuYWJsZUNsb3NhYmxlOgkJJycKKwkJCSwJZGlzYWJsZUNsb3NhYmxlOgknJworCQkJLAllbmFibGVTbGlkZWFibGU6CScnCisJCQksCWRpc2FibGVTbGlkZWFibGU6CScnCisJCQksCWVuYWJsZVJlc2l6YWJsZToJJycKKwkJCSwJZGlzYWJsZVJlc2l6YWJsZToJJycKKwkJCSwJc3dhcFBhbmVzOgkJCSdzd2FwUGFuZXMnCisJCQksCXN3YXA6CQkJCSdzd2FwUGFuZXMnCisJCQksCW1vdmU6CQkJCSdzd2FwUGFuZXMnCisJCQksCXJlbW92ZVBhbmU6CQkJJ3JlbW92ZVBhbmUnCisJCQksCXJlbW92ZToJCQkJJ3JlbW92ZVBhbmUnCisJCQksCWNyZWF0ZUNoaWxkTGF5b3V0OgknJworCQkJLAlyZXNpemVDaGlsZExheW91dDoJJycKKwkJCSwJcmVzaXplQWxsOgkJCSdyZXNpemVBbGwnCisJCQksCXJlc2l6ZUxheW91dDoJCSdyZXNpemVBbGwnCisJCQl9CisJCSwJbmFtZTsKKwkJLy8gbG9vcCBoYXNoIGFuZCBiaW5kIGFsbCBtZXRob2RzIC0gaW5jbHVkZSBsYXlvdXRJRCBuYW1lc3BhY2luZworCQlmb3IgKG5hbWUgaW4gcGFuZU1ldGhvZHMpIHsKKwkJCSRQLmJpbmQoImxheW91dHBhbmUiKyBuYW1lLnRvTG93ZXJDYXNlKCkgKyIuIisgc0lELCBJbnN0YW5jZVsgcGFuZU1ldGhvZHNbbmFtZV0gfHwgbmFtZSBdKTsKKwkJfQorCisJCS8vIHNlZSBpZiB0aGlzIHBhbmUgaGFzIGEgJ3Njcm9sbGluZy1jb250ZW50IGVsZW1lbnQnCisJCWluaXRDb250ZW50KHBhbmUsIGZhbHNlKTsgLy8gZmFsc2UgPSBkbyBOT1Qgc2l6ZUNvbnRlbnQoKSAtIGNhbGxlZCBsYXRlcgorCisJCWlmICghaXNDZW50ZXIpIHsKKwkJCS8vIGNhbGwgX3BhcnNlU2l6ZSBBRlRFUiBhcHBseWluZyBwYW5lIGNsYXNzZXMgJiBzdHlsZXMgLSBidXQgYmVmb3JlIG1ha2luZyB2aXNpYmxlIChpZiBoaWRkZW4pCisJCQkvLyBpZiBvLnNpemUgaXMgYXV0byBvciBub3QgdmFsaWQsIHRoZW4gTUVBU1VSRSB0aGUgcGFuZSBhbmQgdXNlIHRoYXQgYXMgaXRzICdzaXplJworCQkJc2l6ZQk9IHMuc2l6ZSA9IF9wYXJzZVNpemUocGFuZSwgby5zaXplKTsKKwkJCW1pblNpemUJPSBfcGFyc2VTaXplKHBhbmUsby5taW5TaXplKSB8fCAxOworCQkJbWF4U2l6ZQk9IF9wYXJzZVNpemUocGFuZSxvLm1heFNpemUpIHx8IDEwMDAwMDsKKwkJCWlmIChzaXplID4gMCkgc2l6ZSA9IG1heChtaW4oc2l6ZSwgbWF4U2l6ZSksIG1pblNpemUpOworCisJCQkvLyBzdGF0ZSBmb3IgYm9yZGVyLXBhbmVzCisJCQlzLmlzQ2xvc2VkICA9IGZhbHNlOyAvLyB0cnVlID0gcGFuZSBpcyBjbG9zZWQKKwkJCXMuaXNTbGlkaW5nID0gZmFsc2U7IC8vIHRydWUgPSBwYW5lIGlzIGN1cnJlbnRseSBvcGVuIGJ5ICdzbGlkaW5nJyBvdmVyIGFkamFjZW50IHBhbmVzCisJCQlzLmlzUmVzaXppbmc9IGZhbHNlOyAvLyB0cnVlID0gcGFuZSBpcyBpbiBwcm9jZXNzIG9mIGJlaW5nIHJlc2l6ZWQKKwkJCXMuaXNIaWRkZW4JPSBmYWxzZTsgLy8gdHJ1ZSA9IHBhbmUgaXMgaGlkZGVuIC0gbm8gc3BhY2luZywgcmVzaXplciBvciB0b2dnbGVyIGlzIHZpc2libGUhCisKKwkJCS8vIGFycmF5IGZvciAncGluIGJ1dHRvbnMnIHdob3NlIGNsYXNzTmFtZXMgYXJlIGF1dG8tdXBkYXRlZCBvbiBwYW5lLW9wZW4vLWNsb3NlCisJCQlpZiAoIXMucGlucykgcy5waW5zID0gW107CisJCX0KKwkJLy8Jc3RhdGVzIGNvbW1vbiB0byBBTEwgcGFuZXMKKwkJcy50YWdOYW1lCT0gJFBbMF0udGFnTmFtZTsKKwkJcy5lZGdlCQk9IHBhbmU7CQkvLyB1c2VmdWwgaWYgcGFuZSBpcyAob3IgYWJvdXQgdG8gYmUpICdzd2FwcGVkJyAtIGVhc3kgZmluZCBvdXQgd2hlcmUgaXQgaXMgKG9yIGlzIGdvaW5nKQorCQlzLm5vUm9vbQk9IGZhbHNlOwkvLyB0cnVlID0gcGFuZSAnYXV0b21hdGljYWxseScgaGlkZGVuIGR1ZSB0byBpbnN1ZmZpY2llbnQgcm9vbSAtIHdpbGwgdW5oaWRlIGF1dG9tYXRpY2FsbHkKKwkJcy5pc1Zpc2libGUJPSB0cnVlOwkJLy8gZmFsc2UgPSBwYW5lIGlzIGludmlzaWJsZSAtIGNsb3NlZCBPUiBoaWRkZW4gLSBzaW1wbGlmeSBsb2dpYworCisJCS8vIHNldCBjc3MtcG9zaXRpb24gdG8gYWNjb3VudCBmb3IgY29udGFpbmVyIGJvcmRlcnMgJiBwYWRkaW5nCisJCXN3aXRjaCAocGFuZSkgeworCQkJY2FzZSAibm9ydGgiOiAJQ1NTLnRvcCAJPSBzQy5pbnNldFRvcDsKKwkJCQkJCQlDU1MubGVmdCAJPSBzQy5pbnNldExlZnQ7CisJCQkJCQkJQ1NTLnJpZ2h0CT0gc0MuaW5zZXRSaWdodDsKKwkJCQkJCQlicmVhazsKKwkJCWNhc2UgInNvdXRoIjogCUNTUy5ib3R0b20JPSBzQy5pbnNldEJvdHRvbTsKKwkJCQkJCQlDU1MubGVmdCAJPSBzQy5pbnNldExlZnQ7CisJCQkJCQkJQ1NTLnJpZ2h0IAk9IHNDLmluc2V0UmlnaHQ7CisJCQkJCQkJYnJlYWs7CisJCQljYXNlICJ3ZXN0IjogCUNTUy5sZWZ0IAk9IHNDLmluc2V0TGVmdDsgLy8gdG9wLCBib3R0b20gJiBoZWlnaHQgc2V0IGJ5IHNpemVNaWRQYW5lcygpCisJCQkJCQkJYnJlYWs7CisJCQljYXNlICJlYXN0IjogCUNTUy5yaWdodCAJPSBzQy5pbnNldFJpZ2h0OyAvLyBkaXR0bworCQkJCQkJCWJyZWFrOworCQkJY2FzZSAiY2VudGVyIjoJLy8gdG9wLCBsZWZ0LCB3aWR0aCAmIGhlaWdodCBzZXQgYnkgc2l6ZU1pZFBhbmVzKCkKKwkJfQorCisJCWlmIChkaXIgPT09ICJob3J6IikgLy8gbm9ydGggb3Igc291dGggcGFuZQorCQkJQ1NTLmhlaWdodCA9IGNzc0goJFAsIHNpemUpOworCQllbHNlIGlmIChkaXIgPT09ICJ2ZXJ0IikgLy8gZWFzdCBvciB3ZXN0IHBhbmUKKwkJCUNTUy53aWR0aCA9IGNzc1coJFAsIHNpemUpOworCQkvL2Vsc2UgaWYgKGlzQ2VudGVyKSB7fQorCisJCSRQLmNzcyhDU1MpOyAvLyBhcHBseSBzaXplIC0tIHRvcCwgYm90dG9tICYgaGVpZ2h0IHdpbGwgYmUgc2V0IGJ5IHNpemVNaWRQYW5lcworCQlpZiAoZGlyICE9ICJob3J6Iikgc2l6ZU1pZFBhbmVzKHBhbmUsIHRydWUpOyAvLyB0cnVlID0gc2tpcENhbGxiYWNrCisKKwkJLy8gY2xvc2Ugb3IgaGlkZSB0aGUgcGFuZSBpZiBzcGVjaWZpZWQgaW4gc2V0dGluZ3MKKwkJaWYgKG8uaW5pdENsb3NlZCAmJiBvLmNsb3NhYmxlICYmICFvLmluaXRIaWRkZW4pCisJCQljbG9zZShwYW5lLCB0cnVlLCB0cnVlKTsgLy8gdHJ1ZSwgdHJ1ZSA9IGZvcmNlLCBub0FuaW1hdGlvbgorCQllbHNlIGlmIChvLmluaXRIaWRkZW4gfHwgby5pbml0Q2xvc2VkKQorCQkJaGlkZShwYW5lKTsgLy8gd2lsbCBiZSBjb21wbGV0ZWx5IGludmlzaWJsZSAtIG5vIHJlc2l6ZXIgb3Igc3BhY2luZworCQllbHNlIGlmICghcy5ub1Jvb20pCisJCQkvLyBtYWtlIHRoZSBwYW5lIHZpc2libGUgLSBpbiBjYXNlIHdhcyBpbml0aWFsbHkgaGlkZGVuCisJCQkkUC5jc3MoImRpc3BsYXkiLCJibG9jayIpOworCQkvLyBFTFNFIHNldEFzT3BlbigpIC0gY2FsbGVkIGxhdGVyIGJ5IGluaXRIYW5kbGVzKCkKKworCQkvLyBSRVNFVCB2aXNpYmlsaXR5IG5vdyAtIHBhbmUgd2lsbCBhcHBlYXIgSUYgZGlzcGxheTpibG9jaworCQkkUC5jc3MoInZpc2liaWxpdHkiLCJ2aXNpYmxlIik7CisKKwkJLy8gY2hlY2sgb3B0aW9uIGZvciBhdXRvLWhhbmRsaW5nIG9mIHBvcC11cHMgJiBkcm9wLWRvd25zCisJCWlmIChvLnNob3dPdmVyZmxvd09uSG92ZXIpCisJCQkkUC5ob3ZlciggYWxsb3dPdmVyZmxvdywgcmVzZXRPdmVyZmxvdyApOworCisJCS8vIGlmIG1hbnVhbGx5IGFkZGluZyBhIHBhbmUgQUZURVIgbGF5b3V0IGluaXRpYWxpemF0aW9uLCB0aGVuLi4uCisJCWlmIChzdGF0ZS5pbml0aWFsaXplZCkgeworCQkJaW5pdEhhbmRsZXMoIHBhbmUgKTsKKwkJCWluaXRIb3RrZXlzKCBwYW5lICk7CisJCQlyZXNpemVBbGwoKTsgLy8gd2lsbCBzaXplQ29udGVudCBpZiBwYW5lIGlzIHZpc2libGUKKwkJCWlmIChzLmlzVmlzaWJsZSkgeyAvLyBwYW5lIGlzIE9QRU4KKwkJCQlpZiAoby50cmlnZ2VyRXZlbnRzT25Mb2FkKQorCQkJCQlfcnVuQ2FsbGJhY2tzKCJvbnJlc2l6ZV9lbmQiLCBwYW5lKTsKKwkJCQllbHNlIC8vIGF1dG9tYXRpYyBpZiBvbnJlc2l6ZSBjYWxsZWQsIG90aGVyd2lzZSBjYWxsIGl0IHNwZWNpZmljYWxseQorCQkJCQkvLyByZXNpemUgY2hpbGQgLSBJRiBpbm5lci1sYXlvdXQgYWxyZWFkeSBleGlzdHMgKGNyZWF0ZWQgYmVmb3JlIHRoaXMgbGF5b3V0KQorCQkJCQlyZXNpemVDaGlsZExheW91dChwYW5lKTsgLy8gYSBwcmV2aW91c2x5IGV4aXN0aW5nIGNoaWxkTGF5b3V0CisJCQl9CisJCQlpZiAoby5pbml0Q2hpbGRMYXlvdXQgJiYgby5jaGlsZE9wdGlvbnMpCisJCQkJY3JlYXRlQ2hpbGRMYXlvdXQocGFuZSk7CisJCX0KKwl9CisKKwkvKioKKwkqIEluaXRpYWxpemUgbW9kdWxlIG9iamVjdHMsIHN0eWxpbmcsIHNpemUgYW5kIHBvc2l0aW9uIGZvciBhbGwgcmVzaXplIGJhcnMgYW5kIHRvZ2dsZXIgYnV0dG9ucworCSoKKwkqIEBzZWUgIF9jcmVhdGUoKQorCSogQHBhcmFtIHtzdHJpbmc9fQlbcGFuZXM9IiJdCVRoZSBlZGdlKHMpIHRvIHByb2Nlc3MKKwkqLworLAlpbml0SGFuZGxlcyA9IGZ1bmN0aW9uIChwYW5lcykgeworCQlwYW5lcyA9IHBhbmVzID8gcGFuZXMuc3BsaXQoIiwiKSA6IF9jLmJvcmRlclBhbmVzOworCisJCS8vIGNyZWF0ZSB0b2dnbGVyIERJVnMgZm9yIGVhY2ggcGFuZSwgYW5kIHNldCBvYmplY3QgcG9pbnRlcnMgZm9yIHRoZW0sIGVnOiAkUi5ub3J0aCA9IG5vcnRoIHRvZ2dsZXIgRElWCisJCSQuZWFjaChwYW5lcywgZnVuY3Rpb24gKGksIHBhbmUpIHsKKwkJCXZhciAkUAkJPSAkUHNbcGFuZV07CisJCQkkUnNbcGFuZV0JPSBmYWxzZTsgLy8gSU5JVAorCQkJJFRzW3BhbmVdCT0gZmFsc2U7CisJCQlpZiAoISRQKSByZXR1cm47IC8vIHBhbmUgZG9lcyBub3QgZXhpc3QgLSBza2lwCisKKwkJCXZhciAKKwkJCQlvCQk9IG9wdGlvbnNbcGFuZV0KKwkJCSwJcwkJPSBzdGF0ZVtwYW5lXQorCQkJLAljCQk9IF9jW3BhbmVdCisJCQksCXBhbmVJZAk9IG8ucGFuZVNlbGVjdG9yLnN1YnN0cigwLDEpID09PSAiIyIgPyBvLnBhbmVTZWxlY3Rvci5zdWJzdHIoMSkgOiAiIgorCQkJLAlyQ2xhc3MJPSBvLnJlc2l6ZXJDbGFzcworCQkJLAl0Q2xhc3MJPSBvLnRvZ2dsZXJDbGFzcworCQkJLAlzaWRlCT0gYy5zaWRlLnRvTG93ZXJDYXNlKCkKKwkJCSwJc3BhY2luZwk9IChzLmlzVmlzaWJsZSA/IG8uc3BhY2luZ19vcGVuIDogby5zcGFjaW5nX2Nsb3NlZCkKKwkJCSwJX3BhbmUJPSAiLSIrIHBhbmUgLy8gdXNlZCBmb3IgY2xhc3NOYW1lcworCQkJLAlfc3RhdGUJPSAocy5pc1Zpc2libGUgPyAiLW9wZW4iIDogIi1jbG9zZWQiKSAvLyB1c2VkIGZvciBjbGFzc05hbWVzCisJCQksCUkJCT0gSW5zdGFuY2VbcGFuZV0KKwkJCQkvLyBJTklUIFJFU0laRVIgQkFSCisJCQksCSRSCQk9IEkucmVzaXplciA9ICRSc1twYW5lXSA9ICQoIjxkaXY+PC9kaXY+IikKKwkJCQkvLyBJTklUIFRPR0dMRVIgQlVUVE9OCisJCQksCSRUCQk9IEkudG9nZ2xlciA9IChvLmNsb3NhYmxlID8gJFRzW3BhbmVdID0gJCgiPGRpdj48L2Rpdj4iKSA6IGZhbHNlKQorCQkJOworCisJCQkvL2lmIChzLmlzVmlzaWJsZSAmJiBvLnJlc2l6YWJsZSkgLi4uIGhhbmRsZWQgYnkgaW5pdFJlc2l6YWJsZQorCQkJaWYgKCFzLmlzVmlzaWJsZSAmJiBvLnNsaWRhYmxlKQorCQkJCSRSLmF0dHIoInRpdGxlIiwgby50aXBzLlNsaWRlKS5jc3MoImN1cnNvciIsIG8uc2xpZGVyQ3Vyc29yKTsKKworCQkJJFIJLy8gaWYgcGFuZVNlbGVjdG9yIGlzIGFuIElELCB0aGVuIGNyZWF0ZSBhIG1hdGNoaW5nIElEIGZvciB0aGUgcmVzaXplciwgZWc6ICIjcGFuZUxlZnQiID0+ICJwYW5lTGVmdC1yZXNpemVyIgorCQkJCS5hdHRyKCJpZCIsIHBhbmVJZCA/IHBhbmVJZCArIi1yZXNpemVyIiA6ICIiICkKKwkJCQkuZGF0YSh7CisJCQkJCXBhcmVudExheW91dDoJSW5zdGFuY2UKKwkJCQksCWxheW91dFBhbmU6CQlJbnN0YW5jZVtwYW5lXQkvLyBORVcgcG9pbnRlciB0byBwYW5lLWFsaWFzLW9iamVjdAorCQkJCSwJbGF5b3V0RWRnZToJCXBhbmUKKwkJCQksCWxheW91dFJvbGU6CQkicmVzaXplciIKKwkJCQl9KQorCQkJCS5jc3MoX2MucmVzaXplcnMuY3NzUmVxKS5jc3MoInpJbmRleCIsIG9wdGlvbnMuekluZGV4ZXMucmVzaXplcl9ub3JtYWwpCisJCQkJLmNzcyhvLmFwcGx5RGVtb1N0eWxlcyA/IF9jLnJlc2l6ZXJzLmNzc0RlbW8gOiB7fSkgLy8gYWRkIGRlbW8gc3R5bGVzCisJCQkJLmFkZENsYXNzKHJDbGFzcyArIiAiKyByQ2xhc3MrX3BhbmUpCisJCQkJLmhvdmVyKGFkZEhvdmVyLCByZW1vdmVIb3ZlcikgLy8gQUxXQVlTIGFkZCBob3Zlci1jbGFzc2VzLCBldmVuIGlmIHJlc2l6aW5nIGlzIG5vdCBlbmFibGVkIC0gaGFuZGxlIHdpdGggQ1NTIGluc3RlYWQKKwkJCQkuaG92ZXIob25SZXNpemVyRW50ZXIsIG9uUmVzaXplckxlYXZlKSAvLyBBTFdBWVMgTkVFRCByZXNpemVyLm1vdXNlbGVhdmUgdG8gYmFsYW5jZSB0b2dnbGVyLm1vdXNlZW50ZXIKKwkJCQkuYXBwZW5kVG8oJE4pIC8vIGFwcGVuZCBESVYgdG8gY29udGFpbmVyCisJCQk7CisKKwkJCWlmICgkVCkgeworCQkJCSRUCS8vIGlmIHBhbmVTZWxlY3RvciBpcyBhbiBJRCwgdGhlbiBjcmVhdGUgYSBtYXRjaGluZyBJRCBmb3IgdGhlIHJlc2l6ZXIsIGVnOiAiI3BhbmVMZWZ0IiA9PiAiI3BhbmVMZWZ0LXRvZ2dsZXIiCisJCQkJCS5hdHRyKCJpZCIsIHBhbmVJZCA/IHBhbmVJZCArIi10b2dnbGVyIiA6ICIiICkKKwkJCQkJLmRhdGEoeworCQkJCQkJcGFyZW50TGF5b3V0OglJbnN0YW5jZQorCQkJCQksCWxheW91dFBhbmU6CQlJbnN0YW5jZVtwYW5lXQkvLyBORVcgcG9pbnRlciB0byBwYW5lLWFsaWFzLW9iamVjdAorCQkJCQksCWxheW91dEVkZ2U6CQlwYW5lCisJCQkJCSwJbGF5b3V0Um9sZToJCSJ0b2dnbGVyIgorCQkJCQl9KQorCQkJCQkuY3NzKF9jLnRvZ2dsZXJzLmNzc1JlcSkgLy8gYWRkIGJhc2UvcmVxdWlyZWQgc3R5bGVzCisJCQkJCS5jc3Moby5hcHBseURlbW9TdHlsZXMgPyBfYy50b2dnbGVycy5jc3NEZW1vIDoge30pIC8vIGFkZCBkZW1vIHN0eWxlcworCQkJCQkuYWRkQ2xhc3ModENsYXNzICsiICIrIHRDbGFzcytfcGFuZSkKKwkJCQkJLmhvdmVyKGFkZEhvdmVyLCByZW1vdmVIb3ZlcikgLy8gQUxXQVlTIGFkZCBob3Zlci1jbGFzc2VzLCBldmVuIGlmIHRvZ2dsaW5nIGlzIG5vdCBlbmFibGVkIC0gaGFuZGxlIHdpdGggQ1NTIGluc3RlYWQKKwkJCQkJLmJpbmQoIm1vdXNlZW50ZXIiLCBvblJlc2l6ZXJFbnRlcikgLy8gTkVFRCB0b2dnbGVyLm1vdXNlZW50ZXIgYmVjYXVzZSBtb3VzZWVudGVyIE1BWSBOT1QgZmlyZSBvbiByZXNpemVyCisJCQkJCS5hcHBlbmRUbygkUikgLy8gYXBwZW5kIFNQQU4gdG8gcmVzaXplciBESVYKKwkJCQk7CisJCQkJLy8gQUREIElOTkVSLVNQQU5TIFRPIFRPR0dMRVIKKwkJCQlpZiAoby50b2dnbGVyQ29udGVudF9vcGVuKSAvLyB1aS1sYXlvdXQtb3BlbgorCQkJCQkkKCI8c3Bhbj4iKyBvLnRvZ2dsZXJDb250ZW50X29wZW4gKyI8L3NwYW4+IikKKwkJCQkJCS5kYXRhKHsKKwkJCQkJCQlsYXlvdXRFZGdlOgkJcGFuZQorCQkJCQkJLAlsYXlvdXRSb2xlOgkJInRvZ2dsZXJDb250ZW50IgorCQkJCQkJfSkKKwkJCQkJCS5kYXRhKCJsYXlvdXRSb2xlIiwgInRvZ2dsZXJDb250ZW50IikKKwkJCQkJCS5kYXRhKCJsYXlvdXRFZGdlIiwgcGFuZSkKKwkJCQkJCS5hZGRDbGFzcygiY29udGVudCBjb250ZW50LW9wZW4iKQorCQkJCQkJLmNzcygiZGlzcGxheSIsIm5vbmUiKQorCQkJCQkJLmFwcGVuZFRvKCAkVCApCisJCQkJCQkvLy5ob3ZlciggYWRkSG92ZXIsIHJlbW92ZUhvdmVyICkgLy8gdXNlIHVpLWxheW91dC10b2dnbGVyLXdlc3QtaG92ZXIgLmNvbnRlbnQtb3BlbiBpbnN0ZWFkIQorCQkJCQk7CisJCQkJaWYgKG8udG9nZ2xlckNvbnRlbnRfY2xvc2VkKSAvLyB1aS1sYXlvdXQtY2xvc2VkCisJCQkJCSQoIjxzcGFuPiIrIG8udG9nZ2xlckNvbnRlbnRfY2xvc2VkICsiPC9zcGFuPiIpCisJCQkJCQkuZGF0YSh7CisJCQkJCQkJbGF5b3V0RWRnZToJCXBhbmUKKwkJCQkJCSwJbGF5b3V0Um9sZToJCSJ0b2dnbGVyQ29udGVudCIKKwkJCQkJCX0pCisJCQkJCQkuYWRkQ2xhc3MoImNvbnRlbnQgY29udGVudC1jbG9zZWQiKQorCQkJCQkJLmNzcygiZGlzcGxheSIsIm5vbmUiKQorCQkJCQkJLmFwcGVuZFRvKCAkVCApCisJCQkJCQkvLy5ob3ZlciggYWRkSG92ZXIsIHJlbW92ZUhvdmVyICkgLy8gdXNlIHVpLWxheW91dC10b2dnbGVyLXdlc3QtaG92ZXIgLmNvbnRlbnQtY2xvc2VkIGluc3RlYWQhCisJCQkJCTsKKwkJCQkvLyBBREQgVE9HR0xFUi5jbGljay8uaG92ZXIKKwkJCQllbmFibGVDbG9zYWJsZShwYW5lKTsKKwkJCX0KKworCQkJLy8gYWRkIERyYWdnYWJsZSBldmVudHMKKwkJCWluaXRSZXNpemFibGUocGFuZSk7CisKKwkJCS8vIEFERCBDTEFTU05BTUVTICYgU0xJREUtQklORElOR1MgLSBlZzogY2xhc3M9InJlc2l6ZXIgcmVzaXplci13ZXN0IHJlc2l6ZXItb3BlbiIKKwkJCWlmIChzLmlzVmlzaWJsZSkKKwkJCQlzZXRBc09wZW4ocGFuZSk7CS8vIG9uT3BlbiB3aWxsIGJlIGNhbGxlZCwgYnV0IE5PVCBvblJlc2l6ZQorCQkJZWxzZSB7CisJCQkJc2V0QXNDbG9zZWQocGFuZSk7CS8vIG9uQ2xvc2Ugd2lsbCBiZSBjYWxsZWQKKwkJCQliaW5kU3RhcnRTbGlkaW5nRXZlbnQocGFuZSwgdHJ1ZSk7IC8vIHdpbGwgZW5hYmxlIGV2ZW50cyBJRiBvcHRpb24gaXMgc2V0CisJCQl9CisKKwkJfSk7CisKKwkJLy8gU0VUIEFMTCBIQU5ETEUgRElNRU5TSU9OUworCQlzaXplSGFuZGxlcygpOworCX0KKworCisJLyoqCisJKiBJbml0aWFsaXplIHNjcm9sbGluZyB1aS1sYXlvdXQtY29udGVudCBkaXYgLSBpZiBleGlzdHMKKwkqCisJKiBAc2VlICBpbml0UGFuZSgpIC0gb3IgZXh0ZXJuYWxseSBhZnRlciBhbiBBamF4IGluamVjdGlvbgorCSogQHBhcmFtIHtzdHJpbmd9CVtwYW5lXQkJCVRoZSBwYW5lIHRvIHByb2Nlc3MKKwkqIEBwYXJhbSB7Ym9vbGVhbj19CVtyZXNpemU9dHJ1ZV0JU2l6ZSBjb250ZW50IGFmdGVyIGluaXQKKwkqLworLAlpbml0Q29udGVudCA9IGZ1bmN0aW9uIChwYW5lLCByZXNpemUpIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJdmFyIAorCQkJbwk9IG9wdGlvbnNbcGFuZV0KKwkJLAlzZWwJPSBvLmNvbnRlbnRTZWxlY3RvcgorCQksCUkJPSBJbnN0YW5jZVtwYW5lXQorCQksCSRQCT0gJFBzW3BhbmVdCisJCSwJJEMKKwkJOworCQlpZiAoc2VsKSAkQyA9IEkuY29udGVudCA9ICRDc1twYW5lXSA9IChvLmZpbmROZXN0ZWRDb250ZW50KQorCQkJPyAkUC5maW5kKHNlbCkuZXEoMCkgLy8gbWF0Y2ggMS1lbGVtZW50IG9ubHkKKwkJCTogJFAuY2hpbGRyZW4oc2VsKS5lcSgwKQorCQk7CisJCWlmICgkQyAmJiAkQy5sZW5ndGgpIHsKKwkJCSRDLmRhdGEoImxheW91dFJvbGUiLCAiY29udGVudCIpOworCQkJLy8gU0FWRSBvcmlnaW5hbCBQYW5lIENTUworCQkJaWYgKCEkQy5kYXRhKCJsYXlvdXRDU1MiKSkKKwkJCQkkQy5kYXRhKCJsYXlvdXRDU1MiLCBlbENTUygkQywgImhlaWdodCIpKTsKKwkJCSRDLmNzcyggX2MuY29udGVudC5jc3NSZXEgKTsKKwkJCWlmIChvLmFwcGx5RGVtb1N0eWxlcykgeworCQkJCSRDLmNzcyggX2MuY29udGVudC5jc3NEZW1vICk7IC8vIGFkZCBwYWRkaW5nICYgb3ZlcmZsb3c6IGF1dG8gdG8gY29udGVudC1kaXYKKwkJCQkkUC5jc3MoIF9jLmNvbnRlbnQuY3NzRGVtb1BhbmUgKTsgLy8gUkVNT1ZFIHBhZGRpbmcvc2Nyb2xsaW5nIGZyb20gcGFuZQorCQkJfQorCQkJc3RhdGVbcGFuZV0uY29udGVudCA9IHt9OyAvLyBpbml0IGNvbnRlbnQgc3RhdGUKKwkJCWlmIChyZXNpemUgIT09IGZhbHNlKSBzaXplQ29udGVudChwYW5lKTsKKwkJCS8vIHNpemVDb250ZW50KCkgaXMgY2FsbGVkIEFGVEVSIGluaXQgb2YgYWxsIGVsZW1lbnRzCisJCX0KKwkJZWxzZQorCQkJSS5jb250ZW50ID0gJENzW3BhbmVdID0gZmFsc2U7CisJfQorCisKKwkvKioKKwkqIEFkZCByZXNpemUtYmFycyB0byBhbGwgcGFuZXMgdGhhdCBzcGVjaWZ5IGl0IGluIG9wdGlvbnMKKwkqIC1kZXBlbmRhbmN5OiAkLmZuLnJlc2l6YWJsZSAtIHdpbGwgc2tpcCBpZiBub3QgZm91bmQKKwkqCisJKiBAc2VlICBfY3JlYXRlKCkKKwkqIEBwYXJhbSB7c3RyaW5nPX0JW3BhbmVzPSIiXQlUaGUgZWRnZShzKSB0byBwcm9jZXNzCisJKi8KKywJaW5pdFJlc2l6YWJsZSA9IGZ1bmN0aW9uIChwYW5lcykgeworCQl2YXIJZHJhZ2dpbmdBdmFpbGFibGUgPSAkLmxheW91dC5wbHVnaW5zLmRyYWdnYWJsZQorCQksCXNpZGUgLy8gc2V0IGluIHN0YXJ0KCkKKwkJOworCQlwYW5lcyA9IHBhbmVzID8gcGFuZXMuc3BsaXQoIiwiKSA6IF9jLmJvcmRlclBhbmVzOworCisJCSQuZWFjaChwYW5lcywgZnVuY3Rpb24gKGlkeCwgcGFuZSkgeworCQkJdmFyIG8gPSBvcHRpb25zW3BhbmVdOworCQkJaWYgKCFkcmFnZ2luZ0F2YWlsYWJsZSB8fCAhJFBzW3BhbmVdIHx8ICFvLnJlc2l6YWJsZSkgeworCQkJCW8ucmVzaXphYmxlID0gZmFsc2U7CisJCQkJcmV0dXJuIHRydWU7IC8vIHNraXAgdG8gbmV4dAorCQkJfQorCisJCQl2YXIgcwkJPSBzdGF0ZVtwYW5lXQorCQkJLAl6CQk9IG9wdGlvbnMuekluZGV4ZXMKKwkJCSwJYwkJPSBfY1twYW5lXQorCQkJLAlzaWRlCT0gYy5kaXI9PSJob3J6IiA/ICJ0b3AiIDogImxlZnQiCisJCQksCW9wRWRnZQk9IF9jLm9wcG9zaXRlRWRnZVtwYW5lXQorCQkJLAltYXNrcwk9ICBwYW5lICsiLGNlbnRlciwiKyBvcEVkZ2UgKyAoYy5kaXI9PSJob3J6IiA/ICIsd2VzdCxlYXN0IiA6ICIiKQorCQkJLAkkUCAJCT0gJFBzW3BhbmVdCisJCQksCSRSCQk9ICRSc1twYW5lXQorCQkJLAliYXNlCT0gby5yZXNpemVyQ2xhc3MKKwkJCSwJbGFzdFBvcwk9IDAgLy8gdXNlZCB3aGVuIGxpdmUtcmVzaXppbmcKKwkJCSwJciwgbGl2ZSAvLyBzZXQgaW4gc3RhcnQgYmVjYXVzZSBtYXkgY2hhbmdlCisJCQkvLwknZHJhZycgY2xhc3NlcyBhcmUgYXBwbGllZCB0byB0aGUgT1JJR0lOQUwgcmVzaXplci1iYXIgd2hpbGUgZHJhZ2dpbmcgaXMgaW4gcHJvY2VzcworCQkJLAlyZXNpemVyQ2xhc3MJCT0gYmFzZSsiLWRyYWciCQkJCS8vIHJlc2l6ZXItZHJhZworCQkJLAlyZXNpemVyUGFuZUNsYXNzCT0gYmFzZSsiLSIrcGFuZSsiLWRyYWciCQkvLyByZXNpemVyLW5vcnRoLWRyYWcKKwkJCS8vCSdoZWxwZXInIGNsYXNzIGlzIGFwcGxpZWQgdG8gdGhlIENMT05FRCByZXNpemVyLWJhciB3aGlsZSBpdCBpcyBiZWluZyBkcmFnZ2VkCisJCQksCWhlbHBlckNsYXNzCQkJPSBiYXNlKyItZHJhZ2dpbmciCQkJLy8gcmVzaXplci1kcmFnZ2luZworCQkJLAloZWxwZXJQYW5lQ2xhc3MJCT0gYmFzZSsiLSIrcGFuZSsiLWRyYWdnaW5nIiAvLyByZXNpemVyLW5vcnRoLWRyYWdnaW5nCisJCQksCWhlbHBlckxpbWl0Q2xhc3MJPSBiYXNlKyItZHJhZ2dpbmctbGltaXQiCS8vIHJlc2l6ZXItZHJhZworCQkJLAloZWxwZXJQYW5lTGltaXRDbGFzcyA9IGJhc2UrIi0iK3BhbmUrIi1kcmFnZ2luZy1saW1pdCIJLy8gcmVzaXplci1ub3J0aC1kcmFnCisJCQksCWhlbHBlckNsYXNzZXNTZXQJPSBmYWxzZSAJCQkJCS8vIGxvZ2ljIHZhcgorCQkJOworCisJCQlpZiAoIXMuaXNDbG9zZWQpCisJCQkJJFIuYXR0cigidGl0bGUiLCBvLnRpcHMuUmVzaXplKQorCQkJCSAgLmNzcygiY3Vyc29yIiwgby5yZXNpemVyQ3Vyc29yKTsgLy8gbi1yZXNpemUsIHMtcmVzaXplLCBldGMKKworCQkJJFIuZHJhZ2dhYmxlKHsKKwkJCQljb250YWlubWVudDoJJE5bMF0gLy8gbGltaXQgcmVzaXppbmcgdG8gbGF5b3V0IGNvbnRhaW5lcgorCQkJLAlheGlzOgkJCShjLmRpcj09ImhvcnoiID8gInkiIDogIngiKSAvLyBsaW1pdCByZXNpemluZyB0byBob3J6IG9yIHZlcnQgYXhpcworCQkJLAlkZWxheToJCQkwCisJCQksCWRpc3RhbmNlOgkJMQorCQkJLAlncmlkOgkJCW8ucmVzaXppbmdHcmlkCisJCQkvLwliYXNpYyBmb3JtYXQgZm9yIGhlbHBlciAtIHN0eWxlIGl0IHVzaW5nIGNsYXNzOiAudWktZHJhZ2dhYmxlLWRyYWdnaW5nCisJCQksCWhlbHBlcjoJCQkiY2xvbmUiCisJCQksCW9wYWNpdHk6CQlvLnJlc2l6ZXJEcmFnT3BhY2l0eQorCQkJLAlhZGRDbGFzc2VzOgkJZmFsc2UgLy8gYXZvaWQgdWktc3RhdGUtZGlzYWJsZWQgY2xhc3Mgd2hlbiBkaXNhYmxlZAorCQkJLy8sCWlmcmFtZUZpeDoJCW8uZHJhZ2dhYmxlSWZyYW1lRml4IC8vIFRPRE86IGNvbnNpZGVyIHVzaW5nIHdoZW4gYnVnIGlzIGZpeGVkCisJCQksCXpJbmRleDoJCQl6LnJlc2l6ZXJfZHJhZworCisJCQksCXN0YXJ0OiBmdW5jdGlvbiAoZSwgdWkpIHsKKwkJCQkJLy8gUkVGUkVTSCBvcHRpb25zICYgc3RhdGUgcG9pbnRlcnMgaW4gY2FzZSB3ZSB1c2VkIHN3YXBQYW5lcworCQkJCQlvID0gb3B0aW9uc1twYW5lXTsKKwkJCQkJcyA9IHN0YXRlW3BhbmVdOworCQkJCQkvLyByZS1yZWFkIG9wdGlvbnMKKwkJCQkJbGl2ZSA9IG8ubGl2ZVBhbmVSZXNpemluZzsKKworCQkJCQkvLyBvbmRyYWdfc3RhcnQgY2FsbGJhY2sgLSB3aWxsIENBTkNFTCBoaWRlIGlmIHJldHVybnMgZmFsc2UKKwkJCQkJLy8gVE9ETzogZHJhZ2dpbmcgQ0FOTk9UIGJlIGNhbmNlbGxlZCBsaWtlIHRoaXMsIHNvIHNlZSBpZiB0aGVyZSBpcyBhIHdheT8KKwkJCQkJaWYgKGZhbHNlID09PSBfcnVuQ2FsbGJhY2tzKCJvbmRyYWdfc3RhcnQiLCBwYW5lKSkgcmV0dXJuIGZhbHNlOworCisJCQkJCXMuaXNSZXNpemluZwk9IHRydWU7IC8vIHByZXZlbnQgcGFuZSBmcm9tIGNsb3Npbmcgd2hpbGUgcmVzaXppbmcKKwkJCQkJdGltZXIuY2xlYXIocGFuZSsiX2Nsb3NlU2xpZGVyIik7IC8vIGp1c3QgaW4gY2FzZSBhbHJlYWR5IHRyaWdnZXJlZAorCisJCQkJCS8vIFNFVCBSRVNJWkVSIExJTUlUUyAtIHVzZWQgaW4gZHJhZygpCisJCQkJCXNldFNpemVMaW1pdHMocGFuZSk7IC8vIHVwZGF0ZSBwYW5lL3Jlc2l6ZXIgc3RhdGUKKwkJCQkJciA9IHMucmVzaXplclBvc2l0aW9uOworCQkJCQlsYXN0UG9zID0gdWkucG9zaXRpb25bIHNpZGUgXQorCisJCQkJCSRSLmFkZENsYXNzKCByZXNpemVyQ2xhc3MgKyIgIisgcmVzaXplclBhbmVDbGFzcyApOyAvLyBhZGQgZHJhZyBjbGFzc2VzCisJCQkJCWhlbHBlckNsYXNzZXNTZXQgPSBmYWxzZTsgLy8gcmVzZXQgbG9naWMgdmFyIC0gc2VlIGRyYWcoKQorCisJCQkJCS8vIERJU0FCTEUgVEVYVCBTRUxFQ1RJT04gKHByb2JhYmx5IGFscmVhZHkgZG9uZSBieSByZXNpemVyLm1vdXNlT3ZlcikKKwkJCQkJJCgnYm9keScpLmRpc2FibGVTZWxlY3Rpb24oKTsgCisKKwkJCQkJLy8gTUFTSyBQQU5FUyBDT05UQUlOSU5HIElGUkFNRVMsIEFQUExFVFMgT1IgT1RIRVIgVFJPVUJMRVNPTUUgRUxFTUVOVFMKKwkJCQkJc2hvd01hc2tzKCBtYXNrcyApOworCQkJCX0KKworCQkJLAlkcmFnOiBmdW5jdGlvbiAoZSwgdWkpIHsKKwkJCQkJaWYgKCFoZWxwZXJDbGFzc2VzU2V0KSB7IC8vIGNhbiBvbmx5IGFkZCBjbGFzc2VzIGFmdGVyIGNsb25lIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBET00KKwkJCQkJCS8vJCgiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpCisJCQkJCQl1aS5oZWxwZXIKKwkJCQkJCQkuYWRkQ2xhc3MoIGhlbHBlckNsYXNzICsiICIrIGhlbHBlclBhbmVDbGFzcyApIC8vIGFkZCBoZWxwZXIgY2xhc3NlcworCQkJCQkJCS5jc3MoeyByaWdodDogImF1dG8iLCBib3R0b206ICJhdXRvIiB9KQkvLyBmaXggZGlyPSJydGwiIGlzc3VlCisJCQkJCQkJLmNoaWxkcmVuKCkuY3NzKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikJLy8gaGlkZSB0b2dnbGVyIGluc2lkZSBkcmFnZ2VkIHJlc2l6ZXItYmFyCisJCQkJCQk7CisJCQkJCQloZWxwZXJDbGFzc2VzU2V0ID0gdHJ1ZTsKKwkJCQkJCS8vIGRyYWdnYWJsZSBidWchPyBSRS1TRVQgekluZGV4IHRvIHByZXZlbnQgRS9XIHJlc2l6ZS1iYXIgc2hvd2luZyB0aHJvdWdoIE4vUyBwYW5lIQorCQkJCQkJaWYgKHMuaXNTbGlkaW5nKSAkUHNbcGFuZV0uY3NzKCJ6SW5kZXgiLCB6LnBhbmVfc2xpZGluZyk7CisJCQkJCX0KKwkJCQkJLy8gQ09OVEFJTiBSRVNJWkVSLUJBUiBUTyBSRVNJWklORyBMSU1JVFMKKwkJCQkJdmFyIGxpbWl0ID0gMDsKKwkJCQkJaWYgKHVpLnBvc2l0aW9uW3NpZGVdIDwgci5taW4pIHsKKwkJCQkJCXVpLnBvc2l0aW9uW3NpZGVdID0gci5taW47CisJCQkJCQlsaW1pdCA9IC0xOworCQkJCQl9CisJCQkJCWVsc2UgaWYgKHVpLnBvc2l0aW9uW3NpZGVdID4gci5tYXgpIHsKKwkJCQkJCXVpLnBvc2l0aW9uW3NpZGVdID0gci5tYXg7CisJCQkJCQlsaW1pdCA9IDE7CisJCQkJCX0KKwkJCQkJLy8gQUREL1JFTU9WRSBkcmFnZ2luZy1saW1pdCBDTEFTUworCQkJCQlpZiAobGltaXQpIHsKKwkJCQkJCXVpLmhlbHBlci5hZGRDbGFzcyggaGVscGVyTGltaXRDbGFzcyArIiAiKyBoZWxwZXJQYW5lTGltaXRDbGFzcyApOyAvLyBhdCBkcmFnZ2luZy1saW1pdAorCQkJCQkJd2luZG93LmRlZmF1bHRTdGF0dXMgPSAobGltaXQ+MCAmJiBwYW5lLm1hdGNoKC8obm9ydGh8d2VzdCkvKSkgfHwgKGxpbWl0PDAgJiYgcGFuZS5tYXRjaCgvKHNvdXRofGVhc3QpLykpID8gby50aXBzLm1heFNpemVXYXJuaW5nIDogby50aXBzLm1pblNpemVXYXJuaW5nOworCQkJCQl9CisJCQkJCWVsc2UgeworCQkJCQkJdWkuaGVscGVyLnJlbW92ZUNsYXNzKCBoZWxwZXJMaW1pdENsYXNzICsiICIrIGhlbHBlclBhbmVMaW1pdENsYXNzICk7IC8vIG5vdCBhdCBkcmFnZ2luZy1saW1pdAorCQkJCQkJd2luZG93LmRlZmF1bHRTdGF0dXMgPSAiIjsKKwkJCQkJfQorCQkJCQkvLyBEWU5BTUlDQUxMWSBSRVNJWkUgUEFORVMgSUYgT1BUSU9OIEVOQUJMRUQKKwkJCQkJLy8gd29uJ3QgdHJpZ2dlciB1bmxlc3MgcmVzaXplciBoYXMgYWN0dWFsbHkgbW92ZWQhCisJCQkJCWlmIChsaXZlICYmIE1hdGguYWJzKHVpLnBvc2l0aW9uW3NpZGVdIC0gbGFzdFBvcykgPj0gby5saXZlUmVzaXppbmdUb2xlcmFuY2UpIHsKKwkJCQkJCWxhc3RQb3MgPSB1aS5wb3NpdGlvbltzaWRlXTsKKwkJCQkJCXJlc2l6ZVBhbmVzKGUsIHVpLCBwYW5lKQorCQkJCQl9CisJCQkJfQorCisJCQksCXN0b3A6IGZ1bmN0aW9uIChlLCB1aSkgeworCQkJCQkkKCdib2R5JykuZW5hYmxlU2VsZWN0aW9uKCk7IC8vIFJFLUVOQUJMRSBURVhUIFNFTEVDVElPTgorCQkJCQl3aW5kb3cuZGVmYXVsdFN0YXR1cyA9ICIiOyAvLyBjbGVhciAncmVzaXppbmcgbGltaXQnIG1lc3NhZ2UgZnJvbSBzdGF0dXNiYXIKKwkJCQkJJFIucmVtb3ZlQ2xhc3MoIHJlc2l6ZXJDbGFzcyArIiAiKyByZXNpemVyUGFuZUNsYXNzICk7IC8vIHJlbW92ZSBkcmFnIGNsYXNzZXMgZnJvbSBSZXNpemVyCisJCQkJCXMuaXNSZXNpemluZyA9IGZhbHNlOworCQkJCQlyZXNpemVQYW5lcyhlLCB1aSwgcGFuZSwgdHJ1ZSwgbWFza3MpOyAvLyB0cnVlID0gcmVzaXppbmdEb25lCisJCQkJfQorCisJCQl9KTsKKwkJfSk7CisKKwkJLyoqCisJCSogcmVzaXplUGFuZXMKKwkJKgorCQkqIFN1Yi1yb3V0aW5lIGNhbGxlZCBmcm9tIHN0b3AoKSAtIGFuZCBkcmFnKCkgaWYgbGl2ZVBhbmVSZXNpemluZworCQkqCisJCSogQHBhcmFtIHshT2JqZWN0fQkJZXZ0CisJCSogQHBhcmFtIHshT2JqZWN0fQkJdWkKKwkJKiBAcGFyYW0ge3N0cmluZ30JCXBhbmUKKwkJKiBAcGFyYW0ge2Jvb2xlYW49fQkJW3Jlc2l6aW5nRG9uZT1mYWxzZV0KKwkJKi8KKwkJdmFyIHJlc2l6ZVBhbmVzID0gZnVuY3Rpb24gKGV2dCwgdWksIHBhbmUsIHJlc2l6aW5nRG9uZSwgbWFza3MpIHsKKwkJCXZhcglkcmFnUG9zCT0gdWkucG9zaXRpb24KKwkJCSwJYwkJPSBfY1twYW5lXQorCQkJLAlvCQk9IG9wdGlvbnNbcGFuZV0KKwkJCSwJcwkJPSBzdGF0ZVtwYW5lXQorCQkJLAlyZXNpemVyUG9zCisJCQk7CisJCQlzd2l0Y2ggKHBhbmUpIHsKKwkJCQljYXNlICJub3J0aCI6CXJlc2l6ZXJQb3MgPSBkcmFnUG9zLnRvcDsgYnJlYWs7CisJCQkJY2FzZSAid2VzdCI6CXJlc2l6ZXJQb3MgPSBkcmFnUG9zLmxlZnQ7IGJyZWFrOworCQkJCWNhc2UgInNvdXRoIjoJcmVzaXplclBvcyA9IHNDLm9mZnNldEhlaWdodCAtIGRyYWdQb3MudG9wICAtIG8uc3BhY2luZ19vcGVuOyBicmVhazsKKwkJCQljYXNlICJlYXN0IjoJcmVzaXplclBvcyA9IHNDLm9mZnNldFdpZHRoICAtIGRyYWdQb3MubGVmdCAtIG8uc3BhY2luZ19vcGVuOyBicmVhazsKKwkJCX07CisJCQkvLyByZW1vdmUgY29udGFpbmVyIG1hcmdpbiBmcm9tIHJlc2l6ZXIgcG9zaXRpb24gdG8gZ2V0IHRoZSBwYW5lIHNpemUKKwkJCXZhciBuZXdTaXplID0gcmVzaXplclBvcyAtIHNDWyJpbnNldCIrIGMuc2lkZV07CisKKwkJCS8vIERpc2FibGUgT1IgUmVzaXplIE1hc2socykgY3JlYXRlZCBpbiBkcmFnLnN0YXJ0CisJCQlpZiAoIXJlc2l6aW5nRG9uZSkgeworCQkJCS8vIGVuc3VyZSB3ZSBtZWV0IGxpdmVSZXNpemluZ1RvbGVyYW5jZSBjcml0ZXJpYQorCQkJCWlmIChNYXRoLmFicyhuZXdTaXplIC0gcy5zaXplKSA8IG8ubGl2ZVJlc2l6aW5nVG9sZXJhbmNlKQorCQkJCQlyZXR1cm47IC8vIFNLSVAgcmVzaXplIHRoaXMgdGltZQorCQkJCS8vIHJlc2l6ZSB0aGUgcGFuZQorCQkJCW1hbnVhbFNpemVQYW5lKHBhbmUsIG5ld1NpemUsIGZhbHNlLCB0cnVlKTsgLy8gdHJ1ZSA9IG5vQW5pbWF0aW9uCisJCQkJc2l6ZU1hc2tzKCk7IC8vIHJlc2l6ZSBhbGwgdmlzaWJsZSBtYXNrcworCQkJfQorCQkJZWxzZSB7IC8vIHJlc2l6aW5nRG9uZQorCQkJCS8vIG9uZHJhZ19lbmQgY2FsbGJhY2sKKwkJCQlpZiAoZmFsc2UgIT09IF9ydW5DYWxsYmFja3MoIm9uZHJhZ19lbmQiLCBwYW5lKSkKKwkJCQkJbWFudWFsU2l6ZVBhbmUocGFuZSwgbmV3U2l6ZSwgZmFsc2UsIHRydWUpOyAvLyB0cnVlID0gbm9BbmltYXRpb24KKwkJCQloaWRlTWFza3MoKTsgLy8gaGlkZSBhbGwgbWFza3MsIHdoaWNoIGluY2x1ZGUgcGFuZXMgd2l0aCAnY29udGVudC9pZnJhbWUtbWFza3MnCisJCQkJaWYgKHMuaXNTbGlkaW5nICYmIG1hc2tzKSAvLyBSRS1TSE9XIG9ubHkgJ29iamVjdC1tYXNrcycgc28gb2JqZWN0cyB3b24ndCBzaG93IHRocm91Z2ggc2xpZGluZyBwYW5lCisJCQkJCXNob3dNYXNrcyggbWFza3MsIHRydWUgKTsgLy8gdHJ1ZSA9IG9ubHlGb3JPYmplY3RzCisJCQl9CisJCX07CisJfQorCisJLyoqCisJICoJc2l6ZU1hc2sKKwkgKgorCSAqCU5lZWRlZCB0byBvdmVybGF5IGEgRElWIG92ZXIgYW4gSUZSQU1FLXBhbmUgYmVjYXVzZSBtYXNrIENBTk5PVCBiZSAqaW5zaWRlKiB0aGUgcGFuZQorCSAqCUNhbGxlZCB3aGVuIG1hc2sgY3JlYXRlZCwgYW5kIGR1cmluZyBsaXZlUGFuZVJlc2l6aW5nCisJICovCissCXNpemVNYXNrID0gZnVuY3Rpb24gKCkgeworCQl2YXIgJE0JCT0gJCh0aGlzKQorCQksCXBhbmUJPSAkTS5kYXRhKCJsYXlvdXRNYXNrIikgLy8gZWc6ICJ3ZXN0IgorCQksCXMJCT0gc3RhdGVbcGFuZV0KKwkJOworCQkvLyBvbmx5IG1hc2tzIG92ZXIgYW4gSUZSQU1FLXBhbmUgbmVlZCBtYW51YWwgcmVzaXppbmcKKwkJaWYgKHMudGFnTmFtZSA9PSAiSUZSQU1FIiAmJiBzLmlzVmlzaWJsZSkgLy8gbm8gbmVlZCB0byBtYXNrIGNsb3NlZC9oaWRkZW4gcGFuZXMKKwkJCSRNLmNzcyh7CisJCQkJdG9wOglzLm9mZnNldFRvcAorCQkJLAlsZWZ0OglzLm9mZnNldExlZnQKKwkJCSwJd2lkdGg6CXMub3V0ZXJXaWR0aAorCQkJLAloZWlnaHQ6CXMub3V0ZXJIZWlnaHQKKwkJCX0pOworCQkvKiBBTFQgTWV0aG9kLi4uCisJCXZhciAkUCA9ICRQc1twYW5lXTsKKwkJJE0uY3NzKCAkUC5wb3NpdGlvbigpICkuY3NzKHsgd2lkdGg6ICRQWzBdLm9mZnNldFdpZHRoLCBoZWlnaHQ6ICRQWzBdLm9mZnNldEhlaWdodCB9KTsKKwkJKi8KKwl9CissCXNpemVNYXNrcyA9IGZ1bmN0aW9uICgpIHsKKwkJJE1zLmVhY2goIHNpemVNYXNrICk7IC8vIHJlc2l6ZSBhbGwgJ3Zpc2libGUnIG1hc2tzCisJfQorCissCXNob3dNYXNrcyA9IGZ1bmN0aW9uIChwYW5lcywgb25seUZvck9iamVjdHMpIHsKKwkJdmFyIGEJPSBwYW5lcyA/IHBhbmVzLnNwbGl0KCIsIikgOiAkLmxheW91dC5jb25maWcuYWxsUGFuZXMKKwkJLAl6CT0gb3B0aW9ucy56SW5kZXhlcworCQksCW8sIHM7CisJCSQuZWFjaChhLCBmdW5jdGlvbihpLHApeworCQkJcyA9IHN0YXRlW3BdOworCQkJbyA9IG9wdGlvbnNbcF07CisJCQlpZiAocy5pc1Zpc2libGUgJiYgKCAoIW9ubHlGb3JPYmplY3RzICYmIG8ubWFza0NvbnRlbnRzKSB8fCBvLm1hc2tPYmplY3RzICkpIHsKKwkJCQlnZXRNYXNrcyhwKS5lYWNoKGZ1bmN0aW9uKCl7CisJCQkJCXNpemVNYXNrLmNhbGwodGhpcyk7CisJCQkJCXRoaXMuc3R5bGUuekluZGV4ID0gcy5pc1NsaWRpbmcgPyB6LnBhbmVfc2xpZGluZysxIDogei5wYW5lX25vcm1hbCsxCisJCQkJCXRoaXMuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisJCQkJfSk7CisJCQl9CisJCX0pOworCX0KKworLAloaWRlTWFza3MgPSBmdW5jdGlvbiAoKSB7CisJCS8vIGVuc3VyZSBubyBwYW5lIGlzIHJlc2l6aW5nIC0gY291bGQgYmUgYSB0aW1pbmcgaXNzdWUKKwkJdmFyIHNraXA7CisJCSQuZWFjaCggJC5sYXlvdXQuY29uZmlnLmJvcmRlclBhbmVzLCBmdW5jdGlvbihpLHApeworCQkJaWYgKHN0YXRlW3BdLmlzUmVzaXppbmcpIHsKKwkJCQlza2lwID0gdHJ1ZTsKKwkJCQlyZXR1cm4gZmFsc2U7IC8vIEJSRUFLCisJCQl9CisJCX0pOworCQlpZiAoIXNraXApCisJCQkkTXMuaGlkZSgpOyAvLyBoaWRlIEFMTCBtYXNrcworCX0KKworLAlnZXRNYXNrcyA9IGZ1bmN0aW9uIChwYW5lKSB7CisJCXZhciAkTWFza3MJPSAkKFtdKQorCQksCSRNLCBpID0gMCwgYyA9ICRNcy5sZW5ndGgKKwkJOworCQlmb3IgKDsgaTxjOyBpKyspIHsKKwkJCSRNID0gJE1zLmVxKGkpOworCQkJaWYgKCRNLmRhdGEoImxheW91dE1hc2siKSA9PT0gcGFuZSkKKwkJCQkkTWFza3MgPSAkTWFza3MuYWRkKCAkTSApOworCQl9CisJCWlmICgkTWFza3MubGVuZ3RoKQorCQkJcmV0dXJuICRNYXNrczsKKwkJZWxzZQorCQkJcmV0dXJuIGNyZWF0ZU1hc2tzKHBhbmUpOworCX0KKworCS8qKgorCSAqCWNyZWF0ZU1hc2tzCisJICoKKwkgKglHZW5lcmF0ZXMgYm90aCBESVYgKEFMV0FZUyB1c2VkKSBhbmQgSUZSQU1FIChvcHRpb25hbCkgZWxlbWVudHMgYXMgbWFza3MKKwkgKglBbiBJRlJBTUUgbWFzayBpcyBjcmVhdGVkICp1bmRlciogdGhlIERJViB3aGVuIG1hc2tPYmplY3RzPXRydWUsIGJlY2F1c2UgYSBESVYgY2Fubm90IG1hc2sgYW4gYXBwbGV0CisJICovCissCWNyZWF0ZU1hc2tzID0gZnVuY3Rpb24gKHBhbmUpIHsKKwkJdmFyCisJCQkkUAkJPSAkUHNbcGFuZV0KKwkJLAlzCQk9IHN0YXRlW3BhbmVdCisJCSwJbwkJPSBvcHRpb25zW3BhbmVdCisJCSwJegkJPSBvcHRpb25zLnpJbmRleGVzCisJCS8vLAlvYmpNYXNrCT0gby5tYXNrT2JqZWN0cyAmJiBzLnRhZ05hbWUgIT0gIklGUkFNRSIgLy8gY2hlY2sgZm9yIG9wdGlvbgorCQksCSRNYXNrcwk9ICQoW10pCisJCSwJaXNJZnJhbWUsIGVsLCAkTSwgY3NzLCBpCisJCTsKKwkJaWYgKCFvLm1hc2tDb250ZW50cyAmJiAhby5tYXNrT2JqZWN0cykgcmV0dXJuICRNYXNrczsKKwkJLy8gaWYgby5tYXNrT2JqZWN0cz10cnVlLCB0aGVuIGxvb3AgVFdJQ0UgdG8gY3JlYXRlIEJPVEgga2luZHMgb2YgbWFzaywgZWxzZSBvbmx5IGNyZWF0ZSBhIERJVgorCQlmb3IgKGk9MDsgaSA8IChvLm1hc2tPYmplY3RzID8gMiA6IDEpOyBpKyspIHsKKwkJCWlzSWZyYW1lID0gby5tYXNrT2JqZWN0cyAmJiBpPT0wOworCQkJZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBpc0lmcmFtZSA/ICJpZnJhbWUiIDogImRpdiIgKTsKKwkJCSRNID0gJChlbCkuZGF0YSgibGF5b3V0TWFzayIsIHBhbmUpOyAvLyBhZGQgZGF0YSB0byByZWxhdGUgbWFzayB0byBwYW5lCisJCQllbC5jbGFzc05hbWUgPSAidWktbGF5b3V0LW1hc2sgdWktbGF5b3V0LW1hc2stIisgcGFuZTsgLy8gZm9yIHVzZXIgc3R5bGluZworCQkJY3NzID0gZWwuc3R5bGU7CisJCQkvLyBzdHlsZXMgY29tbW9uIHRvIGJvdGggRElWcyBhbmQgSUZSQU1FUworCQkJY3NzLmRpc3BsYXkJCT0gImJsb2NrIjsKKwkJCWNzcy5wb3NpdGlvbgk9ICJhYnNvbHV0ZSI7CisJCQlpZiAoaXNJZnJhbWUpIHsgLy8gSUZSQU1FLW9ubHkgcHJvcHMKKwkJCQllbC5mcmFtZWJvcmRlciA9IDA7CisJCQkJZWwuc3JjCQk9ICJhYm91dDpibGFuayI7CisJCQkJY3NzLm9wYWNpdHkJPSAwOworCQkJCWNzcy5maWx0ZXIJPSAiQWxwaGEoT3BhY2l0eT0nMCcpIjsKKwkJCQljc3MuYm9yZGVyCT0gMDsKKwkJCX0KKwkJCS8vIGlmIHBhbmUgaXMgYW4gSUZSQU1FLCB0aGVuIG11c3QgbWFzayB0aGUgcGFuZSBpdHNlbGYKKwkJCWlmIChzLnRhZ05hbWUgPT0gIklGUkFNRSIpIHsKKwkJCQkvLyBOT1RFIHNpemluZyBkb25lIGJ5IGEgc3Vicm91dGluZSBzbyBjYW4gYmUgY2FsbGVkIGR1cmluZyBsaXZlLXJlc2l6aW5nCisJCQkJY3NzLnpJbmRleAk9IHoucGFuZV9ub3JtYWwrMTsgLy8gMS1oaWdoZXIgdGhhbiBwYW5lCisJCQkJJE4uYXBwZW5kKCBlbCApOyAvLyBhcHBlbmQgdG8gTEFZT1VUIENPTlRBSU5FUgorCQkJfQorCQkJLy8gb3RoZXJ3aXNlIHB1dCBtYXNrcyAqaW5zaWRlIHRoZSBwYW5lKiB0byBtYXNrIGl0cyBjb250ZW50cworCQkJZWxzZSB7CisJCQkJJE0uYWRkQ2xhc3MoInVpLWxheW91dC1tYXNrLWluc2lkZS1wYW5lIik7CisJCQkJY3NzLnpJbmRleAk9IG8ubWFza1ppbmRleCB8fCB6LmNvbnRlbnRfbWFzazsgLy8gdXN1YWxseSAxLCBidXQgY3VzdG9taXphYmxlCisJCQkJY3NzLnRvcAkJPSAwOworCQkJCWNzcy5sZWZ0CT0gMDsKKwkJCQljc3Mud2lkdGgJPSAiMTAwJSI7CisJCQkJY3NzLmhlaWdodAk9ICIxMDAlIjsKKwkJCQkkUC5hcHBlbmQoIGVsICk7IC8vIGFwcGVuZCBJTlNJREUgcGFuZSBlbGVtZW50CisJCQl9CisJCQkvLyBhZGQgdG8gcmV0dXJuIG9iamVjdAorCQkJJE1hc2tzID0gJE1hc2tzLmFkZCggZWwgKTsKKwkJCS8vIGFkZCBNYXNrIHRvIGNhY2hlZCBhcnJheSBzbyBjYW4gYmUgcmVzaXplZCAmIHJldXNlZAorCQkJJE1zID0gJE1zLmFkZCggZWwgKTsKKwkJfQorCQlyZXR1cm4gJE1hc2tzOworCX0KKworCisJLyoqCisJKiBEZXN0cm95IHRoaXMgbGF5b3V0IGFuZCByZXNldCBhbGwgZWxlbWVudHMKKwkqCisJKiBAcGFyYW0ge2Jvb2xlYW49fQlbZGVzdHJveUNoaWxkcmVuPWZhbHNlXQkJRGVzdG9yeSBDaGlsZC1MYXlvdXRzIGZpcnN0PworCSovCissCWRlc3Ryb3kgPSBmdW5jdGlvbiAoZXZ0X29yX2Rlc3Ryb3lDaGlsZHJlbiwgZGVzdHJveUNoaWxkcmVuKSB7CisJCS8vIFVOQklORCBsYXlvdXQgZXZlbnRzIGFuZCByZW1vdmUgZ2xvYmFsIG9iamVjdAorCQkkKHdpbmRvdykudW5iaW5kKCIuIisgc0lEKTsJCS8vIHJlc2l6ZSAmIHVubG9hZAorCQkkKGRvY3VtZW50KS51bmJpbmQoIi4iKyBzSUQpOwkvLyBrZXlEb3duIChob3RrZXlzKQorCisJCWlmICh0eXBlb2YgZXZ0X29yX2Rlc3Ryb3lDaGlsZHJlbiA9PT0gIm9iamVjdCIpCisJCQkvLyBzdG9wUHJvcGFnYXRpb24gaWYgY2FsbGVkIGJ5IHRyaWdnZXIoImxheW91dGRlc3Ryb3kiKSAtIHVzZSBldnRQYW5lIHV0aWxpdHkgCisJCQlldnRQYW5lKGV2dF9vcl9kZXN0cm95Q2hpbGRyZW4pOworCQllbHNlIC8vIG5vIGV2ZW50LCBzbyB0cmFuc2ZlciAxc3QgcGFyYW0gdG8gZGVzdHJveUNoaWxkcmVuIHBhcmFtCisJCQlkZXN0cm95Q2hpbGRyZW4gPSBldnRfb3JfZGVzdHJveUNoaWxkcmVuOworCisJCS8vIG5lZWQgdG8gbG9vayBmb3IgcGFyZW50IGxheW91dCBCRUZPUkUgd2UgcmVtb3ZlIHRoZSBjb250YWluZXIgZGF0YSwgZWxzZSBza2lwcyBhIGxldmVsCisJCS8vdmFyIHBhcmVudFBhbmUgPSBJbnN0YW5jZS5oYXNQYXJlbnRMYXlvdXQgPyAkLmxheW91dC5nZXRQYXJlbnRQYW5lSW5zdGFuY2UoICROICkgOiBudWxsOworCisJCS8vIHJlc2V0IGxheW91dC1jb250YWluZXIKKwkJJE4JLmNsZWFyUXVldWUoKQorCQkJLnJlbW92ZURhdGEoImxheW91dCIpCisJCQkucmVtb3ZlRGF0YSgibGF5b3V0Q29udGFpbmVyIikKKwkJCS5yZW1vdmVDbGFzcyhvcHRpb25zLmNvbnRhaW5lckNsYXNzKQorCQkJLnVuYmluZCgiLiIrIHNJRCkgLy8gcmVtb3ZlIEFMTCBMYXlvdXQgZXZlbnRzCisJCTsKKworCQkvLyByZW1vdmUgYWxsIG1hc2sgZWxlbWVudHMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZAorCQkkTXMucmVtb3ZlKCk7CisKKwkJLy8gbG9vcCBhbGwgcGFuZXMgdG8gcmVtb3ZlIGxheW91dCBjbGFzc2VzLCBhdHRyaWJ1dGVzIGFuZCBiaW5kaW5ncworCQkkLmVhY2goX2MuYWxsUGFuZXMsIGZ1bmN0aW9uIChpLCBwYW5lKSB7CisJCQlyZW1vdmVQYW5lKCBwYW5lLCBmYWxzZSwgdHJ1ZSwgZGVzdHJveUNoaWxkcmVuICk7IC8vIHRydWUgPSBza2lwUmVzaXplCisJCX0pOworCisJCS8vIGRvIE5PVCByZXNldCBjb250YWluZXIgQ1NTIGlmIGlzIGEgJ3BhbmUnIChvciAnY29udGVudCcpIGluIGFuIG91dGVyLWxheW91dCAtIGllLCBUSElTIGxheW91dCBpcyAnbmVzdGVkJworCQl2YXIgY3NzID0gImxheW91dENTUyI7CisJCWlmICgkTi5kYXRhKGNzcykgJiYgISROLmRhdGEoImxheW91dFJvbGUiKSkgLy8gUkVTRVQgQ1NTCisJCQkkTi5jc3MoICROLmRhdGEoY3NzKSApLnJlbW92ZURhdGEoY3NzKTsKKworCQkvLyBmb3IgZnVsbC1wYWdlIGxheW91dHMsIGFsc28gcmVzZXQgdGhlIDxIVE1MPiBDU1MKKwkJaWYgKHNDLnRhZ05hbWUgPT09ICJCT0RZIiAmJiAoJE4gPSAkKCJodG1sIikpLmRhdGEoY3NzKSkgLy8gUkVTRVQgPEhUTUw+IENTUworCQkJJE4uY3NzKCAkTi5kYXRhKGNzcykgKS5yZW1vdmVEYXRhKGNzcyk7CisKKwkJLy8gdHJpZ2dlciBwbHVnaW5zIGZvciB0aGlzIGxheW91dCwgaWYgdGhlcmUgYXJlIGFueQorCQlydW5QbHVnaW5DYWxsYmFja3MoIEluc3RhbmNlLCAkLmxheW91dC5vbkRlc3Ryb3kgKTsKKworCQkvLyB0cmlnZ2VyIHN0YXRlLW1hbmFnZW1lbnQgYW5kIG9udW5sb2FkIGNhbGxiYWNrCisJCXVubG9hZCgpOworCisJCS8vIGNsZWFyIHRoZSBJbnN0YW5jZSBvZiBldmVyeXRoaW5nIGV4Y2VwdCBmb3IgY29udGFpbmVyICYgb3B0aW9ucyAoc28gY291bGQgcmVjcmVhdGUpCisJCS8vIFJFLUNSRUFURTogbXlMYXlvdXQgPSBteUxheW91dC5jb250YWluZXIubGF5b3V0KCBteUxheW91dC5vcHRpb25zICk7CisJCWZvciAobiBpbiBJbnN0YW5jZSkKKwkJCWlmICghbi5tYXRjaCgvXihjb250YWluZXJ8b3B0aW9ucykkLykpIGRlbGV0ZSBJbnN0YW5jZVsgbiBdOworCQkvLyBhZGQgYSAnZGVzdHJveWVkJyBmbGFnIHRvIG1ha2UgaXQgZWFzeSB0byBjaGVjaworCQlJbnN0YW5jZS5kZXN0cm95ZWQgPSB0cnVlOworCisJCS8vIGlmIHRoaXMgaXMgYSBjaGlsZCBsYXlvdXQsIENMRUFSIHRoZSBjaGlsZC1wb2ludGVyIGluIHRoZSBwYXJlbnQKKwkJLyogZm9yIG5vdyB0aGUgcG9pbnRlciBSRU1BSU5TLCBidXQgd2l0aCBvbmx5IGNvbnRhaW5lciwgb3B0aW9ucyBhbmQgZGVzdHJveWVkIGtleXMKKwkJaWYgKHBhcmVudFBhbmUpIHsKKwkJCXZhciBsYXlvdXQgPSBwYXJlbnRQYW5lLnBhbmUuZGF0YSgicGFyZW50TGF5b3V0Iik7CisJCQlwYXJlbnRQYW5lLmNoaWxkID0gbGF5b3V0LmNoaWxkcmVuWyBwYXJlbnRQYW5lLm5hbWUgXSA9IG51bGw7CisJCX0KKwkJKi8KKworCQlyZXR1cm4gSW5zdGFuY2U7IC8vIGZvciBjb2RpbmcgY29udmVuaWVuY2UKKwl9CisKKwkvKioKKwkqIFJlbW92ZSBhIHBhbmUgZnJvbSB0aGUgbGF5b3V0IC0gc3Vicm91dGluZSBvZiBkZXN0cm95KCkKKwkqCisJKiBAc2VlICBkZXN0cm95KCkKKwkqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0JZXZ0X29yX3BhbmUJCQlUaGUgcGFuZSB0byBwcm9jZXNzCisJKiBAcGFyYW0ge2Jvb2xlYW49fQkJCVtyZW1vdmU9ZmFsc2VdCQlSZW1vdmUgdGhlIERPTSBlbGVtZW50PworCSogQHBhcmFtIHtib29sZWFuPX0JCQlbc2tpcFJlc2l6ZT1mYWxzZV0JU2tpcCBjYWxsaW5nIHJlc2l6ZUFsbCgpPworCSogQHBhcmFtIHtib29sZWFuPX0JCQlbZGVzdHJveUNoaWxkPXRydWVdCURlc3Ryb3kgQ2hpbGQtbGF5b3V0cz8gSWYgbm90IHBhc3NlZCwgb2JleXMgb3B0aW9ucyBzZXR0aW5nCisJKi8KKywJcmVtb3ZlUGFuZSA9IGZ1bmN0aW9uIChldnRfb3JfcGFuZSwgcmVtb3ZlLCBza2lwUmVzaXplLCBkZXN0cm95Q2hpbGQpIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJdmFyCXBhbmUgPSBldnRQYW5lLmNhbGwodGhpcywgZXZ0X29yX3BhbmUpCisJCSwJJFAJPSAkUHNbcGFuZV0KKwkJLAkkQwk9ICRDc1twYW5lXQorCQksCSRSCT0gJFJzW3BhbmVdCisJCSwJJFQJPSAkVHNbcGFuZV0KKwkJOworCQkvLyBOT1RFOiBlbGVtZW50cyBjYW4gc3RpbGwgZXhpc3QgZXZlbiBhZnRlciByZW1vdmUoKQorCQkvLwkJc28gY2hlY2sgZm9yIG1pc3NpbmcgZGF0YSgpLCB3aGljaCBpcyBjbGVhcmVkIGJ5IHJlbW92ZWQoKQorCQlpZiAoJFAgJiYgJC5pc0VtcHR5T2JqZWN0KCAkUC5kYXRhKCkgKSkgJFAgPSBmYWxzZTsKKwkJaWYgKCRDICYmICQuaXNFbXB0eU9iamVjdCggJEMuZGF0YSgpICkpICRDID0gZmFsc2U7CisJCWlmICgkUiAmJiAkLmlzRW1wdHlPYmplY3QoICRSLmRhdGEoKSApKSAkUiA9IGZhbHNlOworCQlpZiAoJFQgJiYgJC5pc0VtcHR5T2JqZWN0KCAkVC5kYXRhKCkgKSkgJFQgPSBmYWxzZTsKKworCQlpZiAoJFApICRQLnN0b3AodHJ1ZSwgdHJ1ZSk7CisKKwkJLy8JY2hlY2sgZm9yIGEgY2hpbGQgbGF5b3V0CisJCXZhcglvCT0gb3B0aW9uc1twYW5lXQorCQksCXMJPSBzdGF0ZVtwYW5lXQorCQksCWQJPSAibGF5b3V0IgorCQksCWNzcwk9ICJsYXlvdXRDU1MiCisJCSwJY2hpbGQJPSBjaGlsZHJlbltwYW5lXSB8fCAoJFAgPyAkUC5kYXRhKGQpIDogMCkgfHwgKCRDID8gJEMuZGF0YShkKSA6IDApIHx8IG51bGwKKwkJLAlkZXN0cm95CT0gZGVzdHJveUNoaWxkICE9PSB1bmRlZmluZWQgPyBkZXN0cm95Q2hpbGQgOiBvLmRlc3Ryb3lDaGlsZExheW91dAorCQk7CisKKwkJLy8gRklSU1QgZGVzdHJveSB0aGUgY2hpbGQtbGF5b3V0KHMpCisJCWlmIChkZXN0cm95ICYmIGNoaWxkICYmICFjaGlsZC5kZXN0cm95ZWQpIHsKKwkJCWNoaWxkLmRlc3Ryb3kodHJ1ZSk7CS8vIHRlbGwgY2hpbGQtbGF5b3V0IHRvIGRlc3Ryb3kgQUxMIGl0cyBjaGlsZC1sYXlvdXRzIHRvbworCQkJaWYgKGNoaWxkLmRlc3Ryb3llZCkJLy8gZGVzdHJveSB3YXMgc3VjY2Vzc2Z1bAorCQkJCWNoaWxkID0gbnVsbDsJCS8vIGNsZWFyIHBvaW50ZXIgZm9yIGxvZ2ljIGJlbG93IAorCQl9CisKKwkJaWYgKCRQICYmIHJlbW92ZSAmJiAhY2hpbGQpCisJCQkkUC5yZW1vdmUoKTsKKwkJZWxzZSBpZiAoJFAgJiYgJFBbMF0pIHsKKwkJCS8vCWNyZWF0ZSBsaXN0IG9mIEFMTCBwYW5lLWNsYXNzZXMgdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQKKwkJCXZhcglyb290CT0gby5wYW5lQ2xhc3MgLy8gZGVmYXVsdD0idWktbGF5b3V0LXBhbmUiCisJCQksCXBSb290CT0gcm9vdCArIi0iKyBwYW5lIC8vIGVnOiAidWktbGF5b3V0LXBhbmUtd2VzdCIKKwkJCSwJX29wZW4JPSAiLW9wZW4iCisJCQksCV9zbGlkaW5nPSAiLXNsaWRpbmciCisJCQksCV9jbG9zZWQJPSAiLWNsb3NlZCIKKwkJCSwJY2xhc3Nlcwk9IFsJcm9vdCwgcm9vdCtfb3Blbiwgcm9vdCtfY2xvc2VkLCByb290K19zbGlkaW5nLAkJLy8gZ2VuZXJpYyBjbGFzc2VzCisJCQkJCQkJcFJvb3QsIHBSb290K19vcGVuLCBwUm9vdCtfY2xvc2VkLCBwUm9vdCtfc2xpZGluZyBdCS8vIHBhbmUtc3BlY2lmaWMgY2xhc3NlcworCQkJOworCQkJJC5tZXJnZShjbGFzc2VzLCBnZXRIb3ZlckNsYXNzZXMoJFAsIHRydWUpKTsgLy8gQUREIGhvdmVyLWNsYXNzZXMKKwkJCS8vIHJlbW92ZSBhbGwgTGF5b3V0IGNsYXNzZXMgZnJvbSBwYW5lLWVsZW1lbnQKKwkJCSRQCS5yZW1vdmVDbGFzcyggY2xhc3Nlcy5qb2luKCIgIikgKSAvLyByZW1vdmUgQUxMIHBhbmUtY2xhc3NlcworCQkJCS5yZW1vdmVEYXRhKCJwYXJlbnRMYXlvdXQiKQorCQkJCS5yZW1vdmVEYXRhKCJsYXlvdXRQYW5lIikKKwkJCQkucmVtb3ZlRGF0YSgibGF5b3V0Um9sZSIpCisJCQkJLnJlbW92ZURhdGEoImxheW91dEVkZ2UiKQorCQkJCS5yZW1vdmVEYXRhKCJhdXRvSGlkZGVuIikJLy8gaW4gY2FzZSBzZXQKKwkJCQkudW5iaW5kKCIuIisgc0lEKSAvLyByZW1vdmUgQUxMIExheW91dCBldmVudHMKKwkJCQkvLyBUT0RPOiByZW1vdmUgdGhlc2UgZXh0cmEgdW5iaW5kIGNvbW1hbmRzIHdoZW4galF1ZXJ5IGlzIGZpeGVkCisJCQkJLy8udW5iaW5kKCJtb3VzZWVudGVyIisgc0lEKQorCQkJCS8vLnVuYmluZCgibW91c2VsZWF2ZSIrIHNJRCkKKwkJCTsKKwkJCS8vIGRvIE5PVCByZXNldCBDU1MgaWYgdGhpcyBwYW5lL2NvbnRlbnQgaXMgU1RJTEwgdGhlIGNvbnRhaW5lciBvZiBhIG5lc3RlZCBsYXlvdXQhCisJCQkvLyB0aGUgbmVzdGVkIGxheW91dCB3aWxsIHJlc2V0IGl0cyAnY29udGFpbmVyJyBDU1Mgd2hlbi9pZiBpdCBpcyBkZXN0cm95ZWQKKwkJCWlmICgkQyAmJiAkQy5kYXRhKGQpKSB7CisJCQkJLy8gYSBjb250ZW50LWRpdiBtYXkgbm90IGhhdmUgYSBzcGVjaWZpYyB3aWR0aCwgc28gZ2l2ZSBpdCBvbmUgdG8gY29udGFpbiB0aGUgTGF5b3V0CisJCQkJJEMud2lkdGgoICRDLndpZHRoKCkgKTsKKwkJCQljaGlsZC5yZXNpemVBbGwoKTsgLy8gbm93IHJlc2l6ZSB0aGUgTGF5b3V0CisJCQl9CisJCQllbHNlIGlmICgkQykKKwkJCQkkQy5jc3MoICRDLmRhdGEoY3NzKSApLnJlbW92ZURhdGEoY3NzKS5yZW1vdmVEYXRhKCJsYXlvdXRSb2xlIik7CisJCQkvLyByZW1vdmUgcGFuZSBBRlRFUiBjb250ZW50IGluIGNhc2UgdGhlcmUgd2FzIGEgbmVzdGVkIGxheW91dAorCQkJaWYgKCEkUC5kYXRhKGQpKQorCQkJCSRQLmNzcyggJFAuZGF0YShjc3MpICkucmVtb3ZlRGF0YShjc3MpOworCQl9CisKKwkJLy8gUkVNT1ZFIHBhbmUgcmVzaXplciBhbmQgdG9nZ2xlciBlbGVtZW50cworCQlpZiAoJFQpICRULnJlbW92ZSgpOworCQlpZiAoJFIpICRSLnJlbW92ZSgpOworCisJCS8vIENMRUFSIGFsbCBwb2ludGVycyBhbmQgc3RhdGUgZGF0YQorCQlJbnN0YW5jZVtwYW5lXSA9ICRQc1twYW5lXSA9ICRDc1twYW5lXSA9ICRSc1twYW5lXSA9ICRUc1twYW5lXSA9IGNoaWxkcmVuW3BhbmVdID0gZmFsc2U7CisJCXMgPSB7IHJlbW92ZWQ6IHRydWUgfTsKKworCQlpZiAoIXNraXBSZXNpemUpCisJCQlyZXNpemVBbGwoKTsKKwl9CisKKworLyoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoJICAgQUNUSU9OIE1FVEhPRFMKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICovCisKKywJX2hpZGVQYW5lID0gZnVuY3Rpb24gKHBhbmUpIHsKKwkJdmFyICRQCT0gJFBzW3BhbmVdCisJCSwJbwk9IG9wdGlvbnNbcGFuZV0KKwkJLAlzCT0gJFBbMF0uc3R5bGUKKwkJOworCQlpZiAoby51c2VPZmZzY3JlZW5DbG9zZSkgeworCQkJaWYgKCEkUC5kYXRhKF9jLm9mZnNjcmVlblJlc2V0KSkKKwkJCQkkUC5kYXRhKF9jLm9mZnNjcmVlblJlc2V0LCB7IGxlZnQ6IHMubGVmdCwgcmlnaHQ6IHMucmlnaHQgfSk7CisJCQkkUC5jc3MoIF9jLm9mZnNjcmVlbkNTUyApOworCQl9CisJCWVsc2UKKwkJCSRQLmhpZGUoKS5yZW1vdmVEYXRhKF9jLm9mZnNjcmVlblJlc2V0KTsKKwl9CisKKywJX3Nob3dQYW5lID0gZnVuY3Rpb24gKHBhbmUpIHsKKwkJdmFyICRQCT0gJFBzW3BhbmVdCisJCSwJbwk9IG9wdGlvbnNbcGFuZV0KKwkJLAlvZmYJPSBfYy5vZmZzY3JlZW5DU1MKKwkJLAlvbGQJPSAkUC5kYXRhKF9jLm9mZnNjcmVlblJlc2V0KQorCQksCXMJPSAkUFswXS5zdHlsZQorCQk7CisJCSRQCS5zaG93KCkgLy8gQUxXQVlTIHNob3csIGp1c3QgaW4gY2FzZQorCQkJLnJlbW92ZURhdGEoX2Mub2Zmc2NyZWVuUmVzZXQpOworCQlpZiAoby51c2VPZmZzY3JlZW5DbG9zZSAmJiBvbGQpIHsKKwkJCWlmIChzLmxlZnQgPT0gb2ZmLmxlZnQpCisJCQkJcy5sZWZ0ID0gb2xkLmxlZnQ7CisJCQlpZiAocy5yaWdodCA9PSBvZmYucmlnaHQpCisJCQkJcy5yaWdodCA9IG9sZC5yaWdodDsKKwkJfQorCX0KKworCisJLyoqCisJKiBDb21wbGV0ZWx5ICdoaWRlcycgYSBwYW5lLCBpbmNsdWRpbmcgaXRzIHNwYWNpbmcgLSBhcyBpZiBpdCBkb2VzIG5vdCBleGlzdAorCSogVGhlIHBhbmUgaXMgbm90IGFjdHVhbGx5ICdyZW1vdmVkJyBmcm9tIHRoZSBzb3VyY2UsIHNvIGNhbiB1c2UgJ3Nob3cnIHRvIHVuLWhpZGUgaXQKKwkqCisJKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9CWV2dF9vcl9wYW5lCQkJVGhlIHBhbmUgYmVpbmcgaGlkZGVuLCBpZTogbm9ydGgsIHNvdXRoLCBlYXN0LCBvciB3ZXN0CisJKiBAcGFyYW0ge2Jvb2xlYW49fQkJCVtub0FuaW1hdGlvbj1mYWxzZV0JCisJKi8KKywJaGlkZSA9IGZ1bmN0aW9uIChldnRfb3JfcGFuZSwgbm9BbmltYXRpb24pIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJdmFyCXBhbmUgPSBldnRQYW5lLmNhbGwodGhpcywgZXZ0X29yX3BhbmUpCisJCSwJbwk9IG9wdGlvbnNbcGFuZV0KKwkJLAlzCT0gc3RhdGVbcGFuZV0KKwkJLAkkUAk9ICRQc1twYW5lXQorCQksCSRSCT0gJFJzW3BhbmVdCisJCTsKKwkJaWYgKCEkUCB8fCBzLmlzSGlkZGVuKSByZXR1cm47IC8vIHBhbmUgZG9lcyBub3QgZXhpc3QgT1IgaXMgYWxyZWFkeSBoaWRkZW4KKworCQkvLyBvbmhpZGVfc3RhcnQgY2FsbGJhY2sgLSB3aWxsIENBTkNFTCBoaWRlIGlmIHJldHVybnMgZmFsc2UKKwkJaWYgKHN0YXRlLmluaXRpYWxpemVkICYmIGZhbHNlID09PSBfcnVuQ2FsbGJhY2tzKCJvbmhpZGVfc3RhcnQiLCBwYW5lKSkgcmV0dXJuOworCisJCXMuaXNTbGlkaW5nID0gZmFsc2U7IC8vIGp1c3QgaW4gY2FzZQorCisJCS8vIG5vdyBoaWRlIHRoZSBlbGVtZW50cworCQlpZiAoJFIpICRSLmhpZGUoKTsgLy8gaGlkZSByZXNpemVyLWJhcgorCQlpZiAoIXN0YXRlLmluaXRpYWxpemVkIHx8IHMuaXNDbG9zZWQpIHsKKwkJCXMuaXNDbG9zZWQgPSB0cnVlOyAvLyB0byB0cmlnZ2VyIG9wZW4tYW5pbWF0aW9uIG9uIHNob3coKQorCQkJcy5pc0hpZGRlbiAgPSB0cnVlOworCQkJcy5pc1Zpc2libGUgPSBmYWxzZTsKKwkJCWlmICghc3RhdGUuaW5pdGlhbGl6ZWQpCisJCQkJX2hpZGVQYW5lKHBhbmUpOyAvLyBubyBhbmltYXRpb24gd2hlbiBsb2FkaW5nIHBhZ2UKKwkJCXNpemVNaWRQYW5lcyhfY1twYW5lXS5kaXIgPT09ICJob3J6IiA/ICIiIDogImNlbnRlciIpOworCQkJaWYgKHN0YXRlLmluaXRpYWxpemVkIHx8IG8udHJpZ2dlckV2ZW50c09uTG9hZCkKKwkJCQlfcnVuQ2FsbGJhY2tzKCJvbmhpZGVfZW5kIiwgcGFuZSk7CisJCX0KKwkJZWxzZSB7CisJCQlzLmlzSGlkaW5nID0gdHJ1ZTsgLy8gdXNlZCBieSBvbmNsb3NlCisJCQljbG9zZShwYW5lLCBmYWxzZSwgbm9BbmltYXRpb24pOyAvLyBhZGp1c3QgYWxsIHBhbmVzIHRvIGZpdAorCQl9CisJfQorCisJLyoqCisJKiBTaG93IGEgaGlkZGVuIHBhbmUgLSBzaG93IGFzICdjbG9zZWQnIGJ5IGRlZmF1bHQgdW5sZXNzIG9wZW5QYW5lID0gdHJ1ZQorCSoKKwkqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0JZXZ0X29yX3BhbmUJCQlUaGUgcGFuZSBiZWluZyBvcGVuZWQsIGllOiBub3J0aCwgc291dGgsIGVhc3QsIG9yIHdlc3QKKwkqIEBwYXJhbSB7Ym9vbGVhbj19CQkJW29wZW5QYW5lPWZhbHNlXQorCSogQHBhcmFtIHtib29sZWFuPX0JCQlbbm9BbmltYXRpb249ZmFsc2VdCisJKiBAcGFyYW0ge2Jvb2xlYW49fQkJCVtub0FsZXJ0PWZhbHNlXQorCSovCissCXNob3cgPSBmdW5jdGlvbiAoZXZ0X29yX3BhbmUsIG9wZW5QYW5lLCBub0FuaW1hdGlvbiwgbm9BbGVydCkgeworCQlpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgcmV0dXJuOworCQl2YXIJcGFuZSA9IGV2dFBhbmUuY2FsbCh0aGlzLCBldnRfb3JfcGFuZSkKKwkJLAlvCT0gb3B0aW9uc1twYW5lXQorCQksCXMJPSBzdGF0ZVtwYW5lXQorCQksCSRQCT0gJFBzW3BhbmVdCisJCSwJJFIJPSAkUnNbcGFuZV0KKwkJOworCQlpZiAoISRQIHx8ICFzLmlzSGlkZGVuKSByZXR1cm47IC8vIHBhbmUgZG9lcyBub3QgZXhpc3QgT1IgaXMgbm90IGhpZGRlbgorCisJCS8vIG9uc2hvd19zdGFydCBjYWxsYmFjayAtIHdpbGwgQ0FOQ0VMIHNob3cgaWYgcmV0dXJucyBmYWxzZQorCQlpZiAoZmFsc2UgPT09IF9ydW5DYWxsYmFja3MoIm9uc2hvd19zdGFydCIsIHBhbmUpKSByZXR1cm47CisKKwkJcy5pc1NsaWRpbmcgPSBmYWxzZTsgLy8ganVzdCBpbiBjYXNlCisJCXMuaXNTaG93aW5nID0gdHJ1ZTsgLy8gdXNlZCBieSBvbm9wZW4vb25jbG9zZQorCQkvL3MuaXNIaWRkZW4gID0gZmFsc2U7IC0gd2lsbCBiZSBzZXQgYnkgb3Blbi9jbG9zZSAtIGlmIG5vdCBjYW5jZWxsZWQKKworCQkvLyBub3cgc2hvdyB0aGUgZWxlbWVudHMKKwkJLy9pZiAoJFIpICRSLnNob3coKTsgLSB3aWxsIGJlIHNob3duIGJ5IG9wZW4vY2xvc2UKKwkJaWYgKG9wZW5QYW5lID09PSBmYWxzZSkKKwkJCWNsb3NlKHBhbmUsIHRydWUpOyAvLyB0cnVlID0gZm9yY2UKKwkJZWxzZQorCQkJb3BlbihwYW5lLCBmYWxzZSwgbm9BbmltYXRpb24sIG5vQWxlcnQpOyAvLyBhZGp1c3QgYWxsIHBhbmVzIHRvIGZpdAorCX0KKworCisJLyoqCisJKiBUb2dnbGVzIGEgcGFuZSBvcGVuL2Nsb3NlZCBieSBjYWxsaW5nIGVpdGhlciBvcGVuIG9yIGNsb3NlCisJKgorCSogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fQlldnRfb3JfcGFuZQkJVGhlIHBhbmUgYmVpbmcgdG9nZ2xlZCwgaWU6IG5vcnRoLCBzb3V0aCwgZWFzdCwgb3Igd2VzdAorCSogQHBhcmFtIHtib29sZWFuPX0JCQlbc2xpZGU9ZmFsc2VdCisJKi8KKywJdG9nZ2xlID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lLCBzbGlkZSkgeworCQlpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgcmV0dXJuOworCQl2YXIJZXZ0CQk9IGV2dE9iaihldnRfb3JfcGFuZSkKKwkJLAlwYW5lCT0gZXZ0UGFuZS5jYWxsKHRoaXMsIGV2dF9vcl9wYW5lKQorCQksCXMJCT0gc3RhdGVbcGFuZV0KKwkJOworCQlpZiAoZXZ0KSAvLyBjYWxsZWQgZnJvbSB0byAkUi5kYmxjbGljayBPUiB0cmlnZ2VyUGFuZUV2ZW50CisJCQlldnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CisJCWlmIChzLmlzSGlkZGVuKQorCQkJc2hvdyhwYW5lKTsgLy8gd2lsbCBjYWxsICdvcGVuJyBhZnRlciB1bmhpZGluZyBpdAorCQllbHNlIGlmIChzLmlzQ2xvc2VkKQorCQkJb3BlbihwYW5lLCAhIXNsaWRlKTsKKwkJZWxzZQorCQkJY2xvc2UocGFuZSk7CisJfQorCisKKwkvKioKKwkqIFV0aWxpdHkgbWV0aG9kIHVzZWQgZHVyaW5nIGluaXQgb3Igb3RoZXIgYXV0by1wcm9jZXNzZXMKKwkqCisJKiBAcGFyYW0ge3N0cmluZ30JcGFuZSAgIFRoZSBwYW5lIGJlaW5nIGNsb3NlZAorCSogQHBhcmFtIHtib29sZWFuPX0JW3NldEhhbmRsZXM9ZmFsc2VdCisJKi8KKywJX2Nsb3NlUGFuZSA9IGZ1bmN0aW9uIChwYW5lLCBzZXRIYW5kbGVzKSB7CisJCXZhcgorCQkJJFAJPSAkUHNbcGFuZV0KKwkJLAlzCT0gc3RhdGVbcGFuZV0KKwkJOworCQlfaGlkZVBhbmUocGFuZSk7CisJCXMuaXNDbG9zZWQgPSB0cnVlOworCQlzLmlzVmlzaWJsZSA9IGZhbHNlOworCQkvLyBVTlVTRUQ6IGlmIChzZXRIYW5kbGVzKSBzZXRBc0Nsb3NlZChwYW5lLCB0cnVlKTsgLy8gdHJ1ZSA9IGZvcmNlCisJfQorCisJLyoqCisJKiBDbG9zZSB0aGUgc3BlY2lmaWVkIHBhbmUgKGFuaW1hdGlvbiBvcHRpb25hbCksIGFuZCByZXNpemUgYWxsIG90aGVyIHBhbmVzIGFzIG5lZWRlZAorCSoKKwkqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0JZXZ0X29yX3BhbmUJCQlUaGUgcGFuZSBiZWluZyBjbG9zZWQsIGllOiBub3J0aCwgc291dGgsIGVhc3QsIG9yIHdlc3QKKwkqIEBwYXJhbSB7Ym9vbGVhbj19CQkJW2ZvcmNlPWZhbHNlXQorCSogQHBhcmFtIHtib29sZWFuPX0JCQlbbm9BbmltYXRpb249ZmFsc2VdCisJKiBAcGFyYW0ge2Jvb2xlYW49fQkJCVtza2lwQ2FsbGJhY2s9ZmFsc2VdCisJKi8KKywJY2xvc2UgPSBmdW5jdGlvbiAoZXZ0X29yX3BhbmUsIGZvcmNlLCBub0FuaW1hdGlvbiwgc2tpcENhbGxiYWNrKSB7CisJCXZhcglwYW5lID0gZXZ0UGFuZS5jYWxsKHRoaXMsIGV2dF9vcl9wYW5lKTsKKwkJLy8gaWYgcGFuZSBoYXMgYmVlbiBpbml0aWFsaXplZCwgYnV0IE5PVCB0aGUgY29tcGxldGUgbGF5b3V0LCBjbG9zZSBwYW5lIGluc3RhbnRseQorCQlpZiAoIXN0YXRlLmluaXRpYWxpemVkICYmICRQc1twYW5lXSkgeworCQkJX2Nsb3NlUGFuZShwYW5lKTsgLy8gSU5JVCBwYW5lIGFzIGNsb3NlZAorCQkJcmV0dXJuOworCQl9CisJCWlmICghaXNJbml0aWFsaXplZCgpKSByZXR1cm47CisKKwkJdmFyCisJCQkkUAk9ICRQc1twYW5lXQorCQksCSRSCT0gJFJzW3BhbmVdCisJCSwJJFQJPSAkVHNbcGFuZV0KKwkJLAlvCT0gb3B0aW9uc1twYW5lXQorCQksCXMJPSBzdGF0ZVtwYW5lXQorCQksCWMJPSBfY1twYW5lXQorCQksCWRvRlgsIGlzU2hvd2luZywgaXNIaWRpbmcsIHdhc1NsaWRpbmc7CisKKwkJLy8gUVVFVUUgaW4gY2FzZSBhbm90aGVyIGFjdGlvbi9hbmltYXRpb24gaXMgaW4gcHJvZ3Jlc3MKKwkJJE4ucXVldWUoZnVuY3Rpb24oIHF1ZXVlTmV4dCApeworCQorCQkJaWYgKCAhJFAKKwkJCXx8CSghby5jbG9zYWJsZSAmJiAhcy5pc1Nob3dpbmcgJiYgIXMuaXNIaWRpbmcpCS8vIGludmFsaWQgcmVxdWVzdCAvLyAoIW8ucmVzaXphYmxlICYmICFvLmNsb3NhYmxlKSA/Pz8KKwkJCXx8CSghZm9yY2UgJiYgcy5pc0Nsb3NlZCAmJiAhcy5pc1Nob3dpbmcpCQkJLy8gYWxyZWFkeSBjbG9zZWQKKwkJCSkgcmV0dXJuIHF1ZXVlTmV4dCgpOworCisJCQkvLyBvbmNsb3NlX3N0YXJ0IGNhbGxiYWNrIC0gd2lsbCBDQU5DRUwgaGlkZSBpZiByZXR1cm5zIGZhbHNlCisJCQkvLyBTS0lQIGlmIGp1c3QgJ3Nob3dpbmcnIGEgaGlkZGVuIHBhbmUgYXMgJ2Nsb3NlZCcKKwkJCXZhciBhYm9ydCA9ICFzLmlzU2hvd2luZyAmJiBmYWxzZSA9PT0gX3J1bkNhbGxiYWNrcygib25jbG9zZV9zdGFydCIsIHBhbmUpOworCisJCQkvLyB0cmFuc2ZlciBsb2dpYyB2YXJzIHRvIHRlbXAgdmFycworCQkJaXNTaG93aW5nCT0gcy5pc1Nob3dpbmc7CisJCQlpc0hpZGluZwk9IHMuaXNIaWRpbmc7CisJCQl3YXNTbGlkaW5nCT0gcy5pc1NsaWRpbmc7CisJCQkvLyBub3cgY2xlYXIgdGhlIGxvZ2ljIHZhcnMgKFJFUVVJUkVEIGJlZm9yZSBhYm9ydGluZykKKwkJCWRlbGV0ZSBzLmlzU2hvd2luZzsKKwkJCWRlbGV0ZSBzLmlzSGlkaW5nOworCisJCQlpZiAoYWJvcnQpIHJldHVybiBxdWV1ZU5leHQoKTsKKworCQkJZG9GWAkJPSAhbm9BbmltYXRpb24gJiYgIXMuaXNDbG9zZWQgJiYgKG8uZnhOYW1lX2Nsb3NlICE9ICJub25lIik7CisJCQlzLmlzTW92aW5nCT0gdHJ1ZTsKKwkJCXMuaXNDbG9zZWQJPSB0cnVlOworCQkJcy5pc1Zpc2libGUJPSBmYWxzZTsKKwkJCS8vIHVwZGF0ZSBpc0hpZGRlbiBCRUZPUkUgc2l6aW5nIHBhbmVzCisJCQlpZiAoaXNIaWRpbmcpIHMuaXNIaWRkZW4gPSB0cnVlOworCQkJZWxzZSBpZiAoaXNTaG93aW5nKSBzLmlzSGlkZGVuID0gZmFsc2U7CisKKwkJCWlmIChzLmlzU2xpZGluZykgLy8gcGFuZSBpcyBiZWluZyBjbG9zZWQsIHNvIFVOQklORCB0cmlnZ2VyIGV2ZW50cworCQkJCWJpbmRTdG9wU2xpZGluZ0V2ZW50cyhwYW5lLCBmYWxzZSk7IC8vIHdpbGwgc2V0IGlzU2xpZGluZz1mYWxzZQorCQkJZWxzZSAvLyByZXNpemUgcGFuZXMgYWRqYWNlbnQgdG8gdGhpcyBvbmUKKwkJCQlzaXplTWlkUGFuZXMoX2NbcGFuZV0uZGlyID09PSAiaG9yeiIgPyAiIiA6ICJjZW50ZXIiLCBmYWxzZSk7IC8vIGZhbHNlID0gTk9UIHNraXBDYWxsYmFjaworCisJCQkvLyBpZiB0aGlzIHBhbmUgaGFzIGEgcmVzaXplciBiYXIsIG1vdmUgaXQgTk9XIC0gYmVmb3JlIGFuaW1hdGlvbgorCQkJc2V0QXNDbG9zZWQocGFuZSk7CisKKwkJCS8vIENMT1NFIFRIRSBQQU5FCisJCQlpZiAoZG9GWCkgeyAvLyBhbmltYXRlIHRoZSBjbG9zZQorCQkJCS8vIG1hc2sgcGFuZXMgd2l0aCBvYmplY3RzCisJCQkJdmFyIG1hc2tzID0gImNlbnRlciIrIChjLmRpcj09ImhvcnoiID8gIix3ZXN0LGVhc3QiIDogIiIpOworCQkJCXNob3dNYXNrcyggbWFza3MsIHRydWUgKTsJLy8gdHJ1ZSA9IE9OTFkgbWFzayBwYW5lcyB3aXRoIG1hc2tPYmplY3RzPXRydWUKKwkJCQlsb2NrUGFuZUZvckZYKHBhbmUsIHRydWUpOwkvLyBuZWVkIHRvIHNldCBsZWZ0L3RvcCBzbyBhbmltYXRpb24gd2lsbCB3b3JrCisJCQkJJFAuaGlkZSggby5meE5hbWVfY2xvc2UsIG8uZnhTZXR0aW5nc19jbG9zZSwgby5meFNwZWVkX2Nsb3NlLCBmdW5jdGlvbiAoKSB7CisJCQkJCWxvY2tQYW5lRm9yRlgocGFuZSwgZmFsc2UpOyAvLyB1bmRvCisJCQkJCWlmIChzLmlzQ2xvc2VkKSBjbG9zZV8yKCk7CisJCQkJCXF1ZXVlTmV4dCgpOworCQkJCX0pOworCQkJfQorCQkJZWxzZSB7IC8vIGhpZGUgdGhlIHBhbmUgd2l0aG91dCBhbmltYXRpb24KKwkJCQlfaGlkZVBhbmUocGFuZSk7CisJCQkJY2xvc2VfMigpOworCQkJCXF1ZXVlTmV4dCgpOworCQkJfTsKKwkJfSk7CisKKwkJLy8gU1VCUk9VVElORQorCQlmdW5jdGlvbiBjbG9zZV8yICgpIHsKKwkJCXMuaXNNb3ZpbmcJPSBmYWxzZTsKKwkJCWJpbmRTdGFydFNsaWRpbmdFdmVudChwYW5lLCB0cnVlKTsgLy8gd2lsbCBlbmFibGUgaWYgby5zbGlkYWJsZSA9IHRydWUKKworCQkJLy8gaWYgb3Bwb3NpdGUtcGFuZSB3YXMgYXV0b0Nsb3NlZCwgc2VlIGlmIGl0IGNhbiBiZSBhdXRvT3BlbmVkIG5vdworCQkJdmFyIGFsdFBhbmUgPSBfYy5vcHBvc2l0ZUVkZ2VbcGFuZV07CisJCQlpZiAoc3RhdGVbIGFsdFBhbmUgXS5ub1Jvb20pIHsKKwkJCQlzZXRTaXplTGltaXRzKCBhbHRQYW5lICk7CisJCQkJbWFrZVBhbmVGaXQoIGFsdFBhbmUgKTsKKwkJCX0KKworCQkJLy8gaGlkZSBhbnkgbWFza3Mgc2hvd24gd2hpbGUgY2xvc2luZworCQkJaGlkZU1hc2tzKCk7CisKKwkJCWlmICghc2tpcENhbGxiYWNrICYmIChzdGF0ZS5pbml0aWFsaXplZCB8fCBvLnRyaWdnZXJFdmVudHNPbkxvYWQpKSB7CisJCQkJLy8gb25jbG9zZSBjYWxsYmFjayAtIFVOTEVTUyBqdXN0ICdzaG93aW5nJyBhIGhpZGRlbiBwYW5lIGFzICdjbG9zZWQnCisJCQkJaWYgKCFpc1Nob3dpbmcpCV9ydW5DYWxsYmFja3MoIm9uY2xvc2VfZW5kIiwgcGFuZSk7CisJCQkJLy8gb25oaWRlIE9SIG9uc2hvdyBjYWxsYmFjaworCQkJCWlmIChpc1Nob3dpbmcpCV9ydW5DYWxsYmFja3MoIm9uc2hvd19lbmQiLCBwYW5lKTsKKwkJCQlpZiAoaXNIaWRpbmcpCV9ydW5DYWxsYmFja3MoIm9uaGlkZV9lbmQiLCBwYW5lKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSogQHBhcmFtIHtzdHJpbmd9CXBhbmUJVGhlIHBhbmUganVzdCBjbG9zZWQsIGllOiBub3J0aCwgc291dGgsIGVhc3QsIG9yIHdlc3QKKwkqLworLAlzZXRBc0Nsb3NlZCA9IGZ1bmN0aW9uIChwYW5lKSB7CisJCXZhcgorCQkJJFAJCT0gJFBzW3BhbmVdCisJCSwJJFIJCT0gJFJzW3BhbmVdCisJCSwJJFQJCT0gJFRzW3BhbmVdCisJCSwJbwkJPSBvcHRpb25zW3BhbmVdCisJCSwJcwkJPSBzdGF0ZVtwYW5lXQorCQksCXNpZGUJPSBfY1twYW5lXS5zaWRlLnRvTG93ZXJDYXNlKCkKKwkJLAlpbnNldAk9ICJpbnNldCIrIF9jW3BhbmVdLnNpZGUKKwkJLAlyQ2xhc3MJPSBvLnJlc2l6ZXJDbGFzcworCQksCXRDbGFzcwk9IG8udG9nZ2xlckNsYXNzCisJCSwJX3BhbmUJPSAiLSIrIHBhbmUgLy8gdXNlZCBmb3IgY2xhc3NOYW1lcworCQksCV9vcGVuCT0gIi1vcGVuIgorCQksCV9zbGlkaW5nPSAiLXNsaWRpbmciCisJCSwJX2Nsb3NlZAk9ICItY2xvc2VkIgorCQk7CisJCSRSCisJCQkuY3NzKHNpZGUsIHNDW2luc2V0XSkgLy8gbW92ZSB0aGUgcmVzaXplcgorCQkJLnJlbW92ZUNsYXNzKCByQ2xhc3MrX29wZW4gKyIgIisgckNsYXNzK19wYW5lK19vcGVuICkKKwkJCS5yZW1vdmVDbGFzcyggckNsYXNzK19zbGlkaW5nICsiICIrIHJDbGFzcytfcGFuZStfc2xpZGluZyApCisJCQkuYWRkQ2xhc3MoIHJDbGFzcytfY2xvc2VkICsiICIrIHJDbGFzcytfcGFuZStfY2xvc2VkICkKKwkJCS51bmJpbmQoImRibGNsaWNrLiIrIHNJRCkKKwkJOworCQkvLyBESVNBQkxFICdyZXNpemluZycgd2hlbiBjbG9zZWQgLSBkbyB0aGlzIEJFRk9SRSBiaW5kU3RhcnRTbGlkaW5nRXZlbnQ/CisJCWlmIChvLnJlc2l6YWJsZSAmJiAkLmxheW91dC5wbHVnaW5zLmRyYWdnYWJsZSkKKwkJCSRSCisJCQkJLmRyYWdnYWJsZSgiZGlzYWJsZSIpCisJCQkJLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpIC8vIGRvIE5PVCBhcHBseSBkaXNhYmxlZCBzdHlsaW5nIC0gbm90IHN1aXRhYmxlIGhlcmUKKwkJCQkuY3NzKCJjdXJzb3IiLCAiZGVmYXVsdCIpCisJCQkJLmF0dHIoInRpdGxlIiwiIikKKwkJCTsKKworCQkvLyBpZiBwYW5lIGhhcyBhIHRvZ2dsZXIgYnV0dG9uLCBhZGp1c3QgdGhhdCB0b28KKwkJaWYgKCRUKSB7CisJCQkkVAorCQkJCS5yZW1vdmVDbGFzcyggdENsYXNzK19vcGVuICsiICIrIHRDbGFzcytfcGFuZStfb3BlbiApCisJCQkJLmFkZENsYXNzKCB0Q2xhc3MrX2Nsb3NlZCArIiAiKyB0Q2xhc3MrX3BhbmUrX2Nsb3NlZCApCisJCQkJLmF0dHIoInRpdGxlIiwgby50aXBzLk9wZW4pIC8vIG1heSBiZSBibGFuaworCQkJOworCQkJLy8gdG9nZ2xlci1jb250ZW50IC0gaWYgZXhpc3RzCisJCQkkVC5jaGlsZHJlbigiLmNvbnRlbnQtb3BlbiIpLmhpZGUoKTsKKwkJCSRULmNoaWxkcmVuKCIuY29udGVudC1jbG9zZWQiKS5jc3MoImRpc3BsYXkiLCJibG9jayIpOworCQl9CisKKwkJLy8gc3luYyBhbnkgJ3BpbiBidXR0b25zJworCQlzeW5jUGluQnRucyhwYW5lLCBmYWxzZSk7CisKKwkJaWYgKHN0YXRlLmluaXRpYWxpemVkKSB7CisJCQkvLyByZXNpemUgJ2xlbmd0aCcgYW5kIHBvc2l0aW9uIHRvZ2dsZXJzIGZvciBhZGphY2VudCBwYW5lcworCQkJc2l6ZUhhbmRsZXMoKTsKKwkJfQorCX0KKworCS8qKgorCSogT3BlbiB0aGUgc3BlY2lmaWVkIHBhbmUgKGFuaW1hdGlvbiBvcHRpb25hbCksIGFuZCByZXNpemUgYWxsIG90aGVyIHBhbmVzIGFzIG5lZWRlZAorCSoKKwkqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0JZXZ0X29yX3BhbmUJCQlUaGUgcGFuZSBiZWluZyBvcGVuZWQsIGllOiBub3J0aCwgc291dGgsIGVhc3QsIG9yIHdlc3QKKwkqIEBwYXJhbSB7Ym9vbGVhbj19CQkJW3NsaWRlPWZhbHNlXQorCSogQHBhcmFtIHtib29sZWFuPX0JCQlbbm9BbmltYXRpb249ZmFsc2VdCisJKiBAcGFyYW0ge2Jvb2xlYW49fQkJCVtub0FsZXJ0PWZhbHNlXQorCSovCissCW9wZW4gPSBmdW5jdGlvbiAoZXZ0X29yX3BhbmUsIHNsaWRlLCBub0FuaW1hdGlvbiwgbm9BbGVydCkgeworCQlpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgcmV0dXJuOworCQl2YXIJcGFuZSA9IGV2dFBhbmUuY2FsbCh0aGlzLCBldnRfb3JfcGFuZSkKKwkJLAkkUAk9ICRQc1twYW5lXQorCQksCSRSCT0gJFJzW3BhbmVdCisJCSwJJFQJPSAkVHNbcGFuZV0KKwkJLAlvCT0gb3B0aW9uc1twYW5lXQorCQksCXMJPSBzdGF0ZVtwYW5lXQorCQksCWMJPSBfY1twYW5lXQorCQksCWRvRlgsIGlzU2hvd2luZworCQk7CisJCS8vIFFVRVVFIGluIGNhc2UgYW5vdGhlciBhY3Rpb24vYW5pbWF0aW9uIGlzIGluIHByb2dyZXNzCisJCSROLnF1ZXVlKGZ1bmN0aW9uKCBxdWV1ZU5leHQgKXsKKworCQkJaWYgKCAhJFAKKwkJCXx8CSghby5yZXNpemFibGUgJiYgIW8uY2xvc2FibGUgJiYgIXMuaXNTaG93aW5nKQkvLyBpbnZhbGlkIHJlcXVlc3QKKwkJCXx8CShzLmlzVmlzaWJsZSAmJiAhcy5pc1NsaWRpbmcpCQkJCQkvLyBhbHJlYWR5IG9wZW4KKwkJCSkgcmV0dXJuIHF1ZXVlTmV4dCgpOworCisJCQkvLyBwYW5lIGNhbiBBTFNPIGJlIHVuaGlkZGVuIGJ5IGp1c3QgY2FsbGluZyBzaG93KCksIHNvIGhhbmRsZSB0aGlzIHNjZW5hcmlvCisJCQlpZiAocy5pc0hpZGRlbiAmJiAhcy5pc1Nob3dpbmcpIHsKKwkJCQlxdWV1ZU5leHQoKTsgLy8gY2FsbCBiZWZvcmUgc2hvdygpIGJlY2F1c2UgaXQgbmVlZHMgdGhlIHF1ZXVlIGZyZWUKKwkJCQlzaG93KHBhbmUsIHRydWUpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJaWYgKG8uYXV0b1Jlc2l6ZSAmJiBzLnNpemUgIT0gby5zaXplKSAvLyByZXNpemUgcGFuZSB0byBvcmlnaW5hbCBzaXplIHNldCBpbiBvcHRpb25zCisJCQkJc2l6ZVBhbmUocGFuZSwgby5zaXplLCB0cnVlLCB0cnVlLCB0cnVlKTsgLy8gdHJ1ZT1za2lwQ2FsbGJhY2svZm9yY2VSZXNpemUvbm9BbmltYXRpb24KKwkJCWVsc2UKKwkJCQkvLyBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGF2YWlsYWJsZSB0byBvcGVuIHRoZSBwYW5lCisJCQkJc2V0U2l6ZUxpbWl0cyhwYW5lLCBzbGlkZSk7CisKKwkJCS8vIG9ub3Blbl9zdGFydCBjYWxsYmFjayAtIHdpbGwgQ0FOQ0VMIG9wZW4gaWYgcmV0dXJucyBmYWxzZQorCQkJdmFyIGNiUmV0dXJuID0gX3J1bkNhbGxiYWNrcygib25vcGVuX3N0YXJ0IiwgcGFuZSk7CisKKwkJCWlmIChjYlJldHVybiA9PT0gImFib3J0IikKKwkJCQlyZXR1cm4gcXVldWVOZXh0KCk7CisKKwkJCS8vIHVwZGF0ZSBwYW5lLXN0YXRlIGFnYWluIGluIGNhc2Ugb3B0aW9ucyB3ZXJlIGNoYW5nZWQgaW4gb25vcGVuX3N0YXJ0CisJCQlpZiAoY2JSZXR1cm4gIT09ICJOQyIpIC8vIE5DID0gIk5vIENhbGxiYWNrIgorCQkJCXNldFNpemVMaW1pdHMocGFuZSwgc2xpZGUpOworCisJCQlpZiAocy5taW5TaXplID4gcy5tYXhTaXplKSB7IC8vIElOU1VGRklDSUVOVCBST09NIEZPUiBQQU5FIFRPIE9QRU4hCisJCQkJc3luY1BpbkJ0bnMocGFuZSwgZmFsc2UpOyAvLyBtYWtlIHN1cmUgcGluLWJ1dHRvbnMgYXJlIHJlc2V0CisJCQkJaWYgKCFub0FsZXJ0ICYmIG8udGlwcy5ub1Jvb21Ub09wZW4pCisJCQkJCWFsZXJ0KG8udGlwcy5ub1Jvb21Ub09wZW4pOworCQkJCXJldHVybiBxdWV1ZU5leHQoKTsgLy8gQUJPUlQKKwkJCX0KKworCQkJaWYgKHNsaWRlKSAvLyBTVEFSVCBTbGlkaW5nIC0gd2lsbCBzZXQgaXNTbGlkaW5nPXRydWUKKwkJCQliaW5kU3RvcFNsaWRpbmdFdmVudHMocGFuZSwgdHJ1ZSk7IC8vIEJJTkQgdHJpZ2dlciBldmVudHMgdG8gY2xvc2Ugc2xpZGluZy1wYW5lCisJCQllbHNlIGlmIChzLmlzU2xpZGluZykgLy8gUElOIFBBTkUgKHN0b3Agc2xpZGluZykgLSBvcGVuIHBhbmUgJ25vcm1hbGx5JyBpbnN0ZWFkCisJCQkJYmluZFN0b3BTbGlkaW5nRXZlbnRzKHBhbmUsIGZhbHNlKTsgLy8gVU5CSU5EIHRyaWdnZXIgZXZlbnRzIC0gd2lsbCBzZXQgaXNTbGlkaW5nPWZhbHNlCisJCQllbHNlIGlmIChvLnNsaWRhYmxlKQorCQkJCWJpbmRTdGFydFNsaWRpbmdFdmVudChwYW5lLCBmYWxzZSk7IC8vIFVOQklORCB0cmlnZ2VyIGV2ZW50cworCisJCQlzLm5vUm9vbSA9IGZhbHNlOyAvLyB3aWxsIGJlIHJlc2V0IGJ5IG1ha2VQYW5lRml0IGlmICdub1Jvb20nCisJCQltYWtlUGFuZUZpdChwYW5lKTsKKworCQkJLy8gdHJhbnNmZXIgbG9naWMgdmFyIHRvIHRlbXAgdmFyCisJCQlpc1Nob3dpbmcgPSBzLmlzU2hvd2luZzsKKwkJCS8vIG5vdyBjbGVhciB0aGUgbG9naWMgdmFyCisJCQlkZWxldGUgcy5pc1Nob3dpbmc7CisKKwkJCWRvRlgJCT0gIW5vQW5pbWF0aW9uICYmIHMuaXNDbG9zZWQgJiYgKG8uZnhOYW1lX29wZW4gIT0gIm5vbmUiKTsKKwkJCXMuaXNNb3ZpbmcJPSB0cnVlOworCQkJcy5pc1Zpc2libGUJPSB0cnVlOworCQkJcy5pc0Nsb3NlZAk9IGZhbHNlOworCQkJLy8gdXBkYXRlIGlzSGlkZGVuIEJFRk9SRSBzaXppbmcgcGFuZXMgLSBXSFk/Pz8gT2xkPworCQkJaWYgKGlzU2hvd2luZykgcy5pc0hpZGRlbiA9IGZhbHNlOworCisJCQlpZiAoZG9GWCkgeyAvLyBBTklNQVRFCisJCQkJLy8gbWFzayBwYW5lcyB3aXRoIG9iamVjdHMKKwkJCQl2YXIgbWFza3MgPSAiY2VudGVyIisgKGMuZGlyPT0iaG9yeiIgPyAiLHdlc3QsZWFzdCIgOiAiIik7CisJCQkJaWYgKHMuaXNTbGlkaW5nKSBtYXNrcyArPSAiLCIrIF9jLm9wcG9zaXRlRWRnZVtwYW5lXTsKKwkJCQlzaG93TWFza3MoIG1hc2tzLCB0cnVlICk7CS8vIHRydWUgPSBPTkxZIG1hc2sgcGFuZXMgd2l0aCBtYXNrT2JqZWN0cz10cnVlCisJCQkJbG9ja1BhbmVGb3JGWChwYW5lLCB0cnVlKTsJLy8gbmVlZCB0byBzZXQgbGVmdC90b3Agc28gYW5pbWF0aW9uIHdpbGwgd29yaworCQkJCSRQLnNob3coIG8uZnhOYW1lX29wZW4sIG8uZnhTZXR0aW5nc19vcGVuLCBvLmZ4U3BlZWRfb3BlbiwgZnVuY3Rpb24oKSB7CisJCQkJCWxvY2tQYW5lRm9yRlgocGFuZSwgZmFsc2UpOyAvLyB1bmRvCisJCQkJCWlmIChzLmlzVmlzaWJsZSkgb3Blbl8yKCk7IC8vIGNvbnRpbnVlCisJCQkJCXF1ZXVlTmV4dCgpOworCQkJCX0pOworCQkJfQorCQkJZWxzZSB7IC8vIG5vIGFuaW1hdGlvbgorCQkJCV9zaG93UGFuZShwYW5lKTsvLyBqdXN0IHNob3cgcGFuZSBhbmQuLi4KKwkJCQlvcGVuXzIoKTsJCS8vIGNvbnRpbnVlCisJCQkJcXVldWVOZXh0KCk7CisJCQl9OworCQl9KTsKKworCQkvLyBTVUJST1VUSU5FCisJCWZ1bmN0aW9uIG9wZW5fMiAoKSB7CisJCQlzLmlzTW92aW5nCT0gZmFsc2U7CisKKwkJCS8vIGN1cmUgaWZyYW1lIGRpc3BsYXkgaXNzdWVzCisJCQlfZml4SWZyYW1lKHBhbmUpOworCisJCQkvLyBOT1RFOiBpZiBpc1NsaWRpbmcsIHRoZW4gb3RoZXIgcGFuZXMgYXJlIE5PVCAncmVzaXplZCcKKwkJCWlmICghcy5pc1NsaWRpbmcpIHsgLy8gcmVzaXplIGFsbCBwYW5lcyBhZGphY2VudCB0byB0aGlzIG9uZQorCQkJCWhpZGVNYXNrcygpOyAvLyByZW1vdmUgYW55IG1hc2tzIHNob3duIHdoaWxlIG9wZW5pbmcKKwkJCQlzaXplTWlkUGFuZXMoX2NbcGFuZV0uZGlyPT0idmVydCIgPyAiY2VudGVyIiA6ICIiLCBmYWxzZSk7IC8vIGZhbHNlID0gTk9UIHNraXBDYWxsYmFjaworCQkJfQorCisJCQkvLyBzZXQgY2xhc3NlcywgcG9zaXRpb24gaGFuZGxlcyBhbmQgZXhlY3V0ZSBjYWxsYmFja3MuLi4KKwkJCXNldEFzT3BlbihwYW5lKTsKKwkJfTsKKwkKKwl9CisKKwkvKioKKwkqIEBwYXJhbSB7c3RyaW5nfQlwYW5lCQlUaGUgcGFuZSBqdXN0IG9wZW5lZCwgaWU6IG5vcnRoLCBzb3V0aCwgZWFzdCwgb3Igd2VzdAorCSogQHBhcmFtIHtib29sZWFuPX0JW3NraXBDYWxsYmFjaz1mYWxzZV0KKwkqLworLAlzZXRBc09wZW4gPSBmdW5jdGlvbiAocGFuZSwgc2tpcENhbGxiYWNrKSB7CisJCXZhciAKKwkJCSRQCQk9ICRQc1twYW5lXQorCQksCSRSCQk9ICRSc1twYW5lXQorCQksCSRUCQk9ICRUc1twYW5lXQorCQksCW8JCT0gb3B0aW9uc1twYW5lXQorCQksCXMJCT0gc3RhdGVbcGFuZV0KKwkJLAlzaWRlCT0gX2NbcGFuZV0uc2lkZS50b0xvd2VyQ2FzZSgpCisJCSwJaW5zZXQJPSAiaW5zZXQiKyBfY1twYW5lXS5zaWRlCisJCSwJckNsYXNzCT0gby5yZXNpemVyQ2xhc3MKKwkJLAl0Q2xhc3MJPSBvLnRvZ2dsZXJDbGFzcworCQksCV9wYW5lCT0gIi0iKyBwYW5lIC8vIHVzZWQgZm9yIGNsYXNzTmFtZXMKKwkJLAlfb3Blbgk9ICItb3BlbiIKKwkJLAlfY2xvc2VkCT0gIi1jbG9zZWQiCisJCSwJX3NsaWRpbmc9ICItc2xpZGluZyIKKwkJOworCQkkUgorCQkJLmNzcyhzaWRlLCBzQ1tpbnNldF0gKyBnZXRQYW5lU2l6ZShwYW5lKSkgLy8gbW92ZSB0aGUgcmVzaXplcgorCQkJLnJlbW92ZUNsYXNzKCByQ2xhc3MrX2Nsb3NlZCArIiAiKyByQ2xhc3MrX3BhbmUrX2Nsb3NlZCApCisJCQkuYWRkQ2xhc3MoIHJDbGFzcytfb3BlbiArIiAiKyByQ2xhc3MrX3BhbmUrX29wZW4gKQorCQk7CisJCWlmIChzLmlzU2xpZGluZykKKwkJCSRSLmFkZENsYXNzKCByQ2xhc3MrX3NsaWRpbmcgKyIgIisgckNsYXNzK19wYW5lK19zbGlkaW5nICkKKwkJZWxzZSAvLyBpbiBjYXNlICd3YXMgc2xpZGluZycKKwkJCSRSLnJlbW92ZUNsYXNzKCByQ2xhc3MrX3NsaWRpbmcgKyIgIisgckNsYXNzK19wYW5lK19zbGlkaW5nICkKKworCQlpZiAoby5yZXNpemVyRGJsQ2xpY2tUb2dnbGUpCisJCQkkUi5iaW5kKCJkYmxjbGljayIsIHRvZ2dsZSApOworCQlyZW1vdmVIb3ZlciggMCwgJFIgKTsgLy8gcmVtb3ZlIGhvdmVyIGNsYXNzZXMKKwkJaWYgKG8ucmVzaXphYmxlICYmICQubGF5b3V0LnBsdWdpbnMuZHJhZ2dhYmxlKQorCQkJJFIJLmRyYWdnYWJsZSgiZW5hYmxlIikKKwkJCQkuY3NzKCJjdXJzb3IiLCBvLnJlc2l6ZXJDdXJzb3IpCisJCQkJLmF0dHIoInRpdGxlIiwgby50aXBzLlJlc2l6ZSk7CisJCWVsc2UgaWYgKCFzLmlzU2xpZGluZykKKwkJCSRSLmNzcygiY3Vyc29yIiwgImRlZmF1bHQiKTsgLy8gbi1yZXNpemUsIHMtcmVzaXplLCBldGMKKworCQkvLyBpZiBwYW5lIGFsc28gaGFzIGEgdG9nZ2xlciBidXR0b24sIGFkanVzdCB0aGF0IHRvbworCQlpZiAoJFQpIHsKKwkJCSRUCS5yZW1vdmVDbGFzcyggdENsYXNzK19jbG9zZWQgKyIgIisgdENsYXNzK19wYW5lK19jbG9zZWQgKQorCQkJCS5hZGRDbGFzcyggdENsYXNzK19vcGVuICsiICIrIHRDbGFzcytfcGFuZStfb3BlbiApCisJCQkJLmF0dHIoInRpdGxlIiwgby50aXBzLkNsb3NlKTsgLy8gbWF5IGJlIGJsYW5rCisJCQlyZW1vdmVIb3ZlciggMCwgJFQgKTsgLy8gcmVtb3ZlIGhvdmVyIGNsYXNzZXMKKwkJCS8vIHRvZ2dsZXItY29udGVudCAtIGlmIGV4aXN0cworCQkJJFQuY2hpbGRyZW4oIi5jb250ZW50LWNsb3NlZCIpLmhpZGUoKTsKKwkJCSRULmNoaWxkcmVuKCIuY29udGVudC1vcGVuIikuY3NzKCJkaXNwbGF5IiwiYmxvY2siKTsKKwkJfQorCisJCS8vIHN5bmMgYW55ICdwaW4gYnV0dG9ucycKKwkJc3luY1BpbkJ0bnMocGFuZSwgIXMuaXNTbGlkaW5nKTsKKworCQkvLyB1cGRhdGUgcGFuZS1zdGF0ZSBkaW1lbnNpb25zIC0gQkVGT1JFIHJlc2l6aW5nIGNvbnRlbnQKKwkJJC5leHRlbmQocywgZWxEaW1zKCRQKSk7CisKKwkJaWYgKHN0YXRlLmluaXRpYWxpemVkKSB7CisJCQkvLyByZXNpemUgcmVzaXplciAmIHRvZ2dsZXIgc2l6ZXMgZm9yIGFsbCBwYW5lcworCQkJc2l6ZUhhbmRsZXMoKTsKKwkJCS8vIHJlc2l6ZSBjb250ZW50IGV2ZXJ5IHRpbWUgcGFuZSBvcGVucyAtIHRvIGJlIHN1cmUKKwkJCXNpemVDb250ZW50KHBhbmUsIHRydWUpOyAvLyB0cnVlID0gcmVtZWFzdXJlIGhlYWRlcnMvZm9vdGVycywgZXZlbiBpZiAncGFuZS5pc01vdmluZycKKwkJfQorCisJCWlmICghc2tpcENhbGxiYWNrICYmIChzdGF0ZS5pbml0aWFsaXplZCB8fCBvLnRyaWdnZXJFdmVudHNPbkxvYWQpICYmICRQLmlzKCI6dmlzaWJsZSIpKSB7CisJCQkvLyBvbm9wZW4gY2FsbGJhY2sKKwkJCV9ydW5DYWxsYmFja3MoIm9ub3Blbl9lbmQiLCBwYW5lKTsKKwkJCS8vIG9uc2hvdyBjYWxsYmFjayAtIFRPRE86IHNob3VsZCB0aGlzIGJlIGhlcmU/CisJCQlpZiAocy5pc1Nob3dpbmcpIF9ydW5DYWxsYmFja3MoIm9uc2hvd19lbmQiLCBwYW5lKTsKKworCQkJLy8gQUxTTyBjYWxsIG9ucmVzaXplIGJlY2F1c2UgbGF5b3V0LXNpemUgKm1heSogaGF2ZSBjaGFuZ2VkIHdoaWxlIHBhbmUgd2FzIGNsb3NlZAorCQkJaWYgKHN0YXRlLmluaXRpYWxpemVkKQorCQkJCV9ydW5DYWxsYmFja3MoIm9ucmVzaXplX2VuZCIsIHBhbmUpOworCQl9CisKKwkJLy8gVE9ETzogU29tZWhvdyBzaXplUGFuZSgibm9ydGgiKSBpcyBiZWluZyBjYWxsZWQgYWZ0ZXIgdGhpcyBwb2ludD8/PworCX0KKworCisJLyoqCisJKiBzbGlkZU9wZW4gLyBzbGlkZUNsb3NlIC8gc2xpZGVUb2dnbGUKKwkqCisJKiBQYXNzLXRob3VnaCBtZXRob2RzIGZvciBzbGlkaW5nCisJKi8KKywJc2xpZGVPcGVuID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lKSB7CisJCWlmICghaXNJbml0aWFsaXplZCgpKSByZXR1cm47CisJCXZhcglldnQJCT0gZXZ0T2JqKGV2dF9vcl9wYW5lKQorCQksCXBhbmUJPSBldnRQYW5lLmNhbGwodGhpcywgZXZ0X29yX3BhbmUpCisJCSwJcwkJPSBzdGF0ZVtwYW5lXQorCQksCWRlbGF5CT0gb3B0aW9uc1twYW5lXS5zbGlkZURlbGF5X29wZW4KKwkJOworCQkvLyBwcmV2ZW50IGV2ZW50IGZyb20gdHJpZ2dlcmluZyBvbiBORVcgcmVzaXplciBiaW5kaW5nIGNyZWF0ZWQgYmVsb3cKKwkJaWYgKGV2dCkgZXZ0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOworCisJCWlmIChzLmlzQ2xvc2VkICYmIGV2dCAmJiBldnQudHlwZSA9PT0gIm1vdXNlZW50ZXIiICYmIGRlbGF5ID4gMCkKKwkJCS8vIHRyaWdnZXIgPSBtb3VzZWVudGVyIC0gdXNlIGEgZGVsYXkKKwkJCXRpbWVyLnNldChwYW5lKyJfb3BlblNsaWRlciIsIG9wZW5fTk9XLCBkZWxheSk7CisJCWVsc2UKKwkJCW9wZW5fTk9XKCk7IC8vIHdpbGwgdW5iaW5kIGV2ZW50cyBpZiBpcyBhbHJlYWR5IG9wZW4KKworCQkvKioKKwkJKiBTVUJST1VUSU5FIGZvciB0aW1lZCBvcGVuCisJCSovCisJCWZ1bmN0aW9uIG9wZW5fTk9XICgpIHsKKwkJCWlmICghcy5pc0Nsb3NlZCkgLy8gc2tpcCBpZiBubyBsb25nZXIgY2xvc2VkIQorCQkJCWJpbmRTdG9wU2xpZGluZ0V2ZW50cyhwYW5lLCB0cnVlKTsgLy8gQklORCB0cmlnZ2VyIGV2ZW50cyB0byBjbG9zZSBzbGlkaW5nLXBhbmUKKwkJCWVsc2UgaWYgKCFzLmlzTW92aW5nKQorCQkJCW9wZW4ocGFuZSwgdHJ1ZSk7IC8vIHRydWUgPSBzbGlkZSAtIG9wZW4oKSB3aWxsIGhhbmRsZSBiaW5kaW5nCisJCX07CisJfQorCissCXNsaWRlQ2xvc2UgPSBmdW5jdGlvbiAoZXZ0X29yX3BhbmUpIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJdmFyCWV2dAkJPSBldnRPYmooZXZ0X29yX3BhbmUpCisJCSwJcGFuZQk9IGV2dFBhbmUuY2FsbCh0aGlzLCBldnRfb3JfcGFuZSkKKwkJLAlvCQk9IG9wdGlvbnNbcGFuZV0KKwkJLAlzCQk9IHN0YXRlW3BhbmVdCisJCSwJZGVsYXkJPSBzLmlzTW92aW5nID8gMTAwMCA6IDMwMCAvLyBNSU5JTVVNIGRlbGF5IC0gb3B0aW9uIG1heSBvdmVycmlkZQorCQk7CisJCWlmIChzLmlzQ2xvc2VkIHx8IHMuaXNSZXNpemluZykKKwkJCXJldHVybjsgLy8gc2tpcCBpZiBhbHJlYWR5IGNsb3NlZCBPUiBpbiBwcm9jZXNzIG9mIHJlc2l6aW5nCisJCWVsc2UgaWYgKG8uc2xpZGVUcmlnZ2VyX2Nsb3NlID09PSAiY2xpY2siKQorCQkJY2xvc2VfTk9XKCk7IC8vIGNsb3NlIGltbWVkaWF0ZWx5IG9uQ2xpY2sKKwkJZWxzZSBpZiAoby5wcmV2ZW50UXVpY2tTbGlkZUNsb3NlICYmIHMuaXNNb3ZpbmcpCisJCQlyZXR1cm47IC8vIGhhbmRsZSBDaHJvbWUgcXVpY2stY2xvc2Ugb24gc2xpZGUtb3BlbgorCQllbHNlIGlmIChvLnByZXZlbnRQcmVtYXR1cmVTbGlkZUNsb3NlICYmIGV2dCAmJiAkLmxheW91dC5pc01vdXNlT3ZlckVsZW0oZXZ0LCAkUHNbcGFuZV0pKQorCQkJcmV0dXJuOyAvLyBoYW5kbGUgaW5jb3JyZWN0IG1vdXNlbGVhdmUgdHJpZ2dlciwgbGlrZSB3aGVuIG92ZXIgYSBTRUxFQ1QtbGlzdCBpbiBJRQorCQllbHNlIGlmIChldnQpIC8vIHRyaWdnZXIgPSBtb3VzZWxlYXZlIC0gdXNlIGEgZGVsYXkKKwkJCS8vIDEgc2VjIGRlbGF5IGlmICdvcGVuaW5nJywgZWxzZSAuMyBzZWMKKwkJCXRpbWVyLnNldChwYW5lKyJfY2xvc2VTbGlkZXIiLCBjbG9zZV9OT1csIG1heChvLnNsaWRlRGVsYXlfY2xvc2UsIGRlbGF5KSk7CisJCWVsc2UgLy8gY2FsbGVkIHByb2dyYW1pY2FsbHkKKwkJCWNsb3NlX05PVygpOworCisJCS8qKgorCQkqIFNVQlJPVVRJTkUgZm9yIHRpbWVkIGNsb3NlCisJCSovCisJCWZ1bmN0aW9uIGNsb3NlX05PVyAoKSB7CisJCQlpZiAocy5pc0Nsb3NlZCkgLy8gc2tpcCAnY2xvc2UnIGlmIGFscmVhZHkgY2xvc2VkIQorCQkJCWJpbmRTdG9wU2xpZGluZ0V2ZW50cyhwYW5lLCBmYWxzZSk7IC8vIFVOQklORCB0cmlnZ2VyIGV2ZW50cyAtIFRPRE86IGlzIHRoaXMgbmVlZGVkIGhlcmU/CisJCQllbHNlIGlmICghcy5pc01vdmluZykKKwkJCQljbG9zZShwYW5lKTsgLy8gY2xvc2Ugd2lsbCBoYW5kbGUgdW5iaW5kaW5nCisJCX07CisJfQorCisJLyoqCisJKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9CWV2dF9vcl9wYW5lCQlUaGUgcGFuZSBiZWluZyBvcGVuZWQsIGllOiBub3J0aCwgc291dGgsIGVhc3QsIG9yIHdlc3QKKwkqLworLAlzbGlkZVRvZ2dsZSA9IGZ1bmN0aW9uIChldnRfb3JfcGFuZSkgeworCQl2YXIgcGFuZSA9IGV2dFBhbmUuY2FsbCh0aGlzLCBldnRfb3JfcGFuZSk7CisJCXRvZ2dsZShwYW5lLCB0cnVlKTsKKwl9CisKKworCS8qKgorCSogTXVzdCBzZXQgbGVmdC90b3Agb24gRWFzdC9Tb3V0aCBwYW5lcyBzbyBhbmltYXRpb24gd2lsbCB3b3JrIHByb3Blcmx5CisJKgorCSogQHBhcmFtIHtzdHJpbmd9CXBhbmUJVGhlIHBhbmUgdG8gbG9jaywgJ2Vhc3QnIG9yICdzb3V0aCcgLSBhbnkgb3RoZXIgaXMgaWdub3JlZCEKKwkqIEBwYXJhbSB7Ym9vbGVhbn0JZG9Mb2NrICB0cnVlID0gc2V0IGxlZnQvdG9wLCBmYWxzZSA9IHJlbW92ZQorCSovCissCWxvY2tQYW5lRm9yRlggPSBmdW5jdGlvbiAocGFuZSwgZG9Mb2NrKSB7CisJCXZhciAkUAk9ICRQc1twYW5lXQorCQksCXMJPSBzdGF0ZVtwYW5lXQorCQksCW8JPSBvcHRpb25zW3BhbmVdCisJCSwJegk9IG9wdGlvbnMuekluZGV4ZXMKKwkJOworCQlpZiAoZG9Mb2NrKSB7CisJCQkkUC5jc3MoeyB6SW5kZXg6IHoucGFuZV9hbmltYXRlIH0pOyAvLyBvdmVybGF5IGFsbCBlbGVtZW50cyBkdXJpbmcgYW5pbWF0aW9uCisJCQlpZiAocGFuZT09InNvdXRoIikKKwkJCQkkUC5jc3MoeyB0b3A6IHNDLmluc2V0VG9wICsgc0MuaW5uZXJIZWlnaHQgLSAkUC5vdXRlckhlaWdodCgpIH0pOworCQkJZWxzZSBpZiAocGFuZT09ImVhc3QiKQorCQkJCSRQLmNzcyh7IGxlZnQ6IHNDLmluc2V0TGVmdCArIHNDLmlubmVyV2lkdGggLSAkUC5vdXRlcldpZHRoKCkgfSk7CisJCX0KKwkJZWxzZSB7IC8vIGFuaW1hdGlvbiBET05FIC0gUkVTRVQgQ1NTCisJCQkvLyBUT0RPOiBzZWUgaWYgdGhpcyBjYW4gYmUgZGVsZXRlZC4gSXQgY2F1c2VzIGEgcXVpY2stY2xvc2Ugd2hlbiBzbGlkaW5nIGluIENocm9tZQorCQkJJFAuY3NzKHsgekluZGV4OiAocy5pc1NsaWRpbmcgPyB6LnBhbmVfc2xpZGluZyA6IHoucGFuZV9ub3JtYWwpIH0pOworCQkJaWYgKHBhbmU9PSJzb3V0aCIpCisJCQkJJFAuY3NzKHsgdG9wOiAiYXV0byIgfSk7CisJCQkvLyBpZiBwYW5lIGlzIHBvc2l0aW9uZWQgJ29mZi1zY3JlZW4nLCB0aGVuIERPIE5PVCBzY3JldyB3aXRoIGl0IQorCQkJZWxzZSBpZiAocGFuZT09ImVhc3QiICYmICEkUC5jc3MoImxlZnQiKS5tYXRjaCgvXC05OTk5OS8pKQorCQkJCSRQLmNzcyh7IGxlZnQ6ICJhdXRvIiB9KTsKKwkJCS8vIGZpeCBhbnRpLWFsaWFzaW5nIGluIElFIC0gb25seSBuZWVkZWQgZm9yIGFuaW1hdGlvbnMgdGhhdCBjaGFuZ2Ugb3BhY2l0eQorCQkJaWYgKGJyb3dzZXIubXNpZSAmJiBvLmZ4T3BhY2l0eUZpeCAmJiBvLmZ4TmFtZV9vcGVuICE9ICJzbGlkZSIgJiYgJFAuY3NzKCJmaWx0ZXIiKSAmJiAkUC5jc3MoIm9wYWNpdHkiKSA9PSAxKQorCQkJCSRQWzBdLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnZmlsdGVyJyk7CisJCX0KKwl9CisKKworCS8qKgorCSogVG9nZ2xlIHNsaWRpbmcgZnVuY3Rpb25hbGl0eSBvZiBhIHNwZWNpZmljIHBhbmUgb24vb2ZmIGJ5IGFkZGluZyByZW1vdmluZyAnc2xpZGUgb3BlbicgdHJpZ2dlcgorCSoKKwkqIEBzZWUgIG9wZW4oKSwgY2xvc2UoKQorCSogQHBhcmFtIHtzdHJpbmd9CXBhbmUJVGhlIHBhbmUgdG8gZW5hYmxlL2Rpc2FibGUsICdub3J0aCcsICdzb3V0aCcsIGV0Yy4KKwkqIEBwYXJhbSB7Ym9vbGVhbn0JZW5hYmxlCUVuYWJsZSBvciBEaXNhYmxlIHNsaWRpbmc/CisJKi8KKywJYmluZFN0YXJ0U2xpZGluZ0V2ZW50ID0gZnVuY3Rpb24gKHBhbmUsIGVuYWJsZSkgeworCQl2YXIgbwkJPSBvcHRpb25zW3BhbmVdCisJCSwJJFAJCT0gJFBzW3BhbmVdCisJCSwJJFIJCT0gJFJzW3BhbmVdCisJCSwJZXZ0TmFtZQk9IG8uc2xpZGVUcmlnZ2VyX29wZW4udG9Mb3dlckNhc2UoKQorCQk7CisJCWlmICghJFIgfHwgKGVuYWJsZSAmJiAhby5zbGlkYWJsZSkpIHJldHVybjsKKworCQkvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIGV2ZW50CisJCWlmIChldnROYW1lLm1hdGNoKC9tb3VzZW92ZXIvKSkKKwkJCWV2dE5hbWUgPSBvLnNsaWRlVHJpZ2dlcl9vcGVuID0gIm1vdXNlZW50ZXIiOworCQllbHNlIGlmICghZXZ0TmFtZS5tYXRjaCgvKGNsaWNrfGRibGNsaWNrfG1vdXNlZW50ZXIpLykpIAorCQkJZXZ0TmFtZSA9IG8uc2xpZGVUcmlnZ2VyX29wZW4gPSAiY2xpY2siOworCisJCSRSCisJCQkvLyBhZGQgb3IgcmVtb3ZlIGV2ZW50CisJCQlbZW5hYmxlID8gImJpbmQiIDogInVuYmluZCJdKGV2dE5hbWUgKycuJysgc0lELCBzbGlkZU9wZW4pCisJCQkvLyBzZXQgdGhlIGFwcHJvcHJpYXRlIGN1cnNvciAmIHRpdGxlL3RpcAorCQkJLmNzcygiY3Vyc29yIiwgZW5hYmxlID8gby5zbGlkZXJDdXJzb3IgOiAiZGVmYXVsdCIpCisJCQkuYXR0cigidGl0bGUiLCBlbmFibGUgPyBvLnRpcHMuU2xpZGUgOiAiIikKKwkJOworCX0KKworCS8qKgorCSogQWRkIG9yIHJlbW92ZSAnbW91c2VsZWF2ZScgZXZlbnRzIHRvICdzbGlkZSBjbG9zZScgd2hlbiBwYW5lIGlzICdzbGlkaW5nJyBvcGVuIG9yIGNsb3NlZAorCSogQWxzbyBpbmNyZWFzZXMgekluZGV4IHdoZW4gcGFuZSBpcyBzbGlkaW5nIG9wZW4KKwkqIFNlZSBiaW5kU3RhcnRTbGlkaW5nRXZlbnQgZm9yIGNvZGUgdG8gY29udHJvbCAnc2xpZGUgb3BlbicKKwkqCisJKiBAc2VlICBzbGlkZU9wZW4oKSwgc2xpZGVDbG9zZSgpCisJKiBAcGFyYW0ge3N0cmluZ30JcGFuZQlUaGUgcGFuZSB0byBwcm9jZXNzLCAnbm9ydGgnLCAnc291dGgnLCBldGMuCisJKiBAcGFyYW0ge2Jvb2xlYW59CWVuYWJsZQlFbmFibGUgb3IgRGlzYWJsZSBldmVudHM/CisJKi8KKywJYmluZFN0b3BTbGlkaW5nRXZlbnRzID0gZnVuY3Rpb24gKHBhbmUsIGVuYWJsZSkgeworCQl2YXIJbwkJPSBvcHRpb25zW3BhbmVdCisJCSwJcwkJPSBzdGF0ZVtwYW5lXQorCQksCWMJCT0gX2NbcGFuZV0KKwkJLAl6CQk9IG9wdGlvbnMuekluZGV4ZXMKKwkJLAlldnROYW1lCT0gby5zbGlkZVRyaWdnZXJfY2xvc2UudG9Mb3dlckNhc2UoKQorCQksCWFjdGlvbgk9IChlbmFibGUgPyAiYmluZCIgOiAidW5iaW5kIikKKwkJLAkkUAkJPSAkUHNbcGFuZV0KKwkJLAkkUgkJPSAkUnNbcGFuZV0KKwkJOworCQlzLmlzU2xpZGluZyA9IGVuYWJsZTsgLy8gbG9naWMKKwkJdGltZXIuY2xlYXIocGFuZSsiX2Nsb3NlU2xpZGVyIik7IC8vIGp1c3QgaW4gY2FzZQorCisJCS8vIHJlbW92ZSAnc2xpZGVPcGVuJyBldmVudCBmcm9tIHJlc2l6ZXIKKwkJLy8gQUxTTyB3aWxsIHJhaXNlIHRoZSB6SW5kZXggb2YgdGhlIHBhbmUgJiByZXNpemVyCisJCWlmIChlbmFibGUpIGJpbmRTdGFydFNsaWRpbmdFdmVudChwYW5lLCBmYWxzZSk7CisKKwkJLy8gUkUvU0VUIHpJbmRleCAtIGluY3JlYXNlcyB3aGVuIHBhbmUgaXMgc2xpZGluZy1vcGVuLCByZXNldHMgdG8gbm9ybWFsIHdoZW4gbm90CisJCSRQLmNzcygiekluZGV4IiwgZW5hYmxlID8gei5wYW5lX3NsaWRpbmcgOiB6LnBhbmVfbm9ybWFsKTsKKwkJJFIuY3NzKCJ6SW5kZXgiLCBlbmFibGUgPyB6LnBhbmVfc2xpZGluZysyIDogei5yZXNpemVyX25vcm1hbCk7IC8vIE5PVEU6IG1hc2sgPSBwYW5lX3NsaWRpbmcrMQorCisJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgdmFsaWQgZXZlbnQKKwkJaWYgKCFldnROYW1lLm1hdGNoKC8oY2xpY2t8bW91c2VsZWF2ZSkvKSkKKwkJCWV2dE5hbWUgPSBvLnNsaWRlVHJpZ2dlcl9jbG9zZSA9ICJtb3VzZWxlYXZlIjsgLy8gYWxzbyBjYXRjaGVzICdtb3VzZW91dCcKKworCQkvLyBhZGQvcmVtb3ZlIHNsaWRlIHRyaWdnZXJzCisJCSRSW2FjdGlvbl0oZXZ0TmFtZSwgc2xpZGVDbG9zZSk7IC8vIGJhc2UgZXZlbnQgb24gcmVzaXplCisJCS8vIG5lZWQgZXh0cmEgZXZlbnRzIGZvciBtb3VzZWxlYXZlCisJCWlmIChldnROYW1lID09PSAibW91c2VsZWF2ZSIpIHsKKwkJCS8vIGFsc28gY2xvc2Ugb24gcGFuZS5tb3VzZWxlYXZlCisJCQkkUFthY3Rpb25dKCJtb3VzZWxlYXZlLiIrIHNJRCwgc2xpZGVDbG9zZSk7CisJCQkvLyBjYW5jZWwgdGltZXIgd2hlbiBtb3VzZSBtb3ZlcyBiZXR3ZWVuICdwYW5lJyBhbmQgJ3Jlc2l6ZXInCisJCQkkUlthY3Rpb25dKCJtb3VzZWVudGVyLiIrIHNJRCwgY2FuY2VsTW91c2VPdXQpOworCQkJJFBbYWN0aW9uXSgibW91c2VlbnRlci4iKyBzSUQsIGNhbmNlbE1vdXNlT3V0KTsKKwkJfQorCisJCWlmICghZW5hYmxlKQorCQkJdGltZXIuY2xlYXIocGFuZSsiX2Nsb3NlU2xpZGVyIik7CisJCWVsc2UgaWYgKGV2dE5hbWUgPT09ICJjbGljayIgJiYgIW8ucmVzaXphYmxlKSB7CisJCQkvLyBJRiBwYW5lIGlzIG5vdCByZXNpemFibGUgKHdoaWNoIGFscmVhZHkgaGFzIGEgY3Vyc29yIGFuZCB0aXApIAorCQkJLy8gdGhlbiBzZXQgdGhlIGEgY3Vyc29yICYgdGl0bGUvdGlwIG9uIHJlc2l6ZXIgd2hlbiBzbGlkaW5nCisJCQkkUi5jc3MoImN1cnNvciIsIGVuYWJsZSA/IG8uc2xpZGVyQ3Vyc29yIDogImRlZmF1bHQiKTsKKwkJCSRSLmF0dHIoInRpdGxlIiwgZW5hYmxlID8gby50aXBzLkNsb3NlIDogIiIpOyAvLyB1c2UgVG9nZ2xlci10aXAsIGVnOiAiQ2xvc2UgUGFuZSIKKwkJfQorCisJCS8vIFNVQlJPVVRJTkUgZm9yIG1vdXNlbGVhdmUgdGltZXIgY2xlYXJpbmcKKwkJZnVuY3Rpb24gY2FuY2VsTW91c2VPdXQgKGV2dCkgeworCQkJdGltZXIuY2xlYXIocGFuZSsiX2Nsb3NlU2xpZGVyIik7CisJCQlldnQuc3RvcFByb3BhZ2F0aW9uKCk7CisJCX0KKwl9CisKKworCS8qKgorCSogSGlkZXMvY2xvc2VzIGEgcGFuZSBpZiB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgcm9vbSAtIHJldmVyc2VzIHRoaXMgd2hlbiB0aGVyZSBpcyByb29tIGFnYWluCisJKiBNVVNUIGhhdmUgYWxyZWFkeSBjYWxsZWQgc2V0U2l6ZUxpbWl0cygpIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kCisJKgorCSogQHBhcmFtIHtzdHJpbmd9CXBhbmUJCQkJCVRoZSBwYW5lIGJlaW5nIHJlc2l6ZWQKKwkqIEBwYXJhbSB7Ym9vbGVhbj19CVtpc09wZW5pbmc9ZmFsc2VdCQlDYWxsZWQgZnJvbSBvbk9wZW4/CisJKiBAcGFyYW0ge2Jvb2xlYW49fQlbc2tpcENhbGxiYWNrPWZhbHNlXQlTaG91bGQgdGhlIG9ucmVzaXplIGNhbGxiYWNrIGJlIHJ1bj8KKwkqIEBwYXJhbSB7Ym9vbGVhbj19CVtmb3JjZT1mYWxzZV0KKwkqLworLAltYWtlUGFuZUZpdCA9IGZ1bmN0aW9uIChwYW5lLCBpc09wZW5pbmcsIHNraXBDYWxsYmFjaywgZm9yY2UpIHsKKwkJdmFyCisJCQlvCT0gb3B0aW9uc1twYW5lXQorCQksCXMJPSBzdGF0ZVtwYW5lXQorCQksCWMJPSBfY1twYW5lXQorCQksCSRQCT0gJFBzW3BhbmVdCisJCSwJJFIJPSAkUnNbcGFuZV0KKwkJLAlpc1NpZGVQYW5lIAk9IGMuZGlyPT09InZlcnQiCisJCSwJaGFzUm9vbQkJPSBmYWxzZQorCQk7CisJCS8vIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGNlbnRlciAmIGVhc3Qvd2VzdCBwYW5lcworCQlpZiAocGFuZSA9PT0gImNlbnRlciIgfHwgKGlzU2lkZVBhbmUgJiYgcy5ub1ZlcnRpY2FsUm9vbSkpIHsKKwkJCS8vIHNlZSBpZiB0aGVyZSBpcyBlbm91Z2ggcm9vbSB0byBkaXNwbGF5IHRoZSBwYW5lCisJCQkvLyBFUlJPUjogaGFzUm9vbSA9IHMubWluSGVpZ2h0IDw9IHMubWF4SGVpZ2h0ICYmIChpc1NpZGVQYW5lIHx8IHMubWluV2lkdGggPD0gcy5tYXhXaWR0aCk7CisJCQloYXNSb29tID0gKHMubWF4SGVpZ2h0ID49IDApOworCQkJaWYgKGhhc1Jvb20gJiYgcy5ub1Jvb20pIHsgLy8gcHJldmlvdXNseSBoaWRkZW4gZHVlIHRvIG5vUm9vbSwgc28gc2hvdyBub3cKKwkJCQlfc2hvd1BhbmUocGFuZSk7CisJCQkJaWYgKCRSKSAkUi5zaG93KCk7CisJCQkJcy5pc1Zpc2libGUgPSB0cnVlOworCQkJCXMubm9Sb29tID0gZmFsc2U7CisJCQkJaWYgKGlzU2lkZVBhbmUpIHMubm9WZXJ0aWNhbFJvb20gPSBmYWxzZTsKKwkJCQlfZml4SWZyYW1lKHBhbmUpOworCQkJfQorCQkJZWxzZSBpZiAoIWhhc1Jvb20gJiYgIXMubm9Sb29tKSB7IC8vIG5vdCBjdXJyZW50bHkgaGlkZGVuLCBzbyBoaWRlIG5vdworCQkJCV9oaWRlUGFuZShwYW5lKTsKKwkJCQlpZiAoJFIpICRSLmhpZGUoKTsKKwkJCQlzLmlzVmlzaWJsZSA9IGZhbHNlOworCQkJCXMubm9Sb29tID0gdHJ1ZTsKKwkJCX0KKwkJfQorCisJCS8vIHNlZSBpZiB0aGVyZSBpcyBlbm91Z2ggcm9vbSB0byBmaXQgdGhlIGJvcmRlci1wYW5lCisJCWlmIChwYW5lID09PSAiY2VudGVyIikgeworCQkJLy8gaWdub3JlIGNlbnRlciBpbiB0aGlzIGJsb2NrCisJCX0KKwkJZWxzZSBpZiAocy5taW5TaXplIDw9IHMubWF4U2l6ZSkgeyAvLyBwYW5lIENBTiBmaXQKKwkJCWhhc1Jvb20gPSB0cnVlOworCQkJaWYgKHMuc2l6ZSA+IHMubWF4U2l6ZSkgLy8gcGFuZSBpcyB0b28gYmlnIC0gc2hyaW5rIGl0CisJCQkJc2l6ZVBhbmUocGFuZSwgcy5tYXhTaXplLCBza2lwQ2FsbGJhY2ssIGZvcmNlLCB0cnVlKTsgLy8gdHJ1ZSA9IG5vQW5pbWF0aW9uCisJCQllbHNlIGlmIChzLnNpemUgPCBzLm1pblNpemUpIC8vIHBhbmUgaXMgdG9vIHNtYWxsIC0gZW5sYXJnZSBpdAorCQkJCXNpemVQYW5lKHBhbmUsIHMubWluU2l6ZSwgc2tpcENhbGxiYWNrLCBmb3JjZSwgdHJ1ZSk7CisJCQkvLyBuZWVkIHMuaXNWaXNpYmxlIGJlY2F1c2UgbmV3IHBzZXVkb0Nsb3NlIG1ldGhvZCBrZWVwcyBwYW5lIHZpc2libGUsIGJ1dCBvZmYtc2NyZWVuCisJCQllbHNlIGlmICgkUiAmJiBzLmlzVmlzaWJsZSAmJiAkUC5pcygiOnZpc2libGUiKSkgeworCQkJCS8vIG1ha2Ugc3VyZSByZXNpemVyLWJhciBpcyBwb3NpdGlvbmVkIGNvcnJlY3RseQorCQkJCS8vIGhhbmRsZXMgc2l0dWF0aW9uIHdoZXJlIG5lc3RlZCBsYXlvdXQgd2FzICdoaWRkZW4nIHdoZW4gaW5pdGlhbGl6ZWQKKwkJCQl2YXIJc2lkZSA9IGMuc2lkZS50b0xvd2VyQ2FzZSgpCisJCQkJLAlwb3MgID0gcy5zaXplICsgc0NbImluc2V0IisgYy5zaWRlXQorCQkJCTsKKwkJCQlpZiAoJC5sYXlvdXQuY3NzTnVtKCRSLCBzaWRlKSAhPSBwb3MpICRSLmNzcyggc2lkZSwgcG9zICk7CisJCQl9CisKKwkJCS8vIGlmIHdhcyBwcmV2aW91c2x5IGhpZGRlbiBkdWUgdG8gbm9Sb29tLCB0aGVuIFJFU0VUIGJlY2F1c2UgTk9XIHRoZXJlIGlzIHJvb20KKwkJCWlmIChzLm5vUm9vbSkgeworCQkJCS8vIHMubm9Sb29tIHN0YXRlIHdpbGwgYmUgc2V0IGJ5IG9wZW4gb3Igc2hvdworCQkJCWlmIChzLndhc09wZW4gJiYgby5jbG9zYWJsZSkgeworCQkJCQlpZiAoby5hdXRvUmVvcGVuKQorCQkJCQkJb3BlbihwYW5lLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7IC8vIHRydWUgPSBub0FuaW1hdGlvbiwgdHJ1ZSA9IG5vQWxlcnQKKwkJCQkJZWxzZSAvLyBsZWF2ZSB0aGUgcGFuZSBjbG9zZWQsIHNvIGp1c3QgdXBkYXRlIHN0YXRlCisJCQkJCQlzLm5vUm9vbSA9IGZhbHNlOworCQkJCX0KKwkJCQllbHNlCisJCQkJCXNob3cocGFuZSwgcy53YXNPcGVuLCB0cnVlLCB0cnVlKTsgLy8gdHJ1ZSA9IG5vQW5pbWF0aW9uLCB0cnVlID0gbm9BbGVydAorCQkJfQorCQl9CisJCWVsc2UgeyAvLyAhaGFzUm9vbSAtIHBhbmUgQ0FOTk9UIGZpdAorCQkJaWYgKCFzLm5vUm9vbSkgeyAvLyBwYW5lIG5vdCBzZXQgYXMgbm9Sb29tIHlldCwgc28gaGlkZSBvciBjbG9zZSBpdCBub3cuLi4KKwkJCQlzLm5vUm9vbSA9IHRydWU7IC8vIHVwZGF0ZSBzdGF0ZQorCQkJCXMud2FzT3BlbiA9ICFzLmlzQ2xvc2VkICYmICFzLmlzU2xpZGluZzsKKwkJCQlpZiAocy5pc0Nsb3NlZCl7fSAvLyBTS0lQCisJCQkJZWxzZSBpZiAoby5jbG9zYWJsZSkgLy8gJ2Nsb3NlJyBpZiBwb3NzaWJsZQorCQkJCQljbG9zZShwYW5lLCB0cnVlLCB0cnVlKTsgLy8gdHJ1ZSA9IGZvcmNlLCB0cnVlID0gbm9BbmltYXRpb24KKwkJCQllbHNlIC8vICdoaWRlJyBwYW5lIGlmIGNhbm5vdCBqdXN0IGJlIGNsb3NlZAorCQkJCQloaWRlKHBhbmUsIHRydWUpOyAvLyB0cnVlID0gbm9BbmltYXRpb24KKwkJCX0KKwkJfQorCX0KKworCisJLyoqCisJKiBzaXplUGFuZSAvIG1hbnVhbFNpemVQYW5lCisJKiBzaXplUGFuZSBpcyBjYWxsZWQgb25seSBieSBpbnRlcm5hbCBtZXRob2RzIHdoZW5ldmVyIGEgcGFuZSBuZWVkcyB0byBiZSByZXNpemVkCisJKiBtYW51YWxTaXplUGFuZSBpcyBhbiBleHBvc2VkIGZsb3ctdGhyb3VnaCBtZXRob2QgYWxsb3dpbmcgZXh0cmEgY29kZSB3aGVuIHBhbmUgaXMgJ21hbnVhbGx5IHJlc2l6ZWQnCisJKgorCSogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fQlldnRfb3JfcGFuZQkJCQlUaGUgcGFuZSBiZWluZyByZXNpemVkCisJKiBAcGFyYW0ge251bWJlcn0JCQlzaXplCQkJCQlUaGUgKmRlc2lyZWQqIG5ldyBzaXplIGZvciB0aGlzIHBhbmUgLSB3aWxsIGJlIHZhbGlkYXRlZAorCSogQHBhcmFtIHtib29sZWFuPX0JCQlbc2tpcENhbGxiYWNrPWZhbHNlXQlTaG91bGQgdGhlIG9ucmVzaXplIGNhbGxiYWNrIGJlIHJ1bj8KKwkqIEBwYXJhbSB7Ym9vbGVhbj19CQkJW25vQW5pbWF0aW9uPWZhbHNlXQorCSovCissCW1hbnVhbFNpemVQYW5lID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lLCBzaXplLCBza2lwQ2FsbGJhY2ssIG5vQW5pbWF0aW9uKSB7CisJCWlmICghaXNJbml0aWFsaXplZCgpKSByZXR1cm47CisJCXZhcglwYW5lID0gZXZ0UGFuZS5jYWxsKHRoaXMsIGV2dF9vcl9wYW5lKQorCQksCW8JPSBvcHRpb25zW3BhbmVdCisJCSwJcwk9IHN0YXRlW3BhbmVdCisJCS8vCWlmIHJlc2l6aW5nIGNhbGxiYWNrcyBoYXZlIGJlZW4gZGVsYXllZCBhbmQgcmVzaXppbmcgaXMgbm93IERPTkUsIGZvcmNlIHJlc2l6aW5nIHRvIGNvbXBsZXRlLi4uCisJCSwJZm9yY2VSZXNpemUgPSBvLmxpdmVQYW5lUmVzaXppbmcgJiYgIXMuaXNSZXNpemluZworCQk7CisJCS8vIEFOWSBjYWxsIHRvIG1hbnVhbFNpemVQYW5lIGRpc2FibGVzIGF1dG9SZXNpemUgLSBpZSwgcGVyY2VudGFnZSBzaXppbmcKKwkJby5hdXRvUmVzaXplID0gZmFsc2U7CisJCS8vIGZsb3ctdGhyb3VnaC4uLgorCQlzaXplUGFuZShwYW5lLCBzaXplLCBza2lwQ2FsbGJhY2ssIGZvcmNlUmVzaXplLCBub0FuaW1hdGlvbik7IC8vIHdpbGwgYW5pbWF0ZSByZXNpemUgaWYgb3B0aW9uIGVuYWJsZWQKKwl9CisKKwkvKioKKwkqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0JZXZ0X29yX3BhbmUJCQkJVGhlIHBhbmUgYmVpbmcgcmVzaXplZAorCSogQHBhcmFtIHtudW1iZXJ9CQkJc2l6ZQkJCQkJVGhlICpkZXNpcmVkKiBuZXcgc2l6ZSBmb3IgdGhpcyBwYW5lIC0gd2lsbCBiZSB2YWxpZGF0ZWQKKwkqIEBwYXJhbSB7Ym9vbGVhbj19CQkJW3NraXBDYWxsYmFjaz1mYWxzZV0JU2hvdWxkIHRoZSBvbnJlc2l6ZSBjYWxsYmFjayBiZSBydW4/CisJKiBAcGFyYW0ge2Jvb2xlYW49fQkJCVtmb3JjZT1mYWxzZV0JCQlGb3JjZSByZXNpemluZyBldmVuIGlmIGRvZXMgbm90IHNlZW0gbmVjZXNzYXJ5CisJKiBAcGFyYW0ge2Jvb2xlYW49fQkJCVtub0FuaW1hdGlvbj1mYWxzZV0KKwkqLworLAlzaXplUGFuZSA9IGZ1bmN0aW9uIChldnRfb3JfcGFuZSwgc2l6ZSwgc2tpcENhbGxiYWNrLCBmb3JjZSwgbm9BbmltYXRpb24pIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJdmFyCXBhbmUJPSBldnRQYW5lLmNhbGwodGhpcywgZXZ0X29yX3BhbmUpIC8vIHByb2JhYmx5IE5FVkVSIGNhbGxlZCBmcm9tIGV2ZW50PworCQksCW8JCT0gb3B0aW9uc1twYW5lXQorCQksCXMJCT0gc3RhdGVbcGFuZV0KKwkJLAkkUAkJPSAkUHNbcGFuZV0KKwkJLAkkUgkJPSAkUnNbcGFuZV0KKwkJLAlzaWRlCT0gX2NbcGFuZV0uc2lkZS50b0xvd2VyQ2FzZSgpCisJCSwJZGltTmFtZQk9IF9jW3BhbmVdLnNpemVUeXBlLnRvTG93ZXJDYXNlKCkKKwkJLAlpbnNldAk9ICJpbnNldCIrIF9jW3BhbmVdLnNpZGUKKwkJLAlza2lwUmVzaXplV2hpbGVEcmFnZ2luZyA9IHMuaXNSZXNpemluZyAmJiAhby50cmlnZ2VyRXZlbnRzRHVyaW5nTGl2ZVJlc2l6ZQorCQksCWRvRlgJPSBub0FuaW1hdGlvbiAhPT0gdHJ1ZSAmJiBvLmFuaW1hdGVQYW5lU2l6aW5nCisJCSwJb2xkU2l6ZSwgbmV3U2l6ZQorCQk7CisJCS8vIFFVRVVFIGluIGNhc2UgYW5vdGhlciBhY3Rpb24vYW5pbWF0aW9uIGlzIGluIHByb2dyZXNzCisJCSROLnF1ZXVlKGZ1bmN0aW9uKCBxdWV1ZU5leHQgKXsKKwkJCS8vIGNhbGN1bGF0ZSAnY3VycmVudCcgbWluL21heCBzaXplcworCQkJc2V0U2l6ZUxpbWl0cyhwYW5lKTsgLy8gdXBkYXRlIHBhbmUtc3RhdGUKKwkJCW9sZFNpemUgPSBzLnNpemU7CisJCQlzaXplID0gX3BhcnNlU2l6ZShwYW5lLCBzaXplKTsgLy8gaGFuZGxlIHBlcmNlbnRhZ2VzICYgYXV0bworCQkJc2l6ZSA9IG1heChzaXplLCBfcGFyc2VTaXplKHBhbmUsIG8ubWluU2l6ZSkpOworCQkJc2l6ZSA9IG1pbihzaXplLCBzLm1heFNpemUpOworCQkJaWYgKHNpemUgPCBzLm1pblNpemUpIHsgLy8gbm90IGVub3VnaCByb29tIGZvciBwYW5lIQorCQkJCXF1ZXVlTmV4dCgpOyAvLyBjYWxsIGJlZm9yZSBtYWtlUGFuZUZpdCgpIGJlY2F1c2UgaXQgbmVlZHMgdGhlIHF1ZXVlIGZyZWUKKwkJCQltYWtlUGFuZUZpdChwYW5lLCBmYWxzZSwgc2tpcENhbGxiYWNrKTsJLy8gd2lsbCBoaWRlIG9yIGNsb3NlIHBhbmUKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCS8vIElGIG5ld1NpemUgaXMgc2FtZSBhcyBvbGRTaXplLCB0aGVuIG5vdGhpbmcgdG8gZG8gLSBhYm9ydAorCQkJaWYgKCFmb3JjZSAmJiBzaXplID09PSBvbGRTaXplKQorCQkJCXJldHVybiBxdWV1ZU5leHQoKTsKKworCQkJLy8gb25yZXNpemVfc3RhcnQgY2FsbGJhY2sgQ0FOTk9UIGNhbmNlbCByZXNpemluZyBiZWNhdXNlIHRoaXMgd291bGQgYnJlYWsgdGhlIGxheW91dCEKKwkJCWlmICghc2tpcENhbGxiYWNrICYmIHN0YXRlLmluaXRpYWxpemVkICYmIHMuaXNWaXNpYmxlKQorCQkJCV9ydW5DYWxsYmFja3MoIm9ucmVzaXplX3N0YXJ0IiwgcGFuZSk7CisKKwkJCS8vIHJlc2l6ZSB0aGUgcGFuZSwgYW5kIG1ha2Ugc3VyZSBpdHMgdmlzaWJsZQorCQkJbmV3U2l6ZSA9IGNzc1NpemUocGFuZSwgc2l6ZSk7CisKKwkJCWlmIChkb0ZYICYmICRQLmlzKCI6dmlzaWJsZSIpKSB7IC8vIEFOSU1BVEUKKwkJCQl2YXIgZngJCT0gJC5sYXlvdXQuZWZmZWN0cy5zaXplW3BhbmVdIHx8ICQubGF5b3V0LmVmZmVjdHMuc2l6ZS5hbGwKKwkJCQksCWVhc2luZwk9IG8uZnhTZXR0aW5nc19zaXplLmVhc2luZyB8fCBmeC5lYXNpbmcKKwkJCQksCXoJCT0gb3B0aW9ucy56SW5kZXhlcworCQkJCSwJcHJvcHMJPSB7fTsKKwkJCQlwcm9wc1sgZGltTmFtZSBdID0gbmV3U2l6ZSArJ3B4JzsKKwkJCQlzLmlzTW92aW5nID0gdHJ1ZTsKKwkJCQkvLyBvdmVybGF5IGFsbCBlbGVtZW50cyBkdXJpbmcgYW5pbWF0aW9uCisJCQkJJFAuY3NzKHsgekluZGV4OiB6LnBhbmVfYW5pbWF0ZSB9KQorCQkJCSAgLnNob3coKS5hbmltYXRlKCBwcm9wcywgby5meFNwZWVkX3NpemUsIGVhc2luZywgZnVuY3Rpb24oKXsKKwkJCQkJLy8gcmVzZXQgekluZGV4IGFmdGVyIGFuaW1hdGlvbgorCQkJCQkkUC5jc3MoeyB6SW5kZXg6IChzLmlzU2xpZGluZyA/IHoucGFuZV9zbGlkaW5nIDogei5wYW5lX25vcm1hbCkgfSk7CisJCQkJCXMuaXNNb3ZpbmcgPSBmYWxzZTsKKwkJCQkJc2l6ZVBhbmVfMigpOyAvLyBjb250aW51ZQorCQkJCQlxdWV1ZU5leHQoKTsKKwkJCQl9KTsKKwkJCX0KKwkJCWVsc2UgeyAvLyBubyBhbmltYXRpb24KKwkJCQkkUC5jc3MoIGRpbU5hbWUsIG5ld1NpemUgKTsJLy8gcmVzaXplIHBhbmUKKwkJCQkvLyBpZiBwYW5lIGlzIHZpc2libGUsIHRoZW4gCisJCQkJaWYgKCRQLmlzKCI6dmlzaWJsZSIpKQorCQkJCQlzaXplUGFuZV8yKCk7IC8vIGNvbnRpbnVlCisJCQkJZWxzZSB7CisJCQkJCS8vIHBhbmUgaXMgTk9UIFZJU0lCTEUsIHNvIGp1c3QgdXBkYXRlIHN0YXRlIGRhdGEuLi4KKwkJCQkJLy8gd2hlbiBwYW5lIGlzICpuZXh0IG9wZW5lZCosIGl0IHdpbGwgaGF2ZSB0aGUgbmV3IHNpemUKKwkJCQkJcy5zaXplID0gc2l6ZTsJCQkJLy8gdXBkYXRlIHN0YXRlLnNpemUKKwkJCQkJJC5leHRlbmQocywgZWxEaW1zKCRQKSk7CS8vIHVwZGF0ZSBzdGF0ZSBkaW1lbnNpb25zCisJCQkJfQorCQkJCXF1ZXVlTmV4dCgpOworCQkJfTsKKworCQl9KTsKKworCQkvLyBTVUJST1VUSU5FCisJCWZ1bmN0aW9uIHNpemVQYW5lXzIgKCkgeworCQkJLyoJUGFuZXMgYXJlIHNvbWV0aW1lcyBub3Qgc2l6ZWQgcHJlY2lzZWx5IGluIHNvbWUgYnJvd3NlcnMhPworCQkJICoJVGhpcyBjb2RlIHdpbGwgcmVzaXplIHRoZSBwYW5lIHVwIHRvIDMgdGltZXMgdG8gbnVkZ2UgdGhlIHBhbmUgdG8gdGhlIGNvcnJlY3Qgc2l6ZQorCQkJICovCisJCQl2YXIJYWN0dWFsCT0gZGltTmFtZT09PSd3aWR0aCcgPyAkUC5vdXRlcldpZHRoKCkgOiAkUC5vdXRlckhlaWdodCgpCisJCQksCXRyaWVzCT0gW3sKKwkJCQkJCSAgIAlwYW5lOgkJcGFuZQorCQkJCQkJLAljb3VudDoJCTEKKwkJCQkJCSwJdGFyZ2V0OgkJc2l6ZQorCQkJCQkJLAlhY3R1YWw6CQlhY3R1YWwKKwkJCQkJCSwJY29ycmVjdDoJKHNpemUgPT09IGFjdHVhbCkKKwkJCQkJCSwJYXR0ZW1wdDoJc2l6ZQorCQkJCQkJLAljc3NTaXplOgluZXdTaXplCisJCQkJCQl9XQorCQkJLAlsYXN0VHJ5ID0gdHJpZXNbMF0KKwkJCSwJdGhpc1RyeQk9IHt9CisJCQksCW1zZwkJPSAnSW5hY2N1cmF0ZSBzaXplIGFmdGVyIHJlc2l6aW5nIHRoZSAnKyBwYW5lICsnLXBhbmUuJworCQkJOworCQkJd2hpbGUgKCAhbGFzdFRyeS5jb3JyZWN0ICkgeworCQkJCXRoaXNUcnkgPSB7IHBhbmU6IHBhbmUsIGNvdW50OiBsYXN0VHJ5LmNvdW50KzEsIHRhcmdldDogc2l6ZSB9OworCisJCQkJaWYgKGxhc3RUcnkuYWN0dWFsID4gc2l6ZSkKKwkJCQkJdGhpc1RyeS5hdHRlbXB0ID0gbWF4KDAsIGxhc3RUcnkuYXR0ZW1wdCAtIChsYXN0VHJ5LmFjdHVhbCAtIHNpemUpKTsKKwkJCQllbHNlIC8vIGxhc3RUcnkuYWN0dWFsIDwgc2l6ZQorCQkJCQl0aGlzVHJ5LmF0dGVtcHQgPSBtYXgoMCwgbGFzdFRyeS5hdHRlbXB0ICsgKHNpemUgLSBsYXN0VHJ5LmFjdHVhbCkpOworCisJCQkJdGhpc1RyeS5jc3NTaXplID0gY3NzU2l6ZShwYW5lLCB0aGlzVHJ5LmF0dGVtcHQpOworCQkJCSRQLmNzcyggZGltTmFtZSwgdGhpc1RyeS5jc3NTaXplICk7CisKKwkJCQl0aGlzVHJ5LmFjdHVhbAk9IGRpbU5hbWU9PSd3aWR0aCcgPyAkUC5vdXRlcldpZHRoKCkgOiAkUC5vdXRlckhlaWdodCgpOworCQkJCXRoaXNUcnkuY29ycmVjdAk9IChzaXplID09PSB0aGlzVHJ5LmFjdHVhbCk7CisKKwkJCQkvLyBsb2cgYXR0ZW1wdHMgYW5kIGFsZXJ0IHRoZSB1c2VyIG9mIHRoaXMgKm5vbi1mYXRhbCBlcnJvciogKGlmIHNob3dEZWJ1Z01lc3NhZ2VzKQorCQkJCWlmICggdHJpZXMubGVuZ3RoID09PSAxKSB7CisJCQkJCV9sb2cobXNnLCBmYWxzZSwgdHJ1ZSk7CisJCQkJCV9sb2cobGFzdFRyeSwgZmFsc2UsIHRydWUpOworCQkJCX0KKwkJCQlfbG9nKHRoaXNUcnksIGZhbHNlLCB0cnVlKTsKKwkJCQkvLyBhZnRlciA0IHRyaWVzLCBpcyBhcyBjbG9zZSBhcyBpdHMgZ29ubmEgZ2V0IQorCQkJCWlmICh0cmllcy5sZW5ndGggPiAzKSBicmVhazsKKworCQkJCXRyaWVzLnB1c2goIHRoaXNUcnkgKTsKKwkJCQlsYXN0VHJ5ID0gdHJpZXNbIHRyaWVzLmxlbmd0aCAtIDEgXTsKKwkJCX0KKwkJCS8vIEVORCBURVNUSU5HIENPREUKKworCQkJLy8gdXBkYXRlIHBhbmUtc3RhdGUgZGltZW5zaW9ucworCQkJcy5zaXplCT0gc2l6ZTsKKwkJCSQuZXh0ZW5kKHMsIGVsRGltcygkUCkpOworCisJCQlpZiAocy5pc1Zpc2libGUgJiYgJFAuaXMoIjp2aXNpYmxlIikpIHsKKwkJCQkvLyByZXBvc2l0aW9uIHRoZSByZXNpemVyLWJhcgorCQkJCWlmICgkUikgJFIuY3NzKCBzaWRlLCBzaXplICsgc0NbaW5zZXRdICk7CisJCQkJLy8gcmVzaXplIHRoZSBjb250ZW50LWRpdgorCQkJCXNpemVDb250ZW50KHBhbmUpOworCQkJfQorCisJCQlpZiAoIXNraXBDYWxsYmFjayAmJiAhc2tpcFJlc2l6ZVdoaWxlRHJhZ2dpbmcgJiYgc3RhdGUuaW5pdGlhbGl6ZWQgJiYgcy5pc1Zpc2libGUpCisJCQkJX3J1bkNhbGxiYWNrcygib25yZXNpemVfZW5kIiwgcGFuZSk7CisKKwkJCS8vIHJlc2l6ZSBhbGwgdGhlIGFkamFjZW50IHBhbmVzLCBhbmQgYWRqdXN0IHRoZWlyIHRvZ2dsZXIgYnV0dG9ucworCQkJLy8gd2hlbiBza2lwQ2FsbGJhY2sgcGFzc2VkLCBpdCBtZWFucyB0aGUgY29udHJvbGxpbmcgbWV0aG9kIHdpbGwgaGFuZGxlICdvdGhlciBwYW5lcycKKwkJCWlmICghc2tpcENhbGxiYWNrKSB7CisJCQkJLy8gYWxzbyBubyBjYWxsYmFjayBpZiBsaXZlLXJlc2l6ZSBpcyBpbiBwcm9ncmVzcyBhbmQgTk9UIHRyaWdnZXJFdmVudHNEdXJpbmdMaXZlUmVzaXplCisJCQkJaWYgKCFzLmlzU2xpZGluZykgc2l6ZU1pZFBhbmVzKF9jW3BhbmVdLmRpcj09ImhvcnoiID8gIiIgOiAiY2VudGVyIiwgc2tpcFJlc2l6ZVdoaWxlRHJhZ2dpbmcsIGZvcmNlKTsKKwkJCQlzaXplSGFuZGxlcygpOworCQkJfQorCisJCQkvLyBpZiBvcHBvc2l0ZS1wYW5lIHdhcyBhdXRvQ2xvc2VkLCBzZWUgaWYgaXQgY2FuIGJlIGF1dG9PcGVuZWQgbm93CisJCQl2YXIgYWx0UGFuZSA9IF9jLm9wcG9zaXRlRWRnZVtwYW5lXTsKKwkJCWlmIChzaXplIDwgb2xkU2l6ZSAmJiBzdGF0ZVsgYWx0UGFuZSBdLm5vUm9vbSkgeworCQkJCXNldFNpemVMaW1pdHMoIGFsdFBhbmUgKTsKKwkJCQltYWtlUGFuZUZpdCggYWx0UGFuZSwgZmFsc2UsIHNraXBDYWxsYmFjayApOworCQkJfQorCisJCQkvLyBERUJVRyAtIEFMRVJUIHVzZXIvZGV2ZWxvcGVyIHNvIHRoZXkga25vdyB0aGVyZSB3YXMgYSBzaXppbmcgcHJvYmxlbQorCQkJaWYgKHRyaWVzLmxlbmd0aCA+IDEpCisJCQkJX2xvZyhtc2cgKydcblNlZSB0aGUgRXJyb3IgQ29uc29sZSBmb3IgZGV0YWlscy4nLCB0cnVlLCB0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSogQHNlZSAgaW5pdFBhbmVzKCksIHNpemVQYW5lKCksIHJlc2l6ZUFsbCgpLCBvcGVuKCksIGNsb3NlKCksIGhpZGUoKQorCSogQHBhcmFtIHtBcnJheS48c3RyaW5nPnxzdHJpbmd9IHBhbmVzCQkJCQlUaGUgcGFuZShzKSBiZWluZyByZXNpemVkLCBjb21tYS1kZWxtaXRlZCBzdHJpbmcKKwkqIEBwYXJhbSB7Ym9vbGVhbj19CQkJCVtza2lwQ2FsbGJhY2s9ZmFsc2VdCVNob3VsZCB0aGUgb25yZXNpemUgY2FsbGJhY2sgYmUgcnVuPworCSogQHBhcmFtIHtib29sZWFuPX0JCQkJW2ZvcmNlPWZhbHNlXQorCSovCissCXNpemVNaWRQYW5lcyA9IGZ1bmN0aW9uIChwYW5lcywgc2tpcENhbGxiYWNrLCBmb3JjZSkgeworCQlwYW5lcyA9IChwYW5lcyA/IHBhbmVzIDogImVhc3Qsd2VzdCxjZW50ZXIiKS5zcGxpdCgiLCIpOworCisJCSQuZWFjaChwYW5lcywgZnVuY3Rpb24gKGksIHBhbmUpIHsKKwkJCWlmICghJFBzW3BhbmVdKSByZXR1cm47IC8vIE5PIFBBTkUgLSBza2lwCisJCQl2YXIgCisJCQkJbwkJPSBvcHRpb25zW3BhbmVdCisJCQksCXMJCT0gc3RhdGVbcGFuZV0KKwkJCSwJJFAJCT0gJFBzW3BhbmVdCisJCQksCSRSCQk9ICRSc1twYW5lXQorCQkJLAlpc0NlbnRlcj0gKHBhbmU9PSJjZW50ZXIiKQorCQkJLAloYXNSb29tCT0gdHJ1ZQorCQkJLAlDU1MJCT0ge30KKwkJCSwJbmV3Q2VudGVyCT0gY2FsY05ld0NlbnRlclBhbmVEaW1zKCkKKwkJCTsKKwkJCS8vIHVwZGF0ZSBwYW5lLXN0YXRlIGRpbWVuc2lvbnMKKwkJCSQuZXh0ZW5kKHMsIGVsRGltcygkUCkpOworCisJCQlpZiAocGFuZSA9PT0gImNlbnRlciIpIHsKKwkJCQlpZiAoIWZvcmNlICYmIHMuaXNWaXNpYmxlICYmIG5ld0NlbnRlci53aWR0aCA9PT0gcy5vdXRlcldpZHRoICYmIG5ld0NlbnRlci5oZWlnaHQgPT09IHMub3V0ZXJIZWlnaHQpCisJCQkJCXJldHVybiB0cnVlOyAvLyBTS0lQIC0gcGFuZSBhbHJlYWR5IHRoZSBjb3JyZWN0IHNpemUKKwkJCQkvLyBzZXQgc3RhdGUgZm9yIG1ha2VQYW5lRml0KCkgbG9naWMKKwkJCQkkLmV4dGVuZChzLCBjc3NNaW5EaW1zKHBhbmUpLCB7CisJCQkJCW1heFdpZHRoOgluZXdDZW50ZXIud2lkdGgKKwkJCQksCW1heEhlaWdodDoJbmV3Q2VudGVyLmhlaWdodAorCQkJCX0pOworCQkJCUNTUyA9IG5ld0NlbnRlcjsKKwkJCQkvLyBjb252ZXJ0IE9VVEVSIHdpZHRoL2hlaWdodCB0byBDU1Mgd2lkdGgvaGVpZ2h0IAorCQkJCUNTUy53aWR0aAk9IGNzc1coJFAsIENTUy53aWR0aCk7CisJCQkJLy8gTkVXIC0gYWxsb3cgcGFuZSB0byBleHRlbmQgJ2JlbG93JyB2aXNpYmxlIGFyZWEgcmF0aGVyIHRoYW4gaGlkZSBpdAorCQkJCUNTUy5oZWlnaHQJPSBjc3NIKCRQLCBDU1MuaGVpZ2h0KTsKKwkJCQloYXNSb29tCQk9IENTUy53aWR0aCA+PSAwICYmIENTUy5oZWlnaHQgPj0gMDsgLy8gaGVpZ2h0ID49IDAgPSBBTFdBWVMgVFJVRSBOT1cKKwkJCQkvLyBkdXJpbmcgbGF5b3V0IGluaXQsIHRyeSB0byBzaHJpbmsgZWFzdC93ZXN0IHBhbmVzIHRvIG1ha2Ugcm9vbSBmb3IgY2VudGVyCisJCQkJaWYgKCFzdGF0ZS5pbml0aWFsaXplZCAmJiBvLm1pbldpZHRoID4gcy5vdXRlcldpZHRoKSB7CisJCQkJCXZhcgorCQkJCQkJcmVxUHgJPSBvLm1pbldpZHRoIC0gcy5vdXRlcldpZHRoCisJCQkJCSwJbWluRQk9IG9wdGlvbnMuZWFzdC5taW5TaXplIHx8IDAKKwkJCQkJLAltaW5XCT0gb3B0aW9ucy53ZXN0Lm1pblNpemUgfHwgMAorCQkJCQksCXNpemVFCT0gc3RhdGUuZWFzdC5zaXplCisJCQkJCSwJc2l6ZVcJPSBzdGF0ZS53ZXN0LnNpemUKKwkJCQkJLAluZXdFCT0gc2l6ZUUKKwkJCQkJLAluZXdXCT0gc2l6ZVcKKwkJCQkJOworCQkJCQlpZiAocmVxUHggPiAwICYmIHN0YXRlLmVhc3QuaXNWaXNpYmxlICYmIHNpemVFID4gbWluRSkgeworCQkJCQkJbmV3RSA9IG1heCggc2l6ZUUtbWluRSwgc2l6ZUUtcmVxUHggKTsKKwkJCQkJCXJlcVB4IC09IHNpemVFLW5ld0U7CisJCQkJCX0KKwkJCQkJaWYgKHJlcVB4ID4gMCAmJiBzdGF0ZS53ZXN0LmlzVmlzaWJsZSAmJiBzaXplVyA+IG1pblcpIHsKKwkJCQkJCW5ld1cgPSBtYXgoIHNpemVXLW1pblcsIHNpemVXLXJlcVB4ICk7CisJCQkJCQlyZXFQeCAtPSBzaXplVy1uZXdXOworCQkJCQl9CisJCQkJCS8vIElGIHdlIGZvdW5kIGVub3VnaCBleHRyYSBzcGFjZSwgdGhlbiByZXNpemUgdGhlIGJvcmRlciBwYW5lcyBhcyBjYWxjdWxhdGVkCisJCQkJCWlmIChyZXFQeCA9PT0gMCkgeworCQkJCQkJaWYgKHNpemVFICYmIHNpemVFICE9IG1pbkUpCisJCQkJCQkJc2l6ZVBhbmUoJ2Vhc3QnLCBuZXdFLCB0cnVlLCBmb3JjZSwgdHJ1ZSk7IC8vIHRydWUgPSBza2lwQ2FsbGJhY2svbm9BbmltYXRpb24gLSBpbml0UGFuZXMgd2lsbCBoYW5kbGUgd2hlbiBkb25lCisJCQkJCQlpZiAoc2l6ZVcgJiYgc2l6ZVcgIT0gbWluVykKKwkJCQkJCQlzaXplUGFuZSgnd2VzdCcsIG5ld1csIHRydWUsIGZvcmNlLCB0cnVlKTsKKwkJCQkJCS8vIG5vdyBzdGFydCBvdmVyIQorCQkJCQkJc2l6ZU1pZFBhbmVzKCdjZW50ZXInLCBza2lwQ2FsbGJhY2ssIGZvcmNlKTsKKwkJCQkJCXJldHVybjsgLy8gYWJvcnQgdGhpcyBsb29wCisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsgLy8gZm9yIGVhc3QgYW5kIHdlc3QsIHNldCBvbmx5IHRoZSBoZWlnaHQsIHdoaWNoIGlzIHNhbWUgYXMgY2VudGVyIGhlaWdodAorCQkJCS8vIHNldCBzdGF0ZS5taW4vbWF4V2lkdGgvSGVpZ2h0IGZvciBtYWtlUGFuZUZpdCgpIGxvZ2ljCisJCQkJaWYgKHMuaXNWaXNpYmxlICYmICFzLm5vVmVydGljYWxSb29tKQorCQkJCQkkLmV4dGVuZChzLCBlbERpbXMoJFApLCBjc3NNaW5EaW1zKHBhbmUpKQorCQkJCWlmICghZm9yY2UgJiYgIXMubm9WZXJ0aWNhbFJvb20gJiYgbmV3Q2VudGVyLmhlaWdodCA9PT0gcy5vdXRlckhlaWdodCkKKwkJCQkJcmV0dXJuIHRydWU7IC8vIFNLSVAgLSBwYW5lIGFscmVhZHkgdGhlIGNvcnJlY3Qgc2l6ZQorCQkJCS8vIGVhc3Qvd2VzdCBoYXZlIHNhbWUgdG9wLCBib3R0b20gJiBoZWlnaHQgYXMgY2VudGVyCisJCQkJQ1NTLnRvcAkJPSBuZXdDZW50ZXIudG9wOworCQkJCUNTUy5ib3R0b20JPSBuZXdDZW50ZXIuYm90dG9tOworCQkJCS8vIE5FVyAtIGFsbG93IHBhbmUgdG8gZXh0ZW5kICdiZWxvdycgdmlzaWJsZSBhcmVhIHJhdGhlciB0aGFuIGhpZGUgaXQKKwkJCQlDU1MuaGVpZ2h0CT0gY3NzSCgkUCwgbmV3Q2VudGVyLmhlaWdodCk7CisJCQkJcy5tYXhIZWlnaHQJPSBDU1MuaGVpZ2h0OworCQkJCWhhc1Jvb20JCT0gKHMubWF4SGVpZ2h0ID49IDApOyAvLyBBTFdBWVMgVFJVRSBOT1cKKwkJCQlpZiAoIWhhc1Jvb20pIHMubm9WZXJ0aWNhbFJvb20gPSB0cnVlOyAvLyBtYWtlUGFuZUZpdCgpIGxvZ2ljCisJCQl9CisKKwkJCWlmIChoYXNSb29tKSB7CisJCQkJLy8gcmVzaXplQWxsIHBhc3NlcyBza2lwQ2FsbGJhY2sgYmVjYXVzZSBpdCB0cmlnZ2VycyBjYWxsYmFja3MgYWZ0ZXIgQUxMIHBhbmVzIGFyZSByZXNpemVkCisJCQkJaWYgKCFza2lwQ2FsbGJhY2sgJiYgc3RhdGUuaW5pdGlhbGl6ZWQpCisJCQkJCV9ydW5DYWxsYmFja3MoIm9ucmVzaXplX3N0YXJ0IiwgcGFuZSk7CisKKwkJCQkkUC5jc3MoQ1NTKTsgLy8gYXBwbHkgdGhlIENTUyB0byBwYW5lCisJCQkJaWYgKHBhbmUgIT09ICJjZW50ZXIiKQorCQkJCQlzaXplSGFuZGxlcyhwYW5lKTsgLy8gYWxzbyB1cGRhdGUgcmVzaXplciBsZW5ndGgKKwkJCQlpZiAocy5ub1Jvb20gJiYgIXMuaXNDbG9zZWQgJiYgIXMuaXNIaWRkZW4pCisJCQkJCW1ha2VQYW5lRml0KHBhbmUpOyAvLyB3aWxsIHJlLW9wZW4vc2hvdyBhdXRvLWNsb3NlZC9oaWRkZW4gcGFuZQorCQkJCWlmIChzLmlzVmlzaWJsZSkgeworCQkJCQkkLmV4dGVuZChzLCBlbERpbXMoJFApKTsgLy8gdXBkYXRlIHBhbmUgZGltZW5zaW9ucworCQkJCQlpZiAoc3RhdGUuaW5pdGlhbGl6ZWQpIHNpemVDb250ZW50KHBhbmUpOyAvLyBhbHNvIHJlc2l6ZSB0aGUgY29udGVudHMsIGlmIGV4aXN0cworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKCFzLm5vUm9vbSAmJiBzLmlzVmlzaWJsZSkgLy8gbm8gcm9vbSBmb3IgcGFuZQorCQkJCW1ha2VQYW5lRml0KHBhbmUpOyAvLyB3aWxsIGhpZGUgb3IgY2xvc2UgcGFuZQorCisJCQlpZiAoIXMuaXNWaXNpYmxlKQorCQkJCXJldHVybiB0cnVlOyAvLyBET05FIC0gbmV4dCBwYW5lCisKKwkJCS8qCisJCQkqIEV4dHJhIENTUyBmb3IgSUU2IG9yIElFNyBpbiBRdWlya3MtbW9kZSAtIGFkZCAnd2lkdGgnIHRvIE5PUlRIL1NPVVRIIHBhbmVzCisJCQkqIE5vcm1hbGx5IHRoZXNlIHBhbmVzIGhhdmUgb25seSAnbGVmdCcgJiAncmlnaHQnIHBvc2l0aW9ucyBzbyBwYW5lIGF1dG8tc2l6ZXMKKwkJCSogQUxTTyByZXF1aXJlZCB3aGVuIHBhbmUgaXMgYW4gSUZSQU1FIGJlY2F1c2Ugd2lsbCBOT1QgZGVmYXVsdCB0byAnZnVsbCB3aWR0aCcKKwkJCSoJVE9ETzogQ2FuIEkgdXNlIHdpZHRoOjEwMCUgZm9yIGEgbm9ydGgvc291dGggaWZyYW1lPworCQkJKglUT0RPOiBTb3VuZHMgbGlrZSBhIGpvYiBmb3IgJFAub3V0ZXJXaWR0aCggc0MuaW5uZXJXaWR0aCApIFNFVFRFUiBNRVRIT0QKKwkJCSovCisJCQlpZiAocGFuZSA9PT0gImNlbnRlciIpIHsgLy8gZmluaXNoZWQgcHJvY2Vzc2luZyBtaWRQYW5lcworCQkJCXZhciBmaXggPSBicm93c2VyLmlzSUU2IHx8ICFicm93c2VyLmJveE1vZGVsOworCQkJCWlmICgkUHMubm9ydGggJiYgKGZpeCB8fCBzdGF0ZS5ub3J0aC50YWdOYW1lPT0iSUZSQU1FIikpIAorCQkJCQkkUHMubm9ydGguY3NzKCJ3aWR0aCIsIGNzc1coJFBzLm5vcnRoLCBzQy5pbm5lcldpZHRoKSk7CisJCQkJaWYgKCRQcy5zb3V0aCAmJiAoZml4IHx8IHN0YXRlLnNvdXRoLnRhZ05hbWU9PSJJRlJBTUUiKSkKKwkJCQkJJFBzLnNvdXRoLmNzcygid2lkdGgiLCBjc3NXKCRQcy5zb3V0aCwgc0MuaW5uZXJXaWR0aCkpOworCQkJfQorCisJCQkvLyByZXNpemVBbGwgcGFzc2VzIHNraXBDYWxsYmFjayBiZWNhdXNlIGl0IHRyaWdnZXJzIGNhbGxiYWNrcyBhZnRlciBBTEwgcGFuZXMgYXJlIHJlc2l6ZWQKKwkJCWlmICghc2tpcENhbGxiYWNrICYmIHN0YXRlLmluaXRpYWxpemVkKQorCQkJCV9ydW5DYWxsYmFja3MoIm9ucmVzaXplX2VuZCIsIHBhbmUpOworCQl9KTsKKwl9CisKKworCS8qKgorCSogQHNlZSAgd2luZG93Lm9ucmVzaXplKCksIGNhbGxiYWNrcyBvciBjdXN0b20gY29kZQorCSovCissCXJlc2l6ZUFsbCA9IGZ1bmN0aW9uIChldnQpIHsKKwkJLy8gc3RvcFByb3BhZ2F0aW9uIGlmIGNhbGxlZCBieSB0cmlnZ2VyKCJsYXlvdXRkZXN0cm95IikgLSB1c2UgZXZ0UGFuZSB1dGlsaXR5IAorCQlldnRQYW5lKGV2dCk7CisKKwkJaWYgKCFzdGF0ZS5pbml0aWFsaXplZCkgeworCQkJX2luaXRMYXlvdXRFbGVtZW50cygpOworCQkJcmV0dXJuOyAvLyBubyBuZWVkIHRvIHJlc2l6ZSBzaW5jZSB3ZSBqdXN0IGluaXRpYWxpemVkIQorCQl9CisJCXZhcglvbGRXCT0gc0MuaW5uZXJXaWR0aAorCQksCW9sZEgJPSBzQy5pbm5lckhlaWdodAorCQk7CisJCS8vIGNhbm5vdCBzaXplIGxheW91dCB3aGVuICdjb250YWluZXInIGlzIGhpZGRlbiBvciBjb2xsYXBzZWQKKwkJaWYgKCEkTi5pcygiOnZpc2libGUiKSApIHJldHVybjsKKwkJJC5leHRlbmQoc3RhdGUuY29udGFpbmVyLCBlbERpbXMoICROICkpOyAvLyBVUERBVEUgY29udGFpbmVyIGRpbWVuc2lvbnMKKwkJaWYgKCFzQy5vdXRlckhlaWdodCkgcmV0dXJuOworCisJCS8vIG9ucmVzaXplYWxsX3N0YXJ0IHdpbGwgQ0FOQ0VMIHJlc2l6aW5nIGlmIHJldHVybnMgZmFsc2UKKwkJLy8gc3RhdGUuY29udGFpbmVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0LCBzbyB1c2VyIGNhbiBhY2Nlc3MgdGhpcyBpbmZvIGZvciBjYWxjdWF0aW9ucworCQlpZiAoZmFsc2UgPT09IF9ydW5DYWxsYmFja3MoIm9ucmVzaXplYWxsX3N0YXJ0IikpIHJldHVybiBmYWxzZTsKKworCQl2YXIJLy8gc2VlIGlmIGNvbnRhaW5lciBpcyBub3cgJ3NtYWxsZXInIHRoYW4gYmVmb3JlCisJCQlzaHJ1bmtICT0gKHNDLmlubmVySGVpZ2h0IDwgb2xkSCkKKwkJLAlzaHJ1bmtXCT0gKHNDLmlubmVyV2lkdGggPCBvbGRXKQorCQksCSRQLCBvLCBzLCBkaXIKKwkJOworCQkvLyBOT1RFIHNwZWNpYWwgb3JkZXIgZm9yIHNpemluZzogUy1OLUUtVworCQkkLmVhY2goWyJzb3V0aCIsIm5vcnRoIiwiZWFzdCIsIndlc3QiXSwgZnVuY3Rpb24gKGksIHBhbmUpIHsKKwkJCWlmICghJFBzW3BhbmVdKSByZXR1cm47IC8vIG5vIHBhbmUgLSBTS0lQCisJCQlzCT0gc3RhdGVbcGFuZV07CisJCQlvCT0gb3B0aW9uc1twYW5lXTsKKwkJCWRpcgk9IF9jW3BhbmVdLmRpcjsKKworCQkJaWYgKG8uYXV0b1Jlc2l6ZSAmJiBzLnNpemUgIT0gby5zaXplKSAvLyByZXNpemUgcGFuZSB0byBvcmlnaW5hbCBzaXplIHNldCBpbiBvcHRpb25zCisJCQkJc2l6ZVBhbmUocGFuZSwgby5zaXplLCB0cnVlLCB0cnVlLCB0cnVlKTsgLy8gdHJ1ZT1za2lwQ2FsbGJhY2svZm9yY2VSZXNpemUvbm9BbmltYXRpb24KKwkJCWVsc2UgeworCQkJCXNldFNpemVMaW1pdHMocGFuZSk7CisJCQkJbWFrZVBhbmVGaXQocGFuZSwgZmFsc2UsIHRydWUsIHRydWUpOyAvLyB0cnVlPXNraXBDYWxsYmFjay9mb3JjZVJlc2l6ZQorCQkJfQorCQl9KTsKKworCQlzaXplTWlkUGFuZXMoIiIsIHRydWUsIHRydWUpOyAvLyB0cnVlPXNraXBDYWxsYmFjaywgdHJ1ZT1mb3JjZVJlc2l6ZQorCQlzaXplSGFuZGxlcygpOyAvLyByZXBvc2l0aW9uIHRoZSB0b2dnbGVyIGVsZW1lbnRzCisKKwkJLy8gdHJpZ2dlciBhbGwgaW5kaXZpZHVhbCBwYW5lIGNhbGxiYWNrcyBBRlRFUiBsYXlvdXQgaGFzIGZpbmlzaGVkIHJlc2l6aW5nCisJCW8gPSBvcHRpb25zOyAvLyByZXVzZSBhbGlhcworCQkkLmVhY2goX2MuYWxsUGFuZXMsIGZ1bmN0aW9uIChpLCBwYW5lKSB7CisJCQkkUCA9ICRQc1twYW5lXTsKKwkJCWlmICghJFApIHJldHVybjsgLy8gU0tJUAorCQkJaWYgKHN0YXRlW3BhbmVdLmlzVmlzaWJsZSkgLy8gdW5kZWZpbmVkIGZvciBub24tZXhpc3RlbnQgcGFuZXMKKwkJCQlfcnVuQ2FsbGJhY2tzKCJvbnJlc2l6ZV9lbmQiLCBwYW5lKTsgLy8gY2FsbGJhY2sgLSBpZiBleGlzdHMKKwkJfSk7CisKKwkJX3J1bkNhbGxiYWNrcygib25yZXNpemVhbGxfZW5kIik7CisJCS8vX3RyaWdnZXJMYXlvdXRFdmVudChwYW5lLCAncmVzaXplYWxsJyk7CisJfQorCisJLyoqCisJKiBXaGVuZXZlciBhIHBhbmUgcmVzaXplcyBvciBvcGVucyB0aGF0IGhhcyBhIG5lc3RlZCBsYXlvdXQsIHRyaWdnZXIgcmVzaXplQWxsCisJKgorCSogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fQlldnRfb3JfcGFuZQkJVGhlIHBhbmUganVzdCByZXNpemVkIG9yIG9wZW5lZAorCSovCissCXJlc2l6ZUNoaWxkTGF5b3V0ID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lKSB7CisJCXZhcglwYW5lID0gZXZ0UGFuZS5jYWxsKHRoaXMsIGV2dF9vcl9wYW5lKTsKKwkJaWYgKCFvcHRpb25zW3BhbmVdLnJlc2l6ZUNoaWxkTGF5b3V0KSByZXR1cm47CisJCXZhcgkkUAk9ICRQc1twYW5lXQorCQksCSRDCT0gJENzW3BhbmVdCisJCSwJZAk9ICJsYXlvdXQiCisJCSwJUAk9IEluc3RhbmNlW3BhbmVdCisJCSwJTAk9IGNoaWxkcmVuW3BhbmVdCisJCTsKKwkJLy8gdXNlciBtYXkgaGF2ZSBtYW51YWxseSBzZXQgRUlUSEVSIGluc3RhbmNlIHBvaW50ZXIsIHNvIGhhbmRsZSB0aGF0CisJCWlmIChQLmNoaWxkICYmICFMKSB7CisJCQkvLyBoYXZlIHRvIHJldmVyc2UgdGhlIHBvaW50ZXJzIQorCQkJdmFyIGVsID0gUC5jaGlsZC5jb250YWluZXI7CisJCQlMID0gY2hpbGRyZW5bcGFuZV0gPSAoZWwgPyBlbC5kYXRhKGQpIDogMCkgfHwgbnVsbDsgLy8gc2V0IHBvaW50ZXIgX2RpcmVjdGx5XyB0byBsYXlvdXQgaW5zdGFuY2UKKwkJfQorCisJCS8vIGlmIGEgbGF5b3V0LXBvaW50ZXIgZXhpc3RzLCBzZWUgaWYgY2hpbGQgaGFzIGJlZW4gZGVzdHJveWVkCisJCWlmIChMICYmIEwuZGVzdHJveWVkKQorCQkJTCA9IGNoaWxkcmVuW3BhbmVdID0gbnVsbDsgLy8gY2xlYXIgY2hpbGQgcG9pbnRlcnMKKwkJLy8gbm8gY2hpbGQgbGF5b3V0IHBvaW50ZXIgaXMgc2V0IC0gc2VlIGlmIHRoZXJlIGlzIGEgY2hpbGQgbGF5b3V0IE5PVworCQlpZiAoIUwpCUwgPSBjaGlsZHJlbltwYW5lXSA9ICRQLmRhdGEoZCkgfHwgKCRDID8gJEMuZGF0YShkKSA6IDApIHx8IG51bGw7IC8vIHNldC91cGRhdGUgY2hpbGQgcG9pbnRlcnMKKworCQkvLyBBTFdBWVMgcmVmcmVzaCB0aGUgcGFuZS5jaGlsZCBhbGlhcworCQlQLmNoaWxkID0gY2hpbGRyZW5bcGFuZV07CisKKwkJaWYgKEwpIEwucmVzaXplQWxsKCk7CisJfQorCisKKwkvKioKKwkqIElGIHBhbmUgaGFzIGEgY29udGVudC1kaXYsIHRoZW4gcmVzaXplIGFsbCBlbGVtZW50cyBpbnNpZGUgcGFuZSB0byBmaXQgcGFuZS1oZWlnaHQKKwkqCisJKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9CWV2dF9vcl9wYW5lcwkJVGhlIHBhbmUocykgYmVpbmcgcmVzaXplZAorCSogQHBhcmFtIHtib29sZWFuPX0JCQlbcmVtZWFzdXJlPWZhbHNlXQlTaG91bGQgdGhlIGNvbnRlbnQgKGhlYWRlci9mb290ZXIpIGJlIHJlbWVhc3VyZWQ/CisJKi8KKywJc2l6ZUNvbnRlbnQgPSBmdW5jdGlvbiAoZXZ0X29yX3BhbmVzLCByZW1lYXN1cmUpIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKworCQl2YXIgcGFuZXMgPSBldnRQYW5lLmNhbGwodGhpcywgZXZ0X29yX3BhbmVzKTsKKwkJcGFuZXMgPSBwYW5lcyA/IHBhbmVzLnNwbGl0KCIsIikgOiBfYy5hbGxQYW5lczsKKworCQkkLmVhY2gocGFuZXMsIGZ1bmN0aW9uIChpZHgsIHBhbmUpIHsKKwkJCXZhcgorCQkJCSRQCT0gJFBzW3BhbmVdCisJCQksCSRDCT0gJENzW3BhbmVdCisJCQksCW8JPSBvcHRpb25zW3BhbmVdCisJCQksCXMJPSBzdGF0ZVtwYW5lXQorCQkJLAltCT0gcy5jb250ZW50IC8vIG0gPSBtZWFzdXJlbWVudHMKKwkJCTsKKwkJCWlmICghJFAgfHwgISRDIHx8ICEkUC5pcygiOnZpc2libGUiKSkgcmV0dXJuIHRydWU7IC8vIE5PVCBWSVNJQkxFIC0gc2tpcAorCisJCQkvLyBpZiBjb250ZW50LWVsZW1lbnQgd2FzIFJFTU9WRUQsIHVwZGF0ZSBPUiByZW1vdmUgdGhlIHBvaW50ZXIKKwkJCWlmICghJEMubGVuZ3RoKSB7CisJCQkJaW5pdENvbnRlbnQocGFuZSwgZmFsc2UpOwkvLyBmYWxzZSA9IGRvIE5PVCBzaXplQ29udGVudCgpIC0gYWxyZWFkeSB0aGVyZSEKKwkJCQlpZiAoISRDKSByZXR1cm47CQkJLy8gbm8gcmVwbGFjZW1lbnQgZWxlbWVudCBmb3VuZCAtIHBvaW50ZXIgaGF2ZSBiZWVuIHJlbW92ZWQKKwkJCX0KKworCQkJLy8gb25zaXplY29udGVudF9zdGFydCB3aWxsIENBTkNFTCByZXNpemluZyBpZiByZXR1cm5zIGZhbHNlCisJCQlpZiAoZmFsc2UgPT09IF9ydW5DYWxsYmFja3MoIm9uc2l6ZWNvbnRlbnRfc3RhcnQiLCBwYW5lKSkgcmV0dXJuOworCisJCQkvLyBza2lwIHJlLW1lYXN1cmluZyBvZmZzZXRzIGlmIGxpdmUtcmVzaXppbmcKKwkJCWlmICgoIXMuaXNNb3ZpbmcgJiYgIXMuaXNSZXNpemluZykgfHwgby5saXZlQ29udGVudFJlc2l6aW5nIHx8IHJlbWVhc3VyZSB8fCBtLnRvcCA9PSB1bmRlZmluZWQpIHsKKwkJCQlfbWVhc3VyZSgpOworCQkJCS8vIGlmIGFueSBmb290ZXJzIGFyZSBiZWxvdyBwYW5lLWJvdHRvbSwgdGhleSBtYXkgbm90IG1lYXN1cmUgY29ycmVjdGx5LAorCQkJCS8vIHNvIGFsbG93IHBhbmUgb3ZlcmZsb3cgYW5kIHJlLW1lYXN1cmUKKwkJCQlpZiAobS5oaWRkZW5Gb290ZXJzID4gMCAmJiAkUC5jc3MoIm92ZXJmbG93IikgPT09ICJoaWRkZW4iKSB7CisJCQkJCSRQLmNzcygib3ZlcmZsb3ciLCAidmlzaWJsZSIpOworCQkJCQlfbWVhc3VyZSgpOyAvLyByZW1lYXN1cmUgd2hpbGUgb3ZlcmZsb3dpbmcKKwkJCQkJJFAuY3NzKCJvdmVyZmxvdyIsICJoaWRkZW4iKTsKKwkJCQl9CisJCQl9CisJCQkvLyBOT1RFOiBzcGFjZUFib3ZlL0JlbG93ICppbmNsdWRlcyogdGhlIHBhbmUgcGFkZGluZ1RvcC9Cb3R0b20sIGJ1dCBub3QgcGFuZS5ib3JkZXJzCisJCQl2YXIgbmV3SCA9IHMuaW5uZXJIZWlnaHQgLSAobS5zcGFjZUFib3ZlIC0gcy5jc3MucGFkZGluZ1RvcCkgLSAobS5zcGFjZUJlbG93IC0gcy5jc3MucGFkZGluZ0JvdHRvbSk7CisKKwkJCWlmICghJEMuaXMoIjp2aXNpYmxlIikgfHwgbS5oZWlnaHQgIT0gbmV3SCkgeworCQkJCS8vIHNpemUgdGhlIENvbnRlbnQgZWxlbWVudCB0byBmaXQgbmV3IHBhbmUtc2l6ZSAtIHdpbGwgYXV0b0hpZGUgaWYgbm90IGVub3VnaCByb29tCisJCQkJc2V0T3V0ZXJIZWlnaHQoJEMsIG5ld0gsIHRydWUpOyAvLyB0cnVlPWF1dG9IaWRlCisJCQkJbS5oZWlnaHQgPSBuZXdIOyAvLyBzYXZlIG5ldyBoZWlnaHQKKwkJCX07CisKKwkJCWlmIChzdGF0ZS5pbml0aWFsaXplZCkKKwkJCQlfcnVuQ2FsbGJhY2tzKCJvbnNpemVjb250ZW50X2VuZCIsIHBhbmUpOworCisJCQlmdW5jdGlvbiBfYmVsb3cgKCRFKSB7CisJCQkJcmV0dXJuIG1heChzLmNzcy5wYWRkaW5nQm90dG9tLCAocGFyc2VJbnQoJEUuY3NzKCJtYXJnaW5Cb3R0b20iKSwgMTApIHx8IDApKTsKKwkJCX07CisKKwkJCWZ1bmN0aW9uIF9tZWFzdXJlICgpIHsKKwkJCQl2YXIKKwkJCQkJaWdub3JlCT0gb3B0aW9uc1twYW5lXS5jb250ZW50SWdub3JlU2VsZWN0b3IKKwkJCQksCSRGcwkJPSAkQy5uZXh0QWxsKCkubm90KGlnbm9yZSB8fCAnOmx0KDApJykgLy8gbm90IDpsdCgwKSA9IEFMTAorCQkJCSwJJEZzX3Zpcwk9ICRGcy5maWx0ZXIoJzp2aXNpYmxlJykKKwkJCQksCSRGCQk9ICRGc192aXMuZmlsdGVyKCc6bGFzdCcpCisJCQkJOworCQkJCW0gPSB7CisJCQkJCXRvcDoJCQkkQ1swXS5vZmZzZXRUb3AKKwkJCQksCWhlaWdodDoJCQkkQy5vdXRlckhlaWdodCgpCisJCQkJLAludW1Gb290ZXJzOgkJJEZzLmxlbmd0aAorCQkJCSwJaGlkZGVuRm9vdGVyczoJJEZzLmxlbmd0aCAtICRGc192aXMubGVuZ3RoCisJCQkJLAlzcGFjZUJlbG93OgkJMCAvLyBjb3JyZWN0IGlmIG5vIGNvbnRlbnQgZm9vdGVyICgkRSkKKwkJCQl9CisJCQkJCW0uc3BhY2VBYm92ZQk9IG0udG9wOyAvLyBqdXN0IGZvciBzdGF0ZSAtIG5vdCB1c2VkIGluIGNhbGMKKwkJCQkJbS5ib3R0b20JCT0gbS50b3AgKyBtLmhlaWdodDsKKwkJCQlpZiAoJEYubGVuZ3RoKQorCQkJCQkvL3NwYWNlQmVsb3cgPSAoTGFzdEZvb3Rlci50b3AgKyBMYXN0Rm9vdGVyLmhlaWdodCkgW2Zvb3RlckJvdHRvbV0gLSBDb250ZW50LmJvdHRvbSArIG1heChMYXN0Rm9vdGVyLm1hcmdpbkJvdHRvbSwgcGFuZS5wYWRkaW5nQm90b20pCisJCQkJCW0uc3BhY2VCZWxvdyA9ICgkRlswXS5vZmZzZXRUb3AgKyAkRi5vdXRlckhlaWdodCgpKSAtIG0uYm90dG9tICsgX2JlbG93KCRGKTsKKwkJCQllbHNlIC8vIG5vIGZvb3RlciAtIGNoZWNrIG1hcmdpbkJvdHRvbSBvbiBDb250ZW50IGVsZW1lbnQgaXRzZWxmCisJCQkJCW0uc3BhY2VCZWxvdyA9IF9iZWxvdygkQyk7CisJCQl9OworCQl9KTsKKwl9CisKKworCS8qKgorCSogQ2FsbGVkIGV2ZXJ5IHRpbWUgYSBwYW5lIGlzIG9wZW5lZCwgY2xvc2VkLCBvciByZXNpemVkIHRvIHNsaWRlIHRoZSB0b2dnbGVycyB0byAnY2VudGVyJyBhbmQgYWRqdXN0IHRoZWlyIGxlbmd0aCBpZiBuZWNlc3NhcnkKKwkqCisJKiBAc2VlICBpbml0SGFuZGxlcygpLCBvcGVuKCksIGNsb3NlKCksIHJlc2l6ZUFsbCgpCisJKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9CWV2dF9vcl9wYW5lcwkJVGhlIHBhbmUocykgYmVpbmcgcmVzaXplZAorCSovCissCXNpemVIYW5kbGVzID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lcykgeworCQl2YXIgcGFuZXMgPSBldnRQYW5lLmNhbGwodGhpcywgZXZ0X29yX3BhbmVzKQorCQlwYW5lcyA9IHBhbmVzID8gcGFuZXMuc3BsaXQoIiwiKSA6IF9jLmJvcmRlclBhbmVzOworCisJCSQuZWFjaChwYW5lcywgZnVuY3Rpb24gKGksIHBhbmUpIHsKKwkJCXZhciAKKwkJCQlvCT0gb3B0aW9uc1twYW5lXQorCQkJLAlzCT0gc3RhdGVbcGFuZV0KKwkJCSwJJFAJPSAkUHNbcGFuZV0KKwkJCSwJJFIJPSAkUnNbcGFuZV0KKwkJCSwJJFQJPSAkVHNbcGFuZV0KKwkJCSwJJFRDCisJCQk7CisJCQlpZiAoISRQIHx8ICEkUikgcmV0dXJuOworCisJCQl2YXIKKwkJCQlkaXIJCQk9IF9jW3BhbmVdLmRpcgorCQkJLAlfc3RhdGUJCT0gKHMuaXNDbG9zZWQgPyAiX2Nsb3NlZCIgOiAiX29wZW4iKQorCQkJLAlzcGFjaW5nCQk9IG9bInNwYWNpbmciKyBfc3RhdGVdCisJCQksCXRvZ0FsaWduCT0gb1sidG9nZ2xlckFsaWduIisgX3N0YXRlXQorCQkJLAl0b2dMZW4JCT0gb1sidG9nZ2xlckxlbmd0aCIrIF9zdGF0ZV0KKwkJCSwJcGFuZUxlbgorCQkJLAlsZWZ0CisJCQksCW9mZnNldAorCQkJLAlDU1MgPSB7fQorCQkJOworCisJCQlpZiAoc3BhY2luZyA9PT0gMCkgeworCQkJCSRSLmhpZGUoKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQllbHNlIGlmICghcy5ub1Jvb20gJiYgIXMuaXNIaWRkZW4pIC8vIHNraXAgaWYgcmVzaXplciB3YXMgaGlkZGVuIGZvciBhbnkgcmVhc29uCisJCQkJJFIuc2hvdygpOyAvLyBpbiBjYXNlIHdhcyBwcmV2aW91c2x5IGhpZGRlbgorCisJCQkvLyBSZXNpemVyIEJhciBpcyBBTFdBWVMgc2FtZSB3aWR0aC9oZWlnaHQgb2YgcGFuZSBpdCBpcyBhdHRhY2hlZCB0bworCQkJaWYgKGRpciA9PT0gImhvcnoiKSB7IC8vIG5vcnRoL3NvdXRoCisJCQkJLy9wYW5lTGVuID0gJFAub3V0ZXJXaWR0aCgpOyAvLyBzLm91dGVyV2lkdGggfHwgCisJCQkJcGFuZUxlbiA9IHNDLmlubmVyV2lkdGg7IC8vIGhhbmRsZSBvZmZzY3JlZW4tcGFuZXMKKwkJCQlzLnJlc2l6ZXJMZW5ndGggPSBwYW5lTGVuOworCQkJCWxlZnQgPSAkLmxheW91dC5jc3NOdW0oJFAsICJsZWZ0IikKKwkJCQkkUi5jc3MoeworCQkJCQl3aWR0aDoJY3NzVygkUiwgcGFuZUxlbikgLy8gYWNjb3VudCBmb3IgYm9yZGVycyAmIHBhZGRpbmcKKwkJCQksCWhlaWdodDoJY3NzSCgkUiwgc3BhY2luZykgLy8gZGl0dG8KKwkJCQksCWxlZnQ6CWxlZnQgPiAtOTk5OSA/IGxlZnQgOiBzQy5pbnNldExlZnQgLy8gaGFuZGxlIG9mZnNjcmVlbi1wYW5lcworCQkJCX0pOworCQkJfQorCQkJZWxzZSB7IC8vIGVhc3Qvd2VzdAorCQkJCXBhbmVMZW4gPSAkUC5vdXRlckhlaWdodCgpOyAvLyBzLm91dGVySGVpZ2h0IHx8IAorCQkJCXMucmVzaXplckxlbmd0aCA9IHBhbmVMZW47CisJCQkJJFIuY3NzKHsKKwkJCQkJaGVpZ2h0Ogljc3NIKCRSLCBwYW5lTGVuKSAvLyBhY2NvdW50IGZvciBib3JkZXJzICYgcGFkZGluZworCQkJCSwJd2lkdGg6CWNzc1coJFIsIHNwYWNpbmcpIC8vIGRpdHRvCisJCQkJLAl0b3A6CXNDLmluc2V0VG9wICsgZ2V0UGFuZVNpemUoIm5vcnRoIiwgdHJ1ZSkgLy8gVE9ETzogd2hhdCBpZiBubyBOb3J0aCBwYW5lPworCQkJCS8vLAl0b3A6CSQubGF5b3V0LmNzc051bSgkUHNbImNlbnRlciJdLCAidG9wIikKKwkJCQl9KTsKKwkJCX0KKworCQkJLy8gcmVtb3ZlIGhvdmVyIGNsYXNzZXMKKwkJCXJlbW92ZUhvdmVyKCBvLCAkUiApOworCisJCQlpZiAoJFQpIHsKKwkJCQlpZiAodG9nTGVuID09PSAwIHx8IChzLmlzU2xpZGluZyAmJiBvLmhpZGVUb2dnbGVyT25TbGlkZSkpIHsKKwkJCQkJJFQuaGlkZSgpOyAvLyBhbHdheXMgSElERSB0aGUgdG9nZ2xlciB3aGVuICdzbGlkaW5nJworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJJFQuc2hvdygpOyAvLyBpbiBjYXNlIHdhcyBwcmV2aW91c2x5IGhpZGRlbgorCisJCQkJaWYgKCEodG9nTGVuID4gMCkgfHwgdG9nTGVuID09PSAiMTAwJSIgfHwgdG9nTGVuID4gcGFuZUxlbikgeworCQkJCQl0b2dMZW4gPSBwYW5lTGVuOworCQkJCQlvZmZzZXQgPSAwOworCQkJCX0KKwkJCQllbHNlIHsgLy8gY2FsY3VsYXRlICdvZmZzZXQnIGJhc2VkIG9uIG9wdGlvbnMuUEFORS50b2dnbGVyQWxpZ25fb3Blbi9jbG9zZWQKKwkJCQkJaWYgKGlzU3RyKHRvZ0FsaWduKSkgeworCQkJCQkJc3dpdGNoICh0b2dBbGlnbikgeworCQkJCQkJCWNhc2UgInRvcCI6CisJCQkJCQkJY2FzZSAibGVmdCI6CW9mZnNldCA9IDA7CisJCQkJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgImJvdHRvbSI6CisJCQkJCQkJY2FzZSAicmlnaHQiOglvZmZzZXQgPSBwYW5lTGVuIC0gdG9nTGVuOworCQkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlICJtaWRkbGUiOgorCQkJCQkJCWNhc2UgImNlbnRlciI6CisJCQkJCQkJZGVmYXVsdDoJCW9mZnNldCA9IHJvdW5kKChwYW5lTGVuIC0gdG9nTGVuKSAvIDIpOyAvLyAnZGVmYXVsdCcgY2F0Y2hlcyB0eXBvcworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UgeyAvLyB0b2dBbGlnbiA9IG51bWJlcgorCQkJCQkJdmFyIHggPSBwYXJzZUludCh0b2dBbGlnbiwgMTApOyAvLworCQkJCQkJaWYgKHRvZ0FsaWduID49IDApIG9mZnNldCA9IHg7CisJCQkJCQllbHNlIG9mZnNldCA9IHBhbmVMZW4gLSB0b2dMZW4gKyB4OyAvLyBOT1RFOiB4IGlzIG5lZ2F0aXZlIQorCQkJCQl9CisJCQkJfQorCisJCQkJaWYgKGRpciA9PT0gImhvcnoiKSB7IC8vIG5vcnRoL3NvdXRoCisJCQkJCXZhciB3aWR0aCA9IGNzc1coJFQsIHRvZ0xlbik7CisJCQkJCSRULmNzcyh7CisJCQkJCQl3aWR0aDoJd2lkdGggIC8vIGFjY291bnQgZm9yIGJvcmRlcnMgJiBwYWRkaW5nCisJCQkJCSwJaGVpZ2h0Ogljc3NIKCRULCBzcGFjaW5nKSAvLyBkaXR0bworCQkJCQksCWxlZnQ6CW9mZnNldCAvLyBUT0RPOiBWRVJJRlkgdGhhdCB0b2dnbGVyICBwb3NpdGlvbnMgY29ycmVjdGx5IGZvciBBTEwgdmFsdWVzCisJCQkJCSwJdG9wOgkwCisJCQkJCX0pOworCQkJCQkvLyBDRU5URVIgdGhlIHRvZ2dsZXIgY29udGVudCBTUEFOCisJCQkJCSRULmNoaWxkcmVuKCIuY29udGVudCIpLmVhY2goZnVuY3Rpb24oKXsKKwkJCQkJCSRUQyA9ICQodGhpcyk7CisJCQkJCQkkVEMuY3NzKCJtYXJnaW5MZWZ0Iiwgcm91bmQoKHdpZHRoLSRUQy5vdXRlcldpZHRoKCkpLzIpKTsgLy8gY291bGQgYmUgbmVnYXRpdmUKKwkJCQkJfSk7CisJCQkJfQorCQkJCWVsc2UgeyAvLyBlYXN0L3dlc3QKKwkJCQkJdmFyIGhlaWdodCA9IGNzc0goJFQsIHRvZ0xlbik7CisJCQkJCSRULmNzcyh7CisJCQkJCQloZWlnaHQ6CWhlaWdodCAvLyBhY2NvdW50IGZvciBib3JkZXJzICYgcGFkZGluZworCQkJCQksCXdpZHRoOgljc3NXKCRULCBzcGFjaW5nKSAvLyBkaXR0bworCQkJCQksCXRvcDoJb2Zmc2V0IC8vIFBPU0lUSU9OIHRoZSB0b2dnbGVyCisJCQkJCSwJbGVmdDoJMAorCQkJCQl9KTsKKwkJCQkJLy8gQ0VOVEVSIHRoZSB0b2dnbGVyIGNvbnRlbnQgU1BBTgorCQkJCQkkVC5jaGlsZHJlbigiLmNvbnRlbnQiKS5lYWNoKGZ1bmN0aW9uKCl7CisJCQkJCQkkVEMgPSAkKHRoaXMpOworCQkJCQkJJFRDLmNzcygibWFyZ2luVG9wIiwgcm91bmQoKGhlaWdodC0kVEMub3V0ZXJIZWlnaHQoKSkvMikpOyAvLyBjb3VsZCBiZSBuZWdhdGl2ZQorCQkJCQl9KTsKKwkJCQl9CisKKwkJCQkvLyByZW1vdmUgQUxMIGhvdmVyIGNsYXNzZXMKKwkJCQlyZW1vdmVIb3ZlciggMCwgJFQgKTsKKwkJCX0KKworCQkJLy8gRE9ORSBtZWFzdXJpbmcgYW5kIHNpemluZyB0aGlzIHJlc2l6ZXIvdG9nZ2xlciwgc28gY2FuIGJlICdoaWRkZW4nIG5vdworCQkJaWYgKCFzdGF0ZS5pbml0aWFsaXplZCAmJiAoby5pbml0SGlkZGVuIHx8IHMubm9Sb29tKSkgeworCQkJCSRSLmhpZGUoKTsKKwkJCQlpZiAoJFQpICRULmhpZGUoKTsKKwkJCX0KKwkJfSk7CisJfQorCisKKwkvKioKKwkqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0JZXZ0X29yX3BhbmUKKwkqLworLAllbmFibGVDbG9zYWJsZSA9IGZ1bmN0aW9uIChldnRfb3JfcGFuZSkgeworCQlpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgcmV0dXJuOworCQl2YXIJcGFuZSA9IGV2dFBhbmUuY2FsbCh0aGlzLCBldnRfb3JfcGFuZSkKKwkJLAkkVAk9ICRUc1twYW5lXQorCQksCW8JPSBvcHRpb25zW3BhbmVdCisJCTsKKwkJaWYgKCEkVCkgcmV0dXJuOworCQlvLmNsb3NhYmxlID0gdHJ1ZTsKKwkJJFQJLmJpbmQoImNsaWNrLiIrIHNJRCwgZnVuY3Rpb24oZXZ0KXsgZXZ0LnN0b3BQcm9wYWdhdGlvbigpOyB0b2dnbGUocGFuZSk7IH0pCisJCQkuY3NzKCJ2aXNpYmlsaXR5IiwgInZpc2libGUiKQorCQkJLmNzcygiY3Vyc29yIiwgInBvaW50ZXIiKQorCQkJLmF0dHIoInRpdGxlIiwgc3RhdGVbcGFuZV0uaXNDbG9zZWQgPyBvLnRpcHMuT3BlbiA6IG8udGlwcy5DbG9zZSkgLy8gbWF5IGJlIGJsYW5rCisJCQkuc2hvdygpOworCX0KKwkvKioKKwkqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0JZXZ0X29yX3BhbmUKKwkqIEBwYXJhbSB7Ym9vbGVhbj19CQkJW2hpZGU9ZmFsc2VdCisJKi8KKywJZGlzYWJsZUNsb3NhYmxlID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lLCBoaWRlKSB7CisJCWlmICghaXNJbml0aWFsaXplZCgpKSByZXR1cm47CisJCXZhcglwYW5lID0gZXZ0UGFuZS5jYWxsKHRoaXMsIGV2dF9vcl9wYW5lKQorCQksCSRUCT0gJFRzW3BhbmVdCisJCTsKKwkJaWYgKCEkVCkgcmV0dXJuOworCQlvcHRpb25zW3BhbmVdLmNsb3NhYmxlID0gZmFsc2U7CisJCS8vIGlzIGNsb3NhYmxlIGlzIGRpc2FibGUsIHRoZW4gcGFuZSBNVVNUIGJlIG9wZW4hCisJCWlmIChzdGF0ZVtwYW5lXS5pc0Nsb3NlZCkgb3BlbihwYW5lLCBmYWxzZSwgdHJ1ZSk7CisJCSRUCS51bmJpbmQoIi4iKyBzSUQpCisJCQkuY3NzKCJ2aXNpYmlsaXR5IiwgaGlkZSA/ICJoaWRkZW4iIDogInZpc2libGUiKSAvLyBpbnN0ZWFkIG9mIGhpZGUoKSwgd2hpY2ggY3JlYXRlcyBsb2dpYyBpc3N1ZXMKKwkJCS5jc3MoImN1cnNvciIsICJkZWZhdWx0IikKKwkJCS5hdHRyKCJ0aXRsZSIsICIiKTsKKwl9CisKKworCS8qKgorCSogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fQlldnRfb3JfcGFuZQorCSovCissCWVuYWJsZVNsaWRhYmxlID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lKSB7CisJCWlmICghaXNJbml0aWFsaXplZCgpKSByZXR1cm47CisJCXZhcglwYW5lID0gZXZ0UGFuZS5jYWxsKHRoaXMsIGV2dF9vcl9wYW5lKQorCQksCSRSCT0gJFJzW3BhbmVdCisJCTsKKwkJaWYgKCEkUiB8fCAhJFIuZGF0YSgnZHJhZ2dhYmxlJykpIHJldHVybjsKKwkJb3B0aW9uc1twYW5lXS5zbGlkYWJsZSA9IHRydWU7IAorCQlpZiAoc3RhdGVbcGFuZV0uaXNDbG9zZWQpCisJCQliaW5kU3RhcnRTbGlkaW5nRXZlbnQocGFuZSwgdHJ1ZSk7CisJfQorCS8qKgorCSogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fQlldnRfb3JfcGFuZQorCSovCissCWRpc2FibGVTbGlkYWJsZSA9IGZ1bmN0aW9uIChldnRfb3JfcGFuZSkgeworCQlpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgcmV0dXJuOworCQl2YXIJcGFuZSA9IGV2dFBhbmUuY2FsbCh0aGlzLCBldnRfb3JfcGFuZSkKKwkJLAkkUgk9ICRSc1twYW5lXQorCQk7CisJCWlmICghJFIpIHJldHVybjsKKwkJb3B0aW9uc1twYW5lXS5zbGlkYWJsZSA9IGZhbHNlOyAKKwkJaWYgKHN0YXRlW3BhbmVdLmlzU2xpZGluZykKKwkJCWNsb3NlKHBhbmUsIGZhbHNlLCB0cnVlKTsKKwkJZWxzZSB7CisJCQliaW5kU3RhcnRTbGlkaW5nRXZlbnQocGFuZSwgZmFsc2UpOworCQkJJFIJLmNzcygiY3Vyc29yIiwgImRlZmF1bHQiKQorCQkJCS5hdHRyKCJ0aXRsZSIsICIiKTsKKwkJCXJlbW92ZUhvdmVyKG51bGwsICRSWzBdKTsgLy8gaW4gY2FzZSBjdXJyZW50bHkgaG92ZXJlZAorCQl9CisJfQorCisKKwkvKioKKwkqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0JZXZ0X29yX3BhbmUKKwkqLworLAllbmFibGVSZXNpemFibGUgPSBmdW5jdGlvbiAoZXZ0X29yX3BhbmUpIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJdmFyCXBhbmUgPSBldnRQYW5lLmNhbGwodGhpcywgZXZ0X29yX3BhbmUpCisJCSwJJFIJPSAkUnNbcGFuZV0KKwkJLAlvCT0gb3B0aW9uc1twYW5lXQorCQk7CisJCWlmICghJFIgfHwgISRSLmRhdGEoJ2RyYWdnYWJsZScpKSByZXR1cm47CisJCW8ucmVzaXphYmxlID0gdHJ1ZTsgCisJCSRSLmRyYWdnYWJsZSgiZW5hYmxlIik7CisJCWlmICghc3RhdGVbcGFuZV0uaXNDbG9zZWQpCisJCQkkUgkuY3NzKCJjdXJzb3IiLCBvLnJlc2l6ZXJDdXJzb3IpCisJCQkgCS5hdHRyKCJ0aXRsZSIsIG8udGlwcy5SZXNpemUpOworCX0KKwkvKioKKwkqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0JZXZ0X29yX3BhbmUKKwkqLworLAlkaXNhYmxlUmVzaXphYmxlID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lKSB7CisJCWlmICghaXNJbml0aWFsaXplZCgpKSByZXR1cm47CisJCXZhcglwYW5lID0gZXZ0UGFuZS5jYWxsKHRoaXMsIGV2dF9vcl9wYW5lKQorCQksCSRSCT0gJFJzW3BhbmVdCisJCTsKKwkJaWYgKCEkUiB8fCAhJFIuZGF0YSgnZHJhZ2dhYmxlJykpIHJldHVybjsKKwkJb3B0aW9uc1twYW5lXS5yZXNpemFibGUgPSBmYWxzZTsgCisJCSRSCS5kcmFnZ2FibGUoImRpc2FibGUiKQorCQkJLmNzcygiY3Vyc29yIiwgImRlZmF1bHQiKQorCQkJLmF0dHIoInRpdGxlIiwgIiIpOworCQlyZW1vdmVIb3ZlcihudWxsLCAkUlswXSk7IC8vIGluIGNhc2UgY3VycmVudGx5IGhvdmVyZWQKKwl9CisKKworCS8qKgorCSogTW92ZSBhIHBhbmUgZnJvbSBzb3VyY2Utc2lkZSAoZWcsIHdlc3QpIHRvIHRhcmdldC1zaWRlIChlZywgZWFzdCkKKwkqIElmIHBhbmUgZXhpc3RzIG9uIHRhcmdldC1zaWRlLCBtb3ZlIHRoYXQgdG8gc291cmNlLXNpZGUsIGllLCAnc3dhcCcgdGhlIHBhbmVzCisJKgorCSogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fQlldnRfb3JfcGFuZTEJVGhlIHBhbmUvZWRnZSBiZWluZyBzd2FwcGVkCisJKiBAcGFyYW0ge3N0cmluZ30JCQlwYW5lMgkJCWRpdHRvCisJKi8KKywJc3dhcFBhbmVzID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lMSwgcGFuZTIpIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJdmFyIHBhbmUxID0gZXZ0UGFuZS5jYWxsKHRoaXMsIGV2dF9vcl9wYW5lMSk7CisJCS8vIGNoYW5nZSBzdGF0ZS5lZGdlIE5PVyBzbyBjYWxsYmFja3MgY2FuIGtub3cgd2hlcmUgcGFuZSBpcyBoZWFkZWQuLi4KKwkJc3RhdGVbcGFuZTFdLmVkZ2UgPSBwYW5lMjsKKwkJc3RhdGVbcGFuZTJdLmVkZ2UgPSBwYW5lMTsKKwkJLy8gcnVuIHRoZXNlIGV2ZW4gaWYgTk9UIHN0YXRlLmluaXRpYWxpemVkCisJCWlmIChmYWxzZSA9PT0gX3J1bkNhbGxiYWNrcygib25zd2FwX3N0YXJ0IiwgcGFuZTEpCisJCSB8fAlmYWxzZSA9PT0gX3J1bkNhbGxiYWNrcygib25zd2FwX3N0YXJ0IiwgcGFuZTIpCisJCSkgeworCQkJc3RhdGVbcGFuZTFdLmVkZ2UgPSBwYW5lMTsgLy8gcmVzZXQKKwkJCXN0YXRlW3BhbmUyXS5lZGdlID0gcGFuZTI7CisJCQlyZXR1cm47CisJCX0KKworCQl2YXIKKwkJCW9QYW5lMQk9IGNvcHkoIHBhbmUxICkKKwkJLAlvUGFuZTIJPSBjb3B5KCBwYW5lMiApCisJCSwJc2l6ZXMJPSB7fQorCQk7CisJCXNpemVzW3BhbmUxXSA9IG9QYW5lMSA/IG9QYW5lMS5zdGF0ZS5zaXplIDogMDsKKwkJc2l6ZXNbcGFuZTJdID0gb1BhbmUyID8gb1BhbmUyLnN0YXRlLnNpemUgOiAwOworCisJCS8vIGNsZWFyIHBvaW50ZXJzICYgc3RhdGUKKwkJJFBzW3BhbmUxXSA9IGZhbHNlOyAKKwkJJFBzW3BhbmUyXSA9IGZhbHNlOworCQlzdGF0ZVtwYW5lMV0gPSB7fTsKKwkJc3RhdGVbcGFuZTJdID0ge307CisJCQorCQkvLyBBTFdBWVMgcmVtb3ZlIHRoZSByZXNpemVyICYgdG9nZ2xlciBlbGVtZW50cworCQlpZiAoJFRzW3BhbmUxXSkgJFRzW3BhbmUxXS5yZW1vdmUoKTsKKwkJaWYgKCRUc1twYW5lMl0pICRUc1twYW5lMl0ucmVtb3ZlKCk7CisJCWlmICgkUnNbcGFuZTFdKSAkUnNbcGFuZTFdLnJlbW92ZSgpOworCQlpZiAoJFJzW3BhbmUyXSkgJFJzW3BhbmUyXS5yZW1vdmUoKTsKKwkJJFJzW3BhbmUxXSA9ICRSc1twYW5lMl0gPSAkVHNbcGFuZTFdID0gJFRzW3BhbmUyXSA9IGZhbHNlOworCisJCS8vIHRyYW5zZmVyIGVsZW1lbnQgcG9pbnRlcnMgYW5kIGRhdGEgdG8gTkVXIExheW91dCBrZXlzCisJCW1vdmUoIG9QYW5lMSwgcGFuZTIgKTsKKwkJbW92ZSggb1BhbmUyLCBwYW5lMSApOworCisJCS8vIGNsZWFudXAgb2JqZWN0cworCQlvUGFuZTEgPSBvUGFuZTIgPSBzaXplcyA9IG51bGw7CisKKwkJLy8gbWFrZSBwYW5lcyAndmlzaWJsZScgYWdhaW4KKwkJaWYgKCRQc1twYW5lMV0pICRQc1twYW5lMV0uY3NzKF9jLnZpc2libGUpOworCQlpZiAoJFBzW3BhbmUyXSkgJFBzW3BhbmUyXS5jc3MoX2MudmlzaWJsZSk7CisKKwkJLy8gZml4IGFueSBzaXplIGRpc2NyZXBhbmNpZXMgY2F1c2VkIGJ5IHN3YXAKKwkJcmVzaXplQWxsKCk7CisKKwkJLy8gcnVuIHRoZXNlIGV2ZW4gaWYgTk9UIHN0YXRlLmluaXRpYWxpemVkCisJCV9ydW5DYWxsYmFja3MoIm9uc3dhcF9lbmQiLCBwYW5lMSk7CisJCV9ydW5DYWxsYmFja3MoIm9uc3dhcF9lbmQiLCBwYW5lMik7CisKKwkJcmV0dXJuOworCisJCWZ1bmN0aW9uIGNvcHkgKG4pIHsgLy8gbiA9IHBhbmUKKwkJCXZhcgorCQkJCSRQCT0gJFBzW25dCisJCQksCSRDCT0gJENzW25dCisJCQk7CisJCQlyZXR1cm4gISRQID8gZmFsc2UgOiB7CisJCQkJcGFuZToJCW4KKwkJCSwJUDoJCQkkUCA/ICRQWzBdIDogZmFsc2UKKwkJCSwJQzoJCQkkQyA/ICRDWzBdIDogZmFsc2UKKwkJCSwJc3RhdGU6CQkkLmV4dGVuZCh0cnVlLCB7fSwgc3RhdGVbbl0pCisJCQksCW9wdGlvbnM6CSQuZXh0ZW5kKHRydWUsIHt9LCBvcHRpb25zW25dKQorCQkJfQorCQl9OworCisJCWZ1bmN0aW9uIG1vdmUgKG9QYW5lLCBwYW5lKSB7CisJCQlpZiAoIW9QYW5lKSByZXR1cm47CisJCQl2YXIKKwkJCQlQCQk9IG9QYW5lLlAKKwkJCSwJQwkJPSBvUGFuZS5DCisJCQksCW9sZFBhbmUgPSBvUGFuZS5wYW5lCisJCQksCWMJCT0gX2NbcGFuZV0KKwkJCSwJc2lkZQk9IGMuc2lkZS50b0xvd2VyQ2FzZSgpCisJCQksCWluc2V0CT0gImluc2V0IisgYy5zaWRlCisJCQkvLwlzYXZlIHBhbmUtb3B0aW9ucyB0aGF0IHNob3VsZCBiZSByZXRhaW5lZAorCQkJLAlzCQk9ICQuZXh0ZW5kKHRydWUsIHt9LCBzdGF0ZVtwYW5lXSkKKwkJCSwJbwkJPSBvcHRpb25zW3BhbmVdCisJCQkvLwlSRVRBSU4gc2lkZS1zcGVjaWZpYyBGWCBTZXR0aW5ncyAtIG1vcmUgYmVsb3cKKwkJCSwJZngJCT0geyByZXNpemVyQ3Vyc29yOiBvLnJlc2l6ZXJDdXJzb3IgfQorCQkJLAlyZSwgc2l6ZSwgcG9zCisJCQk7CisJCQkkLmVhY2goImZ4TmFtZSxmeFNwZWVkLGZ4U2V0dGluZ3MiLnNwbGl0KCIsIiksIGZ1bmN0aW9uIChpLCBrKSB7CisJCQkJZnhbayArIl9vcGVuIl0gID0gb1trICsiX29wZW4iXTsKKwkJCQlmeFtrICsiX2Nsb3NlIl0gPSBvW2sgKyJfY2xvc2UiXTsKKwkJCQlmeFtrICsiX3NpemUiXSAgPSBvW2sgKyJfc2l6ZSJdOworCQkJfSk7CisKKwkJCS8vIHVwZGF0ZSBvYmplY3QgcG9pbnRlcnMgYW5kIGF0dHJpYnV0ZXMKKwkJCSRQc1twYW5lXSA9ICQoUCkKKwkJCQkuZGF0YSh7CisJCQkJCWxheW91dFBhbmU6CQlJbnN0YW5jZVtwYW5lXQkvLyBORVcgcG9pbnRlciB0byBwYW5lLWFsaWFzLW9iamVjdAorCQkJCSwJbGF5b3V0RWRnZToJCXBhbmUKKwkJCQl9KQorCQkJCS5jc3MoX2MuaGlkZGVuKQorCQkJCS5jc3MoYy5jc3NSZXEpCisJCQk7CisJCQkkQ3NbcGFuZV0gPSBDID8gJChDKSA6IGZhbHNlOworCisJCQkvLyBzZXQgb3B0aW9ucyBhbmQgc3RhdGUKKwkJCW9wdGlvbnNbcGFuZV0JPSAkLmV4dGVuZCh0cnVlLCB7fSwgb1BhbmUub3B0aW9ucywgZngpOworCQkJc3RhdGVbcGFuZV0JCT0gJC5leHRlbmQodHJ1ZSwge30sIG9QYW5lLnN0YXRlKTsKKworCQkJLy8gY2hhbmdlIGNsYXNzTmFtZXMgb24gdGhlIHBhbmUsIGVnOiB1aS1sYXlvdXQtcGFuZS1lYXN0ID09PiB1aS1sYXlvdXQtcGFuZS13ZXN0CisJCQlyZSA9IG5ldyBSZWdFeHAoby5wYW5lQ2xhc3MgKyItIisgb2xkUGFuZSwgImciKTsKKwkJCVAuY2xhc3NOYW1lID0gUC5jbGFzc05hbWUucmVwbGFjZShyZSwgby5wYW5lQ2xhc3MgKyItIisgcGFuZSk7CisKKwkJCS8vIEFMV0FZUyByZWdlbmVyYXRlIHRoZSByZXNpemVyICYgdG9nZ2xlciBlbGVtZW50cworCQkJaW5pdEhhbmRsZXMocGFuZSk7IC8vIGNyZWF0ZSB0aGUgcmVxdWlyZWQgcmVzaXplciAmIHRvZ2dsZXIKKworCQkJLy8gaWYgbW92aW5nIHRvIGRpZmZlcmVudCBvcmllbnRhdGlvbiwgdGhlbiBrZWVwICd0YXJnZXQnIHBhbmUgc2l6ZQorCQkJaWYgKGMuZGlyICE9IF9jW29sZFBhbmVdLmRpcikgeworCQkJCXNpemUgPSBzaXplc1twYW5lXSB8fCAwOworCQkJCXNldFNpemVMaW1pdHMocGFuZSk7IC8vIHVwZGF0ZSBwYW5lLXN0YXRlCisJCQkJc2l6ZSA9IG1heChzaXplLCBzdGF0ZVtwYW5lXS5taW5TaXplKTsKKwkJCQkvLyB1c2UgbWFudWFsU2l6ZVBhbmUgdG8gZGlzYWJsZSBhdXRvUmVzaXplIC0gbm90IHVzZWZ1bCBhZnRlciBwYW5lcyBhcmUgc3dhcHBlZAorCQkJCW1hbnVhbFNpemVQYW5lKHBhbmUsIHNpemUsIHRydWUsIHRydWUpOyAvLyB0cnVlL3RydWUgPSBza2lwQ2FsbGJhY2svbm9BbmltYXRpb24KKwkJCX0KKwkJCWVsc2UgLy8gbW92ZSB0aGUgcmVzaXplciBoZXJlCisJCQkJJFJzW3BhbmVdLmNzcyhzaWRlLCBzQ1tpbnNldF0gKyAoc3RhdGVbcGFuZV0uaXNWaXNpYmxlID8gZ2V0UGFuZVNpemUocGFuZSkgOiAwKSk7CisKKworCQkJLy8gQUREIENMQVNTTkFNRVMgJiBTTElERS1CSU5ESU5HUworCQkJaWYgKG9QYW5lLnN0YXRlLmlzVmlzaWJsZSAmJiAhcy5pc1Zpc2libGUpCisJCQkJc2V0QXNPcGVuKHBhbmUsIHRydWUpOyAvLyB0cnVlID0gc2tpcENhbGxiYWNrCisJCQllbHNlIHsKKwkJCQlzZXRBc0Nsb3NlZChwYW5lKTsKKwkJCQliaW5kU3RhcnRTbGlkaW5nRXZlbnQocGFuZSwgdHJ1ZSk7IC8vIHdpbGwgZW5hYmxlIGV2ZW50cyBJRiBvcHRpb24gaXMgc2V0CisJCQl9CisKKwkJCS8vIERFU1RST1kgdGhlIG9iamVjdAorCQkJb1BhbmUgPSBudWxsOworCQl9OworCX0KKworCisJLyoqCisJKiBJTlRFUk5BTCBtZXRob2QgdG8gc3luYyBwaW4tYnV0dG9ucyB3aGVuIHBhbmUgaXMgb3BlbmVkIG9yIGNsb3NlZAorCSogVW5waW5uZWQgbWVhbnMgdGhlIHBhbmUgaXMgJ3NsaWRpbmcnIC0gaWUsIG92ZXItdG9wIG9mIHRoZSBhZGphY2VudCBwYW5lcworCSoKKwkqIEBzZWUgIG9wZW4oKSwgc2V0QXNPcGVuKCksIHNldEFzQ2xvc2VkKCkKKwkqIEBwYXJhbSB7c3RyaW5nfQlwYW5lICAgVGhlc2UgYXJlIHRoZSBwYXJhbXMgcmV0dXJuZWQgdG8gY2FsbGJhY2tzIGJ5IGxheW91dCgpCisJKiBAcGFyYW0ge2Jvb2xlYW59CWRvUGluICBUcnVlIG1lYW5zIHNldCB0aGUgcGluICdkb3duJywgRmFsc2UgbWVhbnMgJ3VwJworCSovCissCXN5bmNQaW5CdG5zID0gZnVuY3Rpb24gKHBhbmUsIGRvUGluKSB7CisJCWlmICgkLmxheW91dC5wbHVnaW5zLmJ1dHRvbnMpCisJCQkkLmVhY2goc3RhdGVbcGFuZV0ucGlucywgZnVuY3Rpb24gKGksIHNlbGVjdG9yKSB7CisJCQkJJC5sYXlvdXQuYnV0dG9ucy5zZXRQaW5TdGF0ZShJbnN0YW5jZSwgJChzZWxlY3RvciksIHBhbmUsIGRvUGluKTsKKwkJCX0pOworCX0KKworOwkvLyBFTkQgdmFyIERFQ0xBUkFUSU9OUworCisJLyoqCisJKiBDYXB0dXJlIGtleXMgd2hlbiBlbmFibGVDdXJzb3JIb3RrZXkgLSB0b2dnbGUgcGFuZSBpZiBob3RrZXkgcHJlc3NlZAorCSoKKwkqIEBzZWUgIGRvY3VtZW50LmtleWRvd24oKQorCSovCisJZnVuY3Rpb24ga2V5RG93biAoZXZ0KSB7CisJCWlmICghZXZ0KSByZXR1cm4gdHJ1ZTsKKwkJdmFyIGNvZGUgPSBldnQua2V5Q29kZTsKKwkJaWYgKGNvZGUgPCAzMykgcmV0dXJuIHRydWU7IC8vIGlnbm9yZSBzcGVjaWFsIGtleXM6IEVOVEVSLCBUQUIsIGV0YworCisJCXZhcgorCQkJUEFORSA9IHsKKwkJCQkzODogIm5vcnRoIiAvLyBVcCBDdXJzb3IJLSAkLnVpLmtleUNvZGUuVVAKKwkJCSwJNDA6ICJzb3V0aCIgLy8gRG93biBDdXJzb3IJLSAkLnVpLmtleUNvZGUuRE9XTgorCQkJLAkzNzogIndlc3QiICAvLyBMZWZ0IEN1cnNvcgktICQudWkua2V5Q29kZS5MRUZUCisJCQksCTM5OiAiZWFzdCIgIC8vIFJpZ2h0IEN1cnNvcgktICQudWkua2V5Q29kZS5SSUdIVAorCQkJfQorCQksCUFMVAkJPSBldnQuYWx0S2V5IC8vIG5vIHdvcmt5IQorCQksCVNISUZUCT0gZXZ0LnNoaWZ0S2V5CisJCSwJQ1RSTAk9IGV2dC5jdHJsS2V5CisJCSwJQ1VSU09SCT0gKENUUkwgJiYgY29kZSA+PSAzNyAmJiBjb2RlIDw9IDQwKQorCQksCW8sIGssIG0sIHBhbmUKKwkJOworCisJCWlmIChDVVJTT1IgJiYgb3B0aW9uc1tQQU5FW2NvZGVdXS5lbmFibGVDdXJzb3JIb3RrZXkpIC8vIHZhbGlkIGN1cnNvci1ob3RrZXkKKwkJCXBhbmUgPSBQQU5FW2NvZGVdOworCQllbHNlIGlmIChDVFJMIHx8IFNISUZUKSAvLyBjaGVjayB0byBzZWUgaWYgdGhpcyBtYXRjaGVzIGEgY3VzdG9tLWhvdGtleQorCQkJJC5lYWNoKF9jLmJvcmRlclBhbmVzLCBmdW5jdGlvbiAoaSwgcCkgeyAvLyBsb29wIGVhY2ggcGFuZSB0byBjaGVjayBpdHMgaG90a2V5CisJCQkJbyA9IG9wdGlvbnNbcF07CisJCQkJayA9IG8uY3VzdG9tSG90a2V5OworCQkJCW0gPSBvLmN1c3RvbUhvdGtleU1vZGlmaWVyOyAvLyBpZiBtaXNzaW5nIG9yIGludmFsaWQsIHRyZWF0ZWQgYXMgIkNUUkwrU0hJRlQiCisJCQkJaWYgKChTSElGVCAmJiBtPT0iU0hJRlQiKSB8fCAoQ1RSTCAmJiBtPT0iQ1RSTCIpIHx8IChDVFJMICYmIFNISUZUKSkgeyAvLyBNb2RpZmllciBtYXRjaGVzCisJCQkJCWlmIChrICYmIGNvZGUgPT09IChpc05hTihrKSB8fCBrIDw9IDkgPyBrLnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKSA6IGspKSB7IC8vIEtleSBtYXRjaGVzCisJCQkJCQlwYW5lID0gcDsKKwkJCQkJCXJldHVybiBmYWxzZTsgLy8gQlJFQUsKKwkJCQkJfQorCQkJCX0KKwkJCX0pOworCisJCS8vIHZhbGlkYXRlIHBhbmUKKwkJaWYgKCFwYW5lIHx8ICEkUHNbcGFuZV0gfHwgIW9wdGlvbnNbcGFuZV0uY2xvc2FibGUgfHwgc3RhdGVbcGFuZV0uaXNIaWRkZW4pCisJCQlyZXR1cm4gdHJ1ZTsKKworCQl0b2dnbGUocGFuZSk7CisKKwkJZXZ0LnN0b3BQcm9wYWdhdGlvbigpOworCQlldnQucmV0dXJuVmFsdWUgPSBmYWxzZTsgLy8gQ0FOQ0VMIGtleQorCQlyZXR1cm4gZmFsc2U7CisJfTsKKworCisvKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqCVVUSUxJVFkgTUVUSE9EUworICoJY2FsbGVkIGV4dGVybmFsbHkgb3IgYnkgaW5pdEJ1dHRvbnMKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKi8KKworCS8qKgorCSogQ2hhbmdlL3Jlc2V0IGEgcGFuZSBvdmVyZmxvdyBzZXR0aW5nICYgekluZGV4IHRvIGFsbG93IHBvcHVwcy9kcm9wLWRvd25zIHRvIHdvcmsKKwkqCisJKiBAcGFyYW0ge09iamVjdD19ICAgW2VsXQkob3B0aW9uYWwpIENhbiBhbHNvIGJlICdib3VuZCcgdG8gYSBjbGljaywgbW91c2VPdmVyLCBvciBvdGhlciBldmVudAorCSovCisJZnVuY3Rpb24gYWxsb3dPdmVyZmxvdyAoZWwpIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJaWYgKHRoaXMgJiYgdGhpcy50YWdOYW1lKSBlbCA9IHRoaXM7IC8vIEJPVU5EIHRvIGVsZW1lbnQKKwkJdmFyICRQOworCQlpZiAoaXNTdHIoZWwpKQorCQkJJFAgPSAkUHNbZWxdOworCQllbHNlIGlmICgkKGVsKS5kYXRhKCJsYXlvdXRSb2xlIikpCisJCQkkUCA9ICQoZWwpOworCQllbHNlCisJCQkkKGVsKS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpeworCQkJCWlmICgkKHRoaXMpLmRhdGEoImxheW91dFJvbGUiKSkgeworCQkJCQkkUCA9ICQodGhpcyk7CisJCQkJCXJldHVybiBmYWxzZTsgLy8gQlJFQUsKKwkJCQl9CisJCQl9KTsKKwkJaWYgKCEkUCB8fCAhJFAubGVuZ3RoKSByZXR1cm47IC8vIElOVkFMSUQKKworCQl2YXIKKwkJCXBhbmUJPSAkUC5kYXRhKCJsYXlvdXRFZGdlIikKKwkJLAlzCQk9IHN0YXRlW3BhbmVdCisJCTsKKworCQkvLyBpZiBwYW5lIGlzIGFscmVhZHkgcmFpc2VkLCB0aGVuIHJlc2V0IGl0IGJlZm9yZSBkb2luZyBpdCBhZ2FpbiEKKwkJLy8gdGhpcyB3b3VsZCBoYXBwZW4gaWYgYWxsb3dPdmVyZmxvdyBpcyBhdHRhY2hlZCB0byBCT1RIIHRoZSBwYW5lIGFuZCBhbiBlbGVtZW50IAorCQlpZiAocy5jc3NTYXZlZCkKKwkJCXJlc2V0T3ZlcmZsb3cocGFuZSk7IC8vIHJlc2V0IHByZXZpb3VzIENTUyBiZWZvcmUgY29udGludWluZworCisJCS8vIGlmIHBhbmUgaXMgcmFpc2VkIGJ5IHNsaWRpbmcgb3IgcmVzaXppbmcsIG9yIGl0cyBjbG9zZWQsIHRoZW4gYWJvcnQKKwkJaWYgKHMuaXNTbGlkaW5nIHx8IHMuaXNSZXNpemluZyB8fCBzLmlzQ2xvc2VkKSB7CisJCQlzLmNzc1NhdmVkID0gZmFsc2U7CisJCQlyZXR1cm47CisJCX0KKworCQl2YXIKKwkJCW5ld0NTUwk9IHsgekluZGV4OiAob3B0aW9ucy56SW5kZXhlcy5yZXNpemVyX25vcm1hbCArIDEpIH0KKwkJLAljdXJDU1MJPSB7fQorCQksCW9mCQk9ICRQLmNzcygib3ZlcmZsb3ciKQorCQksCW9mWAkJPSAkUC5jc3MoIm92ZXJmbG93WCIpCisJCSwJb2ZZCQk9ICRQLmNzcygib3ZlcmZsb3dZIikKKwkJOworCQkvLyBkZXRlcm1pbmUgd2hpY2gsIGlmIGFueSwgb3ZlcmZsb3cgc2V0dGluZ3MgbmVlZCB0byBiZSBjaGFuZ2VkCisJCWlmIChvZiAhPSAidmlzaWJsZSIpIHsKKwkJCWN1ckNTUy5vdmVyZmxvdyA9IG9mOworCQkJbmV3Q1NTLm92ZXJmbG93ID0gInZpc2libGUiOworCQl9CisJCWlmIChvZlggJiYgIW9mWC5tYXRjaCgvKHZpc2libGV8YXV0bykvKSkgeworCQkJY3VyQ1NTLm92ZXJmbG93WCA9IG9mWDsKKwkJCW5ld0NTUy5vdmVyZmxvd1ggPSAidmlzaWJsZSI7CisJCX0KKwkJaWYgKG9mWSAmJiAhb2ZZLm1hdGNoKC8odmlzaWJsZXxhdXRvKS8pKSB7CisJCQljdXJDU1Mub3ZlcmZsb3dZID0gb2ZYOworCQkJbmV3Q1NTLm92ZXJmbG93WSA9ICJ2aXNpYmxlIjsKKwkJfQorCisJCS8vIHNhdmUgdGhlIGN1cnJlbnQgb3ZlcmZsb3cgc2V0dGluZ3MgLSBldmVuIGlmIGJsYW5rIQorCQlzLmNzc1NhdmVkID0gY3VyQ1NTOworCisJCS8vIGFwcGx5IG5ldyBDU1MgdG8gcmFpc2UgekluZGV4IGFuZCwgaWYgbmVjZXNzYXJ5LCBtYWtlIG92ZXJmbG93ICd2aXNpYmxlJworCQkkUC5jc3MoIG5ld0NTUyApOworCisJCS8vIG1ha2Ugc3VyZSB0aGUgekluZGV4IG9mIGFsbCBvdGhlciBwYW5lcyBpcyBub3JtYWwKKwkJJC5lYWNoKF9jLmFsbFBhbmVzLCBmdW5jdGlvbihpLCBwKSB7CisJCQlpZiAocCAhPSBwYW5lKSByZXNldE92ZXJmbG93KHApOworCQl9KTsKKworCX07CisJLyoqCisJKiBAcGFyYW0ge09iamVjdD19ICAgW2VsXQkob3B0aW9uYWwpIENhbiBhbHNvIGJlICdib3VuZCcgdG8gYSBjbGljaywgbW91c2VPdmVyLCBvciBvdGhlciBldmVudAorCSovCisJZnVuY3Rpb24gcmVzZXRPdmVyZmxvdyAoZWwpIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJaWYgKHRoaXMgJiYgdGhpcy50YWdOYW1lKSBlbCA9IHRoaXM7IC8vIEJPVU5EIHRvIGVsZW1lbnQKKwkJdmFyICRQOworCQlpZiAoaXNTdHIoZWwpKQorCQkJJFAgPSAkUHNbZWxdOworCQllbHNlIGlmICgkKGVsKS5kYXRhKCJsYXlvdXRSb2xlIikpCisJCQkkUCA9ICQoZWwpOworCQllbHNlCisJCQkkKGVsKS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpeworCQkJCWlmICgkKHRoaXMpLmRhdGEoImxheW91dFJvbGUiKSkgeworCQkJCQkkUCA9ICQodGhpcyk7CisJCQkJCXJldHVybiBmYWxzZTsgLy8gQlJFQUsKKwkJCQl9CisJCQl9KTsKKwkJaWYgKCEkUCB8fCAhJFAubGVuZ3RoKSByZXR1cm47IC8vIElOVkFMSUQKKworCQl2YXIKKwkJCXBhbmUJPSAkUC5kYXRhKCJsYXlvdXRFZGdlIikKKwkJLAlzCQk9IHN0YXRlW3BhbmVdCisJCSwJQ1NTCQk9IHMuY3NzU2F2ZWQgfHwge30KKwkJOworCQkvLyByZXNldCB0aGUgekluZGV4CisJCWlmICghcy5pc1NsaWRpbmcgJiYgIXMuaXNSZXNpemluZykKKwkJCSRQLmNzcygiekluZGV4Iiwgb3B0aW9ucy56SW5kZXhlcy5wYW5lX25vcm1hbCk7CisKKwkJLy8gcmVzZXQgT3ZlcmZsb3cgLSBpZiBuZWNlc3NhcnkKKwkJJFAuY3NzKCBDU1MgKTsKKworCQkvLyBjbGVhciB2YXIKKwkJcy5jc3NTYXZlZCA9IGZhbHNlOworCX07CisKKy8qCisgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqIENSRUFURS9SRVRVUk4gTEFZT1VUCisgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqLworCisJLy8gdmFsaWRhdGUgdGhhdCBjb250YWluZXIgZXhpc3RzCisJdmFyICROID0gJCh0aGlzKS5lcSgwKTsgLy8gRklSU1QgbWF0Y2hpbmcgQ29udGFpbmVyIGVsZW1lbnQKKwlpZiAoISROLmxlbmd0aCkgeworCQlyZXR1cm4gX2xvZyggb3B0aW9ucy5lcnJvcnMuY29udGFpbmVyTWlzc2luZyApOworCX07CisKKwkvLyBVc2VycyByZXRyaWV2ZSBJbnN0YW5jZSBvZiBhIGxheW91dCB3aXRoOiAkTi5sYXlvdXQoKSBPUiAkTi5kYXRhKCJsYXlvdXQiKQorCS8vIHJldHVybiB0aGUgSW5zdGFuY2UtcG9pbnRlciBpZiBsYXlvdXQgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZAorCWlmICgkTi5kYXRhKCJsYXlvdXRDb250YWluZXIiKSAmJiAkTi5kYXRhKCJsYXlvdXQiKSkKKwkJcmV0dXJuICROLmRhdGEoImxheW91dCIpOyAvLyBjYWNoZWQgcG9pbnRlcgorCisJLy8gaW5pdCBnbG9iYWwgdmFycworCXZhciAKKwkJJFBzCT0ge30JLy8gUGFuZXMgeDUJCS0gc2V0IGluIGluaXRQYW5lcygpCisJLAkkQ3MJPSB7fQkvLyBDb250ZW50IHg1CS0gc2V0IGluIGluaXRQYW5lcygpCisJLAkkUnMJPSB7fQkvLyBSZXNpemVycyB4NAktIHNldCBpbiBpbml0SGFuZGxlcygpCisJLAkkVHMJPSB7fQkvLyBUb2dnbGVycyB4NAktIHNldCBpbiBpbml0SGFuZGxlcygpCisJLAkkTXMJPSAkKFtdKQkvLyBNYXNrcyAtIHVwIHRvIDIgbWFza3MgcGVyIHBhbmUgKElGUkFNRSArIERJVikKKwkvLwlhbGlhc2VzIGZvciBjb2RlIGJyZXZpdHkKKwksCXNDCT0gc3RhdGUuY29udGFpbmVyIC8vIGFsaWFzIGZvciBlYXN5IGFjY2VzcyB0byAnY29udGFpbmVyIGRpbWVuc2lvbnMnCisJLAlzSUQJPSBzdGF0ZS5pZCAvLyBhbGlhcyBmb3IgdW5pcXVlIGxheW91dCBJRC9uYW1lc3BhY2UgLSBlZzogImxheW91dDQzNSIKKwk7CisKKwkvLyBjcmVhdGUgSW5zdGFuY2Ugb2JqZWN0IHRvIGV4cG9zZSBkYXRhICYgb3B0aW9uIFByb3BlcnRpZXMsIGFuZCBwcmltYXJ5IGFjdGlvbiBNZXRob2RzCisJdmFyIEluc3RhbmNlID0geworCS8vCWxheW91dCBkYXRhCisJCW9wdGlvbnM6CQkJb3B0aW9ucwkJCS8vIHByb3BlcnR5IC0gb3B0aW9ucyBoYXNoCisJLAlzdGF0ZToJCQkJc3RhdGUJCQkvLyBwcm9wZXJ0eSAtIGRpbWVuc2lvbnMgaGFzaAorCS8vCW9iamVjdCBwb2ludGVycworCSwJY29udGFpbmVyOgkJCSROCQkJCS8vIHByb3BlcnR5IC0gb2JqZWN0IHBvaW50ZXJzIGZvciBsYXlvdXQgY29udGFpbmVyCisJLAlwYW5lczoJCQkJJFBzCQkJCS8vIHByb3BlcnR5IC0gb2JqZWN0IHBvaW50ZXJzIGZvciBBTEwgUGFuZXM6IHBhbmVzLm5vcnRoLCBwYW5lcy5jZW50ZXIKKwksCWNvbnRlbnRzOgkJCSRDcwkJCQkvLyBwcm9wZXJ0eSAtIG9iamVjdCBwb2ludGVycyBmb3IgQUxMIENvbnRlbnQ6IGNvbnRlbnRzLm5vcnRoLCBjb250ZW50cy5jZW50ZXIKKwksCXJlc2l6ZXJzOgkJCSRScwkJCQkvLyBwcm9wZXJ0eSAtIG9iamVjdCBwb2ludGVycyBmb3IgQUxMIFJlc2l6ZXJzLCBlZzogcmVzaXplcnMubm9ydGgKKwksCXRvZ2dsZXJzOgkJCSRUcwkJCQkvLyBwcm9wZXJ0eSAtIG9iamVjdCBwb2ludGVycyBmb3IgQUxMIFRvZ2dsZXJzLCBlZzogdG9nZ2xlcnMubm9ydGgKKwkvLwlib3JkZXItcGFuZSBvcGVuL2Nsb3NlCisJLAloaWRlOgkJCQloaWRlCQkJLy8gbWV0aG9kIC0gZGl0dG8KKwksCXNob3c6CQkJCXNob3cJCQkvLyBtZXRob2QgLSBkaXR0bworCSwJdG9nZ2xlOgkJCQl0b2dnbGUJCQkvLyBtZXRob2QgLSBwYXNzIGEgJ3BhbmUnICgibm9ydGgiLCAid2VzdCIsIGV0YykKKwksCW9wZW46CQkJCW9wZW4JCQkvLyBtZXRob2QgLSBkaXR0bworCSwJY2xvc2U6CQkJCWNsb3NlCQkJLy8gbWV0aG9kIC0gZGl0dG8KKwksCXNsaWRlT3BlbjoJCQlzbGlkZU9wZW4JCS8vIG1ldGhvZCAtIGRpdHRvCisJLAlzbGlkZUNsb3NlOgkJCXNsaWRlQ2xvc2UJCS8vIG1ldGhvZCAtIGRpdHRvCisJLAlzbGlkZVRvZ2dsZToJCXNsaWRlVG9nZ2xlCQkvLyBtZXRob2QgLSBkaXR0bworCS8vCXBhbmUgYWN0aW9ucworCSwJc2V0U2l6ZUxpbWl0czoJCXNldFNpemVMaW1pdHMJLy8gbWV0aG9kIC0gcGFzcyBhICdwYW5lJyAtIHVwZGF0ZSBzdGF0ZSBtaW4vbWF4IGRhdGEKKwksCV9zaXplUGFuZToJCQlzaXplUGFuZQkJLy8gbWV0aG9kIC1pbnRlbmRlZCBmb3IgdXNlciBieSBwbHVnaW5zIG9ubHkhCisJLAlzaXplUGFuZToJCQltYW51YWxTaXplUGFuZQkvLyBtZXRob2QgLSBwYXNzIGEgJ3BhbmUnIEFORCBhbiAnb3V0ZXItc2l6ZScgaW4gcGl4ZWxzIG9yIHBlcmNlbnQsIG9yICdhdXRvJworCSwJc2l6ZUNvbnRlbnQ6CQlzaXplQ29udGVudAkJLy8gbWV0aG9kIC0gcGFzcyBhICdwYW5lJworCSwJc3dhcFBhbmVzOgkJCXN3YXBQYW5lcwkJLy8gbWV0aG9kIC0gcGFzcyBUV08gJ3BhbmVzJyAtIHdpbGwgc3dhcCB0aGVtCisJLAlzaG93TWFza3M6CQkJc2hvd01hc2tzCQkvLyBtZXRob2QgLSBwYXNzIGEgJ3BhbmUnIE9SIGxpc3Qgb2YgcGFuZXMgLSBkZWZhdWx0ID0gYWxsIHBhbmVzIHdpdGggbWFzayBvcHRpb24gc2V0CisJLAloaWRlTWFza3M6CQkJaGlkZU1hc2tzCQkvLyBtZXRob2QgLSBkaXR0bycKKwkvLwlwYW5lIGVsZW1lbnQgbWV0aG9kcworCSwJaW5pdENvbnRlbnQ6CQlpbml0Q29udGVudAkJLy8gbWV0aG9kIC0gZGl0dG8KKwksCWFkZFBhbmU6CQkJYWRkUGFuZQkJCS8vIG1ldGhvZCAtIHBhc3MgYSAncGFuZScKKwksCXJlbW92ZVBhbmU6CQkJcmVtb3ZlUGFuZQkJLy8gbWV0aG9kIC0gcGFzcyBhICdwYW5lJyB0byByZW1vdmUgZnJvbSBsYXlvdXQsIGFkZCAndHJ1ZScgdG8gZGVsZXRlIHRoZSBwYW5lLWVsZW0KKwksCWNyZWF0ZUNoaWxkTGF5b3V0OgljcmVhdGVDaGlsZExheW91dC8vIG1ldGhvZCAtIHBhc3MgYSAncGFuZScgYW5kIChvcHRpb25hbCkgbGF5b3V0LW9wdGlvbnMgKE9WRVJSSURFUyBvcHRpb25zW3BhbmVdLmNoaWxkT3B0aW9ucworCS8vCXNwZWNpYWwgcGFuZSBvcHRpb24gc2V0dGluZworCSwJZW5hYmxlQ2xvc2FibGU6CQllbmFibGVDbG9zYWJsZQkvLyBtZXRob2QgLSBwYXNzIGEgJ3BhbmUnCisJLAlkaXNhYmxlQ2xvc2FibGU6CWRpc2FibGVDbG9zYWJsZQkvLyBtZXRob2QgLSBkaXR0bworCSwJZW5hYmxlU2xpZGFibGU6CQllbmFibGVTbGlkYWJsZQkvLyBtZXRob2QgLSBkaXR0bworCSwJZGlzYWJsZVNsaWRhYmxlOglkaXNhYmxlU2xpZGFibGUJLy8gbWV0aG9kIC0gZGl0dG8KKwksCWVuYWJsZVJlc2l6YWJsZToJZW5hYmxlUmVzaXphYmxlCS8vIG1ldGhvZCAtIGRpdHRvCisJLAlkaXNhYmxlUmVzaXphYmxlOglkaXNhYmxlUmVzaXphYmxlLy8gbWV0aG9kIC0gZGl0dG8KKwkvLwl1dGlsaXR5IG1ldGhvZHMgZm9yIHBhbmVzCisJLAlhbGxvd092ZXJmbG93OgkJYWxsb3dPdmVyZmxvdwkvLyB1dGlsaXR5IC0gcGFzcyBjYWxsaW5nIGVsZW1lbnQgKHRoaXMpCisJLAlyZXNldE92ZXJmbG93OgkJcmVzZXRPdmVyZmxvdwkvLyB1dGlsaXR5IC0gZGl0dG8KKwkvLwlsYXlvdXQgY29udHJvbAorCSwJZGVzdHJveToJCQlkZXN0cm95CQkJLy8gbWV0aG9kIC0gbm8gcGFyYW1ldGVycworCSwJaW5pdFBhbmVzOgkJCWlzSW5pdGlhbGl6ZWQJLy8gbWV0aG9kIC0gbm8gcGFyYW1ldGVycworCSwJcmVzaXplQWxsOgkJCXJlc2l6ZUFsbAkJLy8gbWV0aG9kIC0gbm8gcGFyYW1ldGVycworCS8vCWNhbGxiYWNrIHRyaWdnZXJpbmcKKwksCXJ1bkNhbGxiYWNrczoJCV9ydW5DYWxsYmFja3MJLy8gbWV0aG9kIC0gcGFzcyBldnROYW1lICYgcGFuZSAoaWYgYSBwYW5lLWV2ZW50KSwgZWc6IHRyaWdnZXIoIm9ub3BlbiIsICJ3ZXN0IikKKwkvLwlhbGlhcyBjb2xsZWN0aW9ucyBvZiBvcHRpb25zLCBzdGF0ZSBhbmQgY2hpbGRyZW4gLSBjcmVhdGVkIGluIGFkZFBhbmUgYW5kIGV4dGVuZGVkIGVsc2V3aGVyZQorCSwJaGFzUGFyZW50TGF5b3V0OglmYWxzZQkJCS8vIHNldCBieSBpbml0Q29udGFpbmVyKCkKKwksCWNoaWxkcmVuOgkJCWNoaWxkcmVuCQkvLyBwb2ludGVycyB0byBjaGlsZC1sYXlvdXRzLCBlZzogSW5zdGFuY2UuY2hpbGRyZW5bIndlc3QiXQorCSwJbm9ydGg6CQkJCWZhbHNlCQkJLy8gYWxpYXMgZ3JvdXA6IHsgbmFtZTogcGFuZSwgcGFuZTogJFBzW3BhbmVdLCBvcHRpb25zOiBvcHRpb25zW3BhbmVdLCBzdGF0ZTogc3RhdGVbcGFuZV0sIGNoaWxkOiBjaGlsZHJlbltwYW5lXSB9CisJLAlzb3V0aDoJCQkJZmFsc2UJCQkvLyBkaXR0bworCSwJd2VzdDoJCQkJZmFsc2UJCQkvLyBkaXR0bworCSwJZWFzdDoJCQkJZmFsc2UJCQkvLyBkaXR0bworCSwJY2VudGVyOgkJCQlmYWxzZQkJCS8vIGRpdHRvCisJfTsKKworCS8vIGNyZWF0ZSB0aGUgYm9yZGVyIGxheW91dCBOT1cKKwlpZiAoX2NyZWF0ZSgpID09PSAnY2FuY2VsJykgLy8gb25sb2FkX3N0YXJ0IGNhbGxiYWNrIHJldHVybmVkIGZhbHNlIHRvIENBTkNFTCBsYXlvdXQgY3JlYXRpb24KKwkJcmV0dXJuIG51bGw7CisJZWxzZSAvLyB0cnVlIE9SIGZhbHNlIC0tIGlmIGxheW91dC1lbGVtZW50cyBkaWQgTk9UIGluaXQgKGhpZGRlbiBvciBkbyBub3QgZXhpc3QpLCBjYW4gYXV0by1pbml0IGxhdGVyCisJCXJldHVybiBJbnN0YW5jZTsgLy8gcmV0dXJuIHRoZSBJbnN0YW5jZSBvYmplY3QKKworfQorCisKKy8qCU9MRCB2ZXJzaW9ucyBvZiBqUXVlcnkgb25seSBzZXQgJC5zdXBwb3J0LmJveE1vZGVsIGFmdGVyIHBhZ2UgaXMgbG9hZGVkCisgKglzbyBpZiB0aGlzIGlzIElFLCB1c2Ugc3VwcG9ydC5ib3hNb2RlbCB0byB0ZXN0IGZvciBxdWlya3MtbW9kZSAoT05MWSBJRSBjaGFuZ2VzIGJveE1vZGVsKS4KKyAqLworJChmdW5jdGlvbigpeworCXZhciBiID0gJC5sYXlvdXQuYnJvd3NlcjsKKwlpZiAoYi5tc2llKSBiLmJveE1vZGVsID0gJC5zdXBwb3J0LmJveE1vZGVsOworfSk7CisKKworLyoqCisgKiBqcXVlcnkubGF5b3V0LnN0YXRlIDEuMAorICogJERhdGU6IDIwMTEtMDctMTYgMDg6MDA6MDAgKFNhdCwgMTYgSnVseSAyMDExKSAkCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIAorICogICBLZXZpbiBEYWxtYW4gKGh0dHA6Ly9hbGxwcm8ubmV0KQorICoKKyAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sKQorICogYW5kIE1JVCAoaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHApIGxpY2Vuc2VzLgorICoKKyAqIEBkZXBlbmRhbmNpZXM6IFVJIExheW91dCAxLjMuMC5yYzMwLjEgb3IgaGlnaGVyCisgKiBAZGVwZW5kYW5jaWVzOiAkLnVpLmNvb2tpZSAoYWJvdmUpCisgKgorICogQHN1cHBvcnQ6IGh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9qcXVlcnktdWktbGF5b3V0CisgKi8KKy8qCisgKglTdGF0ZS1tYW5hZ2VtZW50IG9wdGlvbnMgc3RvcmVkIGluIG9wdGlvbnMuc3RhdGVNYW5hZ2VtZW50LCB3aGljaCBpbmNsdWRlcyBhIC5jb29raWUgaGFzaAorICoJRGVmYXVsdCBvcHRpb25zIHNhdmVzIEFMTCBLRVlTIGZvciBBTEwgUEFORVMsIGllOiBwYW5lLnNpemUsIHBhbmUuaXNDbG9zZWQsIHBhbmUuaXNIaWRkZW4KKyAqCisgKgkvLyBTVEFURS9DT09LSUUgT1BUSU9OUworICoJQGV4YW1wbGUgJChlbCkubGF5b3V0KHsKKwkJCQlzdGF0ZU1hbmFnZW1lbnQ6IHsKKwkJCQkJZW5hYmxlZDoJdHJ1ZQorCQkJCSwJc3RhdGVLZXlzOgkiZWFzdC5zaXplLHdlc3Quc2l6ZSxlYXN0LmlzQ2xvc2VkLHdlc3QuaXNDbG9zZWQiCisJCQkJLAljb29raWU6CQl7IG5hbWU6ICJhcHBMYXlvdXQiLCBwYXRoOiAiLyIgfQorCQkJCX0KKwkJCX0pCisgKglAZXhhbXBsZSAkKGVsKS5sYXlvdXQoeyBzdGF0ZU1hbmFnZW1lbnRfX2VuYWJsZWQ6IHRydWUgfSkgLy8gZW5hYmxlIGF1dG8tc3RhdGUtbWFuYWdlbWVudCB1c2luZyBjb29raWVzCisgKglAZXhhbXBsZSAkKGVsKS5sYXlvdXQoeyBzdGF0ZU1hbmFnZW1lbnRfX2Nvb2tpZTogeyBuYW1lOiAiYXBwTGF5b3V0IiwgcGF0aDogIi8iIH0gfSkKKyAqCUBleGFtcGxlICQoZWwpLmxheW91dCh7IHN0YXRlTWFuYWdlbWVudF9fY29va2llX19uYW1lOiAiYXBwTGF5b3V0Iiwgc3RhdGVNYW5hZ2VtZW50X19jb29raWVfX3BhdGg6ICIvIiB9KQorICoKKyAqCS8vIFNUQVRFL0NPT0tJRSBNRVRIT0RTCisgKglAZXhhbXBsZSBteUxheW91dC5zYXZlQ29va2llKCAid2VzdC5pc0Nsb3NlZCxub3J0aC5zaXplLHNvdXRoLmlzSGlkZGVuIiwge2V4cGlyZXM6IDd9ICk7CisgKglAZXhhbXBsZSBteUxheW91dC5sb2FkQ29va2llKCk7CisgKglAZXhhbXBsZSBteUxheW91dC5kZWxldGVDb29raWUoKTsKKyAqCUBleGFtcGxlIHZhciBKU09OID0gbXlMYXlvdXQucmVhZFN0YXRlKCk7CS8vIENVUlJFTlQgTGF5b3V0IFN0YXRlCisgKglAZXhhbXBsZSB2YXIgSlNPTiA9IG15TGF5b3V0LnJlYWRDb29raWUoKTsJLy8gU0FWRUQgTGF5b3V0IFN0YXRlIChmcm9tIGNvb2tpZSkKKyAqCUBleGFtcGxlIHZhciBKU09OID0gbXlMYXlvdXQuc3RhdGUuc3RhdGVEYXRhOwkvLyBMQVNUIExPQURFRCBMYXlvdXQgU3RhdGUgKGNvb2tpZSBzYXZlZCBpbiBsYXlvdXQuc3RhdGUgaGFzaCkKKyAqCisgKglDVVNUT00gU1RBVEUtTUFOQUdFTUVOVCAoZWcsIHNhdmVkIGluIGEgZGF0YWJhc2UpCisgKglAZXhhbXBsZSB2YXIgSlNPTiA9IG15TGF5b3V0LnJlYWRTdGF0ZSggIndlc3QuaXNDbG9zZWQsbm9ydGguc2l6ZSxzb3V0aC5pc0hpZGRlbiIgKTsKKyAqCUBleGFtcGxlIG15TGF5b3V0LmxvYWRTdGF0ZSggSlNPTiApOworICovCisKKy8qKgorICoJVUkgQ09PS0lFIFVUSUxJVFkKKyAqCisgKglBICQuY29va2llIE9SICQudWkuY29va2llIG5hbWVzcGFjZSAqc2hvdWxkIGJlIHN0YW5kYXJkKiwgYnV0IHVudGlsIHRoZW4uLi4KKyAqCVRoaXMgY3JlYXRlcyAkLnVpLmNvb2tpZSBzbyBMYXlvdXQgZG9lcyBub3QgbmVlZCB0aGUgY29va2llLmpxdWVyeS5qcyBwbHVnaW4KKyAqCU5PVEU6IFRoaXMgdXRpbGl0eSBpcyBSRVFVSVJFRCBieSB0aGUgbGF5b3V0LnN0YXRlIHBsdWdpbgorICoKKyAqCUNvb2tpZSBtZXRob2RzIGluIExheW91dCBhcmUgY3JlYXRlZCBhcyBwYXJ0IG9mIFN0YXRlIE1hbmFnZW1lbnQgCisgKi8KK2lmICghJC51aSkgJC51aSA9IHt9OworJC51aS5jb29raWUgPSB7CisKKwkvLyBjb29raWVFbmFibGVkIGlzIG5vdCBpbiBET00gc3BlY3MsIGJ1dCBET0VTIHdvcmtzIGluIGFsbCBicm93c2VycyxpbmNsdWRpbmcgSUU2CisJYWNjZXB0c0Nvb2tpZXM6ICEhbmF2aWdhdG9yLmNvb2tpZUVuYWJsZWQKKworLAlyZWFkOiBmdW5jdGlvbiAobmFtZSkgeworCQl2YXIKKwkJCWMJCT0gZG9jdW1lbnQuY29va2llCisJCSwJY3MJCT0gYyA/IGMuc3BsaXQoJzsnKSA6IFtdCisJCSwJcGFpcgkvLyBsb29wIHZhcgorCQk7CisJCWZvciAodmFyIGk9MCwgbj1jcy5sZW5ndGg7IGkgPCBuOyBpKyspIHsKKwkJCXBhaXIgPSAkLnRyaW0oY3NbaV0pLnNwbGl0KCc9Jyk7IC8vIG5hbWU9dmFsdWUgcGFpcgorCQkJaWYgKHBhaXJbMF0gPT0gbmFtZSkgLy8gZm91bmQgdGhlIGxheW91dCBjb29raWUKKwkJCQlyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMV0pOworCisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCissCXdyaXRlOiBmdW5jdGlvbiAobmFtZSwgdmFsLCBjb29raWVPcHRzKSB7CisJCXZhcgorCQkJcGFyYW1zCT0gJycKKwkJLAlkYXRlCT0gJycKKwkJLAljbGVhcgk9IGZhbHNlCisJCSwJbwkJPSBjb29raWVPcHRzIHx8IHt9CisJCSwJeAkJPSBvLmV4cGlyZXMKKwkJOworCQlpZiAoeCAmJiB4LnRvVVRDU3RyaW5nKQorCQkJZGF0ZSA9IHg7CisJCWVsc2UgaWYgKHggPT09IG51bGwgfHwgdHlwZW9mIHggPT09ICdudW1iZXInKSB7CisJCQlkYXRlID0gbmV3IERhdGUoKTsKKwkJCWlmICh4ID4gMCkKKwkJCQlkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyB4KTsKKwkJCWVsc2UgeworCQkJCWRhdGUuc2V0RnVsbFllYXIoMTk3MCk7CisJCQkJY2xlYXIgPSB0cnVlOworCQkJfQorCQl9CisJCWlmIChkYXRlKQkJcGFyYW1zICs9ICc7ZXhwaXJlcz0nKyBkYXRlLnRvVVRDU3RyaW5nKCk7CisJCWlmIChvLnBhdGgpCQlwYXJhbXMgKz0gJztwYXRoPScrIG8ucGF0aDsKKwkJaWYgKG8uZG9tYWluKQlwYXJhbXMgKz0gJztkb21haW49Jysgby5kb21haW47CisJCWlmIChvLnNlY3VyZSkJcGFyYW1zICs9ICc7c2VjdXJlJzsKKwkJZG9jdW1lbnQuY29va2llID0gbmFtZSArJz0nKyAoY2xlYXIgPyAiIiA6IGVuY29kZVVSSUNvbXBvbmVudCggdmFsICkpICsgcGFyYW1zOyAvLyB3cml0ZSBvciBjbGVhciBjb29raWUKKwl9CisKKywJY2xlYXI6IGZ1bmN0aW9uIChuYW1lKSB7CisJCSQudWkuY29va2llLndyaXRlKG5hbWUsICcnLCB7ZXhwaXJlczogLTF9KTsKKwl9CisKK307CisvLyBpZiBjb29raWUuanF1ZXJ5LmpzIGlzIG5vdCBsb2FkZWQsIGNyZWF0ZSBhbiBhbGlhcyB0byByZXBsaWNhdGUgaXQKKy8vIHRoaXMgbWF5IGJlIHVzZWZ1bCB0byBvdGhlciBwbHVnaW5zIG9yIGNvZGUgZGVwZW5kZW50IG9uIHRoYXQgcGx1Z2luCitpZiAoISQuY29va2llKSAkLmNvb2tpZSA9IGZ1bmN0aW9uIChrLCB2LCBvKSB7CisJdmFyIEMgPSAkLnVpLmNvb2tpZTsKKwlpZiAodiA9PT0gbnVsbCkKKwkJQy5jbGVhcihrKTsKKwllbHNlIGlmICh2ID09PSB1bmRlZmluZWQpCisJCXJldHVybiBDLnJlYWQoayk7CisJZWxzZQorCQlDLndyaXRlKGssIHYsIG8pOworfTsKKworCisvLyB0ZWxsIExheW91dCB0aGF0IHRoZSBzdGF0ZSBwbHVnaW4gaXMgYXZhaWxhYmxlCiskLmxheW91dC5wbHVnaW5zLnN0YXRlTWFuYWdlbWVudCA9IHRydWU7CisKKy8vCUFkZCBTdGF0ZS1NYW5hZ2VtZW50IG9wdGlvbnMgdG8gbGF5b3V0LmRlZmF1bHRzCiskLmxheW91dC5jb25maWcub3B0aW9uUm9vdEtleXMucHVzaCgic3RhdGVNYW5hZ2VtZW50Iik7CiskLmxheW91dC5kZWZhdWx0cy5zdGF0ZU1hbmFnZW1lbnQgPSB7CisJZW5hYmxlZDoJZmFsc2UJLy8gdHJ1ZSA9IGVuYWJsZSBzdGF0ZS1tYW5hZ2VtZW50LCBldmVuIGlmIG5vdCB1c2luZyBjb29raWVzCissCWF1dG9TYXZlOgl0cnVlCS8vIFNhdmUgYSBzdGF0ZS1jb29raWUgd2hlbiBwYWdlIGV4aXRzPworLAlhdXRvTG9hZDoJdHJ1ZQkvLyBMb2FkIHRoZSBzdGF0ZS1jb29raWUgd2hlbiBMYXlvdXQgaW5pdHM/CisJLy8gTGlzdCBzdGF0ZS1kYXRhIHRvIHNhdmUgLSBtdXN0IGJlIHBhbmUtc3BlY2lmaWMKKywJc3RhdGVLZXlzOgkibm9ydGguc2l6ZSxzb3V0aC5zaXplLGVhc3Quc2l6ZSx3ZXN0LnNpemUsIisKKwkJCQkibm9ydGguaXNDbG9zZWQsc291dGguaXNDbG9zZWQsZWFzdC5pc0Nsb3NlZCx3ZXN0LmlzQ2xvc2VkLCIrCisJCQkJIm5vcnRoLmlzSGlkZGVuLHNvdXRoLmlzSGlkZGVuLGVhc3QuaXNIaWRkZW4sd2VzdC5pc0hpZGRlbiIKKywJY29va2llOiB7CisJCW5hbWU6CSIiCS8vIElmIG5vdCBzcGVjaWZpZWQsIHdpbGwgdXNlIExheW91dC5uYW1lLCBlbHNlIGp1c3QgIkxheW91dCIKKwksCWRvbWFpbjoJIiIJLy8gYmxhbmsgPSBjdXJyZW50IGRvbWFpbgorCSwJcGF0aDoJIiIJLy8gYmxhbmsgPSBjdXJyZW50IHBhZ2UsICcvJyA9IGVudGlyZSB3ZWJzaXRlCisJLAlleHBpcmVzOiAiIgkvLyAnZGF5cycgdG8ga2VlcCBjb29raWUgLSBsZWF2ZSBibGFuayBmb3IgJ3Nlc3Npb24gY29va2llJworCSwJc2VjdXJlOglmYWxzZQorCX0KK307CisvLyBTZXQgc3RhdGVNYW5hZ2VtZW50IGFzIGEgbGF5b3V0LW9wdGlvbiwgTk9UIGEgcGFuZS1vcHRpb24KKyQubGF5b3V0Lm9wdGlvbnNNYXAubGF5b3V0LnB1c2goInN0YXRlTWFuYWdlbWVudCIpOworCisvKgorICoJU3RhdGUgTWFuYWdlbWVudCBtZXRob2RzCisgKi8KKyQubGF5b3V0LnN0YXRlID0geworCisJLyoqCisJICogR2V0IHRoZSBjdXJyZW50IGxheW91dCBzdGF0ZSBhbmQgc2F2ZSBpdCB0byBhIGNvb2tpZQorCSAqCisJICogbXlMYXlvdXQuc2F2ZUNvb2tpZSgga2V5cywgY29va2llT3B0cyApCisJICoKKwkgKiBAcGFyYW0ge09iamVjdH0JCQlpbnN0CisJICogQHBhcmFtIHsoc3RyaW5nfEFycmF5KT19CWtleXMKKwkgKiBAcGFyYW0ge09iamVjdD19CQkJY29va2llT3B0cworCSAqLworCXNhdmVDb29raWU6IGZ1bmN0aW9uIChpbnN0LCBrZXlzLCBjb29raWVPcHRzKSB7CisJCXZhciBvCT0gaW5zdC5vcHRpb25zCisJCSwJb1MJPSBvLnN0YXRlTWFuYWdlbWVudAorCQksCW9DCT0gJC5leHRlbmQodHJ1ZSwge30sIG9TLmNvb2tpZSwgY29va2llT3B0cyB8fCBudWxsKQorCQksCWRhdGEgPSBpbnN0LnN0YXRlLnN0YXRlRGF0YSA9IGluc3QucmVhZFN0YXRlKCBrZXlzIHx8IG9TLnN0YXRlS2V5cyApIC8vIHJlYWQgY3VycmVudCBwYW5lcy1zdGF0ZQorCQk7CisJCSQudWkuY29va2llLndyaXRlKCBvQy5uYW1lIHx8IG8ubmFtZSB8fCAiTGF5b3V0IiwgJC5sYXlvdXQuc3RhdGUuZW5jb2RlSlNPTihkYXRhKSwgb0MgKTsKKwkJcmV0dXJuICQuZXh0ZW5kKHRydWUsIHt9LCBkYXRhKTsgLy8gcmV0dXJuIENPUFkgb2Ygc3RhdGUuc3RhdGVEYXRhIGRhdGEKKwl9CisKKwkvKioKKwkgKiBSZW1vdmUgdGhlIHN0YXRlIGNvb2tpZQorCSAqCisJICogQHBhcmFtIHtPYmplY3R9CWluc3QKKwkgKi8KKywJZGVsZXRlQ29va2llOiBmdW5jdGlvbiAoaW5zdCkgeworCQl2YXIgbyA9IGluc3Qub3B0aW9uczsKKwkJJC51aS5jb29raWUuY2xlYXIoIG8uc3RhdGVNYW5hZ2VtZW50LmNvb2tpZS5uYW1lIHx8IG8ubmFtZSB8fCAiTGF5b3V0IiApOworCX0KKworCS8qKgorCSAqIFJlYWQgJiByZXR1cm4gZGF0YSBmcm9tIHRoZSBjb29raWUgLSBhcyBKU09OCisJICoKKwkgKiBAcGFyYW0ge09iamVjdH0JaW5zdAorCSAqLworLAlyZWFkQ29va2llOiBmdW5jdGlvbiAoaW5zdCkgeworCQl2YXIgbyA9IGluc3Qub3B0aW9uczsKKwkJdmFyIGMgPSAkLnVpLmNvb2tpZS5yZWFkKCBvLnN0YXRlTWFuYWdlbWVudC5jb29raWUubmFtZSB8fCBvLm5hbWUgfHwgIkxheW91dCIgKTsKKwkJLy8gY29udmVydCBjb29raWUgc3RyaW5nIGJhY2sgdG8gYSBoYXNoIGFuZCByZXR1cm4gaXQKKwkJcmV0dXJuIGMgPyAkLmxheW91dC5zdGF0ZS5kZWNvZGVKU09OKGMpIDoge307CisJfQorCisJLyoqCisJICogR2V0IGRhdGEgZnJvbSB0aGUgY29va2llIGFuZCBVU0UgSVQgdG8gbG9hZFN0YXRlCisJICoKKwkgKiBAcGFyYW0ge09iamVjdH0JaW5zdAorCSAqLworLAlsb2FkQ29va2llOiBmdW5jdGlvbiAoaW5zdCkgeworCQl2YXIgYyA9ICQubGF5b3V0LnN0YXRlLnJlYWRDb29raWUoaW5zdCk7IC8vIFJFQUQgdGhlIGNvb2tpZQorCQlpZiAoYykgeworCQkJaW5zdC5zdGF0ZS5zdGF0ZURhdGEgPSAkLmV4dGVuZCh0cnVlLCB7fSwgYyk7IC8vIFNFVCBzdGF0ZS5zdGF0ZURhdGEKKwkJCWluc3QubG9hZFN0YXRlKGMpOyAvLyBMT0FEIHRoZSByZXRyaWV2ZWQgc3RhdGUKKwkJfQorCQlyZXR1cm4gYzsKKwl9CisJCisJLyoqCisJICogVXBkYXRlIGxheW91dCBvcHRpb25zIGZyb20gdGhlIGNvb2tpZSwgaWYgb25lIGV4aXN0cworCSAqCisJICogQHBhcmFtIHtPYmplY3R9CQlpbnN0CisJICogQHBhcmFtIHtPYmplY3Q9fQkJc3RhdGVEYXRhCisJICogQHBhcmFtIHtib29sZWFuPX0JYW5pbWF0ZQorCSAqLworLAlsb2FkU3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBzdGF0ZURhdGEsIGFuaW1hdGUpIHsKKwkJc3RhdGVEYXRhID0gJC5sYXlvdXQudHJhbnNmb3JtRGF0YSggc3RhdGVEYXRhICk7IC8vIHBhbmVzID0gZGVmYXVsdCBzdWJrZXkKKwkJaWYgKCQuaXNFbXB0eU9iamVjdCggc3RhdGVEYXRhICkpIHJldHVybjsKKwkJJC5leHRlbmQodHJ1ZSwgaW5zdC5vcHRpb25zLCBzdGF0ZURhdGEpOyAvLyB1cGRhdGUgbGF5b3V0IG9wdGlvbnMKKwkJLy8gaWYgbGF5b3V0IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQsIHRoZW4gVVBEQVRFIGxheW91dCBzdGF0ZQorCQlpZiAoaW5zdC5zdGF0ZS5pbml0aWFsaXplZCkgeworCQkJdmFyIHBhbmUsIHZpcywgbywgcywgaCwgYworCQkJLAlub0FuaW1hdGUgPSAoYW5pbWF0ZT09PWZhbHNlKQorCQkJOworCQkJJC5lYWNoKCQubGF5b3V0LmNvbmZpZy5ib3JkZXJQYW5lcywgZnVuY3Rpb24gKGlkeCwgcGFuZSkgeworCQkJCXN0YXRlID0gaW5zdC5zdGF0ZVtwYW5lXTsKKwkJCQlvID0gc3RhdGVEYXRhWyBwYW5lIF07CisJCQkJaWYgKHR5cGVvZiBvICE9ICdvYmplY3QnKSByZXR1cm47IC8vIG5vIGtleSwgY29udGludWUKKwkJCQlzCT0gby5zaXplOworCQkJCWMJPSBvLmluaXRDbG9zZWQ7CisJCQkJaAk9IG8uaW5pdEhpZGRlbjsKKwkJCQl2aXMJPSBzdGF0ZS5pc1Zpc2libGU7CisJCQkJLy8gcmVzaXplIEJFRk9SRSBvcGVuaW5nCisJCQkJaWYgKCF2aXMpCisJCQkJCWluc3Quc2l6ZVBhbmUocGFuZSwgcywgZmFsc2UsIGZhbHNlKTsKKwkJCQlpZiAoaCA9PT0gdHJ1ZSkJCQlpbnN0LmhpZGUocGFuZSwgbm9BbmltYXRlKTsKKwkJCQllbHNlIGlmIChjID09PSBmYWxzZSkJaW5zdC5vcGVuIChwYW5lLCBmYWxzZSwgbm9BbmltYXRlKTsKKwkJCQllbHNlIGlmIChjID09PSB0cnVlKQlpbnN0LmNsb3NlKHBhbmUsIGZhbHNlLCBub0FuaW1hdGUpOworCQkJCWVsc2UgaWYgKGggPT09IGZhbHNlKQlpbnN0LnNob3cgKHBhbmUsIGZhbHNlLCBub0FuaW1hdGUpOworCQkJCS8vIHJlc2l6ZSBBRlRFUiBhbnkgb3RoZXIgYWN0aW9ucworCQkJCWlmICh2aXMpCisJCQkJCWluc3Quc2l6ZVBhbmUocGFuZSwgcywgZmFsc2UsIG5vQW5pbWF0ZSk7IC8vIGFuaW1hdGUgcmVzaXplIGlmIG9wdGlvbiBwYXNzZWQKKwkJCX0pOworCQl9OworCX0KKworCS8qKgorCSAqIEdldCB0aGUgKmN1cnJlbnQgbGF5b3V0IHN0YXRlKiBhbmQgcmV0dXJuIGl0IGFzIGEgaGFzaAorCSAqCisJICogQHBhcmFtIHtPYmplY3Q9fQkJCWluc3QKKwkgKiBAcGFyYW0geyhzdHJpbmd8QXJyYXkpPX0Ja2V5cworCSAqLworLAlyZWFkU3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBrZXlzKSB7CisJCXZhcgorCQkJZGF0YQk9IHt9CisJCSwJYWx0CQk9IHsgaXNDbG9zZWQ6ICdpbml0Q2xvc2VkJywgaXNIaWRkZW46ICdpbml0SGlkZGVuJyB9CisJCSwJc3RhdGUJPSBpbnN0LnN0YXRlCisJCSwJcGFuZXMJPSAkLmxheW91dC5jb25maWcuYWxsUGFuZXMKKwkJLAlwYWlyLCBwYW5lLCBrZXksIHZhbAorCQk7CisJCWlmICgha2V5cykga2V5cyA9IGluc3Qub3B0aW9ucy5zdGF0ZU1hbmFnZW1lbnQuc3RhdGVLZXlzOyAvLyBpZiBjYWxsZWQgYnkgdXNlcgorCQlpZiAoJC5pc0FycmF5KGtleXMpKSBrZXlzID0ga2V5cy5qb2luKCIsIik7CisJCS8vIGNvbnZlcnQga2V5cyB0byBhbiBhcnJheSBhbmQgY2hhbmdlIGRlbGltaXRlcnMgZnJvbSAnX18nIHRvICcuJworCQlrZXlzID0ga2V5cy5yZXBsYWNlKC9fXy9nLCAiLiIpLnNwbGl0KCcsJyk7CisJCS8vIGxvb3Aga2V5cyBhbmQgY3JlYXRlIGEgZGF0YSBoYXNoCisJCWZvciAodmFyIGk9MCwgbj1rZXlzLmxlbmd0aDsgaSA8IG47IGkrKykgeworCQkJcGFpciA9IGtleXNbaV0uc3BsaXQoIi4iKTsKKwkJCXBhbmUgPSBwYWlyWzBdOworCQkJa2V5ICA9IHBhaXJbMV07CisJCQlpZiAoJC5pbkFycmF5KHBhbmUsIHBhbmVzKSA8IDApIGNvbnRpbnVlOyAvLyBiYWQgcGFuZSEKKwkJCXZhbCA9IHN0YXRlWyBwYW5lIF1bIGtleSBdOworCQkJaWYgKHZhbCA9PSB1bmRlZmluZWQpIGNvbnRpbnVlOworCQkJaWYgKGtleT09ImlzQ2xvc2VkIiAmJiBzdGF0ZVtwYW5lXVsiaXNTbGlkaW5nIl0pCisJCQkJdmFsID0gdHJ1ZTsgLy8gaWYgc2xpZGluZywgdGhlbiAqcmVhbGx5KiBpc0Nsb3NlZAorCQkJKCBkYXRhW3BhbmVdIHx8IChkYXRhW3BhbmVdPXt9KSApWyBhbHRba2V5XSA/IGFsdFtrZXldIDoga2V5IF0gPSB2YWw7CisJCX0KKwkJcmV0dXJuIGRhdGE7CisJfQorCisJLyoqCisJICoJU3RyaW5naWZ5IGEgSlNPTiBoYXNoIHNvIGNhbiBzYXZlIGluIGEgY29va2llIG9yIGRiLWZpZWxkCisJICovCissCWVuY29kZUpTT046IGZ1bmN0aW9uIChKU09OKSB7CisJCXJldHVybiBwYXJzZShKU09OKTsKKwkJZnVuY3Rpb24gcGFyc2UgKGgpIHsKKwkJCXZhciBEPVtdLCBpPTAsIGssIHYsIHQ7IC8vIGsgPSBrZXksIHYgPSB2YWx1ZQorCQkJZm9yIChrIGluIGgpIHsKKwkJCQl2ID0gaFtrXTsKKwkJCQl0ID0gdHlwZW9mIHY7CisJCQkJaWYgKHQgPT0gJ3N0cmluZycpCQkvLyBTVFJJTkcgLSBhZGQgcXVvdGVzCisJCQkJCXYgPSAnIicrIHYgKyciJzsKKwkJCQllbHNlIGlmICh0ID09ICdvYmplY3QnKQkvLyBTVUItS0VZIC0gcmVjdXJzZSBpbnRvIGl0CisJCQkJCXYgPSBwYXJzZSh2KTsKKwkJCQlEW2krK10gPSAnIicrIGsgKyciOicrIHY7CisJCQl9CisJCQlyZXR1cm4gJ3snKyBELmpvaW4oJywnKSArJ30nOworCQl9OworCX0KKworCS8qKgorCSAqCUNvbnZlcnQgc3RyaW5naWZpZWQgSlNPTiBiYWNrIHRvIGEgaGFzaCBvYmplY3QKKwkgKglAc2VlCQkkLnBhcnNlSlNPTigpLCBhZGRpbmcgaW4galF1ZXJ5IDEuNC4xCisJICovCissCWRlY29kZUpTT046IGZ1bmN0aW9uIChzdHIpIHsKKwkJdHJ5IHsgcmV0dXJuICQucGFyc2VKU09OID8gJC5wYXJzZUpTT04oc3RyKSA6IHdpbmRvd1siZXZhbCJdKCIoIisgc3RyICsiKSIpIHx8IHt9OyB9CisJCWNhdGNoIChlKSB7IHJldHVybiB7fTsgfQorCX0KKworCissCV9jcmVhdGU6IGZ1bmN0aW9uIChpbnN0KSB7CisJCXZhciBfCT0gJC5sYXlvdXQuc3RhdGU7CisJCS8vCUFERCBTdGF0ZS1NYW5hZ2VtZW50IHBsdWdpbiBtZXRob2RzIHRvIGluc3QKKwkJICQuZXh0ZW5kKCBpbnN0LCB7CisJCS8vCXJlYWRDb29raWUgLSB1cGRhdGUgb3B0aW9ucyBmcm9tIGNvb2tpZSAtIHJldHVybnMgaGFzaCBvZiBjb29raWUgZGF0YQorCQkJcmVhZENvb2tpZToJCWZ1bmN0aW9uICgpIHsgcmV0dXJuIF8ucmVhZENvb2tpZShpbnN0KTsgfQorCQkvLwlkZWxldGVDb29raWUKKwkJLAlkZWxldGVDb29raWU6CWZ1bmN0aW9uICgpIHsgXy5kZWxldGVDb29raWUoaW5zdCk7IH0KKwkJLy8Jc2F2ZUNvb2tpZSAtIG9wdGlvbmFsbHkgcGFzcyBrZXlzLWxpc3QgYW5kIGNvb2tpZS1vcHRpb25zIChoYXNoKQorCQksCXNhdmVDb29raWU6CQlmdW5jdGlvbiAoa2V5cywgY29va2llT3B0cykgeyByZXR1cm4gXy5zYXZlQ29va2llKGluc3QsIGtleXMsIGNvb2tpZU9wdHMpOyB9CisJCS8vCWxvYWRDb29raWUgLSByZWFkQ29va2llIGFuZCB1c2UgdG8gbG9hZFN0YXRlKCkgLSByZXR1cm5zIGhhc2ggb2YgY29va2llIGRhdGEKKwkJLAlsb2FkQ29va2llOgkJZnVuY3Rpb24gKCkgeyByZXR1cm4gXy5sb2FkQ29va2llKGluc3QpOyB9CisJCS8vCWxvYWRTdGF0ZSAtIHBhc3MgYSBoYXNoIG9mIHN0YXRlIHRvIHVzZSB0byB1cGRhdGUgb3B0aW9ucworCQksCWxvYWRTdGF0ZToJCWZ1bmN0aW9uIChzdGF0ZURhdGEsIGFuaW1hdGUpIHsgXy5sb2FkU3RhdGUoaW5zdCwgc3RhdGVEYXRhLCBhbmltYXRlKTsgfQorCQkvLwlyZWFkU3RhdGUgLSByZXR1cm5zIGhhc2ggb2YgY3VycmVudCBsYXlvdXQtc3RhdGUKKwkJLAlyZWFkU3RhdGU6CQlmdW5jdGlvbiAoa2V5cykgeyByZXR1cm4gXy5yZWFkU3RhdGUoaW5zdCwga2V5cyk7IH0KKwkJLy8JYWRkIEpTT04gdXRpbGl0eSBtZXRob2RzIHRvby4uLgorCQksCWVuY29kZUpTT046CQlfLmVuY29kZUpTT04KKwkJLAlkZWNvZGVKU09OOgkJXy5kZWNvZGVKU09OCisJCX0pOworCisJCS8vIGluaXQgc3RhdGUuc3RhdGVEYXRhIGtleSwgZXZlbiBpZiBwbHVnaW4gaXMgaW5pdGlhbGx5IGRpc2FibGVkCisJCWluc3Quc3RhdGUuc3RhdGVEYXRhID0ge307CisKKwkJLy8gcmVhZCBhbmQgbG9hZCBjb29raWUtZGF0YSBwZXIgb3B0aW9ucworCQl2YXIgb1MgPSBpbnN0Lm9wdGlvbnMuc3RhdGVNYW5hZ2VtZW50OworCQlpZiAob1MuZW5hYmxlZCkgeworCQkJaWYgKG9TLmF1dG9Mb2FkKSAvLyB1cGRhdGUgdGhlIG9wdGlvbnMgZnJvbSB0aGUgY29va2llCisJCQkJaW5zdC5sb2FkQ29va2llKCk7CisJCQllbHNlIC8vIGRvbid0IG1vZGlmeSBvcHRpb25zIC0ganVzdCBzdG9yZSBjb29raWUgZGF0YSBpbiBzdGF0ZS5zdGF0ZURhdGEKKwkJCQlpbnN0LnN0YXRlLnN0YXRlRGF0YSA9IGluc3QucmVhZENvb2tpZSgpOworCQl9CisJfQorCissCV91bmxvYWQ6IGZ1bmN0aW9uIChpbnN0KSB7CisJCXZhciBvUyA9IGluc3Qub3B0aW9ucy5zdGF0ZU1hbmFnZW1lbnQ7CisJCWlmIChvUy5lbmFibGVkKSB7CisJCQlpZiAob1MuYXV0b1NhdmUpIC8vIHNhdmUgYSBzdGF0ZS1jb29raWUgYXV0b21hdGljYWxseQorCQkJCWluc3Quc2F2ZUNvb2tpZSgpOworCQkJZWxzZSAvLyBkb24ndCBzYXZlIGEgY29va2llLCBidXQgZG8gc3RvcmUgc3RhdGUtZGF0YSBpbiBzdGF0ZS5zdGF0ZURhdGEga2V5CisJCQkJaW5zdC5zdGF0ZS5zdGF0ZURhdGEgPSBpbnN0LnJlYWRTdGF0ZSgpOworCQl9CisJfQorCit9OworCisvLyBhZGQgc3RhdGUgaW5pdGlhbGl6YXRpb24gbWV0aG9kIHRvIExheW91dCdzIG9uQ3JlYXRlIGFycmF5IG9mIGZ1bmN0aW9ucworJC5sYXlvdXQub25DcmVhdGUucHVzaCggJC5sYXlvdXQuc3RhdGUuX2NyZWF0ZSApOworJC5sYXlvdXQub25VbmxvYWQucHVzaCggJC5sYXlvdXQuc3RhdGUuX3VubG9hZCApOworCisKKworCisvKioKKyAqIGpxdWVyeS5sYXlvdXQuYnV0dG9ucyAxLjAKKyAqICREYXRlOiAyMDExLTA3LTE2IDA4OjAwOjAwIChTYXQsIDE2IEp1bHkgMjAxMSkgJAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCAKKyAqICAgS2V2aW4gRGFsbWFuIChodHRwOi8vYWxscHJvLm5ldCkKKyAqCisgKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgKGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCkKKyAqIGFuZCBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBsaWNlbnNlcy4KKyAqCisgKiBAZGVwZW5kYW5jaWVzOiBVSSBMYXlvdXQgMS4zLjAucmMzMC4xIG9yIGhpZ2hlcgorICoKKyAqIEBzdXBwb3J0OiBodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvanF1ZXJ5LXVpLWxheW91dAorICoKKyAqIERvY3M6IFsgdG8gY29tZSBdCisgKiBUaXBzOiBbIHRvIGNvbWUgXQorICovCisKKy8vIHRlbGwgTGF5b3V0IHRoYXQgdGhlIHN0YXRlIHBsdWdpbiBpcyBhdmFpbGFibGUKKyQubGF5b3V0LnBsdWdpbnMuYnV0dG9ucyA9IHRydWU7CisKKy8vCUFkZCBidXR0b25zIG9wdGlvbnMgdG8gbGF5b3V0LmRlZmF1bHRzCiskLmxheW91dC5kZWZhdWx0cy5hdXRvQmluZEN1c3RvbUJ1dHRvbnMgPSBmYWxzZTsKKy8vIFNwZWNpZnkgYXV0b0JpbmRDdXN0b21CdXR0b25zIGFzIGEgbGF5b3V0LW9wdGlvbiwgTk9UIGEgcGFuZS1vcHRpb24KKyQubGF5b3V0Lm9wdGlvbnNNYXAubGF5b3V0LnB1c2goImF1dG9CaW5kQ3VzdG9tQnV0dG9ucyIpOworCisvKgorICoJQnV0dG9uIG1ldGhvZHMKKyAqLworJC5sYXlvdXQuYnV0dG9ucyA9IHsKKworCS8qKgorCSogU2VhcmNoZXMgZm9yIC51aS1sYXlvdXQtYnV0dG9uLXh4eCBlbGVtZW50cyBhbmQgYXV0by1iaW5kcyB0aGVtIGFzIGxheW91dC1idXR0b25zCisJKgorCSogQHNlZSAgX2NyZWF0ZSgpCisJKgorCSogQHBhcmFtICB7T2JqZWN0fQkJaW5zdAlMYXlvdXQgSW5zdGFuY2Ugb2JqZWN0CisJKi8KKwlpbml0OiBmdW5jdGlvbiAoaW5zdCkgeworCQl2YXIgcHJlCQk9ICJ1aS1sYXlvdXQtYnV0dG9uLSIKKwkJLAlsYXlvdXQJPSBpbnN0Lm9wdGlvbnMubmFtZSB8fCAiIgorCQksCW5hbWU7CisJCSQuZWFjaCgidG9nZ2xlLG9wZW4sY2xvc2UscGluLHRvZ2dsZS1zbGlkZSxvcGVuLXNsaWRlIi5zcGxpdCgiLCIpLCBmdW5jdGlvbiAoaSwgYWN0aW9uKSB7CisJCQkkLmVhY2goJC5sYXlvdXQuY29uZmlnLmJvcmRlclBhbmVzLCBmdW5jdGlvbiAoaWksIHBhbmUpIHsKKwkJCQkkKCIuIitwcmUrYWN0aW9uKyItIitwYW5lKS5lYWNoKGZ1bmN0aW9uKCl7CisJCQkJCS8vIGlmIGJ1dHRvbiB3YXMgcHJldmlvdXNseSAnYm91bmQnLCBkYXRhLmxheW91dE5hbWUgd2FzIHNldCwgYnV0IGlzIGJsYW5rIGlmIGxheW91dCBoYXMgbm8gJ25hbWUnCisJCQkJCW5hbWUgPSAkKHRoaXMpLmRhdGEoImxheW91dE5hbWUiKSB8fCAkKHRoaXMpLmF0dHIoImxheW91dE5hbWUiKTsKKwkJCQkJaWYgKG5hbWUgPT0gdW5kZWZpbmVkIHx8IG5hbWUgPT09IGxheW91dCkKKwkJCQkJCWluc3QuYmluZEJ1dHRvbih0aGlzLCBhY3Rpb24sIHBhbmUpOworCQkJCX0pOworCQkJfSk7CisJCX0pOworCX0KKworCS8qKgorCSogSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHBhcmFtcyByZWNlaXZlZCBieSBhZGRCdXR0b24gdXRpbGl0aWVzCisJKgorCSogVHdvIGNsYXNzZXMgYXJlIGFkZGVkIHRvIHRoZSBlbGVtZW50LCBiYXNlZCBvbiB0aGUgYnV0dG9uQ2xhc3MuLi4KKwkqIFRoZSB0eXBlIG9mIGJ1dHRvbiBpcyBhcHBlbmRlZCB0byBjcmVhdGUgdGhlIDJuZCBjbGFzc05hbWU6CisJKiAgLSB1aS1sYXlvdXQtYnV0dG9uLXBpbgkJLy8gYWN0aW9uIGJ0bkNsYXNzCisJKiAgLSB1aS1sYXlvdXQtYnV0dG9uLXBpbi13ZXN0CS8vIGFjdGlvbiBidG5DbGFzcyArIHBhbmUKKwkqICAtIHVpLWxheW91dC1idXR0b24tdG9nZ2xlCisJKiAgLSB1aS1sYXlvdXQtYnV0dG9uLW9wZW4KKwkqICAtIHVpLWxheW91dC1idXR0b24tY2xvc2UKKwkqCisJKiBAcGFyYW0ge09iamVjdH0JCQlpbnN0CQlMYXlvdXQgSW5zdGFuY2Ugb2JqZWN0CisJKiBAcGFyYW0geyhzdHJpbmd8IU9iamVjdCl9CXNlbGVjdG9yCWpRdWVyeSBzZWxlY3RvciAob3IgZWxlbWVudCkgZm9yIGJ1dHRvbiwgZWc6ICIudWktbGF5b3V0LW5vcnRoIC50b2dnbGUtYnV0dG9uIgorCSogQHBhcmFtIHtzdHJpbmd9ICAgCQlwYW5lIAkJTmFtZSBvZiB0aGUgcGFuZSB0aGUgYnV0dG9uIGlzIGZvcjogJ25vcnRoJywgJ3NvdXRoJywgZXRjLgorCSoKKwkqIEByZXR1cm4ge0FycmF5LjxPYmplY3Q+fQlJZiBib3RoIHBhcmFtcyB2YWxpZCwgdGhlIGVsZW1lbnQgbWF0Y2hpbmcgJ3NlbGVjdG9yJyBpbiBhIGpRdWVyeSB3cmFwcGVyIC0gb3RoZXJ3aXNlIHJldHVybnMgbnVsbAorCSovCissCWdldDogZnVuY3Rpb24gKGluc3QsIHNlbGVjdG9yLCBwYW5lLCBhY3Rpb24pIHsKKwkJdmFyICRFCT0gJChzZWxlY3RvcikKKwkJLAlvCT0gaW5zdC5vcHRpb25zCisJCSwJZXJyCT0gby5lcnJvcnMuYWRkQnV0dG9uRXJyb3IKKwkJOworCQlpZiAoISRFLmxlbmd0aCkgeyAvLyBlbGVtZW50IG5vdCBmb3VuZAorCQkJJC5sYXlvdXQubXNnKGVyciArIiAiKyBvLmVycm9ycy5zZWxlY3RvciArIjogIisgc2VsZWN0b3IsIHRydWUpOworCQl9CisJCWVsc2UgaWYgKCQuaW5BcnJheShwYW5lLCAkLmxheW91dC5jb25maWcuYm9yZGVyUGFuZXMpIDwgMCkgeyAvLyBpbnZhbGlkICdwYW5lJyBzZXBlY2lmaWVkCisJCQkkLmxheW91dC5tc2coZXJyICsiICIrIG8uZXJyb3JzLnBhbmUgKyI6ICIrIHBhbmUsIHRydWUpOworCQkJJEUgPSAkKCIiKTsgIC8vIE5PIEJVVFRPTgorCQl9CisJCWVsc2UgeyAvLyBWQUxJRAorCQkJdmFyIGJ0biA9IG9bcGFuZV0uYnV0dG9uQ2xhc3MgKyItIisgYWN0aW9uOworCQkJJEUJLmFkZENsYXNzKCBidG4gKyIgIisgYnRuICsiLSIrIHBhbmUgKQorCQkJCS5kYXRhKCJsYXlvdXROYW1lIiwgby5uYW1lKTsgLy8gYWRkIGxheW91dCBpZGVudGlmaWVyIC0gZXZlbiBpZiBibGFuayEKKwkJfQorCQlyZXR1cm4gJEU7CisJfQorCisKKwkvKioKKwkqIE5FVyBzeW50YXggZm9yIGJpbmRpbmcgbGF5b3V0LWJ1dHRvbnMgLSB3aWxsIGV2ZW50dWFsbHkgcmVwbGFjZSBhZGRUb2dnbGUsIGFkZE9wZW4sIGV0Yy4KKwkqCisJKiBAcGFyYW0ge09iamVjdH0JCQlpbnN0CQlMYXlvdXQgSW5zdGFuY2Ugb2JqZWN0CisJKiBAcGFyYW0geyhzdHJpbmd8IU9iamVjdCl9CXNlbGVjdG9yCWpRdWVyeSBzZWxlY3RvciAob3IgZWxlbWVudCkgZm9yIGJ1dHRvbiwgZWc6ICIudWktbGF5b3V0LW5vcnRoIC50b2dnbGUtYnV0dG9uIgorCSogQHBhcmFtIHtzdHJpbmd9CQkJYWN0aW9uCisJKiBAcGFyYW0ge3N0cmluZ30JCQlwYW5lCisJKi8KKywJYmluZDogZnVuY3Rpb24gKGluc3QsIHNlbGVjdG9yLCBhY3Rpb24sIHBhbmUpIHsKKwkJdmFyIF8gPSAkLmxheW91dC5idXR0b25zOworCQlzd2l0Y2ggKGFjdGlvbi50b0xvd2VyQ2FzZSgpKSB7CisJCQljYXNlICJ0b2dnbGUiOgkJCV8uYWRkVG9nZ2xlCShpbnN0LCBzZWxlY3RvciwgcGFuZSk7IGJyZWFrOwkKKwkJCWNhc2UgIm9wZW4iOgkJCV8uYWRkT3BlbgkoaW5zdCwgc2VsZWN0b3IsIHBhbmUpOyBicmVhazsKKwkJCWNhc2UgImNsb3NlIjoJCQlfLmFkZENsb3NlCShpbnN0LCBzZWxlY3RvciwgcGFuZSk7IGJyZWFrOworCQkJY2FzZSAicGluIjoJCQkJXy5hZGRQaW4JKGluc3QsIHNlbGVjdG9yLCBwYW5lKTsgYnJlYWs7CisJCQljYXNlICJ0b2dnbGUtc2xpZGUiOglfLmFkZFRvZ2dsZQkoaW5zdCwgc2VsZWN0b3IsIHBhbmUsIHRydWUpOyBicmVhazsJCisJCQljYXNlICJvcGVuLXNsaWRlIjoJCV8uYWRkT3BlbgkoaW5zdCwgc2VsZWN0b3IsIHBhbmUsIHRydWUpOyBicmVhazsKKwkJfQorCQlyZXR1cm4gaW5zdDsKKwl9CisKKwkvKioKKwkqIEFkZCBhIGN1c3RvbSBUb2dnbGVyIGJ1dHRvbiBmb3IgYSBwYW5lCisJKgorCSogQHBhcmFtIHtPYmplY3R9CQkJaW5zdAkJTGF5b3V0IEluc3RhbmNlIG9iamVjdAorCSogQHBhcmFtIHsoc3RyaW5nfCFPYmplY3QpfQlzZWxlY3RvcglqUXVlcnkgc2VsZWN0b3IgKG9yIGVsZW1lbnQpIGZvciBidXR0b24sIGVnOiAiLnVpLWxheW91dC1ub3J0aCAudG9nZ2xlLWJ1dHRvbiIKKwkqIEBwYXJhbSB7c3RyaW5nfSAgCQkJcGFuZSAJCU5hbWUgb2YgdGhlIHBhbmUgdGhlIGJ1dHRvbiBpcyBmb3I6ICdub3J0aCcsICdzb3V0aCcsIGV0Yy4KKwkqIEBwYXJhbSB7Ym9vbGVhbj19CQkJc2xpZGUgCQl0cnVlID0gc2xpZGUtb3BlbiwgZmFsc2UgPSBwaW4tb3BlbgorCSovCissCWFkZFRvZ2dsZTogZnVuY3Rpb24gKGluc3QsIHNlbGVjdG9yLCBwYW5lLCBzbGlkZSkgeworCQkkLmxheW91dC5idXR0b25zLmdldChpbnN0LCBzZWxlY3RvciwgcGFuZSwgInRvZ2dsZSIpCisJCQkuY2xpY2soZnVuY3Rpb24oZXZ0KXsKKwkJCQlpbnN0LnRvZ2dsZShwYW5lLCAhIXNsaWRlKTsKKwkJCQlldnQuc3RvcFByb3BhZ2F0aW9uKCk7CisJCQl9KTsKKwkJcmV0dXJuIGluc3Q7CisJfQorCisJLyoqCisJKiBBZGQgYSBjdXN0b20gT3BlbiBidXR0b24gZm9yIGEgcGFuZQorCSoKKwkqIEBwYXJhbSB7T2JqZWN0fQkJCWluc3QJCUxheW91dCBJbnN0YW5jZSBvYmplY3QKKwkqIEBwYXJhbSB7KHN0cmluZ3whT2JqZWN0KX0Jc2VsZWN0b3IJalF1ZXJ5IHNlbGVjdG9yIChvciBlbGVtZW50KSBmb3IgYnV0dG9uLCBlZzogIi51aS1sYXlvdXQtbm9ydGggLnRvZ2dsZS1idXR0b24iCisJKiBAcGFyYW0ge3N0cmluZ30JCQlwYW5lIAkJTmFtZSBvZiB0aGUgcGFuZSB0aGUgYnV0dG9uIGlzIGZvcjogJ25vcnRoJywgJ3NvdXRoJywgZXRjLgorCSogQHBhcmFtIHtib29sZWFuPX0JCQlzbGlkZSAJCXRydWUgPSBzbGlkZS1vcGVuLCBmYWxzZSA9IHBpbi1vcGVuCisJKi8KKywJYWRkT3BlbjogZnVuY3Rpb24gKGluc3QsIHNlbGVjdG9yLCBwYW5lLCBzbGlkZSkgeworCQkkLmxheW91dC5idXR0b25zLmdldChpbnN0LCBzZWxlY3RvciwgcGFuZSwgIm9wZW4iKQorCQkJLmF0dHIoInRpdGxlIiwgaW5zdC5vcHRpb25zW3BhbmVdLnRpcHMuT3BlbikKKwkJCS5jbGljayhmdW5jdGlvbiAoZXZ0KSB7CisJCQkJaW5zdC5vcGVuKHBhbmUsICEhc2xpZGUpOworCQkJCWV2dC5zdG9wUHJvcGFnYXRpb24oKTsKKwkJCX0pOworCQlyZXR1cm4gaW5zdDsKKwl9CisKKwkvKioKKwkqIEFkZCBhIGN1c3RvbSBDbG9zZSBidXR0b24gZm9yIGEgcGFuZQorCSoKKwkqIEBwYXJhbSB7T2JqZWN0fQkJCWluc3QJCUxheW91dCBJbnN0YW5jZSBvYmplY3QKKwkqIEBwYXJhbSB7KHN0cmluZ3whT2JqZWN0KX0Jc2VsZWN0b3IJalF1ZXJ5IHNlbGVjdG9yIChvciBlbGVtZW50KSBmb3IgYnV0dG9uLCBlZzogIi51aS1sYXlvdXQtbm9ydGggLnRvZ2dsZS1idXR0b24iCisJKiBAcGFyYW0ge3N0cmluZ30gICAJCXBhbmUgCQlOYW1lIG9mIHRoZSBwYW5lIHRoZSBidXR0b24gaXMgZm9yOiAnbm9ydGgnLCAnc291dGgnLCBldGMuCisJKi8KKywJYWRkQ2xvc2U6IGZ1bmN0aW9uIChpbnN0LCBzZWxlY3RvciwgcGFuZSkgeworCQkkLmxheW91dC5idXR0b25zLmdldChpbnN0LCBzZWxlY3RvciwgcGFuZSwgImNsb3NlIikKKwkJCS5hdHRyKCJ0aXRsZSIsIGluc3Qub3B0aW9uc1twYW5lXS50aXBzLkNsb3NlKQorCQkJLmNsaWNrKGZ1bmN0aW9uIChldnQpIHsKKwkJCQlpbnN0LmNsb3NlKHBhbmUpOworCQkJCWV2dC5zdG9wUHJvcGFnYXRpb24oKTsKKwkJCX0pOworCQlyZXR1cm4gaW5zdDsKKwl9CisKKwkvKioKKwkqIEFkZCBhIGN1c3RvbSBQaW4gYnV0dG9uIGZvciBhIHBhbmUKKwkqCisJKiBGb3VyIGNsYXNzZXMgYXJlIGFkZGVkIHRvIHRoZSBlbGVtZW50LCBiYXNlZCBvbiB0aGUgcGFuZUNsYXNzIGZvciB0aGUgYXNzb2NpYXRlZCBwYW5lLi4uCisJKiBBc3N1bWluZyB0aGUgZGVmYXVsdCBwYW5lQ2xhc3MgYW5kIHRoZSBwaW4gaXMgJ3VwJywgdGhlc2UgY2xhc3NlcyBhcmUgYWRkZWQgZm9yIGEgd2VzdC1wYW5lIHBpbjoKKwkqICAtIHVpLWxheW91dC1wYW5lLXBpbgorCSogIC0gdWktbGF5b3V0LXBhbmUtd2VzdC1waW4KKwkqICAtIHVpLWxheW91dC1wYW5lLXBpbi11cAorCSogIC0gdWktbGF5b3V0LXBhbmUtd2VzdC1waW4tdXAKKwkqCisJKiBAcGFyYW0ge09iamVjdH0JCQlpbnN0CQlMYXlvdXQgSW5zdGFuY2Ugb2JqZWN0CisJKiBAcGFyYW0geyhzdHJpbmd8IU9iamVjdCl9CXNlbGVjdG9yCWpRdWVyeSBzZWxlY3RvciAob3IgZWxlbWVudCkgZm9yIGJ1dHRvbiwgZWc6ICIudWktbGF5b3V0LW5vcnRoIC50b2dnbGUtYnV0dG9uIgorCSogQHBhcmFtIHtzdHJpbmd9ICAgCQlwYW5lIAkJTmFtZSBvZiB0aGUgcGFuZSB0aGUgcGluIGlzIGZvcjogJ25vcnRoJywgJ3NvdXRoJywgZXRjLgorCSovCissCWFkZFBpbjogZnVuY3Rpb24gKGluc3QsIHNlbGVjdG9yLCBwYW5lKSB7CisJCXZhcglfCT0gJC5sYXlvdXQuYnV0dG9ucworCQksCSRFCT0gXy5nZXQoaW5zdCwgc2VsZWN0b3IsIHBhbmUsICJwaW4iKTsKKwkJaWYgKCRFLmxlbmd0aCkgeworCQkJdmFyIHMgPSBpbnN0LnN0YXRlW3BhbmVdOworCQkJJEUuY2xpY2soZnVuY3Rpb24gKGV2dCkgeworCQkJCV8uc2V0UGluU3RhdGUoaW5zdCwgJCh0aGlzKSwgcGFuZSwgKHMuaXNTbGlkaW5nIHx8IHMuaXNDbG9zZWQpKTsKKwkJCQlpZiAocy5pc1NsaWRpbmcgfHwgcy5pc0Nsb3NlZCkgaW5zdC5vcGVuKCBwYW5lICk7IC8vIGNoYW5nZSBmcm9tIHNsaWRpbmcgdG8gb3BlbgorCQkJCWVsc2UgaW5zdC5jbG9zZSggcGFuZSApOyAvLyBzbGlkZS1jbG9zZWQKKwkJCQlldnQuc3RvcFByb3BhZ2F0aW9uKCk7CisJCQl9KTsKKwkJCS8vIGFkZCB1cC9kb3duIHBpbiBhdHRyaWJ1dGVzIGFuZCBjbGFzc2VzCisJCQlfLnNldFBpblN0YXRlKGluc3QsICRFLCBwYW5lLCAoIXMuaXNDbG9zZWQgJiYgIXMuaXNTbGlkaW5nKSk7CisJCQkvLyBhZGQgdGhpcyBwaW4gdG8gdGhlIHBhbmUgZGF0YSBzbyB3ZSBjYW4gJ3N5bmMgaXQnIGF1dG9tYXRpY2FsbHkKKwkJCS8vIFBBTkUucGlucyBrZXkgaXMgYW4gYXJyYXkgc28gd2UgY2FuIHN0b3JlIG11bHRpcGxlIHBpbnMgZm9yIGVhY2ggcGFuZQorCQkJcy5waW5zLnB1c2goIHNlbGVjdG9yICk7IC8vIGp1c3Qgc2F2ZSB0aGUgc2VsZWN0b3Igc3RyaW5nCisJCX0KKwkJcmV0dXJuIGluc3Q7CisJfQorCisJLyoqCisJKiBDaGFuZ2UgdGhlIGNsYXNzIG9mIHRoZSBwaW4gYnV0dG9uIHRvIG1ha2UgaXQgbG9vayAndXAnIG9yICdkb3duJworCSoKKwkqIEBzZWUgIGFkZFBpbigpLCBzeW5jUGlucygpCisJKgorCSogQHBhcmFtIHtPYmplY3R9CQkJaW5zdAlMYXlvdXQgSW5zdGFuY2Ugb2JqZWN0CisJKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fQkkUGluCVRoZSBwaW4tc3BhbiBlbGVtZW50IGluIGEgalF1ZXJ5IHdyYXBwZXIKKwkqIEBwYXJhbSB7c3RyaW5nfQkJCXBhbmUJVGhlc2UgYXJlIHRoZSBwYXJhbXMgcmV0dXJuZWQgdG8gY2FsbGJhY2tzIGJ5IGxheW91dCgpCisJKiBAcGFyYW0ge2Jvb2xlYW59CQkJZG9QaW4JdHJ1ZSA9IHNldCB0aGUgcGluICdkb3duJywgZmFsc2UgPSBzZXQgaXQgJ3VwJworCSovCissCXNldFBpblN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgJFBpbiwgcGFuZSwgZG9QaW4pIHsKKwkJdmFyIHVwZG93biA9ICRQaW4uYXR0cigicGluIik7CisJCWlmICh1cGRvd24gJiYgZG9QaW4gPT09ICh1cGRvd249PSJkb3duIikpIHJldHVybjsgLy8gYWxyZWFkeSBpbiBjb3JyZWN0IHN0YXRlCisJCXZhcgorCQkJbwkJPSBpbnN0Lm9wdGlvbnNbcGFuZV0KKwkJLAlwaW4JCT0gby5idXR0b25DbGFzcyArIi1waW4iCisJCSwJc2lkZQk9IHBpbiArIi0iKyBwYW5lCisJCSwJVVAJCT0gcGluICsiLXVwICIrCXNpZGUgKyItdXAiCisJCSwJRE4JCT0gcGluICsiLWRvd24gIitzaWRlICsiLWRvd24iCisJCTsKKwkJJFBpbgorCQkJLmF0dHIoInBpbiIsIGRvUGluID8gImRvd24iIDogInVwIikgLy8gbG9naWMKKwkJCS5hdHRyKCJ0aXRsZSIsIGRvUGluID8gby50aXBzLlVucGluIDogby50aXBzLlBpbikKKwkJCS5yZW1vdmVDbGFzcyggZG9QaW4gPyBVUCA6IEROICkgCisJCQkuYWRkQ2xhc3MoIGRvUGluID8gRE4gOiBVUCApIAorCQk7CisJfQorCisJLyoqCisJKiBJTlRFUk5BTCBmdW5jdGlvbiB0byBzeW5jICdwaW4gYnV0dG9ucycgd2hlbiBwYW5lIGlzIG9wZW5lZCBvciBjbG9zZWQKKwkqIFVucGlubmVkIG1lYW5zIHRoZSBwYW5lIGlzICdzbGlkaW5nJyAtIGllLCBvdmVyLXRvcCBvZiB0aGUgYWRqYWNlbnQgcGFuZXMKKwkqCisJKiBAc2VlICBvcGVuKCksIGNsb3NlKCkKKwkqCisJKiBAcGFyYW0ge09iamVjdH0JCQlpbnN0CUxheW91dCBJbnN0YW5jZSBvYmplY3QKKwkqIEBwYXJhbSB7c3RyaW5nfQlwYW5lCVRoZXNlIGFyZSB0aGUgcGFyYW1zIHJldHVybmVkIHRvIGNhbGxiYWNrcyBieSBsYXlvdXQoKQorCSogQHBhcmFtIHtib29sZWFufQlkb1BpbglUcnVlIG1lYW5zIHNldCB0aGUgcGluICdkb3duJywgRmFsc2UgbWVhbnMgJ3VwJworCSovCissCXN5bmNQaW5CdG5zOiBmdW5jdGlvbiAoaW5zdCwgcGFuZSwgZG9QaW4pIHsKKwkJLy8gUkVBTCBNRVRIT0QgSVMgX0lOU0lERV8gTEFZT1VUIC0gVEhJUyBJUyBIRVJFIEpVU1QgRk9SIFJFRkVSRU5DRQorCQkkLmVhY2goaW5zdC5zdGF0ZVtwYW5lXS5waW5zLCBmdW5jdGlvbiAoaSwgc2VsZWN0b3IpIHsKKwkJCSQubGF5b3V0LmJ1dHRvbnMuc2V0UGluU3RhdGUoaW5zdCwgJChzZWxlY3RvciksIHBhbmUsIGRvUGluKTsKKwkJfSk7CisJfQorCisKKywJX2xvYWQ6IGZ1bmN0aW9uIChpbnN0KSB7CisJCXZhcglfCT0gJC5sYXlvdXQuYnV0dG9uczsKKwkJLy8gQUREIEJ1dHRvbiBtZXRob2RzIHRvIExheW91dCBJbnN0YW5jZQorCQkvLyBOb3RlOiBzZWwgPSBqUXVlcnkgU2VsZWN0b3Igc3RyaW5nCisJCSQuZXh0ZW5kKCBpbnN0LCB7CisJCQliaW5kQnV0dG9uOgkJZnVuY3Rpb24gKHNlbCwgYWN0aW9uLCBwYW5lKSB7IHJldHVybiBfLmJpbmQoaW5zdCwgc2VsLCBhY3Rpb24sIHBhbmUpOyB9CisJCS8vCURFUFJFQ0FURUQgTUVUSE9EUworCQksCWFkZFRvZ2dsZUJ0bjoJZnVuY3Rpb24gKHNlbCwgcGFuZSwgc2xpZGUpIHsgcmV0dXJuIF8uYWRkVG9nZ2xlKGluc3QsIHNlbCwgcGFuZSwgc2xpZGUpOyB9CisJCSwJYWRkT3BlbkJ0bjoJCWZ1bmN0aW9uIChzZWwsIHBhbmUsIHNsaWRlKSB7IHJldHVybiBfLmFkZE9wZW4oaW5zdCwgc2VsLCBwYW5lLCBzbGlkZSk7IH0KKwkJLAlhZGRDbG9zZUJ0bjoJZnVuY3Rpb24gKHNlbCwgcGFuZSkgeyByZXR1cm4gXy5hZGRDbG9zZShpbnN0LCBzZWwsIHBhbmUpOyB9CisJCSwJYWRkUGluQnRuOgkJZnVuY3Rpb24gKHNlbCwgcGFuZSkgeyByZXR1cm4gXy5hZGRQaW4oaW5zdCwgc2VsLCBwYW5lKTsgfQorCQl9KTsKKworCQkvLyBpbml0IHN0YXRlIGFycmF5IHRvIGhvbGQgcGluLWJ1dHRvbnMKKwkJZm9yICh2YXIgaT0wOyBpPDQ7IGkrKykgeworCQkJdmFyIHBhbmUgPSAkLmxheW91dC5jb25maWcuYm9yZGVyUGFuZXNbaV07CisJCQlpbnN0LnN0YXRlW3BhbmVdLnBpbnMgPSBbXTsKKwkJfQorCisJCS8vIGF1dG8taW5pdCBidXR0b25zIG9uTG9hZCBpZiBvcHRpb24gaXMgZW5hYmxlZAorCQlpZiAoIGluc3Qub3B0aW9ucy5hdXRvQmluZEN1c3RvbUJ1dHRvbnMgKQorCQkJXy5pbml0KGluc3QpOworCX0KKworLAlfdW5sb2FkOiBmdW5jdGlvbiAoaW5zdCkgeworCQkvLyBUT0RPOiB1bmJpbmQgYWxsIGJ1dHRvbnM/Pz8KKwl9CisKK307CisKKy8vIGFkZCBpbml0aWFsaXphdGlvbiBtZXRob2QgdG8gTGF5b3V0J3Mgb25Mb2FkIGFycmF5IG9mIGZ1bmN0aW9ucworJC5sYXlvdXQub25Mb2FkLnB1c2goICAkLmxheW91dC5idXR0b25zLl9sb2FkICk7CisvLyQubGF5b3V0Lm9uVW5sb2FkLnB1c2goICQubGF5b3V0LmJ1dHRvbnMuX3VubG9hZCApOworCisKKworLyoqCisgKiBqcXVlcnkubGF5b3V0LmJyb3dzZXJab29tIDEuMAorICogJERhdGU6IDIwMTEtMTItMjkgMDg6MDA6MDAgKFRodSwgMjkgRGVjIDIwMTEpICQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgCisgKiAgIEtldmluIERhbG1hbiAoaHR0cDovL2FsbHByby5uZXQpCisgKgorICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwpCisgKiBhbmQgTUlUIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocCkgbGljZW5zZXMuCisgKgorICogQGRlcGVuZGFuY2llczogVUkgTGF5b3V0IDEuMy4wLnJjMzAuMSBvciBoaWdoZXIKKyAqCisgKiBAc3VwcG9ydDogaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2pxdWVyeS11aS1sYXlvdXQKKyAqCisgKiBAdG9kbzogRXh0ZW5kIGxvZ2ljIHRvIGhhbmRsZSBvdGhlciBwcm9ibGVtYXRpYyB6b29taW5nIGluIGJyb3dzZXJzCisgKiBAdG9kbzogQWRkIGhvdGtleS9tb3VzZXdoZWVsIGJpbmRpbmdzIHRvIF9pbnN0YW50bHlfIHJlc3BvbmQgdG8gdGhlc2Ugem9vbSBldmVudAorICovCisKKy8vIHRlbGwgTGF5b3V0IHRoYXQgdGhlIHBsdWdpbiBpcyBhdmFpbGFibGUKKyQubGF5b3V0LnBsdWdpbnMuYnJvd3Nlclpvb20gPSB0cnVlOworCiskLmxheW91dC5kZWZhdWx0cy5icm93c2VyWm9vbUNoZWNrSW50ZXJ2YWwgPSAxMDAwOworJC5sYXlvdXQub3B0aW9uc01hcC5sYXlvdXQucHVzaCgiYnJvd3Nlclpvb21DaGVja0ludGVydmFsIik7CisKKy8qCisgKglicm93c2VyWm9vbSBtZXRob2RzCisgKi8KKyQubGF5b3V0LmJyb3dzZXJab29tID0geworCisJX2luaXQ6IGZ1bmN0aW9uIChpbnN0KSB7CisJCS8vIGFib3J0IGlmIGJyb3dzZXIgZG9lcyBub3QgbmVlZCB0aGlzIGNoZWNrCisJCWlmICgkLmxheW91dC5icm93c2VyWm9vbS5yYXRpbygpICE9PSBmYWxzZSkKKwkJCSQubGF5b3V0LmJyb3dzZXJab29tLl9zZXRUaW1lcihpbnN0KTsKKwl9CisKKywJX3NldFRpbWVyOiBmdW5jdGlvbiAoaW5zdCkgeworCQkvLyBhYm9ydCBpZiBsYXlvdXQgZGVzdHJveWVkIG9yIGJyb3dzZXIgZG9lcyBub3QgbmVlZCB0aGlzIGNoZWNrCisJCWlmIChpbnN0LmRlc3Ryb3llZCkgcmV0dXJuOworCQl2YXIgbwk9IGluc3Qub3B0aW9ucworCQksCXMJPSBpbnN0LnN0YXRlCisJCS8vCWRvbid0IG5lZWQgY2hlY2sgaWYgaW5zdCBoYXMgcGFyZW50TGF5b3V0LCBidXQgY2hlY2sgb2NjYXNzaW9uYWxseSBpbiBjYXNlIHBhcmVudCBkZXN0cm95ZWQhCisJCS8vCU1JTklNVU0gMTAwbXMgaW50ZXJ2YWwsIGZvciBwZXJmb3JtYW5jZQorCQksCW1zCT0gaW5zdC5oYXNQYXJlbnRMYXlvdXQgPyAgNTAwMCA6IE1hdGgubWF4KCBvLmJyb3dzZXJab29tQ2hlY2tJbnRlcnZhbCwgMTAwICkKKwkJOworCQkvLyBzZXQgdGhlIHRpbWVyCisJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsKKwkJCWlmIChpbnN0LmRlc3Ryb3llZCB8fCAhby5yZXNpemVXaXRoV2luZG93KSByZXR1cm47CisJCQl2YXIgZCA9ICQubGF5b3V0LmJyb3dzZXJab29tLnJhdGlvKCk7CisJCQlpZiAoZCAhPT0gcy5icm93c2VyWm9vbSkgeworCQkJCXMuYnJvd3Nlclpvb20gPSBkOworCQkJCWluc3QucmVzaXplQWxsKCk7CisJCQl9CisJCQkvLyBzZXQgYSBORVcgdGltZW91dAorCQkJJC5sYXlvdXQuYnJvd3Nlclpvb20uX3NldFRpbWVyKGluc3QpOworCQl9CisJCSwJbXMgKTsKKwl9CisKKywJcmF0aW86IGZ1bmN0aW9uICgpIHsKKwkJdmFyIHcJPSB3aW5kb3cKKwkJLAlzCT0gc2NyZWVuCisJCSwJZAk9IGRvY3VtZW50CisJCSwJZEUJPSBkLmRvY3VtZW50RWxlbWVudCB8fCBkLmJvZHkKKwkJLAliCT0gJC5sYXlvdXQuYnJvd3NlcgorCQksCXYJPSBiLnZlcnNpb24KKwkJLAlyLCBzVywgY1cKKwkJOworCQkvLyB3ZSBjYW4gaWdub3JlIGFsbCBicm93c2VycyB0aGF0IGZpcmUgd2luZG93LnJlc2l6ZSBldmVudCBvblpvb20KKwkJaWYgKChiLm1zaWUgJiYgdiA+IDgpCisJCXx8CSFiLm1zaWUKKwkJKSByZXR1cm4gZmFsc2U7IC8vIGRvbid0IG5lZWQgdG8gdHJhY2sgem9vbQorCisJCWlmIChzLmRldmljZVhEUEkpCisJCQlyZXR1cm4gY2FsYyhzLmRldmljZVhEUEksIHMuc3lzdGVtWERQSSk7CisJCS8vIGV2ZXJ5dGhpbmcgYmVsb3cgaXMganVzdCBmb3IgZnV0dXJlIHJlZmVyZW5jZSEKKwkJaWYgKGIud2Via2l0ICYmIChyID0gZC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCkpCisJCQlyZXR1cm4gY2FsYygoci5sZWZ0IC0gci5yaWdodCksIGQuYm9keS5vZmZzZXRXaWR0aCk7CisJCWlmIChiLndlYmtpdCAmJiAoc1cgPSB3Lm91dGVyV2lkdGgpKQorCQkJcmV0dXJuIGNhbGMoc1csIHcuaW5uZXJXaWR0aCk7CisJCWlmICgoc1cgPSBzLndpZHRoKSAmJiAoY1cgPSBkRS5jbGllbnRXaWR0aCkpCisJCQlyZXR1cm4gY2FsYyhzVywgY1cpOworCQlyZXR1cm4gZmFsc2U7IC8vIG5vIG1hdGNoLCBzbyBjYW5ub3QgLSBvciBkb24ndCBuZWVkIHRvIC0gdHJhY2sgem9vbQorCisJCWZ1bmN0aW9uIGNhbGMgKHgseSkgeyByZXR1cm4gKHBhcnNlSW50KHgsMTApIC8gcGFyc2VJbnQoeSwxMCkgKiAxMDApLnRvRml4ZWQoKTsgfQorCX0KKworfTsKKy8vIGFkZCBpbml0aWFsaXphdGlvbiBtZXRob2QgdG8gTGF5b3V0J3Mgb25Mb2FkIGFycmF5IG9mIGZ1bmN0aW9ucworJC5sYXlvdXQub25SZWFkeS5wdXNoKCAkLmxheW91dC5icm93c2VyWm9vbS5faW5pdCApOworCisKKworfSkoIGpRdWVyeSApOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL21vZGVybml6ci5jdXN0b20uanMgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9tb2Rlcm5penIuY3VzdG9tLmpzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2ODhkNjMKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9tb2Rlcm5penIuY3VzdG9tLmpzCkBAIC0wLDAgKzEsNCBAQAorLyogTW9kZXJuaXpyIDIuNS4zIChDdXN0b20gQnVpbGQpIHwgTUlUICYgQlNECisgKiBCdWlsZDogaHR0cDovL3d3dy5tb2Rlcm5penIuY29tL2Rvd25sb2FkLyMtaW5saW5lc3ZnCisgKi8KKzt3aW5kb3cuTW9kZXJuaXpyPWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiB1KGEpe2kuY3NzVGV4dD1hfWZ1bmN0aW9uIHYoYSxiKXtyZXR1cm4gdShwcmVmaXhlcy5qb2luKGErIjsiKSsoYnx8IiIpKX1mdW5jdGlvbiB3KGEsYil7cmV0dXJuIHR5cGVvZiBhPT09Yn1mdW5jdGlvbiB4KGEsYil7cmV0dXJuISF+KCIiK2EpLmluZGV4T2YoYil9ZnVuY3Rpb24geShhLGIsZCl7Zm9yKHZhciBlIGluIGEpe3ZhciBmPWJbYVtlXV07aWYoZiE9PWMpcmV0dXJuIGQ9PT0hMT9hW2VdOncoZiwiZnVuY3Rpb24iKT9mLmJpbmQoZHx8Yik6Zn1yZXR1cm4hMX12YXIgZD0iMi41LjMiLGU9e30sZj1iLmRvY3VtZW50RWxlbWVudCxnPSJtb2Rlcm5penIiLGg9Yi5jcmVhdGVFbGVtZW50KGcpLGk9aC5zdHlsZSxqLGs9e30udG9TdHJpbmcsbD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9LG09e30sbj17fSxvPXt9LHA9W10scT1wLnNsaWNlLHIscz17fS5oYXNPd25Qcm9wZXJ0eSx0OyF3KHMsInVuZGVmaW5lZCIpJiYhdyhzLmNhbGwsInVuZGVmaW5lZCIpP3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gcy5jYWxsKGEsYil9OnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYiBpbiBhJiZ3KGEuY29uc3RydWN0b3IucHJvdG90eXBlW2JdLCJ1bmRlZmluZWQiKX0sRnVuY3Rpb24ucHJvdG90eXBlLmJpbmR8fChGdW5jdGlvbi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihiKXt2YXIgYz10aGlzO2lmKHR5cGVvZiBjIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3I7dmFyIGQ9cS5jYWxsKGFyZ3VtZW50cywxKSxlPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIGUpe3ZhciBhPWZ1bmN0aW9uKCl7fTthLnByb3RvdHlwZT1jLnByb3RvdHlwZTt2YXIgZj1uZXcgYSxnPWMuYXBwbHkoZixkLmNvbmNhdChxLmNhbGwoYXJndW1lbnRzKSkpO3JldHVybiBPYmplY3QoZyk9PT1nP2c6Zn1yZXR1cm4gYy5hcHBseShiLGQuY29uY2F0KHEuY2FsbChhcmd1bWVudHMpKSl9O3JldHVybiBlfSksbS5pbmxpbmVzdmc9ZnVuY3Rpb24oKXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBhLmlubmVySFRNTD0iPHN2Zy8+IiwoYS5maXJzdENoaWxkJiZhLmZpcnN0Q2hpbGQubmFtZXNwYWNlVVJJKT09bC5zdmd9O2Zvcih2YXIgeiBpbiBtKXQobSx6KSYmKHI9ei50b0xvd2VyQ2FzZSgpLGVbcl09bVt6XSgpLHAucHVzaCgoZVtyXT8iIjoibm8tIikrcikpO3JldHVybiB1KCIiKSxoPWo9bnVsbCxlLl92ZXJzaW9uPWQsZX0odGhpcyx0aGlzLmRvY3VtZW50KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9uYXZpZ2F0aW9uLWxpLWEucG5nIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvbmF2aWdhdGlvbi1saS1hLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YjMyMjg4Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvbmF2aWdhdGlvbi1saS1hLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9uYXZpZ2F0aW9uLWxpLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL25hdmlnYXRpb24tbGkucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZkMGFkMDYKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9uYXZpZ2F0aW9uLWxpLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9vYmplY3QucG5nIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvb2JqZWN0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hZDMxMjc5Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvb2JqZWN0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9vYmplY3RfYmlnLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL29iamVjdF9iaWcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY3ZmZjYTcKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9vYmplY3RfYmlnLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9vYmplY3RfZGlhZ3JhbS5wbmcgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9vYmplY3RfZGlhZ3JhbS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmU5ZjJmNwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL29iamVjdF9kaWFncmFtLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9vYmplY3RfdG9fY2xhc3NfYmlnLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL29iamVjdF90b19jbGFzc19iaWcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc1MDI5NDIKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9vYmplY3RfdG9fY2xhc3NfYmlnLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9vYmplY3RfdG9fdHJhaXRfYmlnLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL29iamVjdF90b190cmFpdF9iaWcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM3NzdiZmMKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9vYmplY3RfdG9fdHJhaXRfYmlnLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9vYmplY3RfdG9fdHlwZV9iaWcucG5nIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvb2JqZWN0X3RvX3R5cGVfYmlnLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43NTAyOTQyCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvb2JqZWN0X3RvX3R5cGVfYmlnLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9vd25kZXJiZzIuZ2lmIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvb3duZGVyYmcyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NDhkZDU5Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvb3duZGVyYmcyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9vd25lcmJnLmdpZiBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL293bmVyYmcuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM0YTA0MjQKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9vd25lcmJnLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9vd25lcmJnMi5naWYgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9vd25lcmJnMi5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmVkMzNiMAotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL293bmVyYmcyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9wYWNrYWdlLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3BhY2thZ2UucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlYTE3YWMKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9wYWNrYWdlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9wYWNrYWdlX2JpZy5wbmcgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9wYWNrYWdlX2JpZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTI5YWE5MwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3BhY2thZ2VfYmlnLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9wYWNrYWdlc2JnLmdpZiBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3BhY2thZ2VzYmcuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAwYzMzNzgKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9wYWNrYWdlc2JnLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9yZWYtaW5kZXguY3NzIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvcmVmLWluZGV4LmNzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZDY0YjljCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvcmVmLWluZGV4LmNzcwpAQCAtMCwwICsxLDMwIEBACitib2R5IHsKKwlmb250LXNpemU6IDEwcHQ7CisJZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOworfQorCithIHsKKwljb2xvcjojMzE1NDc5OworfQorCisubGV0dGVycyB7CisgIHdpZHRoOjEwMCU7CisgIHRleHQtYWxpZ246Y2VudGVyOworICBtYXJnaW46MC42ZW07CisgIHBhZGRpbmc6MC4xZW07CisgIGJvcmRlci1ib3R0b206MXB4IHNvbGlkIGdyYXk7Cit9CisKKy5lbnRyeSB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBsaWdodGdyYXk7CisgIHBhZGRpbmc6IDVweCAwIDhweDsKK30KKworLm5hbWUgeworCS8qIGJhY2tncm91bmQtY29sb3I6I0U1RTVFNTsgKi8KK30KKworLm9jY3VycmVuY2VzIHsKKyAgbWFyZ2luLWxlZnQ6IDFlbTsKKyAgbWFyZ2luLXRvcDogNXB4OwkKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9yZW1vdmUucG5nIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvcmVtb3ZlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NjI1ZjlkCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvcmVtb3ZlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9zY2hlZHVsZXIuanMgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9zY2hlZHVsZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDQxN2Y1YgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3NjaGVkdWxlci5qcwpAQCAtMCwwICsxLDcxIEBACisvLyDCqSAyMDEwIEVQRkwvTEFNUAorLy8gY29kZSBieSBHaWxsZXMgRHVib2NoZXQKKworZnVuY3Rpb24gU2NoZWR1bGVyKCkgeworICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzOworICAgIHZhciByZXNvbHV0aW9uID0gMDsKKyAgICB0aGlzLnRpbWVvdXQgPSB1bmRlZmluZWQ7CisgICAgdGhpcy5xdWV1ZXMgPSBuZXcgQXJyYXkoMCk7IC8vIGFuIGFycmF5IG9mIHdvcmsgcGFjYWtnZXMgaW5kZXhlZCBieSBpbmRleCBpbiB0aGUgbGFiZWxzIHRhYmxlLgorICAgIHRoaXMubGFiZWxzID0gbmV3IEFycmF5KDApOyAvLyBhbiBpbmRleGVkIGFycmF5IG9mIGxhYmVscyBpbmRleGVkIGJ5IHByaW9yaXR5LiBUaGlzIHNob3VsZCBiZSBzaG9ydC4KKyAgICB0aGlzLmxhYmVsID0gZnVuY3Rpb24obmFtZSwgcHJpb3JpdHkpIHsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy5wcmlvcml0eSA9IHByaW9yaXR5OworICAgIH0KKyAgICB0aGlzLndvcmsgPSBmdW5jdGlvbihmbiwgc2VsZiwgYXJncykgeworICAgICAgICB0aGlzLmZuID0gZm47CisgICAgICAgIHRoaXMuc2VsZiA9IHNlbGY7CisgICAgICAgIHRoaXMuYXJncyA9IGFyZ3M7CisgICAgfQorICAgIHRoaXMuYWRkTGFiZWwgPSBmdW5jdGlvbihuYW1lLCBwcmlvcml0eSkgeworICAgICAgICB2YXIgaWR4ID0gMDsKKyAgICAgICAgd2hpbGUgKGlkeCA8IHNjaGVkdWxlci5xdWV1ZXMubGVuZ3RoICYmIHNjaGVkdWxlci5sYWJlbHNbaWR4XS5wcmlvcml0eSA8PSBwcmlvcml0eSkgeyBpZHggPSBpZHggKyAxOyB9CisgICAgICAgIHNjaGVkdWxlci5sYWJlbHMuc3BsaWNlKGlkeCwgMCwgbmV3IHNjaGVkdWxlci5sYWJlbChuYW1lLCBwcmlvcml0eSkpOworICAgICAgICBzY2hlZHVsZXIucXVldWVzLnNwbGljZShpZHgsIDAsIG5ldyBBcnJheSgwKSk7CisgICAgfQorICAgIHRoaXMuY2xlYXJMYWJlbCA9IGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAgICAgdmFyIGlkeCA9IDA7CisgICAgICAgIHdoaWxlIChpZHggPCBzY2hlZHVsZXIucXVldWVzLmxlbmd0aCAmJiBzY2hlZHVsZXIubGFiZWxzW2lkeF0ubmFtZSAhPSBuYW1lKSB7IGlkeCA9IGlkeCArIDE7IH0KKyAgICAgICAgaWYgKGlkeCA8IHNjaGVkdWxlci5xdWV1ZXMubGVuZ3RoICYmIHNjaGVkdWxlci5sYWJlbHNbaV0ubmFtZSA9PSBuYW1lKSB7CisgICAgICAgICAgICBzY2hlZHVsZXIubGFiZWxzLnNwbGljZShpZHgsIDEpOworICAgICAgICAgICAgc2NoZWR1bGVyLnF1ZXVlcy5zcGxpY2UoaWR4LCAxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB0aGlzLm5leHRXb3JrID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBmbiA9IHVuZGVmaW5lZDsKKyAgICAgICAgdmFyIGlkeCA9IDA7CisgICAgICAgIHdoaWxlIChpZHggPCBzY2hlZHVsZXIucXVldWVzLmxlbmd0aCAmJiBzY2hlZHVsZXIucXVldWVzW2lkeF0ubGVuZ3RoID09IDApIHsgaWR4ID0gaWR4ICsgMTsgfQorICAgICAgICBpZiAoaWR4IDwgc2NoZWR1bGVyLnF1ZXVlcy5sZW5ndGggJiYgc2NoZWR1bGVyLnF1ZXVlc1tpZHhdLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHZhciBmbiA9IHNjaGVkdWxlci5xdWV1ZXNbaWR4XS5zaGlmdCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmbjsKKyAgICB9CisgICAgdGhpcy5hZGQgPSBmdW5jdGlvbihsYWJlbE5hbWUsIGZuLCBzZWxmLCBhcmdzKSB7CisgICAgICAgIHZhciBkb1dvcmsgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNjaGVkdWxlci50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgd29yayA9IHNjaGVkdWxlci5uZXh0V29yaygpOworICAgICAgICAgICAgICAgIGlmICh3b3JrICE9IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAod29yay5hcmdzID09IHVuZGVmaW5lZCkgeyB3b3JrLmFyZ3MgPSBuZXcgQXJyYXkoMCk7IH0KKyAgICAgICAgICAgICAgICAgICAgd29yay5mbi5hcHBseSh3b3JrLnNlbGYsIHdvcmsuYXJncyk7CisgICAgICAgICAgICAgICAgICAgIGRvV29yaygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVyLnRpbWVvdXQgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgcmVzb2x1dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGlkeCA9IDA7CisgICAgICAgIHdoaWxlIChpZHggPCBzY2hlZHVsZXIubGFiZWxzLmxlbmd0aCAmJiBzY2hlZHVsZXIubGFiZWxzW2lkeF0ubmFtZSAhPSBsYWJlbE5hbWUpIHsgaWR4ID0gaWR4ICsgMTsgfQorICAgICAgICBpZiAoaWR4IDwgc2NoZWR1bGVyLnF1ZXVlcy5sZW5ndGggJiYgc2NoZWR1bGVyLmxhYmVsc1tpZHhdLm5hbWUgPT0gbGFiZWxOYW1lKSB7CisgICAgICAgICAgICBzY2hlZHVsZXIucXVldWVzW2lkeF0ucHVzaChuZXcgc2NoZWR1bGVyLndvcmsoZm4sIHNlbGYsIGFyZ3MpKTsKKyAgICAgICAgICAgIGlmIChzY2hlZHVsZXIudGltZW91dCA9PSB1bmRlZmluZWQpIGRvV29yaygpOworICAgICAgICB9CisgICAgICAgIGVsc2UgdGhyb3coInF1ZXVlIGZvciBhZGQgaXMgbm9uIGV4aXN0YW50Iik7CisgICAgfQorICAgIHRoaXMuY2xlYXIgPSBmdW5jdGlvbihsYWJlbE5hbWUpIHsKKyAgICAgICAgdmFyIGlkeCA9IDA7CisgICAgICAgIHdoaWxlIChpZHggPCBzY2hlZHVsZXIubGFiZWxzLmxlbmd0aCAmJiBzY2hlZHVsZXIubGFiZWxzW2lkeF0ubmFtZSAhPSBsYWJlbE5hbWUpIHsgaWR4ID0gaWR4ICsgMTsgfQorICAgICAgICBpZiAoaWR4IDwgc2NoZWR1bGVyLnF1ZXVlcy5sZW5ndGggJiYgc2NoZWR1bGVyLmxhYmVsc1tpZHhdLm5hbWUgPT0gbGFiZWxOYW1lKSB7CisgICAgICAgICAgICBzY2hlZHVsZXIucXVldWVzW2lkeF0gPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgfQorICAgIH0KK307CmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9zZWxlY3RlZC1pbXBsaWNpdHMucG5nIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvc2VsZWN0ZWQtaW1wbGljaXRzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYzI5ZWZiCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvc2VsZWN0ZWQtaW1wbGljaXRzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9zZWxlY3RlZC1yaWdodC1pbXBsaWNpdHMucG5nIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvc2VsZWN0ZWQtcmlnaHQtaW1wbGljaXRzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44MzEzZjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvc2VsZWN0ZWQtcmlnaHQtaW1wbGljaXRzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9zZWxlY3RlZC1yaWdodC5wbmcgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9zZWxlY3RlZC1yaWdodC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDRlZGEyZgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3NlbGVjdGVkLXJpZ2h0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9zZWxlY3RlZC5wbmcgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9zZWxlY3RlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzg5NzY1MgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3NlbGVjdGVkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9zZWxlY3RlZDItcmlnaHQucG5nIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvc2VsZWN0ZWQyLXJpZ2h0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZjk4NGVmCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvc2VsZWN0ZWQyLXJpZ2h0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9zZWxlY3RlZDIucG5nIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvc2VsZWN0ZWQyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNzkwYmIxCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvc2VsZWN0ZWQyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9zaWduYXR1cmViZy5naWYgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9zaWduYXR1cmViZy5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjZhYzQ0MQotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3NpZ25hdHVyZWJnLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi9zaWduYXR1cmViZzIuZ2lmIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvc2lnbmF0dXJlYmcyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45YWFlNWJhCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvc2lnbmF0dXJlYmcyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi90ZW1wbGF0ZS5jc3MgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi90ZW1wbGF0ZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjA2NjAyNwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3RlbXBsYXRlLmNzcwpAQCAtMCwwICsxLDg0OCBAQAorLyogUmVzZXQgKi8KKworaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBvYmplY3QsIGlmcmFtZSwKK2gxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSwKK2EsIGFiYnIsIGFjcm9ueW0sIGFkZHJlc3MsIGNvZGUsIHByZSwKK2RlbCwgZGZuLCBlbSwgaW1nLCBxLCBkbCwgZHQsIGRkLCBvbCwgdWwsIGxpLAorZmllbGRzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsIGlucHV0LAordGFibGUsIGNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGQgeworICBtYXJnaW46IDA7CisgIHBhZGRpbmc6IDA7CisgIGJvcmRlcjogMDsKKyAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgIGZvbnQtc3R5bGU6IGluaGVyaXQ7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CisgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKK30KKwordGFibGUgeyBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOyBib3JkZXItc3BhY2luZzogMDsgfQorY2FwdGlvbiwgdGgsIHRkIHsgdGV4dC1hbGlnbjogbGVmdDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgfQordGFibGUsIHRkLCB0aCB7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0KKworYmxvY2txdW90ZTpiZWZvcmUsIGJsb2NrcXVvdGU6YWZ0ZXIsIHE6YmVmb3JlLCBxOmFmdGVyIHsgY29udGVudDogIiI7IH0KK2Jsb2NrcXVvdGUsIHEgeyBxdW90ZXM6IG5vbmU7IH0KKworYSBpbWcgeyBib3JkZXI6IG5vbmU7IH0KKworaW5wdXQgeyBib3JkZXItd2lkdGg6IDBweDsgfQorCisvKiBQYWdlICovCisKK2JvZHkgeworICBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7CisgIGZvbnQtc2l6ZTogMTBwdDsKK30KKworI2Zvb3RlciB7CisgIGZvbnQtc2l6ZTogOXB0OworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGNvbG9yOiAjODU4NDg0OworICBib3R0b206IDA7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDIwcHg7Cit9CisKK2FbaHJlZl0geworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgY29sb3I6ICMzMTU0Nzk7Cit9CisKK2FbaHJlZl06aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKyN0eXBlcyBvbCBsaSA+IHAgeworICBtYXJnaW4tdG9wOiA1cHg7Cit9CisKKyN0eXBlcyBvbCBsaTpsYXN0LWNoaWxkIHsKKyAgbWFyZ2luLWJvdHRvbTogNXB4OworfQorCisvKgorI2RlZmluaXRpb24geworICBwYWRkaW5nOiA2cHggMCA2cHggNnB4OworICBtaW4taGVpZ2h0OiA1OXB4OworICBjb2xvcjogd2hpdGU7Cit9CisqLworCisjZGVmaW5pdGlvbiB7CisgIGRpc3BsYXk6IGJsb2NrLWlubGluZTsKKyAgcGFkZGluZzogNXB4IDBweDsKKyAgaGVpZ2h0OiA2MXB4OworfQorCisjZGVmaW5pdGlvbiA+IGltZyB7CisgIGZsb2F0OiBsZWZ0OworICBwYWRkaW5nLXJpZ2h0OiA2cHg7CisgIHBhZGRpbmctbGVmdDogNXB4OworfQorCisjZGVmaW5pdGlvbiA+IGEgPiBpbWcgeworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZy1yaWdodDogNnB4OworICBwYWRkaW5nLWxlZnQ6IDVweDsKK30KKworI2RlZmluaXRpb24gcCArIGgxIHsKKyAgbWFyZ2luLXRvcDogM3B4OworfQorCisjZGVmaW5pdGlvbiA+IGgxIHsKKy8qICBwYWRkaW5nOiAxMnB4IDAgMTJweCA2cHg7Ki8KKyAgY29sb3I6IHdoaXRlOworICB0ZXh0LXNoYWRvdzogM3B4IGJsYWNrOworICB0ZXh0LXNoYWRvdzogYmxhY2sgMHB4IDJweCAwcHg7CisgIGZvbnQtc2l6ZTogMjRwdDsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBvdmVyZmxvdzogaGlkZGVuOworICBtYXJnaW4tdG9wOiAxMHB4OworfQorCisjZGVmaW5pdGlvbiBoMSA+IGEgeworICBjb2xvcjogI2ZmZmZmZjsKKyAgZm9udC1zaXplOiAyNHB0OworICB0ZXh0LXNoYWRvdzogYmxhY2sgMHB4IDJweCAwcHg7CisvKiAgdGV4dC1zaGFkb3c6IGJsYWNrIDBweCAwcHggMHB4OyovCit0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKyNkZWZpbml0aW9uICNvd25lciB7CisgIGNvbG9yOiAjZmZmZmZmOworICBtYXJnaW4tdG9wOiA0cHg7CisgIGZvbnQtc2l6ZTogMTBwdDsKKyAgb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworI2RlZmluaXRpb24gI293bmVyID4gYSB7CisgIGNvbG9yOiAjZmZmZmZmOworfQorCisjZGVmaW5pdGlvbiAjb3duZXIgPiBhOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisjc2lnbmF0dXJlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ3NpZ25hdHVyZWJnMi5naWYnKTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Q3ZDdkNzsKKyAgbWluLWhlaWdodDogMThweDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7CisgIGZvbnQtc2l6ZTogMTEuNXB0OworLyogIG1hcmdpbi1ib3R0b206IDEwcHg7Ki8KKyAgcGFkZGluZzogOHB4OworfQorCisjc2lnbmF0dXJlID4gc3Bhbi5tb2RpZmllcl9raW5kIHsKKyAgZGlzcGxheTogaW5saW5lOworICBmbG9hdDogbGVmdDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgd2lkdGg6IGF1dG87CisgIHBvc2l0aW9uOiBzdGF0aWM7CisgIHRleHQtc2hhZG93OiAycHggd2hpdGU7CisgIHRleHQtc2hhZG93OiB3aGl0ZSAwcHggMXB4IDBweDsKK30KKworI3NpZ25hdHVyZSA+IHNwYW4uc3ltYm9sIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgZGlzcGxheTogaW5saW5lOworICBwYWRkaW5nLWxlZnQ6IDAuN2VtOworICB0ZXh0LXNoYWRvdzogMnB4IHdoaXRlOworICB0ZXh0LXNoYWRvdzogd2hpdGUgMHB4IDFweCAwcHg7Cit9CisKKy8qIExpbmVhciBzdXBlciB0eXBlcyBhbmQga25vd24gc3ViY2xhc3NlcyAqLworLmhpZGRlbkNvbnRlbnQgeworICBkaXNwbGF5OiBub25lOworfQorCisudG9nZ2xlQ29udGFpbmVyIC50b2dnbGUgeworICBjdXJzb3I6IHBvaW50ZXI7CisgIHBhZGRpbmctbGVmdDogMTVweDsKKyAgYmFja2dyb3VuZDogdXJsKCJhcnJvdy1yaWdodC5wbmciKSBuby1yZXBlYXQgMCAzcHggdHJhbnNwYXJlbnQ7Cit9CisKKy50b2dnbGVDb250YWluZXIgLnRvZ2dsZS5vcGVuIHsKKyAgYmFja2dyb3VuZDogdXJsKCJhcnJvdy1kb3duLnBuZyIpIG5vLXJlcGVhdCAwIDNweCB0cmFuc3BhcmVudDsKK30KKworLnRvZ2dsZUNvbnRhaW5lciAuaGlkZGVuQ29udGVudCB7CisgIG1hcmdpbi10b3A6IDVweDsKK30KKworLnZhbHVlICNkZWZpbml0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzJDNDc1QzsgLyogYmx1ZSAqLworICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnZGVmYmctYmx1ZS5naWYnKTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Cit9CisKKy50eXBlICNkZWZpbml0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzMxNjU1NTsgLyogZ3JlZW4gKi8KKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2RlZmJnLWdyZWVuLmdpZicpOworICBiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDsKK30KKworI3RlbXBsYXRlIHsKKyAgbWFyZ2luLWJvdHRvbTogNTBweDsKK30KKworaDMgeworICBjb2xvcjogd2hpdGU7CisgIHBhZGRpbmc6IDVweCAxMHB4OworICBmb250LXNpemU6IDEycHQ7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICB0ZXh0LXNoYWRvdzogYmxhY2sgMXB4IDFweCAwcHg7Cit9CisKK2RsLmF0dHJpYnV0ZXMgPiBkdCB7CisgIGRpc3BsYXk6IGJsb2NrOworICBmbG9hdDogbGVmdDsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCitkbC5hdHRyaWJ1dGVzID4gZHQuaW1wbGljaXQgeworICBmb250LXdlaWdodDogYm9sZDsKKyAgY29sb3I6IGRhcmtncmVlbjsKK30KKworZGwuYXR0cmlidXRlcyA+IGRkIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHBhZGRpbmctbGVmdDogMTBlbTsKKyAgbWFyZ2luLWJvdHRvbTogNXB4OworfQorCisjdGVtcGxhdGUgLnZhbHVlcyA+IGgzIHsKKyAgYmFja2dyb3VuZDogIzJDNDc1QyB1cmwoInZhbHVlbWVtYmVyc2JnLmdpZiIpIHJlcGVhdC14IGJvdHRvbSBsZWZ0OyAgLyogZ3JheWlzaCBibHVlICovCisgIGhlaWdodDogMThweDsKK30KKworI3ZhbHVlcyBvbCBsaTpsYXN0LWNoaWxkIHsKKyAgbWFyZ2luLWJvdHRvbTogNXB4OworfQorCisjdGVtcGxhdGUgLnR5cGVzID4gaDMgeworICBiYWNrZ3JvdW5kOiAjMzE2NTU1IHVybCgidHlwZWJnLmdpZiIpIHJlcGVhdC14IGJvdHRvbSBsZWZ0OyAgLyogZ3JlZW4gKi8KKyAgaGVpZ2h0OiAxOHB4OworfQorCisjY29uc3RydWN0b3JzID4gaDMgeworICBiYWNrZ3JvdW5kOiAjNGY1MDRmIHVybCgiY29uc3RydWN0b3JzYmcuZ2lmIikgcmVwZWF0LXggYm90dG9tIGxlZnQ7IC8qIGdyYXkgKi8KKyAgaGVpZ2h0OiAxOHB4OworfQorCisjaW5oZXJpdGVkTWVtYmVycyA+IGRpdi5wYXJlbnQgPiBoMyB7CisgIGJhY2tncm91bmQ6ICNkYWRhZGEgdXJsKCJjb25zdHJ1Y3RvcnNiZy5naWYiKSByZXBlYXQteCBib3R0b20gbGVmdDsgLyogZ3JheSAqLworICBoZWlnaHQ6IDE3cHg7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgZm9udC1zaXplOiAxMnB0OworfQorCisjaW5oZXJpdGVkTWVtYmVycyA+IGRpdi5wYXJlbnQgPiBoMyAqIHsKKyAgY29sb3I6IHdoaXRlOworfQorCisjaW5oZXJpdGVkTWVtYmVycyA+IGRpdi5jb252ZXJzaW9uID4gaDMgeworICBiYWNrZ3JvdW5kOiAjZGFkYWRhIHVybCgiY29udmVyc2lvbmJnLmdpZiIpIHJlcGVhdC14IGJvdHRvbSBsZWZ0OyAvKiBncmF5ICovCisgIGhlaWdodDogMTdweDsKKyAgZm9udC1zdHlsZTogaXRhbGljOworICBmb250LXNpemU6IDEycHQ7Cit9CisKKyNpbmhlcml0ZWRNZW1iZXJzID4gZGl2LmNvbnZlcnNpb24gPiBoMyAqIHsKKyAgY29sb3I6IHdoaXRlOworfQorCisjZ3JvdXBlZE1lbWJlcnMgPiBkaXYuZ3JvdXAgPiBoMyB7CisgIGJhY2tncm91bmQ6ICNkYWRhZGEgdXJsKCJ0eXBlYmcuZ2lmIikgcmVwZWF0LXggYm90dG9tIGxlZnQ7IC8qIGdyZWVuICovCisgIGhlaWdodDogMTdweDsKKyAgZm9udC1zaXplOiAxMnB0OworfQorCisjZ3JvdXBlZE1lbWJlcnMgPiBkaXYuZ3JvdXAgPiBoMyAqIHsKKyAgY29sb3I6IHdoaXRlOworfQorCisKKy8qIE1lbWJlciBjZWxscyAqLworCitkaXYubWVtYmVycyA+IG9sIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgIGxpc3Qtc3R5bGU6IG5vbmUKK30KKworZGl2Lm1lbWJlcnMgPiBvbCA+IGxpIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBncmF5OworICBwYWRkaW5nOiA1cHggMCA2cHg7CisgIG1hcmdpbjogMCAxMHB4OworICBwb3NpdGlvbjogcmVsYXRpdmU7Cit9CisKK2Rpdi5tZW1iZXJzID4gb2wgPiBsaTpsYXN0LWNoaWxkIHsKKyAgYm9yZGVyOiAwOworICBwYWRkaW5nOiA1cHggMCA1cHg7Cit9CisKKy8qIE1lbWJlciBzaWduYXR1cmVzICovCisKKyN0b29sdGlwIHsKKyAgYmFja2dyb3VuZDogI0VGRDVCNTsKKyAgYm9yZGVyOiAxcHggc29saWQgZ3JheTsKKyAgY29sb3I6IGJsYWNrOworICBkaXNwbGF5OiBub25lOworICBwYWRkaW5nOiA1cHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKK30KKworLnNpZ25hdHVyZSB7CisgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogMTBwdDsKKyAgbGluZS1oZWlnaHQ6IDE4cHg7CisgIGNsZWFyOiBib3RoOworICBkaXNwbGF5OiBibG9jazsKKyAgdGV4dC1zaGFkb3c6IDJweCB3aGl0ZTsKKyAgdGV4dC1zaGFkb3c6IHdoaXRlIDBweCAxcHggMHB4OworfQorCisuc2lnbmF0dXJlIC5tb2RpZmllcl9raW5kIHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0ZXh0LWFsaWduOiByaWdodDsKKyAgd2lkdGg6IDE0ZW07Cit9CisKKy5zaWduYXR1cmUgPiBhID4gLnN5bWJvbCA+IC5uYW1lIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5zaWduYXR1cmUgPiBhOmhvdmVyID4gLnN5bWJvbCA+IC5uYW1lIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisuc2lnbmF0dXJlID4gYSB7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworLnNpZ25hdHVyZSA+IC5zeW1ib2wgeworICBkaXNwbGF5OiBibG9jazsKKyAgcGFkZGluZy1sZWZ0OiAxNC43ZW07Cit9CisKKy5zaWduYXR1cmUgLm5hbWUgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisuc2lnbmF0dXJlIC5zeW1ib2wgPiAuaW1wbGljaXQgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgY29sb3I6IGRhcmtncmVlbjsKK30KKworLnNpZ25hdHVyZSAuc3ltYm9sIC5zaGFkb3dlZCB7CisgIGNvbG9yOiBkYXJrc2VhZ3JlZW47Cit9CisKKy5zaWduYXR1cmUgLnN5bWJvbCAucGFyYW1zID4gLmltcGxpY2l0IHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisuc2lnbmF0dXJlIC5zeW1ib2wgLmRlcHJlY2F0ZWQgeworICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKK30KKworLnNpZ25hdHVyZSAuc3ltYm9sIC5wYXJhbXMgLmRlZmF1bHQgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKyN0ZW1wbGF0ZSAuc2lnbmF0dXJlLmNsb3NlZCB7CisgIGJhY2tncm91bmQ6IHVybCgiYXJyb3ctcmlnaHQucG5nIikgbm8tcmVwZWF0IDAgNXB4IHRyYW5zcGFyZW50OworICBjdXJzb3I6IHBvaW50ZXI7Cit9CisKKyN0ZW1wbGF0ZSAuc2lnbmF0dXJlLm9wZW5lZCB7CisgIGJhY2tncm91bmQ6IHVybCgiYXJyb3ctZG93bi5wbmciKSBuby1yZXBlYXQgMCA1cHggdHJhbnNwYXJlbnQ7CisgIGN1cnNvcjogcG9pbnRlcjsKK30KKworI3RlbXBsYXRlIC52YWx1ZXMgLnNpZ25hdHVyZSAubmFtZSB7CisgIGNvbG9yOiBkYXJrYmx1ZTsKK30KKworI3RlbXBsYXRlIC50eXBlcyAuc2lnbmF0dXJlIC5uYW1lIHsKKyAgY29sb3I6IGRhcmtncmVlbjsKK30KKworLmZ1bGwtc2lnbmF0dXJlLXVzZWNhc2UgaDQgc3BhbiB7CisgIGZvbnQtc2l6ZTogMTBwdDsKK30KKworLmZ1bGwtc2lnbmF0dXJlLXVzZWNhc2UgPiAjc2lnbmF0dXJlIHsKKyAgcGFkZGluZy10b3A6IDBweDsKK30KKworI3RlbXBsYXRlIC5mdWxsLXNpZ25hdHVyZS11c2VjYXNlID4gLnNpZ25hdHVyZS5jbG9zZWQgeworICBiYWNrZ3JvdW5kOiBub25lOworfQorCisjdGVtcGxhdGUgLmZ1bGwtc2lnbmF0dXJlLXVzZWNhc2UgPiAuc2lnbmF0dXJlLm9wZW5lZCB7CisgIGJhY2tncm91bmQ6IG5vbmU7Cit9CisKKy5mdWxsLXNpZ25hdHVyZS1ibG9jayB7CisgIHBhZGRpbmc6IDVweCAwIDA7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRUJFQkVCOworICBtYXJnaW4tdG9wOiA1cHg7CisgIG1hcmdpbi1ib3R0b206IDVweDsKK30KKworCisvKiBDb21tZW50cyB0ZXh0IGZvcm1hdGluZyAqLworCisuY210IHt9CisKKy5jbXQgcCB7CisgIG1hcmdpbjogMC43ZW0gMDsKK30KKworLmNtdCBwOmZpcnN0LWNoaWxkIHsKKyAgbWFyZ2luLXRvcDogMDsKK30KKworLmNtdCBwOmxhc3QtY2hpbGQgeworICBtYXJnaW4tYm90dG9tOiAwOworfQorCisuY210IGgzLAorLmNtdCBoNCwKKy5jbXQgaDUsCisuY210IGg2IHsKKyAgbWFyZ2luLWJvdHRvbTogMC43ZW07CisgIG1hcmdpbi10b3A6IDEuNGVtOworICBkaXNwbGF5OiBibG9jazsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy5jbXQgaDMgeworICBmb250LXNpemU6IDE0cHQ7Cit9CisKKy5jbXQgaDQgeworICBmb250LXNpemU6IDEzcHQ7Cit9CisKKy5jbXQgaDUgeworICBmb250LXNpemU6IDEycHQ7Cit9CisKKy5jbXQgaDYgeworICBmb250LXNpemU6IDExcHQ7Cit9CisKKy5jbXQgcHJlIHsKKyAgcGFkZGluZzogNXB4OworICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICBtYXJnaW46IDVweCAwOworICBkaXNwbGF5OiBibG9jazsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworLmNtdCBwcmUgc3Bhbi5hbm8geworICBjb2xvcjogYmx1ZTsKK30KKworLmNtdCBwcmUgc3Bhbi5jbXQgeworICBjb2xvcjogZ3JlZW47Cit9CisKKy5jbXQgcHJlIHNwYW4ua3cgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLmNtdCBwcmUgc3Bhbi5saXQgeworICBjb2xvcjogI2M3MTU4NTsKK30KKworLmNtdCBwcmUgc3Bhbi5udW0geworICBjb2xvcjogIzFlOTBmZjsgLyogZG9kZ2VyYmx1ZSAqLworfQorCisuY210IHByZSBzcGFuLnN0ZCB7CisgIGNvbG9yOiAjMDA4MDgwOyAvKiB0ZWFsICovCit9CisKKy5jbXQgdWwgeworICBkaXNwbGF5OiBibG9jazsKKyAgbGlzdC1zdHlsZTogY2lyY2xlOworICBwYWRkaW5nLWxlZnQ6IDIwcHg7Cit9CisKKy5jbXQgb2wgeworICBkaXNwbGF5OiBibG9jazsKKyAgcGFkZGluZy1sZWZ0OjIwcHg7Cit9CisKKy5jbXQgb2wuZGVjaW1hbCB7CisgIGxpc3Qtc3R5bGU6IGRlY2ltYWw7Cit9CisKKy5jbXQgb2wubG93ZXJBbHBoYSB7CisgIGxpc3Qtc3R5bGU6IGxvd2VyLWFscGhhOworfQorCisuY210IG9sLnVwcGVyQWxwaGEgeworICBsaXN0LXN0eWxlOiB1cHBlci1hbHBoYTsKK30KKworLmNtdCBvbC5sb3dlclJvbWFuIHsKKyAgbGlzdC1zdHlsZTogbG93ZXItcm9tYW47Cit9CisKKy5jbXQgb2wudXBwZXJSb21hbiB7CisgIGxpc3Qtc3R5bGU6IHVwcGVyLXJvbWFuOworfQorCisuY210IGxpIHsKKyAgZGlzcGxheTogbGlzdC1pdGVtOworfQorCisuY210IGNvZGUgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCisuY210IGEgeworICBmb250LXN0eWxlOiBib2xkOworfQorCisuY210IGVtLCAuY210IGkgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5jbXQgc3Ryb25nLCAuY210IGIgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLyogQ29tbWVudHMgc3RydWN0dXJlZCBsYXlvdXQgKi8KKworLmdyb3VwID4gZGl2LmNvbW1lbnQgeworICBwYWRkaW5nLXRvcDogNXB4OworICBwYWRkaW5nLWJvdHRvbTogNXB4OworICBwYWRkaW5nLXJpZ2h0OiA1cHg7CisgIHBhZGRpbmctbGVmdDogNXB4OworICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWU7CisgIG1hcmdpbi10b3A6NXB4OworICBtYXJnaW4tYm90dG9tOjVweDsKKyAgbWFyZ2luLXJpZ2h0OjVweDsKKyAgbWFyZ2luLWxlZnQ6NXB4OworICBkaXNwbGF5OiBibG9jazsKK30KKworcC5jb21tZW50IHsKKyAgZGlzcGxheTogYmxvY2s7CisgIG1hcmdpbi1sZWZ0OiAxNC43ZW07CisgIG1hcmdpbi10b3A6IDVweDsKK30KKworLnNob3J0Y29tbWVudCB7CisgIGRpc3BsYXk6IGJsb2NrOworICBtYXJnaW46IDVweCAxMHB4OworfQorCitkaXYuZnVsbGNvbW1lbnR0b3AgeworICBwYWRkaW5nOiAxMHB4IDEwcHg7CisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdmdWxsY29tbWVudHRvcGJnLmdpZicpOworICBiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDsKK30KKworZGl2LmZ1bGxjb21tZW50IHsKKyAgbWFyZ2luOiA1cHggMTBweDsKK30KKworI3RlbXBsYXRlIGRpdi5mdWxsY29tbWVudHRvcCwKKyN0ZW1wbGF0ZSBkaXYuZnVsbGNvbW1lbnQgeworICBkaXNwbGF5Om5vbmU7CisgIG1hcmdpbjogNXB4IDAgMCAxNC43ZW07Cit9CisKKyN0ZW1wbGF0ZSAuc2hvcnRjb21tZW50IHsKKyAgbWFyZ2luOiA1cHggMCAwIDE0LjdlbTsKKyAgcGFkZGluZzogMDsKK30KKworZGl2LmZ1bGxjb21tZW50IC5ibG9jayB7CisgIHBhZGRpbmc6IDVweCAwIDA7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRUJFQkVCOworICBtYXJnaW4tdG9wOiA1cHg7CisgIG92ZXJmbG93OiBoaWRkZW47Cit9CisKK2Rpdi5mdWxsY29tbWVudHRvcCAuYmxvY2sgeworICBwYWRkaW5nOiA1cHggMCAwOworICBib3JkZXItdG9wOiAxcHggc29saWQgI0VCRUJFQjsKKyAgbWFyZ2luLXRvcDogNXB4OworICBtYXJnaW4tYm90dG9tOiA1cHgKK30KKworZGl2LmZ1bGxjb21tZW50IGRpdi5ibG9jayBvbCBsaSBwLAorZGl2LmZ1bGxjb21tZW50IGRpdi5ibG9jayBvbCBsaSB7CisgIGRpc3BsYXk6aW5saW5lCit9CisKK2Rpdi5mdWxsY29tbWVudCAuYmxvY2sgPiBoNSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCitkaXYuZnVsbGNvbW1lbnQgLmNvbW1lbnQgeworICBtYXJnaW46IDVweCAwIDEwcHg7Cit9CisKK2Rpdi5mdWxsY29tbWVudHRvcCAuY29tbWVudDpsYXN0LWNoaWxkLAorZGl2LmZ1bGxjb21tZW50IC5jb21tZW50Omxhc3QtY2hpbGQgeworICBtYXJnaW4tYm90dG9tOiAwOworfQorCitkaXYuZnVsbGNvbW1lbnR0b3AgZGwucGFyYW1jbXRzIHsKKyAgbWFyZ2luLWJvdHRvbTogMC44ZW07CisgIHBhZGRpbmctYm90dG9tOiAwLjhlbTsKK30KKworZGl2LmZ1bGxjb21tZW50dG9wIGRsLnBhcmFtY210cyA+IGR0LAorZGl2LmZ1bGxjb21tZW50IGRsLnBhcmFtY210cyA+IGR0IHsKKyAgZGlzcGxheTogYmxvY2s7CisgIGZsb2F0OiBsZWZ0OworICBmb250LXdlaWdodDogYm9sZDsKKyAgbWluLXdpZHRoOiA3MHB4OworfQorCitkaXYuZnVsbGNvbW1lbnR0b3AgZGwucGFyYW1jbXRzID4gZGQsCitkaXYuZnVsbGNvbW1lbnQgZGwucGFyYW1jbXRzID4gZGQgeworICBkaXNwbGF5OiBibG9jazsKKyAgcGFkZGluZy1sZWZ0OiAxMHB4OworICBtYXJnaW4tYm90dG9tOiA1cHg7CisgIG1hcmdpbi1sZWZ0OiA3MHB4OworfQorCisvKiBNZW1iZXJzIGZpbHRlciB0b29sICovCisKKyN0ZXh0ZmlsdGVyIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBkaXNwbGF5OiBibG9jazsKKyAgICBoZWlnaHQ6IDIwcHg7CisgIG1hcmdpbi1ib3R0b206IDVweDsKK30KKworI3RleHRmaWx0ZXIgPiAucHJlIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIGxlZnQ6IDA7CisgICAgaGVpZ2h0OiAyM3B4OworICAgIHdpZHRoOiAyMXB4OworICAgIGJhY2tncm91bmQ6IHVybCgiZmlsdGVyX2JveF9sZWZ0LnBuZyIpOworfQorCisjdGV4dGZpbHRlciA+IC5pbnB1dCB7CisgIGRpc3BsYXk6IGJsb2NrOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgcmlnaHQ6IDIwcHg7CisgICAgbGVmdDogMjBweDsKK30KKworI3RleHRmaWx0ZXIgPiAuaW5wdXQgPiBpbnB1dCB7CisgIGhlaWdodDogMjBweDsKKyAgcGFkZGluZzogMXB4OworICBmb250LXdlaWdodDogYm9sZDsKKyAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmYgdXJsKCJmaWx0ZXJib3hiYXJiZy5wbmciKSByZXBlYXQteCB0b3AgbGVmdDsKKyAgICAgICAgd2lkdGg6IDEwMCU7Cit9CisKKyN0ZXh0ZmlsdGVyID4gLnBvc3QgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgcmlnaHQ6IDA7CisgICAgaGVpZ2h0OiAyM3B4OworICAgIHdpZHRoOiAyMXB4OworICAgIGJhY2tncm91bmQ6IHVybCgiZmlsdGVyX2JveF9yaWdodC5wbmciKTsKK30KKworI21icnNlbCB7CisgIHBhZGRpbmc6IDVweCAxMHB4OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWRlZGVlOyAvKiBsaWdodCBncmF5ICovCisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdmaWx0ZXJib3hiZy5naWYnKTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7CisgIGZvbnQtc2l6ZTogOS41cHQ7CisgIGRpc3BsYXk6IGJsb2NrOworICBtYXJnaW4tdG9wOiAxZW07CisvKiAgbWFyZ2luLWJvdHRvbTogMWVtOyAqLworfQorCisjbWJyc2VsID4gZGl2IHsKKyAgbWFyZ2luLWJvdHRvbTogNXB4OworfQorCisjbWJyc2VsID4gZGl2Omxhc3QtY2hpbGQgeworICBtYXJnaW4tYm90dG9tOiAwOworfQorCisjbWJyc2VsID4gZGl2ID4gc3Bhbi5maWx0ZXJ0eXBlIHsKKyAgcGFkZGluZzogNHB4OworICBtYXJnaW4tcmlnaHQ6IDVweDsKKyAgZmxvYXQ6IGxlZnQ7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgY29sb3I6ICMwMDAwMDA7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICB0ZXh0LXNoYWRvdzogd2hpdGUgMHB4IDFweCAwcHg7CisgIHdpZHRoOiA0LjVlbTsKK30KKworI21icnNlbCA+IGRpdiA+IG9sIHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCisjbWJyc2VsID4gZGl2ID4gYSB7CisgIHBvc2l0aW9uOnJlbGF0aXZlOworICB0b3A6IC04cHg7CisgIGZvbnQtc2l6ZTogMTFweDsKKyAgdGV4dC1zaGFkb3c6ICNmZmZmZmYgMCAxcHggMDsKK30KKworI21icnNlbCA+IGRpdiA+IG9sI2xpbmVhcml6YXRpb24geworICBkaXNwbGF5OiB0YWJsZTsKKyAgbWFyZ2luLWxlZnQ6IDcwcHg7Cit9CisKKyNtYnJzZWwgPiBkaXYgPiBvbCNsaW5lYXJpemF0aW9uID4gbGkuaW4geworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgIGZsb2F0OiBsZWZ0OworICBwYWRkaW5nLXJpZ2h0OiAxMHB4OworICBtYXJnaW4tcmlnaHQ6IDVweDsKKyAgYmFja2dyb3VuZDogdXJsKHNlbGVjdGVkLXJpZ2h0LnBuZykgbm8tcmVwZWF0OworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAwcHg7Cit9CisKKyNtYnJzZWwgPiBkaXYgPiBvbCNsaW5lYXJpemF0aW9uID4gbGkuaW4gPiBzcGFueworICBjb2xvcjogIzQwNDA0MDsKKyAgZmxvYXQ6IGxlZnQ7CisgIHBhZGRpbmc6IDFweCAwIDFweCAxMHB4OworICBiYWNrZ3JvdW5kOiB1cmwoc2VsZWN0ZWQucG5nKSBuby1yZXBlYXQ7CisgIGJhY2tncm91bmQtcG9zaXRpb246IDBweCAwcHg7CisgIHRleHQtc2hhZG93OiAjZmZmZmZmIDAgMXB4IDA7Cit9CisKKyNtYnJzZWwgPiBkaXYgPiBvbCNpbXBsaWNpdHMgeworICBkaXNwbGF5OiB0YWJsZTsKKyAgbWFyZ2luLWxlZnQ6IDcwcHg7Cit9CisKKyNtYnJzZWwgPiBkaXYgPiBvbCNpbXBsaWNpdHMgPiBsaS5pbiB7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgZmxvYXQ6IGxlZnQ7CisgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CisgIG1hcmdpbi1yaWdodDogNXB4OworICBiYWNrZ3JvdW5kOiB1cmwoc2VsZWN0ZWQtcmlnaHQtaW1wbGljaXRzLnBuZykgbm8tcmVwZWF0OworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAwcHg7Cit9CisKKyNtYnJzZWwgPiBkaXYgPiBvbCNpbXBsaWNpdHMgPiBsaS5pbiA+IHNwYW57CisgIGNvbG9yOiAjNDA0MDQwOworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZzogMXB4IDAgMXB4IDEwcHg7CisgIGJhY2tncm91bmQ6IHVybChzZWxlY3RlZC1pbXBsaWNpdHMucG5nKSBuby1yZXBlYXQ7CisgIGJhY2tncm91bmQtcG9zaXRpb246IDBweCAwcHg7CisgIHRleHQtc2hhZG93OiAjZmZmZmZmIDAgMXB4IDA7Cit9CisKKyNtYnJzZWwgPiBkaXYgPiBvbCA+IGxpIHsKKy8qICBwYWRkaW5nOiAzcHggMTBweDsqLworICBsaW5lLWhlaWdodDogMTZwdDsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBjdXJzb3I6IHBvaW50ZXI7Cit9CisKKyNtYnJzZWwgPiBkaXYgPiBvbCA+IGxpLmluIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZy1yaWdodDogMTBweDsKKyAgbWFyZ2luLXJpZ2h0OiA1cHg7CisgIGJhY2tncm91bmQ6IHVybChzZWxlY3RlZC1yaWdodC5wbmcpIG5vLXJlcGVhdDsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgMHB4OworfQorCisjbWJyc2VsID4gZGl2ID4gb2wgPiBsaS5pbiA+IHNwYW57CisgIGNvbG9yOiAjNDA0MDQwOworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZzogMXB4IDAgMXB4IDEwcHg7CisgIGJhY2tncm91bmQ6IHVybChzZWxlY3RlZC5wbmcpIG5vLXJlcGVhdDsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogMHB4IDBweDsKKyAgdGV4dC1zaGFkb3c6ICNmZmZmZmYgMCAxcHggMDsKK30KKworI21icnNlbCA+IGRpdiA+IG9sID4gbGkub3V0IHsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZy1yaWdodDogMTBweDsKKyAgbWFyZ2luLXJpZ2h0OiA1cHg7Cit9CisKKyNtYnJzZWwgPiBkaXYgPiBvbCA+IGxpLm91dCA+IHNwYW57CisgIGNvbG9yOiAjNzQ3NDc0OworLyogIGJhY2tncm91bmQtY29sb3I6ICM5OTk7ICovCisgIGZsb2F0OiBsZWZ0OworICBwYWRkaW5nOiAxcHggMCAxcHggMTBweDsKKy8qICBiYWNrZ3JvdW5kOiB1cmwodW5zZWxlY3RlZC5wbmcpIG5vLXJlcGVhdDsqLworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwcHggLTFweDsKKyAgdGV4dC1zaGFkb3c6ICNmZmZmZmYgMCAxcHggMDsKK30KKy8qCisjbWJyc2VsIC5oaWRlYWxsIHsKKyAgY29sb3I6ICM0QzRDNEM7CisgIGxpbmUtaGVpZ2h0OiAxNnB4OworICBmb250LXdlaWdodDogYm9sZDsKK30KKworI21icnNlbCAuaGlkZWFsbCBzcGFuIHsKKyAgY29sb3I6ICM0QzRDNEM7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisjbWJyc2VsIC5zaG93YWxsIHsKKyAgY29sb3I6ICM0QzRDNEM7CisgIGxpbmUtaGVpZ2h0OiAxNnB4OworICBmb250LXdlaWdodDogYm9sZDsKK30KKworI21icnNlbCAuc2hvd2FsbCBzcGFuIHsKKyAgY29sb3I6ICM0QzRDNEM7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfSovCisKKy5iYWRnZSB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgcGFkZGluZzogMnB4IDRweDsKKyAgZm9udC1zaXplOiAxMS44NDRweDsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIGxpbmUtaGVpZ2h0OiAxNHB4OworICBjb2xvcjogI2ZmZmZmZjsKKyAgdGV4dC1zaGFkb3c6IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSk7CisgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzk5OTk5OTsKKyAgcGFkZGluZy1yaWdodDogOXB4OworICBwYWRkaW5nLWxlZnQ6IDlweDsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA5cHg7CisgICAgIC1tb3otYm9yZGVyLXJhZGl1czogOXB4OworICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDlweDsKK30KKworLmJhZGdlLXJlZCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNiOTRhNDg7Cit9CmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi90ZW1wbGF0ZS5qcyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3RlbXBsYXRlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZkMWNhZjYKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi90ZW1wbGF0ZS5qcwpAQCAtMCwwICsxLDQ2NiBAQAorLy8gwqkgMjAwOeKAkzIwMTAgRVBGTC9MQU1QCisvLyBjb2RlIGJ5IEdpbGxlcyBEdWJvY2hldCB3aXRoIGNvbnRyaWJ1dGlvbnMgYnkgUGVkcm8gRnVybGFuZXR0bworCiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpeworCisgICAgLy8gRXNjYXBlcyBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgYSB2YWxpZCBqUXVlcnkgc2VsZWN0b3IKKyAgICBmdW5jdGlvbiBlc2NhcGVKcXVlcnkoc3RyKXsKKyAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWzsmLFwuXCtcKlx+JzoiXCFcXiMkJUBcW1xdXChcKT0+XHxdKS9nLCAnXFwkMScpOworICAgIH0KKworICAgIC8vIGhpZ2hsaWdodCBhbmQganVtcCB0byBzZWxlY3RlZCBtZW1iZXIKKyAgICBpZiAod2luZG93LmxvY2F0aW9uLmhhc2gpIHsKKyAgICAgIHZhciB0ZW1wID0gd2luZG93LmxvY2F0aW9uLmhhc2gucmVwbGFjZSgnIycsICcnKTsKKyAgICAgIHZhciBlbGVtID0gJyMnK2VzY2FwZUpxdWVyeSh0ZW1wKTsKKworICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApOworICAgICAgJChlbGVtKS5wYXJlbnQoKS5lZmZlY3QoImhpZ2hsaWdodCIsIHtjb2xvcjogIiNGRkNDODUifSwgMzAwMCk7CisgICAgICAkKCdodG1sLGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6JChlbGVtKS5wYXJlbnQoKS5vZmZzZXQoKS50b3B9LCAxMDAwKTsKKyAgICB9CisgICAgCisgICAgdmFyIGlzSGlkZGVuQ2xhc3MgPSBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICByZXR1cm4gbmFtZSA9PSAnc2NhbGEuQW55JyB8fAorICAgICAgICAgICAgICAgbmFtZSA9PSAnc2NhbGEuQW55UmVmJzsKKyAgICB9OworCisgICAgdmFyIGlzSGlkZGVuID0gZnVuY3Rpb24gKGVsZW0pIHsKKyAgICAgICAgcmV0dXJuICQoZWxlbSkuYXR0cigiZGF0YS1oaWRkZW4iKSA9PSAndHJ1ZSc7CisgICAgfTsKKworICAgICQoIiNsaW5lYXJpemF0aW9uIGxpOmd0KDApIikuZmlsdGVyKGZ1bmN0aW9uKCl7CisgICAgICAgIHJldHVybiBpc0hpZGRlbkNsYXNzKCQodGhpcykuYXR0cigibmFtZSIpKTsKKyAgICB9KS5yZW1vdmVDbGFzcygiaW4iKS5hZGRDbGFzcygib3V0Iik7CisKKyAgICAkKCIjaW1wbGljaXRzIGxpIikuZmlsdGVyKGZ1bmN0aW9uKCl7CisgICAgICAgIHJldHVybiBpc0hpZGRlbih0aGlzKTsKKyAgICB9KS5yZW1vdmVDbGFzcygiaW4iKS5hZGRDbGFzcygib3V0Iik7CisKKyAgICAvLyBQcmUtZmlsdGVyIG1lbWJlcnMKKyAgICBmaWx0ZXIoKTsKKworICAgIC8vIE1lbWJlciBmaWx0ZXIgYm94CisgICAgdmFyIGlucHV0ID0gJCgiI3RleHRmaWx0ZXIgaW5wdXQiKTsKKyAgICBpbnB1dC5iaW5kKCJrZXl1cCIsIGZ1bmN0aW9uKGV2ZW50KSB7CisKKyAgICAgICAgc3dpdGNoICggZXZlbnQua2V5Q29kZSApIHsKKworICAgICAgICBjYXNlIDI3OiAvLyBlc2NhcGUga2V5CisgICAgICAgICAgICBpbnB1dC52YWwoIiIpOworICAgICAgICAgICAgZmlsdGVyKHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAzODogLy8gdXAKKyAgICAgICAgICAgIGlucHV0LnZhbCgiIik7CisgICAgICAgICAgICBmaWx0ZXIoZmFsc2UpOworICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsICQoImJvZHkiKS5vZmZzZXQoKS50b3ApOworICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMzM6IC8vcGFnZSB1cAorICAgICAgICAgICAgaW5wdXQudmFsKCIiKTsKKyAgICAgICAgICAgIGZpbHRlcihmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDM0OiAvL3BhZ2UgZG93bgorICAgICAgICAgICAgaW5wdXQudmFsKCIiKTsKKyAgICAgICAgICAgIGZpbHRlcihmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsICQoIiNtYnJzZWwiKS5vZmZzZXQoKS50b3ApOworICAgICAgICAgICAgZmlsdGVyKHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgfQorICAgIH0pOworICAgIGlucHV0LmZvY3VzKGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGlucHV0LnNlbGVjdCgpOworICAgIH0pOworICAgICQoIiN0ZXh0ZmlsdGVyID4gLnBvc3QiKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgJCgiI3RleHRmaWx0ZXIgaW5wdXQiKS5hdHRyKCJ2YWx1ZSIsICIiKTsKKyAgICAgICAgZmlsdGVyKCk7CisgICAgfSk7CisgICAgJChkb2N1bWVudCkua2V5ZG93bihmdW5jdGlvbihldmVudCkgeworCisgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09IDkpIHsgLy8gdGFiCisgICAgICAgICAgICAkKCIjaW5kZXgtaW5wdXQiLCB3aW5kb3cucGFyZW50LmRvY3VtZW50KS5mb2N1cygpOworICAgICAgICAgICAgaW5wdXQuYXR0cigidmFsdWUiLCAiIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgICQoIiNsaW5lYXJpemF0aW9uIGxpIikuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoImluIikpIHsKKyAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoImluIik7CisgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCJvdXQiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgkKHRoaXMpLmhhc0NsYXNzKCJvdXQiKSkgeworICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygib3V0Iik7CisgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCJpbiIpOworICAgICAgICB9OworICAgICAgICBmaWx0ZXIoKTsKKyAgICB9KTsKKworICAgICQoIiNpbXBsaWNpdHMgbGkiKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcygiaW4iKSkgeworICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygiaW4iKTsKKyAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoIm91dCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCQodGhpcykuaGFzQ2xhc3MoIm91dCIpKSB7CisgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCJvdXQiKTsKKyAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoImluIik7CisgICAgICAgIH07CisgICAgICAgIGZpbHRlcigpOworICAgIH0pOworCisgICAgJCgiI21icnNlbCA+IGRpdltpZD1hbmNlc3RvcnNdID4gb2wgPiBsaS5oaWRlYWxsIikuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgICQoIiNsaW5lYXJpemF0aW9uIGxpLmluIikucmVtb3ZlQ2xhc3MoImluIikuYWRkQ2xhc3MoIm91dCIpOworICAgICAgICAkKCIjbGluZWFyaXphdGlvbiBsaTpmaXJzdCIpLnJlbW92ZUNsYXNzKCJvdXQiKS5hZGRDbGFzcygiaW4iKTsKKyAgICAgICAgJCgiI2ltcGxpY2l0cyBsaS5pbiIpLnJlbW92ZUNsYXNzKCJpbiIpLmFkZENsYXNzKCJvdXQiKTsKKworICAgICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcygib3V0IikgJiYgJCgiI21icnNlbCA+IGRpdltpZD1hbmNlc3RvcnNdID4gb2wgPiBsaS5zaG93YWxsIikuaGFzQ2xhc3MoImluIikpIHsKKyAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoIm91dCIpLmFkZENsYXNzKCJpbiIpOworICAgICAgICAgICAgJCgiI21icnNlbCA+IGRpdltpZD1hbmNlc3RvcnNdID4gb2wgPiBsaS5zaG93YWxsIikucmVtb3ZlQ2xhc3MoImluIikuYWRkQ2xhc3MoIm91dCIpOworICAgICAgICB9CisKKyAgICAgICAgZmlsdGVyKCk7CisgICAgfSkKKyAgICAkKCIjbWJyc2VsID4gZGl2W2lkPWFuY2VzdG9yc10gPiBvbCA+IGxpLnNob3dhbGwiKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGZpbHRlcmVkTGluZWFyaXphdGlvbiA9CisgICAgICAgICAgICAkKCIjbGluZWFyaXphdGlvbiBsaS5vdXQiKS5maWx0ZXIoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEgaXNIaWRkZW5DbGFzcygkKHRoaXMpLmF0dHIoIm5hbWUiKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgZmlsdGVyZWRMaW5lYXJpemF0aW9uLnJlbW92ZUNsYXNzKCJvdXQiKS5hZGRDbGFzcygiaW4iKTsKKworICAgICAgICB2YXIgZmlsdGVyZWRJbXBsaWNpdHMgPQorICAgICAgICAkKCIjaW1wbGljaXRzIGxpLm91dCIpLmZpbHRlcihmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiAhIGlzSGlkZGVuKHRoaXMpOworICAgICAgICB9KTsKKyAgICAgICAgZmlsdGVyZWRJbXBsaWNpdHMucmVtb3ZlQ2xhc3MoIm91dCIpLmFkZENsYXNzKCJpbiIpOworCisgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCJvdXQiKSAmJiAkKCIjbWJyc2VsID4gZGl2W2lkPWFuY2VzdG9yc10gPiBvbCA+IGxpLmhpZGVhbGwiKS5oYXNDbGFzcygiaW4iKSkgeworICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygib3V0IikuYWRkQ2xhc3MoImluIik7CisgICAgICAgICAgICAkKCIjbWJyc2VsID4gZGl2W2lkPWFuY2VzdG9yc10gPiBvbCA+IGxpLmhpZGVhbGwiKS5yZW1vdmVDbGFzcygiaW4iKS5hZGRDbGFzcygib3V0Iik7CisgICAgICAgIH0KKworICAgICAgICBmaWx0ZXIoKTsKKyAgICB9KTsKKyAgICAkKCIjdmlzYmwgPiBvbCA+IGxpLnB1YmxpYyIpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcygib3V0IikpIHsKKyAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoIm91dCIpLmFkZENsYXNzKCJpbiIpOworICAgICAgICAgICAgJCgiI3Zpc2JsID4gb2wgPiBsaS5hbGwiKS5yZW1vdmVDbGFzcygiaW4iKS5hZGRDbGFzcygib3V0Iik7CisgICAgICAgICAgICBmaWx0ZXIoKTsKKyAgICAgICAgfTsKKyAgICB9KQorICAgICQoIiN2aXNibCA+IG9sID4gbGkuYWxsIikuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCJvdXQiKSkgeworICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygib3V0IikuYWRkQ2xhc3MoImluIik7CisgICAgICAgICAgICAkKCIjdmlzYmwgPiBvbCA+IGxpLnB1YmxpYyIpLnJlbW92ZUNsYXNzKCJpbiIpLmFkZENsYXNzKCJvdXQiKTsKKyAgICAgICAgICAgIGZpbHRlcigpOworICAgICAgICB9OworICAgIH0pOworICAgICQoIiNvcmRlciA+IG9sID4gbGkuYWxwaGEiKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoIm91dCIpKSB7CisgICAgICAgICAgICBvcmRlckFscGhhKCk7CisgICAgICAgIH07CisgICAgfSkKKyAgICAkKCIjb3JkZXIgPiBvbCA+IGxpLmluaGVyaXQiKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoIm91dCIpKSB7CisgICAgICAgICAgICBvcmRlckluaGVyaXQoKTsKKyAgICAgICAgfTsKKyAgICB9KTsKKyAgICAkKCIjb3JkZXIgPiBvbCA+IGxpLmdyb3VwIikuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCJvdXQiKSkgeworICAgICAgICAgICAgb3JkZXJHcm91cCgpOworICAgICAgICB9OworICAgIH0pOworICAgICQoIiNncm91cGVkTWVtYmVycyIpLmhpZGUoKTsKKworICAgIGluaXRJbmhlcml0KCk7CisKKyAgICAvLyBDcmVhdGUgdG9vbHRpcHMKKyAgICAkKCIuZXh0eXBlIikuYWRkKCIuZGVmdmFsIikudG9vbHRpcCh7CisgICAgICAgIHRpcDogIiN0b29sdGlwIiwKKyAgICAgICAgcG9zaXRpb246InRvcCBjZW50ZXIiLAorICAgICAgICBwcmVkZWxheTogNTAwLAorICAgICAgICBvbkJlZm9yZVNob3c6IGZ1bmN0aW9uKGV2KSB7CisgICAgICAgICAgICAkKHRoaXMuZ2V0VGlwKCkpLnRleHQodGhpcy5nZXRUcmlnZ2VyKCkuYXR0cigibmFtZSIpKTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgLyogQWRkIHRvZ2dsZSBhcnJvd3MgKi8KKyAgICAvL3ZhciBkb2NBbGxTaWdzID0gJCgiI3RlbXBsYXRlIGxpIikuaGFzKCIuZnVsbGNvbW1lbnQiKS5maW5kKCIuc2lnbmF0dXJlIik7CisgICAgLy8gdHJ5aW5nIHRvIHNwZWVkIHRoaW5ncyB1cCBhIGxpdHRsZSBiaXQKKyAgICB2YXIgZG9jQWxsU2lncyA9ICQoIiN0ZW1wbGF0ZSBsaVtmdWxsQ29tbWVudD15ZXNdIC5zaWduYXR1cmUiKTsKKworICAgIGZ1bmN0aW9uIGNvbW1lbnRUb2dnbGVGY3Qoc2lnbmF0dXJlKXsKKyAgICAgICAgdmFyIHBhcmVudCA9IHNpZ25hdHVyZS5wYXJlbnQoKTsKKyAgICAgICAgdmFyIHNob3J0Q29tbWVudCA9ICQoIi5zaG9ydGNvbW1lbnQiLCBwYXJlbnQpOworICAgICAgICB2YXIgZnVsbENvbW1lbnQgPSAkKCIuZnVsbGNvbW1lbnQiLCBwYXJlbnQpOworICAgICAgICB2YXIgdmlzID0gJCgiOnZpc2libGUiLCBmdWxsQ29tbWVudCk7CisgICAgICAgIHNpZ25hdHVyZS50b2dnbGVDbGFzcygiY2xvc2VkIikudG9nZ2xlQ2xhc3MoIm9wZW5lZCIpOworICAgICAgICBpZiAodmlzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHNob3J0Q29tbWVudC5zbGlkZURvd24oMTAwKTsKKyAgICAgICAgICAgIGZ1bGxDb21tZW50LnNsaWRlVXAoMTAwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNob3J0Q29tbWVudC5zbGlkZVVwKDEwMCk7CisgICAgICAgICAgICBmdWxsQ29tbWVudC5zbGlkZURvd24oMTAwKTsKKyAgICAgICAgfQorICAgIH07CisgICAgZG9jQWxsU2lncy5hZGRDbGFzcygiY2xvc2VkIik7CisgICAgZG9jQWxsU2lncy5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgY29tbWVudFRvZ2dsZUZjdCgkKHRoaXMpKTsKKyAgICB9KTsKKworICAgIC8qIExpbmVhciBzdXBlciB0eXBlcyBhbmQga25vd24gc3ViY2xhc3NlcyAqLworICAgIGZ1bmN0aW9uIHRvZ2dsZVNob3dDb250ZW50RmN0KGUpeworICAgICAgZS50b2dnbGVDbGFzcygib3BlbiIpOworICAgICAgdmFyIGNvbnRlbnQgPSAkKCIuaGlkZGVuQ29udGVudCIsIGUucGFyZW50KCkuZ2V0KDApKTsKKyAgICAgIGlmIChjb250ZW50LmlzKCc6dmlzaWJsZScpKSB7CisgICAgICAgIGNvbnRlbnQuc2xpZGVVcCgxMDApOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGNvbnRlbnQuc2xpZGVEb3duKDEwMCk7CisgICAgICB9CisgICAgfTsKKworICAgICQoIi50b2dnbGU6bm90KC5kaWFncmFtLWxpbmspIikuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICB0b2dnbGVTaG93Q29udGVudEZjdCgkKHRoaXMpKTsKKyAgICB9KTsKKworICAgIC8vIFNldCBwYXJlbnQgd2luZG93IHRpdGxlCisgICAgd2luZG93VGl0bGUoKTsKKworICAgIGlmICgkKCIjb3JkZXIgPiBvbCA+IGxpLmdyb3VwIikubGVuZ3RoID09IDEpIHsgb3JkZXJHcm91cCgpOyB9OworfSk7CisKK2Z1bmN0aW9uIG9yZGVyQWxwaGEoKSB7CisgICAgJCgiI29yZGVyID4gb2wgPiBsaS5hbHBoYSIpLnJlbW92ZUNsYXNzKCJvdXQiKS5hZGRDbGFzcygiaW4iKTsKKyAgICAkKCIjb3JkZXIgPiBvbCA+IGxpLmluaGVyaXQiKS5yZW1vdmVDbGFzcygiaW4iKS5hZGRDbGFzcygib3V0Iik7CisgICAgJCgiI29yZGVyID4gb2wgPiBsaS5ncm91cCIpLnJlbW92ZUNsYXNzKCJpbiIpLmFkZENsYXNzKCJvdXQiKTsKKyAgICAkKCIjdGVtcGxhdGUgPiBkaXYucGFyZW50IikuaGlkZSgpOworICAgICQoIiN0ZW1wbGF0ZSA+IGRpdi5jb252ZXJzaW9uIikuaGlkZSgpOworICAgICQoIiNtYnJzZWwgPiBkaXZbaWQ9YW5jZXN0b3JzXSIpLnNob3coKTsKKyAgICBmaWx0ZXIoKTsKK307CisKK2Z1bmN0aW9uIG9yZGVySW5oZXJpdCgpIHsKKyAgICAkKCIjb3JkZXIgPiBvbCA+IGxpLmluaGVyaXQiKS5yZW1vdmVDbGFzcygib3V0IikuYWRkQ2xhc3MoImluIik7CisgICAgJCgiI29yZGVyID4gb2wgPiBsaS5hbHBoYSIpLnJlbW92ZUNsYXNzKCJpbiIpLmFkZENsYXNzKCJvdXQiKTsKKyAgICAkKCIjb3JkZXIgPiBvbCA+IGxpLmdyb3VwIikucmVtb3ZlQ2xhc3MoImluIikuYWRkQ2xhc3MoIm91dCIpOworICAgICQoIiN0ZW1wbGF0ZSA+IGRpdi5wYXJlbnQiKS5zaG93KCk7CisgICAgJCgiI3RlbXBsYXRlID4gZGl2LmNvbnZlcnNpb24iKS5zaG93KCk7CisgICAgJCgiI21icnNlbCA+IGRpdltpZD1hbmNlc3RvcnNdIikuaGlkZSgpOworICAgIGZpbHRlcigpOworfTsKKworZnVuY3Rpb24gb3JkZXJHcm91cCgpIHsKKyAgICAkKCIjb3JkZXIgPiBvbCA+IGxpLmdyb3VwIikucmVtb3ZlQ2xhc3MoIm91dCIpLmFkZENsYXNzKCJpbiIpOworICAgICQoIiNvcmRlciA+IG9sID4gbGkuYWxwaGEiKS5yZW1vdmVDbGFzcygiaW4iKS5hZGRDbGFzcygib3V0Iik7CisgICAgJCgiI29yZGVyID4gb2wgPiBsaS5pbmhlcml0IikucmVtb3ZlQ2xhc3MoImluIikuYWRkQ2xhc3MoIm91dCIpOworICAgICQoIiN0ZW1wbGF0ZSA+IGRpdi5wYXJlbnQiKS5oaWRlKCk7CisgICAgJCgiI3RlbXBsYXRlID4gZGl2LmNvbnZlcnNpb24iKS5oaWRlKCk7CisgICAgJCgiI21icnNlbCA+IGRpdltpZD1hbmNlc3RvcnNdIikuc2hvdygpOworICAgIGZpbHRlcigpOworfTsKKworLyoqIFByZXBhcmVzIHRoZSBET00gZm9yIGluaGVyaXRhbmNlLWJhc2VkIGRpc3BsYXkuIFRvIGRvIHNvIGl0IHdpbGw6CisgICogIC0gaGlkZSBhbGwgc3RhdGljYWxseS1nZW5lcmF0ZWQgcGFyZW50cyBoZWFkaW5nczsKKyAgKiAgLSBjb3B5IGFsbCBtZW1iZXJzIGZyb20gdGhlIHZhbHVlIGFuZCB0eXBlIG1lbWJlcnMgbGlzdHMgKGZsYXQgbWVtYmVycykgdG8gY29ycmVzcG9uZGluZyBsaXN0cyBuZXN0ZWQgYmVsb3cgdGhlCisgICogICAgcGFyZW50IGhlYWRpbmdzIChpbmhlcml0YW5jZS1ncm91cGVkIG1lbWJlcnMpOworICAqICAtIGluaXRpYWxpc2VzIGEgY29udHJvbCB2YXJpYWJsZSB1c2VkIGJ5IHRoZSBmaWx0ZXIgbWV0aG9kIHRvIGNvbnRyb2wgd2hldGhlciBmaWx0ZXJpbmcgaGFwcGVucyBvbiBmbGF0IG1lbWJlcnMKKyAgKiAgICBvciBvbiBpbmhlcml0YW5jZS1ncm91cGVkIG1lbWJlcnMuICovCitmdW5jdGlvbiBpbml0SW5oZXJpdCgpIHsKKyAgICAvLyBpbmhlcml0UGFyZW50cyBpcyBhIG1hcCBmcm9tIGZ1bGx5LXF1YWxpZmllZCBuYW1lcyB0byB0aGUgRE9NIG5vZGUgb2YgcGFyZW50IGhlYWRpbmdzLgorICAgIHZhciBpbmhlcml0UGFyZW50cyA9IG5ldyBPYmplY3QoKTsKKyAgICB2YXIgZ3JvdXBQYXJlbnRzID0gbmV3IE9iamVjdCgpOworICAgICQoIiNpbmhlcml0ZWRNZW1iZXJzID4gZGl2LnBhcmVudCIpLmVhY2goZnVuY3Rpb24oKXsKKyAgICAgICAgaW5oZXJpdFBhcmVudHNbJCh0aGlzKS5hdHRyKCJuYW1lIildID0gJCh0aGlzKTsKKyAgICB9KTsKKyAgICAkKCIjaW5oZXJpdGVkTWVtYmVycyA+IGRpdi5jb252ZXJzaW9uIikuZWFjaChmdW5jdGlvbigpeworICAgICAgICBpbmhlcml0UGFyZW50c1skKHRoaXMpLmF0dHIoIm5hbWUiKV0gPSAkKHRoaXMpOworICAgIH0pOworICAgICQoIiNncm91cGVkTWVtYmVycyA+IGRpdi5ncm91cCIpLmVhY2goZnVuY3Rpb24oKXsKKyAgICAgICAgZ3JvdXBQYXJlbnRzWyQodGhpcykuYXR0cigibmFtZSIpXSA9ICQodGhpcyk7CisgICAgfSk7CisKKyAgICAkKCIjdHlwZXMgPiBvbCA+IGxpIikuZWFjaChmdW5jdGlvbigpeworICAgICAgICB2YXIgbWJyID0gJCh0aGlzKTsKKyAgICAgICAgdGhpcy5tYnJUZXh0ID0gbWJyLmZpbmQoIj4gLmZ1bGxjb21tZW50IC5jbXQiKS50ZXh0KCk7CisgICAgICAgIHZhciBxdWFsTmFtZSA9IG1ici5hdHRyKCJuYW1lIik7CisgICAgICAgIHZhciBvd25lciA9IHF1YWxOYW1lLnNsaWNlKDAsIHF1YWxOYW1lLmluZGV4T2YoIiMiKSk7CisgICAgICAgIHZhciBuYW1lID0gcXVhbE5hbWUuc2xpY2UocXVhbE5hbWUuaW5kZXhPZigiIyIpICsgMSk7CisgICAgICAgIHZhciBpbmhlcml0UGFyZW50ID0gaW5oZXJpdFBhcmVudHNbb3duZXJdOworICAgICAgICBpZiAoaW5oZXJpdFBhcmVudCAhPSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHZhciB0eXBlcyA9ICQoIj4gLnR5cGVzID4gb2wiLCBpbmhlcml0UGFyZW50KTsKKyAgICAgICAgICAgIGlmICh0eXBlcy5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgICAgIGluaGVyaXRQYXJlbnQuYXBwZW5kKCI8ZGl2IGNsYXNzPSd0eXBlcyBtZW1iZXJzJz48aDM+VHlwZSBNZW1iZXJzPC9oMz48b2w+PC9vbD48L2Rpdj4iKTsKKyAgICAgICAgICAgICAgICB0eXBlcyA9ICQoIj4gLnR5cGVzID4gb2wiLCBpbmhlcml0UGFyZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBjbG9uZSA9IG1ici5jbG9uZSgpOworICAgICAgICAgICAgY2xvbmVbMF0ubWJyVGV4dCA9IHRoaXMubWJyVGV4dDsKKyAgICAgICAgICAgIHR5cGVzLmFwcGVuZChjbG9uZSk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGdyb3VwID0gbWJyLmF0dHIoImdyb3VwIikKKyAgICAgICAgdmFyIGdyb3VwUGFyZW50ID0gZ3JvdXBQYXJlbnRzW2dyb3VwXTsKKyAgICAgICAgaWYgKGdyb3VwUGFyZW50ICE9IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgdmFyIHR5cGVzID0gJCgiPiAudHlwZXMgPiBvbCIsIGdyb3VwUGFyZW50KTsKKyAgICAgICAgICAgIGlmICh0eXBlcy5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgICAgIGdyb3VwUGFyZW50LmFwcGVuZCgiPGRpdiBjbGFzcz0ndHlwZXMgbWVtYmVycyc+PG9sPjwvb2w+PC9kaXY+Iik7CisgICAgICAgICAgICAgICAgdHlwZXMgPSAkKCI+IC50eXBlcyA+IG9sIiwgZ3JvdXBQYXJlbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGNsb25lID0gbWJyLmNsb25lKCk7CisgICAgICAgICAgICBjbG9uZVswXS5tYnJUZXh0ID0gdGhpcy5tYnJUZXh0OworICAgICAgICAgICAgdHlwZXMuYXBwZW5kKGNsb25lKTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgJCgiI3ZhbHVlcyA+IG9sID4gbGkiKS5lYWNoKGZ1bmN0aW9uKCl7CisgICAgICAgIHZhciBtYnIgPSAkKHRoaXMpOworICAgICAgICB0aGlzLm1iclRleHQgPSBtYnIuZmluZCgiPiAuZnVsbGNvbW1lbnQgLmNtdCIpLnRleHQoKTsKKyAgICAgICAgdmFyIHF1YWxOYW1lID0gbWJyLmF0dHIoIm5hbWUiKTsKKyAgICAgICAgdmFyIG93bmVyID0gcXVhbE5hbWUuc2xpY2UoMCwgcXVhbE5hbWUuaW5kZXhPZigiIyIpKTsKKyAgICAgICAgdmFyIG5hbWUgPSBxdWFsTmFtZS5zbGljZShxdWFsTmFtZS5pbmRleE9mKCIjIikgKyAxKTsKKyAgICAgICAgdmFyIGluaGVyaXRQYXJlbnQgPSBpbmhlcml0UGFyZW50c1tvd25lcl07CisgICAgICAgIGlmIChpbmhlcml0UGFyZW50ICE9IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgdmFyIHZhbHVlcyA9ICQoIj4gLnZhbHVlcyA+IG9sIiwgaW5oZXJpdFBhcmVudCk7CisgICAgICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICAgICAgaW5oZXJpdFBhcmVudC5hcHBlbmQoIjxkaXYgY2xhc3M9J3ZhbHVlcyBtZW1iZXJzJz48aDM+VmFsdWUgTWVtYmVyczwvaDM+PG9sPjwvb2w+PC9kaXY+Iik7CisgICAgICAgICAgICAgICAgdmFsdWVzID0gJCgiPiAudmFsdWVzID4gb2wiLCBpbmhlcml0UGFyZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBjbG9uZSA9IG1ici5jbG9uZSgpOworICAgICAgICAgICAgY2xvbmVbMF0ubWJyVGV4dCA9IHRoaXMubWJyVGV4dDsKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoY2xvbmUpOworICAgICAgICB9CisgICAgICAgIHZhciBncm91cCA9IG1ici5hdHRyKCJncm91cCIpCisgICAgICAgIHZhciBncm91cFBhcmVudCA9IGdyb3VwUGFyZW50c1tncm91cF07CisgICAgICAgIGlmIChncm91cFBhcmVudCAhPSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHZhciB2YWx1ZXMgPSAkKCI+IC52YWx1ZXMgPiBvbCIsIGdyb3VwUGFyZW50KTsKKyAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgICAgICBncm91cFBhcmVudC5hcHBlbmQoIjxkaXYgY2xhc3M9J3ZhbHVlcyBtZW1iZXJzJz48b2w+PC9vbD48L2Rpdj4iKTsKKyAgICAgICAgICAgICAgICB2YWx1ZXMgPSAkKCI+IC52YWx1ZXMgPiBvbCIsIGdyb3VwUGFyZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBjbG9uZSA9IG1ici5jbG9uZSgpOworICAgICAgICAgICAgY2xvbmVbMF0ubWJyVGV4dCA9IHRoaXMubWJyVGV4dDsKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoY2xvbmUpOworICAgICAgICB9CisgICAgfSk7CisgICAgJCgiI2luaGVyaXRlZE1lbWJlcnMgPiBkaXYucGFyZW50IikuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCQoIj4gZGl2Lm1lbWJlcnMiLCB0aGlzKS5sZW5ndGggPT0gMCkgeyAkKHRoaXMpLnJlbW92ZSgpOyB9OworICAgIH0pOworICAgICQoIiNpbmhlcml0ZWRNZW1iZXJzID4gZGl2LmNvbnZlcnNpb24iKS5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoJCgiPiBkaXYubWVtYmVycyIsIHRoaXMpLmxlbmd0aCA9PSAwKSB7ICQodGhpcykucmVtb3ZlKCk7IH07CisgICAgfSk7CisgICAgJCgiI2dyb3VwZWRNZW1iZXJzID4gZGl2Lmdyb3VwIikuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCQoIj4gZGl2Lm1lbWJlcnMiLCB0aGlzKS5sZW5ndGggPT0gMCkgeyAkKHRoaXMpLnJlbW92ZSgpOyB9OworICAgIH0pOworfTsKKworLyogZmlsdGVyIHVzZWQgdG8gdGFrZSBib29sZWFuIHNjcm9sbFRvTWVtYmVyICovCitmdW5jdGlvbiBmaWx0ZXIoKSB7CisgICAgdmFyIHF1ZXJ5ID0gJC50cmltKCQoIiN0ZXh0ZmlsdGVyIGlucHV0IikudmFsKCkpLnRvTG93ZXJDYXNlKCk7CisgICAgcXVlcnkgPSBxdWVyeS5yZXBsYWNlKC9bLVtcXXt9KCkqKz8uLFxcXiR8I10vZywgIlxcJCYiKS5yZXBsYWNlKC9ccysvZywgInwiKTsKKyAgICB2YXIgcXVlcnlSZWdFeHAgPSBuZXcgUmVnRXhwKHF1ZXJ5LCAiaSIpOworICAgIHZhciBwcml2YXRlTWVtYmVyc0hpZGRlbiA9ICQoIiN2aXNibCA+IG9sID4gbGkucHVibGljIikuaGFzQ2xhc3MoImluIik7CisgICAgdmFyIG9yZGVyaW5nQWxwaGFiZXRpYyA9ICQoIiNvcmRlciA+IG9sID4gbGkuYWxwaGEiKS5oYXNDbGFzcygiaW4iKTsKKyAgICB2YXIgb3JkZXJpbmdJbmhlcml0YW5jZSA9ICQoIiNvcmRlciA+IG9sID4gbGkuaW5oZXJpdCIpLmhhc0NsYXNzKCJpbiIpOworICAgIHZhciBvcmRlcmluZ0dyb3VwcyA9ICQoIiNvcmRlciA+IG9sID4gbGkuZ3JvdXAiKS5oYXNDbGFzcygiaW4iKTsKKyAgICB2YXIgaGlkZGVuU3VwZXJjbGFzc0VsZW1lbnRzTGluZWFyaXphdGlvbiA9IG9yZGVyaW5nSW5oZXJpdGFuY2UgPyAkKCIjbGluZWFyaXphdGlvbiA+IGxpOmd0KDApIikgOiAkKCIjbGluZWFyaXphdGlvbiA+IGxpLm91dCIpOworICAgIHZhciBoaWRkZW5TdXBlcmNsYXNzZXNMaW5lYXJpemF0aW9uID0gaGlkZGVuU3VwZXJjbGFzc0VsZW1lbnRzTGluZWFyaXphdGlvbi5tYXAoZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gJCh0aGlzKS5hdHRyKCJuYW1lIik7CisgICAgfSkuZ2V0KCk7CisgICAgdmFyIGhpZGRlblN1cGVyY2xhc3NFbGVtZW50c0ltcGxpY2l0cyA9IG9yZGVyaW5nSW5oZXJpdGFuY2UgPyAkKCIjaW1wbGljaXRzID4gbGkiKSA6ICQoIiNpbXBsaWNpdHMgPiBsaS5vdXQiKTsKKyAgICB2YXIgaGlkZGVuU3VwZXJjbGFzc2VzSW1wbGljaXRzID0gaGlkZGVuU3VwZXJjbGFzc0VsZW1lbnRzSW1wbGljaXRzLm1hcChmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiAkKHRoaXMpLmF0dHIoIm5hbWUiKTsKKyAgICB9KS5nZXQoKTsKKworICAgIHZhciBoaWRlSW5oZXJpdGVkTWVtYmVyczsKKworICAgIGlmIChvcmRlcmluZ0FscGhhYmV0aWMpIHsKKyAgICAgICQoIiNhbGxNZW1iZXJzIikuc2hvdygpOworICAgICAgJCgiI2luaGVyaXRlZE1lbWJlcnMiKS5oaWRlKCk7CisgICAgICAkKCIjZ3JvdXBlZE1lbWJlcnMiKS5oaWRlKCk7CisgICAgICBoaWRlSW5oZXJpdGVkTWVtYmVycyA9IHRydWU7CisgICAgICAkKCIjYWxsTWVtYmVycyA+IC5tZW1iZXJzIikuZWFjaChmaWx0ZXJGdW5jKTsKKyAgICB9IGVsc2UgaWYgKG9yZGVyaW5nR3JvdXBzKSB7CisgICAgICAkKCIjZ3JvdXBlZE1lbWJlcnMiKS5zaG93KCk7CisgICAgICAkKCIjaW5oZXJpdGVkTWVtYmVycyIpLmhpZGUoKTsKKyAgICAgICQoIiNhbGxNZW1iZXJzIikuaGlkZSgpOworICAgICAgaGlkZUluaGVyaXRlZE1lbWJlcnMgPSB0cnVlOworICAgICAgJCgiI2dyb3VwZWRNZW1iZXJzICA+IC5ncm91cCA+IC5tZW1iZXJzIikuZWFjaChmaWx0ZXJGdW5jKTsKKyAgICAgICQoIiNncm91cGVkTWVtYmVycyAgPiBkaXYuZ3JvdXAiKS5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAkKHRoaXMpLnNob3coKTsKKyAgICAgICAgaWYgKCQoIj4gZGl2Lm1lbWJlcnMiLCB0aGlzKS5ub3QoIjpoaWRkZW4iKS5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgJCh0aGlzKS5oaWRlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkKHRoaXMpLnNob3coKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfSBlbHNlIGlmIChvcmRlcmluZ0luaGVyaXRhbmNlKSB7CisgICAgICAkKCIjaW5oZXJpdGVkTWVtYmVycyIpLnNob3coKTsKKyAgICAgICQoIiNncm91cGVkTWVtYmVycyIpLmhpZGUoKTsKKyAgICAgICQoIiNhbGxNZW1iZXJzIikuaGlkZSgpOworICAgICAgaGlkZUluaGVyaXRlZE1lbWJlcnMgPSBmYWxzZTsKKyAgICAgICQoIiNpbmhlcml0ZWRNZW1iZXJzID4gLnBhcmVudCA+IC5tZW1iZXJzIikuZWFjaChmaWx0ZXJGdW5jKTsKKyAgICAgICQoIiNpbmhlcml0ZWRNZW1iZXJzID4gLmNvbnZlcnNpb24gPiAubWVtYmVycyIpLmVhY2goZmlsdGVyRnVuYyk7CisgICAgfQorCisKKyAgICBmdW5jdGlvbiBmaWx0ZXJGdW5jKCkgeworICAgICAgdmFyIG1lbWJlcnNWaXNpYmxlID0gZmFsc2U7CisgICAgICB2YXIgbWVtYmVycyA9ICQodGhpcyk7CisgICAgICBtZW1iZXJzLmZpbmQoIj4gb2wgPiBsaSIpLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBtYnIgPSAkKHRoaXMpOworICAgICAgICBpZiAocHJpdmF0ZU1lbWJlcnNIaWRkZW4gJiYgbWJyLmF0dHIoInZpc2JsIikgPT0gInBydCIpIHsKKyAgICAgICAgICBtYnIuaGlkZSgpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgbmFtZSA9IG1ici5hdHRyKCJuYW1lIik7CisgICAgICAgIC8vIE93bmVyIGZpbHRlcmluZyBtdXN0IG5vdCBoYXBwZW4gaW4gImluaGVyaXRlZCBmcm9tIiBtZW1iZXIgbGlzdHMKKyAgICAgICAgaWYgKGhpZGVJbmhlcml0ZWRNZW1iZXJzKSB7CisgICAgICAgICAgdmFyIG93bmVySW5kZXggPSBuYW1lLmluZGV4T2YoIiMiKTsKKyAgICAgICAgICBpZiAob3duZXJJbmRleCA8IDApIHsKKyAgICAgICAgICAgIG93bmVySW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCIuIik7CisgICAgICAgICAgfQorICAgICAgICAgIHZhciBvd25lciA9IG5hbWUuc2xpY2UoMCwgb3duZXJJbmRleCk7CisgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoaWRkZW5TdXBlcmNsYXNzZXNMaW5lYXJpemF0aW9uLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaGlkZGVuU3VwZXJjbGFzc2VzTGluZWFyaXphdGlvbltpXSA9PSBvd25lcikgeworICAgICAgICAgICAgICBtYnIuaGlkZSgpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgfTsKKyAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhpZGRlblN1cGVyY2xhc3Nlc0ltcGxpY2l0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGhpZGRlblN1cGVyY2xhc3Nlc0ltcGxpY2l0c1tpXSA9PSBvd25lcikgeworICAgICAgICAgICAgICBtYnIuaGlkZSgpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAocXVlcnkgJiYgIShxdWVyeVJlZ0V4cC50ZXN0KG5hbWUpIHx8IHF1ZXJ5UmVnRXhwLnRlc3QodGhpcy5tYnJUZXh0KSkpIHsKKyAgICAgICAgICBtYnIuaGlkZSgpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtYnIuc2hvdygpOworICAgICAgICBtZW1iZXJzVmlzaWJsZSA9IHRydWU7CisgICAgICB9KTsKKworICAgICAgaWYgKG1lbWJlcnNWaXNpYmxlKQorICAgICAgICBtZW1iZXJzLnNob3coKTsKKyAgICAgIGVsc2UKKyAgICAgICAgbWVtYmVycy5oaWRlKCk7CisgICAgfTsKKworICAgIHJldHVybiBmYWxzZTsKK307CisKK2Z1bmN0aW9uIHdpbmRvd1RpdGxlKCkKK3sKKyAgICB0cnkgeworICAgICAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9ZG9jdW1lbnQudGl0bGU7CisgICAgfQorICAgIGNhdGNoKGUpIHsKKyAgICAgIC8vIENocm9tZSBkb2Vzbid0IGFsbG93IHNldHRpbmdzIHRoZSBwYXJlbnQncyB0aXRsZSB3aGVuCisgICAgICAvLyB1c2VkIG9uIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS4KKyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvdG9vbHMudG9vbHRpcC5qcyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3Rvb2xzLnRvb2x0aXAuanMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGFmMzRlYwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3Rvb2xzLnRvb2x0aXAuanMKQEAgLTAsMCArMSwxNCBAQAorLyoKKyAqIHRvb2xzLnRvb2x0aXAgMS4xLjMgLSBUb29sdGlwcyBkb25lIHJpZ2h0LgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgVGVybyBQaWlyYWluZW4KKyAqIGh0dHA6Ly9mbG93cGxheWVyLm9yZy90b29scy90b29sdGlwLmh0bWwKKyAqCisgKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIE1JVCBhbmQgR1BMIDIrIGxpY2Vuc2VzCisgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzCisgKgorICogTGF1bmNoICA6IE5vdmVtYmVyIDIwMDgKKyAqIERhdGU6ICR7ZGF0ZX0KKyAqIFJldmlzaW9uOiAke3JldmlzaW9ufSAKKyAqLworKGZ1bmN0aW9uKGMpe3ZhciBkPVtdO2MudG9vbHM9Yy50b29sc3x8e307Yy50b29scy50b29sdGlwPXt2ZXJzaW9uOiIxLjEuMyIsY29uZjp7ZWZmZWN0OiJ0b2dnbGUiLGZhZGVPdXRTcGVlZDoiZmFzdCIsdGlwOm51bGwscHJlZGVsYXk6MCxkZWxheTozMCxvcGFjaXR5OjEsbGF6eTp1bmRlZmluZWQscG9zaXRpb246WyJ0b3AiLCJjZW50ZXIiXSxvZmZzZXQ6WzAsMF0sY2FuY2VsRGVmYXVsdDp0cnVlLHJlbGF0aXZlOmZhbHNlLG9uZUluc3RhbmNlOnRydWUsZXZlbnRzOntkZWY6Im1vdXNlb3Zlcixtb3VzZW91dCIsaW5wdXQ6ImZvY3VzLGJsdXIiLHdpZGdldDoiZm9jdXMgbW91c2VvdmVyLGJsdXIgbW91c2VvdXQiLHRvb2x0aXA6Im1vdXNlb3Zlcixtb3VzZW91dCJ9LGFwaTpmYWxzZX0sYWRkRWZmZWN0OmZ1bmN0aW9uKGUsZyxmKXtiW2VdPVtnLGZdfX07dmFyIGI9e3RvZ2dsZTpbZnVuY3Rpb24oZSl7dmFyIGY9dGhpcy5nZXRDb25mKCksZz10aGlzLmdldFRpcCgpLGg9Zi5vcGFjaXR5O2lmKGg8MSl7Zy5jc3Moe29wYWNpdHk6aH0pfWcuc2hvdygpO2UuY2FsbCgpfSxmdW5jdGlvbihlKXt0aGlzLmdldFRpcCgpLmhpZGUoKTtlLmNhbGwoKX1dLGZhZGU6W2Z1bmN0aW9uKGUpe3RoaXMuZ2V0VGlwKCkuZmFkZUluKHRoaXMuZ2V0Q29uZigpLmZhZGVJblNwZWVkLGUpfSxmdW5jdGlvbihlKXt0aGlzLmdldFRpcCgpLmZhZGVPdXQodGhpcy5nZXRDb25mKCkuZmFkZU91dFNwZWVkLGUpfV19O2Z1bmN0aW9uIGEoZixnKXt2YXIgcD10aGlzLGs9Yyh0aGlzKTtmLmRhdGEoInRvb2x0aXAiLHApO3ZhciBsPWYubmV4dCgpO2lmKGcudGlwKXtsPWMoZy50aXApO2lmKGwubGVuZ3RoPjEpe2w9Zi5uZXh0QWxsKGcudGlwKS5lcSgwKTtpZighbC5sZW5ndGgpe2w9Zi5wYXJlbnQoKS5uZXh0QWxsKGcudGlwKS5lcSgwKX19fWZ1bmN0aW9uIG8odSl7dmFyIHQ9Zy5yZWxhdGl2ZT9mLnBvc2l0aW9uKCkudG9wOmYub2Zmc2V0KCkudG9wLHM9Zy5yZWxhdGl2ZT9mLnBvc2l0aW9uKCkubGVmdDpmLm9mZnNldCgpLmxlZnQsdj1nLnBvc2l0aW9uWzBdO3QtPWwub3V0ZXJIZWlnaHQoKS1nLm9mZnNldFswXTtzKz1mLm91dGVyV2lkdGgoKStnLm9mZnNldFsxXTt2YXIgcT1sLm91dGVySGVpZ2h0KCkrZi5vdXRlckhlaWdodCgpO2lmKHY9PSJjZW50ZXIiKXt0Kz1xLzJ9aWYodj09ImJvdHRvbSIpe3QrPXF9dj1nLnBvc2l0aW9uWzFdO3ZhciByPWwub3V0ZXJXaWR0aCgpK2Yub3V0ZXJXaWR0aCgpO2lmKHY9PSJjZW50ZXIiKXtzLT1yLzJ9aWYodj09ImxlZnQiKXtzLT1yfXJldHVybnt0b3A6dCxsZWZ0OnN9fXZhciBpPWYuaXMoIjppbnB1dCIpLGU9aSYmZi5pcygiOmNoZWNrYm94LCA6cmFkaW8sIHNlbGVjdCwgOmJ1dHRvbiIpLGg9Zi5hdHRyKCJ0eXBlIiksbj1nLmV2ZW50c1toXXx8Zy5ldmVudHNbaT8oZT8id2lkZ2V0IjoiaW5wdXQiKToiZGVmIl07bj1uLnNwbGl0KC8sXHMqLyk7aWYobi5sZW5ndGghPTIpe3Rocm93IlRvb2x0aXA6IGJhZCBldmVudHMgY29uZmlndXJhdGlvbiBmb3IgIitofWYuYmluZChuWzBdLGZ1bmN0aW9uKHIpe2lmKGcub25lSW5zdGFuY2Upe2MuZWFjaChkLGZ1bmN0aW9uKCl7dGhpcy5oaWRlKCl9KX12YXIgcT1sLmRhdGEoInRyaWdnZXIiKTtpZihxJiZxWzBdIT10aGlzKXtsLmhpZGUoKS5zdG9wKHRydWUsdHJ1ZSl9ci50YXJnZXQ9dGhpcztwLnNob3cocik7bj1nLmV2ZW50cy50b29sdGlwLnNwbGl0KC8sXHMqLyk7bC5iaW5kKG5bMF0sZnVuY3Rpb24oKXtwLnNob3cocil9KTtpZihuWzFdKXtsLmJpbmQoblsxXSxmdW5jdGlvbigpe3AuaGlkZShyKX0pfX0pO2YuYmluZChuWzFdLGZ1bmN0aW9uKHEpe3AuaGlkZShxKX0pO2lmKCFjLmJyb3dzZXIubXNpZSYmIWkmJiFnLnByZWRlbGF5KXtmLm1vdXNlbW92ZShmdW5jdGlvbigpe2lmKCFwLmlzU2hvd24oKSl7Zi50cmlnZ2VySGFuZGxlcigibW91c2VvdmVyIil9fSl9aWYoZy5vcGFjaXR5PDEpe2wuY3NzKCJvcGFjaXR5IixnLm9wYWNpdHkpfXZhciBtPTAsaj1mLmF0dHIoInRpdGxlIik7aWYoaiYmZy5jYW5jZWxEZWZhdWx0KXtmLnJlbW92ZUF0dHIoInRpdGxlIik7Zi5kYXRhKCJ0aXRsZSIsail9Yy5leHRlbmQocCx7c2hvdzpmdW5jdGlvbihyKXtpZihyKXtmPWMoci50YXJnZXQpfWNsZWFyVGltZW91dChsLmRhdGEoInRpbWVyIikpO2lmKGwuaXMoIjphbmltYXRlZCIpfHxsLmlzKCI6dmlzaWJsZSIpKXtyZXR1cm4gcH1mdW5jdGlvbiBxKCl7bC5kYXRhKCJ0cmlnZ2VyIixmKTt2YXIgdD1vKHIpO2lmKGcudGlwJiZqKXtsLmh0bWwoZi5kYXRhKCJ0aXRsZSIpKX1yPXJ8fGMuRXZlbnQoKTtyLnR5cGU9Im9uQmVmb3JlU2hvdyI7ay50cmlnZ2VyKHIsW3RdKTtpZihyLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtyZXR1cm4gcH10PW8ocik7bC5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOnQudG9wLGxlZnQ6dC5sZWZ0fSk7dmFyIHM9YltnLmVmZmVjdF07aWYoIXMpe3Rocm93J05vbmV4aXN0ZW50IGVmZmVjdCAiJytnLmVmZmVjdCsnIid9c1swXS5jYWxsKHAsZnVuY3Rpb24oKXtyLnR5cGU9Im9uU2hvdyI7ay50cmlnZ2VyKHIpfSl9aWYoZy5wcmVkZWxheSl7Y2xlYXJUaW1lb3V0KG0pO209c2V0VGltZW91dChxLGcucHJlZGVsYXkpfWVsc2V7cSgpfXJldHVybiBwfSxoaWRlOmZ1bmN0aW9uKHIpe2NsZWFyVGltZW91dChsLmRhdGEoInRpbWVyIikpO2NsZWFyVGltZW91dChtKTtpZighbC5pcygiOnZpc2libGUiKSl7cmV0dXJufWZ1bmN0aW9uIHEoKXtyPXJ8fGMuRXZlbnQoKTtyLnR5cGU9Im9uQmVmb3JlSGlkZSI7ay50cmlnZ2VyKHIpO2lmKHIuaXNEZWZhdWx0UHJldmVudGVkKCkpe3JldHVybn1iW2cuZWZmZWN0XVsxXS5jYWxsKHAsZnVuY3Rpb24oKXtyLnR5cGU9Im9uSGlkZSI7ay50cmlnZ2VyKHIpfSl9aWYoZy5kZWxheSYmcil7bC5kYXRhKCJ0aW1lciIsc2V0VGltZW91dChxLGcuZGVsYXkpKX1lbHNle3EoKX1yZXR1cm4gcH0saXNTaG93bjpmdW5jdGlvbigpe3JldHVybiBsLmlzKCI6dmlzaWJsZSwgOmFuaW1hdGVkIil9LGdldENvbmY6ZnVuY3Rpb24oKXtyZXR1cm4gZ30sZ2V0VGlwOmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGdldFRyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sYmluZDpmdW5jdGlvbihxLHIpe2suYmluZChxLHIpO3JldHVybiBwfSxvbkhpZGU6ZnVuY3Rpb24ocSl7cmV0dXJuIHRoaXMuYmluZCgib25IaWRlIixxKX0sb25CZWZvcmVTaG93OmZ1bmN0aW9uKHEpe3JldHVybiB0aGlzLmJpbmQoIm9uQmVmb3JlU2hvdyIscSl9LG9uU2hvdzpmdW5jdGlvbihxKXtyZXR1cm4gdGhpcy5iaW5kKCJvblNob3ciLHEpfSxvbkJlZm9yZUhpZGU6ZnVuY3Rpb24ocSl7cmV0dXJuIHRoaXMuYmluZCgib25CZWZvcmVIaWRlIixxKX0sdW5iaW5kOmZ1bmN0aW9uKHEpe2sudW5iaW5kKHEpO3JldHVybiBwfX0pO2MuZWFjaChnLGZ1bmN0aW9uKHEscil7aWYoYy5pc0Z1bmN0aW9uKHIpKXtwLmJpbmQocSxyKX19KX1jLnByb3RvdHlwZS50b29sdGlwPWZ1bmN0aW9uKGUpe3ZhciBmPXRoaXMuZXEodHlwZW9mIGU9PSJudW1iZXIiP2U6MCkuZGF0YSgidG9vbHRpcCIpO2lmKGYpe3JldHVybiBmfXZhciBnPWMuZXh0ZW5kKHRydWUse30sYy50b29scy50b29sdGlwLmNvbmYpO2lmKGMuaXNGdW5jdGlvbihlKSl7ZT17b25CZWZvcmVTaG93OmV9fWVsc2V7aWYodHlwZW9mIGU9PSJzdHJpbmciKXtlPXt0aXA6ZX19fWU9Yy5leHRlbmQodHJ1ZSxnLGUpO2lmKHR5cGVvZiBlLnBvc2l0aW9uPT0ic3RyaW5nIil7ZS5wb3NpdGlvbj1lLnBvc2l0aW9uLnNwbGl0KC8sP1xzLyl9aWYoZS5sYXp5IT09ZmFsc2UmJihlLmxhenk9PT10cnVlfHx0aGlzLmxlbmd0aD4yMCkpe3RoaXMub25lKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGgpe2Y9bmV3IGEoYyh0aGlzKSxlKTtmLnNob3coaCk7ZC5wdXNoKGYpfSl9ZWxzZXt0aGlzLmVhY2goZnVuY3Rpb24oKXtmPW5ldyBhKGModGhpcyksZSk7ZC5wdXNoKGYpfSl9cmV0dXJuIGUuYXBpP2Y6dGhpc319KShqUXVlcnkpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3RyYWl0LnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3RyYWl0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYjk2MWEyCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvdHJhaXQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3RyYWl0X2JpZy5wbmcgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi90cmFpdF9iaWcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYyNWQ5MjUKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi90cmFpdF9iaWcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3RyYWl0X2RpYWdyYW0ucG5nIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvdHJhaXRfZGlhZ3JhbS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODg5ODMyNQotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3RyYWl0X2RpYWdyYW0ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3RyYWl0X3RvX29iamVjdF9iaWcucG5nIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvdHJhaXRfdG9fb2JqZWN0X2JpZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDBjZDdmZAotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3RyYWl0X3RvX29iamVjdF9iaWcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3R5cGUucG5nIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvdHlwZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmM2ZTFmZQotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3R5cGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3R5cGVfYmlnLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3R5cGVfYmlnLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNGM4Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvdHlwZV9iaWcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3R5cGVfZGlhZ3JhbS5wbmcgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi90eXBlX2RpYWdyYW0ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ4MTUyNTIKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi90eXBlX2RpYWdyYW0ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3R5cGVfdG9fb2JqZWN0X2JpZy5wbmcgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi90eXBlX3RvX29iamVjdF9iaWcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVmMjYxNWIKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi90eXBlX3RvX29iamVjdF9iaWcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3R5cGViZy5naWYgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi90eXBlYmcuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJmY2M3N2IKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL2xpYi90eXBlYmcuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3Vuc2VsZWN0ZWQucG5nIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvdW5zZWxlY3RlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDVhYzYzOQotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3Vuc2VsZWN0ZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3ZhbHVlbWVtYmVyc2JnLmdpZiBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvbGliL3ZhbHVlbWVtYmVyc2JnLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yYTk0OTMxCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9saWIvdmFsdWVtZW1iZXJzYmcuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3Mvb3JnL2FwYWNoZS9hdGxhcy9oaXZlL2JyaWRnZS9IaXZlTWV0YVN0b3JlQnJpZGdlLmh0bWwgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9icmlkZ2UvSGl2ZU1ldGFTdG9yZUJyaWRnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg4ZThkNTkKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9icmlkZ2UvSGl2ZU1ldGFTdG9yZUJyaWRnZS5odG1sCkBAIC0wLDAgKzEsNTY4IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgIDx0aXRsZT5IaXZlTWV0YVN0b3JlQnJpZGdlIC0gQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNS1pbmN1YmF0aW5nIEFQSSAtIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UuSGl2ZU1ldGFTdG9yZUJyaWRnZTwvdGl0bGU+CisgICAgICAgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkhpdmVNZXRhU3RvcmVCcmlkZ2UgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IC0gaW5jdWJhdGluZyBBUEkgLSBvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UiIC8+CisgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9IkhpdmVNZXRhU3RvcmVCcmlkZ2UgQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNSBpbmN1YmF0aW5nIEFQSSBvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UiIC8+CisgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIC8+CisgICAgICAgICAgCisgICAgICA8bGluayBocmVmPSIuLi8uLi8uLi8uLi8uLi9saWIvdGVtcGxhdGUuY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgorICAgICAgPGxpbmsgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbGliL2RpYWdyYW1zLmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgaWQ9ImRpYWdyYW1zLWNzcyIgLz4KKyAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgIGlmKHRvcCA9PT0gc2VsZikgeworICAgICAgICAgICAgdmFyIHVybCA9ICcuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sJzsKKyAgICAgICAgICAgIHZhciBoYXNoID0gJ29yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UuSGl2ZU1ldGFTdG9yZUJyaWRnZSc7CisgICAgICAgICAgICB2YXIgYW5jaG9yID0gd2luZG93LmxvY2F0aW9uLmhhc2g7CisgICAgICAgICAgICB2YXIgYW5jaG9yX29wdCA9ICcnOworICAgICAgICAgICAgaWYgKGFuY2hvci5sZW5ndGggPj0gMSkKKyAgICAgICAgICAgICAgYW5jaG9yX29wdCA9ICdAJyArIGFuY2hvci5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybCArICcjJyArIGhhc2ggKyBhbmNob3Jfb3B0OworICAgICAgICAgfQorICAgCSAgPC9zY3JpcHQ+CisgICAgCisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHkgY2xhc3M9InR5cGUiPgorICAgICAgPGRpdiBpZD0iZGVmaW5pdGlvbiI+CisgICAgICAgIDxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvY2xhc3NfYmlnLnBuZyIgLz4KKyAgICAgICAgPHAgaWQ9Im93bmVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZyI+b3JnPC9hPi48YSBocmVmPSIuLi8uLi8uLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUiPmFwYWNoZTwvYT4uPGEgaHJlZj0iLi4vLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzIj5hdGxhczwvYT4uPGEgaHJlZj0iLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUiPmhpdmU8L2E+LjxhIGhyZWY9InBhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZSI+YnJpZGdlPC9hPjwvcD4KKyAgICAgICAgPGgxPkhpdmVNZXRhU3RvcmVCcmlkZ2U8L2gxPgorICAgICAgPC9kaXY+CisKKyAgICAgIDxoNCBpZD0ic2lnbmF0dXJlIiBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5jbGFzczwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+SGl2ZU1ldGFTdG9yZUJyaWRnZTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij4gZXh0ZW5kcyA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnlSZWYiPkFueVJlZjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgICAgICAgPGRpdiBpZD0iY29tbWVudCIgY2xhc3M9ImZ1bGxjb21tZW50dG9wIj48ZGl2IGNsYXNzPSJ0b2dnbGVDb250YWluZXIgYmxvY2siPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0b2dnbGUiPkxpbmVhciBTdXBlcnR5cGVzPC9zcGFuPgorICAgICAgICAgIDxkaXYgY2xhc3M9InN1cGVyVHlwZXMgaGlkZGVuQ29udGVudCI+PHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+LCA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnkiPkFueTwvc3Bhbj48L2Rpdj4KKyAgICAgICAgPC9kaXY+PC9kaXY+CisgICAgICAgIAorCisgICAgICA8ZGl2IGlkPSJtYnJzZWwiPgorICAgICAgICA8ZGl2IGlkPSJ0ZXh0ZmlsdGVyIj48c3BhbiBjbGFzcz0icHJlIj48L3NwYW4+PHNwYW4gY2xhc3M9ImlucHV0Ij48aW5wdXQgaWQ9Im1icnNlbC1pbnB1dCIgdHlwZT0idGV4dCIgYWNjZXNza2V5PSIvIiAvPjwvc3Bhbj48c3BhbiBjbGFzcz0icG9zdCI+PC9zcGFuPjwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJvcmRlciI+CisgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWx0ZXJ0eXBlIj5PcmRlcmluZzwvc3Bhbj4KKyAgICAgICAgICAgICAgPG9sPgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iYWxwaGEgaW4iPjxzcGFuPkFscGhhYmV0aWM8L3NwYW4+PC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImluaGVyaXQgb3V0Ij48c3Bhbj5CeSBpbmhlcml0YW5jZTwvc3Bhbj48L2xpPgorICAgICAgICAgICAgICA8L29sPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgaWQ9ImFuY2VzdG9ycyI+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbHRlcnR5cGUiPkluaGVyaXRlZDxiciAvPgorICAgICAgICAgICAgICAgIDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8b2wgaWQ9ImxpbmVhcml6YXRpb24iPgorICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJpbiIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlIj48c3Bhbj5IaXZlTWV0YVN0b3JlQnJpZGdlPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJpbiIgbmFtZT0ic2NhbGEuQW55UmVmIj48c3Bhbj5BbnlSZWY8L3NwYW4+PC9saT48bGkgY2xhc3M9ImluIiBuYW1lPSJzY2FsYS5BbnkiPjxzcGFuPkFueTwvc3Bhbj48L2xpPgorICAgICAgICAgICAgICAgIDwvb2w+CisgICAgICAgICAgICAgIDwvZGl2PjxkaXYgaWQ9ImFuY2VzdG9ycyI+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+PC9zcGFuPgorICAgICAgICAgICAgPG9sPgorICAgICAgICAgICAgICA8bGkgY2xhc3M9ImhpZGVhbGwgb3V0Ij48c3Bhbj5IaWRlIEFsbDwvc3Bhbj48L2xpPgorICAgICAgICAgICAgICA8bGkgY2xhc3M9InNob3dhbGwgaW4iPjxzcGFuPlNob3cgYWxsPC9zcGFuPjwvbGk+CisgICAgICAgICAgICA8L29sPgorICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2RvY3Muc2NhbGEtbGFuZy5vcmcvb3ZlcnZpZXdzL3NjYWxhZG9jL3VzYWdlLmh0bWwjbWVtYmVycyIgdGFyZ2V0PSJfYmxhbmsiPkxlYXJuIG1vcmUgYWJvdXQgbWVtYmVyIHNlbGVjdGlvbjwvYT4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0idmlzYmwiPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbHRlcnR5cGUiPlZpc2liaWxpdHk8L3NwYW4+CisgICAgICAgICAgICA8b2w+PGxpIGNsYXNzPSJwdWJsaWMgaW4iPjxzcGFuPlB1YmxpYzwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iYWxsIG91dCI+PHNwYW4+QWxsPC9zcGFuPjwvbGk+PC9vbD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJ0ZW1wbGF0ZSI+CisgICAgICAgIDxkaXYgaWQ9ImFsbE1lbWJlcnMiPgorICAgICAgICA8ZGl2IGlkPSJjb25zdHJ1Y3RvcnMiIGNsYXNzPSJtZW1iZXJzIj4KKyAgICAgICAgICAgICAgPGgzPkluc3RhbmNlIENvbnN0cnVjdG9yczwvaDM+CisgICAgICAgICAgICAgIDxvbD48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlIyZsdDtpbml0Jmd0OyIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iJmx0O2luaXQmZ3Q7KGhpdmVDb25mOm9yZy5hcGFjaGUuaGFkb29wLmhpdmUuY29uZi5IaXZlQ29uZik6b3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlIj48L2E+CisgICAgICA8YSBpZD0iJmx0O2luaXQmZ3Q7OkhpdmVNZXRhU3RvcmVCcmlkZ2UiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5uZXc8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPkhpdmVNZXRhU3RvcmVCcmlkZ2U8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImhpdmVDb25mIj5oaXZlQ29uZjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5oYWRvb3AuaGl2ZS5jb25mLkhpdmVDb25mIj5IaXZlQ29uZjwvc3Bhbj48L3NwYW4+KTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjwvb2w+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAKKworICAgICAgICAKKworICAgICAgICA8ZGl2IGlkPSJ2YWx1ZXMiIGNsYXNzPSJ2YWx1ZXMgbWVtYmVycyI+CisgICAgICAgICAgICAgIDxoMz5WYWx1ZSBNZW1iZXJzPC9oMz4KKyAgICAgICAgICAgICAgPG9sPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjIT0iIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSIhPSh4JDE6QW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0iIT0oQW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIHRpdGxlPSJndDRzOiAkYmFuZyRlcSIgY2xhc3M9Im5hbWUiPiE9PC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJhcmcwIj5hcmcwOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnlSZWYiPkFueVJlZjwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkJvb2xlYW4iPkJvb2xlYW48L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueSMhPSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IiE9KHgkMTpBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSIhPShBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gdGl0bGU9Imd0NHM6ICRiYW5nJGVxIiBjbGFzcz0ibmFtZSI+IT08L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5Bbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmIyMjIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iIyMoKTpJbnQiPjwvYT4KKyAgICAgIDxhIGlkPSIjIygpOkludCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiB0aXRsZT0iZ3Q0czogJGhhc2gkaGFzaCIgY2xhc3M9Im5hbWUiPiMjPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuSW50Ij5JbnQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmIz09IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iPT0oeCQxOkFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9Ij09KEFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiB0aXRsZT0iZ3Q0czogJGVxJGVxIiBjbGFzcz0ibmFtZSI+PT08L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55Iz09IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iPT0oeCQxOkFueSk6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9Ij09KEFueSk6Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiB0aXRsZT0iZ3Q0czogJGVxJGVxIiBjbGFzcz0ibmFtZSI+PT08L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5Bbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55I2FzSW5zdGFuY2VPZiIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImFzSW5zdGFuY2VPZltUMF06VDAiPjwvYT4KKyAgICAgIDxhIGlkPSJhc0luc3RhbmNlT2ZbVDBdOlQwIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5hc0luc3RhbmNlT2Y8L3NwYW4+PHNwYW4gY2xhc3M9InRwYXJhbXMiPls8c3BhbiBuYW1lPSJUMCI+VDA8L3NwYW4+XTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueS5hc0luc3RhbmNlT2YuVDAiPlQwPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjY2xvbmUiIHZpc2JsPSJwcnQiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJjbG9uZSgpOk9iamVjdCI+PC9hPgorICAgICAgPGEgaWQ9ImNsb25lKCk6QW55UmVmIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5jbG9uZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkF0dHJpYnV0ZXM8L2R0PjxkZD5wcm90ZWN0ZWRbPGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vamF2YSRsYW5nLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZyI+amF2YS5sYW5nPC9hPl0gPC9kZD48ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48ZHQ+QW5ub3RhdGlvbnM8L2R0PjxkZD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+QHRocm93czwvc3Bhbj48c3BhbiBjbGFzcz0iYXJncyI+KDxzcGFuPgorICAgICAgCisgICAgICA8c3BhbiBjbGFzcz0iZGVmdmFsIiBuYW1lPSJjbGFzc09mW2phdmEubGFuZy5DbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbl0iPi4uLjwvc3Bhbj4KKyAgICA8L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgICAgICAgCisgICAgICAgIDwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UjY3JlYXRlSW5zdGFuY2UiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImNyZWF0ZUluc3RhbmNlKHJlZmVyZW5jZWFibGU6b3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLlJlZmVyZW5jZWFibGUpOm9yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS5SZWZlcmVuY2VhYmxlIj48L2E+CisgICAgICA8YSBpZD0iY3JlYXRlSW5zdGFuY2UoUmVmZXJlbmNlYWJsZSk6UmVmZXJlbmNlYWJsZSI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+Y3JlYXRlSW5zdGFuY2U8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9InJlZmVyZW5jZWFibGUiPnJlZmVyZW5jZWFibGU6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS5SZWZlcmVuY2VhYmxlIj5SZWZlcmVuY2VhYmxlPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLlJlZmVyZW5jZWFibGUiPlJlZmVyZW5jZWFibGU8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNlcSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImVxKHgkMTpBbnlSZWYpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSJlcShBbnlSZWYpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmVxPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJhcmcwIj5hcmcwOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnlSZWYiPkFueVJlZjwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkJvb2xlYW4iPkJvb2xlYW48L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNlcXVhbHMiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJlcXVhbHMoeCQxOkFueSk6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9ImVxdWFscyhBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmVxdWFsczwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55Ij5Bbnk8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZiDihpIgQW55PC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNmaW5hbGl6ZSIgdmlzYmw9InBydCIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImZpbmFsaXplKCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9ImZpbmFsaXplKCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+ZmluYWxpemU8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Vbml0Ij5Vbml0PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkF0dHJpYnV0ZXM8L2R0PjxkZD5wcm90ZWN0ZWRbPGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vamF2YSRsYW5nLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZyI+amF2YS5sYW5nPC9hPl0gPC9kZD48ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48ZHQ+QW5ub3RhdGlvbnM8L2R0PjxkZD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+QHRocm93czwvc3Bhbj48c3BhbiBjbGFzcz0iYXJncyI+KDxzcGFuPgorICAgICAgCisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj5jbGFzc09mW2phdmEubGFuZy5UaHJvd2FibGVdPC9zcGFuPgorICAgIDwvc3Bhbj4pPC9zcGFuPgorICAgICAgICAgICAgICAKKyAgICAgICAgPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UuSGl2ZU1ldGFTdG9yZUJyaWRnZSNnZXRBdGxhc0NsaWVudCIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iZ2V0QXRsYXNDbGllbnQoKTpvcmcuYXBhY2hlLmF0bGFzLkF0bGFzQ2xpZW50Ij48L2E+CisgICAgICA8YSBpZD0iZ2V0QXRsYXNDbGllbnQoKTpBdGxhc0NsaWVudCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+Z2V0QXRsYXNDbGllbnQ8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLkF0bGFzQ2xpZW50Ij5BdGxhc0NsaWVudDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI2dldENsYXNzIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iZ2V0Q2xhc3MoKTpDbGFzc1tfXSI+PC9hPgorICAgICAgPGEgaWQ9ImdldENsYXNzKCk6Q2xhc3NbX10iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmdldENsYXNzPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5sYW5nLkNsYXNzIj5DbGFzczwvc3Bhbj5bX108L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWYg4oaSIEFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UjZ2V0UHJvY2Vzc1JlZmVyZW5jZSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iZ2V0UHJvY2Vzc1JlZmVyZW5jZShxdWVyeVN0cjpTdHJpbmcpOm9yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS5SZWZlcmVuY2VhYmxlIj48L2E+CisgICAgICA8YSBpZD0iZ2V0UHJvY2Vzc1JlZmVyZW5jZShTdHJpbmcpOlJlZmVyZW5jZWFibGUiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmdldFByb2Nlc3NSZWZlcmVuY2U8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9InF1ZXJ5U3RyIj5xdWVyeVN0cjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5sYW5nLlN0cmluZyI+U3RyaW5nPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLlJlZmVyZW5jZWFibGUiPlJlZmVyZW5jZWFibGU8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNoYXNoQ29kZSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9Imhhc2hDb2RlKCk6SW50Ij48L2E+CisgICAgICA8YSBpZD0iaGFzaENvZGUoKTpJbnQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmhhc2hDb2RlPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuSW50Ij5JbnQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlI2ltcG9ydEhpdmVNZXRhZGF0YSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iaW1wb3J0SGl2ZU1ldGFkYXRhKCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9ImltcG9ydEhpdmVNZXRhZGF0YSgpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmltcG9ydEhpdmVNZXRhZGF0YTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueSNpc0luc3RhbmNlT2YiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJpc0luc3RhbmNlT2ZbVDBdOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSJpc0luc3RhbmNlT2ZbVDBdOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmlzSW5zdGFuY2VPZjwvc3Bhbj48c3BhbiBjbGFzcz0idHBhcmFtcyI+WzxzcGFuIG5hbWU9IlQwIj5UMDwvc3Bhbj5dPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5Bbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI25lIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0ibmUoeCQxOkFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9Im5lKEFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+bmU8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI25vdGlmeSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9Im5vdGlmeSgpOlVuaXQiPjwvYT4KKyAgICAgIDxhIGlkPSJub3RpZnkoKTpVbml0Ij48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5ub3RpZnk8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Vbml0Ij5Vbml0PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjbm90aWZ5QWxsIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0ibm90aWZ5QWxsKCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9Im5vdGlmeUFsbCgpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPm5vdGlmeUFsbDwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UuSGl2ZU1ldGFTdG9yZUJyaWRnZSNyZWdpc3RlckRhdGFiYXNlIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJyZWdpc3RlckRhdGFiYXNlKGRhdGFiYXNlTmFtZTpTdHJpbmcpOm9yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS5SZWZlcmVuY2VhYmxlIj48L2E+CisgICAgICA8YSBpZD0icmVnaXN0ZXJEYXRhYmFzZShTdHJpbmcpOlJlZmVyZW5jZWFibGUiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnJlZ2lzdGVyRGF0YWJhc2U8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImRhdGFiYXNlTmFtZSI+ZGF0YWJhc2VOYW1lOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuU3RyaW5nIj5TdHJpbmc8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0uUmVmZXJlbmNlYWJsZSI+UmVmZXJlbmNlYWJsZTwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlI3JlZ2lzdGVySGl2ZURhdGFNb2RlbCIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0icmVnaXN0ZXJIaXZlRGF0YU1vZGVsKCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9InJlZ2lzdGVySGl2ZURhdGFNb2RlbCgpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnJlZ2lzdGVySGl2ZURhdGFNb2RlbDwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UuSGl2ZU1ldGFTdG9yZUJyaWRnZSNyZWdpc3RlclBhcnRpdGlvbiIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0icmVnaXN0ZXJQYXJ0aXRpb24ocGFydGl0aW9uOm9yZy5hcGFjaGUuaGFkb29wLmhpdmUucWwubWV0YWRhdGEuUGFydGl0aW9uKTpvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0uUmVmZXJlbmNlYWJsZSI+PC9hPgorICAgICAgPGEgaWQ9InJlZ2lzdGVyUGFydGl0aW9uKFBhcnRpdGlvbik6UmVmZXJlbmNlYWJsZSI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+cmVnaXN0ZXJQYXJ0aXRpb248L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9InBhcnRpdGlvbiI+cGFydGl0aW9uOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLm1ldGFkYXRhLlBhcnRpdGlvbiI+UGFydGl0aW9uPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLlJlZmVyZW5jZWFibGUiPlJlZmVyZW5jZWFibGU8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UuSGl2ZU1ldGFTdG9yZUJyaWRnZSNyZWdpc3RlclRhYmxlIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJyZWdpc3RlclRhYmxlKGRiUmVmZXJlbmNlOm9yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS5SZWZlcmVuY2VhYmxlLGRiTmFtZTpTdHJpbmcsdGFibGVOYW1lOlN0cmluZyk6b3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLlJlZmVyZW5jZWFibGUiPjwvYT4KKyAgICAgIDxhIGlkPSJyZWdpc3RlclRhYmxlKFJlZmVyZW5jZWFibGUsU3RyaW5nLFN0cmluZyk6UmVmZXJlbmNlYWJsZSI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+cmVnaXN0ZXJUYWJsZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iZGJSZWZlcmVuY2UiPmRiUmVmZXJlbmNlOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0uUmVmZXJlbmNlYWJsZSI+UmVmZXJlbmNlYWJsZTwvc3Bhbj48L3NwYW4+LCA8c3BhbiBuYW1lPSJkYk5hbWUiPmRiTmFtZTogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5sYW5nLlN0cmluZyI+U3RyaW5nPC9zcGFuPjwvc3Bhbj4sIDxzcGFuIG5hbWU9InRhYmxlTmFtZSI+dGFibGVOYW1lOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuU3RyaW5nIj5TdHJpbmc8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0uUmVmZXJlbmNlYWJsZSI+UmVmZXJlbmNlYWJsZTwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlI3JlZ2lzdGVyVGFibGUiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9InJlZ2lzdGVyVGFibGUoZGJOYW1lOlN0cmluZyx0YWJsZU5hbWU6U3RyaW5nKTpvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0uUmVmZXJlbmNlYWJsZSI+PC9hPgorICAgICAgPGEgaWQ9InJlZ2lzdGVyVGFibGUoU3RyaW5nLFN0cmluZyk6UmVmZXJlbmNlYWJsZSI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+cmVnaXN0ZXJUYWJsZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iZGJOYW1lIj5kYk5hbWU6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5TdHJpbmciPlN0cmluZzwvc3Bhbj48L3NwYW4+LCA8c3BhbiBuYW1lPSJ0YWJsZU5hbWUiPnRhYmxlTmFtZTogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5sYW5nLlN0cmluZyI+U3RyaW5nPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLlJlZmVyZW5jZWFibGUiPlJlZmVyZW5jZWFibGU8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNzeW5jaHJvbml6ZWQiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJzeW5jaHJvbml6ZWRbVDBdKHgkMTo9Jmd0O1QwKTpUMCI+PC9hPgorICAgICAgPGEgaWQ9InN5bmNocm9uaXplZFtUMF0o4oeSVDApOlQwIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5zeW5jaHJvbml6ZWQ8L3NwYW4+PHNwYW4gY2xhc3M9InRwYXJhbXMiPls8c3BhbiBuYW1lPSJUMCI+VDA8L3NwYW4+XTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDog4oeSIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5BbnlSZWYuc3luY2hyb25pemVkLlQwIj5UMDwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5BbnlSZWYuc3luY2hyb25pemVkLlQwIj5UMDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI3RvU3RyaW5nIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0idG9TdHJpbmcoKTpTdHJpbmciPjwvYT4KKyAgICAgIDxhIGlkPSJ0b1N0cmluZygpOlN0cmluZyI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+dG9TdHJpbmc8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuU3RyaW5nIj5TdHJpbmc8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlI3VwZGF0ZVRhYmxlIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJ1cGRhdGVUYWJsZSh0YWJsZVJlZmVyZW5jZWFibGU6b3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLlJlZmVyZW5jZWFibGUsbmV3VGFibGU6b3JnLmFwYWNoZS5oYWRvb3AuaGl2ZS5xbC5tZXRhZGF0YS5UYWJsZSk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9InVwZGF0ZVRhYmxlKFJlZmVyZW5jZWFibGUsVGFibGUpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnVwZGF0ZVRhYmxlPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJ0YWJsZVJlZmVyZW5jZWFibGUiPnRhYmxlUmVmZXJlbmNlYWJsZTogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLlJlZmVyZW5jZWFibGUiPlJlZmVyZW5jZWFibGU8L3NwYW4+PC9zcGFuPiwgPHNwYW4gbmFtZT0ibmV3VGFibGUiPm5ld1RhYmxlOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLm1ldGFkYXRhLlRhYmxlIj5UYWJsZTwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiN3YWl0IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0id2FpdCgpOlVuaXQiPjwvYT4KKyAgICAgIDxhIGlkPSJ3YWl0KCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+d2FpdDwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48ZHQ+QW5ub3RhdGlvbnM8L2R0PjxkZD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+QHRocm93czwvc3Bhbj48c3BhbiBjbGFzcz0iYXJncyI+KDxzcGFuPgorICAgICAgCisgICAgICA8c3BhbiBjbGFzcz0iZGVmdmFsIiBuYW1lPSJjbGFzc09mW2phdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbl0iPi4uLjwvc3Bhbj4KKyAgICA8L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgICAgICAgCisgICAgICAgIDwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjd2FpdCIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IndhaXQoeCQxOkxvbmcseCQyOkludCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9IndhaXQoTG9uZyxJbnQpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPndhaXQ8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkxvbmciPkxvbmc8L3NwYW4+PC9zcGFuPiwgPHNwYW4gbmFtZT0iYXJnMSI+YXJnMTogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuSW50Ij5JbnQ8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Vbml0Ij5Vbml0PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PGR0PkFubm90YXRpb25zPC9kdD48ZGQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPkB0aHJvd3M8L3NwYW4+PHNwYW4gY2xhc3M9ImFyZ3MiPig8c3Bhbj4KKyAgICAgIAorICAgICAgPHNwYW4gY2xhc3M9ImRlZnZhbCIgbmFtZT0iY2xhc3NPZltqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb25dIj4uLi48L3NwYW4+CisgICAgPC9zcGFuPik8L3NwYW4+CisgICAgICAgICAgICAgIAorICAgICAgICA8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI3dhaXQiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJ3YWl0KHgkMTpMb25nKTpVbml0Ij48L2E+CisgICAgICA8YSBpZD0id2FpdChMb25nKTpVbml0Ij48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj53YWl0PC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJhcmcwIj5hcmcwOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Mb25nIj5Mb25nPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjxkdD5Bbm5vdGF0aW9uczwvZHQ+PGRkPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5AdGhyb3dzPC9zcGFuPjxzcGFuIGNsYXNzPSJhcmdzIj4oPHNwYW4+CisgICAgICAKKyAgICAgIDxzcGFuIGNsYXNzPSJkZWZ2YWwiIG5hbWU9ImNsYXNzT2ZbamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uXSI+Li4uPC9zcGFuPgorICAgIDwvc3Bhbj4pPC9zcGFuPgorICAgICAgICAgICAgICAKKyAgICAgICAgPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PC9vbD4KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgIAorCisgICAgICAgIAorICAgICAgICA8L2Rpdj4KKworICAgICAgICA8ZGl2IGlkPSJpbmhlcml0ZWRNZW1iZXJzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0icGFyZW50IiBuYW1lPSJzY2FsYS5BbnlSZWYiPgorICAgICAgICAgICAgICA8aDM+SW5oZXJpdGVkIGZyb20gPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9oMz4KKyAgICAgICAgICAgIDwvZGl2PjxkaXYgY2xhc3M9InBhcmVudCIgbmFtZT0ic2NhbGEuQW55Ij4KKyAgICAgICAgICAgICAgPGgzPkluaGVyaXRlZCBmcm9tIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvaDM+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9Imdyb3VwZWRNZW1iZXJzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXAiIG5hbWU9IlVuZ3JvdXBlZCI+CisgICAgICAgICAgICAgIDxoMz5Vbmdyb3VwZWQ8L2gzPgorICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKworICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRvb2x0aXAiPjwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJmb290ZXIiPiAgPC9kaXY+CisgICAgICA8c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0ianF1ZXJ5LWpzIiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktdWktanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL2pxdWVyeS11aS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRvb2xzLXRvb2x0aXAtanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL3Rvb2xzLnRvb2x0aXAuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJ0ZW1wbGF0ZS1qcyIgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvdGVtcGxhdGUuanMiPjwvc2NyaXB0PgorICAgIDwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9icmlkZ2UvcGFja2FnZS5odG1sIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvYnJpZGdlL3BhY2thZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mZTE4NDBmCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvYnJpZGdlL3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDEwNSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICA8dGl0bGU+YnJpZGdlIC0gQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNS1pbmN1YmF0aW5nIEFQSSAtIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2U8L3RpdGxlPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJicmlkZ2UgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IC0gaW5jdWJhdGluZyBBUEkgLSBvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlIiAvPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJicmlkZ2UgQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNSBpbmN1YmF0aW5nIEFQSSBvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlIiAvPgorICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgorICAgICAgICAgIAorICAgICAgPGxpbmsgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbGliL3RlbXBsYXRlLmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxsaW5rIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2xpYi9kaWFncmFtcy5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGlkPSJkaWFncmFtcy1jc3MiIC8+CisgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgICBpZih0b3AgPT09IHNlbGYpIHsKKyAgICAgICAgICAgIHZhciB1cmwgPSAnLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCc7CisgICAgICAgICAgICB2YXIgaGFzaCA9ICdvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLnBhY2thZ2UnOworICAgICAgICAgICAgdmFyIGFuY2hvciA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworICAgICAgICAgICAgdmFyIGFuY2hvcl9vcHQgPSAnJzsKKyAgICAgICAgICAgIGlmIChhbmNob3IubGVuZ3RoID49IDEpCisgICAgICAgICAgICAgIGFuY2hvcl9vcHQgPSAnQCcgKyBhbmNob3Iuc3Vic3RyaW5nKDEpOworICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmwgKyAnIycgKyBoYXNoICsgYW5jaG9yX29wdDsKKyAgICAgICAgIH0KKyAgIAkgIDwvc2NyaXB0PgorICAgIAorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ2YWx1ZSI+CisgICAgICA8ZGl2IGlkPSJkZWZpbml0aW9uIj4KKyAgICAgICAgPGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi9wYWNrYWdlX2JpZy5wbmciIC8+CisgICAgICAgIDxwIGlkPSJvd25lciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmciPm9yZzwvYT4uPGEgaHJlZj0iLi4vLi4vLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlIj5hcGFjaGU8L2E+LjxhIGhyZWY9Ii4uLy4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcyI+YXRsYXM8L2E+LjxhIGhyZWY9Ii4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlIj5oaXZlPC9hPjwvcD4KKyAgICAgICAgPGgxPmJyaWRnZTwvaDE+CisgICAgICA8L2Rpdj4KKworICAgICAgPGg0IGlkPSJzaWduYXR1cmUiIGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPnBhY2thZ2U8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmJyaWRnZTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICAgICAgICA8ZGl2IGlkPSJjb21tZW50IiBjbGFzcz0iZnVsbGNvbW1lbnR0b3AiPjwvZGl2PgorICAgICAgICAKKworICAgICAgPGRpdiBpZD0ibWJyc2VsIj4KKyAgICAgICAgPGRpdiBpZD0idGV4dGZpbHRlciI+PHNwYW4gY2xhc3M9InByZSI+PC9zcGFuPjxzcGFuIGNsYXNzPSJpbnB1dCI+PGlucHV0IGlkPSJtYnJzZWwtaW5wdXQiIHR5cGU9InRleHQiIGFjY2Vzc2tleT0iLyIgLz48L3NwYW4+PHNwYW4gY2xhc3M9InBvc3QiPjwvc3Bhbj48L2Rpdj4KKyAgICAgICAgCisgICAgICAgIAorICAgICAgICA8ZGl2IGlkPSJ2aXNibCI+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+VmlzaWJpbGl0eTwvc3Bhbj4KKyAgICAgICAgICAgIDxvbD48bGkgY2xhc3M9InB1YmxpYyBpbiI+PHNwYW4+UHVibGljPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJhbGwgb3V0Ij48c3Bhbj5BbGw8L3NwYW4+PC9saT48L29sPgorICAgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRlbXBsYXRlIj4KKyAgICAgICAgPGRpdiBpZD0iYWxsTWVtYmVycyI+CisgICAgICAgIAorCisgICAgICAgIDxkaXYgaWQ9InR5cGVzIiBjbGFzcz0idHlwZXMgbWVtYmVycyI+CisgICAgICAgICAgICAgIDxoMz5UeXBlIE1lbWJlcnM8L2gzPgorICAgICAgICAgICAgICA8b2w+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UuSGl2ZU1ldGFTdG9yZUJyaWRnZSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iSGl2ZU1ldGFTdG9yZUJyaWRnZWV4dGVuZHNPYmplY3QiPjwvYT4KKyAgICAgIDxhIGlkPSJIaXZlTWV0YVN0b3JlQnJpZGdlOkhpdmVNZXRhU3RvcmVCcmlkZ2UiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5jbGFzczwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8YSBocmVmPSJIaXZlTWV0YVN0b3JlQnJpZGdlLmh0bWwiPjxzcGFuIGNsYXNzPSJuYW1lIj5IaXZlTWV0YVN0b3JlQnJpZGdlPC9zcGFuPjwvYT48c3BhbiBjbGFzcz0icmVzdWx0Ij4gZXh0ZW5kcyA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnlSZWYiPkFueVJlZjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48L29sPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgCisKKyAgICAgICAgCisKKyAgICAgICAgCisKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9ImluaGVyaXRlZE1lbWJlcnMiPgorICAgICAgICAKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9Imdyb3VwZWRNZW1iZXJzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXAiIG5hbWU9IlVuZ3JvdXBlZCI+CisgICAgICAgICAgICAgIDxoMz5Vbmdyb3VwZWQ8L2gzPgorICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKworICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRvb2x0aXAiPjwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJmb290ZXIiPiAgPC9kaXY+CisgICAgICA8c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0ianF1ZXJ5LWpzIiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktdWktanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL2pxdWVyeS11aS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRvb2xzLXRvb2x0aXAtanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL3Rvb2xzLnRvb2x0aXAuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJ0ZW1wbGF0ZS1qcyIgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvdGVtcGxhdGUuanMiPjwvc2NyaXB0PgorICAgIDwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9ob29rL0hpdmVIb29rLmh0bWwgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9ob29rL0hpdmVIb29rLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZTE5ZmFiNgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3Mvb3JnL2FwYWNoZS9hdGxhcy9oaXZlL2hvb2svSGl2ZUhvb2suaHRtbApAQCAtMCwwICsxLDQ1NSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICA8dGl0bGU+SGl2ZUhvb2sgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41LWluY3ViYXRpbmcgQVBJIC0gb3JnLmFwYWNoZS5hdGxhcy5oaXZlLmhvb2suSGl2ZUhvb2s8L3RpdGxlPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJIaXZlSG9vayAtIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUgLSBpbmN1YmF0aW5nIEFQSSAtIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rLkhpdmVIb29rIiAvPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJIaXZlSG9vayBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IGluY3ViYXRpbmcgQVBJIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rLkhpdmVIb29rIiAvPgorICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgorICAgICAgICAgIAorICAgICAgPGxpbmsgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbGliL3RlbXBsYXRlLmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxsaW5rIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2xpYi9kaWFncmFtcy5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGlkPSJkaWFncmFtcy1jc3MiIC8+CisgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgICBpZih0b3AgPT09IHNlbGYpIHsKKyAgICAgICAgICAgIHZhciB1cmwgPSAnLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCc7CisgICAgICAgICAgICB2YXIgaGFzaCA9ICdvcmcuYXBhY2hlLmF0bGFzLmhpdmUuaG9vay5IaXZlSG9vayc7CisgICAgICAgICAgICB2YXIgYW5jaG9yID0gd2luZG93LmxvY2F0aW9uLmhhc2g7CisgICAgICAgICAgICB2YXIgYW5jaG9yX29wdCA9ICcnOworICAgICAgICAgICAgaWYgKGFuY2hvci5sZW5ndGggPj0gMSkKKyAgICAgICAgICAgICAgYW5jaG9yX29wdCA9ICdAJyArIGFuY2hvci5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybCArICcjJyArIGhhc2ggKyBhbmNob3Jfb3B0OworICAgICAgICAgfQorICAgCSAgPC9zY3JpcHQ+CisgICAgCisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHkgY2xhc3M9InR5cGUiPgorICAgICAgPGRpdiBpZD0iZGVmaW5pdGlvbiI+CisgICAgICAgIDxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvY2xhc3NfYmlnLnBuZyIgLz4KKyAgICAgICAgPHAgaWQ9Im93bmVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZyI+b3JnPC9hPi48YSBocmVmPSIuLi8uLi8uLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUiPmFwYWNoZTwvYT4uPGEgaHJlZj0iLi4vLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzIj5hdGxhczwvYT4uPGEgaHJlZj0iLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUiPmhpdmU8L2E+LjxhIGhyZWY9InBhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmhvb2siPmhvb2s8L2E+PC9wPgorICAgICAgICA8aDE+SGl2ZUhvb2s8L2gxPgorICAgICAgPC9kaXY+CisKKyAgICAgIDxoNCBpZD0ic2lnbmF0dXJlIiBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5jbGFzczwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+SGl2ZUhvb2s8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+IGV4dGVuZHMgPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5oYWRvb3AuaGl2ZS5xbC5ob29rcy5FeGVjdXRlV2l0aEhvb2tDb250ZXh0Ij5FeGVjdXRlV2l0aEhvb2tDb250ZXh0PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICAgICAgICA8ZGl2IGlkPSJjb21tZW50IiBjbGFzcz0iZnVsbGNvbW1lbnR0b3AiPjxkaXYgY2xhc3M9InRvZ2dsZUNvbnRhaW5lciBibG9jayI+CisgICAgICAgICAgPHNwYW4gY2xhc3M9InRvZ2dsZSI+TGluZWFyIFN1cGVydHlwZXM8L3NwYW4+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic3VwZXJUeXBlcyBoaWRkZW5Db250ZW50Ij48c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLmhvb2tzLkV4ZWN1dGVXaXRoSG9va0NvbnRleHQiPkV4ZWN1dGVXaXRoSG9va0NvbnRleHQ8L3NwYW4+LCA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLmhvb2tzLkhvb2siPkhvb2s8L3NwYW4+LCA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnlSZWYiPkFueVJlZjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvZGl2PgorICAgICAgICA8L2Rpdj48L2Rpdj4KKyAgICAgICAgCisKKyAgICAgIDxkaXYgaWQ9Im1icnNlbCI+CisgICAgICAgIDxkaXYgaWQ9InRleHRmaWx0ZXIiPjxzcGFuIGNsYXNzPSJwcmUiPjwvc3Bhbj48c3BhbiBjbGFzcz0iaW5wdXQiPjxpbnB1dCBpZD0ibWJyc2VsLWlucHV0IiB0eXBlPSJ0ZXh0IiBhY2Nlc3NrZXk9Ii8iIC8+PC9zcGFuPjxzcGFuIGNsYXNzPSJwb3N0Ij48L3NwYW4+PC9kaXY+CisgICAgICAgIDxkaXYgaWQ9Im9yZGVyIj4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbHRlcnR5cGUiPk9yZGVyaW5nPC9zcGFuPgorICAgICAgICAgICAgICA8b2w+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJhbHBoYSBpbiI+PHNwYW4+QWxwaGFiZXRpYzwvc3Bhbj48L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaW5oZXJpdCBvdXQiPjxzcGFuPkJ5IGluaGVyaXRhbmNlPC9zcGFuPjwvbGk+CisgICAgICAgICAgICAgIDwvb2w+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0iYW5jZXN0b3JzIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+SW5oZXJpdGVkPGJyIC8+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDxvbCBpZD0ibGluZWFyaXphdGlvbiI+CisgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImluIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuaG9vay5IaXZlSG9vayI+PHNwYW4+SGl2ZUhvb2s8L3NwYW4+PC9saT48bGkgY2xhc3M9ImluIiBuYW1lPSJvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLmhvb2tzLkV4ZWN1dGVXaXRoSG9va0NvbnRleHQiPjxzcGFuPkV4ZWN1dGVXaXRoSG9va0NvbnRleHQ8L3NwYW4+PC9saT48bGkgY2xhc3M9ImluIiBuYW1lPSJvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLmhvb2tzLkhvb2siPjxzcGFuPkhvb2s8L3NwYW4+PC9saT48bGkgY2xhc3M9ImluIiBuYW1lPSJzY2FsYS5BbnlSZWYiPjxzcGFuPkFueVJlZjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iaW4iIG5hbWU9InNjYWxhLkFueSI+PHNwYW4+QW55PC9zcGFuPjwvbGk+CisgICAgICAgICAgICAgICAgPC9vbD4KKyAgICAgICAgICAgICAgPC9kaXY+PGRpdiBpZD0iYW5jZXN0b3JzIj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWx0ZXJ0eXBlIj48L3NwYW4+CisgICAgICAgICAgICA8b2w+CisgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaGlkZWFsbCBvdXQiPjxzcGFuPkhpZGUgQWxsPC9zcGFuPjwvbGk+CisgICAgICAgICAgICAgIDxsaSBjbGFzcz0ic2hvd2FsbCBpbiI+PHNwYW4+U2hvdyBhbGw8L3NwYW4+PC9saT4KKyAgICAgICAgICAgIDwvb2w+CisgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vZG9jcy5zY2FsYS1sYW5nLm9yZy9vdmVydmlld3Mvc2NhbGFkb2MvdXNhZ2UuaHRtbCNtZW1iZXJzIiB0YXJnZXQ9Il9ibGFuayI+TGVhcm4gbW9yZSBhYm91dCBtZW1iZXIgc2VsZWN0aW9uPC9hPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJ2aXNibCI+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+VmlzaWJpbGl0eTwvc3Bhbj4KKyAgICAgICAgICAgIDxvbD48bGkgY2xhc3M9InB1YmxpYyBpbiI+PHNwYW4+UHVibGljPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJhbGwgb3V0Ij48c3Bhbj5BbGw8L3NwYW4+PC9saT48L29sPgorICAgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRlbXBsYXRlIj4KKyAgICAgICAgPGRpdiBpZD0iYWxsTWVtYmVycyI+CisgICAgICAgIDxkaXYgaWQ9ImNvbnN0cnVjdG9ycyIgY2xhc3M9Im1lbWJlcnMiPgorICAgICAgICAgICAgICA8aDM+SW5zdGFuY2UgQ29uc3RydWN0b3JzPC9oMz4KKyAgICAgICAgICAgICAgPG9sPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuaG9vay5IaXZlSG9vayMmbHQ7aW5pdCZndDsiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IiZsdDtpbml0Jmd0OygpOm9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rLkhpdmVIb29rIj48L2E+CisgICAgICA8YSBpZD0iJmx0O2luaXQmZ3Q7OkhpdmVIb29rIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+bmV3PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5IaXZlSG9vazwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjwvb2w+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAKKworICAgICAgICAKKworICAgICAgICA8ZGl2IGlkPSJ2YWx1ZXMiIGNsYXNzPSJ2YWx1ZXMgbWVtYmVycyI+CisgICAgICAgICAgICAgIDxoMz5WYWx1ZSBNZW1iZXJzPC9oMz4KKyAgICAgICAgICAgICAgPG9sPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjIT0iIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSIhPSh4JDE6QW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0iIT0oQW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIHRpdGxlPSJndDRzOiAkYmFuZyRlcSIgY2xhc3M9Im5hbWUiPiE9PC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJhcmcwIj5hcmcwOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnlSZWYiPkFueVJlZjwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkJvb2xlYW4iPkJvb2xlYW48L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueSMhPSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IiE9KHgkMTpBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSIhPShBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gdGl0bGU9Imd0NHM6ICRiYW5nJGVxIiBjbGFzcz0ibmFtZSI+IT08L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5Bbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmIyMjIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iIyMoKTpJbnQiPjwvYT4KKyAgICAgIDxhIGlkPSIjIygpOkludCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiB0aXRsZT0iZ3Q0czogJGhhc2gkaGFzaCIgY2xhc3M9Im5hbWUiPiMjPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuSW50Ij5JbnQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmIz09IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iPT0oeCQxOkFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9Ij09KEFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiB0aXRsZT0iZ3Q0czogJGVxJGVxIiBjbGFzcz0ibmFtZSI+PT08L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55Iz09IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iPT0oeCQxOkFueSk6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9Ij09KEFueSk6Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiB0aXRsZT0iZ3Q0czogJGVxJGVxIiBjbGFzcz0ibmFtZSI+PT08L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5Bbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55I2FzSW5zdGFuY2VPZiIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImFzSW5zdGFuY2VPZltUMF06VDAiPjwvYT4KKyAgICAgIDxhIGlkPSJhc0luc3RhbmNlT2ZbVDBdOlQwIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5hc0luc3RhbmNlT2Y8L3NwYW4+PHNwYW4gY2xhc3M9InRwYXJhbXMiPls8c3BhbiBuYW1lPSJUMCI+VDA8L3NwYW4+XTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueS5hc0luc3RhbmNlT2YuVDAiPlQwPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjY2xvbmUiIHZpc2JsPSJwcnQiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJjbG9uZSgpOk9iamVjdCI+PC9hPgorICAgICAgPGEgaWQ9ImNsb25lKCk6QW55UmVmIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5jbG9uZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkF0dHJpYnV0ZXM8L2R0PjxkZD5wcm90ZWN0ZWRbPGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vamF2YSRsYW5nLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZyI+amF2YS5sYW5nPC9hPl0gPC9kZD48ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48ZHQ+QW5ub3RhdGlvbnM8L2R0PjxkZD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+QHRocm93czwvc3Bhbj48c3BhbiBjbGFzcz0iYXJncyI+KDxzcGFuPgorICAgICAgCisgICAgICA8c3BhbiBjbGFzcz0iZGVmdmFsIiBuYW1lPSJjbGFzc09mW2phdmEubGFuZy5DbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbl0iPi4uLjwvc3Bhbj4KKyAgICA8L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgICAgICAgCisgICAgICAgIDwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjZXEiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJlcSh4JDE6QW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0iZXEoQW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5lcTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjZXF1YWxzIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iZXF1YWxzKHgkMTpBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSJlcXVhbHMoQW55KTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5lcXVhbHM8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWYg4oaSIEFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjZmluYWxpemUiIHZpc2JsPSJwcnQiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJmaW5hbGl6ZSgpOlVuaXQiPjwvYT4KKyAgICAgIDxhIGlkPSJmaW5hbGl6ZSgpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmZpbmFsaXplPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5BdHRyaWJ1dGVzPC9kdD48ZGQ+cHJvdGVjdGVkWzxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2phdmEkbGFuZy5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmciPmphdmEubGFuZzwvYT5dIDwvZGQ+PGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PGR0PkFubm90YXRpb25zPC9kdD48ZGQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPkB0aHJvd3M8L3NwYW4+PHNwYW4gY2xhc3M9ImFyZ3MiPig8c3Bhbj4KKyAgICAgIAorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+Y2xhc3NPZltqYXZhLmxhbmcuVGhyb3dhYmxlXTwvc3Bhbj4KKyAgICA8L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgICAgICAgCisgICAgICAgIDwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjZ2V0Q2xhc3MiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJnZXRDbGFzcygpOkNsYXNzW19dIj48L2E+CisgICAgICA8YSBpZD0iZ2V0Q2xhc3MoKTpDbGFzc1tfXSI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+Z2V0Q2xhc3M8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuQ2xhc3MiPkNsYXNzPC9zcGFuPltfXTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZiDihpIgQW55PC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNoYXNoQ29kZSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9Imhhc2hDb2RlKCk6SW50Ij48L2E+CisgICAgICA8YSBpZD0iaGFzaENvZGUoKTpJbnQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmhhc2hDb2RlPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuSW50Ij5JbnQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55I2lzSW5zdGFuY2VPZiIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImlzSW5zdGFuY2VPZltUMF06Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9ImlzSW5zdGFuY2VPZltUMF06Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+aXNJbnN0YW5jZU9mPC9zcGFuPjxzcGFuIGNsYXNzPSJ0cGFyYW1zIj5bPHNwYW4gbmFtZT0iVDAiPlQwPC9zcGFuPl08L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjbmUiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJuZSh4JDE6QW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0ibmUoQW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5uZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjbm90aWZ5IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0ibm90aWZ5KCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9Im5vdGlmeSgpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPm5vdGlmeTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNub3RpZnlBbGwiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJub3RpZnlBbGwoKTpVbml0Ij48L2E+CisgICAgICA8YSBpZD0ibm90aWZ5QWxsKCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+bm90aWZ5QWxsPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmhvb2suSGl2ZUhvb2sjcnVuIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0icnVuKGhvb2tDb250ZXh0Om9yZy5hcGFjaGUuaGFkb29wLmhpdmUucWwuaG9va3MuSG9va0NvbnRleHQpOlVuaXQiPjwvYT4KKyAgICAgIDxhIGlkPSJydW4oSG9va0NvbnRleHQpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnJ1bjwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iaG9va0NvbnRleHQiPmhvb2tDb250ZXh0OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLmhvb2tzLkhvb2tDb250ZXh0Ij5Ib29rQ29udGV4dDwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+PGEgaHJlZj0iIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuaG9vay5IaXZlSG9vayI+SGl2ZUhvb2s8L2E+IOKGkiBFeGVjdXRlV2l0aEhvb2tDb250ZXh0PC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNzeW5jaHJvbml6ZWQiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJzeW5jaHJvbml6ZWRbVDBdKHgkMTo9Jmd0O1QwKTpUMCI+PC9hPgorICAgICAgPGEgaWQ9InN5bmNocm9uaXplZFtUMF0o4oeSVDApOlQwIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5zeW5jaHJvbml6ZWQ8L3NwYW4+PHNwYW4gY2xhc3M9InRwYXJhbXMiPls8c3BhbiBuYW1lPSJUMCI+VDA8L3NwYW4+XTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDog4oeSIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5BbnlSZWYuc3luY2hyb25pemVkLlQwIj5UMDwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5BbnlSZWYuc3luY2hyb25pemVkLlQwIj5UMDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI3RvU3RyaW5nIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0idG9TdHJpbmcoKTpTdHJpbmciPjwvYT4KKyAgICAgIDxhIGlkPSJ0b1N0cmluZygpOlN0cmluZyI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+dG9TdHJpbmc8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuU3RyaW5nIj5TdHJpbmc8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI3dhaXQiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJ3YWl0KCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9IndhaXQoKTpVbml0Ij48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj53YWl0PC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjxkdD5Bbm5vdGF0aW9uczwvZHQ+PGRkPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5AdGhyb3dzPC9zcGFuPjxzcGFuIGNsYXNzPSJhcmdzIj4oPHNwYW4+CisgICAgICAKKyAgICAgIDxzcGFuIGNsYXNzPSJkZWZ2YWwiIG5hbWU9ImNsYXNzT2ZbamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uXSI+Li4uPC9zcGFuPgorICAgIDwvc3Bhbj4pPC9zcGFuPgorICAgICAgICAgICAgICAKKyAgICAgICAgPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiN3YWl0IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0id2FpdCh4JDE6TG9uZyx4JDI6SW50KTpVbml0Ij48L2E+CisgICAgICA8YSBpZD0id2FpdChMb25nLEludCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+d2FpdDwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuTG9uZyI+TG9uZzwvc3Bhbj48L3NwYW4+LCA8c3BhbiBuYW1lPSJhcmcxIj5hcmcxOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5JbnQiPkludDwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48ZHQ+QW5ub3RhdGlvbnM8L2R0PjxkZD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+QHRocm93czwvc3Bhbj48c3BhbiBjbGFzcz0iYXJncyI+KDxzcGFuPgorICAgICAgCisgICAgICA8c3BhbiBjbGFzcz0iZGVmdmFsIiBuYW1lPSJjbGFzc09mW2phdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbl0iPi4uLjwvc3Bhbj4KKyAgICA8L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgICAgICAgCisgICAgICAgIDwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjd2FpdCIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IndhaXQoeCQxOkxvbmcpOlVuaXQiPjwvYT4KKyAgICAgIDxhIGlkPSJ3YWl0KExvbmcpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPndhaXQ8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkxvbmciPkxvbmc8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Vbml0Ij5Vbml0PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PGR0PkFubm90YXRpb25zPC9kdD48ZGQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPkB0aHJvd3M8L3NwYW4+PHNwYW4gY2xhc3M9ImFyZ3MiPig8c3Bhbj4KKyAgICAgIAorICAgICAgPHNwYW4gY2xhc3M9ImRlZnZhbCIgbmFtZT0iY2xhc3NPZltqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb25dIj4uLi48L3NwYW4+CisgICAgPC9zcGFuPik8L3NwYW4+CisgICAgICAgICAgICAgIAorICAgICAgICA8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48L29sPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgCisKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9ImluaGVyaXRlZE1lbWJlcnMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwYXJlbnQiIG5hbWU9Im9yZy5hcGFjaGUuaGFkb29wLmhpdmUucWwuaG9va3MuRXhlY3V0ZVdpdGhIb29rQ29udGV4dCI+CisgICAgICAgICAgICAgIDxoMz5Jbmhlcml0ZWQgZnJvbSA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLmhvb2tzLkV4ZWN1dGVXaXRoSG9va0NvbnRleHQiPkV4ZWN1dGVXaXRoSG9va0NvbnRleHQ8L3NwYW4+PC9oMz4KKyAgICAgICAgICAgIDwvZGl2PjxkaXYgY2xhc3M9InBhcmVudCIgbmFtZT0ib3JnLmFwYWNoZS5oYWRvb3AuaGl2ZS5xbC5ob29rcy5Ib29rIj4KKyAgICAgICAgICAgICAgPGgzPkluaGVyaXRlZCBmcm9tIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuaGFkb29wLmhpdmUucWwuaG9va3MuSG9vayI+SG9vazwvc3Bhbj48L2gzPgorICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzcz0icGFyZW50IiBuYW1lPSJzY2FsYS5BbnlSZWYiPgorICAgICAgICAgICAgICA8aDM+SW5oZXJpdGVkIGZyb20gPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9oMz4KKyAgICAgICAgICAgIDwvZGl2PjxkaXYgY2xhc3M9InBhcmVudCIgbmFtZT0ic2NhbGEuQW55Ij4KKyAgICAgICAgICAgICAgPGgzPkluaGVyaXRlZCBmcm9tIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvaDM+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9Imdyb3VwZWRNZW1iZXJzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXAiIG5hbWU9IlVuZ3JvdXBlZCI+CisgICAgICAgICAgICAgIDxoMz5Vbmdyb3VwZWQ8L2gzPgorICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKworICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRvb2x0aXAiPjwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJmb290ZXIiPiAgPC9kaXY+CisgICAgICA8c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0ianF1ZXJ5LWpzIiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktdWktanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL2pxdWVyeS11aS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRvb2xzLXRvb2x0aXAtanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL3Rvb2xzLnRvb2x0aXAuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJ0ZW1wbGF0ZS1qcyIgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvdGVtcGxhdGUuanMiPjwvc2NyaXB0PgorICAgIDwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9ob29rL3BhY2thZ2UuaHRtbCBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3Mvb3JnL2FwYWNoZS9hdGxhcy9oaXZlL2hvb2svcGFja2FnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ0NjFhNDkKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9ob29rL3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDEwNSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICA8dGl0bGU+aG9vayAtIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUtaW5jdWJhdGluZyBBUEkgLSBvcmcuYXBhY2hlLmF0bGFzLmhpdmUuaG9vazwvdGl0bGU+CisgICAgICAgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Imhvb2sgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IC0gaW5jdWJhdGluZyBBUEkgLSBvcmcuYXBhY2hlLmF0bGFzLmhpdmUuaG9vayIgLz4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iaG9vayBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IGluY3ViYXRpbmcgQVBJIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rIiAvPgorICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgorICAgICAgICAgIAorICAgICAgPGxpbmsgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbGliL3RlbXBsYXRlLmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxsaW5rIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2xpYi9kaWFncmFtcy5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGlkPSJkaWFncmFtcy1jc3MiIC8+CisgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgICBpZih0b3AgPT09IHNlbGYpIHsKKyAgICAgICAgICAgIHZhciB1cmwgPSAnLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCc7CisgICAgICAgICAgICB2YXIgaGFzaCA9ICdvcmcuYXBhY2hlLmF0bGFzLmhpdmUuaG9vay5wYWNrYWdlJzsKKyAgICAgICAgICAgIHZhciBhbmNob3IgPSB3aW5kb3cubG9jYXRpb24uaGFzaDsKKyAgICAgICAgICAgIHZhciBhbmNob3Jfb3B0ID0gJyc7CisgICAgICAgICAgICBpZiAoYW5jaG9yLmxlbmd0aCA+PSAxKQorICAgICAgICAgICAgICBhbmNob3Jfb3B0ID0gJ0AnICsgYW5jaG9yLnN1YnN0cmluZygxKTsKKyAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsICsgJyMnICsgaGFzaCArIGFuY2hvcl9vcHQ7CisgICAgICAgICB9CisgICAJICA8L3NjcmlwdD4KKyAgICAKKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keSBjbGFzcz0idmFsdWUiPgorICAgICAgPGRpdiBpZD0iZGVmaW5pdGlvbiI+CisgICAgICAgIDxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvcGFja2FnZV9iaWcucG5nIiAvPgorICAgICAgICA8cCBpZD0ib3duZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnIj5vcmc8L2E+LjxhIGhyZWY9Ii4uLy4uLy4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZSI+YXBhY2hlPC9hPi48YSBocmVmPSIuLi8uLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMiPmF0bGFzPC9hPi48YSBocmVmPSIuLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZSI+aGl2ZTwvYT48L3A+CisgICAgICAgIDxoMT5ob29rPC9oMT4KKyAgICAgIDwvZGl2PgorCisgICAgICA8aDQgaWQ9InNpZ25hdHVyZSIgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+cGFja2FnZTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+aG9vazwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICAgICAgICA8ZGl2IGlkPSJjb21tZW50IiBjbGFzcz0iZnVsbGNvbW1lbnR0b3AiPjwvZGl2PgorICAgICAgICAKKworICAgICAgPGRpdiBpZD0ibWJyc2VsIj4KKyAgICAgICAgPGRpdiBpZD0idGV4dGZpbHRlciI+PHNwYW4gY2xhc3M9InByZSI+PC9zcGFuPjxzcGFuIGNsYXNzPSJpbnB1dCI+PGlucHV0IGlkPSJtYnJzZWwtaW5wdXQiIHR5cGU9InRleHQiIGFjY2Vzc2tleT0iLyIgLz48L3NwYW4+PHNwYW4gY2xhc3M9InBvc3QiPjwvc3Bhbj48L2Rpdj4KKyAgICAgICAgCisgICAgICAgIAorICAgICAgICA8ZGl2IGlkPSJ2aXNibCI+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+VmlzaWJpbGl0eTwvc3Bhbj4KKyAgICAgICAgICAgIDxvbD48bGkgY2xhc3M9InB1YmxpYyBpbiI+PHNwYW4+UHVibGljPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJhbGwgb3V0Ij48c3Bhbj5BbGw8L3NwYW4+PC9saT48L29sPgorICAgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRlbXBsYXRlIj4KKyAgICAgICAgPGRpdiBpZD0iYWxsTWVtYmVycyI+CisgICAgICAgIAorCisgICAgICAgIDxkaXYgaWQ9InR5cGVzIiBjbGFzcz0idHlwZXMgbWVtYmVycyI+CisgICAgICAgICAgICAgIDxoMz5UeXBlIE1lbWJlcnM8L2gzPgorICAgICAgICAgICAgICA8b2w+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rLkhpdmVIb29rIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJIaXZlSG9va2V4dGVuZHNFeGVjdXRlV2l0aEhvb2tDb250ZXh0Ij48L2E+CisgICAgICA8YSBpZD0iSGl2ZUhvb2s6SGl2ZUhvb2siPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5jbGFzczwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8YSBocmVmPSJIaXZlSG9vay5odG1sIj48c3BhbiBjbGFzcz0ibmFtZSI+SGl2ZUhvb2s8L3NwYW4+PC9hPjxzcGFuIGNsYXNzPSJyZXN1bHQiPiBleHRlbmRzIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuaGFkb29wLmhpdmUucWwuaG9va3MuRXhlY3V0ZVdpdGhIb29rQ29udGV4dCI+RXhlY3V0ZVdpdGhIb29rQ29udGV4dDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48L29sPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgCisKKyAgICAgICAgCisKKyAgICAgICAgCisKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9ImluaGVyaXRlZE1lbWJlcnMiPgorICAgICAgICAKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9Imdyb3VwZWRNZW1iZXJzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXAiIG5hbWU9IlVuZ3JvdXBlZCI+CisgICAgICAgICAgICAgIDxoMz5Vbmdyb3VwZWQ8L2gzPgorICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKworICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRvb2x0aXAiPjwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJmb290ZXIiPiAgPC9kaXY+CisgICAgICA8c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0ianF1ZXJ5LWpzIiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktdWktanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL2pxdWVyeS11aS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRvb2xzLXRvb2x0aXAtanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL3Rvb2xzLnRvb2x0aXAuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJ0ZW1wbGF0ZS1qcyIgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvdGVtcGxhdGUuanMiPjwvc2NyaXB0PgorICAgIDwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9tb2RlbC9IaXZlRGF0YU1vZGVsR2VuZXJhdG9yLmh0bWwgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9tb2RlbC9IaXZlRGF0YU1vZGVsR2VuZXJhdG9yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDcwN2Y4YgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3Mvb3JnL2FwYWNoZS9hdGxhcy9oaXZlL21vZGVsL0hpdmVEYXRhTW9kZWxHZW5lcmF0b3IuaHRtbApAQCAtMCwwICsxLDU0MiBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICA8dGl0bGU+SGl2ZURhdGFNb2RlbEdlbmVyYXRvciAtIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUtaW5jdWJhdGluZyBBUEkgLSBvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvcjwvdGl0bGU+CisgICAgICAgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IC0gaW5jdWJhdGluZyBBUEkgLSBvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvciIgLz4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iSGl2ZURhdGFNb2RlbEdlbmVyYXRvciBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IGluY3ViYXRpbmcgQVBJIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yIiAvPgorICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgorICAgICAgICAgIAorICAgICAgPGxpbmsgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbGliL3RlbXBsYXRlLmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxsaW5rIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2xpYi9kaWFncmFtcy5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGlkPSJkaWFncmFtcy1jc3MiIC8+CisgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgICBpZih0b3AgPT09IHNlbGYpIHsKKyAgICAgICAgICAgIHZhciB1cmwgPSAnLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCc7CisgICAgICAgICAgICB2YXIgaGFzaCA9ICdvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvcic7CisgICAgICAgICAgICB2YXIgYW5jaG9yID0gd2luZG93LmxvY2F0aW9uLmhhc2g7CisgICAgICAgICAgICB2YXIgYW5jaG9yX29wdCA9ICcnOworICAgICAgICAgICAgaWYgKGFuY2hvci5sZW5ndGggPj0gMSkKKyAgICAgICAgICAgICAgYW5jaG9yX29wdCA9ICdAJyArIGFuY2hvci5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybCArICcjJyArIGhhc2ggKyBhbmNob3Jfb3B0OworICAgICAgICAgfQorICAgCSAgPC9zY3JpcHQ+CisgICAgCisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHkgY2xhc3M9InR5cGUiPgorICAgICAgPGRpdiBpZD0iZGVmaW5pdGlvbiI+CisgICAgICAgIDxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvY2xhc3NfYmlnLnBuZyIgLz4KKyAgICAgICAgPHAgaWQ9Im93bmVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZyI+b3JnPC9hPi48YSBocmVmPSIuLi8uLi8uLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUiPmFwYWNoZTwvYT4uPGEgaHJlZj0iLi4vLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzIj5hdGxhczwvYT4uPGEgaHJlZj0iLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUiPmhpdmU8L2E+LjxhIGhyZWY9InBhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsIj5tb2RlbDwvYT48L3A+CisgICAgICAgIDxoMT5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yPC9oMT4KKyAgICAgIDwvZGl2PgorCisgICAgICA8aDQgaWQ9InNpZ25hdHVyZSIgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+Y2xhc3M8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPkhpdmVEYXRhTW9kZWxHZW5lcmF0b3I8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+IGV4dGVuZHMgPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgICAgICAgIDxkaXYgaWQ9ImNvbW1lbnQiIGNsYXNzPSJmdWxsY29tbWVudHRvcCI+PGRpdiBjbGFzcz0idG9nZ2xlQ29udGFpbmVyIGJsb2NrIj4KKyAgICAgICAgICA8c3BhbiBjbGFzcz0idG9nZ2xlIj5MaW5lYXIgU3VwZXJ0eXBlczwvc3Bhbj4KKyAgICAgICAgICA8ZGl2IGNsYXNzPSJzdXBlclR5cGVzIGhpZGRlbkNvbnRlbnQiPjxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPiwgPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55Ij5Bbnk8L3NwYW4+PC9kaXY+CisgICAgICAgIDwvZGl2PjwvZGl2PgorICAgICAgICAKKworICAgICAgPGRpdiBpZD0ibWJyc2VsIj4KKyAgICAgICAgPGRpdiBpZD0idGV4dGZpbHRlciI+PHNwYW4gY2xhc3M9InByZSI+PC9zcGFuPjxzcGFuIGNsYXNzPSJpbnB1dCI+PGlucHV0IGlkPSJtYnJzZWwtaW5wdXQiIHR5cGU9InRleHQiIGFjY2Vzc2tleT0iLyIgLz48L3NwYW4+PHNwYW4gY2xhc3M9InBvc3QiPjwvc3Bhbj48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0ib3JkZXIiPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+T3JkZXJpbmc8L3NwYW4+CisgICAgICAgICAgICAgIDxvbD4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImFscGhhIGluIj48c3Bhbj5BbHBoYWJldGljPC9zcGFuPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJpbmhlcml0IG91dCI+PHNwYW4+QnkgaW5oZXJpdGFuY2U8L3NwYW4+PC9saT4KKyAgICAgICAgICAgICAgPC9vbD4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJhbmNlc3RvcnMiPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWx0ZXJ0eXBlIj5Jbmhlcml0ZWQ8YnIgLz4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPG9sIGlkPSJsaW5lYXJpemF0aW9uIj4KKyAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaW4iIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yIj48c3Bhbj5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJpbiIgbmFtZT0ic2NhbGEuQW55UmVmIj48c3Bhbj5BbnlSZWY8L3NwYW4+PC9saT48bGkgY2xhc3M9ImluIiBuYW1lPSJzY2FsYS5BbnkiPjxzcGFuPkFueTwvc3Bhbj48L2xpPgorICAgICAgICAgICAgICAgIDwvb2w+CisgICAgICAgICAgICAgIDwvZGl2PjxkaXYgaWQ9ImFuY2VzdG9ycyI+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+PC9zcGFuPgorICAgICAgICAgICAgPG9sPgorICAgICAgICAgICAgICA8bGkgY2xhc3M9ImhpZGVhbGwgb3V0Ij48c3Bhbj5IaWRlIEFsbDwvc3Bhbj48L2xpPgorICAgICAgICAgICAgICA8bGkgY2xhc3M9InNob3dhbGwgaW4iPjxzcGFuPlNob3cgYWxsPC9zcGFuPjwvbGk+CisgICAgICAgICAgICA8L29sPgorICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2RvY3Muc2NhbGEtbGFuZy5vcmcvb3ZlcnZpZXdzL3NjYWxhZG9jL3VzYWdlLmh0bWwjbWVtYmVycyIgdGFyZ2V0PSJfYmxhbmsiPkxlYXJuIG1vcmUgYWJvdXQgbWVtYmVyIHNlbGVjdGlvbjwvYT4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0idmlzYmwiPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbHRlcnR5cGUiPlZpc2liaWxpdHk8L3NwYW4+CisgICAgICAgICAgICA8b2w+PGxpIGNsYXNzPSJwdWJsaWMgaW4iPjxzcGFuPlB1YmxpYzwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iYWxsIG91dCI+PHNwYW4+QWxsPC9zcGFuPjwvbGk+PC9vbD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJ0ZW1wbGF0ZSI+CisgICAgICAgIDxkaXYgaWQ9ImFsbE1lbWJlcnMiPgorICAgICAgICA8ZGl2IGlkPSJjb25zdHJ1Y3RvcnMiIGNsYXNzPSJtZW1iZXJzIj4KKyAgICAgICAgICAgICAgPGgzPkluc3RhbmNlIENvbnN0cnVjdG9yczwvaDM+CisgICAgICAgICAgICAgIDxvbD48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IjJmx0O2luaXQmZ3Q7IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSImbHQ7aW5pdCZndDsoKTpvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvciI+PC9hPgorICAgICAgPGEgaWQ9IiZsdDtpbml0Jmd0OzpIaXZlRGF0YU1vZGVsR2VuZXJhdG9yIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+bmV3PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PC9vbD4KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgIAorCisgICAgICAgIAorCisgICAgICAgIDxkaXYgaWQ9InZhbHVlcyIgY2xhc3M9InZhbHVlcyBtZW1iZXJzIj4KKyAgICAgICAgICAgICAgPGgzPlZhbHVlIE1lbWJlcnM8L2gzPgorICAgICAgICAgICAgICA8b2w+PGxpIG5hbWU9InNjYWxhLkFueVJlZiMhPSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IiE9KHgkMTpBbnlSZWYpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSIhPShBbnlSZWYpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gdGl0bGU9Imd0NHM6ICRiYW5nJGVxIiBjbGFzcz0ibmFtZSI+IT08L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55IyE9IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iIT0oeCQxOkFueSk6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9IiE9KEFueSk6Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiB0aXRsZT0iZ3Q0czogJGJhbmckZXEiIGNsYXNzPSJuYW1lIj4hPTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55Ij5Bbnk8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjIyMiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSIjIygpOkludCI+PC9hPgorICAgICAgPGEgaWQ9IiMjKCk6SW50Ij48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIHRpdGxlPSJndDRzOiAkaGFzaCRoYXNoIiBjbGFzcz0ibmFtZSI+IyM8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5JbnQiPkludDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWYg4oaSIEFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjPT0iIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSI9PSh4JDE6QW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0iPT0oQW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIHRpdGxlPSJndDRzOiAkZXEkZXEiIGNsYXNzPSJuYW1lIj49PTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnkjPT0iIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSI9PSh4JDE6QW55KTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0iPT0oQW55KTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIHRpdGxlPSJndDRzOiAkZXEkZXEiIGNsYXNzPSJuYW1lIj49PTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55Ij5Bbnk8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnkjYXNJbnN0YW5jZU9mIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iYXNJbnN0YW5jZU9mW1QwXTpUMCI+PC9hPgorICAgICAgPGEgaWQ9ImFzSW5zdGFuY2VPZltUMF06VDAiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmFzSW5zdGFuY2VPZjwvc3Bhbj48c3BhbiBjbGFzcz0idHBhcmFtcyI+WzxzcGFuIG5hbWU9IlQwIj5UMDwvc3Bhbj5dPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55LmFzSW5zdGFuY2VPZi5UMCI+VDA8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55PC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNjbG9uZSIgdmlzYmw9InBydCIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImNsb25lKCk6T2JqZWN0Ij48L2E+CisgICAgICA8YSBpZD0iY2xvbmUoKTpBbnlSZWYiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmNsb25lPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+QXR0cmlidXRlczwvZHQ+PGRkPnByb3RlY3RlZFs8YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9qYXZhJGxhbmcuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5sYW5nIj5qYXZhLmxhbmc8L2E+XSA8L2RkPjxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjxkdD5Bbm5vdGF0aW9uczwvZHQ+PGRkPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5AdGhyb3dzPC9zcGFuPjxzcGFuIGNsYXNzPSJhcmdzIj4oPHNwYW4+CisgICAgICAKKyAgICAgIDxzcGFuIGNsYXNzPSJkZWZ2YWwiIG5hbWU9ImNsYXNzT2ZbamF2YS5sYW5nLkNsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uXSI+Li4uPC9zcGFuPgorICAgIDwvc3Bhbj4pPC9zcGFuPgorICAgICAgICAgICAgICAKKyAgICAgICAgPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yI2NyZWF0ZURhdGFNb2RlbCIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iY3JlYXRlRGF0YU1vZGVsKCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9ImNyZWF0ZURhdGFNb2RlbCgpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmNyZWF0ZURhdGFNb2RlbDwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNlcSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImVxKHgkMTpBbnlSZWYpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSJlcShBbnlSZWYpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmVxPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJhcmcwIj5hcmcwOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnlSZWYiPkFueVJlZjwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkJvb2xlYW4iPkJvb2xlYW48L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNlcXVhbHMiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJlcXVhbHMoeCQxOkFueSk6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9ImVxdWFscyhBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmVxdWFsczwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55Ij5Bbnk8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZiDihpIgQW55PC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNmaW5hbGl6ZSIgdmlzYmw9InBydCIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImZpbmFsaXplKCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9ImZpbmFsaXplKCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+ZmluYWxpemU8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Vbml0Ij5Vbml0PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkF0dHJpYnV0ZXM8L2R0PjxkZD5wcm90ZWN0ZWRbPGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vamF2YSRsYW5nLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZyI+amF2YS5sYW5nPC9hPl0gPC9kZD48ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48ZHQ+QW5ub3RhdGlvbnM8L2R0PjxkZD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+QHRocm93czwvc3Bhbj48c3BhbiBjbGFzcz0iYXJncyI+KDxzcGFuPgorICAgICAgCisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj5jbGFzc09mW2phdmEubGFuZy5UaHJvd2FibGVdPC9zcGFuPgorICAgIDwvc3Bhbj4pPC9zcGFuPgorICAgICAgICAgICAgICAKKyAgICAgICAgPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNnZXRDbGFzcyIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImdldENsYXNzKCk6Q2xhc3NbX10iPjwvYT4KKyAgICAgIDxhIGlkPSJnZXRDbGFzcygpOkNsYXNzW19dIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5nZXRDbGFzczwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5DbGFzcyI+Q2xhc3M8L3NwYW4+W19dPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IjZ2V0Q2xhc3NUeXBlRGVmaW5pdGlvbnMiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImdldENsYXNzVHlwZURlZmluaXRpb25zKCk6Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFibGVMaXN0W29yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS50eXBlcy5IaWVyYXJjaGljYWxUeXBlRGVmaW5pdGlvbltvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0udHlwZXMuQ2xhc3NUeXBlXV0iPjwvYT4KKyAgICAgIDxhIGlkPSJnZXRDbGFzc1R5cGVEZWZpbml0aW9ucygpOkltbXV0YWJsZUxpc3RbSGllcmFyY2hpY2FsVHlwZURlZmluaXRpb25bQ2xhc3NUeXBlXV0iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmdldENsYXNzVHlwZURlZmluaXRpb25zPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iY29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFibGVMaXN0Ij5JbW11dGFibGVMaXN0PC9zcGFuPls8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0udHlwZXMuSGllcmFyY2hpY2FsVHlwZURlZmluaXRpb24iPkhpZXJhcmNoaWNhbFR5cGVEZWZpbml0aW9uPC9zcGFuPls8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0udHlwZXMuQ2xhc3NUeXBlIj5DbGFzc1R5cGU8L3NwYW4+XV08L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IjZ2V0RGF0YU1vZGVsQXNKU09OIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJnZXREYXRhTW9kZWxBc0pTT04oKTpTdHJpbmciPjwvYT4KKyAgICAgIDxhIGlkPSJnZXREYXRhTW9kZWxBc0pTT04oKTpTdHJpbmciPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmdldERhdGFNb2RlbEFzSlNPTjwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5TdHJpbmciPlN0cmluZzwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IjZ2V0RW51bVR5cGVEZWZpbml0aW9ucyIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iZ2V0RW51bVR5cGVEZWZpbml0aW9ucygpOmNvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuSW1tdXRhYmxlTGlzdFtvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0udHlwZXMuRW51bVR5cGVEZWZpbml0aW9uXSI+PC9hPgorICAgICAgPGEgaWQ9ImdldEVudW1UeXBlRGVmaW5pdGlvbnMoKTpJbW11dGFibGVMaXN0W0VudW1UeXBlRGVmaW5pdGlvbl0iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmdldEVudW1UeXBlRGVmaW5pdGlvbnM8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZUxpc3QiPkltbXV0YWJsZUxpc3Q8L3NwYW4+WzxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS50eXBlcy5FbnVtVHlwZURlZmluaXRpb24iPkVudW1UeXBlRGVmaW5pdGlvbjwvc3Bhbj5dPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yI2dldE1vZGVsQXNKc29uIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJnZXRNb2RlbEFzSnNvbigpOlN0cmluZyI+PC9hPgorICAgICAgPGEgaWQ9ImdldE1vZGVsQXNKc29uKCk6U3RyaW5nIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5nZXRNb2RlbEFzSnNvbjwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5TdHJpbmciPlN0cmluZzwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IjZ2V0U3RydWN0VHlwZURlZmluaXRpb25zIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJnZXRTdHJ1Y3RUeXBlRGVmaW5pdGlvbnMoKTpjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZUxpc3Rbb3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLnR5cGVzLlN0cnVjdFR5cGVEZWZpbml0aW9uXSI+PC9hPgorICAgICAgPGEgaWQ9ImdldFN0cnVjdFR5cGVEZWZpbml0aW9ucygpOkltbXV0YWJsZUxpc3RbU3RydWN0VHlwZURlZmluaXRpb25dIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5nZXRTdHJ1Y3RUeXBlRGVmaW5pdGlvbnM8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZUxpc3QiPkltbXV0YWJsZUxpc3Q8L3NwYW4+WzxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS50eXBlcy5TdHJ1Y3RUeXBlRGVmaW5pdGlvbiI+U3RydWN0VHlwZURlZmluaXRpb248L3NwYW4+XTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvciNnZXRUcmFpdFR5cGVEZWZpbml0aW9ucyIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iZ2V0VHJhaXRUeXBlRGVmaW5pdGlvbnMoKTpjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZUxpc3Rbb3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLnR5cGVzLkhpZXJhcmNoaWNhbFR5cGVEZWZpbml0aW9uW29yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS50eXBlcy5UcmFpdFR5cGVdXSI+PC9hPgorICAgICAgPGEgaWQ9ImdldFRyYWl0VHlwZURlZmluaXRpb25zKCk6SW1tdXRhYmxlTGlzdFtIaWVyYXJjaGljYWxUeXBlRGVmaW5pdGlvbltUcmFpdFR5cGVdXSI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+Z2V0VHJhaXRUeXBlRGVmaW5pdGlvbnM8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZUxpc3QiPkltbXV0YWJsZUxpc3Q8L3NwYW4+WzxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS50eXBlcy5IaWVyYXJjaGljYWxUeXBlRGVmaW5pdGlvbiI+SGllcmFyY2hpY2FsVHlwZURlZmluaXRpb248L3NwYW4+WzxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS50eXBlcy5UcmFpdFR5cGUiPlRyYWl0VHlwZTwvc3Bhbj5dXTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvciNnZXRUeXBlc0RlZiIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iZ2V0VHlwZXNEZWYoKTpvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0uVHlwZXNEZWYiPjwvYT4KKyAgICAgIDxhIGlkPSJnZXRUeXBlc0RlZigpOlR5cGVzRGVmIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5nZXRUeXBlc0RlZjwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS5UeXBlc0RlZiI+VHlwZXNEZWY8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNoYXNoQ29kZSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9Imhhc2hDb2RlKCk6SW50Ij48L2E+CisgICAgICA8YSBpZD0iaGFzaENvZGUoKTpJbnQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmhhc2hDb2RlPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuSW50Ij5JbnQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55I2lzSW5zdGFuY2VPZiIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImlzSW5zdGFuY2VPZltUMF06Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9ImlzSW5zdGFuY2VPZltUMF06Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+aXNJbnN0YW5jZU9mPC9zcGFuPjxzcGFuIGNsYXNzPSJ0cGFyYW1zIj5bPHNwYW4gbmFtZT0iVDAiPlQwPC9zcGFuPl08L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjbmUiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJuZSh4JDE6QW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0ibmUoQW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5uZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjbm90aWZ5IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0ibm90aWZ5KCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9Im5vdGlmeSgpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPm5vdGlmeTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNub3RpZnlBbGwiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJub3RpZnlBbGwoKTpVbml0Ij48L2E+CisgICAgICA8YSBpZD0ibm90aWZ5QWxsKCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+bm90aWZ5QWxsPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI3N5bmNocm9uaXplZCIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9InN5bmNocm9uaXplZFtUMF0oeCQxOj0mZ3Q7VDApOlQwIj48L2E+CisgICAgICA8YSBpZD0ic3luY2hyb25pemVkW1QwXSjih5JUMCk6VDAiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnN5bmNocm9uaXplZDwvc3Bhbj48c3BhbiBjbGFzcz0idHBhcmFtcyI+WzxzcGFuIG5hbWU9IlQwIj5UMDwvc3Bhbj5dPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJhcmcwIj5hcmcwOiDih5IgPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5sYW5nLkFueVJlZi5zeW5jaHJvbml6ZWQuVDAiPlQwPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5sYW5nLkFueVJlZi5zeW5jaHJvbml6ZWQuVDAiPlQwPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjdG9TdHJpbmciIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJ0b1N0cmluZygpOlN0cmluZyI+PC9hPgorICAgICAgPGEgaWQ9InRvU3RyaW5nKCk6U3RyaW5nIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj50b1N0cmluZzwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5TdHJpbmciPlN0cmluZzwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWYg4oaSIEFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjd2FpdCIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IndhaXQoKTpVbml0Ij48L2E+CisgICAgICA8YSBpZD0id2FpdCgpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPndhaXQ8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Vbml0Ij5Vbml0PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PGR0PkFubm90YXRpb25zPC9kdD48ZGQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPkB0aHJvd3M8L3NwYW4+PHNwYW4gY2xhc3M9ImFyZ3MiPig8c3Bhbj4KKyAgICAgIAorICAgICAgPHNwYW4gY2xhc3M9ImRlZnZhbCIgbmFtZT0iY2xhc3NPZltqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb25dIj4uLi48L3NwYW4+CisgICAgPC9zcGFuPik8L3NwYW4+CisgICAgICAgICAgICAgIAorICAgICAgICA8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI3dhaXQiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJ3YWl0KHgkMTpMb25nLHgkMjpJbnQpOlVuaXQiPjwvYT4KKyAgICAgIDxhIGlkPSJ3YWl0KExvbmcsSW50KTpVbml0Ij48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj53YWl0PC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJhcmcwIj5hcmcwOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Mb25nIj5Mb25nPC9zcGFuPjwvc3Bhbj4sIDxzcGFuIG5hbWU9ImFyZzEiPmFyZzE6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkludCI+SW50PC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjxkdD5Bbm5vdGF0aW9uczwvZHQ+PGRkPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5AdGhyb3dzPC9zcGFuPjxzcGFuIGNsYXNzPSJhcmdzIj4oPHNwYW4+CisgICAgICAKKyAgICAgIDxzcGFuIGNsYXNzPSJkZWZ2YWwiIG5hbWU9ImNsYXNzT2ZbamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uXSI+Li4uPC9zcGFuPgorICAgIDwvc3Bhbj4pPC9zcGFuPgorICAgICAgICAgICAgICAKKyAgICAgICAgPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiN3YWl0IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0id2FpdCh4JDE6TG9uZyk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9IndhaXQoTG9uZyk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+d2FpdDwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuTG9uZyI+TG9uZzwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48ZHQ+QW5ub3RhdGlvbnM8L2R0PjxkZD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+QHRocm93czwvc3Bhbj48c3BhbiBjbGFzcz0iYXJncyI+KDxzcGFuPgorICAgICAgCisgICAgICA8c3BhbiBjbGFzcz0iZGVmdmFsIiBuYW1lPSJjbGFzc09mW2phdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbl0iPi4uLjwvc3Bhbj4KKyAgICA8L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgICAgICAgCisgICAgICAgIDwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjwvb2w+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAKKworICAgICAgICAKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0iaW5oZXJpdGVkTWVtYmVycyI+CisgICAgICAgIDxkaXYgY2xhc3M9InBhcmVudCIgbmFtZT0ic2NhbGEuQW55UmVmIj4KKyAgICAgICAgICAgICAgPGgzPkluaGVyaXRlZCBmcm9tIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvaDM+CisgICAgICAgICAgICA8L2Rpdj48ZGl2IGNsYXNzPSJwYXJlbnQiIG5hbWU9InNjYWxhLkFueSI+CisgICAgICAgICAgICAgIDxoMz5Jbmhlcml0ZWQgZnJvbSA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnkiPkFueTwvc3Bhbj48L2gzPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIAorICAgICAgICA8L2Rpdj4KKworICAgICAgICA8ZGl2IGlkPSJncm91cGVkTWVtYmVycyI+CisgICAgICAgIDxkaXYgY2xhc3M9Imdyb3VwIiBuYW1lPSJVbmdyb3VwZWQiPgorICAgICAgICAgICAgICA8aDM+VW5ncm91cGVkPC9oMz4KKyAgICAgICAgICAgICAgCisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisKKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJ0b29sdGlwIj48L2Rpdj4KKworICAgICAgPGRpdiBpZD0iZm9vdGVyIj4gIDwvZGl2PgorICAgICAgPHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9ImpxdWVyeS1qcyIgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvanF1ZXJ5LmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0ianF1ZXJ5LXVpLWpzIiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi9qcXVlcnktdWkuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJ0b29scy10b29sdGlwLWpzIiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi90b29scy50b29sdGlwLmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0idGVtcGxhdGUtanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL3RlbXBsYXRlLmpzIj48L3NjcmlwdD4KKyAgICA8L2JvZHk+CisgICAgICA8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvbW9kZWwvSGl2ZURhdGFUeXBlcy5odG1sIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvbW9kZWwvSGl2ZURhdGFUeXBlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFkYThhOGQKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9tb2RlbC9IaXZlRGF0YVR5cGVzLmh0bWwKQEAgLTAsMCArMSw1MDMgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgPHRpdGxlPkhpdmVEYXRhVHlwZXMgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41LWluY3ViYXRpbmcgQVBJIC0gb3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhVHlwZXM8L3RpdGxlPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJIaXZlRGF0YVR5cGVzIC0gQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNSAtIGluY3ViYXRpbmcgQVBJIC0gb3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhVHlwZXMiIC8+CisgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9IkhpdmVEYXRhVHlwZXMgQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNSBpbmN1YmF0aW5nIEFQSSBvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFUeXBlcyIgLz4KKyAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KKyAgICAgICAgICAKKyAgICAgIDxsaW5rIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2xpYi90ZW1wbGF0ZS5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+CisgICAgICA8bGluayBocmVmPSIuLi8uLi8uLi8uLi8uLi9saWIvZGlhZ3JhbXMuY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBpZD0iZGlhZ3JhbXMtY3NzIiAvPgorICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICAgaWYodG9wID09PSBzZWxmKSB7CisgICAgICAgICAgICB2YXIgdXJsID0gJy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwnOworICAgICAgICAgICAgdmFyIGhhc2ggPSAnb3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhVHlwZXMnOworICAgICAgICAgICAgdmFyIGFuY2hvciA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworICAgICAgICAgICAgdmFyIGFuY2hvcl9vcHQgPSAnJzsKKyAgICAgICAgICAgIGlmIChhbmNob3IubGVuZ3RoID49IDEpCisgICAgICAgICAgICAgIGFuY2hvcl9vcHQgPSAnQCcgKyBhbmNob3Iuc3Vic3RyaW5nKDEpOworICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmwgKyAnIycgKyBoYXNoICsgYW5jaG9yX29wdDsKKyAgICAgICAgIH0KKyAgIAkgIDwvc2NyaXB0PgorICAgIAorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ0eXBlIj4KKyAgICAgIDxkaXYgaWQ9ImRlZmluaXRpb24iPgorICAgICAgICA8aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL2NsYXNzX2JpZy5wbmciIC8+CisgICAgICAgIDxwIGlkPSJvd25lciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmciPm9yZzwvYT4uPGEgaHJlZj0iLi4vLi4vLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlIj5hcGFjaGU8L2E+LjxhIGhyZWY9Ii4uLy4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcyI+YXRsYXM8L2E+LjxhIGhyZWY9Ii4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlIj5oaXZlPC9hPi48YSBocmVmPSJwYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbCI+bW9kZWw8L2E+PC9wPgorICAgICAgICA8aDE+SGl2ZURhdGFUeXBlczwvaDE+CisgICAgICA8L2Rpdj4KKworICAgICAgPGg0IGlkPSJzaWduYXR1cmUiIGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmNsYXNzPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5IaXZlRGF0YVR5cGVzPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPiBleHRlbmRzIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5FbnVtIj5FbnVtPC9zcGFuPls8YSBocmVmPSIiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzIj5IaXZlRGF0YVR5cGVzPC9hPl08L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgICAgICAgPGRpdiBpZD0iY29tbWVudCIgY2xhc3M9ImZ1bGxjb21tZW50dG9wIj48ZGl2IGNsYXNzPSJ0b2dnbGVDb250YWluZXIgYmxvY2siPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0b2dnbGUiPkxpbmVhciBTdXBlcnR5cGVzPC9zcGFuPgorICAgICAgICAgIDxkaXYgY2xhc3M9InN1cGVyVHlwZXMgaGlkZGVuQ29udGVudCI+PHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5sYW5nLkVudW0iPkVudW08L3NwYW4+WzxhIGhyZWY9IiIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhVHlwZXMiPkhpdmVEYXRhVHlwZXM8L2E+XSwgPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5pby5TZXJpYWxpemFibGUiPlNlcmlhbGl6YWJsZTwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5Db21wYXJhYmxlIj5Db21wYXJhYmxlPC9zcGFuPls8YSBocmVmPSIiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzIj5IaXZlRGF0YVR5cGVzPC9hPl0sIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPiwgPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55Ij5Bbnk8L3NwYW4+PC9kaXY+CisgICAgICAgIDwvZGl2PjwvZGl2PgorICAgICAgICAKKworICAgICAgPGRpdiBpZD0ibWJyc2VsIj4KKyAgICAgICAgPGRpdiBpZD0idGV4dGZpbHRlciI+PHNwYW4gY2xhc3M9InByZSI+PC9zcGFuPjxzcGFuIGNsYXNzPSJpbnB1dCI+PGlucHV0IGlkPSJtYnJzZWwtaW5wdXQiIHR5cGU9InRleHQiIGFjY2Vzc2tleT0iLyIgLz48L3NwYW4+PHNwYW4gY2xhc3M9InBvc3QiPjwvc3Bhbj48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0ib3JkZXIiPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+T3JkZXJpbmc8L3NwYW4+CisgICAgICAgICAgICAgIDxvbD4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImFscGhhIGluIj48c3Bhbj5BbHBoYWJldGljPC9zcGFuPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJpbmhlcml0IG91dCI+PHNwYW4+QnkgaW5oZXJpdGFuY2U8L3NwYW4+PC9saT4KKyAgICAgICAgICAgICAgPC9vbD4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJhbmNlc3RvcnMiPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWx0ZXJ0eXBlIj5Jbmhlcml0ZWQ8YnIgLz4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPG9sIGlkPSJsaW5lYXJpemF0aW9uIj4KKyAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaW4iIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzIj48c3Bhbj5IaXZlRGF0YVR5cGVzPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJpbiIgbmFtZT0iamF2YS5sYW5nLkVudW0iPjxzcGFuPkVudW08L3NwYW4+PC9saT48bGkgY2xhc3M9ImluIiBuYW1lPSJqYXZhLmlvLlNlcmlhbGl6YWJsZSI+PHNwYW4+U2VyaWFsaXphYmxlPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJpbiIgbmFtZT0iamF2YS5sYW5nLkNvbXBhcmFibGUiPjxzcGFuPkNvbXBhcmFibGU8L3NwYW4+PC9saT48bGkgY2xhc3M9ImluIiBuYW1lPSJzY2FsYS5BbnlSZWYiPjxzcGFuPkFueVJlZjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iaW4iIG5hbWU9InNjYWxhLkFueSI+PHNwYW4+QW55PC9zcGFuPjwvbGk+CisgICAgICAgICAgICAgICAgPC9vbD4KKyAgICAgICAgICAgICAgPC9kaXY+PGRpdiBpZD0iYW5jZXN0b3JzIj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWx0ZXJ0eXBlIj48L3NwYW4+CisgICAgICAgICAgICA8b2w+CisgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaGlkZWFsbCBvdXQiPjxzcGFuPkhpZGUgQWxsPC9zcGFuPjwvbGk+CisgICAgICAgICAgICAgIDxsaSBjbGFzcz0ic2hvd2FsbCBpbiI+PHNwYW4+U2hvdyBhbGw8L3NwYW4+PC9saT4KKyAgICAgICAgICAgIDwvb2w+CisgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vZG9jcy5zY2FsYS1sYW5nLm9yZy9vdmVydmlld3Mvc2NhbGFkb2MvdXNhZ2UuaHRtbCNtZW1iZXJzIiB0YXJnZXQ9Il9ibGFuayI+TGVhcm4gbW9yZSBhYm91dCBtZW1iZXIgc2VsZWN0aW9uPC9hPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJ2aXNibCI+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+VmlzaWJpbGl0eTwvc3Bhbj4KKyAgICAgICAgICAgIDxvbD48bGkgY2xhc3M9InB1YmxpYyBpbiI+PHNwYW4+UHVibGljPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJhbGwgb3V0Ij48c3Bhbj5BbGw8L3NwYW4+PC9saT48L29sPgorICAgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRlbXBsYXRlIj4KKyAgICAgICAgPGRpdiBpZD0iYWxsTWVtYmVycyI+CisgICAgICAgIDxkaXYgaWQ9ImNvbnN0cnVjdG9ycyIgY2xhc3M9Im1lbWJlcnMiPgorICAgICAgICAgICAgICA8aDM+SW5zdGFuY2UgQ29uc3RydWN0b3JzPC9oMz4KKyAgICAgICAgICAgICAgPG9sPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFUeXBlcyMmbHQ7aW5pdCZndDsiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IiZsdDtpbml0Jmd0OygpOm9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzIj48L2E+CisgICAgICA8YSBpZD0iJmx0O2luaXQmZ3Q7OkhpdmVEYXRhVHlwZXMiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5uZXc8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPkhpdmVEYXRhVHlwZXM8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48L29sPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgCisKKyAgICAgICAgCisKKyAgICAgICAgPGRpdiBpZD0idmFsdWVzIiBjbGFzcz0idmFsdWVzIG1lbWJlcnMiPgorICAgICAgICAgICAgICA8aDM+VmFsdWUgTWVtYmVyczwvaDM+CisgICAgICAgICAgICAgIDxvbD48bGkgbmFtZT0ic2NhbGEuQW55UmVmIyE9IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iIT0oeCQxOkFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9IiE9KEFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiB0aXRsZT0iZ3Q0czogJGJhbmckZXEiIGNsYXNzPSJuYW1lIj4hPTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnkjIT0iIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSIhPSh4JDE6QW55KTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0iIT0oQW55KTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIHRpdGxlPSJndDRzOiAkYmFuZyRlcSIgY2xhc3M9Im5hbWUiPiE9PC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJhcmcwIj5hcmcwOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnkiPkFueTwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkJvb2xlYW4iPkJvb2xlYW48L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55PC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiMjIyIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IiMjKCk6SW50Ij48L2E+CisgICAgICA8YSBpZD0iIyMoKTpJbnQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gdGl0bGU9Imd0NHM6ICRoYXNoJGhhc2giIGNsYXNzPSJuYW1lIj4jIzwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkludCI+SW50PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZiDihpIgQW55PC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiM9PSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9Ij09KHgkMTpBbnlSZWYpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSI9PShBbnlSZWYpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gdGl0bGU9Imd0NHM6ICRlcSRlcSIgY2xhc3M9Im5hbWUiPj09PC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJhcmcwIj5hcmcwOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnlSZWYiPkFueVJlZjwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkJvb2xlYW4iPkJvb2xlYW48L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueSM9PSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9Ij09KHgkMTpBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSI9PShBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gdGl0bGU9Imd0NHM6ICRlcSRlcSIgY2xhc3M9Im5hbWUiPj09PC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJhcmcwIj5hcmcwOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnkiPkFueTwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkJvb2xlYW4iPkJvb2xlYW48L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55PC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueSNhc0luc3RhbmNlT2YiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJhc0luc3RhbmNlT2ZbVDBdOlQwIj48L2E+CisgICAgICA8YSBpZD0iYXNJbnN0YW5jZU9mW1QwXTpUMCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+YXNJbnN0YW5jZU9mPC9zcGFuPjxzcGFuIGNsYXNzPSJ0cGFyYW1zIj5bPHNwYW4gbmFtZT0iVDAiPlQwPC9zcGFuPl08L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnkuYXNJbnN0YW5jZU9mLlQwIj5UMDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5Bbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0iamF2YS5sYW5nLkVudW0jY2xvbmUiIHZpc2JsPSJwcnQiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJjbG9uZSgpOk9iamVjdCI+PC9hPgorICAgICAgPGEgaWQ9ImNsb25lKCk6QW55UmVmIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5jbG9uZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkF0dHJpYnV0ZXM8L2R0PjxkZD5wcm90ZWN0ZWRbPGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vamF2YSRsYW5nLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZyI+amF2YS5sYW5nPC9hPl0gPC9kZD48ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+RW51bSDihpIgQW55UmVmPC9kZD48ZHQ+QW5ub3RhdGlvbnM8L2R0PjxkZD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+QHRocm93czwvc3Bhbj48c3BhbiBjbGFzcz0iYXJncyI+KDxzcGFuPgorICAgICAgCisgICAgICA8c3BhbiBjbGFzcz0iZGVmdmFsIiBuYW1lPSJjbGFzc09mW2phdmEubGFuZy5DbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbl0iPi4uLjwvc3Bhbj4KKyAgICA8L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgICAgICAgCisgICAgICAgIDwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJqYXZhLmxhbmcuRW51bSNjb21wYXJlVG8iIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJjb21wYXJlVG8oeCQxOkUpOkludCI+PC9hPgorICAgICAgPGEgaWQ9ImNvbXBhcmVUbyhIaXZlRGF0YVR5cGVzKTpJbnQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmNvbXBhcmVUbzwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPGEgaHJlZj0iIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFUeXBlcyI+SGl2ZURhdGFUeXBlczwvYT48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkludCI+SW50PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkVudW0g4oaSIENvbXBhcmFibGU8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI2VxIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iZXEoeCQxOkFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9ImVxKEFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+ZXE8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0iamF2YS5sYW5nLkVudW0jZXF1YWxzIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iZXF1YWxzKHgkMTpBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSJlcXVhbHMoQW55KTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5lcXVhbHM8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5FbnVtIOKGkiBBbnlSZWYg4oaSIEFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJqYXZhLmxhbmcuRW51bSNmaW5hbGl6ZSIgdmlzYmw9InBydCIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImZpbmFsaXplKCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9ImZpbmFsaXplKCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+ZmluYWxpemU8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Vbml0Ij5Vbml0PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkF0dHJpYnV0ZXM8L2R0PjxkZD5wcm90ZWN0ZWRbPGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vamF2YSRsYW5nLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZyI+amF2YS5sYW5nPC9hPl0gPC9kZD48ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+RW51bSDihpIgQW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNnZXRDbGFzcyIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImdldENsYXNzKCk6Q2xhc3NbX10iPjwvYT4KKyAgICAgIDxhIGlkPSJnZXRDbGFzcygpOkNsYXNzW19dIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5nZXRDbGFzczwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5DbGFzcyI+Q2xhc3M8L3NwYW4+W19dPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0iamF2YS5sYW5nLkVudW0jZ2V0RGVjbGFyaW5nQ2xhc3MiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJnZXREZWNsYXJpbmdDbGFzcygpOkNsYXNzW0VdIj48L2E+CisgICAgICA8YSBpZD0iZ2V0RGVjbGFyaW5nQ2xhc3MoKTpDbGFzc1tIaXZlRGF0YVR5cGVzXSI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+Z2V0RGVjbGFyaW5nQ2xhc3M8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuQ2xhc3MiPkNsYXNzPC9zcGFuPls8YSBocmVmPSIiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzIj5IaXZlRGF0YVR5cGVzPC9hPl08L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5FbnVtPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzI2dldE5hbWUiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImdldE5hbWUoKTpTdHJpbmciPjwvYT4KKyAgICAgIDxhIGlkPSJnZXROYW1lKCk6U3RyaW5nIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5nZXROYW1lPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5sYW5nLlN0cmluZyI+U3RyaW5nPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjxsaSBuYW1lPSJqYXZhLmxhbmcuRW51bSNoYXNoQ29kZSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9Imhhc2hDb2RlKCk6SW50Ij48L2E+CisgICAgICA8YSBpZD0iaGFzaENvZGUoKTpJbnQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmhhc2hDb2RlPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuSW50Ij5JbnQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+RW51bSDihpIgQW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55I2lzSW5zdGFuY2VPZiIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImlzSW5zdGFuY2VPZltUMF06Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9ImlzSW5zdGFuY2VPZltUMF06Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+aXNJbnN0YW5jZU9mPC9zcGFuPjxzcGFuIGNsYXNzPSJ0cGFyYW1zIj5bPHNwYW4gbmFtZT0iVDAiPlQwPC9zcGFuPl08L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJqYXZhLmxhbmcuRW51bSNuYW1lIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0ibmFtZSgpOlN0cmluZyI+PC9hPgorICAgICAgPGEgaWQ9Im5hbWUoKTpTdHJpbmciPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPm5hbWU8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuU3RyaW5nIj5TdHJpbmc8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+RW51bTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjbmUiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJuZSh4JDE6QW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0ibmUoQW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5uZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjbm90aWZ5IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0ibm90aWZ5KCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9Im5vdGlmeSgpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPm5vdGlmeTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNub3RpZnlBbGwiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJub3RpZnlBbGwoKTpVbml0Ij48L2E+CisgICAgICA8YSBpZD0ibm90aWZ5QWxsKCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+bm90aWZ5QWxsPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0iamF2YS5sYW5nLkVudW0jb3JkaW5hbCIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9Im9yZGluYWwoKTpJbnQiPjwvYT4KKyAgICAgIDxhIGlkPSJvcmRpbmFsKCk6SW50Ij48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5vcmRpbmFsPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuSW50Ij5JbnQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+RW51bTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjc3luY2hyb25pemVkIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0ic3luY2hyb25pemVkW1QwXSh4JDE6PSZndDtUMCk6VDAiPjwvYT4KKyAgICAgIDxhIGlkPSJzeW5jaHJvbml6ZWRbVDBdKOKHklQwKTpUMCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+c3luY2hyb25pemVkPC9zcGFuPjxzcGFuIGNsYXNzPSJ0cGFyYW1zIj5bPHNwYW4gbmFtZT0iVDAiPlQwPC9zcGFuPl08L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IOKHkiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuQW55UmVmLnN5bmNocm9uaXplZC5UMCI+VDA8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuQW55UmVmLnN5bmNocm9uaXplZC5UMCI+VDA8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9ImphdmEubGFuZy5FbnVtI3RvU3RyaW5nIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0idG9TdHJpbmcoKTpTdHJpbmciPjwvYT4KKyAgICAgIDxhIGlkPSJ0b1N0cmluZygpOlN0cmluZyI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+dG9TdHJpbmc8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuU3RyaW5nIj5TdHJpbmc8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+RW51bSDihpIgQW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI3dhaXQiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJ3YWl0KCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9IndhaXQoKTpVbml0Ij48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj53YWl0PC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjxkdD5Bbm5vdGF0aW9uczwvZHQ+PGRkPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5AdGhyb3dzPC9zcGFuPjxzcGFuIGNsYXNzPSJhcmdzIj4oPHNwYW4+CisgICAgICAKKyAgICAgIDxzcGFuIGNsYXNzPSJkZWZ2YWwiIG5hbWU9ImNsYXNzT2ZbamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uXSI+Li4uPC9zcGFuPgorICAgIDwvc3Bhbj4pPC9zcGFuPgorICAgICAgICAgICAgICAKKyAgICAgICAgPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiN3YWl0IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0id2FpdCh4JDE6TG9uZyx4JDI6SW50KTpVbml0Ij48L2E+CisgICAgICA8YSBpZD0id2FpdChMb25nLEludCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+d2FpdDwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuTG9uZyI+TG9uZzwvc3Bhbj48L3NwYW4+LCA8c3BhbiBuYW1lPSJhcmcxIj5hcmcxOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5JbnQiPkludDwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48ZHQ+QW5ub3RhdGlvbnM8L2R0PjxkZD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+QHRocm93czwvc3Bhbj48c3BhbiBjbGFzcz0iYXJncyI+KDxzcGFuPgorICAgICAgCisgICAgICA8c3BhbiBjbGFzcz0iZGVmdmFsIiBuYW1lPSJjbGFzc09mW2phdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbl0iPi4uLjwvc3Bhbj4KKyAgICA8L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgICAgICAgCisgICAgICAgIDwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjd2FpdCIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IndhaXQoeCQxOkxvbmcpOlVuaXQiPjwvYT4KKyAgICAgIDxhIGlkPSJ3YWl0KExvbmcpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPndhaXQ8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkxvbmciPkxvbmc8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Vbml0Ij5Vbml0PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PGR0PkFubm90YXRpb25zPC9kdD48ZGQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPkB0aHJvd3M8L3NwYW4+PHNwYW4gY2xhc3M9ImFyZ3MiPig8c3Bhbj4KKyAgICAgIAorICAgICAgPHNwYW4gY2xhc3M9ImRlZnZhbCIgbmFtZT0iY2xhc3NPZltqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb25dIj4uLi48L3NwYW4+CisgICAgPC9zcGFuPik8L3NwYW4+CisgICAgICAgICAgICAgIAorICAgICAgICA8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48L29sPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgCisKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9ImluaGVyaXRlZE1lbWJlcnMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwYXJlbnQiIG5hbWU9ImphdmEubGFuZy5FbnVtIj4KKyAgICAgICAgICAgICAgPGgzPkluaGVyaXRlZCBmcm9tIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5FbnVtIj5FbnVtPC9zcGFuPls8YSBocmVmPSIiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzIj5IaXZlRGF0YVR5cGVzPC9hPl08L2gzPgorICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzcz0icGFyZW50IiBuYW1lPSJqYXZhLmlvLlNlcmlhbGl6YWJsZSI+CisgICAgICAgICAgICAgIDxoMz5Jbmhlcml0ZWQgZnJvbSA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmlvLlNlcmlhbGl6YWJsZSI+U2VyaWFsaXphYmxlPC9zcGFuPjwvaDM+CisgICAgICAgICAgICA8L2Rpdj48ZGl2IGNsYXNzPSJwYXJlbnQiIG5hbWU9ImphdmEubGFuZy5Db21wYXJhYmxlIj4KKyAgICAgICAgICAgICAgPGgzPkluaGVyaXRlZCBmcm9tIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5Db21wYXJhYmxlIj5Db21wYXJhYmxlPC9zcGFuPls8YSBocmVmPSIiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzIj5IaXZlRGF0YVR5cGVzPC9hPl08L2gzPgorICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzcz0icGFyZW50IiBuYW1lPSJzY2FsYS5BbnlSZWYiPgorICAgICAgICAgICAgICA8aDM+SW5oZXJpdGVkIGZyb20gPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9oMz4KKyAgICAgICAgICAgIDwvZGl2PjxkaXYgY2xhc3M9InBhcmVudCIgbmFtZT0ic2NhbGEuQW55Ij4KKyAgICAgICAgICAgICAgPGgzPkluaGVyaXRlZCBmcm9tIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvaDM+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9Imdyb3VwZWRNZW1iZXJzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXAiIG5hbWU9IlVuZ3JvdXBlZCI+CisgICAgICAgICAgICAgIDxoMz5Vbmdyb3VwZWQ8L2gzPgorICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKworICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRvb2x0aXAiPjwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJmb290ZXIiPiAgPC9kaXY+CisgICAgICA8c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0ianF1ZXJ5LWpzIiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktdWktanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL2pxdWVyeS11aS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRvb2xzLXRvb2x0aXAtanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL3Rvb2xzLnRvb2x0aXAuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJ0ZW1wbGF0ZS1qcyIgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvdGVtcGxhdGUuanMiPjwvc2NyaXB0PgorICAgIDwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9tb2RlbC9wYWNrYWdlLmh0bWwgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9tb2RlbC9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGMyNGQ1MgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3Mvb3JnL2FwYWNoZS9hdGxhcy9oaXZlL21vZGVsL3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDExOCBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICA8dGl0bGU+bW9kZWwgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41LWluY3ViYXRpbmcgQVBJIC0gb3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsPC90aXRsZT4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ibW9kZWwgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IC0gaW5jdWJhdGluZyBBUEkgLSBvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwiIC8+CisgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9Im1vZGVsIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUgaW5jdWJhdGluZyBBUEkgb3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsIiAvPgorICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgorICAgICAgICAgIAorICAgICAgPGxpbmsgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbGliL3RlbXBsYXRlLmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxsaW5rIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2xpYi9kaWFncmFtcy5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGlkPSJkaWFncmFtcy1jc3MiIC8+CisgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgICBpZih0b3AgPT09IHNlbGYpIHsKKyAgICAgICAgICAgIHZhciB1cmwgPSAnLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCc7CisgICAgICAgICAgICB2YXIgaGFzaCA9ICdvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwucGFja2FnZSc7CisgICAgICAgICAgICB2YXIgYW5jaG9yID0gd2luZG93LmxvY2F0aW9uLmhhc2g7CisgICAgICAgICAgICB2YXIgYW5jaG9yX29wdCA9ICcnOworICAgICAgICAgICAgaWYgKGFuY2hvci5sZW5ndGggPj0gMSkKKyAgICAgICAgICAgICAgYW5jaG9yX29wdCA9ICdAJyArIGFuY2hvci5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybCArICcjJyArIGhhc2ggKyBhbmNob3Jfb3B0OworICAgICAgICAgfQorICAgCSAgPC9zY3JpcHQ+CisgICAgCisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHkgY2xhc3M9InZhbHVlIj4KKyAgICAgIDxkaXYgaWQ9ImRlZmluaXRpb24iPgorICAgICAgICA8aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL3BhY2thZ2VfYmlnLnBuZyIgLz4KKyAgICAgICAgPHAgaWQ9Im93bmVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZyI+b3JnPC9hPi48YSBocmVmPSIuLi8uLi8uLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUiPmFwYWNoZTwvYT4uPGEgaHJlZj0iLi4vLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzIj5hdGxhczwvYT4uPGEgaHJlZj0iLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUiPmhpdmU8L2E+PC9wPgorICAgICAgICA8aDE+bW9kZWw8L2gxPgorICAgICAgPC9kaXY+CisKKyAgICAgIDxoNCBpZD0ic2lnbmF0dXJlIiBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5wYWNrYWdlPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5tb2RlbDwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICAgICAgICA8ZGl2IGlkPSJjb21tZW50IiBjbGFzcz0iZnVsbGNvbW1lbnR0b3AiPjwvZGl2PgorICAgICAgICAKKworICAgICAgPGRpdiBpZD0ibWJyc2VsIj4KKyAgICAgICAgPGRpdiBpZD0idGV4dGZpbHRlciI+PHNwYW4gY2xhc3M9InByZSI+PC9zcGFuPjxzcGFuIGNsYXNzPSJpbnB1dCI+PGlucHV0IGlkPSJtYnJzZWwtaW5wdXQiIHR5cGU9InRleHQiIGFjY2Vzc2tleT0iLyIgLz48L3NwYW4+PHNwYW4gY2xhc3M9InBvc3QiPjwvc3Bhbj48L2Rpdj4KKyAgICAgICAgCisgICAgICAgIAorICAgICAgICA8ZGl2IGlkPSJ2aXNibCI+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+VmlzaWJpbGl0eTwvc3Bhbj4KKyAgICAgICAgICAgIDxvbD48bGkgY2xhc3M9InB1YmxpYyBpbiI+PHNwYW4+UHVibGljPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJhbGwgb3V0Ij48c3Bhbj5BbGw8L3NwYW4+PC9saT48L29sPgorICAgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRlbXBsYXRlIj4KKyAgICAgICAgPGRpdiBpZD0iYWxsTWVtYmVycyI+CisgICAgICAgIAorCisgICAgICAgIDxkaXYgaWQ9InR5cGVzIiBjbGFzcz0idHlwZXMgbWVtYmVycyI+CisgICAgICAgICAgICAgIDxoMz5UeXBlIE1lbWJlcnM8L2gzPgorICAgICAgICAgICAgICA8b2w+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJIaXZlRGF0YU1vZGVsR2VuZXJhdG9yZXh0ZW5kc09iamVjdCI+PC9hPgorICAgICAgPGEgaWQ9IkhpdmVEYXRhTW9kZWxHZW5lcmF0b3I6SGl2ZURhdGFNb2RlbEdlbmVyYXRvciI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmNsYXNzPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxhIGhyZWY9IkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IuaHRtbCI+PHNwYW4gY2xhc3M9Im5hbWUiPkhpdmVEYXRhTW9kZWxHZW5lcmF0b3I8L3NwYW4+PC9hPjxzcGFuIGNsYXNzPSJyZXN1bHQiPiBleHRlbmRzIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFUeXBlcyIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iSGl2ZURhdGFUeXBlc2V4dGVuZHNFbnVtW29yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzXSI+PC9hPgorICAgICAgPGEgaWQ9IkhpdmVEYXRhVHlwZXM6SGl2ZURhdGFUeXBlcyI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmNsYXNzPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxhIGhyZWY9IkhpdmVEYXRhVHlwZXMuaHRtbCI+PHNwYW4gY2xhc3M9Im5hbWUiPkhpdmVEYXRhVHlwZXM8L3NwYW4+PC9hPjxzcGFuIGNsYXNzPSJyZXN1bHQiPiBleHRlbmRzIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5FbnVtIj5FbnVtPC9zcGFuPls8YSBocmVmPSJIaXZlRGF0YVR5cGVzLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzIj5IaXZlRGF0YVR5cGVzPC9hPl08L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48L29sPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgCisKKyAgICAgICAgCisKKyAgICAgICAgCisKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9ImluaGVyaXRlZE1lbWJlcnMiPgorICAgICAgICAKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9Imdyb3VwZWRNZW1iZXJzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXAiIG5hbWU9IlVuZ3JvdXBlZCI+CisgICAgICAgICAgICAgIDxoMz5Vbmdyb3VwZWQ8L2gzPgorICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKworICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRvb2x0aXAiPjwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJmb290ZXIiPiAgPC9kaXY+CisgICAgICA8c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0ianF1ZXJ5LWpzIiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktdWktanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL2pxdWVyeS11aS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRvb2xzLXRvb2x0aXAtanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL3Rvb2xzLnRvb2x0aXAuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJ0ZW1wbGF0ZS1qcyIgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvdGVtcGxhdGUuanMiPjwvc2NyaXB0PgorICAgIDwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9wYWNrYWdlLmh0bWwgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWI3NTdmMAotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3Mvb3JnL2FwYWNoZS9hdGxhcy9oaXZlL3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDEzMSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICA8dGl0bGU+aGl2ZSAtIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUtaW5jdWJhdGluZyBBUEkgLSBvcmcuYXBhY2hlLmF0bGFzLmhpdmU8L3RpdGxlPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJoaXZlIC0gQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNSAtIGluY3ViYXRpbmcgQVBJIC0gb3JnLmFwYWNoZS5hdGxhcy5oaXZlIiAvPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJoaXZlIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUgaW5jdWJhdGluZyBBUEkgb3JnLmFwYWNoZS5hdGxhcy5oaXZlIiAvPgorICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgorICAgICAgICAgIAorICAgICAgPGxpbmsgaHJlZj0iLi4vLi4vLi4vLi4vbGliL3RlbXBsYXRlLmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxsaW5rIGhyZWY9Ii4uLy4uLy4uLy4uL2xpYi9kaWFncmFtcy5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGlkPSJkaWFncmFtcy1jc3MiIC8+CisgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgICBpZih0b3AgPT09IHNlbGYpIHsKKyAgICAgICAgICAgIHZhciB1cmwgPSAnLi4vLi4vLi4vLi4vaW5kZXguaHRtbCc7CisgICAgICAgICAgICB2YXIgaGFzaCA9ICdvcmcuYXBhY2hlLmF0bGFzLmhpdmUucGFja2FnZSc7CisgICAgICAgICAgICB2YXIgYW5jaG9yID0gd2luZG93LmxvY2F0aW9uLmhhc2g7CisgICAgICAgICAgICB2YXIgYW5jaG9yX29wdCA9ICcnOworICAgICAgICAgICAgaWYgKGFuY2hvci5sZW5ndGggPj0gMSkKKyAgICAgICAgICAgICAgYW5jaG9yX29wdCA9ICdAJyArIGFuY2hvci5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybCArICcjJyArIGhhc2ggKyBhbmNob3Jfb3B0OworICAgICAgICAgfQorICAgCSAgPC9zY3JpcHQ+CisgICAgCisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHkgY2xhc3M9InZhbHVlIj4KKyAgICAgIDxkaXYgaWQ9ImRlZmluaXRpb24iPgorICAgICAgICA8aW1nIHNyYz0iLi4vLi4vLi4vLi4vbGliL3BhY2thZ2VfYmlnLnBuZyIgLz4KKyAgICAgICAgPHAgaWQ9Im93bmVyIj48YSBocmVmPSIuLi8uLi8uLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZyI+b3JnPC9hPi48YSBocmVmPSIuLi8uLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUiPmFwYWNoZTwvYT4uPGEgaHJlZj0iLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzIj5hdGxhczwvYT48L3A+CisgICAgICAgIDxoMT5oaXZlPC9oMT4KKyAgICAgIDwvZGl2PgorCisgICAgICA8aDQgaWQ9InNpZ25hdHVyZSIgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+cGFja2FnZTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+aGl2ZTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICAgICAgICA8ZGl2IGlkPSJjb21tZW50IiBjbGFzcz0iZnVsbGNvbW1lbnR0b3AiPjwvZGl2PgorICAgICAgICAKKworICAgICAgPGRpdiBpZD0ibWJyc2VsIj4KKyAgICAgICAgPGRpdiBpZD0idGV4dGZpbHRlciI+PHNwYW4gY2xhc3M9InByZSI+PC9zcGFuPjxzcGFuIGNsYXNzPSJpbnB1dCI+PGlucHV0IGlkPSJtYnJzZWwtaW5wdXQiIHR5cGU9InRleHQiIGFjY2Vzc2tleT0iLyIgLz48L3NwYW4+PHNwYW4gY2xhc3M9InBvc3QiPjwvc3Bhbj48L2Rpdj4KKyAgICAgICAgCisgICAgICAgIAorICAgICAgICA8ZGl2IGlkPSJ2aXNibCI+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+VmlzaWJpbGl0eTwvc3Bhbj4KKyAgICAgICAgICAgIDxvbD48bGkgY2xhc3M9InB1YmxpYyBpbiI+PHNwYW4+UHVibGljPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJhbGwgb3V0Ij48c3Bhbj5BbGw8L3NwYW4+PC9saT48L29sPgorICAgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRlbXBsYXRlIj4KKyAgICAgICAgPGRpdiBpZD0iYWxsTWVtYmVycyI+CisgICAgICAgIAorCisgICAgICAgIAorCisgICAgICAgIAorCisgICAgICAgIDxkaXYgaWQ9InZhbHVlcyIgY2xhc3M9InZhbHVlcyBtZW1iZXJzIj4KKyAgICAgICAgICAgICAgPGgzPlZhbHVlIE1lbWJlcnM8L2gzPgorICAgICAgICAgICAgICA8b2w+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImJyaWRnZSI+PC9hPgorICAgICAgPGEgaWQ9ImJyaWRnZTpicmlkZ2UiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5wYWNrYWdlPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxhIGhyZWY9ImJyaWRnZS9wYWNrYWdlLmh0bWwiPjxzcGFuIGNsYXNzPSJuYW1lIj5icmlkZ2U8L3NwYW4+PC9hPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJob29rIj48L2E+CisgICAgICA8YSBpZD0iaG9vazpob29rIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+cGFja2FnZTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8YSBocmVmPSJob29rL3BhY2thZ2UuaHRtbCI+PHNwYW4gY2xhc3M9Im5hbWUiPmhvb2s8L3NwYW4+PC9hPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbCIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0ibW9kZWwiPjwvYT4KKyAgICAgIDxhIGlkPSJtb2RlbDptb2RlbCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPnBhY2thZ2U8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPGEgaHJlZj0ibW9kZWwvcGFja2FnZS5odG1sIj48c3BhbiBjbGFzcz0ibmFtZSI+bW9kZWw8L3NwYW4+PC9hPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PC9vbD4KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgIAorCisgICAgICAgIAorICAgICAgICA8L2Rpdj4KKworICAgICAgICA8ZGl2IGlkPSJpbmhlcml0ZWRNZW1iZXJzIj4KKyAgICAgICAgCisgICAgICAgIAorICAgICAgICA8L2Rpdj4KKworICAgICAgICA8ZGl2IGlkPSJncm91cGVkTWVtYmVycyI+CisgICAgICAgIDxkaXYgY2xhc3M9Imdyb3VwIiBuYW1lPSJVbmdyb3VwZWQiPgorICAgICAgICAgICAgICA8aDM+VW5ncm91cGVkPC9oMz4KKyAgICAgICAgICAgICAgCisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisKKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJ0b29sdGlwIj48L2Rpdj4KKworICAgICAgPGRpdiBpZD0iZm9vdGVyIj4gIDwvZGl2PgorICAgICAgPHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9ImpxdWVyeS1qcyIgc3JjPSIuLi8uLi8uLi8uLi9saWIvanF1ZXJ5LmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0ianF1ZXJ5LXVpLWpzIiBzcmM9Ii4uLy4uLy4uLy4uL2xpYi9qcXVlcnktdWkuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJ0b29scy10b29sdGlwLWpzIiBzcmM9Ii4uLy4uLy4uLy4uL2xpYi90b29scy50b29sdGlwLmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0idGVtcGxhdGUtanMiIHNyYz0iLi4vLi4vLi4vLi4vbGliL3RlbXBsYXRlLmpzIj48L3NjcmlwdD4KKyAgICA8L2JvZHk+CisgICAgICA8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9vcmcvYXBhY2hlL2F0bGFzL3BhY2thZ2UuaHRtbCBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3Mvb3JnL2FwYWNoZS9hdGxhcy9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjcyMjZkMQotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3Mvb3JnL2FwYWNoZS9hdGxhcy9wYWNrYWdlLmh0bWwKQEAgLTAsMCArMSwxMDUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgPHRpdGxlPmF0bGFzIC0gQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNS1pbmN1YmF0aW5nIEFQSSAtIG9yZy5hcGFjaGUuYXRsYXM8L3RpdGxlPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJhdGxhcyAtIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUgLSBpbmN1YmF0aW5nIEFQSSAtIG9yZy5hcGFjaGUuYXRsYXMiIC8+CisgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9ImF0bGFzIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUgaW5jdWJhdGluZyBBUEkgb3JnLmFwYWNoZS5hdGxhcyIgLz4KKyAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KKyAgICAgICAgICAKKyAgICAgIDxsaW5rIGhyZWY9Ii4uLy4uLy4uL2xpYi90ZW1wbGF0ZS5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+CisgICAgICA8bGluayBocmVmPSIuLi8uLi8uLi9saWIvZGlhZ3JhbXMuY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBpZD0iZGlhZ3JhbXMtY3NzIiAvPgorICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICAgaWYodG9wID09PSBzZWxmKSB7CisgICAgICAgICAgICB2YXIgdXJsID0gJy4uLy4uLy4uL2luZGV4Lmh0bWwnOworICAgICAgICAgICAgdmFyIGhhc2ggPSAnb3JnLmFwYWNoZS5hdGxhcy5wYWNrYWdlJzsKKyAgICAgICAgICAgIHZhciBhbmNob3IgPSB3aW5kb3cubG9jYXRpb24uaGFzaDsKKyAgICAgICAgICAgIHZhciBhbmNob3Jfb3B0ID0gJyc7CisgICAgICAgICAgICBpZiAoYW5jaG9yLmxlbmd0aCA+PSAxKQorICAgICAgICAgICAgICBhbmNob3Jfb3B0ID0gJ0AnICsgYW5jaG9yLnN1YnN0cmluZygxKTsKKyAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsICsgJyMnICsgaGFzaCArIGFuY2hvcl9vcHQ7CisgICAgICAgICB9CisgICAJICA8L3NjcmlwdD4KKyAgICAKKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keSBjbGFzcz0idmFsdWUiPgorICAgICAgPGRpdiBpZD0iZGVmaW5pdGlvbiI+CisgICAgICAgIDxpbWcgc3JjPSIuLi8uLi8uLi9saWIvcGFja2FnZV9iaWcucG5nIiAvPgorICAgICAgICA8cCBpZD0ib3duZXIiPjxhIGhyZWY9Ii4uLy4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnIj5vcmc8L2E+LjxhIGhyZWY9Ii4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZSI+YXBhY2hlPC9hPjwvcD4KKyAgICAgICAgPGgxPmF0bGFzPC9oMT4KKyAgICAgIDwvZGl2PgorCisgICAgICA8aDQgaWQ9InNpZ25hdHVyZSIgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+cGFja2FnZTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+YXRsYXM8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgICAgICAgPGRpdiBpZD0iY29tbWVudCIgY2xhc3M9ImZ1bGxjb21tZW50dG9wIj48L2Rpdj4KKyAgICAgICAgCisKKyAgICAgIDxkaXYgaWQ9Im1icnNlbCI+CisgICAgICAgIDxkaXYgaWQ9InRleHRmaWx0ZXIiPjxzcGFuIGNsYXNzPSJwcmUiPjwvc3Bhbj48c3BhbiBjbGFzcz0iaW5wdXQiPjxpbnB1dCBpZD0ibWJyc2VsLWlucHV0IiB0eXBlPSJ0ZXh0IiBhY2Nlc3NrZXk9Ii8iIC8+PC9zcGFuPjxzcGFuIGNsYXNzPSJwb3N0Ij48L3NwYW4+PC9kaXY+CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgPGRpdiBpZD0idmlzYmwiPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbHRlcnR5cGUiPlZpc2liaWxpdHk8L3NwYW4+CisgICAgICAgICAgICA8b2w+PGxpIGNsYXNzPSJwdWJsaWMgaW4iPjxzcGFuPlB1YmxpYzwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iYWxsIG91dCI+PHNwYW4+QWxsPC9zcGFuPjwvbGk+PC9vbD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJ0ZW1wbGF0ZSI+CisgICAgICAgIDxkaXYgaWQ9ImFsbE1lbWJlcnMiPgorICAgICAgICAKKworICAgICAgICAKKworICAgICAgICAKKworICAgICAgICA8ZGl2IGlkPSJ2YWx1ZXMiIGNsYXNzPSJ2YWx1ZXMgbWVtYmVycyI+CisgICAgICAgICAgICAgIDxoMz5WYWx1ZSBNZW1iZXJzPC9oMz4KKyAgICAgICAgICAgICAgPG9sPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImhpdmUiPjwvYT4KKyAgICAgIDxhIGlkPSJoaXZlOmhpdmUiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5wYWNrYWdlPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxhIGhyZWY9ImhpdmUvcGFja2FnZS5odG1sIj48c3BhbiBjbGFzcz0ibmFtZSI+aGl2ZTwvc3Bhbj48L2E+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48L29sPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgCisKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9ImluaGVyaXRlZE1lbWJlcnMiPgorICAgICAgICAKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9Imdyb3VwZWRNZW1iZXJzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXAiIG5hbWU9IlVuZ3JvdXBlZCI+CisgICAgICAgICAgICAgIDxoMz5Vbmdyb3VwZWQ8L2gzPgorICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKworICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRvb2x0aXAiPjwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJmb290ZXIiPiAgPC9kaXY+CisgICAgICA8c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0ianF1ZXJ5LWpzIiBzcmM9Ii4uLy4uLy4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktdWktanMiIHNyYz0iLi4vLi4vLi4vbGliL2pxdWVyeS11aS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRvb2xzLXRvb2x0aXAtanMiIHNyYz0iLi4vLi4vLi4vbGliL3Rvb2xzLnRvb2x0aXAuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJ0ZW1wbGF0ZS1qcyIgc3JjPSIuLi8uLi8uLi9saWIvdGVtcGxhdGUuanMiPjwvc2NyaXB0PgorICAgIDwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvcGFja2FnZS5odG1sIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9vcmcvYXBhY2hlL3BhY2thZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNTNlNDBmCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9vcmcvYXBhY2hlL3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDEwNSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICA8dGl0bGU+YXBhY2hlIC0gQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNS1pbmN1YmF0aW5nIEFQSSAtIG9yZy5hcGFjaGU8L3RpdGxlPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJhcGFjaGUgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IC0gaW5jdWJhdGluZyBBUEkgLSBvcmcuYXBhY2hlIiAvPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJhcGFjaGUgQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNSBpbmN1YmF0aW5nIEFQSSBvcmcuYXBhY2hlIiAvPgorICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgorICAgICAgICAgIAorICAgICAgPGxpbmsgaHJlZj0iLi4vLi4vbGliL3RlbXBsYXRlLmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxsaW5rIGhyZWY9Ii4uLy4uL2xpYi9kaWFncmFtcy5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGlkPSJkaWFncmFtcy1jc3MiIC8+CisgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgICBpZih0b3AgPT09IHNlbGYpIHsKKyAgICAgICAgICAgIHZhciB1cmwgPSAnLi4vLi4vaW5kZXguaHRtbCc7CisgICAgICAgICAgICB2YXIgaGFzaCA9ICdvcmcuYXBhY2hlLnBhY2thZ2UnOworICAgICAgICAgICAgdmFyIGFuY2hvciA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworICAgICAgICAgICAgdmFyIGFuY2hvcl9vcHQgPSAnJzsKKyAgICAgICAgICAgIGlmIChhbmNob3IubGVuZ3RoID49IDEpCisgICAgICAgICAgICAgIGFuY2hvcl9vcHQgPSAnQCcgKyBhbmNob3Iuc3Vic3RyaW5nKDEpOworICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmwgKyAnIycgKyBoYXNoICsgYW5jaG9yX29wdDsKKyAgICAgICAgIH0KKyAgIAkgIDwvc2NyaXB0PgorICAgIAorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ2YWx1ZSI+CisgICAgICA8ZGl2IGlkPSJkZWZpbml0aW9uIj4KKyAgICAgICAgPGltZyBzcmM9Ii4uLy4uL2xpYi9wYWNrYWdlX2JpZy5wbmciIC8+CisgICAgICAgIDxwIGlkPSJvd25lciI+PGEgaHJlZj0iLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmciPm9yZzwvYT48L3A+CisgICAgICAgIDxoMT5hcGFjaGU8L2gxPgorICAgICAgPC9kaXY+CisKKyAgICAgIDxoNCBpZD0ic2lnbmF0dXJlIiBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5wYWNrYWdlPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5hcGFjaGU8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgICAgICAgPGRpdiBpZD0iY29tbWVudCIgY2xhc3M9ImZ1bGxjb21tZW50dG9wIj48L2Rpdj4KKyAgICAgICAgCisKKyAgICAgIDxkaXYgaWQ9Im1icnNlbCI+CisgICAgICAgIDxkaXYgaWQ9InRleHRmaWx0ZXIiPjxzcGFuIGNsYXNzPSJwcmUiPjwvc3Bhbj48c3BhbiBjbGFzcz0iaW5wdXQiPjxpbnB1dCBpZD0ibWJyc2VsLWlucHV0IiB0eXBlPSJ0ZXh0IiBhY2Nlc3NrZXk9Ii8iIC8+PC9zcGFuPjxzcGFuIGNsYXNzPSJwb3N0Ij48L3NwYW4+PC9kaXY+CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgPGRpdiBpZD0idmlzYmwiPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbHRlcnR5cGUiPlZpc2liaWxpdHk8L3NwYW4+CisgICAgICAgICAgICA8b2w+PGxpIGNsYXNzPSJwdWJsaWMgaW4iPjxzcGFuPlB1YmxpYzwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iYWxsIG91dCI+PHNwYW4+QWxsPC9zcGFuPjwvbGk+PC9vbD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJ0ZW1wbGF0ZSI+CisgICAgICAgIDxkaXYgaWQ9ImFsbE1lbWJlcnMiPgorICAgICAgICAKKworICAgICAgICAKKworICAgICAgICAKKworICAgICAgICA8ZGl2IGlkPSJ2YWx1ZXMiIGNsYXNzPSJ2YWx1ZXMgbWVtYmVycyI+CisgICAgICAgICAgICAgIDxoMz5WYWx1ZSBNZW1iZXJzPC9oMz4KKyAgICAgICAgICAgICAgPG9sPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJhdGxhcyI+PC9hPgorICAgICAgPGEgaWQ9ImF0bGFzOmF0bGFzIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+cGFja2FnZTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8YSBocmVmPSJhdGxhcy9wYWNrYWdlLmh0bWwiPjxzcGFuIGNsYXNzPSJuYW1lIj5hdGxhczwvc3Bhbj48L2E+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48L29sPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgCisKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9ImluaGVyaXRlZE1lbWJlcnMiPgorICAgICAgICAKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9Imdyb3VwZWRNZW1iZXJzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXAiIG5hbWU9IlVuZ3JvdXBlZCI+CisgICAgICAgICAgICAgIDxoMz5Vbmdyb3VwZWQ8L2gzPgorICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKworICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRvb2x0aXAiPjwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJmb290ZXIiPiAgPC9kaXY+CisgICAgICA8c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0ianF1ZXJ5LWpzIiBzcmM9Ii4uLy4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktdWktanMiIHNyYz0iLi4vLi4vbGliL2pxdWVyeS11aS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRvb2xzLXRvb2x0aXAtanMiIHNyYz0iLi4vLi4vbGliL3Rvb2xzLnRvb2x0aXAuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJ0ZW1wbGF0ZS1qcyIgc3JjPSIuLi8uLi9saWIvdGVtcGxhdGUuanMiPjwvc2NyaXB0PgorICAgIDwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL29yZy9wYWNrYWdlLmh0bWwgYi8wLjUuMC1pbmN1YmF0aW5nL2hpdmUvc2NhbGFkb2NzL29yZy9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDIxZWIyZQotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3Mvb3JnL3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDEwNSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICA8dGl0bGU+b3JnIC0gQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNS1pbmN1YmF0aW5nIEFQSSAtIG9yZzwvdGl0bGU+CisgICAgICAgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Im9yZyAtIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUgLSBpbmN1YmF0aW5nIEFQSSAtIG9yZyIgLz4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ib3JnIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjUgaW5jdWJhdGluZyBBUEkgb3JnIiAvPgorICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgorICAgICAgICAgIAorICAgICAgPGxpbmsgaHJlZj0iLi4vbGliL3RlbXBsYXRlLmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxsaW5rIGhyZWY9Ii4uL2xpYi9kaWFncmFtcy5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGlkPSJkaWFncmFtcy1jc3MiIC8+CisgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgICBpZih0b3AgPT09IHNlbGYpIHsKKyAgICAgICAgICAgIHZhciB1cmwgPSAnLi4vaW5kZXguaHRtbCc7CisgICAgICAgICAgICB2YXIgaGFzaCA9ICdvcmcucGFja2FnZSc7CisgICAgICAgICAgICB2YXIgYW5jaG9yID0gd2luZG93LmxvY2F0aW9uLmhhc2g7CisgICAgICAgICAgICB2YXIgYW5jaG9yX29wdCA9ICcnOworICAgICAgICAgICAgaWYgKGFuY2hvci5sZW5ndGggPj0gMSkKKyAgICAgICAgICAgICAgYW5jaG9yX29wdCA9ICdAJyArIGFuY2hvci5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybCArICcjJyArIGhhc2ggKyBhbmNob3Jfb3B0OworICAgICAgICAgfQorICAgCSAgPC9zY3JpcHQ+CisgICAgCisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHkgY2xhc3M9InZhbHVlIj4KKyAgICAgIDxkaXYgaWQ9ImRlZmluaXRpb24iPgorICAgICAgICA8aW1nIHNyYz0iLi4vbGliL3BhY2thZ2VfYmlnLnBuZyIgLz4KKyAgICAgICAgCisgICAgICAgIDxoMT5vcmc8L2gxPgorICAgICAgPC9kaXY+CisKKyAgICAgIDxoNCBpZD0ic2lnbmF0dXJlIiBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5wYWNrYWdlPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5vcmc8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgICAgICAgPGRpdiBpZD0iY29tbWVudCIgY2xhc3M9ImZ1bGxjb21tZW50dG9wIj48L2Rpdj4KKyAgICAgICAgCisKKyAgICAgIDxkaXYgaWQ9Im1icnNlbCI+CisgICAgICAgIDxkaXYgaWQ9InRleHRmaWx0ZXIiPjxzcGFuIGNsYXNzPSJwcmUiPjwvc3Bhbj48c3BhbiBjbGFzcz0iaW5wdXQiPjxpbnB1dCBpZD0ibWJyc2VsLWlucHV0IiB0eXBlPSJ0ZXh0IiBhY2Nlc3NrZXk9Ii8iIC8+PC9zcGFuPjxzcGFuIGNsYXNzPSJwb3N0Ij48L3NwYW4+PC9kaXY+CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgPGRpdiBpZD0idmlzYmwiPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbHRlcnR5cGUiPlZpc2liaWxpdHk8L3NwYW4+CisgICAgICAgICAgICA8b2w+PGxpIGNsYXNzPSJwdWJsaWMgaW4iPjxzcGFuPlB1YmxpYzwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iYWxsIG91dCI+PHNwYW4+QWxsPC9zcGFuPjwvbGk+PC9vbD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJ0ZW1wbGF0ZSI+CisgICAgICAgIDxkaXYgaWQ9ImFsbE1lbWJlcnMiPgorICAgICAgICAKKworICAgICAgICAKKworICAgICAgICAKKworICAgICAgICA8ZGl2IGlkPSJ2YWx1ZXMiIGNsYXNzPSJ2YWx1ZXMgbWVtYmVycyI+CisgICAgICAgICAgICAgIDxoMz5WYWx1ZSBNZW1iZXJzPC9oMz4KKyAgICAgICAgICAgICAgPG9sPjxsaSBuYW1lPSJvcmcuYXBhY2hlIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJhcGFjaGUiPjwvYT4KKyAgICAgIDxhIGlkPSJhcGFjaGU6YXBhY2hlIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+cGFja2FnZTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8YSBocmVmPSJhcGFjaGUvcGFja2FnZS5odG1sIj48c3BhbiBjbGFzcz0ibmFtZSI+YXBhY2hlPC9zcGFuPjwvYT4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjwvb2w+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAKKworICAgICAgICAKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0iaW5oZXJpdGVkTWVtYmVycyI+CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0iZ3JvdXBlZE1lbWJlcnMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJncm91cCIgbmFtZT0iVW5ncm91cGVkIj4KKyAgICAgICAgICAgICAgPGgzPlVuZ3JvdXBlZDwvaDM+CisgICAgICAgICAgICAgIAorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorCisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0idG9vbHRpcCI+PC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImZvb3RlciI+ICA8L2Rpdj4KKyAgICAgIDxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktanMiIHNyYz0iLi4vbGliL2pxdWVyeS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9ImpxdWVyeS11aS1qcyIgc3JjPSIuLi9saWIvanF1ZXJ5LXVpLmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0idG9vbHMtdG9vbHRpcC1qcyIgc3JjPSIuLi9saWIvdG9vbHMudG9vbHRpcC5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRlbXBsYXRlLWpzIiBzcmM9Ii4uL2xpYi90ZW1wbGF0ZS5qcyI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvcGFja2FnZS5odG1sIGIvMC41LjAtaW5jdWJhdGluZy9oaXZlL3NjYWxhZG9jcy9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uN2Y2YTU2MwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaGl2ZS9zY2FsYWRvY3MvcGFja2FnZS5odG1sCkBAIC0wLDAgKzEsMTA1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgIDx0aXRsZT5yb290IC0gQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNS1pbmN1YmF0aW5nIEFQSSAtIF9yb290XzwvdGl0bGU+CisgICAgICAgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9InJvb3QgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IC0gaW5jdWJhdGluZyBBUEkgLSByb290ICIgLz4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0icm9vdCBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC41IGluY3ViYXRpbmcgQVBJIHJvb3QgIiAvPgorICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgorICAgICAgICAgIAorICAgICAgPGxpbmsgaHJlZj0ibGliL3RlbXBsYXRlLmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxsaW5rIGhyZWY9ImxpYi9kaWFncmFtcy5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGlkPSJkaWFncmFtcy1jc3MiIC8+CisgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgICBpZih0b3AgPT09IHNlbGYpIHsKKyAgICAgICAgICAgIHZhciB1cmwgPSAnaW5kZXguaHRtbCc7CisgICAgICAgICAgICB2YXIgaGFzaCA9ICdwYWNrYWdlJzsKKyAgICAgICAgICAgIHZhciBhbmNob3IgPSB3aW5kb3cubG9jYXRpb24uaGFzaDsKKyAgICAgICAgICAgIHZhciBhbmNob3Jfb3B0ID0gJyc7CisgICAgICAgICAgICBpZiAoYW5jaG9yLmxlbmd0aCA+PSAxKQorICAgICAgICAgICAgICBhbmNob3Jfb3B0ID0gJ0AnICsgYW5jaG9yLnN1YnN0cmluZygxKTsKKyAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsICsgJyMnICsgaGFzaCArIGFuY2hvcl9vcHQ7CisgICAgICAgICB9CisgICAJICA8L3NjcmlwdD4KKyAgICAKKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keSBjbGFzcz0idmFsdWUiPgorICAgICAgPGRpdiBpZD0iZGVmaW5pdGlvbiI+CisgICAgICAgIDxpbWcgc3JjPSJsaWIvcGFja2FnZV9iaWcucG5nIiAvPgorICAgICAgICAKKyAgICAgICAgPGgxPnJvb3QgcGFja2FnZTwvaDE+CisgICAgICA8L2Rpdj4KKworICAgICAgPGg0IGlkPSJzaWduYXR1cmUiIGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPnBhY2thZ2U8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnJvb3Q8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgICAgICAgPGRpdiBpZD0iY29tbWVudCIgY2xhc3M9ImZ1bGxjb21tZW50dG9wIj48L2Rpdj4KKyAgICAgICAgCisKKyAgICAgIDxkaXYgaWQ9Im1icnNlbCI+CisgICAgICAgIDxkaXYgaWQ9InRleHRmaWx0ZXIiPjxzcGFuIGNsYXNzPSJwcmUiPjwvc3Bhbj48c3BhbiBjbGFzcz0iaW5wdXQiPjxpbnB1dCBpZD0ibWJyc2VsLWlucHV0IiB0eXBlPSJ0ZXh0IiBhY2Nlc3NrZXk9Ii8iIC8+PC9zcGFuPjxzcGFuIGNsYXNzPSJwb3N0Ij48L3NwYW4+PC9kaXY+CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgPGRpdiBpZD0idmlzYmwiPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbHRlcnR5cGUiPlZpc2liaWxpdHk8L3NwYW4+CisgICAgICAgICAgICA8b2w+PGxpIGNsYXNzPSJwdWJsaWMgaW4iPjxzcGFuPlB1YmxpYzwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iYWxsIG91dCI+PHNwYW4+QWxsPC9zcGFuPjwvbGk+PC9vbD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJ0ZW1wbGF0ZSI+CisgICAgICAgIDxkaXYgaWQ9ImFsbE1lbWJlcnMiPgorICAgICAgICAKKworICAgICAgICAKKworICAgICAgICAKKworICAgICAgICA8ZGl2IGlkPSJ2YWx1ZXMiIGNsYXNzPSJ2YWx1ZXMgbWVtYmVycyI+CisgICAgICAgICAgICAgIDxoMz5WYWx1ZSBNZW1iZXJzPC9oMz4KKyAgICAgICAgICAgICAgPG9sPjxsaSBuYW1lPSJfcm9vdF8ub3JnIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJvcmciPjwvYT4KKyAgICAgIDxhIGlkPSJvcmc6b3JnIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+cGFja2FnZTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8YSBocmVmPSJvcmcvcGFja2FnZS5odG1sIj48c3BhbiBjbGFzcz0ibmFtZSI+b3JnPC9zcGFuPjwvYT4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjwvb2w+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAKKworICAgICAgICAKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0iaW5oZXJpdGVkTWVtYmVycyI+CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0iZ3JvdXBlZE1lbWJlcnMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJncm91cCIgbmFtZT0iVW5ncm91cGVkIj4KKyAgICAgICAgICAgICAgPGgzPlVuZ3JvdXBlZDwvaDM+CisgICAgICAgICAgICAgIAorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorCisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0idG9vbHRpcCI+PC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImZvb3RlciI+ICA8L2Rpdj4KKyAgICAgIDxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktanMiIHNyYz0ibGliL2pxdWVyeS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9ImpxdWVyeS11aS1qcyIgc3JjPSJsaWIvanF1ZXJ5LXVpLmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0idG9vbHMtdG9vbHRpcC1qcyIgc3JjPSJsaWIvdG9vbHMudG9vbHRpcC5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRlbXBsYXRlLWpzIiBzcmM9ImxpYi90ZW1wbGF0ZS5qcyI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2FjY2Vzc29yaWVzLXRleHQtZWRpdG9yLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2FjY2Vzc29yaWVzLXRleHQtZWRpdG9yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmMzMzY2Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvYWNjZXNzb3JpZXMtdGV4dC1lZGl0b3IucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2FkZC5naWYgYi8wLjUuMC1pbmN1YmF0aW5nL2ltYWdlcy9hZGQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYjNkYmYKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2ltYWdlcy9hZGQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2FwYWNoZS1pbmN1YmF0b3ItbG9nby5wbmcgYi8wLjUuMC1pbmN1YmF0aW5nL2ltYWdlcy9hcGFjaGUtaW5jdWJhdG9yLWxvZ28ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZmIzMWUKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2ltYWdlcy9hcGFjaGUtaW5jdWJhdG9yLWxvZ28ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2FwYWNoZS1tYXZlbi1wcm9qZWN0LTIucG5nIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvYXBhY2hlLW1hdmVuLXByb2plY3QtMi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMwOTZlYwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2FwYWNoZS1tYXZlbi1wcm9qZWN0LTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2FwcGxpY2F0aW9uLWNlcnRpZmljYXRlLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2FwcGxpY2F0aW9uLWNlcnRpZmljYXRlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzZhZmY2Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvYXBwbGljYXRpb24tY2VydGlmaWNhdGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2F0bGFzLWxvZ28ucG5nIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvYXRsYXMtbG9nby5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBjMGZmZAotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2F0bGFzLWxvZ28ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2NvbnRhY3QtbmV3LnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2NvbnRhY3QtbmV3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmM0MzE2Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvY29udGFjdC1uZXcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2RvY3VtZW50LXByb3BlcnRpZXMucG5nIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvZG9jdW1lbnQtcHJvcGVydGllcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRjMjQwOQotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2RvY3VtZW50LXByb3BlcnRpZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2RyaXZlLWhhcmRkaXNrLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2RyaXZlLWhhcmRkaXNrLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2NlNDc1Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvZHJpdmUtaGFyZGRpc2sucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2ZpeC5naWYgYi8wLjUuMC1pbmN1YmF0aW5nL2ltYWdlcy9maXguZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZWIzZGMKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2ltYWdlcy9maXguZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2ljb25fZXJyb3Jfc21sLmdpZiBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2ljb25fZXJyb3Jfc21sLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmU5YTAxCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvaWNvbl9lcnJvcl9zbWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2ljb25faGVscF9zbWwuZ2lmIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvaWNvbl9oZWxwX3NtbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFmMjBlNgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2ljb25faGVscF9zbWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2ljb25faW5mb19zbWwuZ2lmIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvaWNvbl9pbmZvX3NtbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc3NjMyNgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2ljb25faW5mb19zbWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2ljb25fc3VjY2Vzc19zbWwuZ2lmIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvaWNvbl9zdWNjZXNzX3NtbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGExOTUyNwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2ljb25fc3VjY2Vzc19zbWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2ljb25fd2FybmluZ19zbWwuZ2lmIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvaWNvbl93YXJuaW5nX3NtbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM2YWQ2YQotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2ljb25fd2FybmluZ19zbWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2ltYWdlLXgtZ2VuZXJpYy5wbmcgYi8wLjUuMC1pbmN1YmF0aW5nL2ltYWdlcy9pbWFnZS14LWdlbmVyaWMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNDllZmIKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2ltYWdlcy9pbWFnZS14LWdlbmVyaWMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2ludGVybmV0LXdlYi1icm93c2VyLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2ludGVybmV0LXdlYi1icm93c2VyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDdkNmFjCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvaW50ZXJuZXQtd2ViLWJyb3dzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2xvZ29zL2J1aWxkLWJ5LW1hdmVuLWJsYWNrLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2xvZ29zL2J1aWxkLWJ5LW1hdmVuLWJsYWNrLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTlmZDBmCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvbG9nb3MvYnVpbGQtYnktbWF2ZW4tYmxhY2sucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2xvZ29zL2J1aWxkLWJ5LW1hdmVuLXdoaXRlLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2xvZ29zL2J1aWxkLWJ5LW1hdmVuLXdoaXRlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDQ0YzljCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvbG9nb3MvYnVpbGQtYnktbWF2ZW4td2hpdGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2xvZ29zL21hdmVuLWZlYXRoZXIucG5nIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvbG9nb3MvbWF2ZW4tZmVhdGhlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVhZGE4MwotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL2xvZ29zL21hdmVuLWZlYXRoZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL25ldHdvcmstc2VydmVyLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL25ldHdvcmstc2VydmVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDEyZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvbmV0d29yay1zZXJ2ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL3BhY2thZ2UteC1nZW5lcmljLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL3BhY2thZ2UteC1nZW5lcmljLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjdlOWU2Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvcGFja2FnZS14LWdlbmVyaWMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL3Byb2ZpbGVzL3ByZS1yZWxlYXNlLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL3Byb2ZpbGVzL3ByZS1yZWxlYXNlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQ4ZTg1Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvcHJvZmlsZXMvcHJlLXJlbGVhc2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL3Byb2ZpbGVzL3JldGlyZWQucG5nIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvcHJvZmlsZXMvcmV0aXJlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg5ZjZhMgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL3Byb2ZpbGVzL3JldGlyZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL3Byb2ZpbGVzL3NhbmRib3gucG5nIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvcHJvZmlsZXMvc2FuZGJveC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg4YjM2MgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL3Byb2ZpbGVzL3NhbmRib3gucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL3JlbW92ZS5naWYgYi8wLjUuMC1pbmN1YmF0aW5nL2ltYWdlcy9yZW1vdmUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNjU2MzEKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2ltYWdlcy9yZW1vdmUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL3Jzcy5wbmcgYi8wLjUuMC1pbmN1YmF0aW5nL2ltYWdlcy9yc3MucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ODUwZWUKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2ltYWdlcy9yc3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL3VwZGF0ZS5naWYgYi8wLjUuMC1pbmN1YmF0aW5nL2ltYWdlcy91cGRhdGUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYTZkMGIKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL2ltYWdlcy91cGRhdGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL3dpbmRvdy1uZXcucG5nIGIvMC41LjAtaW5jdWJhdGluZy9pbWFnZXMvd2luZG93LW5ldy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxMmVmOQotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaW1hZ2VzL3dpbmRvdy1uZXcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLXdoaXRlLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLXdoaXRlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmY2NDg0Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3Mtd2hpdGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLnBuZyBiLzAuNS4wLWluY3ViYXRpbmcvaW1nL2dseXBoaWNvbnMtaGFsZmxpbmdzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTk2OTk5Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvaW5kZXguaHRtbCBiLzAuNS4wLWluY3ViYXRpbmcvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjUxMDA2Ci0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9pbmRleC5odG1sCkBAIC0wLDAgKzEsMzEzIEBACis8IURPQ1RZUEUgaHRtbD4KKzwhLS0KKyB8IEdlbmVyYXRlZCBieSBBcGFjaGUgTWF2ZW4gRG94aWEgYXQgMjAxNS0wNy0wOQorIHwgUmVuZGVyZWQgdXNpbmcgQXBhY2hlIE1hdmVuIEZsdWlkbyBTa2luIDEuMy4wCistLT4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CisgICAgPG1ldGEgbmFtZT0iRGF0ZS1SZXZpc2lvbi15eXl5bW1kZCIgY29udGVudD0iMjAxNTA3MDkiIC8+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4iIC8+CisgICAgPHRpdGxlPk1ldGFkYXRhIGFuZCBHb3Zlcm5hbmNlIC0gRGF0YSBHb3Zlcm5hbmNlIGFuZCBNZXRhZGF0YSBmcmFtZXdvcmsgZm9yIEhhZG9vcDwvdGl0bGU+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9zaXRlLmNzcyIgLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3ByaW50LmNzcyIgbWVkaWE9InByaW50IiAvPgorCisgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL2pzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmpzIj48L3NjcmlwdD4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+JCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7ICQoICcuY2Fyb3VzZWwnICkuY2Fyb3VzZWwoIHsgaW50ZXJ2YWw6IDM1MDAgfSApIH0gKTs8L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHkgY2xhc3M9InRvcEJhckVuYWJsZWQiPgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorCisgICAgPGRpdiBpZD0idG9wYmFyIiBjbGFzcz0ibmF2YmFyIG5hdmJhci1maXhlZC10b3AgIj4KKyAgICAgIDxkaXYgY2xhc3M9Im5hdmJhci1pbm5lciI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIiBzdHlsZT0id2lkdGg6IDY4JTsiPjxkaXYgY2xhc3M9Im5hdi1jb2xsYXBzZSI+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJuYXYiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BdGxhcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9IkFib3V0Ij5BYm91dDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJXaWtpIj5XaWtpPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9Ik5ld3MiPk5ld3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0LXdpcC11cy5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3ItYXRsYXMuZ2l0IiAgdGl0bGU9IkdpdCI+R2l0PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3IvYXRsYXMiICB0aXRsZT0iU3ZuIj5Tdm48L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvQVRMQVMiICB0aXRsZT0iSmlyYSI+SmlyYTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUy9Qb3dlcmVkQnkiICB0aXRsZT0iUG93ZXJlZCBieSI+UG93ZXJlZCBieTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL2Jsb2dzLmFwYWNoZS5vcmcvYXRsYXMvIiAgdGl0bGU9IkJsb2ciPkJsb2c8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5Qcm9qZWN0IEluZm9ybWF0aW9uIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InByb2plY3QtaW5mby5odG1sIiAgdGl0bGU9IlN1bW1hcnkiPlN1bW1hcnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Im1haWwtbGlzdHMuaHRtbCIgIHRpdGxlPSJNYWlsaW5nIExpc3RzIj5NYWlsaW5nIExpc3RzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd2ViY2hhdC5mcmVlbm9kZS5uZXQ/Y2hhbm5lbHM9YXBhY2hlYXRsYXMmdWlvPWQ0IiAgdGl0bGU9IklSQyI+SVJDPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJ0ZWFtLWxpc3QuaHRtbCIgIHRpdGxlPSJUZWFtIj5UZWFtPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpc3N1ZS10cmFja2luZy5odG1sIiAgdGl0bGU9Iklzc3VlIFRyYWNraW5nIj5Jc3N1ZSBUcmFja2luZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ic291cmNlLXJlcG9zaXRvcnkuaHRtbCIgIHRpdGxlPSJTb3VyY2UgUmVwb3NpdG9yeSI+U291cmNlIFJlcG9zaXRvcnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImxpY2Vuc2UuaHRtbCIgIHRpdGxlPSJMaWNlbnNlIj5MaWNlbnNlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UmVsZWFzZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJDb21pbmcgc29vbiI+Q29taW5nIHNvb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5Eb2N1bWVudGF0aW9uIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iY3VycmVudCI+Y3VycmVudDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlc291cmNlcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9Ik92ZXJ2aWV3Ij5PdmVydmlldzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iUXVpY2tTdGFydC5odG1sIiAgdGl0bGU9IkdldHRpbmcgU3RhcnRlZCI+R2V0dGluZyBTdGFydGVkPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJBcmNoaXRlY3R1cmUuaHRtbCIgIHRpdGxlPSJBcmNoaXRlY3R1cmUiPkFyY2hpdGVjdHVyZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iSW5zdGFsbGF0aW9uU3RlcHMuaHRtbCIgIHRpdGxlPSJJbnN0YWxsYXRpb24iPkluc3RhbGxhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iVHlwZVN5c3RlbS5odG1sIiAgdGl0bGU9IlR5cGUgU3lzdGVtIj5UeXBlIFN5c3RlbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQ29uZmlndXJhdGlvbi5odG1sIiAgdGl0bGU9IkNvbmZpZ3VyYXRpb24iPkNvbmZpZ3VyYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlNlY3VyaXR5Lmh0bWwiICB0aXRsZT0iU2VjdXJpdHkiPlNlY3VyaXR5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJhcGkvcmVzdC5odG1sIiAgdGl0bGU9IlJlc3QgQVBJIj5SZXN0IEFQSTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkFTRiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9ob3ctaXQtd29ya3MuaHRtbCIgIHRpdGxlPSJIb3cgQXBhY2hlIFdvcmtzIj5Ib3cgQXBhY2hlIFdvcmtzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi8iICB0aXRsZT0iRm91bmRhdGlvbiI+Rm91bmRhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vc3BvbnNvcnNoaXAuaHRtbCIgIHRpdGxlPSJTcG9uc29yaW5nIEFwYWNoZSI+U3BvbnNvcmluZyBBcGFjaGU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3RoYW5rcy5odG1sIiAgdGl0bGU9IlRoYW5rcyI+VGhhbmtzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJzZWFyY2gtZm9ybSIgYWN0aW9uPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoIiBtZXRob2Q9ImdldCIgIGNsYXNzPSJuYXZiYXItc2VhcmNoIHB1bGwtcmlnaHQiID4KKyAgICAKKyAgPGlucHV0IHZhbHVlPSJodHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmciIG5hbWU9InNpdGVzZWFyY2giIHR5cGU9ImhpZGRlbiIvPgorICA8aW5wdXQgY2xhc3M9InNlYXJjaC1xdWVyeSIgbmFtZT0icSIgaWQ9InF1ZXJ5IiB0eXBlPSJ0ZXh0IiAvPgorPC9mb3JtPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL3d3dy5nb29nbGUuY29tL2Nvb3AvY3NlL2JyYW5kP2Zvcm09c2VhcmNoLWZvcm0iPjwvc2NyaXB0PgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgIDxpZnJhbWUgc3JjPSJodHRwOi8vd3d3LmZhY2Vib29rLmNvbS9wbHVnaW5zL2xpa2UucGhwP2hyZWY9aHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3Mmc2VuZD1mYWxzZSZsYXlvdXQ9YnV0dG9uX2NvdW50JnNob3ctZmFjZXM9ZmFsc2UmYWN0aW9uPWxpa2UmY29sb3JzY2hlbWU9ZGFyayIKKyAgICAgICAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9IjAiCisgICAgICAgIHN0eWxlPSJib3JkZXI6bm9uZTsgd2lkdGg6ODBweDsgaGVpZ2h0OjIwcHg7IG1hcmdpbi10b3A6IDEwcHg7IiAgY2xhc3M9InB1bGwtcmlnaHQiID48L2lmcmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vYXBpcy5nb29nbGUuY29tL2pzL3BsdXNvbmUuanMiPjwvc2NyaXB0PgorCisgICAgICAgIDx1bCBjbGFzcz0ibmF2IHB1bGwtcmlnaHQiPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPgorICAgIAorICAgIDxkaXYgY2xhc3M9ImctcGx1c29uZSIgZGF0YS1ocmVmPSJodHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmcvYXRsYXMtZG9jcyIgZGF0YS1zaXplPSJtZWRpdW0iICB3aWR0aD0iNjBweCIgYWxpZ249InJpZ2h0IiA+PC9kaXY+CisKKyAgICAgICAgPC9saT48L3VsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgCisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgICAgCisgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgICAgICAgPGRpdiBpZD0iYmFubmVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1sZWZ0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4iIGlkPSJiYW5uZXJMZWZ0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvYXRsYXMtbG9nby5wbmciICBhbHQ9IkFwYWNoZSBBdGxhcyIgd2lkdGg9IjIwMHB4IiBoZWlnaHQ9IjQ1cHgiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9pbmN1YmF0b3IuYXBhY2hlLm9yZyIgaWQ9ImJhbm5lclJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvYXBhY2hlLWluY3ViYXRvci1sb2dvLnBuZyIgIGFsdD0iQXBhY2hlIEluY3ViYXRvciIvPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJjbGVhciI+PGhyLz48L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJicmVhZGNydW1icyI+CisgICAgICAgIDx1bCBjbGFzcz0iYnJlYWRjcnVtYiI+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciIGNsYXNzPSJleHRlcm5hbExpbmsiIHRpdGxlPSJBcGFjaGUiPgorICAgICAgICBBcGFjaGU8L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIgIj4vPC9saT4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkF0bGFzIj4KKyAgICAgICAgQXRsYXM8L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIgIj4vPC9saT4KKyAgICAgICAgPGxpIGNsYXNzPSIiPkRhdGEgR292ZXJuYW5jZSBhbmQgTWV0YWRhdGEgZnJhbWV3b3JrIGZvciBIYWRvb3A8L2xpPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICA8bGkgaWQ9InB1Ymxpc2hEYXRlIiBjbGFzcz0icHVsbC1yaWdodCI+TGFzdCBQdWJsaXNoZWQ6IDIwMTUtMDctMDk8L2xpPiA8bGkgY2xhc3M9ImRpdmlkZXIgcHVsbC1yaWdodCI+fDwvbGk+CisgICAgICAgICAgICAgIDxsaSBpZD0icHJvamVjdFZlcnNpb24iIGNsYXNzPSJwdWxsLXJpZ2h0Ij5WZXJzaW9uOiAwLjUtaW5jdWJhdGluZzwvbGk+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9kaXY+CisKKyAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxkaXYgaWQ9ImJvZHlDb2x1bW4iID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPkRhdGEgR292ZXJuYW5jZSBhbmQgTWV0YWRhdGEgZnJhbWV3b3JrIGZvciBIYWRvb3A8YSBuYW1lPSJEYXRhX0dvdmVybmFuY2VfYW5kX01ldGFkYXRhX2ZyYW1ld29ya19mb3JfSGFkb29wIj48L2E+PC9oMj48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzPk92ZXJ2aWV3PGEgbmFtZT0iT3ZlcnZpZXciPjwvYT48L2gzPgorPHA+QXRsYXMgaXMgYSBzY2FsYWJsZSBhbmQgZXh0ZW5zaWJsZSBzZXQgb2YgY29yZSBmb3VuZGF0aW9uYWwgZ292ZXJuYW5jZSBzZXJ2aWNlcyAmI3gyMDEzOyBlbmFibGluZyBlbnRlcnByaXNlcyB0byBlZmZlY3RpdmVseSBhbmQgZWZmaWNpZW50bHkgbWVldCB0aGVpciBjb21wbGlhbmNlIHJlcXVpcmVtZW50cyB3aXRoaW4gSGFkb29wIGFuZCBhbGxvd3MgaW50ZWdyYXRpb24gd2l0aCB0aGUgd2hvbGUgZW50ZXJwcmlzZSBkYXRhIGVjb3N5c3RlbS48L3A+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5GZWF0dXJlczxhIG5hbWU9IkZlYXR1cmVzIj48L2E+PC9oMz48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGg0PkRhdGEgQ2xhc3NpZmljYXRpb248YSBuYW1lPSJEYXRhX0NsYXNzaWZpY2F0aW9uIj48L2E+PC9oND4KKzxwPjwvcD4KKzx1bD4KKzxsaT5JbXBvcnQgb3IgZGVmaW5lIHRheG9ub215IGJ1c2luZXNzLW9yaWVudGVkIGFubm90YXRpb25zIGZvciBkYXRhPC9saT4KKzxsaT5EZWZpbmUsIGFubm90YXRlLCBhbmQgYXV0b21hdGUgY2FwdHVyZSBvZiByZWxhdGlvbnNoaXBzIGJldHdlZW4gZGF0YSBzZXRzIGFuZCB1bmRlcmx5aW5nPC9saT48L3VsPmVsZW1lbnRzIGluY2x1ZGluZyBzb3VyY2UsIHRhcmdldCwgYW5kIGRlcml2YXRpb24gcHJvY2Vzc2VzCis8dWw+Cis8bGk+RXhwb3J0IG1ldGFkYXRhIHRvIHRoaXJkLXBhcnR5IHN5c3RlbXM8L2xpPjwvdWw+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoND5DZW50cmFsaXplZCBBdWRpdGluZzxhIG5hbWU9IkNlbnRyYWxpemVkX0F1ZGl0aW5nIj48L2E+PC9oND4KKzxwPjwvcD4KKzx1bD4KKzxsaT5DYXB0dXJlIHNlY3VyaXR5IGFjY2VzcyBpbmZvcm1hdGlvbiBmb3IgZXZlcnkgYXBwbGljYXRpb24sIHByb2Nlc3MsIGFuZCBpbnRlcmFjdGlvbiB3aXRoIGRhdGE8L2xpPgorPGxpPkNhcHR1cmUgdGhlIG9wZXJhdGlvbmFsIGluZm9ybWF0aW9uIGZvciBleGVjdXRpb24sIHN0ZXBzLCBhbmQgYWN0aXZpdGllczwvbGk+PC91bD48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGg0PlNlYXJjaCAmYW1wOyBMaW5lYWdlIChCcm93c2UpPGEgbmFtZT0iU2VhcmNoX19MaW5lYWdlX0Jyb3dzZSI+PC9hPjwvaDQ+Cis8cD48L3A+Cis8dWw+Cis8bGk+UHJlLWRlZmluZWQgbmF2aWdhdGlvbiBwYXRocyB0byBleHBsb3JlIHRoZSBkYXRhIGNsYXNzaWZpY2F0aW9uIGFuZCBhdWRpdCBpbmZvcm1hdGlvbjwvbGk+Cis8bGk+VGV4dC1iYXNlZCBzZWFyY2ggZmVhdHVyZXMgbG9jYXRlcyByZWxldmFudCBkYXRhIGFuZCBhdWRpdCBldmVudCBhY3Jvc3MgRGF0YSBMYWtlIHF1aWNrbHk8L2xpPjwvdWw+YW5kIGFjY3VyYXRlbHkKKzx1bD4KKzxsaT5Ccm93c2UgdmlzdWFsaXphdGlvbiBvZiBkYXRhIHNldCBsaW5lYWdlIGFsbG93aW5nIHVzZXJzIHRvIGRyaWxsLWRvd24gaW50byBvcGVyYXRpb25hbCw8L2xpPjwvdWw+c2VjdXJpdHksIGFuZCBwcm92ZW5hbmNlIHJlbGF0ZWQgaW5mb3JtYXRpb248L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGg0PlNlY3VyaXR5ICZhbXA7IFBvbGljeSBFbmdpbmU8YSBuYW1lPSJTZWN1cml0eV9fUG9saWN5X0VuZ2luZSI+PC9hPjwvaDQ+Cis8cD48L3A+Cis8dWw+Cis8bGk+UmF0aW9uYWxpemUgY29tcGxpYW5jZSBwb2xpY3kgYXQgcnVudGltZSBiYXNlZCBvbiBkYXRhIGNsYXNzaWZpY2F0aW9uIHNjaGVtZXMsIGF0dHJpYnV0ZXM8L2xpPjwvdWw+YW5kIHJvbGVzLgorPHVsPgorPGxpPkFkdmFuY2VkIGRlZmluaXRpb24gb2YgcG9saWNpZXMgZm9yIHByZXZlbnRpbmcgZGF0YSBkZXJpdmF0aW9uIGJhc2VkIG9uIGNsYXNzaWZpY2F0aW9uPC9saT48L3VsPihpLmUuIHJlLWlkZW50aWZpY2F0aW9uKSAmI3gyMDEzOyBQcm9oaWJpdGlvbnMKKzx1bD4KKzxsaT5Db2x1bW4gYW5kIFJvdyBsZXZlbCBtYXNraW5nIGJhc2VkIG9uIGNlbGwgdmFsdWVzIGFuZCBhdHRpYnV0ZXMuPC9saT48L3VsPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDM+R2V0dGluZyBTdGFydGVkPGEgbmFtZT0iR2V0dGluZ19TdGFydGVkIj48L2E+PC9oMz4KKzxwPjwvcD4KKzx1bD4KKzxsaT48YSBocmVmPSIuL1F1aWNrU3RhcnQuaHRtbCI+UXVpY2sgU3RhcnQgR3VpZGU8L2E+PC9saT48L3VsPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDM+RG9jdW1lbnRhdGlvbjxhIG5hbWU9IkRvY3VtZW50YXRpb24iPjwvYT48L2gzPgorPHA+PC9wPgorPHVsPgorPGxpPjxhIGhyZWY9Ii4vQXJjaGl0ZWN0dXJlLmh0bWwiPkhpZ2ggTGV2ZWwgQXJjaGl0ZWN0dXJlPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi9UeXBlU3lzdGVtLmh0bWwiPlR5cGUgU3lzdGVtPC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi9SZXBvc2l0b3J5Lmh0bWwiPk1ldGFkYXRhIFJlcG9zaXRvcnk8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuL1NlYXJjaC5odG1sIj5TZWFyY2g8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuL1NlY3VyaXR5Lmh0bWwiPnNlY3VyaXR5PC9hPjwvbGk+Cis8bGk+PGEgaHJlZj0iLi9Db25maWd1cmF0aW9uLmh0bWwiPkNvbmZpZ3VyYXRpb248L2E+PC9saT48L3VsPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDM+QVBJIERvY3VtZW50YXRpb248YSBuYW1lPSJBUElfRG9jdW1lbnRhdGlvbiI+PC9hPjwvaDM+Cis8cD48L3A+Cis8dWw+Cis8bGk+PGEgaHJlZj0iYXBpL3Jlc3QuaHRtbCI+UkVTVCBBUEkgRG9jdW1lbnRhdGlvbjwvYT48L2xpPjwvdWw+Cis8cD48YSBuYW1lPSJMaWNlbnNlSW5mbyI+PC9hPjwvcD48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPkxpY2Vuc2luZyBJbmZvcm1hdGlvbjxhIG5hbWU9IkxpY2Vuc2luZ19JbmZvcm1hdGlvbiI+PC9hPjwvaDI+Cis8cD5NZXRhZGF0YSAoQXRsYXMpIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIDxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+QXBhY2hlIExpY2Vuc2UgMi4wPC9hPi48L3A+PC9kaXY+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKworICAgIDxoci8+CisKKyAgICA8Zm9vdGVyPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IHNwYW4xMiI+Q29weXJpZ2h0ICZjb3B5OyAgICAgICAgICAgICAgICAgICAgMjAxNQorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIj5BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbjwvYT4uCisgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxwIGlkPSJwb3dlcmVkQnkiIGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvIiB0aXRsZT0iQnVpbHQgYnkgTWF2ZW4iIGNsYXNzPSJwb3dlcmVkQnkiPgorICAgICAgICA8aW1nIGNsYXNzPSJidWlsdEJ5IiBhbHQ9IkJ1aWx0IGJ5IE1hdmVuIiBzcmM9Ii4vaW1hZ2VzL2xvZ29zL21hdmVuLWZlYXRoZXIucG5nIiAvPgorICAgICAgPC9hPgorICAgICAgICAgICAgICA8L3A+CisgICAgICAgIAorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgIDwvZm9vdGVyPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL2lzc3VlLXRyYWNraW5nLmh0bWwgYi8wLjUuMC1pbmN1YmF0aW5nL2lzc3VlLXRyYWNraW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZmN2YxYgotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvaXNzdWUtdHJhY2tpbmcuaHRtbApAQCAtMCwwICsxLDI1OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8IS0tCisgfCBHZW5lcmF0ZWQgYnkgQXBhY2hlIE1hdmVuIERveGlhIGF0IDIwMTUtMDctMDkKKyB8IFJlbmRlcmVkIHVzaW5nIEFwYWNoZSBNYXZlbiBGbHVpZG8gU2tpbiAxLjMuMAorLS0+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgorICAgIDxtZXRhIG5hbWU9IkRhdGUtUmV2aXNpb24teXl5eW1tZGQiIGNvbnRlbnQ9IjIwMTUwNzA5IiAvPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtTGFuZ3VhZ2UiIGNvbnRlbnQ9ImVuIiAvPgorICAgIDx0aXRsZT5NZXRhZGF0YSBhbmQgR292ZXJuYW5jZSAtIElzc3VlIFRyYWNraW5nPC90aXRsZT4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmNzcyIgLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3NpdGUuY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvcHJpbnQuY3NzIiBtZWRpYT0icHJpbnQiIC8+CisKKyAgICAgIAorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4vanMvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uanMiPjwvc2NyaXB0PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHsgJCggJy5jYXJvdXNlbCcgKS5jYXJvdXNlbCggeyBpbnRlcnZhbDogMzUwMCB9ICkgfSApOzwvc2NyaXB0PgorICAgICAgICAgIAorICAgICAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keSBjbGFzcz0idG9wQmFyRW5hYmxlZCI+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisKKyAgICA8ZGl2IGlkPSJ0b3BiYXIiIGNsYXNzPSJuYXZiYXIgbmF2YmFyLWZpeGVkLXRvcCAiPgorICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWlubmVyIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiIHN0eWxlPSJ3aWR0aDogNjglOyI+PGRpdiBjbGFzcz0ibmF2LWNvbGxhcHNlIj4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Im5hdiI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkF0bGFzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iQWJvdXQiPkFib3V0PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9Ildpa2kiPldpa2k8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iTmV3cyI+TmV3czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXQtd2lwLXVzLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci1hdGxhcy5naXQiICB0aXRsZT0iR2l0Ij5HaXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci9hdGxhcyIgIHRpdGxlPSJTdm4iPlN2bjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9BVExBUyIgIHRpdGxlPSJKaXJhIj5KaXJhPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTL1Bvd2VyZWRCeSIgIHRpdGxlPSJQb3dlcmVkIGJ5Ij5Qb3dlcmVkIGJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vYmxvZ3MuYXBhY2hlLm9yZy9hdGxhcy8iICB0aXRsZT0iQmxvZyI+QmxvZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlByb2plY3QgSW5mb3JtYXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0icHJvamVjdC1pbmZvLmh0bWwiICB0aXRsZT0iU3VtbWFyeSI+U3VtbWFyeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibWFpbC1saXN0cy5odG1sIiAgdGl0bGU9Ik1haWxpbmcgTGlzdHMiPk1haWxpbmcgTGlzdHM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93ZWJjaGF0LmZyZWVub2RlLm5ldD9jaGFubmVscz1hcGFjaGVhdGxhcyZ1aW89ZDQiICB0aXRsZT0iSVJDIj5JUkM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InRlYW0tbGlzdC5odG1sIiAgdGl0bGU9IlRlYW0iPlRlYW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imlzc3VlLXRyYWNraW5nLmh0bWwiICB0aXRsZT0iSXNzdWUgVHJhY2tpbmciPklzc3VlIFRyYWNraW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJzb3VyY2UtcmVwb3NpdG9yeS5odG1sIiAgdGl0bGU9IlNvdXJjZSBSZXBvc2l0b3J5Ij5Tb3VyY2UgUmVwb3NpdG9yeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibGljZW5zZS5odG1sIiAgdGl0bGU9IkxpY2Vuc2UiPkxpY2Vuc2U8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZWxlYXNlcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9IkNvbWluZyBzb29uIj5Db21pbmcgc29vbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkRvY3VtZW50YXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJjdXJyZW50Ij5jdXJyZW50PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UmVzb3VyY2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJRdWlja1N0YXJ0Lmh0bWwiICB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj5HZXR0aW5nIFN0YXJ0ZWQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkFyY2hpdGVjdHVyZS5odG1sIiAgdGl0bGU9IkFyY2hpdGVjdHVyZSI+QXJjaGl0ZWN0dXJlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJJbnN0YWxsYXRpb25TdGVwcy5odG1sIiAgdGl0bGU9Ikluc3RhbGxhdGlvbiI+SW5zdGFsbGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJUeXBlU3lzdGVtLmh0bWwiICB0aXRsZT0iVHlwZSBTeXN0ZW0iPlR5cGUgU3lzdGVtPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJDb25maWd1cmF0aW9uLmh0bWwiICB0aXRsZT0iQ29uZmlndXJhdGlvbiI+Q29uZmlndXJhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iU2VjdXJpdHkuaHRtbCIgIHRpdGxlPSJTZWN1cml0eSI+U2VjdXJpdHk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImFwaS9yZXN0Lmh0bWwiICB0aXRsZT0iUmVzdCBBUEkiPlJlc3QgQVBJPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QVNGIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL2hvdy1pdC13b3Jrcy5odG1sIiAgdGl0bGU9IkhvdyBBcGFjaGUgV29ya3MiPkhvdyBBcGFjaGUgV29ya3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uLyIgIHRpdGxlPSJGb3VuZGF0aW9uIj5Gb3VuZGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9zcG9uc29yc2hpcC5odG1sIiAgdGl0bGU9IlNwb25zb3JpbmcgQXBhY2hlIj5TcG9uc29yaW5nIEFwYWNoZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vdGhhbmtzLmh0bWwiICB0aXRsZT0iVGhhbmtzIj5UaGFua3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gaWQ9InNlYXJjaC1mb3JtIiBhY3Rpb249Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2giIG1ldGhvZD0iZ2V0IiAgY2xhc3M9Im5hdmJhci1zZWFyY2ggcHVsbC1yaWdodCIgPgorICAgIAorICA8aW5wdXQgdmFsdWU9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZyIgbmFtZT0ic2l0ZXNlYXJjaCIgdHlwZT0iaGlkZGVuIi8+CisgIDxpbnB1dCBjbGFzcz0ic2VhcmNoLXF1ZXJ5IiBuYW1lPSJxIiBpZD0icXVlcnkiIHR5cGU9InRleHQiIC8+Cis8L2Zvcm0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vY29vcC9jc2UvYnJhbmQ/Zm9ybT1zZWFyY2gtZm9ybSI+PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgPGlmcmFtZSBzcmM9Imh0dHA6Ly93d3cuZmFjZWJvb2suY29tL3BsdWdpbnMvbGlrZS5waHA/aHJlZj1odHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmcvYXRsYXMtZG9jcyZzZW5kPWZhbHNlJmxheW91dD1idXR0b25fY291bnQmc2hvdy1mYWNlcz1mYWxzZSZhY3Rpb249bGlrZSZjb2xvcnNjaGVtZT1kYXJrIgorICAgICAgICBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0iMCIKKyAgICAgICAgc3R5bGU9ImJvcmRlcjpub25lOyB3aWR0aDo4MHB4OyBoZWlnaHQ6MjBweDsgbWFyZ2luLXRvcDogMTBweDsiICBjbGFzcz0icHVsbC1yaWdodCIgPjwvaWZyYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9hcGlzLmdvb2dsZS5jb20vanMvcGx1c29uZS5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgPHVsIGNsYXNzPSJuYXYgcHVsbC1yaWdodCI+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CisgICAgCisgICAgPGRpdiBjbGFzcz0iZy1wbHVzb25lIiBkYXRhLWhyZWY9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzIiBkYXRhLXNpemU9Im1lZGl1bSIgIHdpZHRoPSI2MHB4IiBhbGlnbj0icmlnaHQiID48L2Rpdj4KKworICAgICAgICA8L2xpPjwvdWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAKKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICAKKyAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICA8ZGl2IGlkPSJiYW5uZXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLWxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLiIgaWQ9ImJhbm5lckxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hdGxhcy1sb2dvLnBuZyIgIGFsdD0iQXBhY2hlIEF0bGFzIiB3aWR0aD0iMjAwcHgiIGhlaWdodD0iNDVweCIvPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+ICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2luY3ViYXRvci5hcGFjaGUub3JnIiBpZD0iYmFubmVyUmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hcGFjaGUtaW5jdWJhdG9yLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgSW5jdWJhdG9yIi8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIj48aHIvPjwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImJyZWFkY3J1bWJzIj4KKyAgICAgICAgPHVsIGNsYXNzPSJicmVhZGNydW1iIj4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZyIgY2xhc3M9ImV4dGVybmFsTGluayIgdGl0bGU9IkFwYWNoZSI+CisgICAgICAgIEFwYWNoZTwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iQXRsYXMiPgorICAgICAgICBBdGxhczwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICA8bGkgY2xhc3M9IiI+SXNzdWUgVHJhY2tpbmc8L2xpPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICA8bGkgaWQ9InB1Ymxpc2hEYXRlIiBjbGFzcz0icHVsbC1yaWdodCI+TGFzdCBQdWJsaXNoZWQ6IDIwMTUtMDctMDk8L2xpPiA8bGkgY2xhc3M9ImRpdmlkZXIgcHVsbC1yaWdodCI+fDwvbGk+CisgICAgICAgICAgICAgIDxsaSBpZD0icHJvamVjdFZlcnNpb24iIGNsYXNzPSJwdWxsLXJpZ2h0Ij5WZXJzaW9uOiAwLjUtaW5jdWJhdGluZzwvbGk+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9kaXY+CisKKyAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxkaXYgaWQ9ImJvZHlDb2x1bW4iID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPk92ZXJ2aWV3PGEgbmFtZT0iT3ZlcnZpZXciPjwvYT48L2gyPjxhIG5hbWU9Ik92ZXJ2aWV3Ij48L2E+Cis8cD5UaGlzIHByb2plY3QgdXNlcyA8YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJodHRwOi8vd3d3LmF0bGFzc2lhbi5jb20vc29mdHdhcmUvamlyYSI+SklSQTwvYT4gYSBKMkVFLWJhc2VkLCBpc3N1ZSB0cmFja2luZyBhbmQgcHJvamVjdCBtYW5hZ2VtZW50IGFwcGxpY2F0aW9uLjwvcD48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPklzc3VlIFRyYWNraW5nPGEgbmFtZT0iSXNzdWVfVHJhY2tpbmciPjwvYT48L2gyPjxhIG5hbWU9Iklzc3VlX1RyYWNraW5nIj48L2E+Cis8cD5Jc3N1ZXMsIGJ1Z3MsIGFuZCBmZWF0dXJlIHJlcXVlc3RzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdG8gdGhlIGZvbGxvd2luZyBpc3N1ZSB0cmFja2luZyBzeXN0ZW0gZm9yIHRoaXMgcHJvamVjdC48L3A+Cis8ZGl2IGNsYXNzPSJzb3VyY2UiPgorPHByZT48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0FUTEFTIj5odHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0FUTEFTPC9hPjwvcHJlPjwvZGl2PjwvZGl2PgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisKKyAgICA8aHIvPgorCisgICAgPGZvb3Rlcj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyBzcGFuMTIiPkNvcHlyaWdodCAmY29weTsgICAgICAgICAgICAgICAgICAgIDIwMTUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZyI+QXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb248L2E+LgorICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8cCBpZD0icG93ZXJlZEJ5IiBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnLyIgdGl0bGU9IkJ1aWx0IGJ5IE1hdmVuIiBjbGFzcz0icG93ZXJlZEJ5Ij4KKyAgICAgICAgPGltZyBjbGFzcz0iYnVpbHRCeSIgYWx0PSJCdWlsdCBieSBNYXZlbiIgc3JjPSIuL2ltYWdlcy9sb2dvcy9tYXZlbi1mZWF0aGVyLnBuZyIgLz4KKyAgICAgIDwvYT4KKyAgICAgICAgICAgICAgPC9wPgorICAgICAgICAKKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICA8L2Zvb3Rlcj4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9qcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5qcyBiLzAuNS4wLWluY3ViYXRpbmcvanMvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc3ZTYxMQotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvanMvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uanMKQEAgLTAsMCArMSwyMSBAQAorLyohCisgKiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYxLjguMAorICogaHR0cDovL2pxdWVyeS5jb20vCisgKgorICogSW5jbHVkZXMgU2l6emxlLmpzCisgKiBodHRwOi8vc2l6emxlanMuY29tLworICoKKyAqIENvcHlyaWdodCAyMDEyIGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQorICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQorICoKKyAqIERhdGU6IFRodSBBdWcgMDkgMjAxMiAxNjoyNDo0OCBHTVQtMDQwMCAoRWFzdGVybiBEYXlsaWdodCBUaW1lKQorICovCisoZnVuY3Rpb24oYTIsYUIpe3ZhciB4LGFmLG89YTIuZG9jdW1lbnQsYUk9YTIubG9jYXRpb24sZD1hMi5uYXZpZ2F0b3IsYmc9YTIualF1ZXJ5LEk9YTIuJCxhbT1BcnJheS5wcm90b3R5cGUucHVzaCxhND1BcnJheS5wcm90b3R5cGUuc2xpY2UsYUs9QXJyYXkucHJvdG90eXBlLmluZGV4T2YsQT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLFY9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxhTj1TdHJpbmcucHJvdG90eXBlLnRyaW0sYkc9ZnVuY3Rpb24oZSxiWil7cmV0dXJuIG5ldyBiRy5mbi5pbml0KGUsYloseCl9LGJ4PS9bXC0rXT8oPzpcZCpcLnwpXGQrKD86W2VFXVtcLStdP1xkK3wpLy5zb3VyY2UsYWE9L1xTLyxhVj0vXHMrLyxEPWFhLnRlc3QoIlx4QTAiKT8oL15bXHNceEEwXSt8W1xzXHhBMF0rJC9nKTovXlxzK3xccyskL2csYm89L14oPzpbXiM8XSooPFtcd1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLGE9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyxiZj0vXltcXSw6e31cc10qJC8sYmk9Lyg/Ol58OnwsKSg/OlxzKlxbKSsvZyxiRD0vXFwoPzpbIlxcXC9iZm5ydF18dVtcZGEtZkEtRl17NH0pL2csYTA9LyJbXiJcXFxyXG5dKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/KD86XGRcZCpcLnwpXGQrKD86W2VFXVtcLStdP1xkK3wpL2csYlA9L14tbXMtLyxhVT0vLShbXGRhLXpdKS9naSxOPWZ1bmN0aW9uKGUsYlope3JldHVybihiWisiIikudG9VcHBlckNhc2UoKX0sYUY9ZnVuY3Rpb24oKXtpZihvLmFkZEV2ZW50TGlzdGVuZXIpe28ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsYUYsZmFsc2UpO2JHLnJlYWR5KCl9ZWxzZXtpZihvLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKXtvLmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLGFGKTtiRy5yZWFkeSgpfX19LFo9e307YkcuZm49YkcucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiRyxpbml0OmZ1bmN0aW9uKGUsYjIsYjEpe3ZhciBiMCxiMyxiWixiNDtpZighZSl7cmV0dXJuIHRoaXN9aWYoZS5ub2RlVHlwZSl7dGhpcy5jb250ZXh0PXRoaXNbMF09ZTt0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKHR5cGVvZiBlPT09InN0cmluZyIpe2lmKGUuY2hhckF0KDApPT09IjwiJiZlLmNoYXJBdChlLmxlbmd0aC0xKT09PSI+IiYmZS5sZW5ndGg+PTMpe2IwPVtudWxsLGUsbnVsbF19ZWxzZXtiMD1iby5leGVjKGUpfWlmKGIwJiYoYjBbMV18fCFiMikpe2lmKGIwWzFdKXtiMj1iMiBpbnN0YW5jZW9mIGJHP2IyWzBdOmIyO2I0PShiMiYmYjIubm9kZVR5cGU/YjIub3duZXJEb2N1bWVudHx8YjI6byk7ZT1iRy5wYXJzZUhUTUwoYjBbMV0sYjQsdHJ1ZSk7aWYoYS50ZXN0KGIwWzFdKSYmYkcuaXNQbGFpbk9iamVjdChiMikpe3RoaXMuYXR0ci5jYWxsKGUsYjIsdHJ1ZSl9cmV0dXJuIGJHLm1lcmdlKHRoaXMsZSl9ZWxzZXtiMz1vLmdldEVsZW1lbnRCeUlkKGIwWzJdKTtpZihiMyYmYjMucGFyZW50Tm9kZSl7aWYoYjMuaWQhPT1iMFsyXSl7cmV0dXJuIGIxLmZpbmQoZSl9dGhpcy5sZW5ndGg9MTt0aGlzWzBdPWIzfXRoaXMuY29udGV4dD1vO3RoaXMuc2VsZWN0b3I9ZTtyZXR1cm4gdGhpc319ZWxzZXtpZighYjJ8fGIyLmpxdWVyeSl7cmV0dXJuKGIyfHxiMSkuZmluZChlKX1lbHNle3JldHVybiB0aGlzLmNvbnN0cnVjdG9yKGIyKS5maW5kKGUpfX19ZWxzZXtpZihiRy5pc0Z1bmN0aW9uKGUpKXtyZXR1cm4gYjEucmVhZHkoZSl9fWlmKGUuc2VsZWN0b3IhPT1hQil7dGhpcy5zZWxlY3Rvcj1lLnNlbGVjdG9yO3RoaXMuY29udGV4dD1lLmNvbnRleHR9cmV0dXJuIGJHLm1ha2VBcnJheShlLHRoaXMpfSxzZWxlY3RvcjoiIixqcXVlcnk6IjEuOC4wIixsZW5ndGg6MCxzaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIGE0LmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gZT09bnVsbD90aGlzLnRvQXJyYXkoKTooZTwwP3RoaXNbdGhpcy5sZW5ndGgrZV06dGhpc1tlXSl9LHB1c2hTdGFjazpmdW5jdGlvbihiWixiMSxlKXt2YXIgYjA9YkcubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLGJaKTtiMC5wcmV2T2JqZWN0PXRoaXM7YjAuY29udGV4dD10aGlzLmNvbnRleHQ7aWYoYjE9PT0iZmluZCIpe2IwLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrKHRoaXMuc2VsZWN0b3I/IiAiOiIiKStlfWVsc2V7aWYoYjEpe2IwLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK2IxKyIoIitlKyIpIn19cmV0dXJuIGIwfSxlYWNoOmZ1bmN0aW9uKGJaLGUpe3JldHVybiBiRy5lYWNoKHRoaXMsYlosZSl9LHJlYWR5OmZ1bmN0aW9uKGUpe2JHLnJlYWR5LnByb21pc2UoKS5kb25lKGUpO3JldHVybiB0aGlzfSxlcTpmdW5jdGlvbihlKXtlPStlO3JldHVybiBlPT09LTE/dGhpcy5zbGljZShlKTp0aGlzLnNsaWNlKGUsZSsxKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYTQuYXBwbHkodGhpcyxhcmd1bWVudHMpLCJzbGljZSIsYTQuY2FsbChhcmd1bWVudHMpLmpvaW4oIiwiKSl9LG1hcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYkcubWFwKHRoaXMsZnVuY3Rpb24oYjAsYlope3JldHVybiBlLmNhbGwoYjAsYlosYjApfSkpfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKG51bGwpfSxwdXNoOmFtLHNvcnQ6W10uc29ydCxzcGxpY2U6W10uc3BsaWNlfTtiRy5mbi5pbml0LnByb3RvdHlwZT1iRy5mbjtiRy5leHRlbmQ9YkcuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGI3LGIwLGUsYlosYjQsYjUsYjM9YXJndW1lbnRzWzBdfHx7fSxiMj0xLGIxPWFyZ3VtZW50cy5sZW5ndGgsYjY9ZmFsc2U7aWYodHlwZW9mIGIzPT09ImJvb2xlYW4iKXtiNj1iMztiMz1hcmd1bWVudHNbMV18fHt9O2IyPTJ9aWYodHlwZW9mIGIzIT09Im9iamVjdCImJiFiRy5pc0Z1bmN0aW9uKGIzKSl7YjM9e319aWYoYjE9PT1iMil7YjM9dGhpczstLWIyfWZvcig7YjI8YjE7YjIrKyl7aWYoKGI3PWFyZ3VtZW50c1tiMl0pIT1udWxsKXtmb3IoYjAgaW4gYjcpe2U9YjNbYjBdO2JaPWI3W2IwXTtpZihiMz09PWJaKXtjb250aW51ZX1pZihiNiYmYlomJihiRy5pc1BsYWluT2JqZWN0KGJaKXx8KGI0PWJHLmlzQXJyYXkoYlopKSkpe2lmKGI0KXtiND1mYWxzZTtiNT1lJiZiRy5pc0FycmF5KGUpP2U6W119ZWxzZXtiNT1lJiZiRy5pc1BsYWluT2JqZWN0KGUpP2U6e319YjNbYjBdPWJHLmV4dGVuZChiNixiNSxiWil9ZWxzZXtpZihiWiE9PWFCKXtiM1tiMF09Ylp9fX19fXJldHVybiBiM307YkcuZXh0ZW5kKHtub0NvbmZsaWN0OmZ1bmN0aW9uKGUpe2lmKGEyLiQ9PT1iRyl7YTIuJD1JfWlmKGUmJmEyLmpRdWVyeT09PWJHKXthMi5qUXVlcnk9Ymd9cmV0dXJuIGJHfSxpc1JlYWR5OmZhbHNlLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihlKXtpZihlKXtiRy5yZWFkeVdhaXQrK31lbHNle2JHLnJlYWR5KHRydWUpfX0scmVhZHk6ZnVuY3Rpb24oZSl7aWYoZT09PXRydWU/LS1iRy5yZWFkeVdhaXQ6YkcuaXNSZWFkeSl7cmV0dXJufWlmKCFvLmJvZHkpe3JldHVybiBzZXRUaW1lb3V0KGJHLnJlYWR5LDEpfWJHLmlzUmVhZHk9dHJ1ZTtpZihlIT09dHJ1ZSYmLS1iRy5yZWFkeVdhaXQ+MCl7cmV0dXJufWFmLnJlc29sdmVXaXRoKG8sW2JHXSk7aWYoYkcuZm4udHJpZ2dlcil7YkcobykudHJpZ2dlcigicmVhZHkiKS5vZmYoInJlYWR5Iil9fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiBiRy50eXBlKGUpPT09ImZ1bmN0aW9uIn0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4gYkcudHlwZShlKT09PSJhcnJheSJ9LGlzV2luZG93OmZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZlPT1lLndpbmRvd30saXNOdW1lcmljOmZ1bmN0aW9uKGUpe3JldHVybiAhaXNOYU4ocGFyc2VGbG9hdChlKSkmJmlzRmluaXRlKGUpfSx0eXBlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsP1N0cmluZyhlKTpaW0EuY2FsbChlKV18fCJvYmplY3QifSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGIxKXtpZighYjF8fGJHLnR5cGUoYjEpIT09Im9iamVjdCJ8fGIxLm5vZGVUeXBlfHxiRy5pc1dpbmRvdyhiMSkpe3JldHVybiBmYWxzZX10cnl7aWYoYjEuY29uc3RydWN0b3ImJiFWLmNhbGwoYjEsImNvbnN0cnVjdG9yIikmJiFWLmNhbGwoYjEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpe3JldHVybiBmYWxzZX19Y2F0Y2goYjApe3JldHVybiBmYWxzZX12YXIgYlo7Zm9yKGJaIGluIGIxKXt9cmV0dXJuIGJaPT09YUJ8fFYuY2FsbChiMSxiWil9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oYlope3ZhciBlO2ZvcihlIGluIGJaKXtyZXR1cm4gZmFsc2V9cmV0dXJuIHRydWV9LGVycm9yOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0scGFyc2VIVE1MOmZ1bmN0aW9uKGIxLGIwLGUpe3ZhciBiWjtpZighYjF8fHR5cGVvZiBiMSE9PSJzdHJpbmciKXtyZXR1cm4gbnVsbH1pZih0eXBlb2YgYjA9PT0iYm9vbGVhbiIpe2U9YjA7YjA9MH1iMD1iMHx8bztpZigoYlo9YS5leGVjKGIxKSkpe3JldHVybltiMC5jcmVhdGVFbGVtZW50KGJaWzFdKV19Ylo9YkcuYnVpbGRGcmFnbWVudChbYjFdLGIwLGU/bnVsbDpbXSk7cmV0dXJuIGJHLm1lcmdlKFtdLChiWi5jYWNoZWFibGU/YkcuY2xvbmUoYlouZnJhZ21lbnQpOmJaLmZyYWdtZW50KS5jaGlsZE5vZGVzKX0scGFyc2VKU09OOmZ1bmN0aW9uKGUpe2lmKCFlfHx0eXBlb2YgZSE9PSJzdHJpbmciKXtyZXR1cm4gbnVsbH1lPWJHLnRyaW0oZSk7aWYoYTIuSlNPTiYmYTIuSlNPTi5wYXJzZSl7cmV0dXJuIGEyLkpTT04ucGFyc2UoZSl9aWYoYmYudGVzdChlLnJlcGxhY2UoYkQsIkAiKS5yZXBsYWNlKGEwLCJdIikucmVwbGFjZShiaSwiIikpKXtyZXR1cm4obmV3IEZ1bmN0aW9uKCJyZXR1cm4gIitlKSkoKX1iRy5lcnJvcigiSW52YWxpZCBKU09OOiAiK2UpfSxwYXJzZVhNTDpmdW5jdGlvbihiMSl7dmFyIGJaLGIwO2lmKCFiMXx8dHlwZW9mIGIxIT09InN0cmluZyIpe3JldHVybiBudWxsfXRyeXtpZihhMi5ET01QYXJzZXIpe2IwPW5ldyBET01QYXJzZXIoKTtiWj1iMC5wYXJzZUZyb21TdHJpbmcoYjEsInRleHQveG1sIil9ZWxzZXtiWj1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpO2JaLmFzeW5jPSJmYWxzZSI7YloubG9hZFhNTChiMSl9fWNhdGNoKGIyKXtiWj1hQn1pZighYlp8fCFiWi5kb2N1bWVudEVsZW1lbnR8fGJaLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aCl7YkcuZXJyb3IoIkludmFsaWQgWE1MOiAiK2IxKX1yZXR1cm4gYlp9LG5vb3A6ZnVuY3Rpb24oKXt9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oZSl7aWYoZSYmYWEudGVzdChlKSl7KGEyLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGJaKXthMlsiZXZhbCJdLmNhbGwoYTIsYlopfSkoZSl9fSxjYW1lbENhc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShiUCwibXMtIikucmVwbGFjZShhVSxOKX0sbm9kZU5hbWU6ZnVuY3Rpb24oYlosZSl7cmV0dXJuIGJaLm5vZGVOYW1lJiZiWi5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT09ZS50b1VwcGVyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGIzLGI0LGIwKXt2YXIgYlosYjE9MCxiMj1iMy5sZW5ndGgsZT1iMj09PWFCfHxiRy5pc0Z1bmN0aW9uKGIzKTtpZihiMCl7aWYoZSl7Zm9yKGJaIGluIGIzKXtpZihiNC5hcHBseShiM1tiWl0sYjApPT09ZmFsc2Upe2JyZWFrfX19ZWxzZXtmb3IoO2IxPGIyOyl7aWYoYjQuYXBwbHkoYjNbYjErK10sYjApPT09ZmFsc2Upe2JyZWFrfX19fWVsc2V7aWYoZSl7Zm9yKGJaIGluIGIzKXtpZihiNC5jYWxsKGIzW2JaXSxiWixiM1tiWl0pPT09ZmFsc2Upe2JyZWFrfX19ZWxzZXtmb3IoO2IxPGIyOyl7aWYoYjQuY2FsbChiM1tiMV0sYjEsYjNbYjErK10pPT09ZmFsc2Upe2JyZWFrfX19fXJldHVybiBiM30sdHJpbTphTj9mdW5jdGlvbihlKXtyZXR1cm4gZT09bnVsbD8iIjphTi5jYWxsKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gZT09bnVsbD8iIjplLnRvU3RyaW5nKCkucmVwbGFjZShELCIiKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGUsYjApe3ZhciBiMSxiWj1iMHx8W107aWYoZSE9bnVsbCl7YjE9YkcudHlwZShlKTtpZihlLmxlbmd0aD09bnVsbHx8YjE9PT0ic3RyaW5nInx8YjE9PT0iZnVuY3Rpb24ifHxiMT09PSJyZWdleHAifHxiRy5pc1dpbmRvdyhlKSl7YW0uY2FsbChiWixlKX1lbHNle2JHLm1lcmdlKGJaLGUpfX1yZXR1cm4gYlp9LGluQXJyYXk6ZnVuY3Rpb24oYjEsYlosYjApe3ZhciBlO2lmKGJaKXtpZihhSyl7cmV0dXJuIGFLLmNhbGwoYlosYjEsYjApfWU9YloubGVuZ3RoO2IwPWIwP2IwPDA/TWF0aC5tYXgoMCxlK2IwKTpiMDowO2Zvcig7YjA8ZTtiMCsrKXtpZihiMCBpbiBiWiYmYlpbYjBdPT09YjEpe3JldHVybiBiMH19fXJldHVybiAtMX0sbWVyZ2U6ZnVuY3Rpb24oYjIsYjApe3ZhciBlPWIwLmxlbmd0aCxiMT1iMi5sZW5ndGgsYlo9MDtpZih0eXBlb2YgZT09PSJudW1iZXIiKXtmb3IoO2JaPGU7YlorKyl7YjJbYjErK109YjBbYlpdfX1lbHNle3doaWxlKGIwW2JaXSE9PWFCKXtiMltiMSsrXT1iMFtiWisrXX19YjIubGVuZ3RoPWIxO3JldHVybiBiMn0sZ3JlcDpmdW5jdGlvbihiWixiNCxlKXt2YXIgYjMsYjA9W10sYjE9MCxiMj1iWi5sZW5ndGg7ZT0hIWU7Zm9yKDtiMTxiMjtiMSsrKXtiMz0hIWI0KGJaW2IxXSxiMSk7aWYoZSE9PWIzKXtiMC5wdXNoKGJaW2IxXSl9fXJldHVybiBiMH0sbWFwOmZ1bmN0aW9uKGUsYjUsYjYpe3ZhciBiMyxiNCxiMj1bXSxiMD0wLGJaPWUubGVuZ3RoLGIxPWUgaW5zdGFuY2VvZiBiR3x8YlohPT1hQiYmdHlwZW9mIGJaPT09Im51bWJlciImJigoYlo+MCYmZVswXSYmZVtiWi0xXSl8fGJaPT09MHx8YkcuaXNBcnJheShlKSk7aWYoYjEpe2Zvcig7YjA8Ylo7YjArKyl7YjM9YjUoZVtiMF0sYjAsYjYpO2lmKGIzIT1udWxsKXtiMltiMi5sZW5ndGhdPWIzfX19ZWxzZXtmb3IoYjQgaW4gZSl7YjM9YjUoZVtiNF0sYjQsYjYpO2lmKGIzIT1udWxsKXtiMltiMi5sZW5ndGhdPWIzfX19cmV0dXJuIGIyLmNvbmNhdC5hcHBseShbXSxiMil9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihiMixiMSl7dmFyIGIwLGUsYlo7aWYodHlwZW9mIGIxPT09InN0cmluZyIpe2IwPWIyW2IxXTtiMT1iMjtiMj1iMH1pZighYkcuaXNGdW5jdGlvbihiMikpe3JldHVybiBhQn1lPWE0LmNhbGwoYXJndW1lbnRzLDIpO2JaPWZ1bmN0aW9uKCl7cmV0dXJuIGIyLmFwcGx5KGIxLGUuY29uY2F0KGE0LmNhbGwoYXJndW1lbnRzKSkpfTtiWi5ndWlkPWIyLmd1aWQ9YjIuZ3VpZHx8YlouZ3VpZHx8YkcuZ3VpZCsrO3JldHVybiBiWn0sYWNjZXNzOmZ1bmN0aW9uKGUsYjQsYjcsYjUsYjIsYjgsYjYpe3ZhciBiMCxiMz1iNz09bnVsbCxiMT0wLGJaPWUubGVuZ3RoO2lmKGI3JiZ0eXBlb2YgYjc9PT0ib2JqZWN0Iil7Zm9yKGIxIGluIGI3KXtiRy5hY2Nlc3MoZSxiNCxiMSxiN1tiMV0sMSxiOCxiNSl9YjI9MX1lbHNle2lmKGI1IT09YUIpe2IwPWI2PT09YUImJmJHLmlzRnVuY3Rpb24oYjUpO2lmKGIzKXtpZihiMCl7YjA9YjQ7YjQ9ZnVuY3Rpb24oY2EsYjksY2Ipe3JldHVybiBiMC5jYWxsKGJHKGNhKSxjYil9fWVsc2V7YjQuY2FsbChlLGI1KTtiND1udWxsfX1pZihiNCl7Zm9yKDtiMTxiWjtiMSsrKXtiNChlW2IxXSxiNyxiMD9iNS5jYWxsKGVbYjFdLGIxLGI0KGVbYjFdLGI3KSk6YjUsYjYpfX1iMj0xfX1yZXR1cm4gYjI/ZTpiMz9iNC5jYWxsKGUpOmJaP2I0KGVbMF0sYjcpOmI4fSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUoKSkuZ2V0VGltZSgpfX0pO2JHLnJlYWR5LnByb21pc2U9ZnVuY3Rpb24oYjIpe2lmKCFhZil7YWY9YkcuRGVmZXJyZWQoKTtpZihvLnJlYWR5U3RhdGU9PT0iY29tcGxldGUifHwoby5yZWFkeVN0YXRlIT09ImxvYWRpbmciJiZvLmFkZEV2ZW50TGlzdGVuZXIpKXtzZXRUaW1lb3V0KGJHLnJlYWR5LDEpfWVsc2V7aWYoby5hZGRFdmVudExpc3RlbmVyKXtvLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGFGLGZhbHNlKTthMi5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixiRy5yZWFkeSxmYWxzZSl9ZWxzZXtvLmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLGFGKTthMi5hdHRhY2hFdmVudCgib25sb2FkIixiRy5yZWFkeSk7dmFyIGIxPWZhbHNlO3RyeXtiMT1hMi5mcmFtZUVsZW1lbnQ9PW51bGwmJm8uZG9jdW1lbnRFbGVtZW50fWNhdGNoKGIwKXt9aWYoYjEmJmIxLmRvU2Nyb2xsKXsoZnVuY3Rpb24gYlooKXtpZighYkcuaXNSZWFkeSl7dHJ5e2IxLmRvU2Nyb2xsKCJsZWZ0Iil9Y2F0Y2goYjMpe3JldHVybiBzZXRUaW1lb3V0KGJaLDUwKX1iRy5yZWFkeSgpfX0pKCl9fX19cmV0dXJuIGFmLnByb21pc2UoYjIpfTtiRy5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGJaLGUpe1pbIltvYmplY3QgIitlKyJdIl09ZS50b0xvd2VyQ2FzZSgpfSk7eD1iRyhvKTt2YXIgYlU9e307ZnVuY3Rpb24gYWMoYlope3ZhciBlPWJVW2JaXT17fTtiRy5lYWNoKGJaLnNwbGl0KGFWKSxmdW5jdGlvbihiMSxiMCl7ZVtiMF09dHJ1ZX0pO3JldHVybiBlfWJHLkNhbGxiYWNrcz1mdW5jdGlvbihiOCl7Yjg9dHlwZW9mIGI4PT09InN0cmluZyI/KGJVW2I4XXx8YWMoYjgpKTpiRy5leHRlbmQoe30sYjgpO3ZhciBiMSxlLGIyLGIwLGIzLGI0LGI1PVtdLGI2PSFiOC5vbmNlJiZbXSxiWj1mdW5jdGlvbihiOSl7YjE9YjgubWVtb3J5JiZiOTtlPXRydWU7YjQ9YjB8fDA7YjA9MDtiMz1iNS5sZW5ndGg7YjI9dHJ1ZTtmb3IoO2I1JiZiNDxiMztiNCsrKXtpZihiNVtiNF0uYXBwbHkoYjlbMF0sYjlbMV0pPT09ZmFsc2UmJmI4LnN0b3BPbkZhbHNlKXtiMT1mYWxzZTticmVha319YjI9ZmFsc2U7aWYoYjUpe2lmKGI2KXtpZihiNi5sZW5ndGgpe2JaKGI2LnNoaWZ0KCkpfX1lbHNle2lmKGIxKXtiNT1bXX1lbHNle2I3LmRpc2FibGUoKX19fX0sYjc9e2FkZDpmdW5jdGlvbigpe2lmKGI1KXt2YXIgY2E9YjUubGVuZ3RoOyhmdW5jdGlvbiBiOShjYil7YkcuZWFjaChjYixmdW5jdGlvbihjZCxjYyl7aWYoYkcuaXNGdW5jdGlvbihjYykmJighYjgudW5pcXVlfHwhYjcuaGFzKGNjKSkpe2I1LnB1c2goY2MpfWVsc2V7aWYoY2MmJmNjLmxlbmd0aCl7YjkoY2MpfX19KX0pKGFyZ3VtZW50cyk7aWYoYjIpe2IzPWI1Lmxlbmd0aH1lbHNle2lmKGIxKXtiMD1jYTtiWihiMSl9fX1yZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7aWYoYjUpe2JHLmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGNiLGI5KXt2YXIgY2E7d2hpbGUoKGNhPWJHLmluQXJyYXkoYjksYjUsY2EpKT4tMSl7YjUuc3BsaWNlKGNhLDEpO2lmKGIyKXtpZihjYTw9YjMpe2IzLS19aWYoY2E8PWI0KXtiNC0tfX19fSl9cmV0dXJuIHRoaXN9LGhhczpmdW5jdGlvbihiOSl7cmV0dXJuIGJHLmluQXJyYXkoYjksYjUpPi0xfSxlbXB0eTpmdW5jdGlvbigpe2I1PVtdO3JldHVybiB0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7YjU9YjY9YjE9YUI7cmV0dXJuIHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuICFiNX0sbG9jazpmdW5jdGlvbigpe2I2PWFCO2lmKCFiMSl7YjcuZGlzYWJsZSgpfXJldHVybiB0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gIWI2fSxmaXJlV2l0aDpmdW5jdGlvbihjYSxiOSl7Yjk9Yjl8fFtdO2I5PVtjYSxiOS5zbGljZT9iOS5zbGljZSgpOmI5XTtpZihiNSYmKCFlfHxiNikpe2lmKGIyKXtiNi5wdXNoKGI5KX1lbHNle2JaKGI5KX19cmV0dXJuIHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtiNy5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuICEhZX19O3JldHVybiBiN307YkcuZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihiMCl7dmFyIGJaPVtbInJlc29sdmUiLCJkb25lIixiRy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIixiRy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlamVjdGVkIl0sWyJub3RpZnkiLCJwcm9ncmVzcyIsYkcuQ2FsbGJhY2tzKCJtZW1vcnkiKV1dLGIxPSJwZW5kaW5nIixiMj17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gYjF9LGFsd2F5czpmdW5jdGlvbigpe2UuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKTtyZXR1cm4gdGhpc30sdGhlbjpmdW5jdGlvbigpe3ZhciBiMz1hcmd1bWVudHM7cmV0dXJuIGJHLkRlZmVycmVkKGZ1bmN0aW9uKGI0KXtiRy5lYWNoKGJaLGZ1bmN0aW9uKGI2LGI1KXt2YXIgYjg9YjVbMF0sYjc9YjNbYjZdO2VbYjVbMV1dKGJHLmlzRnVuY3Rpb24oYjcpP2Z1bmN0aW9uKCl7dmFyIGI5PWI3LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihiOSYmYkcuaXNGdW5jdGlvbihiOS5wcm9taXNlKSl7YjkucHJvbWlzZSgpLmRvbmUoYjQucmVzb2x2ZSkuZmFpbChiNC5yZWplY3QpLnByb2dyZXNzKGI0Lm5vdGlmeSl9ZWxzZXtiNFtiOCsiV2l0aCJdKHRoaXM9PT1lP2I0OnRoaXMsW2I5XSl9fTpiNFtiOF0pfSk7YjM9bnVsbH0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihiMyl7cmV0dXJuIHR5cGVvZiBiMz09PSJvYmplY3QiP2JHLmV4dGVuZChiMyxiMik6YjJ9fSxlPXt9O2IyLnBpcGU9YjIudGhlbjtiRy5lYWNoKGJaLGZ1bmN0aW9uKGI0LGIzKXt2YXIgYjY9YjNbMl0sYjU9YjNbM107YjJbYjNbMV1dPWI2LmFkZDtpZihiNSl7YjYuYWRkKGZ1bmN0aW9uKCl7YjE9YjV9LGJaW2I0XjFdWzJdLmRpc2FibGUsYlpbMl1bMl0ubG9jayl9ZVtiM1swXV09YjYuZmlyZTtlW2IzWzBdKyJXaXRoIl09YjYuZmlyZVdpdGh9KTtiMi5wcm9taXNlKGUpO2lmKGIwKXtiMC5jYWxsKGUsZSl9cmV0dXJuIGV9LHdoZW46ZnVuY3Rpb24oYjIpe3ZhciBiMD0wLGI0PWE0LmNhbGwoYXJndW1lbnRzKSxlPWI0Lmxlbmd0aCxiWj1lIT09MXx8KGIyJiZiRy5pc0Z1bmN0aW9uKGIyLnByb21pc2UpKT9lOjAsYjc9Ylo9PT0xP2IyOmJHLkRlZmVycmVkKCksYjE9ZnVuY3Rpb24oYjksY2EsYjgpe3JldHVybiBmdW5jdGlvbihjYil7Y2FbYjldPXRoaXM7YjhbYjldPWFyZ3VtZW50cy5sZW5ndGg+MT9hNC5jYWxsKGFyZ3VtZW50cyk6Y2I7aWYoYjg9PT1iNil7Yjcubm90aWZ5V2l0aChjYSxiOCl9ZWxzZXtpZighKC0tYlopKXtiNy5yZXNvbHZlV2l0aChjYSxiOCl9fX19LGI2LGIzLGI1O2lmKGU+MSl7YjY9bmV3IEFycmF5KGUpO2IzPW5ldyBBcnJheShlKTtiNT1uZXcgQXJyYXkoZSk7Zm9yKDtiMDxlO2IwKyspe2lmKGI0W2IwXSYmYkcuaXNGdW5jdGlvbihiNFtiMF0ucHJvbWlzZSkpe2I0W2IwXS5wcm9taXNlKCkuZG9uZShiMShiMCxiNSxiNCkpLmZhaWwoYjcucmVqZWN0KS5wcm9ncmVzcyhiMShiMCxiMyxiNikpfWVsc2V7LS1iWn19fWlmKCFiWil7YjcucmVzb2x2ZVdpdGgoYjUsYjQpfXJldHVybiBiNy5wcm9taXNlKCl9fSk7Ykcuc3VwcG9ydD0oZnVuY3Rpb24oKXt2YXIgY2IsY2EsYjgsYjksYjIsYjcsYjYsYjQsYjMsYjEsYlosYjA9by5jcmVhdGVFbGVtZW50KCJkaXYiKTtiMC5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKTtiMC5pbm5lckhUTUw9IiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiI7Y2E9YjAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTtiOD1iMC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpWzBdO2I4LnN0eWxlLmNzc1RleHQ9InRvcDoxcHg7ZmxvYXQ6bGVmdDtvcGFjaXR5Oi41IjtpZighY2F8fCFjYS5sZW5ndGh8fCFiOCl7cmV0dXJue319Yjk9by5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKTtiMj1iOS5hcHBlbmRDaGlsZChvLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKTtiNz1iMC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXTtjYj17bGVhZGluZ1doaXRlc3BhY2U6KGIwLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0zKSx0Ym9keTohYjAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikubGVuZ3RoLGh0bWxTZXJpYWxpemU6ISFiMC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxzdHlsZTovdG9wLy50ZXN0KGI4LmdldEF0dHJpYnV0ZSgic3R5bGUiKSksaHJlZk5vcm1hbGl6ZWQ6KGI4LmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09Ii9hIiksb3BhY2l0eTovXjAuNS8udGVzdChiOC5zdHlsZS5vcGFjaXR5KSxjc3NGbG9hdDohIWI4LnN0eWxlLmNzc0Zsb2F0LGNoZWNrT246KGI3LnZhbHVlPT09Im9uIiksb3B0U2VsZWN0ZWQ6YjIuc2VsZWN0ZWQsZ2V0U2V0QXR0cmlidXRlOmIwLmNsYXNzTmFtZSE9PSJ0IixlbmN0eXBlOiEhby5jcmVhdGVFbGVtZW50KCJmb3JtIikuZW5jdHlwZSxodG1sNUNsb25lOm8uY3JlYXRlRWxlbWVudCgibmF2IikuY2xvbmVOb2RlKHRydWUpLm91dGVySFRNTCE9PSI8Om5hdj48LzpuYXY+Iixib3hNb2RlbDooby5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQiKSxzdWJtaXRCdWJibGVzOnRydWUsY2hhbmdlQnViYmxlczp0cnVlLGZvY3VzaW5CdWJibGVzOmZhbHNlLGRlbGV0ZUV4cGFuZG86dHJ1ZSxub0Nsb25lRXZlbnQ6dHJ1ZSxpbmxpbmVCbG9ja05lZWRzTGF5b3V0OmZhbHNlLHNocmlua1dyYXBCbG9ja3M6ZmFsc2UscmVsaWFibGVNYXJnaW5SaWdodDp0cnVlLGJveFNpemluZ1JlbGlhYmxlOnRydWUscGl4ZWxQb3NpdGlvbjpmYWxzZX07YjcuY2hlY2tlZD10cnVlO2NiLm5vQ2xvbmVDaGVja2VkPWI3LmNsb25lTm9kZSh0cnVlKS5jaGVja2VkO2I5LmRpc2FibGVkPXRydWU7Y2Iub3B0RGlzYWJsZWQ9IWIyLmRpc2FibGVkO3RyeXtkZWxldGUgYjAudGVzdH1jYXRjaChiNSl7Y2IuZGVsZXRlRXhwYW5kbz1mYWxzZX1pZighYjAuYWRkRXZlbnRMaXN0ZW5lciYmYjAuYXR0YWNoRXZlbnQmJmIwLmZpcmVFdmVudCl7YjAuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGJaPWZ1bmN0aW9uKCl7Y2Iubm9DbG9uZUV2ZW50PWZhbHNlfSk7YjAuY2xvbmVOb2RlKHRydWUpLmZpcmVFdmVudCgib25jbGljayIpO2IwLmRldGFjaEV2ZW50KCJvbmNsaWNrIixiWil9Yjc9by5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO2I3LnZhbHVlPSJ0IjtiNy5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpO2NiLnJhZGlvVmFsdWU9YjcudmFsdWU9PT0idCI7Yjcuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpO2I3LnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKTtiMC5hcHBlbmRDaGlsZChiNyk7YjY9by5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7YjYuYXBwZW5kQ2hpbGQoYjAubGFzdENoaWxkKTtjYi5jaGVja0Nsb25lPWI2LmNsb25lTm9kZSh0cnVlKS5jbG9uZU5vZGUodHJ1ZSkubGFzdENoaWxkLmNoZWNrZWQ7Y2IuYXBwZW5kQ2hlY2tlZD1iNy5jaGVja2VkO2I2LnJlbW92ZUNoaWxkKGI3KTtiNi5hcHBlbmRDaGlsZChiMCk7aWYoYjAuYXR0YWNoRXZlbnQpe2ZvcihiMyBpbiB7c3VibWl0OnRydWUsY2hhbmdlOnRydWUsZm9jdXNpbjp0cnVlfSl7YjQ9Im9uIitiMztiMT0oYjQgaW4gYjApO2lmKCFiMSl7YjAuc2V0QXR0cmlidXRlKGI0LCJyZXR1cm47Iik7YjE9KHR5cGVvZiBiMFtiNF09PT0iZnVuY3Rpb24iKX1jYltiMysiQnViYmxlcyJdPWIxfX1iRyhmdW5jdGlvbigpe3ZhciBjYyxjZyxjZSxjZixjZD0icGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVuOyIsZT1vLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07aWYoIWUpe3JldHVybn1jYz1vLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2NjLnN0eWxlLmNzc1RleHQ9InZpc2liaWxpdHk6aGlkZGVuO2JvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246c3RhdGljO3RvcDowO21hcmdpbi10b3A6MXB4IjtlLmluc2VydEJlZm9yZShjYyxlLmZpcnN0Q2hpbGQpO2NnPW8uY3JlYXRlRWxlbWVudCgiZGl2Iik7Y2MuYXBwZW5kQ2hpbGQoY2cpO2NnLmlubmVySFRNTD0iPHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiI7Y2U9Y2cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7Y2VbMF0uc3R5bGUuY3NzVGV4dD0icGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSI7YjE9KGNlWzBdLm9mZnNldEhlaWdodD09PTApO2NlWzBdLnN0eWxlLmRpc3BsYXk9IiI7Y2VbMV0uc3R5bGUuZGlzcGxheT0ibm9uZSI7Y2IucmVsaWFibGVIaWRkZW5PZmZzZXRzPWIxJiYoY2VbMF0ub2Zmc2V0SGVpZ2h0PT09MCk7Y2cuaW5uZXJIVE1MPSIiO2NnLnN0eWxlLmNzc1RleHQ9ImJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjFweDtib3JkZXI6MXB4O2Rpc3BsYXk6YmxvY2s7d2lkdGg6NHB4O21hcmdpbi10b3A6MSU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjElOyI7Y2IuYm94U2l6aW5nPShjZy5vZmZzZXRXaWR0aD09PTQpO2NiLmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0PShlLm9mZnNldFRvcCE9PTEpO2lmKGEyLmdldENvbXB1dGVkU3R5bGUpe2NiLnBpeGVsUG9zaXRpb249KGEyLmdldENvbXB1dGVkU3R5bGUoY2csbnVsbCl8fHt9KS50b3AhPT0iMSUiO2NiLmJveFNpemluZ1JlbGlhYmxlPShhMi5nZXRDb21wdXRlZFN0eWxlKGNnLG51bGwpfHx7d2lkdGg6IjRweCJ9KS53aWR0aD09PSI0cHgiO2NmPW8uY3JlYXRlRWxlbWVudCgiZGl2Iik7Y2Yuc3R5bGUuY3NzVGV4dD1jZy5zdHlsZS5jc3NUZXh0PWNkO2NmLnN0eWxlLm1hcmdpblJpZ2h0PWNmLnN0eWxlLndpZHRoPSIwIjtjZy5zdHlsZS53aWR0aD0iMXB4IjtjZy5hcHBlbmRDaGlsZChjZik7Y2IucmVsaWFibGVNYXJnaW5SaWdodD0hcGFyc2VGbG9hdCgoYTIuZ2V0Q29tcHV0ZWRTdHlsZShjZixudWxsKXx8e30pLm1hcmdpblJpZ2h0KX1pZih0eXBlb2YgY2cuc3R5bGUuem9vbSE9PSJ1bmRlZmluZWQiKXtjZy5pbm5lckhUTUw9IiI7Y2cuc3R5bGUuY3NzVGV4dD1jZCsid2lkdGg6MXB4O3BhZGRpbmc6MXB4O2Rpc3BsYXk6aW5saW5lO3pvb206MSI7Y2IuaW5saW5lQmxvY2tOZWVkc0xheW91dD0oY2cub2Zmc2V0V2lkdGg9PT0zKTtjZy5zdHlsZS5kaXNwbGF5PSJibG9jayI7Y2cuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiO2NnLmlubmVySFRNTD0iPGRpdj48L2Rpdj4iO2NnLmZpcnN0Q2hpbGQuc3R5bGUud2lkdGg9IjVweCI7Y2Iuc2hyaW5rV3JhcEJsb2Nrcz0oY2cub2Zmc2V0V2lkdGghPT0zKTtjYy5zdHlsZS56b29tPTF9ZS5yZW1vdmVDaGlsZChjYyk7Y2M9Y2c9Y2U9Y2Y9bnVsbH0pO2I2LnJlbW92ZUNoaWxkKGIwKTtjYT1iOD1iOT1iMj1iNz1iNj1iMD1udWxsO3JldHVybiBjYn0pKCk7dmFyIGJ0PS9eKD86XHsuKlx9fFxbLipcXSkkLyxhTD0vKFtBLVpdKS9nO2JHLmV4dGVuZCh7Y2FjaGU6e30sZGVsZXRlZElkczpbXSx1dWlkOjAsZXhwYW5kbzoialF1ZXJ5IisoYkcuZm4uanF1ZXJ5K01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLG5vRGF0YTp7ZW1iZWQ6dHJ1ZSxvYmplY3Q6ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIsYXBwbGV0OnRydWV9LGhhc0RhdGE6ZnVuY3Rpb24oZSl7ZT1lLm5vZGVUeXBlP2JHLmNhY2hlW2VbYkcuZXhwYW5kb11dOmVbYkcuZXhwYW5kb107cmV0dXJuICEhZSYmIU8oZSl9LGRhdGE6ZnVuY3Rpb24oYjEsYlosYjMsYjIpe2lmKCFiRy5hY2NlcHREYXRhKGIxKSl7cmV0dXJufXZhciBiNCxiNixiNz1iRy5leHBhbmRvLGI1PXR5cGVvZiBiWj09PSJzdHJpbmciLGI4PWIxLm5vZGVUeXBlLGU9Yjg/YkcuY2FjaGU6YjEsYjA9Yjg/YjFbYjddOmIxW2I3XSYmYjc7aWYoKCFiMHx8IWVbYjBdfHwoIWIyJiYhZVtiMF0uZGF0YSkpJiZiNSYmYjM9PT1hQil7cmV0dXJufWlmKCFiMCl7aWYoYjgpe2IxW2I3XT1iMD1iRy5kZWxldGVkSWRzLnBvcCgpfHwrK2JHLnV1aWR9ZWxzZXtiMD1iN319aWYoIWVbYjBdKXtlW2IwXT17fTtpZighYjgpe2VbYjBdLnRvSlNPTj1iRy5ub29wfX1pZih0eXBlb2YgYlo9PT0ib2JqZWN0Inx8dHlwZW9mIGJaPT09ImZ1bmN0aW9uIil7aWYoYjIpe2VbYjBdPWJHLmV4dGVuZChlW2IwXSxiWil9ZWxzZXtlW2IwXS5kYXRhPWJHLmV4dGVuZChlW2IwXS5kYXRhLGJaKX19YjQ9ZVtiMF07aWYoIWIyKXtpZighYjQuZGF0YSl7YjQuZGF0YT17fX1iND1iNC5kYXRhfWlmKGIzIT09YUIpe2I0W2JHLmNhbWVsQ2FzZShiWildPWIzfWlmKGI1KXtiNj1iNFtiWl07aWYoYjY9PW51bGwpe2I2PWI0W2JHLmNhbWVsQ2FzZShiWildfX1lbHNle2I2PWI0fXJldHVybiBiNn0scmVtb3ZlRGF0YTpmdW5jdGlvbihiMSxiWixiMil7aWYoIWJHLmFjY2VwdERhdGEoYjEpKXtyZXR1cm59dmFyIGI1LGI0LGIzLGI2PWIxLm5vZGVUeXBlLGU9YjY/YkcuY2FjaGU6YjEsYjA9YjY/YjFbYkcuZXhwYW5kb106YkcuZXhwYW5kbztpZighZVtiMF0pe3JldHVybn1pZihiWil7YjU9YjI/ZVtiMF06ZVtiMF0uZGF0YTtpZihiNSl7aWYoIWJHLmlzQXJyYXkoYlopKXtpZihiWiBpbiBiNSl7Ylo9W2JaXX1lbHNle2JaPWJHLmNhbWVsQ2FzZShiWik7aWYoYlogaW4gYjUpe2JaPVtiWl19ZWxzZXtiWj1iWi5zcGxpdCgiICIpfX19Zm9yKGI0PTAsYjM9YloubGVuZ3RoO2I0PGIzO2I0Kyspe2RlbGV0ZSBiNVtiWltiNF1dfWlmKCEoYjI/TzpiRy5pc0VtcHR5T2JqZWN0KShiNSkpe3JldHVybn19fWlmKCFiMil7ZGVsZXRlIGVbYjBdLmRhdGE7aWYoIU8oZVtiMF0pKXtyZXR1cm59fWlmKGI2KXtiRy5jbGVhbkRhdGEoW2IxXSx0cnVlKX1lbHNle2lmKGJHLnN1cHBvcnQuZGVsZXRlRXhwYW5kb3x8ZSE9ZS53aW5kb3cpe2RlbGV0ZSBlW2IwXX1lbHNle2VbYjBdPW51bGx9fX0sX2RhdGE6ZnVuY3Rpb24oYlosZSxiMCl7cmV0dXJuIGJHLmRhdGEoYlosZSxiMCx0cnVlKX0sYWNjZXB0RGF0YTpmdW5jdGlvbihiWil7dmFyIGU9Yloubm9kZU5hbWUmJmJHLm5vRGF0YVtiWi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtyZXR1cm4gIWV8fGUhPT10cnVlJiZiWi5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKT09PWV9fSk7YkcuZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGI3LGI2KXt2YXIgYjIsYlosYjUsZSxiMSxiMD10aGlzWzBdLGI0PTAsYjM9bnVsbDtpZihiNz09PWFCKXtpZih0aGlzLmxlbmd0aCl7YjM9YkcuZGF0YShiMCk7aWYoYjAubm9kZVR5cGU9PT0xJiYhYkcuX2RhdGEoYjAsInBhcnNlZEF0dHJzIikpe2I1PWIwLmF0dHJpYnV0ZXM7Zm9yKGIxPWI1Lmxlbmd0aDtiNDxiMTtiNCsrKXtlPWI1W2I0XS5uYW1lO2lmKGUuaW5kZXhPZigiZGF0YS0iKT09PTApe2U9YkcuY2FtZWxDYXNlKGUuc3Vic3RyaW5nKDUpKTtidihiMCxlLGIzW2VdKX19YkcuX2RhdGEoYjAsInBhcnNlZEF0dHJzIix0cnVlKX19cmV0dXJuIGIzfWlmKHR5cGVvZiBiNz09PSJvYmplY3QiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7YkcuZGF0YSh0aGlzLGI3KX0pfWIyPWI3LnNwbGl0KCIuIiwyKTtiMlsxXT1iMlsxXT8iLiIrYjJbMV06IiI7Ylo9YjJbMV0rIiEiO3JldHVybiBiRy5hY2Nlc3ModGhpcyxmdW5jdGlvbihiOCl7aWYoYjg9PT1hQil7YjM9dGhpcy50cmlnZ2VySGFuZGxlcigiZ2V0RGF0YSIrYlosW2IyWzBdXSk7aWYoYjM9PT1hQiYmYjApe2IzPWJHLmRhdGEoYjAsYjcpO2IzPWJ2KGIwLGI3LGIzKX1yZXR1cm4gYjM9PT1hQiYmYjJbMV0/dGhpcy5kYXRhKGIyWzBdKTpiM31iMlsxXT1iODt0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYjk9YkcodGhpcyk7YjkudHJpZ2dlckhhbmRsZXIoInNldERhdGEiK2JaLGIyKTtiRy5kYXRhKHRoaXMsYjcsYjgpO2I5LnRyaWdnZXJIYW5kbGVyKCJjaGFuZ2VEYXRhIitiWixiMil9KX0sbnVsbCxiNixhcmd1bWVudHMubGVuZ3RoPjEsbnVsbCxmYWxzZSl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2JHLnJlbW92ZURhdGEodGhpcyxlKX0pfX0pO2Z1bmN0aW9uIGJ2KGIxLGIwLGIyKXtpZihiMj09PWFCJiZiMS5ub2RlVHlwZT09PTEpe3ZhciBiWj0iZGF0YS0iK2IwLnJlcGxhY2UoYUwsIi0kMSIpLnRvTG93ZXJDYXNlKCk7YjI9YjEuZ2V0QXR0cmlidXRlKGJaKTtpZih0eXBlb2YgYjI9PT0ic3RyaW5nIil7dHJ5e2IyPWIyPT09InRydWUiP3RydWU6YjI9PT0iZmFsc2UiP2ZhbHNlOmIyPT09Im51bGwiP251bGw6K2IyKyIiPT09YjI/K2IyOmJ0LnRlc3QoYjIpP2JHLnBhcnNlSlNPTihiMik6YjJ9Y2F0Y2goYjMpe31iRy5kYXRhKGIxLGIwLGIyKX1lbHNle2IyPWFCfX1yZXR1cm4gYjJ9ZnVuY3Rpb24gTyhiWil7dmFyIGU7Zm9yKGUgaW4gYlope2lmKGU9PT0iZGF0YSImJmJHLmlzRW1wdHlPYmplY3QoYlpbZV0pKXtjb250aW51ZX1pZihlIT09InRvSlNPTiIpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9YkcuZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihiMCxiWixiMSl7dmFyIGU7aWYoYjApe2JaPShiWnx8ImZ4IikrInF1ZXVlIjtlPWJHLl9kYXRhKGIwLGJaKTtpZihiMSl7aWYoIWV8fGJHLmlzQXJyYXkoYjEpKXtlPWJHLl9kYXRhKGIwLGJaLGJHLm1ha2VBcnJheShiMSkpfWVsc2V7ZS5wdXNoKGIxKX19cmV0dXJuIGV8fFtdfX0sZGVxdWV1ZTpmdW5jdGlvbihiMyxiMil7YjI9YjJ8fCJmeCI7dmFyIGJaPWJHLnF1ZXVlKGIzLGIyKSxiMT1iWi5zaGlmdCgpLGU9YkcuX3F1ZXVlSG9va3MoYjMsYjIpLGIwPWZ1bmN0aW9uKCl7YkcuZGVxdWV1ZShiMyxiMil9O2lmKGIxPT09ImlucHJvZ3Jlc3MiKXtiMT1iWi5zaGlmdCgpfWlmKGIxKXtpZihiMj09PSJmeCIpe2JaLnVuc2hpZnQoImlucHJvZ3Jlc3MiKX1kZWxldGUgZS5zdG9wO2IxLmNhbGwoYjMsYjAsZSl9aWYoIWJaLmxlbmd0aCYmZSl7ZS5lbXB0eS5maXJlKCl9fSxfcXVldWVIb29rczpmdW5jdGlvbihiMCxiWil7dmFyIGU9YlorInF1ZXVlSG9va3MiO3JldHVybiBiRy5fZGF0YShiMCxlKXx8YkcuX2RhdGEoYjAsZSx7ZW1wdHk6YkcuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpe2JHLnJlbW92ZURhdGEoYjAsYlorInF1ZXVlIix0cnVlKTtiRy5yZW1vdmVEYXRhKGIwLGUsdHJ1ZSl9KX0pfX0pO2JHLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSxiWil7dmFyIGIwPTI7aWYodHlwZW9mIGUhPT0ic3RyaW5nIil7Ylo9ZTtlPSJmeCI7YjAtLX1pZihhcmd1bWVudHMubGVuZ3RoPGIwKXtyZXR1cm4gYkcucXVldWUodGhpc1swXSxlKX1yZXR1cm4gYlo9PT1hQj90aGlzOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiMT1iRy5xdWV1ZSh0aGlzLGUsYlopO2JHLl9xdWV1ZUhvb2tzKHRoaXMsZSk7aWYoZT09PSJmeCImJmIxWzBdIT09ImlucHJvZ3Jlc3MiKXtiRy5kZXF1ZXVlKHRoaXMsZSl9fSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2JHLmRlcXVldWUodGhpcyxlKX0pfSxkZWxheTpmdW5jdGlvbihiWixlKXtiWj1iRy5meD9iRy5meC5zcGVlZHNbYlpdfHxiWjpiWjtlPWV8fCJmeCI7cmV0dXJuIHRoaXMucXVldWUoZSxmdW5jdGlvbihiMSxiMCl7dmFyIGIyPXNldFRpbWVvdXQoYjEsYlopO2IwLnN0b3A9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoYjIpfX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGIwLGI0KXt2YXIgYlosYjE9MSxiNT1iRy5EZWZlcnJlZCgpLGIzPXRoaXMsZT10aGlzLmxlbmd0aCxiMj1mdW5jdGlvbigpe2lmKCEoLS1iMSkpe2I1LnJlc29sdmVXaXRoKGIzLFtiM10pfX07aWYodHlwZW9mIGIwIT09InN0cmluZyIpe2I0PWIwO2IwPWFCfWIwPWIwfHwiZngiO3doaWxlKGUtLSl7aWYoKGJaPWJHLl9kYXRhKGIzW2VdLGIwKyJxdWV1ZUhvb2tzIikpJiZiWi5lbXB0eSl7YjErKztiWi5lbXB0eS5hZGQoYjIpfX1iMigpO3JldHVybiBiNS5wcm9taXNlKGI0KX19KTt2YXIgYTcsYlYsbixiSj0vW1x0XHJcbl0vZyxhaT0vXHIvZyxqPS9eKD86YnV0dG9ufGlucHV0KSQvaSxhQT0vXig/OmJ1dHRvbnxpbnB1dHxvYmplY3R8c2VsZWN0fHRleHRhcmVhKSQvaSxFPS9eYSg/OnJlYXwpJC9pLE09L14oPzphdXRvZm9jdXN8YXV0b3BsYXl8YXN5bmN8Y2hlY2tlZHxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZHxzZWxlY3RlZCkkL2ksYkw9Ykcuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGU7YkcuZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsYlope3JldHVybiBiRy5hY2Nlc3ModGhpcyxiRy5hdHRyLGUsYlosYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7YkcucmVtb3ZlQXR0cih0aGlzLGUpfSl9LHByb3A6ZnVuY3Rpb24oZSxiWil7cmV0dXJuIGJHLmFjY2Vzcyh0aGlzLGJHLnByb3AsZSxiWixhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGUpe2U9YkcucHJvcEZpeFtlXXx8ZTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbZV09YUI7ZGVsZXRlIHRoaXNbZV19Y2F0Y2goYlope319KX0sYWRkQ2xhc3M6ZnVuY3Rpb24oYjIpe3ZhciBiNCxiMCxiWixiMSxiMyxiNSxlO2lmKGJHLmlzRnVuY3Rpb24oYjIpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGI2KXtiRyh0aGlzKS5hZGRDbGFzcyhiMi5jYWxsKHRoaXMsYjYsdGhpcy5jbGFzc05hbWUpKX0pfWlmKGIyJiZ0eXBlb2YgYjI9PT0ic3RyaW5nIil7YjQ9YjIuc3BsaXQoYVYpO2ZvcihiMD0wLGJaPXRoaXMubGVuZ3RoO2IwPGJaO2IwKyspe2IxPXRoaXNbYjBdO2lmKGIxLm5vZGVUeXBlPT09MSl7aWYoIWIxLmNsYXNzTmFtZSYmYjQubGVuZ3RoPT09MSl7YjEuY2xhc3NOYW1lPWIyfWVsc2V7YjM9IiAiK2IxLmNsYXNzTmFtZSsiICI7Zm9yKGI1PTAsZT1iNC5sZW5ndGg7YjU8ZTtiNSsrKXtpZighfmIzLmluZGV4T2YoIiAiK2I0W2I1XSsiICIpKXtiMys9YjRbYjVdKyIgIn19YjEuY2xhc3NOYW1lPWJHLnRyaW0oYjMpfX19fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihiNCl7dmFyIGIxLGIyLGIzLGI1LGJaLGIwLGU7aWYoYkcuaXNGdW5jdGlvbihiNCkpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYjYpe2JHKHRoaXMpLnJlbW92ZUNsYXNzKGI0LmNhbGwodGhpcyxiNix0aGlzLmNsYXNzTmFtZSkpfSl9aWYoKGI0JiZ0eXBlb2YgYjQ9PT0ic3RyaW5nIil8fGI0PT09YUIpe2IxPShiNHx8IiIpLnNwbGl0KGFWKTtmb3IoYjA9MCxlPXRoaXMubGVuZ3RoO2IwPGU7YjArKyl7YjM9dGhpc1tiMF07aWYoYjMubm9kZVR5cGU9PT0xJiZiMy5jbGFzc05hbWUpe2IyPSgiICIrYjMuY2xhc3NOYW1lKyIgIikucmVwbGFjZShiSiwiICIpO2ZvcihiNT0wLGJaPWIxLmxlbmd0aDtiNTxiWjtiNSsrKXt3aGlsZShiMi5pbmRleE9mKCIgIitiMVtiNV0rIiAiKT4tMSl7YjI9YjIucmVwbGFjZSgiICIrYjFbYjVdKyIgIiwiICIpfX1iMy5jbGFzc05hbWU9YjQ/YkcudHJpbShiMik6IiJ9fX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oYjEsYlope3ZhciBiMD10eXBlb2YgYjEsZT10eXBlb2YgYlo9PT0iYm9vbGVhbiI7aWYoYkcuaXNGdW5jdGlvbihiMSkpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYjIpe2JHKHRoaXMpLnRvZ2dsZUNsYXNzKGIxLmNhbGwodGhpcyxiMix0aGlzLmNsYXNzTmFtZSxiWiksYlopfSl9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKGIwPT09InN0cmluZyIpe3ZhciBiNCxiMz0wLGIyPWJHKHRoaXMpLGI1PWJaLGI2PWIxLnNwbGl0KGFWKTt3aGlsZSgoYjQ9YjZbYjMrK10pKXtiNT1lP2I1OiFiMi5oYXNDbGFzcyhiNCk7YjJbYjU/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXShiNCl9fWVsc2V7aWYoYjA9PT0idW5kZWZpbmVkInx8YjA9PT0iYm9vbGVhbiIpe2lmKHRoaXMuY2xhc3NOYW1lKXtiRy5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSl9dGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGIxPT09ZmFsc2U/IiI6YkcuX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIn19fSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciBiMT0iICIrZSsiICIsYjA9MCxiWj10aGlzLmxlbmd0aDtmb3IoO2IwPGJaO2IwKyspe2lmKHRoaXNbYjBdLm5vZGVUeXBlPT09MSYmKCIgIit0aGlzW2IwXS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKGJKLCIgIikuaW5kZXhPZihiMSk+LTEpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9LHZhbDpmdW5jdGlvbihiMSl7dmFyIGUsYlosYjIsYjA9dGhpc1swXTtpZighYXJndW1lbnRzLmxlbmd0aCl7aWYoYjApe2U9YkcudmFsSG9va3NbYjAudHlwZV18fGJHLnZhbEhvb2tzW2IwLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldO2lmKGUmJiJnZXQiIGluIGUmJihiWj1lLmdldChiMCwidmFsdWUiKSkhPT1hQil7cmV0dXJuIGJafWJaPWIwLnZhbHVlO3JldHVybiB0eXBlb2YgYlo9PT0ic3RyaW5nIj9iWi5yZXBsYWNlKGFpLCIiKTpiWj09bnVsbD8iIjpiWn1yZXR1cm59YjI9YkcuaXNGdW5jdGlvbihiMSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiNCl7dmFyIGI1LGIzPWJHKHRoaXMpO2lmKHRoaXMubm9kZVR5cGUhPT0xKXtyZXR1cm59aWYoYjIpe2I1PWIxLmNhbGwodGhpcyxiNCxiMy52YWwoKSl9ZWxzZXtiNT1iMX1pZihiNT09bnVsbCl7YjU9IiJ9ZWxzZXtpZih0eXBlb2YgYjU9PT0ibnVtYmVyIil7YjUrPSIifWVsc2V7aWYoYkcuaXNBcnJheShiNSkpe2I1PWJHLm1hcChiNSxmdW5jdGlvbihiNil7cmV0dXJuIGI2PT1udWxsPyIiOmI2KyIifSl9fX1lPWJHLnZhbEhvb2tzW3RoaXMudHlwZV18fGJHLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07aWYoIWV8fCEoInNldCIgaW4gZSl8fGUuc2V0KHRoaXMsYjUsInZhbHVlIik9PT1hQil7dGhpcy52YWx1ZT1iNX19KX19KTtiRy5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihlKXt2YXIgYlo9ZS5hdHRyaWJ1dGVzLnZhbHVlO3JldHVybiAhYlp8fGJaLnNwZWNpZmllZD9lLnZhbHVlOmUudGV4dH19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciBiNCxiWixiMyxiMSxiMj1lLnNlbGVjdGVkSW5kZXgsYjU9W10sYjY9ZS5vcHRpb25zLGIwPWUudHlwZT09PSJzZWxlY3Qtb25lIjtpZihiMjwwKXtyZXR1cm4gbnVsbH1iWj1iMD9iMjowO2IzPWIwP2IyKzE6YjYubGVuZ3RoO2Zvcig7Ylo8YjM7YlorKyl7YjE9YjZbYlpdO2lmKGIxLnNlbGVjdGVkJiYoYkcuc3VwcG9ydC5vcHREaXNhYmxlZD8hYjEuZGlzYWJsZWQ6YjEuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpPT09bnVsbCkmJighYjEucGFyZW50Tm9kZS5kaXNhYmxlZHx8IWJHLm5vZGVOYW1lKGIxLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtiND1iRyhiMSkudmFsKCk7aWYoYjApe3JldHVybiBiNH1iNS5wdXNoKGI0KX19aWYoYjAmJiFiNS5sZW5ndGgmJmI2Lmxlbmd0aCl7cmV0dXJuIGJHKGI2W2IyXSkudmFsKCl9cmV0dXJuIGI1fSxzZXQ6ZnVuY3Rpb24oYlosYjApe3ZhciBlPWJHLm1ha2VBcnJheShiMCk7YkcoYlopLmZpbmQoIm9wdGlvbiIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkPWJHLmluQXJyYXkoYkcodGhpcykudmFsKCksZSk+PTB9KTtpZighZS5sZW5ndGgpe2JaLnNlbGVjdGVkSW5kZXg9LTF9cmV0dXJuIGV9fX0sYXR0ckZuOnt9LGF0dHI6ZnVuY3Rpb24oYjQsYjEsYjUsYjMpe3ZhciBiMCxlLGIyLGJaPWI0Lm5vZGVUeXBlO2lmKCFiNHx8Ylo9PT0zfHxiWj09PTh8fGJaPT09Mil7cmV0dXJufWlmKGIzJiZiRy5pc0Z1bmN0aW9uKGJHLmZuW2IxXSkpe3JldHVybiBiRyhiNClbYjFdKGI1KX1pZih0eXBlb2YgYjQuZ2V0QXR0cmlidXRlPT09InVuZGVmaW5lZCIpe3JldHVybiBiRy5wcm9wKGI0LGIxLGI1KX1iMj1iWiE9PTF8fCFiRy5pc1hNTERvYyhiNCk7aWYoYjIpe2IxPWIxLnRvTG93ZXJDYXNlKCk7ZT1iRy5hdHRySG9va3NbYjFdfHwoTS50ZXN0KGIxKT9iVjphNyl9aWYoYjUhPT1hQil7aWYoYjU9PT1udWxsKXtiRy5yZW1vdmVBdHRyKGI0LGIxKTtyZXR1cm59ZWxzZXtpZihlJiYic2V0IiBpbiBlJiZiMiYmKGIwPWUuc2V0KGI0LGI1LGIxKSkhPT1hQil7cmV0dXJuIGIwfWVsc2V7YjQuc2V0QXR0cmlidXRlKGIxLCIiK2I1KTtyZXR1cm4gYjV9fX1lbHNle2lmKGUmJiJnZXQiIGluIGUmJmIyJiYoYjA9ZS5nZXQoYjQsYjEpKSE9PW51bGwpe3JldHVybiBiMH1lbHNle2IwPWI0LmdldEF0dHJpYnV0ZShiMSk7cmV0dXJuIGIwPT09bnVsbD9hQjpiMH19fSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGIxLGIzKXt2YXIgYjIsYjQsYlosZSxiMD0wO2lmKGIzJiZiMS5ub2RlVHlwZT09PTEpe2I0PWIzLnNwbGl0KGFWKTtmb3IoO2IwPGI0Lmxlbmd0aDtiMCsrKXtiWj1iNFtiMF07aWYoYlope2IyPWJHLnByb3BGaXhbYlpdfHxiWjtlPU0udGVzdChiWik7aWYoIWUpe2JHLmF0dHIoYjEsYlosIiIpfWIxLnJlbW92ZUF0dHJpYnV0ZShiTD9iWjpiMik7aWYoZSYmYjIgaW4gYjEpe2IxW2IyXT1mYWxzZX19fX19LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsYlope2lmKGoudGVzdChlLm5vZGVOYW1lKSYmZS5wYXJlbnROb2RlKXtiRy5lcnJvcigidHlwZSBwcm9wZXJ0eSBjYW4ndCBiZSBjaGFuZ2VkIil9ZWxzZXtpZighYkcuc3VwcG9ydC5yYWRpb1ZhbHVlJiZiWj09PSJyYWRpbyImJmJHLm5vZGVOYW1lKGUsImlucHV0Iikpe3ZhciBiMD1lLnZhbHVlO2Uuc2V0QXR0cmlidXRlKCJ0eXBlIixiWik7aWYoYjApe2UudmFsdWU9YjB9cmV0dXJuIGJafX19fSx2YWx1ZTp7Z2V0OmZ1bmN0aW9uKGJaLGUpe2lmKGE3JiZiRy5ub2RlTmFtZShiWiwiYnV0dG9uIikpe3JldHVybiBhNy5nZXQoYlosZSl9cmV0dXJuIGUgaW4gYlo/YloudmFsdWU6bnVsbH0sc2V0OmZ1bmN0aW9uKGJaLGIwLGUpe2lmKGE3JiZiRy5ub2RlTmFtZShiWiwiYnV0dG9uIikpe3JldHVybiBhNy5zZXQoYlosYjAsZSl9YloudmFsdWU9YjB9fX0scHJvcEZpeDp7dGFiaW5kZXg6InRhYkluZGV4IixyZWFkb25seToicmVhZE9ubHkiLCJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUiLG1heGxlbmd0aDoibWF4TGVuZ3RoIixjZWxsc3BhY2luZzoiY2VsbFNwYWNpbmciLGNlbGxwYWRkaW5nOiJjZWxsUGFkZGluZyIscm93c3Bhbjoicm93U3BhbiIsY29sc3BhbjoiY29sU3BhbiIsdXNlbWFwOiJ1c2VNYXAiLGZyYW1lYm9yZGVyOiJmcmFtZUJvcmRlciIsY29udGVudGVkaXRhYmxlOiJjb250ZW50RWRpdGFibGUifSxwcm9wOmZ1bmN0aW9uKGIzLGIxLGI0KXt2YXIgYjAsZSxiMixiWj1iMy5ub2RlVHlwZTtpZighYjN8fGJaPT09M3x8Ylo9PT04fHxiWj09PTIpe3JldHVybn1iMj1iWiE9PTF8fCFiRy5pc1hNTERvYyhiMyk7aWYoYjIpe2IxPWJHLnByb3BGaXhbYjFdfHxiMTtlPWJHLnByb3BIb29rc1tiMV19aWYoYjQhPT1hQil7aWYoZSYmInNldCIgaW4gZSYmKGIwPWUuc2V0KGIzLGI0LGIxKSkhPT1hQil7cmV0dXJuIGIwfWVsc2V7cmV0dXJuKGIzW2IxXT1iNCl9fWVsc2V7aWYoZSYmImdldCIgaW4gZSYmKGIwPWUuZ2V0KGIzLGIxKSkhPT1udWxsKXtyZXR1cm4gYjB9ZWxzZXtyZXR1cm4gYjNbYjFdfX19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihiWil7dmFyIGU9YlouZ2V0QXR0cmlidXRlTm9kZSgidGFiaW5kZXgiKTtyZXR1cm4gZSYmZS5zcGVjaWZpZWQ/cGFyc2VJbnQoZS52YWx1ZSwxMCk6YUEudGVzdChiWi5ub2RlTmFtZSl8fEUudGVzdChiWi5ub2RlTmFtZSkmJmJaLmhyZWY/MDphQn19fX0pO2JWPXtnZXQ6ZnVuY3Rpb24oYlosZSl7dmFyIGIxLGIwPWJHLnByb3AoYlosZSk7cmV0dXJuIGIwPT09dHJ1ZXx8dHlwZW9mIGIwIT09ImJvb2xlYW4iJiYoYjE9YlouZ2V0QXR0cmlidXRlTm9kZShlKSkmJmIxLm5vZGVWYWx1ZSE9PWZhbHNlP2UudG9Mb3dlckNhc2UoKTphQn0sc2V0OmZ1bmN0aW9uKGJaLGIxLGUpe3ZhciBiMDtpZihiMT09PWZhbHNlKXtiRy5yZW1vdmVBdHRyKGJaLGUpfWVsc2V7YjA9YkcucHJvcEZpeFtlXXx8ZTtpZihiMCBpbiBiWil7YlpbYjBdPXRydWV9Ylouc2V0QXR0cmlidXRlKGUsZS50b0xvd2VyQ2FzZSgpKX1yZXR1cm4gZX19O2lmKCFiTCl7bj17bmFtZTp0cnVlLGlkOnRydWUsY29vcmRzOnRydWV9O2E3PWJHLnZhbEhvb2tzLmJ1dHRvbj17Z2V0OmZ1bmN0aW9uKGIwLGJaKXt2YXIgZTtlPWIwLmdldEF0dHJpYnV0ZU5vZGUoYlopO3JldHVybiBlJiYobltiWl0/ZS52YWx1ZSE9PSIiOmUuc3BlY2lmaWVkKT9lLnZhbHVlOmFCfSxzZXQ6ZnVuY3Rpb24oYjAsYjEsYlope3ZhciBlPWIwLmdldEF0dHJpYnV0ZU5vZGUoYlopO2lmKCFlKXtlPW8uY3JlYXRlQXR0cmlidXRlKGJaKTtiMC5zZXRBdHRyaWJ1dGVOb2RlKGUpfXJldHVybihlLnZhbHVlPWIxKyIiKX19O2JHLmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGJaLGUpe2JHLmF0dHJIb29rc1tlXT1iRy5leHRlbmQoYkcuYXR0ckhvb2tzW2VdLHtzZXQ6ZnVuY3Rpb24oYjAsYjEpe2lmKGIxPT09IiIpe2IwLnNldEF0dHJpYnV0ZShlLCJhdXRvIik7cmV0dXJuIGIxfX19KX0pO2JHLmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e2dldDphNy5nZXQsc2V0OmZ1bmN0aW9uKGJaLGIwLGUpe2lmKGIwPT09IiIpe2IwPSJmYWxzZSJ9YTcuc2V0KGJaLGIwLGUpfX19aWYoIWJHLnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWQpe2JHLmVhY2goWyJocmVmIiwic3JjIiwid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihiWixlKXtiRy5hdHRySG9va3NbZV09YkcuZXh0ZW5kKGJHLmF0dHJIb29rc1tlXSx7Z2V0OmZ1bmN0aW9uKGIxKXt2YXIgYjA9YjEuZ2V0QXR0cmlidXRlKGUsMik7cmV0dXJuIGIwPT09bnVsbD9hQjpiMH19KX0pfWlmKCFiRy5zdXBwb3J0LnN0eWxlKXtiRy5hdHRySG9va3Muc3R5bGU9e2dldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdHlsZS5jc3NUZXh0LnRvTG93ZXJDYXNlKCl8fGFCfSxzZXQ6ZnVuY3Rpb24oZSxiWil7cmV0dXJuKGUuc3R5bGUuY3NzVGV4dD0iIitiWil9fX1pZighYkcuc3VwcG9ydC5vcHRTZWxlY3RlZCl7YkcucHJvcEhvb2tzLnNlbGVjdGVkPWJHLmV4dGVuZChiRy5wcm9wSG9va3Muc2VsZWN0ZWQse2dldDpmdW5jdGlvbihiWil7dmFyIGU9YloucGFyZW50Tm9kZTtpZihlKXtlLnNlbGVjdGVkSW5kZXg7aWYoZS5wYXJlbnROb2RlKXtlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleH19cmV0dXJuIG51bGx9fSl9aWYoIWJHLnN1cHBvcnQuZW5jdHlwZSl7YkcucHJvcEZpeC5lbmN0eXBlPSJlbmNvZGluZyJ9aWYoIWJHLnN1cHBvcnQuY2hlY2tPbil7YkcuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe2JHLnZhbEhvb2tzW3RoaXNdPXtnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPT09bnVsbD8ib24iOmUudmFsdWV9fX0pfWJHLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtiRy52YWxIb29rc1t0aGlzXT1iRy5leHRlbmQoYkcudmFsSG9va3NbdGhpc10se3NldDpmdW5jdGlvbihlLGJaKXtpZihiRy5pc0FycmF5KGJaKSl7cmV0dXJuKGUuY2hlY2tlZD1iRy5pbkFycmF5KGJHKGUpLnZhbCgpLGJaKT49MCl9fX0pfSk7dmFyIGJFPS9eKD86dGV4dGFyZWF8aW5wdXR8c2VsZWN0KSQvaSxicj0vXihbXlwuXSp8KSg/OlwuKC4rKXwpJC8sYmE9Lyg/Ol58XHMpaG92ZXIoXC5cUyt8KVxiLyxhMz0vXmtleS8sYks9L14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLGJ5PS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxhcT1mdW5jdGlvbihlKXtyZXR1cm4gYkcuZXZlbnQuc3BlY2lhbC5ob3Zlcj9lOmUucmVwbGFjZShiYSwibW91c2VlbnRlciQxIG1vdXNlbGVhdmUkMSIpfTtiRy5ldmVudD17YWRkOmZ1bmN0aW9uKGIxLGI1LGNjLGIzLGIyKXt2YXIgYjYsYjQsY2QsY2IsY2EsYjgsZSxiOSxiWixiMCxiNztpZihiMS5ub2RlVHlwZT09PTN8fGIxLm5vZGVUeXBlPT09OHx8IWI1fHwhY2N8fCEoYjY9YkcuX2RhdGEoYjEpKSl7cmV0dXJufWlmKGNjLmhhbmRsZXIpe2JaPWNjO2NjPWJaLmhhbmRsZXI7YjI9Ylouc2VsZWN0b3J9aWYoIWNjLmd1aWQpe2NjLmd1aWQ9YkcuZ3VpZCsrfWNkPWI2LmV2ZW50cztpZighY2Qpe2I2LmV2ZW50cz1jZD17fX1iND1iNi5oYW5kbGU7aWYoIWI0KXtiNi5oYW5kbGU9YjQ9ZnVuY3Rpb24oY2Upe3JldHVybiB0eXBlb2YgYkchPT0idW5kZWZpbmVkIiYmKCFjZXx8YkcuZXZlbnQudHJpZ2dlcmVkIT09Y2UudHlwZSk/YkcuZXZlbnQuZGlzcGF0Y2guYXBwbHkoYjQuZWxlbSxhcmd1bWVudHMpOmFCfTtiNC5lbGVtPWIxfWI1PWJHLnRyaW0oYXEoYjUpKS5zcGxpdCgiICIpO2ZvcihjYj0wO2NiPGI1Lmxlbmd0aDtjYisrKXtjYT1ici5leGVjKGI1W2NiXSl8fFtdO2I4PWNhWzFdO2U9KGNhWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCk7Yjc9YkcuZXZlbnQuc3BlY2lhbFtiOF18fHt9O2I4PShiMj9iNy5kZWxlZ2F0ZVR5cGU6YjcuYmluZFR5cGUpfHxiODtiNz1iRy5ldmVudC5zcGVjaWFsW2I4XXx8e307Yjk9YkcuZXh0ZW5kKHt0eXBlOmI4LG9yaWdUeXBlOmNhWzFdLGRhdGE6YjMsaGFuZGxlcjpjYyxndWlkOmNjLmd1aWQsc2VsZWN0b3I6YjIsbmFtZXNwYWNlOmUuam9pbigiLiIpfSxiWik7YjA9Y2RbYjhdO2lmKCFiMCl7YjA9Y2RbYjhdPVtdO2IwLmRlbGVnYXRlQ291bnQ9MDtpZighYjcuc2V0dXB8fGI3LnNldHVwLmNhbGwoYjEsYjMsZSxiNCk9PT1mYWxzZSl7aWYoYjEuYWRkRXZlbnRMaXN0ZW5lcil7YjEuYWRkRXZlbnRMaXN0ZW5lcihiOCxiNCxmYWxzZSl9ZWxzZXtpZihiMS5hdHRhY2hFdmVudCl7YjEuYXR0YWNoRXZlbnQoIm9uIitiOCxiNCl9fX19aWYoYjcuYWRkKXtiNy5hZGQuY2FsbChiMSxiOSk7aWYoIWI5LmhhbmRsZXIuZ3VpZCl7YjkuaGFuZGxlci5ndWlkPWNjLmd1aWR9fWlmKGIyKXtiMC5zcGxpY2UoYjAuZGVsZWdhdGVDb3VudCsrLDAsYjkpfWVsc2V7YjAucHVzaChiOSl9YkcuZXZlbnQuZ2xvYmFsW2I4XT10cnVlfWIxPW51bGx9LGdsb2JhbDp7fSxyZW1vdmU6ZnVuY3Rpb24oYjEsYjYsY2MsYjIsYjUpe3ZhciBjZCxjZSxiOSxiMCxiWixiMyxiNCxjYixiOCxlLGNhLGI3PWJHLmhhc0RhdGEoYjEpJiZiRy5fZGF0YShiMSk7aWYoIWI3fHwhKGNiPWI3LmV2ZW50cykpe3JldHVybn1iNj1iRy50cmltKGFxKGI2fHwiIikpLnNwbGl0KCIgIik7Zm9yKGNkPTA7Y2Q8YjYubGVuZ3RoO2NkKyspe2NlPWJyLmV4ZWMoYjZbY2RdKXx8W107Yjk9YjA9Y2VbMV07Ylo9Y2VbMl07aWYoIWI5KXtmb3IoYjkgaW4gY2Ipe2JHLmV2ZW50LnJlbW92ZShiMSxiOStiNltjZF0sY2MsYjIsdHJ1ZSl9Y29udGludWV9Yjg9YkcuZXZlbnQuc3BlY2lhbFtiOV18fHt9O2I5PShiMj9iOC5kZWxlZ2F0ZVR5cGU6YjguYmluZFR5cGUpfHxiOTtlPWNiW2I5XXx8W107YjM9ZS5sZW5ndGg7Ylo9Ylo/bmV3IFJlZ0V4cCgiKF58XFwuKSIrYlouc3BsaXQoIi4iKS5zb3J0KCkuam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbDtmb3IoYjQ9MDtiNDxlLmxlbmd0aDtiNCsrKXtjYT1lW2I0XTtpZigoYjV8fGIwPT09Y2Eub3JpZ1R5cGUpJiYoIWNjfHxjYy5ndWlkPT09Y2EuZ3VpZCkmJighYlp8fGJaLnRlc3QoY2EubmFtZXNwYWNlKSkmJighYjJ8fGIyPT09Y2Euc2VsZWN0b3J8fGIyPT09IioqIiYmY2Euc2VsZWN0b3IpKXtlLnNwbGljZShiNC0tLDEpO2lmKGNhLnNlbGVjdG9yKXtlLmRlbGVnYXRlQ291bnQtLX1pZihiOC5yZW1vdmUpe2I4LnJlbW92ZS5jYWxsKGIxLGNhKX19fWlmKGUubGVuZ3RoPT09MCYmYjMhPT1lLmxlbmd0aCl7aWYoIWI4LnRlYXJkb3dufHxiOC50ZWFyZG93bi5jYWxsKGIxLGJaLGI3LmhhbmRsZSk9PT1mYWxzZSl7YkcucmVtb3ZlRXZlbnQoYjEsYjksYjcuaGFuZGxlKX1kZWxldGUgY2JbYjldfX1pZihiRy5pc0VtcHR5T2JqZWN0KGNiKSl7ZGVsZXRlIGI3LmhhbmRsZTtiRy5yZW1vdmVEYXRhKGIxLCJldmVudHMiLHRydWUpfX0sY3VzdG9tRXZlbnQ6e2dldERhdGE6dHJ1ZSxzZXREYXRhOnRydWUsY2hhbmdlRGF0YTp0cnVlfSx0cmlnZ2VyOmZ1bmN0aW9uKGJaLGI2LGI0LGNkKXtpZihiNCYmKGI0Lm5vZGVUeXBlPT09M3x8YjQubm9kZVR5cGU9PT04KSl7cmV0dXJufXZhciBlLGIxLGI3LGNiLGIzLGIyLGI5LGI4LGI1LGNjLGNhPWJaLnR5cGV8fGJaLGIwPVtdO2lmKGJ5LnRlc3QoY2ErYkcuZXZlbnQudHJpZ2dlcmVkKSl7cmV0dXJufWlmKGNhLmluZGV4T2YoIiEiKT49MCl7Y2E9Y2Euc2xpY2UoMCwtMSk7YjE9dHJ1ZX1pZihjYS5pbmRleE9mKCIuIik+PTApe2IwPWNhLnNwbGl0KCIuIik7Y2E9YjAuc2hpZnQoKTtiMC5zb3J0KCl9aWYoKCFiNHx8YkcuZXZlbnQuY3VzdG9tRXZlbnRbY2FdKSYmIWJHLmV2ZW50Lmdsb2JhbFtjYV0pe3JldHVybn1iWj10eXBlb2YgYlo9PT0ib2JqZWN0Ij9iWltiRy5leHBhbmRvXT9iWjpuZXcgYkcuRXZlbnQoY2EsYlopOm5ldyBiRy5FdmVudChjYSk7YloudHlwZT1jYTtiWi5pc1RyaWdnZXI9dHJ1ZTtiWi5leGNsdXNpdmU9YjE7YloubmFtZXNwYWNlPWIwLmpvaW4oIi4iKTtiWi5uYW1lc3BhY2VfcmU9YloubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK2IwLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGw7YjI9Y2EuaW5kZXhPZigiOiIpPDA/Im9uIitjYToiIjtpZighYjQpe2U9YkcuY2FjaGU7Zm9yKGI3IGluIGUpe2lmKGVbYjddLmV2ZW50cyYmZVtiN10uZXZlbnRzW2NhXSl7YkcuZXZlbnQudHJpZ2dlcihiWixiNixlW2I3XS5oYW5kbGUuZWxlbSx0cnVlKX19cmV0dXJufWJaLnJlc3VsdD1hQjtpZighYloudGFyZ2V0KXtiWi50YXJnZXQ9YjR9YjY9YjYhPW51bGw/YkcubWFrZUFycmF5KGI2KTpbXTtiNi51bnNoaWZ0KGJaKTtiOT1iRy5ldmVudC5zcGVjaWFsW2NhXXx8e307aWYoYjkudHJpZ2dlciYmYjkudHJpZ2dlci5hcHBseShiNCxiNik9PT1mYWxzZSl7cmV0dXJufWI1PVtbYjQsYjkuYmluZFR5cGV8fGNhXV07aWYoIWNkJiYhYjkubm9CdWJibGUmJiFiRy5pc1dpbmRvdyhiNCkpe2NjPWI5LmRlbGVnYXRlVHlwZXx8Y2E7Y2I9YnkudGVzdChjYytjYSk/YjQ6YjQucGFyZW50Tm9kZTtmb3IoYjM9YjQ7Y2I7Y2I9Y2IucGFyZW50Tm9kZSl7YjUucHVzaChbY2IsY2NdKTtiMz1jYn1pZihiMz09PShiNC5vd25lckRvY3VtZW50fHxvKSl7YjUucHVzaChbYjMuZGVmYXVsdFZpZXd8fGIzLnBhcmVudFdpbmRvd3x8YTIsY2NdKX19Zm9yKGI3PTA7Yjc8YjUubGVuZ3RoJiYhYlouaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtiNysrKXtjYj1iNVtiN11bMF07YloudHlwZT1iNVtiN11bMV07Yjg9KGJHLl9kYXRhKGNiLCJldmVudHMiKXx8e30pW2JaLnR5cGVdJiZiRy5fZGF0YShjYiwiaGFuZGxlIik7aWYoYjgpe2I4LmFwcGx5KGNiLGI2KX1iOD1iMiYmY2JbYjJdO2lmKGI4JiZiRy5hY2NlcHREYXRhKGNiKSYmYjguYXBwbHkoY2IsYjYpPT09ZmFsc2Upe2JaLnByZXZlbnREZWZhdWx0KCl9fWJaLnR5cGU9Y2E7aWYoIWNkJiYhYlouaXNEZWZhdWx0UHJldmVudGVkKCkpe2lmKCghYjkuX2RlZmF1bHR8fGI5Ll9kZWZhdWx0LmFwcGx5KGI0Lm93bmVyRG9jdW1lbnQsYjYpPT09ZmFsc2UpJiYhKGNhPT09ImNsaWNrIiYmYkcubm9kZU5hbWUoYjQsImEiKSkmJmJHLmFjY2VwdERhdGEoYjQpKXtpZihiMiYmYjRbY2FdJiYoKGNhIT09ImZvY3VzIiYmY2EhPT0iYmx1ciIpfHxiWi50YXJnZXQub2Zmc2V0V2lkdGghPT0wKSYmIWJHLmlzV2luZG93KGI0KSl7YjM9YjRbYjJdO2lmKGIzKXtiNFtiMl09bnVsbH1iRy5ldmVudC50cmlnZ2VyZWQ9Y2E7YjRbY2FdKCk7YkcuZXZlbnQudHJpZ2dlcmVkPWFCO2lmKGIzKXtiNFtiMl09YjN9fX19cmV0dXJuIGJaLnJlc3VsdH0sZGlzcGF0Y2g6ZnVuY3Rpb24oY2Ipe2NiPWJHLmV2ZW50LmZpeChjYnx8YTIuZXZlbnQpO3ZhciBjZCxjYSxiMixiNCxjZSxjYyxiNSxiMCxlLGI5LGNmLGI3PSgoYkcuX2RhdGEodGhpcywiZXZlbnRzIil8fHt9KVtjYi50eXBlXXx8W10pLGI2PWI3LmRlbGVnYXRlQ291bnQsYjE9W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLGI4PSFjYi5leGNsdXNpdmUmJiFjYi5uYW1lc3BhY2UsYjM9YkcuZXZlbnQuc3BlY2lhbFtjYi50eXBlXXx8e30sYlo9W107YjFbMF09Y2I7Y2IuZGVsZWdhdGVUYXJnZXQ9dGhpcztpZihiMy5wcmVEaXNwYXRjaCYmYjMucHJlRGlzcGF0Y2guY2FsbCh0aGlzLGNiKT09PWZhbHNlKXtyZXR1cm59aWYoYjYmJiEoY2IuYnV0dG9uJiZjYi50eXBlPT09ImNsaWNrIikpe2I0PWJHKHRoaXMpO2I0LmNvbnRleHQ9dGhpcztmb3IoYjI9Y2IudGFyZ2V0O2IyIT10aGlzO2IyPWIyLnBhcmVudE5vZGV8fHRoaXMpe2lmKGIyLmRpc2FibGVkIT09dHJ1ZXx8Y2IudHlwZSE9PSJjbGljayIpe2NjPXt9O2IwPVtdO2I0WzBdPWIyO2ZvcihjZD0wO2NkPGI2O2NkKyspe2U9YjdbY2RdO2I5PWUuc2VsZWN0b3I7aWYoY2NbYjldPT09YUIpe2NjW2I5XT1iNC5pcyhiOSl9aWYoY2NbYjldKXtiMC5wdXNoKGUpfX1pZihiMC5sZW5ndGgpe2JaLnB1c2goe2VsZW06YjIsbWF0Y2hlczpiMH0pfX19fWlmKGI3Lmxlbmd0aD5iNil7YloucHVzaCh7ZWxlbTp0aGlzLG1hdGNoZXM6Yjcuc2xpY2UoYjYpfSl9Zm9yKGNkPTA7Y2Q8YloubGVuZ3RoJiYhY2IuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtjZCsrKXtiNT1iWltjZF07Y2IuY3VycmVudFRhcmdldD1iNS5lbGVtO2ZvcihjYT0wO2NhPGI1Lm1hdGNoZXMubGVuZ3RoJiYhY2IuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKTtjYSsrKXtlPWI1Lm1hdGNoZXNbY2FdO2lmKGI4fHwoIWNiLm5hbWVzcGFjZSYmIWUubmFtZXNwYWNlKXx8Y2IubmFtZXNwYWNlX3JlJiZjYi5uYW1lc3BhY2VfcmUudGVzdChlLm5hbWVzcGFjZSkpe2NiLmRhdGE9ZS5kYXRhO2NiLmhhbmRsZU9iaj1lO2NlPSgoYkcuZXZlbnQuc3BlY2lhbFtlLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8ZS5oYW5kbGVyKS5hcHBseShiNS5lbGVtLGIxKTtpZihjZSE9PWFCKXtjYi5yZXN1bHQ9Y2U7aWYoY2U9PT1mYWxzZSl7Y2IucHJldmVudERlZmF1bHQoKTtjYi5zdG9wUHJvcGFnYXRpb24oKX19fX19aWYoYjMucG9zdERpc3BhdGNoKXtiMy5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLGNiKX1yZXR1cm4gY2IucmVzdWx0fSxwcm9wczoiYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGJaLGUpe2lmKGJaLndoaWNoPT1udWxsKXtiWi53aGljaD1lLmNoYXJDb2RlIT1udWxsP2UuY2hhckNvZGU6ZS5rZXlDb2RlfXJldHVybiBiWn19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGIxLGIwKXt2YXIgYjIsYjMsZSxiWj1iMC5idXR0b24sYjQ9YjAuZnJvbUVsZW1lbnQ7aWYoYjEucGFnZVg9PW51bGwmJmIwLmNsaWVudFghPW51bGwpe2IyPWIxLnRhcmdldC5vd25lckRvY3VtZW50fHxvO2IzPWIyLmRvY3VtZW50RWxlbWVudDtlPWIyLmJvZHk7YjEucGFnZVg9YjAuY2xpZW50WCsoYjMmJmIzLnNjcm9sbExlZnR8fGUmJmUuc2Nyb2xsTGVmdHx8MCktKGIzJiZiMy5jbGllbnRMZWZ0fHxlJiZlLmNsaWVudExlZnR8fDApO2IxLnBhZ2VZPWIwLmNsaWVudFkrKGIzJiZiMy5zY3JvbGxUb3B8fGUmJmUuc2Nyb2xsVG9wfHwwKS0oYjMmJmIzLmNsaWVudFRvcHx8ZSYmZS5jbGllbnRUb3B8fDApfWlmKCFiMS5yZWxhdGVkVGFyZ2V0JiZiNCl7YjEucmVsYXRlZFRhcmdldD1iND09PWIxLnRhcmdldD9iMC50b0VsZW1lbnQ6YjR9aWYoIWIxLndoaWNoJiZiWiE9PWFCKXtiMS53aGljaD0oYlomMT8xOihiWiYyPzM6KGJaJjQ/MjowKSkpfXJldHVybiBiMX19LGZpeDpmdW5jdGlvbihiMCl7aWYoYjBbYkcuZXhwYW5kb10pe3JldHVybiBiMH12YXIgYlosYjMsZT1iMCxiMT1iRy5ldmVudC5maXhIb29rc1tiMC50eXBlXXx8e30sYjI9YjEucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoYjEucHJvcHMpOnRoaXMucHJvcHM7YjA9YkcuRXZlbnQoZSk7Zm9yKGJaPWIyLmxlbmd0aDtiWjspe2IzPWIyWy0tYlpdO2IwW2IzXT1lW2IzXX1pZighYjAudGFyZ2V0KXtiMC50YXJnZXQ9ZS5zcmNFbGVtZW50fHxvfWlmKGIwLnRhcmdldC5ub2RlVHlwZT09PTMpe2IwLnRhcmdldD1iMC50YXJnZXQucGFyZW50Tm9kZX1iMC5tZXRhS2V5PSEhYjAubWV0YUtleTtyZXR1cm4gYjEuZmlsdGVyP2IxLmZpbHRlcihiMCxlKTpiMH0sc3BlY2lhbDp7cmVhZHk6e3NldHVwOmJHLmJpbmRSZWFkeX0sbG9hZDp7bm9CdWJibGU6dHJ1ZX0sZm9jdXM6e2RlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e2RlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxiZWZvcmV1bmxvYWQ6e3NldHVwOmZ1bmN0aW9uKGIwLGJaLGUpe2lmKGJHLmlzV2luZG93KHRoaXMpKXt0aGlzLm9uYmVmb3JldW5sb2FkPWV9fSx0ZWFyZG93bjpmdW5jdGlvbihiWixlKXtpZih0aGlzLm9uYmVmb3JldW5sb2FkPT09ZSl7dGhpcy5vbmJlZm9yZXVubG9hZD1udWxsfX19fSxzaW11bGF0ZTpmdW5jdGlvbihiMCxiMixiMSxiWil7dmFyIGIzPWJHLmV4dGVuZChuZXcgYkcuRXZlbnQoKSxiMSx7dHlwZTpiMCxpc1NpbXVsYXRlZDp0cnVlLG9yaWdpbmFsRXZlbnQ6e319KTtpZihiWil7YkcuZXZlbnQudHJpZ2dlcihiMyxudWxsLGIyKX1lbHNle2JHLmV2ZW50LmRpc3BhdGNoLmNhbGwoYjIsYjMpfWlmKGIzLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtiMS5wcmV2ZW50RGVmYXVsdCgpfX19O2JHLmV2ZW50LmhhbmRsZT1iRy5ldmVudC5kaXNwYXRjaDtiRy5yZW1vdmVFdmVudD1vLnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYlosZSxiMCl7aWYoYloucmVtb3ZlRXZlbnRMaXN0ZW5lcil7YloucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGIwLGZhbHNlKX19OmZ1bmN0aW9uKGIwLGJaLGIxKXt2YXIgZT0ib24iK2JaO2lmKGIwLmRldGFjaEV2ZW50KXtpZih0eXBlb2YgYjBbZV09PT0idW5kZWZpbmVkIil7YjBbZV09bnVsbH1iMC5kZXRhY2hFdmVudChlLGIxKX19O2JHLkV2ZW50PWZ1bmN0aW9uKGJaLGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGJHLkV2ZW50KSl7cmV0dXJuIG5ldyBiRy5FdmVudChiWixlKX1pZihiWiYmYloudHlwZSl7dGhpcy5vcmlnaW5hbEV2ZW50PWJaO3RoaXMudHlwZT1iWi50eXBlO3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPShiWi5kZWZhdWx0UHJldmVudGVkfHxiWi5yZXR1cm5WYWx1ZT09PWZhbHNlfHxiWi5nZXRQcmV2ZW50RGVmYXVsdCYmYlouZ2V0UHJldmVudERlZmF1bHQoKSk/UjpYfWVsc2V7dGhpcy50eXBlPWJafWlmKGUpe2JHLmV4dGVuZCh0aGlzLGUpfXRoaXMudGltZVN0YW1wPWJaJiZiWi50aW1lU3RhbXB8fGJHLm5vdygpO3RoaXNbYkcuZXhwYW5kb109dHJ1ZX07ZnVuY3Rpb24gWCgpe3JldHVybiBmYWxzZX1mdW5jdGlvbiBSKCl7cmV0dXJuIHRydWV9YkcuRXZlbnQucHJvdG90eXBlPXtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPVI7dmFyIGJaPXRoaXMub3JpZ2luYWxFdmVudDtpZighYlope3JldHVybn1pZihiWi5wcmV2ZW50RGVmYXVsdCl7YloucHJldmVudERlZmF1bHQoKX1lbHNle2JaLnJldHVyblZhbHVlPWZhbHNlfX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1SO3ZhciBiWj10aGlzLm9yaWdpbmFsRXZlbnQ7aWYoIWJaKXtyZXR1cm59aWYoYlouc3RvcFByb3BhZ2F0aW9uKXtiWi5zdG9wUHJvcGFnYXRpb24oKX1iWi5jYW5jZWxCdWJibGU9dHJ1ZX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1SO3RoaXMuc3RvcFByb3BhZ2F0aW9uKCl9LGlzRGVmYXVsdFByZXZlbnRlZDpYLGlzUHJvcGFnYXRpb25TdG9wcGVkOlgsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6WH07YkcuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGJaLGUpe2JHLmV2ZW50LnNwZWNpYWxbYlpdPXtkZWxlZ2F0ZVR5cGU6ZSxiaW5kVHlwZTplLGhhbmRsZTpmdW5jdGlvbihiMyl7dmFyIGIxLGI1PXRoaXMsYjQ9YjMucmVsYXRlZFRhcmdldCxiMj1iMy5oYW5kbGVPYmosYjA9YjIuc2VsZWN0b3I7aWYoIWI0fHwoYjQhPT1iNSYmIWJHLmNvbnRhaW5zKGI1LGI0KSkpe2IzLnR5cGU9YjIub3JpZ1R5cGU7YjE9YjIuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7YjMudHlwZT1lfXJldHVybiBiMX19fSk7aWYoIWJHLnN1cHBvcnQuc3VibWl0QnViYmxlcyl7YkcuZXZlbnQuc3BlY2lhbC5zdWJtaXQ9e3NldHVwOmZ1bmN0aW9uKCl7aWYoYkcubm9kZU5hbWUodGhpcywiZm9ybSIpKXtyZXR1cm4gZmFsc2V9YkcuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsZnVuY3Rpb24oYjEpe3ZhciBiMD1iMS50YXJnZXQsYlo9Ykcubm9kZU5hbWUoYjAsImlucHV0Iil8fGJHLm5vZGVOYW1lKGIwLCJidXR0b24iKT9iMC5mb3JtOmFCO2lmKGJaJiYhYkcuX2RhdGEoYlosIl9zdWJtaXRfYXR0YWNoZWQiKSl7YkcuZXZlbnQuYWRkKGJaLCJzdWJtaXQuX3N1Ym1pdCIsZnVuY3Rpb24oZSl7ZS5fc3VibWl0X2J1YmJsZT10cnVlfSk7YkcuX2RhdGEoYlosIl9zdWJtaXRfYXR0YWNoZWQiLHRydWUpfX0pfSxwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7aWYoZS5fc3VibWl0X2J1YmJsZSl7ZGVsZXRlIGUuX3N1Ym1pdF9idWJibGU7aWYodGhpcy5wYXJlbnROb2RlJiYhZS5pc1RyaWdnZXIpe2JHLmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxlLHRydWUpfX19LHRlYXJkb3duOmZ1bmN0aW9uKCl7aWYoYkcubm9kZU5hbWUodGhpcywiZm9ybSIpKXtyZXR1cm4gZmFsc2V9YkcuZXZlbnQucmVtb3ZlKHRoaXMsIi5fc3VibWl0Iil9fX1pZighYkcuc3VwcG9ydC5jaGFuZ2VCdWJibGVzKXtiRy5ldmVudC5zcGVjaWFsLmNoYW5nZT17c2V0dXA6ZnVuY3Rpb24oKXtpZihiRS50ZXN0KHRoaXMubm9kZU5hbWUpKXtpZih0aGlzLnR5cGU9PT0iY2hlY2tib3gifHx0aGlzLnR5cGU9PT0icmFkaW8iKXtiRy5ldmVudC5hZGQodGhpcywicHJvcGVydHljaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oZSl7aWYoZS5vcmlnaW5hbEV2ZW50LnByb3BlcnR5TmFtZT09PSJjaGVja2VkIil7dGhpcy5fanVzdF9jaGFuZ2VkPXRydWV9fSk7YkcuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0aW9uKGUpe2lmKHRoaXMuX2p1c3RfY2hhbmdlZCYmIWUuaXNUcmlnZ2VyKXt0aGlzLl9qdXN0X2NoYW5nZWQ9ZmFsc2V9YkcuZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcyxlLHRydWUpfSl9cmV0dXJuIGZhbHNlfWJHLmV2ZW50LmFkZCh0aGlzLCJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihiMCl7dmFyIGJaPWIwLnRhcmdldDtpZihiRS50ZXN0KGJaLm5vZGVOYW1lKSYmIWJHLl9kYXRhKGJaLCJfY2hhbmdlX2F0dGFjaGVkIikpe2JHLmV2ZW50LmFkZChiWiwiY2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGUpe2lmKHRoaXMucGFyZW50Tm9kZSYmIWUuaXNTaW11bGF0ZWQmJiFlLmlzVHJpZ2dlcil7YkcuZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcy5wYXJlbnROb2RlLGUsdHJ1ZSl9fSk7YkcuX2RhdGEoYlosIl9jaGFuZ2VfYXR0YWNoZWQiLHRydWUpfX0pfSxoYW5kbGU6ZnVuY3Rpb24oYlope3ZhciBlPWJaLnRhcmdldDtpZih0aGlzIT09ZXx8YlouaXNTaW11bGF0ZWR8fGJaLmlzVHJpZ2dlcnx8KGUudHlwZSE9PSJyYWRpbyImJmUudHlwZSE9PSJjaGVja2JveCIpKXtyZXR1cm4gYlouaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sdGVhcmRvd246ZnVuY3Rpb24oKXtiRy5ldmVudC5yZW1vdmUodGhpcywiLl9jaGFuZ2UiKTtyZXR1cm4gYkUudGVzdCh0aGlzLm5vZGVOYW1lKX19fWlmKCFiRy5zdXBwb3J0LmZvY3VzaW5CdWJibGVzKXtiRy5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihiMSxlKXt2YXIgYlo9MCxiMD1mdW5jdGlvbihiMil7YkcuZXZlbnQuc2ltdWxhdGUoZSxiMi50YXJnZXQsYkcuZXZlbnQuZml4KGIyKSx0cnVlKX07YkcuZXZlbnQuc3BlY2lhbFtlXT17c2V0dXA6ZnVuY3Rpb24oKXtpZihiWisrPT09MCl7by5hZGRFdmVudExpc3RlbmVyKGIxLGIwLHRydWUpfX0sdGVhcmRvd246ZnVuY3Rpb24oKXtpZigtLWJaPT09MCl7by5yZW1vdmVFdmVudExpc3RlbmVyKGIxLGIwLHRydWUpfX19fSl9YkcuZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihiMCxlLGIzLGIyLGJaKXt2YXIgYjQsYjE7aWYodHlwZW9mIGIwPT09Im9iamVjdCIpe2lmKHR5cGVvZiBlIT09InN0cmluZyIpe2IzPWIzfHxlO2U9YUJ9Zm9yKGIxIGluIGIwKXt0aGlzLm9uKGIxLGUsYjMsYjBbYjFdLGJaKX1yZXR1cm4gdGhpc31pZihiMz09bnVsbCYmYjI9PW51bGwpe2IyPWU7YjM9ZT1hQn1lbHNle2lmKGIyPT1udWxsKXtpZih0eXBlb2YgZT09PSJzdHJpbmciKXtiMj1iMztiMz1hQn1lbHNle2IyPWIzO2IzPWU7ZT1hQn19fWlmKGIyPT09ZmFsc2Upe2IyPVh9ZWxzZXtpZighYjIpe3JldHVybiB0aGlzfX1pZihiWj09PTEpe2I0PWIyO2IyPWZ1bmN0aW9uKGI1KXtiRygpLm9mZihiNSk7cmV0dXJuIGI0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07YjIuZ3VpZD1iNC5ndWlkfHwoYjQuZ3VpZD1iRy5ndWlkKyspfXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtiRy5ldmVudC5hZGQodGhpcyxiMCxiMixiMyxlKX0pfSxvbmU6ZnVuY3Rpb24oYlosZSxiMSxiMCl7cmV0dXJuIHRoaXMub24oYlosZSxiMSxiMCwxKX0sb2ZmOmZ1bmN0aW9uKGIwLGUsYjIpe3ZhciBiWixiMTtpZihiMCYmYjAucHJldmVudERlZmF1bHQmJmIwLmhhbmRsZU9iail7Ylo9YjAuaGFuZGxlT2JqO2JHKGIwLmRlbGVnYXRlVGFyZ2V0KS5vZmYoYloubmFtZXNwYWNlP2JaLm9yaWdUeXBlKyIuIitiWi5uYW1lc3BhY2U6Yloub3JpZ1R5cGUsYlouc2VsZWN0b3IsYlouaGFuZGxlcik7cmV0dXJuIHRoaXN9aWYodHlwZW9mIGIwPT09Im9iamVjdCIpe2ZvcihiMSBpbiBiMCl7dGhpcy5vZmYoYjEsZSxiMFtiMV0pfXJldHVybiB0aGlzfWlmKGU9PT1mYWxzZXx8dHlwZW9mIGU9PT0iZnVuY3Rpb24iKXtiMj1lO2U9YUJ9aWYoYjI9PT1mYWxzZSl7YjI9WH1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7YkcuZXZlbnQucmVtb3ZlKHRoaXMsYjAsYjIsZSl9KX0sYmluZDpmdW5jdGlvbihlLGIwLGJaKXtyZXR1cm4gdGhpcy5vbihlLG51bGwsYjAsYlopfSx1bmJpbmQ6ZnVuY3Rpb24oZSxiWil7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCxiWil9LGxpdmU6ZnVuY3Rpb24oZSxiMCxiWil7YkcodGhpcy5jb250ZXh0KS5vbihlLHRoaXMuc2VsZWN0b3IsYjAsYlopO3JldHVybiB0aGlzfSxkaWU6ZnVuY3Rpb24oZSxiWil7YkcodGhpcy5jb250ZXh0KS5vZmYoZSx0aGlzLnNlbGVjdG9yfHwiKioiLGJaKTtyZXR1cm4gdGhpc30sZGVsZWdhdGU6ZnVuY3Rpb24oZSxiWixiMSxiMCl7cmV0dXJuIHRoaXMub24oYlosZSxiMSxiMCl9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSxiWixiMCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PTE/dGhpcy5vZmYoZSwiKioiKTp0aGlzLm9mZihiWixlfHwiKioiLGIwKX0sdHJpZ2dlcjpmdW5jdGlvbihlLGJaKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7YkcuZXZlbnQudHJpZ2dlcihlLGJaLHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGUsYlope2lmKHRoaXNbMF0pe3JldHVybiBiRy5ldmVudC50cmlnZ2VyKGUsYlosdGhpc1swXSx0cnVlKX19LHRvZ2dsZTpmdW5jdGlvbihiMSl7dmFyIGJaPWFyZ3VtZW50cyxlPWIxLmd1aWR8fGJHLmd1aWQrKyxiMD0wLGIyPWZ1bmN0aW9uKGIzKXt2YXIgYjQ9KGJHLl9kYXRhKHRoaXMsImxhc3RUb2dnbGUiK2IxLmd1aWQpfHwwKSViMDtiRy5fZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIitiMS5ndWlkLGI0KzEpO2IzLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIGJaW2I0XS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fGZhbHNlfTtiMi5ndWlkPWU7d2hpbGUoYjA8YloubGVuZ3RoKXtiWltiMCsrXS5ndWlkPWV9cmV0dXJuIHRoaXMuY2xpY2soYjIpfSxob3ZlcjpmdW5jdGlvbihlLGJaKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGUpLm1vdXNlbGVhdmUoYlp8fGUpfX0pO2JHLmVhY2goKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51Iikuc3BsaXQoIiAiKSxmdW5jdGlvbihiWixlKXtiRy5mbltlXT1mdW5jdGlvbihiMSxiMCl7aWYoYjA9PW51bGwpe2IwPWIxO2IxPW51bGx9cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKGUsbnVsbCxiMSxiMCk6dGhpcy50cmlnZ2VyKGUpfTtpZihhMy50ZXN0KGUpKXtiRy5ldmVudC5maXhIb29rc1tlXT1iRy5ldmVudC5rZXlIb29rc31pZihiSy50ZXN0KGUpKXtiRy5ldmVudC5maXhIb29rc1tlXT1iRy5ldmVudC5tb3VzZUhvb2tzfX0pOworLyohCisgKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZQorICogIENvcHlyaWdodCAyMDEyIGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqICBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKKyAqICBodHRwOi8vc2l6emxlanMuY29tLworICovCisoZnVuY3Rpb24oY08sY2cpe3ZhciBjVCxjbyxjZixiMixiOCxiNj1jTy5kb2N1bWVudCxiOT1iNi5kb2N1bWVudEVsZW1lbnQsY3c9InVuZGVmaW5lZCIsY2E9ZmFsc2UsYjc9dHJ1ZSxjZT0wLGNqPVtdLnNsaWNlLGNTPVtdLnB1c2gsY1c9KCJzaXpjYWNoZSIrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgiLiIsIiIpLGN6PSJbXFx4MjBcXHRcXHJcXG5cXGZdIixjaT0iKD86XFxcXC58Wy1cXHddfFteXFx4MDAtXFx4YTBdKSsiLGNoPWNpLnJlcGxhY2UoInciLCJ3IyIpLGMxPSIoWypeJHwhfl0/PSkiLGNMPSJcXFsiK2N6KyIqKCIrY2krIikiK2N6KyIqKD86IitjMStjeisiKig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIrY2grIil8KXwpIitjeisiKlxcXSIsYzI9IjooIitjaSsiKSg/OlxcKCg/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDJ8KCg/OlteLF18XFxcXCx8KD86LCg/PVteXFxbXSpcXF0pKXwoPzosKD89W15cXChdKlxcKSkpKSopKVxcKXwpIixjQj0iOihudGh8ZXF8Z3R8bHR8Zmlyc3R8bGFzdHxldmVufG9kZCkoPzpcXCgoXFxkKilcXCl8KSg/PVteLV18JCkiLGNkPWN6KyIqKFtcXHgyMFxcdFxcclxcblxcZj4rfl0pIitjeisiKiIsY2M9Iig/PVteXFx4MjBcXHRcXHJcXG5cXGZdKSg/OlxcXFwufCIrY0wrInwiK2MyLnJlcGxhY2UoMiw3KSsifFteXFxcXCgpLF0pKyIsY1U9bmV3IFJlZ0V4cCgiXiIrY3orIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIrY3orIiskIiwiZyIpLGNGPW5ldyBSZWdFeHAoIl4iK2NkKSxjdD1uZXcgUmVnRXhwKGNjKyI/KD89IitjeisiKix8JCkiLCJnIiksY0o9bmV3IFJlZ0V4cCgiXig/Oig/ISwpKD86KD86XnwsKSIrY3orIioiK2NjKyIpKj98IitjeisiKiguKj8pKShcXCl8JCkiKSxjWj1uZXcgUmVnRXhwKGNjLnNsaWNlKDE5LC02KSsiXFx4MjBcXHRcXHJcXG5cXGY+K35dKSt8IitjZCwiZyIpLGNLPS9eKD86IyhbXHdcLV0rKXwoXHcrKXxcLihbXHdcLV0rKSkkLyxjUD0vW1x4MjBcdFxyXG5cZl0qWyt+XS8sY1g9Lzpub3RcKCQvLGNwPS9oXGQvaSxjTT0vaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbi9pLGNzPS9cXCg/IVxcKS9nLGNFPXtJRDpuZXcgUmVnRXhwKCJeIygiK2NpKyIpIiksQ0xBU1M6bmV3IFJlZ0V4cCgiXlxcLigiK2NpKyIpIiksTkFNRTpuZXcgUmVnRXhwKCJeXFxbbmFtZT1bJ1wiXT8oIitjaSsiKVsnXCJdP1xcXSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrY2kucmVwbGFjZSgiWy0iLCJbLVxcKiIpKyIpIiksQVRUUjpuZXcgUmVnRXhwKCJeIitjTCksUFNFVURPOm5ldyBSZWdFeHAoIl4iK2MyKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fG50aHxsYXN0fGZpcnN0KS1jaGlsZCg/OlxcKCIrY3orIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK2N6KyIqKD86KFsrLV18KSIrY3orIiooXFxkKyl8KSkiK2N6KyIqXFwpfCkiLCJpIiksUE9TOm5ldyBSZWdFeHAoY0IsImlnIiksbmVlZHNDb250ZXh0Om5ldyBSZWdFeHAoIl4iK2N6KyIqWz4rfl18IitjQiwiaSIpfSxjUj17fSxjcT1bXSxjbD17fSxjdT1bXSxjWT1mdW5jdGlvbihlKXtlLnNpenpsZUZpbHRlcj10cnVlO3JldHVybiBlfSxiMz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oYzMpe3JldHVybiBjMy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmYzMudHlwZT09PWV9fSxjcj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oYzQpe3ZhciBjMz1jNC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihjMz09PSJpbnB1dCJ8fGMzPT09ImJ1dHRvbiIpJiZjNC50eXBlPT09ZX19LGNIPWZ1bmN0aW9uKGMzKXt2YXIgYzQ9ZmFsc2UsYzY9YjYuY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e2M0PWMzKGM2KX1jYXRjaChjNSl7fWM2PW51bGw7cmV0dXJuIGM0fSxjbj1jSChmdW5jdGlvbihjMyl7YzMuaW5uZXJIVE1MPSI8c2VsZWN0Pjwvc2VsZWN0PiI7dmFyIGU9dHlwZW9mIGMzLmxhc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIm11bHRpcGxlIik7cmV0dXJuIGUhPT0iYm9vbGVhbiImJmUhPT0ic3RyaW5nIn0pLGIwPWNIKGZ1bmN0aW9uKGMzKXtjMy5pZD1jVyswO2MzLmlubmVySFRNTD0iPGEgbmFtZT0nIitjVysiJz48L2E+PGRpdiBuYW1lPSciK2NXKyInPjwvZGl2PiI7YjkuaW5zZXJ0QmVmb3JlKGMzLGI5LmZpcnN0Q2hpbGQpO3ZhciBlPWI2LmdldEVsZW1lbnRzQnlOYW1lJiZiNi5nZXRFbGVtZW50c0J5TmFtZShjVykubGVuZ3RoPT09MitiNi5nZXRFbGVtZW50c0J5TmFtZShjVyswKS5sZW5ndGg7Yjg9IWI2LmdldEVsZW1lbnRCeUlkKGNXKTtiOS5yZW1vdmVDaGlsZChjMyk7cmV0dXJuIGV9KSxiNT1jSChmdW5jdGlvbihlKXtlLmFwcGVuZENoaWxkKGI2LmNyZWF0ZUNvbW1lbnQoIiIpKTtyZXR1cm4gZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aD09PTB9KSxjRD1jSChmdW5jdGlvbihlKXtlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiI7cmV0dXJuIGUuZmlyc3RDaGlsZCYmdHlwZW9mIGUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUhPT1jdyYmZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09IiMifSksY0M9Y0goZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J2hpZGRlbiBlJz48L2Rpdj48ZGl2IGNsYXNzPSdoaWRkZW4nPjwvZGl2PiI7aWYoIWUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZXx8ZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPT09MCl7cmV0dXJuIGZhbHNlfWUubGFzdENoaWxkLmNsYXNzTmFtZT0iZSI7cmV0dXJuIGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aCE9PTF9KTt2YXIgY049ZnVuY3Rpb24oYzUsZSxjNyxkYSl7Yzc9Yzd8fFtdO2U9ZXx8YjY7dmFyIGM4LGMzLGM5LGM0LGM2PWUubm9kZVR5cGU7aWYoYzYhPT0xJiZjNiE9PTkpe3JldHVybltdfWlmKCFjNXx8dHlwZW9mIGM1IT09InN0cmluZyIpe3JldHVybiBjN31jOT1jayhlKTtpZighYzkmJiFkYSl7aWYoKGM4PWNLLmV4ZWMoYzUpKSl7aWYoKGM0PWM4WzFdKSl7aWYoYzY9PT05KXtjMz1lLmdldEVsZW1lbnRCeUlkKGM0KTtpZihjMyYmYzMucGFyZW50Tm9kZSl7aWYoYzMuaWQ9PT1jNCl7YzcucHVzaChjMyk7cmV0dXJuIGM3fX1lbHNle3JldHVybiBjN319ZWxzZXtpZihlLm93bmVyRG9jdW1lbnQmJihjMz1lLm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYzQpKSYmY0EoZSxjMykmJmMzLmlkPT09YzQpe2M3LnB1c2goYzMpO3JldHVybiBjN319fWVsc2V7aWYoYzhbMl0pe2NTLmFwcGx5KGM3LGNqLmNhbGwoZS5nZXRFbGVtZW50c0J5VGFnTmFtZShjNSksMCkpO3JldHVybiBjN31lbHNle2lmKChjND1jOFszXSkmJmNDJiZlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpe2NTLmFwcGx5KGM3LGNqLmNhbGwoZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGM0KSwwKSk7cmV0dXJuIGM3fX19fX1yZXR1cm4gY1YoYzUsZSxjNyxkYSxjOSl9O3ZhciBjRz1jTi5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLG1hdGNoOmNFLG9yZGVyOlsiSUQiLCJUQUciXSxhdHRySGFuZGxlOnt9LGNyZWF0ZVBzZXVkbzpjWSxmaW5kOntJRDpiOD9mdW5jdGlvbihjNSxjNCxjMyl7aWYodHlwZW9mIGM0LmdldEVsZW1lbnRCeUlkIT09Y3cmJiFjMyl7dmFyIGU9YzQuZ2V0RWxlbWVudEJ5SWQoYzUpO3JldHVybiBlJiZlLnBhcmVudE5vZGU/W2VdOltdfX06ZnVuY3Rpb24oYzUsYzQsYzMpe2lmKHR5cGVvZiBjNC5nZXRFbGVtZW50QnlJZCE9PWN3JiYhYzMpe3ZhciBlPWM0LmdldEVsZW1lbnRCeUlkKGM1KTtyZXR1cm4gZT9lLmlkPT09YzV8fHR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUhPT1jdyYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpLnZhbHVlPT09YzU/W2VdOmNnOltdfX0sVEFHOmI1P2Z1bmN0aW9uKGUsYzMpe2lmKHR5cGVvZiBjMy5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PWN3KXtyZXR1cm4gYzMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSl9fTpmdW5jdGlvbihlLGM2KXt2YXIgYzU9YzYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7aWYoZT09PSIqIil7dmFyIGM3LGM0PVtdLGMzPTA7Zm9yKDsoYzc9YzVbYzNdKTtjMysrKXtpZihjNy5ub2RlVHlwZT09PTEpe2M0LnB1c2goYzcpfX1yZXR1cm4gYzR9cmV0dXJuIGM1fX0scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDp0cnVlfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OnRydWV9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJlRmlsdGVyOntBVFRSOmZ1bmN0aW9uKGUpe2VbMV09ZVsxXS5yZXBsYWNlKGNzLCIiKTtlWzNdPShlWzRdfHxlWzVdfHwiIikucmVwbGFjZShjcywiIik7aWYoZVsyXT09PSJ+PSIpe2VbM109IiAiK2VbM10rIiAifXJldHVybiBlLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGUpe2VbMV09ZVsxXS50b0xvd2VyQ2FzZSgpO2lmKGVbMV09PT0ibnRoIil7aWYoIWVbMl0pe2NOLmVycm9yKGVbMF0pfWVbM109KyhlWzNdP2VbNF0rKGVbNV18fDEpOjIqKGVbMl09PT0iZXZlbiJ8fGVbMl09PT0ib2RkIikpO2VbNF09KygoZVs2XStlWzddKXx8ZVsyXT09PSJvZGQiKX1lbHNle2lmKGVbMl0pe2NOLmVycm9yKGVbMF0pfX1yZXR1cm4gZX0sUFNFVURPOmZ1bmN0aW9uKGUpe3ZhciBjMyxjND1lWzRdO2lmKGNFLkNISUxELnRlc3QoZVswXSkpe3JldHVybiBudWxsfWlmKGM0JiYoYzM9Y0ouZXhlYyhjNCkpJiZjMy5wb3AoKSl7ZVswXT1lWzBdLnNsaWNlKDAsYzNbMF0ubGVuZ3RoLWM0Lmxlbmd0aC0xKTtjND1jM1swXS5zbGljZSgwLC0xKX1lLnNwbGljZSgyLDMsYzR8fGVbM10pO3JldHVybiBlfX0sZmlsdGVyOntJRDpiOD9mdW5jdGlvbihlKXtlPWUucmVwbGFjZShjcywiIik7cmV0dXJuIGZ1bmN0aW9uKGMzKXtyZXR1cm4gYzMuZ2V0QXR0cmlidXRlKCJpZCIpPT09ZX19OmZ1bmN0aW9uKGUpe2U9ZS5yZXBsYWNlKGNzLCIiKTtyZXR1cm4gZnVuY3Rpb24oYzQpe3ZhciBjMz10eXBlb2YgYzQuZ2V0QXR0cmlidXRlTm9kZSE9PWN3JiZjNC5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBjMyYmYzMudmFsdWU9PT1lfX0sVEFHOmZ1bmN0aW9uKGUpe2lmKGU9PT0iKiIpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0cnVlfX1lPWUucmVwbGFjZShjcywiIikudG9Mb3dlckNhc2UoKTtyZXR1cm4gZnVuY3Rpb24oYzMpe3JldHVybiBjMy5ub2RlTmFtZSYmYzMubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWV9fSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgYzM9Y1JbZV07aWYoIWMzKXtjMz1jUltlXT1uZXcgUmVnRXhwKCIoXnwiK2N6KyIpIitlKyIoIitjeisifCQpIik7Y3EucHVzaChlKTtpZihjcS5sZW5ndGg+Y0cuY2FjaGVMZW5ndGgpe2RlbGV0ZSBjUltjcS5zaGlmdCgpXX19cmV0dXJuIGZ1bmN0aW9uKGM0KXtyZXR1cm4gYzMudGVzdChjNC5jbGFzc05hbWV8fCh0eXBlb2YgYzQuZ2V0QXR0cmlidXRlIT09Y3cmJmM0LmdldEF0dHJpYnV0ZSgiY2xhc3MiKSl8fCIiKX19LEFUVFI6ZnVuY3Rpb24oYzQsYzMsZSl7aWYoIWMzKXtyZXR1cm4gZnVuY3Rpb24oYzUpe3JldHVybiBjTi5hdHRyKGM1LGM0KSE9bnVsbH19cmV0dXJuIGZ1bmN0aW9uKGM2KXt2YXIgYzU9Y04uYXR0cihjNixjNCksYzc9YzUrIiI7aWYoYzU9PW51bGwpe3JldHVybiBjMz09PSIhPSJ9c3dpdGNoKGMzKXtjYXNlIj0iOnJldHVybiBjNz09PWU7Y2FzZSIhPSI6cmV0dXJuIGM3IT09ZTtjYXNlIl49IjpyZXR1cm4gZSYmYzcuaW5kZXhPZihlKT09PTA7Y2FzZSIqPSI6cmV0dXJuIGUmJmM3LmluZGV4T2YoZSk+LTE7Y2FzZSIkPSI6cmV0dXJuIGUmJmM3LnN1YnN0cihjNy5sZW5ndGgtZS5sZW5ndGgpPT09ZTtjYXNlIn49IjpyZXR1cm4oIiAiK2M3KyIgIikuaW5kZXhPZihlKT4tMTtjYXNlInw9IjpyZXR1cm4gYzc9PT1lfHxjNy5zdWJzdHIoMCxlLmxlbmd0aCsxKT09PWUrIi0ifX19LENISUxEOmZ1bmN0aW9uKGMzLGM1LGM2LGM0KXtpZihjMz09PSJudGgiKXt2YXIgZT1jZSsrO3JldHVybiBmdW5jdGlvbihkYSl7dmFyIGM3LGRiLGM5PTAsYzg9ZGE7aWYoYzY9PT0xJiZjND09PTApe3JldHVybiB0cnVlfWM3PWRhLnBhcmVudE5vZGU7aWYoYzcmJihjN1tjV10hPT1lfHwhZGEuc2l6c2V0KSl7Zm9yKGM4PWM3LmZpcnN0Q2hpbGQ7Yzg7Yzg9YzgubmV4dFNpYmxpbmcpe2lmKGM4Lm5vZGVUeXBlPT09MSl7Yzguc2l6c2V0PSsrYzk7aWYoYzg9PT1kYSl7YnJlYWt9fX1jN1tjV109ZX1kYj1kYS5zaXpzZXQtYzQ7aWYoYzY9PT0wKXtyZXR1cm4gZGI9PT0wfWVsc2V7cmV0dXJuKGRiJWM2PT09MCYmZGIvYzY+PTApfX19cmV0dXJuIGZ1bmN0aW9uKGM4KXt2YXIgYzc9Yzg7c3dpdGNoKGMzKXtjYXNlIm9ubHkiOmNhc2UiZmlyc3QiOndoaWxlKChjNz1jNy5wcmV2aW91c1NpYmxpbmcpKXtpZihjNy5ub2RlVHlwZT09PTEpe3JldHVybiBmYWxzZX19aWYoYzM9PT0iZmlyc3QiKXtyZXR1cm4gdHJ1ZX1jNz1jODtjYXNlImxhc3QiOndoaWxlKChjNz1jNy5uZXh0U2libGluZykpe2lmKGM3Lm5vZGVUeXBlPT09MSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX19fSxQU0VVRE86ZnVuY3Rpb24oYzYsYzUsYzMsZSl7dmFyIGM0PWNHLnBzZXVkb3NbYzZdfHxjRy5wc2V1ZG9zW2M2LnRvTG93ZXJDYXNlKCldO2lmKCFjNCl7Y04uZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIitjNil9aWYoIWM0LnNpenpsZUZpbHRlcil7cmV0dXJuIGM0fXJldHVybiBjNChjNSxjMyxlKX19LHBzZXVkb3M6e25vdDpjWShmdW5jdGlvbihlLGM0LGMzKXt2YXIgYzU9Y2IoZS5yZXBsYWNlKGNVLCIkMSIpLGM0LGMzKTtyZXR1cm4gZnVuY3Rpb24oYzYpe3JldHVybiAhYzUoYzYpfX0pLGVuYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT1mYWxzZX0sZGlzYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT10cnVlfSxjaGVja2VkOmZ1bmN0aW9uKGUpe3ZhciBjMz1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKGMzPT09ImlucHV0IiYmISFlLmNoZWNrZWQpfHwoYzM9PT0ib3B0aW9uIiYmISFlLnNlbGVjdGVkKX0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7aWYoZS5wYXJlbnROb2RlKXtlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleH1yZXR1cm4gZS5zZWxlY3RlZD09PXRydWV9LHBhcmVudDpmdW5jdGlvbihlKXtyZXR1cm4gIWNHLnBzZXVkb3MuZW1wdHkoZSl9LGVtcHR5OmZ1bmN0aW9uKGMzKXt2YXIgZTtjMz1jMy5maXJzdENoaWxkO3doaWxlKGMzKXtpZihjMy5ub2RlTmFtZT4iQCJ8fChlPWMzLm5vZGVUeXBlKT09PTN8fGU9PT00KXtyZXR1cm4gZmFsc2V9YzM9YzMubmV4dFNpYmxpbmd9cmV0dXJuIHRydWV9LGNvbnRhaW5zOmNZKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihjMyl7cmV0dXJuKGMzLnRleHRDb250ZW50fHxjMy5pbm5lclRleHR8fGJaKGMzKSkuaW5kZXhPZihlKT4tMX19KSxoYXM6Y1koZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGMzKXtyZXR1cm4gY04oZSxjMykubGVuZ3RoPjB9fSksaGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBjcC50ZXN0KGUubm9kZU5hbWUpfSx0ZXh0OmZ1bmN0aW9uKGM0KXt2YXIgYzMsZTtyZXR1cm4gYzQubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJihjMz1jNC50eXBlKT09PSJ0ZXh0IiYmKChlPWM0LmdldEF0dHJpYnV0ZSgidHlwZSIpKT09bnVsbHx8ZS50b0xvd2VyQ2FzZSgpPT09YzMpfSxyYWRpbzpiMygicmFkaW8iKSxjaGVja2JveDpiMygiY2hlY2tib3giKSxmaWxlOmIzKCJmaWxlIikscGFzc3dvcmQ6YjMoInBhc3N3b3JkIiksaW1hZ2U6YjMoImltYWdlIiksc3VibWl0OmNyKCJzdWJtaXQiKSxyZXNldDpjcigicmVzZXQiKSxidXR0b246ZnVuY3Rpb24oYzMpe3ZhciBlPWMzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGU9PT0iaW5wdXQiJiZjMy50eXBlPT09ImJ1dHRvbiJ8fGU9PT0iYnV0dG9uIn0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGNNLnRlc3QoZS5ub2RlTmFtZSl9LGZvY3VzOmZ1bmN0aW9uKGUpe3ZhciBjMz1lLm93bmVyRG9jdW1lbnQ7cmV0dXJuIGU9PT1jMy5hY3RpdmVFbGVtZW50JiYoIWMzLmhhc0ZvY3VzfHxjMy5oYXNGb2N1cygpKSYmISEoZS50eXBlfHxlLmhyZWYpfSxhY3RpdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1lLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudH19LHNldEZpbHRlcnM6e2ZpcnN0OmZ1bmN0aW9uKGM0LGMzLGUpe3JldHVybiBlP2M0LnNsaWNlKDEpOltjNFswXV19LGxhc3Q6ZnVuY3Rpb24oYzUsYzQsYzMpe3ZhciBlPWM1LnBvcCgpO3JldHVybiBjMz9jNTpbZV19LGV2ZW46ZnVuY3Rpb24oYzcsYzYsYzUpe3ZhciBjND1bXSxjMz1jNT8xOjAsZT1jNy5sZW5ndGg7Zm9yKDtjMzxlO2MzPWMzKzIpe2M0LnB1c2goYzdbYzNdKX1yZXR1cm4gYzR9LG9kZDpmdW5jdGlvbihjNyxjNixjNSl7dmFyIGM0PVtdLGMzPWM1PzA6MSxlPWM3Lmxlbmd0aDtmb3IoO2MzPGU7YzM9YzMrMil7YzQucHVzaChjN1tjM10pfXJldHVybiBjNH0sbHQ6ZnVuY3Rpb24oYzQsYzMsZSl7cmV0dXJuIGU/YzQuc2xpY2UoK2MzKTpjNC5zbGljZSgwLCtjMyl9LGd0OmZ1bmN0aW9uKGM0LGMzLGUpe3JldHVybiBlP2M0LnNsaWNlKDAsK2MzKzEpOmM0LnNsaWNlKCtjMysxKX0sZXE6ZnVuY3Rpb24oYzUsYzQsYzMpe3ZhciBlPWM1LnNwbGljZSgrYzQsMSk7cmV0dXJuIGMzP2M1OmV9fX07Y0cuc2V0RmlsdGVycy5udGg9Y0cuc2V0RmlsdGVycy5lcTtjRy5maWx0ZXJzPWNHLnBzZXVkb3M7aWYoIWNEKXtjRy5hdHRySGFuZGxlPXtocmVmOmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgiaHJlZiIsMil9LHR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJ0eXBlIil9fX1pZihiMCl7Y0cub3JkZXIucHVzaCgiTkFNRSIpO2NHLmZpbmQuTkFNRT1mdW5jdGlvbihlLGMzKXtpZih0eXBlb2YgYzMuZ2V0RWxlbWVudHNCeU5hbWUhPT1jdyl7cmV0dXJuIGMzLmdldEVsZW1lbnRzQnlOYW1lKGUpfX19aWYoY0Mpe2NHLm9yZGVyLnNwbGljZSgxLDAsIkNMQVNTIik7Y0cuZmluZC5DTEFTUz1mdW5jdGlvbihjNCxjMyxlKXtpZih0eXBlb2YgYzMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PWN3JiYhZSl7cmV0dXJuIGMzLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYzQpfX19dHJ5e2NqLmNhbGwoYjkuY2hpbGROb2RlcywwKVswXS5ub2RlVHlwZX1jYXRjaChjMCl7Y2o9ZnVuY3Rpb24oYzMpe3ZhciBjNCxlPVtdO2Zvcig7KGM0PXRoaXNbYzNdKTtjMysrKXtlLnB1c2goYzQpfXJldHVybiBlfX12YXIgY2s9Y04uaXNYTUw9ZnVuY3Rpb24oZSl7dmFyIGMzPWUmJihlLm93bmVyRG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYzM/YzMubm9kZU5hbWUhPT0iSFRNTCI6ZmFsc2V9O3ZhciBjQT1jTi5jb250YWlucz1iOS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihjMyxlKXtyZXR1cm4gISEoYzMuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSkmMTYpfTpiOS5jb250YWlucz9mdW5jdGlvbihjMyxlKXt2YXIgYzU9YzMubm9kZVR5cGU9PT05P2MzLmRvY3VtZW50RWxlbWVudDpjMyxjND1lLnBhcmVudE5vZGU7cmV0dXJuIGMzPT09YzR8fCEhKGM0JiZjNC5ub2RlVHlwZT09PTEmJmM1LmNvbnRhaW5zJiZjNS5jb250YWlucyhjNCkpfTpmdW5jdGlvbihjMyxlKXt3aGlsZSgoZT1lLnBhcmVudE5vZGUpKXtpZihlPT09YzMpe3JldHVybiB0cnVlfX1yZXR1cm4gZmFsc2V9O3ZhciBiWj1jTi5nZXRUZXh0PWZ1bmN0aW9uKGM2KXt2YXIgYzUsYzM9IiIsYzQ9MCxlPWM2Lm5vZGVUeXBlO2lmKGUpe2lmKGU9PT0xfHxlPT09OXx8ZT09PTExKXtpZih0eXBlb2YgYzYudGV4dENvbnRlbnQ9PT0ic3RyaW5nIil7cmV0dXJuIGM2LnRleHRDb250ZW50fWVsc2V7Zm9yKGM2PWM2LmZpcnN0Q2hpbGQ7YzY7YzY9YzYubmV4dFNpYmxpbmcpe2MzKz1iWihjNil9fX1lbHNle2lmKGU9PT0zfHxlPT09NCl7cmV0dXJuIGM2Lm5vZGVWYWx1ZX19fWVsc2V7Zm9yKDsoYzU9YzZbYzRdKTtjNCsrKXtjMys9YlooYzUpfX1yZXR1cm4gYzN9O2NOLmF0dHI9ZnVuY3Rpb24oYzUsYzQpe3ZhciBlLGMzPWNrKGM1KTtpZighYzMpe2M0PWM0LnRvTG93ZXJDYXNlKCl9aWYoY0cuYXR0ckhhbmRsZVtjNF0pe3JldHVybiBjRy5hdHRySGFuZGxlW2M0XShjNSl9aWYoY258fGMzKXtyZXR1cm4gYzUuZ2V0QXR0cmlidXRlKGM0KX1lPWM1LmdldEF0dHJpYnV0ZU5vZGUoYzQpO3JldHVybiBlP3R5cGVvZiBjNVtjNF09PT0iYm9vbGVhbiI/YzVbYzRdP2M0Om51bGw6ZS5zcGVjaWZpZWQ/ZS52YWx1ZTpudWxsOm51bGx9O2NOLmVycm9yPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX07WzAsMF0uc29ydChmdW5jdGlvbigpe3JldHVybihiNz0wKX0pO2lmKGI5LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKXtjZj1mdW5jdGlvbihjMyxlKXtpZihjMz09PWUpe2NhPXRydWU7cmV0dXJuIDB9cmV0dXJuKCFjMy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbnx8IWUuY29tcGFyZURvY3VtZW50UG9zaXRpb24/YzMuY29tcGFyZURvY3VtZW50UG9zaXRpb246YzMuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSkmNCk/LTE6MX19ZWxzZXtjZj1mdW5jdGlvbihkYSxjOSl7aWYoZGE9PT1jOSl7Y2E9dHJ1ZTtyZXR1cm4gMH1lbHNle2lmKGRhLnNvdXJjZUluZGV4JiZjOS5zb3VyY2VJbmRleCl7cmV0dXJuIGRhLnNvdXJjZUluZGV4LWM5LnNvdXJjZUluZGV4fX12YXIgYzcsYzMsYzQ9W10sZT1bXSxjNj1kYS5wYXJlbnROb2RlLGM4PWM5LnBhcmVudE5vZGUsZGI9YzY7aWYoYzY9PT1jOCl7cmV0dXJuIGIyKGRhLGM5KX1lbHNle2lmKCFjNil7cmV0dXJuIC0xfWVsc2V7aWYoIWM4KXtyZXR1cm4gMX19fXdoaWxlKGRiKXtjNC51bnNoaWZ0KGRiKTtkYj1kYi5wYXJlbnROb2RlfWRiPWM4O3doaWxlKGRiKXtlLnVuc2hpZnQoZGIpO2RiPWRiLnBhcmVudE5vZGV9Yzc9YzQubGVuZ3RoO2MzPWUubGVuZ3RoO2Zvcih2YXIgYzU9MDtjNTxjNyYmYzU8YzM7YzUrKyl7aWYoYzRbYzVdIT09ZVtjNV0pe3JldHVybiBiMihjNFtjNV0sZVtjNV0pfX1yZXR1cm4gYzU9PT1jNz9iMihkYSxlW2M1XSwtMSk6YjIoYzRbYzVdLGM5LDEpfTtiMj1mdW5jdGlvbihjMyxlLGM0KXtpZihjMz09PWUpe3JldHVybiBjNH12YXIgYzU9YzMubmV4dFNpYmxpbmc7d2hpbGUoYzUpe2lmKGM1PT09ZSl7cmV0dXJuIC0xfWM1PWM1Lm5leHRTaWJsaW5nfXJldHVybiAxfX1jTi51bmlxdWVTb3J0PWZ1bmN0aW9uKGMzKXt2YXIgYzQsZT0xO2lmKGNmKXtjYT1iNztjMy5zb3J0KGNmKTtpZihjYSl7Zm9yKDsoYzQ9YzNbZV0pO2UrKyl7aWYoYzQ9PT1jM1tlLTFdKXtjMy5zcGxpY2UoZS0tLDEpfX19fXJldHVybiBjM307ZnVuY3Rpb24gY20oYzMsYzcsYzYsYzQpe3ZhciBjNT0wLGU9YzcubGVuZ3RoO2Zvcig7YzU8ZTtjNSsrKXtjTihjMyxjN1tjNV0sYzYsYzQpfX1mdW5jdGlvbiBjSShlLGM0LGM4LGM5LGMzLGM3KXt2YXIgYzUsYzY9Y0cuc2V0RmlsdGVyc1tjNC50b0xvd2VyQ2FzZSgpXTtpZighYzYpe2NOLmVycm9yKGM0KX1pZihlfHwhKGM1PWMzKSl7Y20oZXx8IioiLGM5LChjNT1bXSksYzMpfXJldHVybiBjNS5sZW5ndGg+MD9jNihjNSxjOCxjNyk6W119ZnVuY3Rpb24gY1EoZGMsZSxkYSxjNCxkZyl7dmFyIGM3LGMzLGM2LGRpLGM5LGRoLGRiLGRmLGRkPTAsZGU9ZGcubGVuZ3RoLGM1PWNFLlBPUyxjOD1uZXcgUmVnRXhwKCJeIitjNS5zb3VyY2UrIig/ISIrY3orIikiLCJpIiksZGo9ZnVuY3Rpb24oKXt2YXIgZGw9MSxkaz1hcmd1bWVudHMubGVuZ3RoLTI7Zm9yKDtkbDxkaztkbCsrKXtpZihhcmd1bWVudHNbZGxdPT09Y2cpe2M3W2RsXT1jZ319fTtmb3IoO2RkPGRlO2RkKyspe2M1LmV4ZWMoIiIpO2RjPWRnW2RkXTtkaT1bXTtjNj0wO2M5PWM0O3doaWxlKChjNz1jNS5leGVjKGRjKSkpe2RmPWM1Lmxhc3RJbmRleD1jNy5pbmRleCtjN1swXS5sZW5ndGg7aWYoZGY+YzYpe2RiPWRjLnNsaWNlKGM2LGM3LmluZGV4KTtjNj1kZjtkaD1bZV07aWYoY0YudGVzdChkYikpe2lmKGM5KXtkaD1jOX1jOT1jNH1pZigoYzM9Y1gudGVzdChkYikpKXtkYj1kYi5zbGljZSgwLC01KS5yZXBsYWNlKGNGLCIkJioiKX1pZihjNy5sZW5ndGg+MSl7YzdbMF0ucmVwbGFjZShjOCxkail9Yzk9Y0koZGIsYzdbMV0sYzdbMl0sZGgsYzksYzMpfX1pZihjOSl7ZGk9ZGkuY29uY2F0KGM5KTtpZigoZGI9ZGMuc2xpY2UoYzYpKSYmZGIhPT0iKSIpe2lmKGNGLnRlc3QoZGIpKXtjbShkYixkaSxkYSxjNCl9ZWxzZXtjTihkYixlLGRhLGM0P2M0LmNvbmNhdChjOSk6YzkpfX1lbHNle2NTLmFwcGx5KGRhLGRpKX19ZWxzZXtjTihkYyxlLGRhLGM0KX19cmV0dXJuIGRlPT09MT9kYTpjTi51bmlxdWVTb3J0KGRhKX1mdW5jdGlvbiBiMShjOCxjNCxkYil7dmFyIGRkLGRjLGRlLGM2PVtdLGM5PTAsZGE9Y0ouZXhlYyhjOCksYzM9IWRhLnBvcCgpJiYhZGEucG9wKCksZGY9YzMmJmM4Lm1hdGNoKGN0KXx8WyIiXSxlPWNHLnByZUZpbHRlcixjNT1jRy5maWx0ZXIsYzc9IWRiJiZjNCE9PWI2O2Zvcig7KGRjPWRmW2M5XSkhPW51bGwmJmMzO2M5Kyspe2M2LnB1c2goZGQ9W10pO2lmKGM3KXtkYz0iICIrZGN9d2hpbGUoZGMpe2MzPWZhbHNlO2lmKChkYT1jRi5leGVjKGRjKSkpe2RjPWRjLnNsaWNlKGRhWzBdLmxlbmd0aCk7YzM9ZGQucHVzaCh7cGFydDpkYS5wb3AoKS5yZXBsYWNlKGNVLCIgIiksY2FwdHVyZXM6ZGF9KX1mb3IoZGUgaW4gYzUpe2lmKChkYT1jRVtkZV0uZXhlYyhkYykpJiYoIWVbZGVdfHwoZGE9ZVtkZV0oZGEsYzQsZGIpKSkpe2RjPWRjLnNsaWNlKGRhLnNoaWZ0KCkubGVuZ3RoKTtjMz1kZC5wdXNoKHtwYXJ0OmRlLGNhcHR1cmVzOmRhfSl9fWlmKCFjMyl7YnJlYWt9fX1pZighYzMpe2NOLmVycm9yKGM4KX1yZXR1cm4gYzZ9ZnVuY3Rpb24gY3goYzYsYzUsYzQpe3ZhciBlPWM1LmRpcixjMz1jZSsrO2lmKCFjNil7YzY9ZnVuY3Rpb24oYzcpe3JldHVybiBjNz09PWM0fX1yZXR1cm4gYzUuZmlyc3Q/ZnVuY3Rpb24oYzgsYzcpe3doaWxlKChjOD1jOFtlXSkpe2lmKGM4Lm5vZGVUeXBlPT09MSl7cmV0dXJuIGM2KGM4LGM3KSYmYzh9fX06ZnVuY3Rpb24oYzksYzgpe3ZhciBjNyxkYT1jMysiLiIrY28sZGI9ZGErIi4iK2NUO3doaWxlKChjOT1jOVtlXSkpe2lmKGM5Lm5vZGVUeXBlPT09MSl7aWYoKGM3PWM5W2NXXSk9PT1kYil7cmV0dXJuIGM5LnNpenNldH1lbHNle2lmKHR5cGVvZiBjNz09PSJzdHJpbmciJiZjNy5pbmRleE9mKGRhKT09PTApe2lmKGM5LnNpenNldCl7cmV0dXJuIGM5fX1lbHNle2M5W2NXXT1kYjtpZihjNihjOSxjOCkpe2M5LnNpenNldD10cnVlO3JldHVybiBjOX1jOS5zaXpzZXQ9ZmFsc2V9fX19fX1mdW5jdGlvbiBjdihlLGMzKXtyZXR1cm4gZT9mdW5jdGlvbihjNixjNSl7dmFyIGM0PWMzKGM2LGM1KTtyZXR1cm4gYzQmJmUoYzQ9PT10cnVlP2M2OmM0LGM1KX06YzN9ZnVuY3Rpb24gY3koYzcsYzUsZSl7dmFyIGM0LGM2LGMzPTA7Zm9yKDsoYzQ9YzdbYzNdKTtjMysrKXtpZihjRy5yZWxhdGl2ZVtjNC5wYXJ0XSl7YzY9Y3goYzYsY0cucmVsYXRpdmVbYzQucGFydF0sYzUpfWVsc2V7YzQuY2FwdHVyZXMucHVzaChjNSxlKTtjNj1jdihjNixjRy5maWx0ZXJbYzQucGFydF0uYXBwbHkobnVsbCxjNC5jYXB0dXJlcykpfX1yZXR1cm4gYzZ9ZnVuY3Rpb24gYjQoZSl7cmV0dXJuIGZ1bmN0aW9uKGM1LGM0KXt2YXIgYzYsYzM9MDtmb3IoOyhjNj1lW2MzXSk7YzMrKyl7aWYoYzYoYzUsYzQpKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfX12YXIgY2I9Y04uY29tcGlsZT1mdW5jdGlvbihlLGM1LGMzKXt2YXIgYzgsYzcsYzQsYzY9Y2xbZV07aWYoYzYmJmM2LmNvbnRleHQ9PT1jNSl7cmV0dXJuIGM2fWM3PWIxKGUsYzUsYzMpO2ZvcihjND0wOyhjOD1jN1tjNF0pO2M0Kyspe2M3W2M0XT1jeShjOCxjNSxjMyl9YzY9Y2xbZV09YjQoYzcpO2M2LmNvbnRleHQ9YzU7YzYucnVucz1jNi5kaXJydW5zPTA7Y3UucHVzaChlKTtpZihjdS5sZW5ndGg+Y0cuY2FjaGVMZW5ndGgpe2RlbGV0ZSBjbFtjdS5zaGlmdCgpXX1yZXR1cm4gYzZ9O2NOLm1hdGNoZXM9ZnVuY3Rpb24oYzMsZSl7cmV0dXJuIGNOKGMzLG51bGwsbnVsbCxlKX07Y04ubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsYzMpe3JldHVybiBjTihjMyxudWxsLG51bGwsW2VdKS5sZW5ndGg+MH07dmFyIGNWPWZ1bmN0aW9uKGM2LGMzLGM4LGRjLGRiKXtjNj1jNi5yZXBsYWNlKGNVLCIkMSIpO3ZhciBlLGRkLGM5LGRlLGM0LGM1LGRnLGRoLGM3LGRhPWM2Lm1hdGNoKGN0KSxkZj1jNi5tYXRjaChjWiksZGk9YzMubm9kZVR5cGU7aWYoY0UuUE9TLnRlc3QoYzYpKXtyZXR1cm4gY1EoYzYsYzMsYzgsZGMsZGEpfWlmKGRjKXtlPWNqLmNhbGwoZGMsMCl9ZWxzZXtpZihkYSYmZGEubGVuZ3RoPT09MSl7aWYoZGYubGVuZ3RoPjEmJmRpPT09OSYmIWRiJiYoZGE9Y0UuSUQuZXhlYyhkZlswXSkpKXtjMz1jRy5maW5kLklEKGRhWzFdLGMzLGRiKVswXTtpZighYzMpe3JldHVybiBjOH1jNj1jNi5zbGljZShkZi5zaGlmdCgpLmxlbmd0aCl9ZGg9KChkYT1jUC5leGVjKGRmWzBdKSkmJiFkYS5pbmRleCYmYzMucGFyZW50Tm9kZSl8fGMzO2M3PWRmLnBvcCgpO2M1PWM3LnNwbGl0KCI6bm90IilbMF07Zm9yKGM5PTAsZGU9Y0cub3JkZXIubGVuZ3RoO2M5PGRlO2M5Kyspe2RnPWNHLm9yZGVyW2M5XTtpZigoZGE9Y0VbZGddLmV4ZWMoYzUpKSl7ZT1jRy5maW5kW2RnXSgoZGFbMV18fCIiKS5yZXBsYWNlKGNzLCIiKSxkaCxkYik7aWYoZT09bnVsbCl7Y29udGludWV9aWYoYzU9PT1jNyl7YzY9YzYuc2xpY2UoMCxjNi5sZW5ndGgtYzcubGVuZ3RoKStjNS5yZXBsYWNlKGNFW2RnXSwiIik7aWYoIWM2KXtjUy5hcHBseShjOCxjai5jYWxsKGUsMCkpfX1icmVha319fX1pZihjNil7ZGQ9Y2IoYzYsYzMsZGIpO2NvPWRkLmRpcnJ1bnMrKztpZihlPT1udWxsKXtlPWNHLmZpbmQuVEFHKCIqIiwoY1AudGVzdChjNikmJmMzLnBhcmVudE5vZGUpfHxjMyl9Zm9yKGM5PTA7KGM0PWVbYzldKTtjOSsrKXtjVD1kZC5ydW5zKys7aWYoZGQoYzQsYzMpKXtjOC5wdXNoKGM0KX19fXJldHVybiBjOH07aWYoYjYucXVlcnlTZWxlY3RvckFsbCl7KGZ1bmN0aW9uKCl7dmFyIGM3LGM4PWNWLGM2PS8nfFxcL2csYzQ9L1w9W1x4MjBcdFxyXG5cZl0qKFteJyJcXV0qKVtceDIwXHRcclxuXGZdKlxdL2csYzM9W10sZT1bIjphY3RpdmUiXSxjNT1iOS5tYXRjaGVzU2VsZWN0b3J8fGI5Lm1vek1hdGNoZXNTZWxlY3Rvcnx8Yjkud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxiOS5vTWF0Y2hlc1NlbGVjdG9yfHxiOS5tc01hdGNoZXNTZWxlY3RvcjtjSChmdW5jdGlvbihjOSl7YzkuaW5uZXJIVE1MPSI8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ+PC9vcHRpb24+PC9zZWxlY3Q+IjtpZighYzkucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aCl7YzMucHVzaCgiXFxbIitjeisiKig/OmNoZWNrZWR8ZGlzYWJsZWR8aXNtYXB8bXVsdGlwbGV8cmVhZG9ubHl8c2VsZWN0ZWR8dmFsdWUpIil9aWYoIWM5LnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RoKXtjMy5wdXNoKCI6Y2hlY2tlZCIpfX0pO2NIKGZ1bmN0aW9uKGM5KXtjOS5pbm5lckhUTUw9IjxwIHRlc3Q9Jyc+PC9wPiI7aWYoYzkucXVlcnlTZWxlY3RvckFsbCgiW3Rlc3RePScnXSIpLmxlbmd0aCl7YzMucHVzaCgiWypeJF09IitjeisiKig/OlwiXCJ8JycpIil9YzkuaW5uZXJIVE1MPSI8aW5wdXQgdHlwZT0naGlkZGVuJz4iO2lmKCFjOS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCl7YzMucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKX19KTtjMz1jMy5sZW5ndGgmJm5ldyBSZWdFeHAoYzMuam9pbigifCIpKTtjVj1mdW5jdGlvbihkZSxkYSxkZixkaCxkZyl7aWYoIWRoJiYhZGcmJighYzN8fCFjMy50ZXN0KGRlKSkpe2lmKGRhLm5vZGVUeXBlPT09OSl7dHJ5e2NTLmFwcGx5KGRmLGNqLmNhbGwoZGEucXVlcnlTZWxlY3RvckFsbChkZSksMCkpO3JldHVybiBkZn1jYXRjaChkZCl7fX1lbHNle2lmKGRhLm5vZGVUeXBlPT09MSYmZGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJvYmplY3QiKXt2YXIgZGM9ZGEuZ2V0QXR0cmlidXRlKCJpZCIpLGM5PWRjfHxjVyxkYj1jUC50ZXN0KGRlKSYmZGEucGFyZW50Tm9kZXx8ZGE7aWYoZGMpe2M5PWM5LnJlcGxhY2UoYzYsIlxcJCYiKX1lbHNle2RhLnNldEF0dHJpYnV0ZSgiaWQiLGM5KX10cnl7Y1MuYXBwbHkoZGYsY2ouY2FsbChkYi5xdWVyeVNlbGVjdG9yQWxsKGRlLnJlcGxhY2UoY3QsIltpZD0nIitjOSsiJ10gJCYiKSksMCkpO3JldHVybiBkZn1jYXRjaChkZCl7fWZpbmFsbHl7aWYoIWRjKXtkYS5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX19fXJldHVybiBjOChkZSxkYSxkZixkaCxkZyl9O2lmKGM1KXtjSChmdW5jdGlvbihkYSl7Yzc9YzUuY2FsbChkYSwiZGl2Iik7dHJ5e2M1LmNhbGwoZGEsIlt0ZXN0IT0nJ106c2l6emxlIik7ZS5wdXNoKGNHLm1hdGNoLlBTRVVETyl9Y2F0Y2goYzkpe319KTtlPW5ldyBSZWdFeHAoZS5qb2luKCJ8IikpO2NOLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihkYSxkYyl7ZGM9ZGMucmVwbGFjZShjNCwiPSckMSddIik7aWYoIWNrKGRhKSYmIWUudGVzdChkYykmJighYzN8fCFjMy50ZXN0KGRjKSkpe3RyeXt2YXIgYzk9YzUuY2FsbChkYSxkYyk7aWYoYzl8fGM3fHxkYS5kb2N1bWVudCYmZGEuZG9jdW1lbnQubm9kZVR5cGUhPT0xMSl7cmV0dXJuIGM5fX1jYXRjaChkYil7fX1yZXR1cm4gY04oZGMsbnVsbCxudWxsLFtkYV0pLmxlbmd0aD4wfX19KSgpfWNOLmF0dHI9YkcuYXR0cjtiRy5maW5kPWNOO2JHLmV4cHI9Y04uc2VsZWN0b3JzO2JHLmV4cHJbIjoiXT1iRy5leHByLnBzZXVkb3M7YkcudW5pcXVlPWNOLnVuaXF1ZVNvcnQ7YkcudGV4dD1jTi5nZXRUZXh0O2JHLmlzWE1MRG9jPWNOLmlzWE1MO2JHLmNvbnRhaW5zPWNOLmNvbnRhaW5zfSkoYTIpO3ZhciBhZz0vVW50aWwkLyxicT0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxhbD0vXi5bXjojXFtcLixdKiQvLHo9YkcuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQsYnU9e2NoaWxkcmVuOnRydWUsY29udGVudHM6dHJ1ZSxuZXh0OnRydWUscHJldjp0cnVlfTtiRy5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIGIyLGJaLGI0LGI1LGIzLGIxLGIwPXRoaXM7aWYodHlwZW9mIGUhPT0ic3RyaW5nIil7cmV0dXJuIGJHKGUpLmZpbHRlcihmdW5jdGlvbigpe2ZvcihiMj0wLGJaPWIwLmxlbmd0aDtiMjxiWjtiMisrKXtpZihiRy5jb250YWlucyhiMFtiMl0sdGhpcykpe3JldHVybiB0cnVlfX19KX1iMT10aGlzLnB1c2hTdGFjaygiIiwiZmluZCIsZSk7Zm9yKGIyPTAsYlo9dGhpcy5sZW5ndGg7YjI8Ylo7YjIrKyl7YjQ9YjEubGVuZ3RoO2JHLmZpbmQoZSx0aGlzW2IyXSxiMSk7aWYoYjI+MCl7Zm9yKGI1PWI0O2I1PGIxLmxlbmd0aDtiNSsrKXtmb3IoYjM9MDtiMzxiNDtiMysrKXtpZihiMVtiM109PT1iMVtiNV0pe2IxLnNwbGljZShiNS0tLDEpO2JyZWFrfX19fX1yZXR1cm4gYjF9LGhhczpmdW5jdGlvbihiMSl7dmFyIGIwLGJaPWJHKGIxLHRoaXMpLGU9YloubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2ZvcihiMD0wO2IwPGU7YjArKyl7aWYoYkcuY29udGFpbnModGhpcyxiWltiMF0pKXtyZXR1cm4gdHJ1ZX19fSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYU0odGhpcyxlLGZhbHNlKSwibm90IixlKX0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhhTSh0aGlzLGUsdHJ1ZSksImZpbHRlciIsZSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiAhIWUmJih0eXBlb2YgZT09PSJzdHJpbmciP3oudGVzdChlKT9iRyhlLHRoaXMuY29udGV4dCkuaW5kZXgodGhpc1swXSk+PTA6YkcuZmlsdGVyKGUsdGhpcykubGVuZ3RoPjA6dGhpcy5maWx0ZXIoZSkubGVuZ3RoPjApfSxjbG9zZXN0OmZ1bmN0aW9uKGIyLGIxKXt2YXIgYjMsYjA9MCxlPXRoaXMubGVuZ3RoLGJaPVtdLGI0PXoudGVzdChiMil8fHR5cGVvZiBiMiE9PSJzdHJpbmciP2JHKGIyLGIxfHx0aGlzLmNvbnRleHQpOjA7Zm9yKDtiMDxlO2IwKyspe2IzPXRoaXNbYjBdO3doaWxlKGIzJiZiMy5vd25lckRvY3VtZW50JiZiMyE9PWIxJiZiMy5ub2RlVHlwZSE9PTExKXtpZihiND9iNC5pbmRleChiMyk+LTE6YkcuZmluZC5tYXRjaGVzU2VsZWN0b3IoYjMsYjIpKXtiWi5wdXNoKGIzKTticmVha31iMz1iMy5wYXJlbnROb2RlfX1iWj1iWi5sZW5ndGg+MT9iRy51bmlxdWUoYlopOmJaO3JldHVybiB0aGlzLnB1c2hTdGFjayhiWiwiY2xvc2VzdCIsYjIpfSxpbmRleDpmdW5jdGlvbihlKXtpZighZSl7cmV0dXJuKHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZSk/dGhpcy5wcmV2QWxsKCkubGVuZ3RoOi0xfWlmKHR5cGVvZiBlPT09InN0cmluZyIpe3JldHVybiBiRy5pbkFycmF5KHRoaXNbMF0sYkcoZSkpfXJldHVybiBiRy5pbkFycmF5KGUuanF1ZXJ5P2VbMF06ZSx0aGlzKX0sYWRkOmZ1bmN0aW9uKGUsYlope3ZhciBiMT10eXBlb2YgZT09PSJzdHJpbmciP2JHKGUsYlopOmJHLm1ha2VBcnJheShlJiZlLm5vZGVUeXBlP1tlXTplKSxiMD1iRy5tZXJnZSh0aGlzLmdldCgpLGIxKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYVIoYjFbMF0pfHxhUihiMFswXSk/YjA6YkcudW5pcXVlKGIwKSl9LGFkZEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKGU9PW51bGw/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfX0pO2JHLmZuLmFuZFNlbGY9YkcuZm4uYWRkQmFjaztmdW5jdGlvbiBhUihlKXtyZXR1cm4gIWV8fCFlLnBhcmVudE5vZGV8fGUucGFyZW50Tm9kZS5ub2RlVHlwZT09PTExfWZ1bmN0aW9uIGFZKGJaLGUpe2Rve2JaPWJaW2VdfXdoaWxlKGJaJiZiWi5ub2RlVHlwZSE9PTEpO3JldHVybiBiWn1iRy5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYlope3ZhciBlPWJaLnBhcmVudE5vZGU7cmV0dXJuIGUmJmUubm9kZVR5cGUhPT0xMT9lOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGJHLmRpcihlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihiWixlLGIwKXtyZXR1cm4gYkcuZGlyKGJaLCJwYXJlbnROb2RlIixiMCl9LG5leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGFZKGUsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oZSl7cmV0dXJuIGFZKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBiRy5kaXIoZSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihlKXtyZXR1cm4gYkcuZGlyKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oYlosZSxiMCl7cmV0dXJuIGJHLmRpcihiWiwibmV4dFNpYmxpbmciLGIwKX0scHJldlVudGlsOmZ1bmN0aW9uKGJaLGUsYjApe3JldHVybiBiRy5kaXIoYlosInByZXZpb3VzU2libGluZyIsYjApfSxzaWJsaW5nczpmdW5jdGlvbihlKXtyZXR1cm4gYkcuc2libGluZygoZS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxlKX0sY2hpbGRyZW46ZnVuY3Rpb24oZSl7cmV0dXJuIGJHLnNpYmxpbmcoZS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGJHLm5vZGVOYW1lKGUsImlmcmFtZSIpP2UuY29udGVudERvY3VtZW50fHxlLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ6YkcubWVyZ2UoW10sZS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGUsYlope2JHLmZuW2VdPWZ1bmN0aW9uKGIyLGIwKXt2YXIgYjE9YkcubWFwKHRoaXMsYlosYjIpO2lmKCFhZy50ZXN0KGUpKXtiMD1iMn1pZihiMCYmdHlwZW9mIGIwPT09InN0cmluZyIpe2IxPWJHLmZpbHRlcihiMCxiMSl9YjE9dGhpcy5sZW5ndGg+MSYmIWJ1W2VdP2JHLnVuaXF1ZShiMSk6YjE7aWYodGhpcy5sZW5ndGg+MSYmYnEudGVzdChlKSl7YjE9YjEucmV2ZXJzZSgpfXJldHVybiB0aGlzLnB1c2hTdGFjayhiMSxlLGE0LmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfX0pO2JHLmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGIwLGUsYlope2lmKGJaKXtiMD0iOm5vdCgiK2IwKyIpIn1yZXR1cm4gZS5sZW5ndGg9PT0xP2JHLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGVbMF0sYjApP1tlWzBdXTpbXTpiRy5maW5kLm1hdGNoZXMoYjAsZSl9LGRpcjpmdW5jdGlvbihiMCxiWixiMil7dmFyIGU9W10sYjE9YjBbYlpdO3doaWxlKGIxJiZiMS5ub2RlVHlwZSE9PTkmJihiMj09PWFCfHxiMS5ub2RlVHlwZSE9PTF8fCFiRyhiMSkuaXMoYjIpKSl7aWYoYjEubm9kZVR5cGU9PT0xKXtlLnB1c2goYjEpfWIxPWIxW2JaXX1yZXR1cm4gZX0sc2libGluZzpmdW5jdGlvbihiMCxiWil7dmFyIGU9W107Zm9yKDtiMDtiMD1iMC5uZXh0U2libGluZyl7aWYoYjAubm9kZVR5cGU9PT0xJiZiMCE9PWJaKXtlLnB1c2goYjApfX1yZXR1cm4gZX19KTtmdW5jdGlvbiBhTShiMSxiMCxlKXtiMD1iMHx8MDtpZihiRy5pc0Z1bmN0aW9uKGIwKSl7cmV0dXJuIGJHLmdyZXAoYjEsZnVuY3Rpb24oYjMsYjIpe3ZhciBiND0hIWIwLmNhbGwoYjMsYjIsYjMpO3JldHVybiBiND09PWV9KX1lbHNle2lmKGIwLm5vZGVUeXBlKXtyZXR1cm4gYkcuZ3JlcChiMSxmdW5jdGlvbihiMyxiMil7cmV0dXJuKGIzPT09YjApPT09ZX0pfWVsc2V7aWYodHlwZW9mIGIwPT09InN0cmluZyIpe3ZhciBiWj1iRy5ncmVwKGIxLGZ1bmN0aW9uKGIyKXtyZXR1cm4gYjIubm9kZVR5cGU9PT0xfSk7aWYoYWwudGVzdChiMCkpe3JldHVybiBiRy5maWx0ZXIoYjAsYlosIWUpfWVsc2V7YjA9YkcuZmlsdGVyKGIwLGJaKX19fX1yZXR1cm4gYkcuZ3JlcChiMSxmdW5jdGlvbihiMyxiMil7cmV0dXJuKGJHLmluQXJyYXkoYjMsYjApPj0wKT09PWV9KX1mdW5jdGlvbiBCKGUpe3ZhciBiMD1jLnNwbGl0KCJ8IiksYlo9ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aWYoYlouY3JlYXRlRWxlbWVudCl7d2hpbGUoYjAubGVuZ3RoKXtiWi5jcmVhdGVFbGVtZW50KGIwLnBvcCgpKX19cmV0dXJuIGJafXZhciBjPSJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0aW1lfHZpZGVvIixhdj0vIGpRdWVyeVxkKz0iKD86bnVsbHxcZCspIi9nLGJZPS9eXHMrLyxheT0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpLHA9LzwoW1x3Ol0rKS8sYlQ9Lzx0Ym9keS9pLEo9Lzx8JiM/XHcrOy8sYWo9LzwoPzpzY3JpcHR8c3R5bGV8bGluaykvaSxhcD0vPCg/OnNjcmlwdHxvYmplY3R8ZW1iZWR8b3B0aW9ufHN0eWxlKS9pLEs9bmV3IFJlZ0V4cCgiPCg/OiIrYysiKVtcXHMvPl0iLCJpIiksYUU9L14oPzpjaGVja2JveHxyYWRpbykkLyxiUj0vY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSxidz0vXC8oamF2YXxlY21hKXNjcmlwdC9pLGFIPS9eXHMqPCEoPzpcW0NEQVRBXFt8XC1cLSl8W1xdXC1dezJ9PlxzKiQvZyxUPXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSxsZWdlbmQ6WzEsIjxmaWVsZHNldD4iLCI8L2ZpZWxkc2V0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sdGQ6WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjx0Ym9keT48L3Rib2R5Pjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sYXJlYTpbMSwiPG1hcD4iLCI8L21hcD4iXSxfZGVmYXVsdDpbMCwiIiwiIl19LGFRPUIobyksbD1hUS5hcHBlbmRDaGlsZChvLmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtULm9wdGdyb3VwPVQub3B0aW9uO1QudGJvZHk9VC50Zm9vdD1ULmNvbGdyb3VwPVQuY2FwdGlvbj1ULnRoZWFkO1QudGg9VC50ZDtpZighYkcuc3VwcG9ydC5odG1sU2VyaWFsaXplKXtULl9kZWZhdWx0PVsxLCJYPGRpdj4iLCI8L2Rpdj4iXX1iRy5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGJHLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGJaKXtyZXR1cm4gYlo9PT1hQj9iRy50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJEb2N1bWVudHx8bykuY3JlYXRlVGV4dE5vZGUoYlopKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSx3cmFwQWxsOmZ1bmN0aW9uKGUpe2lmKGJHLmlzRnVuY3Rpb24oZSkpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYjApe2JHKHRoaXMpLndyYXBBbGwoZS5jYWxsKHRoaXMsYjApKX0pfWlmKHRoaXNbMF0pe3ZhciBiWj1iRyhlLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUodHJ1ZSk7aWYodGhpc1swXS5wYXJlbnROb2RlKXtiWi5pbnNlcnRCZWZvcmUodGhpc1swXSl9YloubWFwKGZ1bmN0aW9uKCl7dmFyIGIwPXRoaXM7d2hpbGUoYjAuZmlyc3RDaGlsZCYmYjAuZmlyc3RDaGlsZC5ub2RlVHlwZT09PTEpe2IwPWIwLmZpcnN0Q2hpbGR9cmV0dXJuIGIwfSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oZSl7aWYoYkcuaXNGdW5jdGlvbihlKSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiWil7YkcodGhpcykud3JhcElubmVyKGUuY2FsbCh0aGlzLGJaKSl9KX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGJaPWJHKHRoaXMpLGIwPWJaLmNvbnRlbnRzKCk7aWYoYjAubGVuZ3RoKXtiMC53cmFwQWxsKGUpfWVsc2V7YlouYXBwZW5kKGUpfX0pfSx3cmFwOmZ1bmN0aW9uKGUpe3ZhciBiWj1iRy5pc0Z1bmN0aW9uKGUpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYjApe2JHKHRoaXMpLndyYXBBbGwoYlo/ZS5jYWxsKHRoaXMsYjApOmUpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXtpZighYkcubm9kZU5hbWUodGhpcywiYm9keSIpKXtiRyh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfX0pLmVuZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsdHJ1ZSxmdW5jdGlvbihlKXtpZih0aGlzLm5vZGVUeXBlPT09MXx8dGhpcy5ub2RlVHlwZT09PTExKXt0aGlzLmFwcGVuZENoaWxkKGUpfX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLHRydWUsZnVuY3Rpb24oZSl7aWYodGhpcy5ub2RlVHlwZT09PTF8fHRoaXMubm9kZVR5cGU9PT0xMSl7dGhpcy5pbnNlcnRCZWZvcmUoZSx0aGlzLmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtpZighYVIodGhpc1swXSkpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmYWxzZSxmdW5jdGlvbihiWil7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShiWix0aGlzKX0pfWlmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBlPWJHLmNsZWFuKGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGJHLm1lcmdlKGUsdGhpcyksImJlZm9yZSIsdGhpcy5zZWxlY3Rvcil9fSxhZnRlcjpmdW5jdGlvbigpe2lmKCFhUih0aGlzWzBdKSl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZhbHNlLGZ1bmN0aW9uKGJaKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGJaLHRoaXMubmV4dFNpYmxpbmcpfSl9aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGU9YkcuY2xlYW4oYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYkcubWVyZ2UodGhpcyxlKSwiYWZ0ZXIiLHRoaXMuc2VsZWN0b3IpfX0scmVtb3ZlOmZ1bmN0aW9uKGUsYjEpe3ZhciBiMCxiWj0wO2Zvcig7KGIwPXRoaXNbYlpdKSE9bnVsbDtiWisrKXtpZighZXx8YkcuZmlsdGVyKGUsW2IwXSkubGVuZ3RoKXtpZighYjEmJmIwLm5vZGVUeXBlPT09MSl7YkcuY2xlYW5EYXRhKGIwLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpO2JHLmNsZWFuRGF0YShbYjBdKX1pZihiMC5wYXJlbnROb2RlKXtiMC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIwKX19fXJldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe3ZhciBiWixlPTA7Zm9yKDsoYlo9dGhpc1tlXSkhPW51bGw7ZSsrKXtpZihiWi5ub2RlVHlwZT09PTEpe2JHLmNsZWFuRGF0YShiWi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKX13aGlsZShiWi5maXJzdENoaWxkKXtiWi5yZW1vdmVDaGlsZChiWi5maXJzdENoaWxkKX19cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGJaLGUpe2JaPWJaPT1udWxsP2ZhbHNlOmJaO2U9ZT09bnVsbD9iWjplO3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBiRy5jbG9uZSh0aGlzLGJaLGUpfSl9LGh0bWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGJHLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGIyKXt2YXIgYjE9dGhpc1swXXx8e30sYjA9MCxiWj10aGlzLmxlbmd0aDtpZihiMj09PWFCKXtyZXR1cm4gYjEubm9kZVR5cGU9PT0xP2IxLmlubmVySFRNTC5yZXBsYWNlKGF2LCIiKTphQn1pZih0eXBlb2YgYjI9PT0ic3RyaW5nIiYmIWFqLnRlc3QoYjIpJiYoYkcuc3VwcG9ydC5odG1sU2VyaWFsaXplfHwhSy50ZXN0KGIyKSkmJihiRy5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlfHwhYlkudGVzdChiMikpJiYhVFsocC5leGVjKGIyKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2IyPWIyLnJlcGxhY2UoYXksIjwkMT48LyQyPiIpO3RyeXtmb3IoO2IwPGJaO2IwKyspe2IxPXRoaXNbYjBdfHx7fTtpZihiMS5ub2RlVHlwZT09PTEpe2JHLmNsZWFuRGF0YShiMS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKTtiMS5pbm5lckhUTUw9YjJ9fWIxPTB9Y2F0Y2goYjMpe319aWYoYjEpe3RoaXMuZW1wdHkoKS5hcHBlbmQoYjIpfX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbihlKXtpZighYVIodGhpc1swXSkpe2lmKGJHLmlzRnVuY3Rpb24oZSkpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYjEpe3ZhciBiMD1iRyh0aGlzKSxiWj1iMC5odG1sKCk7YjAucmVwbGFjZVdpdGgoZS5jYWxsKHRoaXMsYjEsYlopKX0pfWlmKHR5cGVvZiBlIT09InN0cmluZyIpe2U9YkcoZSkuZGV0YWNoKCl9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiMD10aGlzLm5leHRTaWJsaW5nLGJaPXRoaXMucGFyZW50Tm9kZTtiRyh0aGlzKS5yZW1vdmUoKTtpZihiMCl7YkcoYjApLmJlZm9yZShlKX1lbHNle2JHKGJaKS5hcHBlbmQoZSl9fSl9cmV0dXJuIHRoaXMubGVuZ3RoP3RoaXMucHVzaFN0YWNrKGJHKGJHLmlzRnVuY3Rpb24oZSk/ZSgpOmUpLCJyZXBsYWNlV2l0aCIsZSk6dGhpc30sZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlbW92ZShlLHRydWUpfSxkb21NYW5pcDpmdW5jdGlvbihiNCxiOCxiNyl7YjQ9W10uY29uY2F0LmFwcGx5KFtdLGI0KTt2YXIgYjAsYjIsYjMsYjYsYjE9MCxiNT1iNFswXSxiWj1bXSxlPXRoaXMubGVuZ3RoO2lmKCFiRy5zdXBwb3J0LmNoZWNrQ2xvbmUmJmU+MSYmdHlwZW9mIGI1PT09InN0cmluZyImJmJSLnRlc3QoYjUpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7YkcodGhpcykuZG9tTWFuaXAoYjQsYjgsYjcpfSl9aWYoYkcuaXNGdW5jdGlvbihiNSkpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oY2Epe3ZhciBiOT1iRyh0aGlzKTtiNFswXT1iNS5jYWxsKHRoaXMsY2EsYjg/YjkuaHRtbCgpOmFCKTtiOS5kb21NYW5pcChiNCxiOCxiNyl9KX1pZih0aGlzWzBdKXtiMD1iRy5idWlsZEZyYWdtZW50KGI0LHRoaXMsYlopO2IzPWIwLmZyYWdtZW50O2IyPWIzLmZpcnN0Q2hpbGQ7aWYoYjMuY2hpbGROb2Rlcy5sZW5ndGg9PT0xKXtiMz1iMn1pZihiMil7Yjg9YjgmJmJHLm5vZGVOYW1lKGIyLCJ0ciIpO2ZvcihiNj1iMC5jYWNoZWFibGV8fGUtMTtiMTxlO2IxKyspe2I3LmNhbGwoYjgmJmJHLm5vZGVOYW1lKHRoaXNbYjFdLCJ0YWJsZSIpP3kodGhpc1tiMV0sInRib2R5Iik6dGhpc1tiMV0sYjE9PT1iNj9iMzpiRy5jbG9uZShiMyx0cnVlLHRydWUpKX19YjM9YjI9bnVsbDtpZihiWi5sZW5ndGgpe2JHLmVhY2goYlosZnVuY3Rpb24oYjksY2Epe2lmKGNhLnNyYyl7aWYoYkcuYWpheCl7YkcuYWpheCh7dXJsOmNhLnNyYyx0eXBlOiJHRVQiLGRhdGFUeXBlOiJzY3JpcHQiLGFzeW5jOmZhbHNlLGdsb2JhbDpmYWxzZSwidGhyb3dzIjp0cnVlfSl9ZWxzZXtiRy5lcnJvcigibm8gYWpheCIpfX1lbHNle2JHLmdsb2JhbEV2YWwoKGNhLnRleHR8fGNhLnRleHRDb250ZW50fHxjYS5pbm5lckhUTUx8fCIiKS5yZXBsYWNlKGFILCIiKSl9aWYoY2EucGFyZW50Tm9kZSl7Y2EucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjYSl9fSl9fXJldHVybiB0aGlzfX0pO2Z1bmN0aW9uIHkoYlosZSl7cmV0dXJuIGJaLmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpWzBdfHxiWi5hcHBlbmRDaGlsZChiWi5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSkpfWZ1bmN0aW9uIGFvKGI1LGJaKXtpZihiWi5ub2RlVHlwZSE9PTF8fCFiRy5oYXNEYXRhKGI1KSl7cmV0dXJufXZhciBiMixiMSxlLGI0PWJHLl9kYXRhKGI1KSxiMz1iRy5fZGF0YShiWixiNCksYjA9YjQuZXZlbnRzO2lmKGIwKXtkZWxldGUgYjMuaGFuZGxlO2IzLmV2ZW50cz17fTtmb3IoYjIgaW4gYjApe2ZvcihiMT0wLGU9YjBbYjJdLmxlbmd0aDtiMTxlO2IxKyspe2JHLmV2ZW50LmFkZChiWixiMixiMFtiMl1bYjFdKX19fWlmKGIzLmRhdGEpe2IzLmRhdGE9YkcuZXh0ZW5kKHt9LGIzLmRhdGEpfX1mdW5jdGlvbiBHKGJaLGUpe3ZhciBiMDtpZihlLm5vZGVUeXBlIT09MSl7cmV0dXJufWlmKGUuY2xlYXJBdHRyaWJ1dGVzKXtlLmNsZWFyQXR0cmlidXRlcygpfWlmKGUubWVyZ2VBdHRyaWJ1dGVzKXtlLm1lcmdlQXR0cmlidXRlcyhiWil9YjA9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKGIwPT09Im9iamVjdCIpe2lmKGUucGFyZW50Tm9kZSl7ZS5vdXRlckhUTUw9Yloub3V0ZXJIVE1MfWlmKGJHLnN1cHBvcnQuaHRtbDVDbG9uZSYmKGJaLmlubmVySFRNTCYmIWJHLnRyaW0oZS5pbm5lckhUTUwpKSl7ZS5pbm5lckhUTUw9YlouaW5uZXJIVE1MfX1lbHNle2lmKGIwPT09ImlucHV0IiYmYUUudGVzdChiWi50eXBlKSl7ZS5kZWZhdWx0Q2hlY2tlZD1lLmNoZWNrZWQ9YlouY2hlY2tlZDtpZihlLnZhbHVlIT09YloudmFsdWUpe2UudmFsdWU9YloudmFsdWV9fWVsc2V7aWYoYjA9PT0ib3B0aW9uIil7ZS5zZWxlY3RlZD1iWi5kZWZhdWx0U2VsZWN0ZWR9ZWxzZXtpZihiMD09PSJpbnB1dCJ8fGIwPT09InRleHRhcmVhIil7ZS5kZWZhdWx0VmFsdWU9YlouZGVmYXVsdFZhbHVlfWVsc2V7aWYoYjA9PT0ic2NyaXB0IiYmZS50ZXh0IT09YloudGV4dCl7ZS50ZXh0PWJaLnRleHR9fX19fWUucmVtb3ZlQXR0cmlidXRlKGJHLmV4cGFuZG8pfWJHLmJ1aWxkRnJhZ21lbnQ9ZnVuY3Rpb24oYjEsYjIsYlope3ZhciBiMCxlLGIzLGI0PWIxWzBdO2IyPWIyfHxvO2IyPShiMlswXXx8YjIpLm93bmVyRG9jdW1lbnR8fGIyWzBdfHxiMjtpZih0eXBlb2YgYjIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudD09PSJ1bmRlZmluZWQiKXtiMj1vfWlmKGIxLmxlbmd0aD09PTEmJnR5cGVvZiBiND09PSJzdHJpbmciJiZiNC5sZW5ndGg8NTEyJiZiMj09PW8mJmI0LmNoYXJBdCgwKT09PSI8IiYmIWFwLnRlc3QoYjQpJiYoYkcuc3VwcG9ydC5jaGVja0Nsb25lfHwhYlIudGVzdChiNCkpJiYoYkcuc3VwcG9ydC5odG1sNUNsb25lfHwhSy50ZXN0KGI0KSkpe2U9dHJ1ZTtiMD1iRy5mcmFnbWVudHNbYjRdO2IzPWIwIT09YUJ9aWYoIWIwKXtiMD1iMi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7YkcuY2xlYW4oYjEsYjIsYjAsYlopO2lmKGUpe2JHLmZyYWdtZW50c1tiNF09YjMmJmIwfX1yZXR1cm57ZnJhZ21lbnQ6YjAsY2FjaGVhYmxlOmV9fTtiRy5mcmFnbWVudHM9e307YkcuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGUsYlope2JHLmZuW2VdPWZ1bmN0aW9uKGIwKXt2YXIgYjIsYjQ9MCxiMz1bXSxiNj1iRyhiMCksYjE9YjYubGVuZ3RoLGI1PXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO2lmKChiNT09bnVsbHx8YjUmJmI1Lm5vZGVUeXBlPT09MTEmJmI1LmNoaWxkTm9kZXMubGVuZ3RoPT09MSkmJmIxPT09MSl7YjZbYlpdKHRoaXNbMF0pO3JldHVybiB0aGlzfWVsc2V7Zm9yKDtiNDxiMTtiNCsrKXtiMj0oYjQ+MD90aGlzLmNsb25lKHRydWUpOnRoaXMpLmdldCgpO2JHKGI2W2I0XSlbYlpdKGIyKTtiMz1iMy5jb25jYXQoYjIpfXJldHVybiB0aGlzLnB1c2hTdGFjayhiMyxlLGI2LnNlbGVjdG9yKX19fSk7ZnVuY3Rpb24gbShlKXtpZih0eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PSJ1bmRlZmluZWQiKXtyZXR1cm4gZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpfWVsc2V7aWYodHlwZW9mIGUucXVlcnlTZWxlY3RvckFsbCE9PSJ1bmRlZmluZWQiKXtyZXR1cm4gZS5xdWVyeVNlbGVjdG9yQWxsKCIqIil9ZWxzZXtyZXR1cm5bXX19fWZ1bmN0aW9uIGJTKGUpe2lmKGFFLnRlc3QoZS50eXBlKSl7ZS5kZWZhdWx0Q2hlY2tlZD1lLmNoZWNrZWR9fWJHLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYjIsYjQsYjApe3ZhciBlLGJaLGIxLGIzO2lmKGJHLnN1cHBvcnQuaHRtbDVDbG9uZXx8YkcuaXNYTUxEb2MoYjIpfHwhSy50ZXN0KCI8IitiMi5ub2RlTmFtZSsiPiIpKXtiMz1iMi5jbG9uZU5vZGUodHJ1ZSl9ZWxzZXtsLmlubmVySFRNTD1iMi5vdXRlckhUTUw7bC5yZW1vdmVDaGlsZChiMz1sLmZpcnN0Q2hpbGQpfWlmKCghYkcuc3VwcG9ydC5ub0Nsb25lRXZlbnR8fCFiRy5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSYmKGIyLm5vZGVUeXBlPT09MXx8YjIubm9kZVR5cGU9PT0xMSkmJiFiRy5pc1hNTERvYyhiMikpe0coYjIsYjMpO2U9bShiMik7Ylo9bShiMyk7Zm9yKGIxPTA7ZVtiMV07KytiMSl7aWYoYlpbYjFdKXtHKGVbYjFdLGJaW2IxXSl9fX1pZihiNCl7YW8oYjIsYjMpO2lmKGIwKXtlPW0oYjIpO2JaPW0oYjMpO2ZvcihiMT0wO2VbYjFdOysrYjEpe2FvKGVbYjFdLGJaW2IxXSl9fX1lPWJaPW51bGw7cmV0dXJuIGIzfSxjbGVhbjpmdW5jdGlvbihjYixiMCxlLGIxKXt2YXIgYjcsYjMsY2EsY2YsYjQsY2UsYjUsYjIsYlosYjksY2QsYjYsYjg9MCxjYz1bXTtpZighYjB8fHR5cGVvZiBiMC5jcmVhdGVEb2N1bWVudEZyYWdtZW50PT09InVuZGVmaW5lZCIpe2IwPW99Zm9yKGIzPWIwPT09byYmYVE7KGNhPWNiW2I4XSkhPW51bGw7YjgrKyl7aWYodHlwZW9mIGNhPT09Im51bWJlciIpe2NhKz0iIn1pZighY2Epe2NvbnRpbnVlfWlmKHR5cGVvZiBjYT09PSJzdHJpbmciKXtpZighSi50ZXN0KGNhKSl7Y2E9YjAuY3JlYXRlVGV4dE5vZGUoY2EpfWVsc2V7YjM9YjN8fEIoYjApO2I1PWI1fHxiMy5hcHBlbmRDaGlsZChiMC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7Y2E9Y2EucmVwbGFjZShheSwiPCQxPjwvJDI+Iik7Y2Y9KHAuZXhlYyhjYSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCk7YjQ9VFtjZl18fFQuX2RlZmF1bHQ7Y2U9YjRbMF07YjUuaW5uZXJIVE1MPWI0WzFdK2NhK2I0WzJdO3doaWxlKGNlLS0pe2I1PWI1Lmxhc3RDaGlsZH1pZighYkcuc3VwcG9ydC50Ym9keSl7YjI9YlQudGVzdChjYSk7Ylo9Y2Y9PT0idGFibGUiJiYhYjI/YjUuZmlyc3RDaGlsZCYmYjUuZmlyc3RDaGlsZC5jaGlsZE5vZGVzOmI0WzFdPT09Ijx0YWJsZT4iJiYhYjI/YjUuY2hpbGROb2RlczpbXTtmb3IoYjc9YloubGVuZ3RoLTE7Yjc+PTA7LS1iNyl7aWYoYkcubm9kZU5hbWUoYlpbYjddLCJ0Ym9keSIpJiYhYlpbYjddLmNoaWxkTm9kZXMubGVuZ3RoKXtiWltiN10ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiWltiN10pfX19aWYoIWJHLnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UmJmJZLnRlc3QoY2EpKXtiNS5pbnNlcnRCZWZvcmUoYjAuY3JlYXRlVGV4dE5vZGUoYlkuZXhlYyhjYSlbMF0pLGI1LmZpcnN0Q2hpbGQpfWNhPWI1LmNoaWxkTm9kZXM7YjU9YjMubGFzdENoaWxkfX1pZihjYS5ub2RlVHlwZSl7Y2MucHVzaChjYSl9ZWxzZXtjYz1iRy5tZXJnZShjYyxjYSl9fWlmKGI1KXtiMy5yZW1vdmVDaGlsZChiNSk7Y2E9YjU9YjM9bnVsbH1pZighYkcuc3VwcG9ydC5hcHBlbmRDaGVja2VkKXtmb3IoYjg9MDsoY2E9Y2NbYjhdKSE9bnVsbDtiOCsrKXtpZihiRy5ub2RlTmFtZShjYSwiaW5wdXQiKSl7YlMoY2EpfWVsc2V7aWYodHlwZW9mIGNhLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09InVuZGVmaW5lZCIpe2JHLmdyZXAoY2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IiksYlMpfX19fWlmKGUpe2NkPWZ1bmN0aW9uKGNnKXtpZighY2cudHlwZXx8YncudGVzdChjZy50eXBlKSl7cmV0dXJuIGIxP2IxLnB1c2goY2cucGFyZW50Tm9kZT9jZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNnKTpjZyk6ZS5hcHBlbmRDaGlsZChjZyl9fTtmb3IoYjg9MDsoY2E9Y2NbYjhdKSE9bnVsbDtiOCsrKXtpZighKGJHLm5vZGVOYW1lKGNhLCJzY3JpcHQiKSYmY2QoY2EpKSl7ZS5hcHBlbmRDaGlsZChjYSk7aWYodHlwZW9mIGNhLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09InVuZGVmaW5lZCIpe2I2PWJHLmdyZXAoYkcubWVyZ2UoW10sY2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpKSxjZCk7Y2Muc3BsaWNlLmFwcGx5KGNjLFtiOCsxLDBdLmNvbmNhdChiNikpO2I4Kz1iNi5sZW5ndGh9fX19cmV0dXJuIGNjfSxjbGVhbkRhdGE6ZnVuY3Rpb24oYlosYjcpe3ZhciBiMixiMCxiMSxiNixiMz0wLGI4PWJHLmV4cGFuZG8sZT1iRy5jYWNoZSxiND1iRy5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8sYjU9YkcuZXZlbnQuc3BlY2lhbDtmb3IoOyhiMT1iWltiM10pIT1udWxsO2IzKyspe2lmKGI3fHxiRy5hY2NlcHREYXRhKGIxKSl7YjA9YjFbYjhdO2IyPWIwJiZlW2IwXTtpZihiMil7aWYoYjIuZXZlbnRzKXtmb3IoYjYgaW4gYjIuZXZlbnRzKXtpZihiNVtiNl0pe2JHLmV2ZW50LnJlbW92ZShiMSxiNil9ZWxzZXtiRy5yZW1vdmVFdmVudChiMSxiNixiMi5oYW5kbGUpfX19aWYoZVtiMF0pe2RlbGV0ZSBlW2IwXTtpZihiNCl7ZGVsZXRlIGIxW2I4XX1lbHNle2lmKGIxLnJlbW92ZUF0dHJpYnV0ZSl7YjEucmVtb3ZlQXR0cmlidXRlKGI4KX1lbHNle2IxW2I4XT1udWxsfX1iRy5kZWxldGVkSWRzLnB1c2goYjApfX19fX19KTsoZnVuY3Rpb24oKXt2YXIgZSxiWjtiRy51YU1hdGNoPWZ1bmN0aW9uKGIxKXtiMT1iMS50b0xvd2VyQ2FzZSgpO3ZhciBiMD0vKGNocm9tZSlbIFwvXShbXHcuXSspLy5leGVjKGIxKXx8Lyh3ZWJraXQpWyBcL10oW1x3Ll0rKS8uZXhlYyhiMSl8fC8ob3BlcmEpKD86Lip2ZXJzaW9ufClbIFwvXShbXHcuXSspLy5leGVjKGIxKXx8Lyhtc2llKSAoW1x3Ll0rKS8uZXhlYyhiMSl8fGIxLmluZGV4T2YoImNvbXBhdGlibGUiKTwwJiYvKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSspfCkvLmV4ZWMoYjEpfHxbXTtyZXR1cm57YnJvd3NlcjpiMFsxXXx8IiIsdmVyc2lvbjpiMFsyXXx8IjAifX07ZT1iRy51YU1hdGNoKGQudXNlckFnZW50KTtiWj17fTtpZihlLmJyb3dzZXIpe2JaW2UuYnJvd3Nlcl09dHJ1ZTtiWi52ZXJzaW9uPWUudmVyc2lvbn1pZihiWi53ZWJraXQpe2JaLnNhZmFyaT10cnVlfWJHLmJyb3dzZXI9Ylo7Ykcuc3ViPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYjAoYjMsYjQpe3JldHVybiBuZXcgYjAuZm4uaW5pdChiMyxiNCl9YkcuZXh0ZW5kKHRydWUsYjAsdGhpcyk7YjAuc3VwZXJjbGFzcz10aGlzO2IwLmZuPWIwLnByb3RvdHlwZT10aGlzKCk7YjAuZm4uY29uc3RydWN0b3I9YjA7YjAuc3ViPXRoaXMuc3ViO2IwLmZuLmluaXQ9ZnVuY3Rpb24gYjIoYjMsYjQpe2lmKGI0JiZiNCBpbnN0YW5jZW9mIGJHJiYhKGI0IGluc3RhbmNlb2YgYjApKXtiND1iMChiNCl9cmV0dXJuIGJHLmZuLmluaXQuY2FsbCh0aGlzLGIzLGI0LGIxKX07YjAuZm4uaW5pdC5wcm90b3R5cGU9YjAuZm47dmFyIGIxPWIwKG8pO3JldHVybiBiMH19KSgpO3ZhciBGLGF6LGFXLGJlPS9hbHBoYVwoW14pXSpcKS9pLGFTPS9vcGFjaXR5PShbXildKikvLGJrPS9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkLyxhWj0vXm1hcmdpbi8sYTg9bmV3IFJlZ0V4cCgiXigiK2J4KyIpKC4qKSQiLCJpIiksVz1uZXcgUmVnRXhwKCJeKCIrYngrIikoPyFweClbYS16JV0rJCIsImkiKSxTPW5ldyBSZWdFeHAoIl4oWy0rXSk9KCIrYngrIikiLCJpIiksYmg9e30sYTk9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LGJBPXtsZXR0ZXJTcGFjaW5nOjAsZm9udFdlaWdodDo0MDAsbGluZUhlaWdodDoxfSxiUT1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLGFyPVsiV2Via2l0IiwiTyIsIk1veiIsIm1zIl0sYUo9YkcuZm4udG9nZ2xlO2Z1bmN0aW9uIGIoYjEsYlope2lmKGJaIGluIGIxKXtyZXR1cm4gYlp9dmFyIGIyPWJaLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2JaLnNsaWNlKDEpLGU9YlosYjA9YXIubGVuZ3RoO3doaWxlKGIwLS0pe2JaPWFyW2IwXStiMjtpZihiWiBpbiBiMSl7cmV0dXJuIGJafX1yZXR1cm4gZX1mdW5jdGlvbiBRKGJaLGUpe2JaPWV8fGJaO3JldHVybiBiRy5jc3MoYlosImRpc3BsYXkiKT09PSJub25lInx8IWJHLmNvbnRhaW5zKGJaLm93bmVyRG9jdW1lbnQsYlopfWZ1bmN0aW9uIHQoYjMsZSl7dmFyIGIyLGI0LGJaPVtdLGIwPTAsYjE9YjMubGVuZ3RoO2Zvcig7YjA8YjE7YjArKyl7YjI9YjNbYjBdO2lmKCFiMi5zdHlsZSl7Y29udGludWV9YlpbYjBdPWJHLl9kYXRhKGIyLCJvbGRkaXNwbGF5Iik7aWYoZSl7aWYoIWJaW2IwXSYmYjIuc3R5bGUuZGlzcGxheT09PSJub25lIil7YjIuc3R5bGUuZGlzcGxheT0iIn1pZihiMi5zdHlsZS5kaXNwbGF5PT09IiImJlEoYjIpKXtiWltiMF09YkcuX2RhdGEoYjIsIm9sZGRpc3BsYXkiLGJDKGIyLm5vZGVOYW1lKSl9fWVsc2V7YjQ9RihiMiwiZGlzcGxheSIpO2lmKCFiWltiMF0mJmI0IT09Im5vbmUiKXtiRy5fZGF0YShiMiwib2xkZGlzcGxheSIsYjQpfX19Zm9yKGIwPTA7YjA8YjE7YjArKyl7YjI9YjNbYjBdO2lmKCFiMi5zdHlsZSl7Y29udGludWV9aWYoIWV8fGIyLnN0eWxlLmRpc3BsYXk9PT0ibm9uZSJ8fGIyLnN0eWxlLmRpc3BsYXk9PT0iIil7YjIuc3R5bGUuZGlzcGxheT1lP2JaW2IwXXx8IiI6Im5vbmUifX1yZXR1cm4gYjN9YkcuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSxiWil7cmV0dXJuIGJHLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGIxLGIwLGIyKXtyZXR1cm4gYjIhPT1hQj9iRy5zdHlsZShiMSxiMCxiMik6YkcuY3NzKGIxLGIwKX0sZSxiWixhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyx0cnVlKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiB0KHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oYjAsYlope3ZhciBlPXR5cGVvZiBiMD09PSJib29sZWFuIjtpZihiRy5pc0Z1bmN0aW9uKGIwKSYmYkcuaXNGdW5jdGlvbihiWikpe3JldHVybiBhSi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2lmKGU/YjA6USh0aGlzKSl7YkcodGhpcykuc2hvdygpfWVsc2V7YkcodGhpcykuaGlkZSgpfX0pfX0pO2JHLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihiMCxiWil7aWYoYlope3ZhciBlPUYoYjAsIm9wYWNpdHkiKTtyZXR1cm4gZT09PSIiPyIxIjplfX19fSxjc3NOdW1iZXI6e2ZpbGxPcGFjaXR5OnRydWUsZm9udFdlaWdodDp0cnVlLGxpbmVIZWlnaHQ6dHJ1ZSxvcGFjaXR5OnRydWUsb3JwaGFuczp0cnVlLHdpZG93czp0cnVlLHpJbmRleDp0cnVlLHpvb206dHJ1ZX0sY3NzUHJvcHM6eyJmbG9hdCI6Ykcuc3VwcG9ydC5jc3NGbG9hdD8iY3NzRmxvYXQiOiJzdHlsZUZsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYjEsYjAsYjcsYjIpe2lmKCFiMXx8YjEubm9kZVR5cGU9PT0zfHxiMS5ub2RlVHlwZT09PTh8fCFiMS5zdHlsZSl7cmV0dXJufXZhciBiNSxiNixiOCxiMz1iRy5jYW1lbENhc2UoYjApLGJaPWIxLnN0eWxlO2IwPWJHLmNzc1Byb3BzW2IzXXx8KGJHLmNzc1Byb3BzW2IzXT1iKGJaLGIzKSk7Yjg9YkcuY3NzSG9va3NbYjBdfHxiRy5jc3NIb29rc1tiM107aWYoYjchPT1hQil7YjY9dHlwZW9mIGI3O2lmKGI2PT09InN0cmluZyImJihiNT1TLmV4ZWMoYjcpKSl7Yjc9KGI1WzFdKzEpKmI1WzJdK3BhcnNlRmxvYXQoYkcuY3NzKGIxLGIwKSk7YjY9Im51bWJlciJ9aWYoYjc9PW51bGx8fGI2PT09Im51bWJlciImJmlzTmFOKGI3KSl7cmV0dXJufWlmKGI2PT09Im51bWJlciImJiFiRy5jc3NOdW1iZXJbYjNdKXtiNys9InB4In1pZighYjh8fCEoInNldCIgaW4gYjgpfHwoYjc9Yjguc2V0KGIxLGI3LGIyKSkhPT1hQil7dHJ5e2JaW2IwXT1iN31jYXRjaChiNCl7fX19ZWxzZXtpZihiOCYmImdldCIgaW4gYjgmJihiNT1iOC5nZXQoYjEsZmFsc2UsYjIpKSE9PWFCKXtyZXR1cm4gYjV9cmV0dXJuIGJaW2IwXX19LGNzczpmdW5jdGlvbihiNCxiMixiMyxiWil7dmFyIGI1LGIxLGUsYjA9YkcuY2FtZWxDYXNlKGIyKTtiMj1iRy5jc3NQcm9wc1tiMF18fChiRy5jc3NQcm9wc1tiMF09YihiNC5zdHlsZSxiMCkpO2U9YkcuY3NzSG9va3NbYjJdfHxiRy5jc3NIb29rc1tiMF07aWYoZSYmImdldCIgaW4gZSl7YjU9ZS5nZXQoYjQsdHJ1ZSxiWil9aWYoYjU9PT1hQil7YjU9RihiNCxiMil9aWYoYjU9PT0ibm9ybWFsIiYmYjIgaW4gYkEpe2I1PWJBW2IyXX1pZihiM3x8YlohPT1hQil7YjE9cGFyc2VGbG9hdChiNSk7cmV0dXJuIGIzfHxiRy5pc051bWVyaWMoYjEpP2IxfHwwOmI1fXJldHVybiBiNX0sc3dhcDpmdW5jdGlvbihiMixiMSxiMyl7dmFyIGIwLGJaLGU9e307Zm9yKGJaIGluIGIxKXtlW2JaXT1iMi5zdHlsZVtiWl07YjIuc3R5bGVbYlpdPWIxW2JaXX1iMD1iMy5jYWxsKGIyKTtmb3IoYlogaW4gYjEpe2IyLnN0eWxlW2JaXT1lW2JaXX1yZXR1cm4gYjB9fSk7aWYoYTIuZ2V0Q29tcHV0ZWRTdHlsZSl7Rj1mdW5jdGlvbihiNSxiWil7dmFyIGUsYjIsYjEsYjQsYjM9Z2V0Q29tcHV0ZWRTdHlsZShiNSxudWxsKSxiMD1iNS5zdHlsZTtpZihiMyl7ZT1iM1tiWl07aWYoZT09PSIiJiYhYkcuY29udGFpbnMoYjUub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYjUpKXtlPWJHLnN0eWxlKGI1LGJaKX1pZihXLnRlc3QoZSkmJmFaLnRlc3QoYlopKXtiMj1iMC53aWR0aDtiMT1iMC5taW5XaWR0aDtiND1iMC5tYXhXaWR0aDtiMC5taW5XaWR0aD1iMC5tYXhXaWR0aD1iMC53aWR0aD1lO2U9YjMud2lkdGg7YjAud2lkdGg9YjI7YjAubWluV2lkdGg9YjE7YjAubWF4V2lkdGg9YjR9fXJldHVybiBlfX1lbHNle2lmKG8uZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSl7Rj1mdW5jdGlvbihiMixiMCl7dmFyIGIzLGUsYlo9YjIuY3VycmVudFN0eWxlJiZiMi5jdXJyZW50U3R5bGVbYjBdLGIxPWIyLnN0eWxlO2lmKGJaPT1udWxsJiZiMSYmYjFbYjBdKXtiWj1iMVtiMF19aWYoVy50ZXN0KGJaKSYmIWJrLnRlc3QoYjApKXtiMz1iMS5sZWZ0O2U9YjIucnVudGltZVN0eWxlJiZiMi5ydW50aW1lU3R5bGUubGVmdDtpZihlKXtiMi5ydW50aW1lU3R5bGUubGVmdD1iMi5jdXJyZW50U3R5bGUubGVmdH1iMS5sZWZ0PWIwPT09ImZvbnRTaXplIj8iMWVtIjpiWjtiWj1iMS5waXhlbExlZnQrInB4IjtiMS5sZWZ0PWIzO2lmKGUpe2IyLnJ1bnRpbWVTdHlsZS5sZWZ0PWV9fXJldHVybiBiWj09PSIiPyJhdXRvIjpiWn19fWZ1bmN0aW9uIGFHKGUsYjAsYjEpe3ZhciBiWj1hOC5leGVjKGIwKTtyZXR1cm4gYlo/TWF0aC5tYXgoMCxiWlsxXS0oYjF8fDApKSsoYlpbMl18fCJweCIpOmIwfWZ1bmN0aW9uIGF0KGIxLGJaLGUsYjMpe3ZhciBiMD1lPT09KGIzPyJib3JkZXIiOiJjb250ZW50Iik/NDpiWj09PSJ3aWR0aCI/MTowLGIyPTA7Zm9yKDtiMDw0O2IwKz0yKXtpZihlPT09Im1hcmdpbiIpe2IyKz1iRy5jc3MoYjEsZStiUVtiMF0sdHJ1ZSl9aWYoYjMpe2lmKGU9PT0iY29udGVudCIpe2IyLT1wYXJzZUZsb2F0KEYoYjEsInBhZGRpbmciK2JRW2IwXSkpfHwwfWlmKGUhPT0ibWFyZ2luIil7YjItPXBhcnNlRmxvYXQoRihiMSwiYm9yZGVyIitiUVtiMF0rIldpZHRoIikpfHwwfX1lbHNle2IyKz1wYXJzZUZsb2F0KEYoYjEsInBhZGRpbmciK2JRW2IwXSkpfHwwO2lmKGUhPT0icGFkZGluZyIpe2IyKz1wYXJzZUZsb2F0KEYoYjEsImJvcmRlciIrYlFbYjBdKyJXaWR0aCIpKXx8MH19fXJldHVybiBiMn1mdW5jdGlvbiB2KGIxLGJaLGUpe3ZhciBiMj1iWj09PSJ3aWR0aCI/YjEub2Zmc2V0V2lkdGg6YjEub2Zmc2V0SGVpZ2h0LGIwPXRydWUsYjM9Ykcuc3VwcG9ydC5ib3hTaXppbmcmJmJHLmNzcyhiMSwiYm94U2l6aW5nIik9PT0iYm9yZGVyLWJveCI7aWYoYjI8PTApe2IyPUYoYjEsYlopO2lmKGIyPDB8fGIyPT1udWxsKXtiMj1iMS5zdHlsZVtiWl19aWYoVy50ZXN0KGIyKSl7cmV0dXJuIGIyfWIwPWIzJiYoYkcuc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZXx8YjI9PT1iMS5zdHlsZVtiWl0pO2IyPXBhcnNlRmxvYXQoYjIpfHwwfXJldHVybihiMithdChiMSxiWixlfHwoYjM/ImJvcmRlciI6ImNvbnRlbnQiKSxiMCkpKyJweCJ9ZnVuY3Rpb24gYkMoYjApe2lmKGJoW2IwXSl7cmV0dXJuIGJoW2IwXX12YXIgZT1iRygiPCIrYjArIj4iKS5hcHBlbmRUbyhvLmJvZHkpLGJaPWUuY3NzKCJkaXNwbGF5Iik7ZS5yZW1vdmUoKTtpZihiWj09PSJub25lInx8Ylo9PT0iIil7YXo9by5ib2R5LmFwcGVuZENoaWxkKGF6fHxiRy5leHRlbmQoby5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSx7ZnJhbWVCb3JkZXI6MCx3aWR0aDowLGhlaWdodDowfSkpO2lmKCFhV3x8IWF6LmNyZWF0ZUVsZW1lbnQpe2FXPShhei5jb250ZW50V2luZG93fHxhei5jb250ZW50RG9jdW1lbnQpLmRvY3VtZW50O2FXLndyaXRlKCI8IWRvY3R5cGUgaHRtbD48aHRtbD48Ym9keT4iKTthVy5jbG9zZSgpfWU9YVcuYm9keS5hcHBlbmRDaGlsZChhVy5jcmVhdGVFbGVtZW50KGIwKSk7Ylo9RihlLCJkaXNwbGF5Iik7by5ib2R5LnJlbW92ZUNoaWxkKGF6KX1iaFtiMF09Ylo7cmV0dXJuIGJafWJHLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGJaLGUpe2JHLmNzc0hvb2tzW2VdPXtnZXQ6ZnVuY3Rpb24oYjIsYjEsYjApe2lmKGIxKXtpZihiMi5vZmZzZXRXaWR0aCE9PTB8fEYoYjIsImRpc3BsYXkiKSE9PSJub25lIil7cmV0dXJuIHYoYjIsZSxiMCl9ZWxzZXtyZXR1cm4gYkcuc3dhcChiMixhOSxmdW5jdGlvbigpe3JldHVybiB2KGIyLGUsYjApfSl9fX0sc2V0OmZ1bmN0aW9uKGIxLGIyLGIwKXtyZXR1cm4gYUcoYjEsYjIsYjA/YXQoYjEsZSxiMCxiRy5zdXBwb3J0LmJveFNpemluZyYmYkcuY3NzKGIxLCJib3hTaXppbmciKT09PSJib3JkZXItYm94Iik6MCl9fX0pO2lmKCFiRy5zdXBwb3J0Lm9wYWNpdHkpe2JHLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihiWixlKXtyZXR1cm4gYVMudGVzdCgoZSYmYlouY3VycmVudFN0eWxlP2JaLmN1cnJlbnRTdHlsZS5maWx0ZXI6Ylouc3R5bGUuZmlsdGVyKXx8IiIpPygwLjAxKnBhcnNlRmxvYXQoUmVnRXhwLiQxKSkrIiI6ZT8iMSI6IiJ9LHNldDpmdW5jdGlvbihiMixiMyl7dmFyIGIxPWIyLnN0eWxlLGJaPWIyLmN1cnJlbnRTdHlsZSxlPWJHLmlzTnVtZXJpYyhiMyk/ImFscGhhKG9wYWNpdHk9IitiMyoxMDArIikiOiIiLGIwPWJaJiZiWi5maWx0ZXJ8fGIxLmZpbHRlcnx8IiI7YjEuem9vbT0xO2lmKGIzPj0xJiZiRy50cmltKGIwLnJlcGxhY2UoYmUsIiIpKT09PSIiJiZiMS5yZW1vdmVBdHRyaWJ1dGUpe2IxLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIik7aWYoYlomJiFiWi5maWx0ZXIpe3JldHVybn19YjEuZmlsdGVyPWJlLnRlc3QoYjApP2IwLnJlcGxhY2UoYmUsZSk6YjArIiAiK2V9fX1iRyhmdW5jdGlvbigpe2lmKCFiRy5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHQpe2JHLmNzc0hvb2tzLm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oYlosZSl7cmV0dXJuIGJHLnN3YXAoYlose2Rpc3BsYXk6ImlubGluZS1ibG9jayJ9LGZ1bmN0aW9uKCl7aWYoZSl7cmV0dXJuIEYoYlosIm1hcmdpblJpZ2h0Iil9fSl9fX1pZighYkcuc3VwcG9ydC5waXhlbFBvc2l0aW9uJiZiRy5mbi5wb3NpdGlvbil7YkcuZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLGJaKXtiRy5jc3NIb29rc1tiWl09e2dldDpmdW5jdGlvbihiMixiMSl7aWYoYjEpe3ZhciBiMD1GKGIyLGJaKTtyZXR1cm4gVy50ZXN0KGIwKT9iRyhiMikucG9zaXRpb24oKVtiWl0rInB4IjpiMH19fX0pfX0pO2lmKGJHLmV4cHImJmJHLmV4cHIuZmlsdGVycyl7YkcuZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4oZS5vZmZzZXRXaWR0aD09PTAmJmUub2Zmc2V0SGVpZ2h0PT09MCl8fCghYkcuc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMmJigoZS5zdHlsZSYmZS5zdHlsZS5kaXNwbGF5KXx8RihlLCJkaXNwbGF5IikpPT09Im5vbmUiKX07YkcuZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oZSl7cmV0dXJuICFiRy5leHByLmZpbHRlcnMuaGlkZGVuKGUpfX1iRy5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oZSxiWil7YkcuY3NzSG9va3NbZStiWl09e2V4cGFuZDpmdW5jdGlvbihiMil7dmFyIGIxLGIzPXR5cGVvZiBiMj09PSJzdHJpbmciP2IyLnNwbGl0KCIgIik6W2IyXSxiMD17fTtmb3IoYjE9MDtiMTw0O2IxKyspe2IwW2UrYlFbYjFdK2JaXT1iM1tiMV18fGIzW2IxLTJdfHxiM1swXX1yZXR1cm4gYjB9fTtpZighYVoudGVzdChlKSl7YkcuY3NzSG9va3NbZStiWl0uc2V0PWFHfX0pO3ZhciBicz0vJTIwL2csYVA9L1xbXF0kLyxVPS9ccj9cbi9nLGJ6PS9eKD86Y29sb3J8ZGF0ZXxkYXRldGltZXxkYXRldGltZS1sb2NhbHxlbWFpbHxoaWRkZW58bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaSxhRD0vXig/OnNlbGVjdHx0ZXh0YXJlYSkvaTtiRy5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiBiRy5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnRzP2JHLm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fGFELnRlc3QodGhpcy5ub2RlTmFtZSl8fGJ6LnRlc3QodGhpcy50eXBlKSl9KS5tYXAoZnVuY3Rpb24oZSxiWil7dmFyIGIwPWJHKHRoaXMpLnZhbCgpO3JldHVybiBiMD09bnVsbD9udWxsOmJHLmlzQXJyYXkoYjApP2JHLm1hcChiMCxmdW5jdGlvbihiMixiMSl7cmV0dXJue25hbWU6YloubmFtZSx2YWx1ZTpiMi5yZXBsYWNlKFUsIlxyXG4iKX19KTp7bmFtZTpiWi5uYW1lLHZhbHVlOmIwLnJlcGxhY2UoVSwiXHJcbiIpfX0pLmdldCgpfX0pO2JHLnBhcmFtPWZ1bmN0aW9uKGUsYjApe3ZhciBiMSxiWj1bXSxiMj1mdW5jdGlvbihiMyxiNCl7YjQ9YkcuaXNGdW5jdGlvbihiNCk/YjQoKTooYjQ9PW51bGw/IiI6YjQpO2JaW2JaLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGIzKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGI0KX07aWYoYjA9PT1hQil7YjA9YkcuYWpheFNldHRpbmdzJiZiRy5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWx9aWYoYkcuaXNBcnJheShlKXx8KGUuanF1ZXJ5JiYhYkcuaXNQbGFpbk9iamVjdChlKSkpe2JHLmVhY2goZSxmdW5jdGlvbigpe2IyKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pfWVsc2V7Zm9yKGIxIGluIGUpe2soYjEsZVtiMV0sYjAsYjIpfX1yZXR1cm4gYlouam9pbigiJiIpLnJlcGxhY2UoYnMsIisiKX07ZnVuY3Rpb24gayhiMCxiMixiWixiMSl7dmFyIGU7aWYoYkcuaXNBcnJheShiMikpe2JHLmVhY2goYjIsZnVuY3Rpb24oYjQsYjMpe2lmKGJafHxhUC50ZXN0KGIwKSl7YjEoYjAsYjMpfWVsc2V7ayhiMCsiWyIrKHR5cGVvZiBiMz09PSJvYmplY3QiP2I0OiIiKSsiXSIsYjMsYlosYjEpfX0pfWVsc2V7aWYoIWJaJiZiRy50eXBlKGIyKT09PSJvYmplY3QiKXtmb3IoZSBpbiBiMil7ayhiMCsiWyIrZSsiXSIsYjJbZV0sYlosYjEpfX1lbHNle2IxKGIwLGIyKX19fXZhciBZLGJYLGFuPS8jLiokLyxhZD0vXiguKj8pOlsgXHRdKihbXlxyXG5dKilccj8kL21nLEM9L14oPzphYm91dHxhcHB8YXBwXC1zdG9yYWdlfC4rXC1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxzPS9eKD86R0VUfEhFQUQpJC8sYUM9L15cL1wvLyxiTj0vXD8vLGc9LzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksUD0vKFs/Jl0pXz1bXiZdKi8sYVQ9L14oW1x3XCtcLlwtXSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKXwpfCkvLGJXPWJHLmZuLmxvYWQsdz17fSxhNj17fSxhWD1bIiovIl0rWyIqIl07dHJ5e1k9YUkuaHJlZn1jYXRjaChiZCl7WT1vLmNyZWF0ZUVsZW1lbnQoImEiKTtZLmhyZWY9IiI7WT1ZLmhyZWZ9Ylg9YVQuZXhlYyhZLnRvTG93ZXJDYXNlKCkpfHxbXTtmdW5jdGlvbiBiSShlKXtyZXR1cm4gZnVuY3Rpb24oYjIsYjQpe2lmKHR5cGVvZiBiMiE9PSJzdHJpbmciKXtiND1iMjtiMj0iKiJ9dmFyIGJaLGI1LGI2LGIxPWIyLnRvTG93ZXJDYXNlKCkuc3BsaXQoYVYpLGIwPTAsYjM9YjEubGVuZ3RoO2lmKGJHLmlzRnVuY3Rpb24oYjQpKXtmb3IoO2IwPGIzO2IwKyspe2JaPWIxW2IwXTtiNj0vXlwrLy50ZXN0KGJaKTtpZihiNil7Ylo9Ylouc3Vic3RyKDEpfHwiKiJ9YjU9ZVtiWl09ZVtiWl18fFtdO2I1W2I2PyJ1bnNoaWZ0IjoicHVzaCJdKGI0KX19fX1mdW5jdGlvbiByKGJaLGI4LGIzLGI2LGI1LGIxKXtiNT1iNXx8YjguZGF0YVR5cGVzWzBdO2IxPWIxfHx7fTtiMVtiNV09dHJ1ZTt2YXIgYjcsYjQ9YlpbYjVdLGIwPTAsZT1iND9iNC5sZW5ndGg6MCxiMj0oYlo9PT13KTtmb3IoO2IwPGUmJihiMnx8IWI3KTtiMCsrKXtiNz1iNFtiMF0oYjgsYjMsYjYpO2lmKHR5cGVvZiBiNz09PSJzdHJpbmciKXtpZighYjJ8fGIxW2I3XSl7Yjc9YUJ9ZWxzZXtiOC5kYXRhVHlwZXMudW5zaGlmdChiNyk7Yjc9cihiWixiOCxiMyxiNixiNyxiMSl9fX1pZigoYjJ8fCFiNykmJiFiMVsiKiJdKXtiNz1yKGJaLGI4LGIzLGI2LCIqIixiMSl9cmV0dXJuIGI3fWZ1bmN0aW9uIHUoYjAsYjEpe3ZhciBiWixlLGIyPWJHLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGJaIGluIGIxKXtpZihiMVtiWl0hPT1hQil7KGIyW2JaXT9iMDooZXx8KGU9e30pKSlbYlpdPWIxW2JaXX19aWYoZSl7YkcuZXh0ZW5kKHRydWUsYjAsZSl9fWJHLmZuLmxvYWQ9ZnVuY3Rpb24oYjEsYjQsYjUpe2lmKHR5cGVvZiBiMSE9PSJzdHJpbmciJiZiVyl7cmV0dXJuIGJXLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZighdGhpcy5sZW5ndGgpe3JldHVybiB0aGlzfXZhciBlLGIyLGIwLGJaPXRoaXMsYjM9YjEuaW5kZXhPZigiICIpO2lmKGIzPj0wKXtlPWIxLnNsaWNlKGIzLGIxLmxlbmd0aCk7YjE9YjEuc2xpY2UoMCxiMyl9aWYoYkcuaXNGdW5jdGlvbihiNCkpe2I1PWI0O2I0PWFCfWVsc2V7aWYodHlwZW9mIGI0PT09Im9iamVjdCIpe2IyPSJQT1NUIn19YkcuYWpheCh7dXJsOmIxLHR5cGU6YjIsZGF0YVR5cGU6Imh0bWwiLGRhdGE6YjQsY29tcGxldGU6ZnVuY3Rpb24oYjcsYjYpe2lmKGI1KXtiWi5lYWNoKGI1LGIwfHxbYjcucmVzcG9uc2VUZXh0LGI2LGI3XSl9fX0pLmRvbmUoZnVuY3Rpb24oYjYpe2IwPWFyZ3VtZW50cztiWi5odG1sKGU/YkcoIjxkaXY+IikuYXBwZW5kKGI2LnJlcGxhY2UoZywiIikpLmZpbmQoZSk6YjYpfSk7cmV0dXJuIHRoaXN9O2JHLmVhY2goImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFqYXhTdWNjZXNzIGFqYXhTZW5kIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsYlope2JHLmZuW2JaXT1mdW5jdGlvbihiMCl7cmV0dXJuIHRoaXMub24oYlosYjApfX0pO2JHLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oZSxiWil7YkdbYlpdPWZ1bmN0aW9uKGIwLGIyLGIzLGIxKXtpZihiRy5pc0Z1bmN0aW9uKGIyKSl7YjE9YjF8fGIzO2IzPWIyO2IyPWFCfXJldHVybiBiRy5hamF4KHt0eXBlOmJaLHVybDpiMCxkYXRhOmIyLHN1Y2Nlc3M6YjMsZGF0YVR5cGU6YjF9KX19KTtiRy5leHRlbmQoe2dldFNjcmlwdDpmdW5jdGlvbihlLGJaKXtyZXR1cm4gYkcuZ2V0KGUsYUIsYlosInNjcmlwdCIpfSxnZXRKU09OOmZ1bmN0aW9uKGUsYlosYjApe3JldHVybiBiRy5nZXQoZSxiWixiMCwianNvbiIpfSxhamF4U2V0dXA6ZnVuY3Rpb24oYlosZSl7aWYoZSl7dShiWixiRy5hamF4U2V0dGluZ3MpfWVsc2V7ZT1iWjtiWj1iRy5hamF4U2V0dGluZ3N9dShiWixlKTtyZXR1cm4gYlp9LGFqYXhTZXR0aW5nczp7dXJsOlksaXNMb2NhbDpDLnRlc3QoYlhbMV0pLGdsb2JhbDp0cnVlLHR5cGU6IkdFVCIsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIscHJvY2Vzc0RhdGE6dHJ1ZSxhc3luYzp0cnVlLGFjY2VwdHM6e3htbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsaHRtbDoidGV4dC9odG1sIix0ZXh0OiJ0ZXh0L3BsYWluIixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiLCIqIjphWH0sY29udGVudHM6e3htbDoveG1sLyxodG1sOi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOmEyLlN0cmluZywidGV4dCBodG1sIjp0cnVlLCJ0ZXh0IGpzb24iOmJHLnBhcnNlSlNPTiwidGV4dCB4bWwiOmJHLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7Y29udGV4dDp0cnVlLHVybDp0cnVlfX0sYWpheFByZWZpbHRlcjpiSSh3KSxhamF4VHJhbnNwb3J0OmJJKGE2KSxhamF4OmZ1bmN0aW9uKGI0LGIxKXtpZih0eXBlb2YgYjQ9PT0ib2JqZWN0Iil7YjE9YjQ7YjQ9YUJ9YjE9YjF8fHt9O3ZhciBiNyxjbCxiMixjZyxiOSxjZCxiMCxjZixiOD1iRy5hamF4U2V0dXAoe30sYjEpLGNuPWI4LmNvbnRleHR8fGI4LGNiPWNuIT09YjgmJihjbi5ub2RlVHlwZXx8Y24gaW5zdGFuY2VvZiBiRyk/YkcoY24pOmJHLmV2ZW50LGNtPWJHLkRlZmVycmVkKCksY2k9YkcuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGI1PWI4LnN0YXR1c0NvZGV8fHt9LGNjPXt9LGNqPXt9LGIzPTAsYjY9ImNhbmNlbGVkIixjZT17cmVhZHlTdGF0ZTowLHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oY28sY3Ape2lmKCFiMyl7dmFyIGU9Y28udG9Mb3dlckNhc2UoKTtjbz1jaltlXT1jaltlXXx8Y287Y2NbY29dPWNwfXJldHVybiB0aGlzfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gYjM9PT0yP2NsOm51bGx9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGNvKXt2YXIgZTtpZihiMz09PTIpe2lmKCFiMil7YjI9e307d2hpbGUoKGU9YWQuZXhlYyhjbCkpKXtiMltlWzFdLnRvTG93ZXJDYXNlKCldPWVbMl19fWU9YjJbY28udG9Mb3dlckNhc2UoKV19cmV0dXJuIGU9PT1hQj9udWxsOmV9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7aWYoIWIzKXtiOC5taW1lVHlwZT1lfXJldHVybiB0aGlzfSxhYm9ydDpmdW5jdGlvbihlKXtlPWV8fGI2O2lmKGNnKXtjZy5hYm9ydChlKX1jYSgwLGUpO3JldHVybiB0aGlzfX07ZnVuY3Rpb24gY2EoY3MsY28sY3QsY3Epe3ZhciBlLGN3LGN1LGNyLGN2LGNwPWNvO2lmKGIzPT09Mil7cmV0dXJufWIzPTI7aWYoYjkpe2NsZWFyVGltZW91dChiOSl9Y2c9YUI7Y2w9Y3F8fCIiO2NlLnJlYWR5U3RhdGU9Y3M+MD80OjA7aWYoY3Qpe2NyPWgoYjgsY2UsY3QpfWlmKGNzPj0yMDAmJmNzPDMwMHx8Y3M9PT0zMDQpe2lmKGI4LmlmTW9kaWZpZWQpe2N2PWNlLmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIik7aWYoY3Ype2JHLmxhc3RNb2RpZmllZFtiN109Y3Z9Y3Y9Y2UuZ2V0UmVzcG9uc2VIZWFkZXIoIkV0YWciKTtpZihjdil7YkcuZXRhZ1tiN109Y3Z9fWlmKGNzPT09MzA0KXtjcD0ibm90bW9kaWZpZWQiO2U9dHJ1ZX1lbHNle2U9YWUoYjgsY3IpO2NwPWUuc3RhdGU7Y3c9ZS5kYXRhO2N1PWUuZXJyb3I7ZT0hY3V9fWVsc2V7Y3U9Y3A7aWYoIWNwfHxjcyl7Y3A9ImVycm9yIjtpZihjczwwKXtjcz0wfX19Y2Uuc3RhdHVzPWNzO2NlLnN0YXR1c1RleHQ9IiIrKGNvfHxjcCk7aWYoZSl7Y20ucmVzb2x2ZVdpdGgoY24sW2N3LGNwLGNlXSl9ZWxzZXtjbS5yZWplY3RXaXRoKGNuLFtjZSxjcCxjdV0pfWNlLnN0YXR1c0NvZGUoYjUpO2I1PWFCO2lmKGIwKXtjYi50cmlnZ2VyKCJhamF4IisoZT8iU3VjY2VzcyI6IkVycm9yIiksW2NlLGI4LGU/Y3c6Y3VdKX1jaS5maXJlV2l0aChjbixbY2UsY3BdKTtpZihiMCl7Y2IudHJpZ2dlcigiYWpheENvbXBsZXRlIixbY2UsYjhdKTtpZighKC0tYkcuYWN0aXZlKSl7YkcuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKX19fWNtLnByb21pc2UoY2UpO2NlLnN1Y2Nlc3M9Y2UuZG9uZTtjZS5lcnJvcj1jZS5mYWlsO2NlLmNvbXBsZXRlPWNpLmFkZDtjZS5zdGF0dXNDb2RlPWZ1bmN0aW9uKGNvKXtpZihjbyl7dmFyIGU7aWYoYjM8Mil7Zm9yKGUgaW4gY28pe2I1W2VdPVtiNVtlXSxjb1tlXV19fWVsc2V7ZT1jb1tjZS5zdGF0dXNdO2NlLmFsd2F5cyhlKX19cmV0dXJuIHRoaXN9O2I4LnVybD0oKGI0fHxiOC51cmwpKyIiKS5yZXBsYWNlKGFuLCIiKS5yZXBsYWNlKGFDLGJYWzFdKyIvLyIpO2I4LmRhdGFUeXBlcz1iRy50cmltKGI4LmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkuc3BsaXQoYVYpO2lmKGI4LmNyb3NzRG9tYWluPT1udWxsKXtjZD1hVC5leGVjKGI4LnVybC50b0xvd2VyQ2FzZSgpKTtiOC5jcm9zc0RvbWFpbj0hIShjZCYmKGNkWzFdIT1iWFsxXXx8Y2RbMl0hPWJYWzJdfHwoY2RbM118fChjZFsxXT09PSJodHRwOiI/ODA6NDQzKSkhPShiWFszXXx8KGJYWzFdPT09Imh0dHA6Ij84MDo0NDMpKSkpfWlmKGI4LmRhdGEmJmI4LnByb2Nlc3NEYXRhJiZ0eXBlb2YgYjguZGF0YSE9PSJzdHJpbmciKXtiOC5kYXRhPWJHLnBhcmFtKGI4LmRhdGEsYjgudHJhZGl0aW9uYWwpfXIodyxiOCxiMSxjZSk7aWYoYjM9PT0yKXtyZXR1cm4gY2V9YjA9YjguZ2xvYmFsO2I4LnR5cGU9YjgudHlwZS50b1VwcGVyQ2FzZSgpO2I4Lmhhc0NvbnRlbnQ9IXMudGVzdChiOC50eXBlKTtpZihiMCYmYkcuYWN0aXZlKys9PT0wKXtiRy5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKX1pZighYjguaGFzQ29udGVudCl7aWYoYjguZGF0YSl7YjgudXJsKz0oYk4udGVzdChiOC51cmwpPyImIjoiPyIpK2I4LmRhdGE7ZGVsZXRlIGI4LmRhdGF9Yjc9YjgudXJsO2lmKGI4LmNhY2hlPT09ZmFsc2Upe3ZhciBiWj1iRy5ub3coKSxjaz1iOC51cmwucmVwbGFjZShQLCIkMV89IitiWik7YjgudXJsPWNrKygoY2s9PT1iOC51cmwpPyhiTi50ZXN0KGI4LnVybCk/IiYiOiI/IikrIl89IitiWjoiIil9fWlmKGI4LmRhdGEmJmI4Lmhhc0NvbnRlbnQmJmI4LmNvbnRlbnRUeXBlIT09ZmFsc2V8fGIxLmNvbnRlbnRUeXBlKXtjZS5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGI4LmNvbnRlbnRUeXBlKX1pZihiOC5pZk1vZGlmaWVkKXtiNz1iN3x8YjgudXJsO2lmKGJHLmxhc3RNb2RpZmllZFtiN10pe2NlLnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixiRy5sYXN0TW9kaWZpZWRbYjddKX1pZihiRy5ldGFnW2I3XSl7Y2Uuc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIsYkcuZXRhZ1tiN10pfX1jZS5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGI4LmRhdGFUeXBlc1swXSYmYjguYWNjZXB0c1tiOC5kYXRhVHlwZXNbMF1dP2I4LmFjY2VwdHNbYjguZGF0YVR5cGVzWzBdXSsoYjguZGF0YVR5cGVzWzBdIT09IioiPyIsICIrYVgrIjsgcT0wLjAxIjoiIik6YjguYWNjZXB0c1siKiJdKTtmb3IoY2YgaW4gYjguaGVhZGVycyl7Y2Uuc2V0UmVxdWVzdEhlYWRlcihjZixiOC5oZWFkZXJzW2NmXSl9aWYoYjguYmVmb3JlU2VuZCYmKGI4LmJlZm9yZVNlbmQuY2FsbChjbixjZSxiOCk9PT1mYWxzZXx8YjM9PT0yKSl7cmV0dXJuIGNlLmFib3J0KCl9YjY9ImFib3J0Ijtmb3IoY2YgaW4ge3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXtjZVtjZl0oYjhbY2ZdKX1jZz1yKGE2LGI4LGIxLGNlKTtpZighY2cpe2NhKC0xLCJObyBUcmFuc3BvcnQiKX1lbHNle2NlLnJlYWR5U3RhdGU9MTtpZihiMCl7Y2IudHJpZ2dlcigiYWpheFNlbmQiLFtjZSxiOF0pfWlmKGI4LmFzeW5jJiZiOC50aW1lb3V0PjApe2I5PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtjZS5hYm9ydCgidGltZW91dCIpfSxiOC50aW1lb3V0KX10cnl7YjM9MTtjZy5zZW5kKGNjLGNhKX1jYXRjaChjaCl7aWYoYjM8Mil7Y2EoLTEsY2gpfWVsc2V7dGhyb3cgY2h9fX1yZXR1cm4gY2V9LGFjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9fSk7ZnVuY3Rpb24gaChiNyxiNixiMyl7dmFyIGIyLGI0LGIxLGUsYlo9YjcuY29udGVudHMsYjU9YjcuZGF0YVR5cGVzLGIwPWI3LnJlc3BvbnNlRmllbGRzO2ZvcihiNCBpbiBiMCl7aWYoYjQgaW4gYjMpe2I2W2IwW2I0XV09YjNbYjRdfX13aGlsZShiNVswXT09PSIqIil7YjUuc2hpZnQoKTtpZihiMj09PWFCKXtiMj1iNy5taW1lVHlwZXx8YjYuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpfX1pZihiMil7Zm9yKGI0IGluIGJaKXtpZihiWltiNF0mJmJaW2I0XS50ZXN0KGIyKSl7YjUudW5zaGlmdChiNCk7YnJlYWt9fX1pZihiNVswXSBpbiBiMyl7YjE9YjVbMF19ZWxzZXtmb3IoYjQgaW4gYjMpe2lmKCFiNVswXXx8YjcuY29udmVydGVyc1tiNCsiICIrYjVbMF1dKXtiMT1iNDticmVha31pZighZSl7ZT1iNH19YjE9YjF8fGV9aWYoYjEpe2lmKGIxIT09YjVbMF0pe2I1LnVuc2hpZnQoYjEpfXJldHVybiBiM1tiMV19fWZ1bmN0aW9uIGFlKGI5LGIxKXt2YXIgYjcsYlosYjUsYjMsYjY9YjkuZGF0YVR5cGVzLnNsaWNlKCksYjA9YjZbMF0sYjg9e30sYjI9MDtpZihiOS5kYXRhRmlsdGVyKXtiMT1iOS5kYXRhRmlsdGVyKGIxLGI5LmRhdGFUeXBlKX1pZihiNlsxXSl7Zm9yKGI3IGluIGI5LmNvbnZlcnRlcnMpe2I4W2I3LnRvTG93ZXJDYXNlKCldPWI5LmNvbnZlcnRlcnNbYjddfX1mb3IoOyhiNT1iNlsrK2IyXSk7KXtpZihiNSE9PSIqIil7aWYoYjAhPT0iKiImJmIwIT09YjUpe2I3PWI4W2IwKyIgIitiNV18fGI4WyIqICIrYjVdO2lmKCFiNyl7Zm9yKGJaIGluIGI4KXtiMz1iWi5zcGxpdCgiICIpO2lmKGIzWzFdPT09YjUpe2I3PWI4W2IwKyIgIitiM1swXV18fGI4WyIqICIrYjNbMF1dO2lmKGI3KXtpZihiNz09PXRydWUpe2I3PWI4W2JaXX1lbHNle2lmKGI4W2JaXSE9PXRydWUpe2I1PWIzWzBdO2I2LnNwbGljZShiMi0tLDAsYjUpfX1icmVha319fX1pZihiNyE9PXRydWUpe2lmKGI3JiZiOVsidGhyb3dzIl0pe2IxPWI3KGIxKX1lbHNle3RyeXtiMT1iNyhiMSl9Y2F0Y2goYjQpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmI3P2I0OiJObyBjb252ZXJzaW9uIGZyb20gIitiMCsiIHRvICIrYjV9fX19fWIwPWI1fX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6YjF9fXZhciBicD1bXSxhdz0vXD8vLGE1PS8oPSlcPyg/PSZ8JCl8XD9cPy8sYmw9Ykcubm93KCk7YkcuYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgZT1icC5wb3AoKXx8KGJHLmV4cGFuZG8rIl8iKyhibCsrKSk7dGhpc1tlXT10cnVlO3JldHVybiBlfX0pO2JHLmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9uKGI4LGIzLGI3KXt2YXIgYjYsZSxiNSxiMT1iOC5kYXRhLGJaPWI4LnVybCxiMD1iOC5qc29ucCE9PWZhbHNlLGI0PWIwJiZhNS50ZXN0KGJaKSxiMj1iMCYmIWI0JiZ0eXBlb2YgYjE9PT0ic3RyaW5nIiYmIShiOC5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZhNS50ZXN0KGIxKTtpZihiOC5kYXRhVHlwZXNbMF09PT0ianNvbnAifHxiNHx8YjIpe2I2PWI4Lmpzb25wQ2FsbGJhY2s9YkcuaXNGdW5jdGlvbihiOC5qc29ucENhbGxiYWNrKT9iOC5qc29ucENhbGxiYWNrKCk6YjguanNvbnBDYWxsYmFjaztlPWEyW2I2XTtpZihiNCl7YjgudXJsPWJaLnJlcGxhY2UoYTUsIiQxIitiNil9ZWxzZXtpZihiMil7YjguZGF0YT1iMS5yZXBsYWNlKGE1LCIkMSIrYjYpfWVsc2V7aWYoYjApe2I4LnVybCs9KGF3LnRlc3QoYlopPyImIjoiPyIpK2I4Lmpzb25wKyI9IitiNn19fWI4LmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtpZighYjUpe2JHLmVycm9yKGI2KyIgd2FzIG5vdCBjYWxsZWQiKX1yZXR1cm4gYjVbMF19O2I4LmRhdGFUeXBlc1swXT0ianNvbiI7YTJbYjZdPWZ1bmN0aW9uKCl7YjU9YXJndW1lbnRzfTtiNy5hbHdheXMoZnVuY3Rpb24oKXthMltiNl09ZTtpZihiOFtiNl0pe2I4Lmpzb25wQ2FsbGJhY2s9YjMuanNvbnBDYWxsYmFjazticC5wdXNoKGI2KX1pZihiNSYmYkcuaXNGdW5jdGlvbihlKSl7ZShiNVswXSl9YjU9ZT1hQn0pO3JldHVybiJzY3JpcHQifX0pO2JHLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L2phdmFzY3JpcHR8ZWNtYXNjcmlwdC99LGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oZSl7YkcuZ2xvYmFsRXZhbChlKTtyZXR1cm4gZX19fSk7YkcuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXtpZihlLmNhY2hlPT09YUIpe2UuY2FjaGU9ZmFsc2V9aWYoZS5jcm9zc0RvbWFpbil7ZS50eXBlPSJHRVQiO2UuZ2xvYmFsPWZhbHNlfX0pO2JHLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24oYjApe2lmKGIwLmNyb3NzRG9tYWluKXt2YXIgZSxiWj1vLmhlYWR8fG8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8by5kb2N1bWVudEVsZW1lbnQ7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oYjEsYjIpe2U9by5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtlLmFzeW5jPSJhc3luYyI7aWYoYjAuc2NyaXB0Q2hhcnNldCl7ZS5jaGFyc2V0PWIwLnNjcmlwdENoYXJzZXR9ZS5zcmM9YjAudXJsO2Uub25sb2FkPWUub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGI0LGIzKXtpZihiM3x8IWUucmVhZHlTdGF0ZXx8L2xvYWRlZHxjb21wbGV0ZS8udGVzdChlLnJlYWR5U3RhdGUpKXtlLm9ubG9hZD1lLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsO2lmKGJaJiZlLnBhcmVudE5vZGUpe2JaLnJlbW92ZUNoaWxkKGUpfWU9YUI7aWYoIWIzKXtiMigyMDAsInN1Y2Nlc3MiKX19fTtiWi5pbnNlcnRCZWZvcmUoZSxiWi5maXJzdENoaWxkKX0sYWJvcnQ6ZnVuY3Rpb24oKXtpZihlKXtlLm9ubG9hZCgwLDEpfX19fX0pO3ZhciBhaCxhTz1hMi5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7Zm9yKHZhciBlIGluIGFoKXthaFtlXSgwLDEpfX06ZmFsc2UsYXU9MDtmdW5jdGlvbiBiQigpe3RyeXtyZXR1cm4gbmV3IGEyLlhNTEh0dHBSZXF1ZXN0KCl9Y2F0Y2goYlope319ZnVuY3Rpb24gYmIoKXt0cnl7cmV0dXJuIG5ldyBhMi5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKGJaKXt9fWJHLmFqYXhTZXR0aW5ncy54aHI9YTIuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiAhdGhpcy5pc0xvY2FsJiZiQigpfHxiYigpfTpiQjsoZnVuY3Rpb24oZSl7YkcuZXh0ZW5kKGJHLnN1cHBvcnQse2FqYXg6ISFlLGNvcnM6ISFlJiYoIndpdGhDcmVkZW50aWFscyIgaW4gZSl9KX0pKGJHLmFqYXhTZXR0aW5ncy54aHIoKSk7aWYoYkcuc3VwcG9ydC5hamF4KXtiRy5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGUpe2lmKCFlLmNyb3NzRG9tYWlufHxiRy5zdXBwb3J0LmNvcnMpe3ZhciBiWjtyZXR1cm57c2VuZDpmdW5jdGlvbihiNSxiMCl7dmFyIGIzLGIyLGI0PWUueGhyKCk7aWYoZS51c2VybmFtZSl7YjQub3BlbihlLnR5cGUsZS51cmwsZS5hc3luYyxlLnVzZXJuYW1lLGUucGFzc3dvcmQpfWVsc2V7YjQub3BlbihlLnR5cGUsZS51cmwsZS5hc3luYyl9aWYoZS54aHJGaWVsZHMpe2ZvcihiMiBpbiBlLnhockZpZWxkcyl7YjRbYjJdPWUueGhyRmllbGRzW2IyXX19aWYoZS5taW1lVHlwZSYmYjQub3ZlcnJpZGVNaW1lVHlwZSl7YjQub3ZlcnJpZGVNaW1lVHlwZShlLm1pbWVUeXBlKX1pZighZS5jcm9zc0RvbWFpbiYmIWI1WyJYLVJlcXVlc3RlZC1XaXRoIl0pe2I1WyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0In10cnl7Zm9yKGIyIGluIGI1KXtiNC5zZXRSZXF1ZXN0SGVhZGVyKGIyLGI1W2IyXSl9fWNhdGNoKGIxKXt9YjQuc2VuZCgoZS5oYXNDb250ZW50JiZlLmRhdGEpfHxudWxsKTtiWj1mdW5jdGlvbihjZSxiOCl7dmFyIGI5LGI3LGI2LGNjLGNiO3RyeXtpZihiWiYmKGI4fHxiNC5yZWFkeVN0YXRlPT09NCkpe2JaPWFCO2lmKGIzKXtiNC5vbnJlYWR5c3RhdGVjaGFuZ2U9Ykcubm9vcDtpZihhTyl7ZGVsZXRlIGFoW2IzXX19aWYoYjgpe2lmKGI0LnJlYWR5U3RhdGUhPT00KXtiNC5hYm9ydCgpfX1lbHNle2I5PWI0LnN0YXR1cztiNj1iNC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKTtjYz17fTtjYj1iNC5yZXNwb25zZVhNTDtpZihjYiYmY2IuZG9jdW1lbnRFbGVtZW50KXtjYy54bWw9Y2J9dHJ5e2NjLnRleHQ9YjQucmVzcG9uc2VUZXh0fWNhdGNoKGNlKXt9dHJ5e2I3PWI0LnN0YXR1c1RleHR9Y2F0Y2goY2Qpe2I3PSIifWlmKCFiOSYmZS5pc0xvY2FsJiYhZS5jcm9zc0RvbWFpbil7Yjk9Y2MudGV4dD8yMDA6NDA0fWVsc2V7aWYoYjk9PT0xMjIzKXtiOT0yMDR9fX19fWNhdGNoKGNhKXtpZighYjgpe2IwKC0xLGNhKX19aWYoY2Mpe2IwKGI5LGI3LGNjLGI2KX19O2lmKCFlLmFzeW5jKXtiWigpfWVsc2V7aWYoYjQucmVhZHlTdGF0ZT09PTQpe3NldFRpbWVvdXQoYlosMCl9ZWxzZXtiMz0rK2F1O2lmKGFPKXtpZighYWgpe2FoPXt9O2JHKGEyKS51bmxvYWQoYU8pfWFoW2IzXT1iWn1iNC5vbnJlYWR5c3RhdGVjaGFuZ2U9Ylp9fX0sYWJvcnQ6ZnVuY3Rpb24oKXtpZihiWil7YlooMCwxKX19fX19KX12YXIgTCxhYixiTz0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sYkg9bmV3IFJlZ0V4cCgiXig/OihbLStdKT18KSgiK2J4KyIpKFthLXolXSopJCIsImkiKSxiTT0vcXVldWVIb29rcyQvLGF4PVtpXSxhMT17IioiOltmdW5jdGlvbihiWixiNSl7dmFyIGIyLGI2LGUsYjc9dGhpcy5jcmVhdGVUd2VlbihiWixiNSksYjM9YkguZXhlYyhiNSksYjQ9YjcuY3VyKCksYjA9K2I0fHwwLGIxPTE7aWYoYjMpe2IyPStiM1syXTtiNj1iM1szXXx8KGJHLmNzc051bWJlcltiWl0/IiI6InB4Iik7aWYoYjYhPT0icHgiJiZiMCl7YjA9YkcuY3NzKGI3LmVsZW0sYlosdHJ1ZSl8fGIyfHwxO2Rve2U9YjE9YjF8fCIuNSI7YjA9YjAvYjE7Ykcuc3R5bGUoYjcuZWxlbSxiWixiMCtiNik7YjE9YjcuY3VyKCkvYjR9d2hpbGUoYjEhPT0xJiZiMSE9PWUpfWI3LnVuaXQ9YjY7Yjcuc3RhcnQ9YjA7YjcuZW5kPWIzWzFdP2IwKyhiM1sxXSsxKSpiMjpiMn1yZXR1cm4gYjd9XX07ZnVuY3Rpb24gYmooKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7TD1hQn0sMCk7cmV0dXJuKEw9Ykcubm93KCkpfWZ1bmN0aW9uIGJjKGJaLGUpe2JHLmVhY2goZSxmdW5jdGlvbihiNCxiMil7dmFyIGIzPShhMVtiNF18fFtdKS5jb25jYXQoYTFbIioiXSksYjA9MCxiMT1iMy5sZW5ndGg7Zm9yKDtiMDxiMTtiMCsrKXtpZihiM1tiMF0uY2FsbChiWixiNCxiMikpe3JldHVybn19fSl9ZnVuY3Rpb24gZihiMCxiNCxiNyl7dmFyIGI4LGIzPTAsZT0wLGJaPWF4Lmxlbmd0aCxiNj1iRy5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBiMi5lbGVtfSksYjI9ZnVuY3Rpb24oKXt2YXIgY2Q9THx8YmooKSxjYT1NYXRoLm1heCgwLGIxLnN0YXJ0VGltZStiMS5kdXJhdGlvbi1jZCksY2M9MS0oY2EvYjEuZHVyYXRpb258fDApLGI5PTAsY2I9YjEudHdlZW5zLmxlbmd0aDtmb3IoO2I5PGNiO2I5Kyspe2IxLnR3ZWVuc1tiOV0ucnVuKGNjKX1iNi5ub3RpZnlXaXRoKGIwLFtiMSxjYyxjYV0pO2lmKGNjPDEmJmNiKXtyZXR1cm4gY2F9ZWxzZXtiNi5yZXNvbHZlV2l0aChiMCxbYjFdKTtyZXR1cm4gZmFsc2V9fSxiMT1iNi5wcm9taXNlKHtlbGVtOmIwLHByb3BzOmJHLmV4dGVuZCh7fSxiNCksb3B0czpiRy5leHRlbmQodHJ1ZSx7c3BlY2lhbEVhc2luZzp7fX0sYjcpLG9yaWdpbmFsUHJvcGVydGllczpiNCxvcmlnaW5hbE9wdGlvbnM6Yjcsc3RhcnRUaW1lOkx8fGJqKCksZHVyYXRpb246YjcuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKGNjLGI5LGNiKXt2YXIgY2E9YkcuVHdlZW4oYjAsYjEub3B0cyxjYyxiOSxiMS5vcHRzLnNwZWNpYWxFYXNpbmdbY2NdfHxiMS5vcHRzLmVhc2luZyk7YjEudHdlZW5zLnB1c2goY2EpO3JldHVybiBjYX0sc3RvcDpmdW5jdGlvbihjYSl7dmFyIGI5PTAsY2I9Y2E/YjEudHdlZW5zLmxlbmd0aDowO2Zvcig7Yjk8Y2I7YjkrKyl7YjEudHdlZW5zW2I5XS5ydW4oMSl9aWYoY2Epe2I2LnJlc29sdmVXaXRoKGIwLFtiMSxjYV0pfWVsc2V7YjYucmVqZWN0V2l0aChiMCxbYjEsY2FdKX1yZXR1cm4gdGhpc319KSxiNT1iMS5wcm9wczthayhiNSxiMS5vcHRzLnNwZWNpYWxFYXNpbmcpO2Zvcig7YjM8Ylo7YjMrKyl7Yjg9YXhbYjNdLmNhbGwoYjEsYjAsYjUsYjEub3B0cyk7aWYoYjgpe3JldHVybiBiOH19YmMoYjEsYjUpO2lmKGJHLmlzRnVuY3Rpb24oYjEub3B0cy5zdGFydCkpe2IxLm9wdHMuc3RhcnQuY2FsbChiMCxiMSl9YkcuZngudGltZXIoYkcuZXh0ZW5kKGIyLHthbmltOmIxLHF1ZXVlOmIxLm9wdHMucXVldWUsZWxlbTpiMH0pKTtyZXR1cm4gYjEucHJvZ3Jlc3MoYjEub3B0cy5wcm9ncmVzcykuZG9uZShiMS5vcHRzLmRvbmUsYjEub3B0cy5jb21wbGV0ZSkuZmFpbChiMS5vcHRzLmZhaWwpLmFsd2F5cyhiMS5vcHRzLmFsd2F5cyl9ZnVuY3Rpb24gYWsoYjEsYjMpe3ZhciBiMCxiWixiNCxiMixlO2ZvcihiMCBpbiBiMSl7Ylo9YkcuY2FtZWxDYXNlKGIwKTtiND1iM1tiWl07YjI9YjFbYjBdO2lmKGJHLmlzQXJyYXkoYjIpKXtiND1iMlsxXTtiMj1iMVtiMF09YjJbMF19aWYoYjAhPT1iWil7YjFbYlpdPWIyO2RlbGV0ZSBiMVtiMF19ZT1iRy5jc3NIb29rc1tiWl07aWYoZSYmImV4cGFuZCIgaW4gZSl7YjI9ZS5leHBhbmQoYjIpO2RlbGV0ZSBiMVtiWl07Zm9yKGIwIGluIGIyKXtpZighKGIwIGluIGIxKSl7YjFbYjBdPWIyW2IwXTtiM1tiMF09YjR9fX1lbHNle2IzW2JaXT1iNH19fWJHLkFuaW1hdGlvbj1iRy5leHRlbmQoZix7dHdlZW5lcjpmdW5jdGlvbihiWixiMil7aWYoYkcuaXNGdW5jdGlvbihiWikpe2IyPWJaO2JaPVsiKiJdfWVsc2V7Ylo9Ylouc3BsaXQoIiAiKX12YXIgYjEsZT0wLGIwPWJaLmxlbmd0aDtmb3IoO2U8YjA7ZSsrKXtiMT1iWltlXTthMVtiMV09YTFbYjFdfHxbXTthMVtiMV0udW5zaGlmdChiMil9fSxwcmVmaWx0ZXI6ZnVuY3Rpb24oYlosZSl7aWYoZSl7YXgudW5zaGlmdChiWil9ZWxzZXtheC5wdXNoKGJaKX19fSk7ZnVuY3Rpb24gaShiMixiNyxlKXt2YXIgYjYsYjAsYjksYjEsY2QsY2MsY2IsY2EsYjM9dGhpcyxiWj1iMi5zdHlsZSxiOD17fSxiNT1bXSxiND1iMi5ub2RlVHlwZSYmUShiMik7aWYoIWUucXVldWUpe2NiPWJHLl9xdWV1ZUhvb2tzKGIyLCJmeCIpO2lmKGNiLnVucXVldWVkPT1udWxsKXtjYi51bnF1ZXVlZD0wO2NhPWNiLmVtcHR5LmZpcmU7Y2IuZW1wdHkuZmlyZT1mdW5jdGlvbigpe2lmKCFjYi51bnF1ZXVlZCl7Y2EoKX19fWNiLnVucXVldWVkKys7YjMuYWx3YXlzKGZ1bmN0aW9uKCl7YjMuYWx3YXlzKGZ1bmN0aW9uKCl7Y2IudW5xdWV1ZWQtLTtpZighYkcucXVldWUoYjIsImZ4IikubGVuZ3RoKXtjYi5lbXB0eS5maXJlKCl9fSl9KX1pZihiMi5ub2RlVHlwZT09PTEmJigiaGVpZ2h0IiBpbiBiN3x8IndpZHRoIiBpbiBiNykpe2Uub3ZlcmZsb3c9W2JaLm92ZXJmbG93LGJaLm92ZXJmbG93WCxiWi5vdmVyZmxvd1ldO2lmKGJHLmNzcyhiMiwiZGlzcGxheSIpPT09ImlubGluZSImJmJHLmNzcyhiMiwiZmxvYXQiKT09PSJub25lIil7aWYoIWJHLnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dHx8YkMoYjIubm9kZU5hbWUpPT09ImlubGluZSIpe2JaLmRpc3BsYXk9ImlubGluZS1ibG9jayJ9ZWxzZXtiWi56b29tPTF9fX1pZihlLm92ZXJmbG93KXtiWi5vdmVyZmxvdz0iaGlkZGVuIjtpZighYkcuc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzKXtiMy5kb25lKGZ1bmN0aW9uKCl7Yloub3ZlcmZsb3c9ZS5vdmVyZmxvd1swXTtiWi5vdmVyZmxvd1g9ZS5vdmVyZmxvd1sxXTtiWi5vdmVyZmxvd1k9ZS5vdmVyZmxvd1syXX0pfX1mb3IoYjYgaW4gYjcpe2I5PWI3W2I2XTtpZihiTy5leGVjKGI5KSl7ZGVsZXRlIGI3W2I2XTtpZihiOT09PShiND8iaGlkZSI6InNob3ciKSl7Y29udGludWV9YjUucHVzaChiNil9fWIxPWI1Lmxlbmd0aDtpZihiMSl7Y2Q9YkcuX2RhdGEoYjIsImZ4c2hvdyIpfHxiRy5fZGF0YShiMiwiZnhzaG93Iix7fSk7aWYoYjQpe2JHKGIyKS5zaG93KCl9ZWxzZXtiMy5kb25lKGZ1bmN0aW9uKCl7YkcoYjIpLmhpZGUoKX0pfWIzLmRvbmUoZnVuY3Rpb24oKXt2YXIgY2U7YkcucmVtb3ZlRGF0YShiMiwiZnhzaG93Iix0cnVlKTtmb3IoY2UgaW4gYjgpe2JHLnN0eWxlKGIyLGNlLGI4W2NlXSl9fSk7Zm9yKGI2PTA7YjY8YjE7YjYrKyl7YjA9YjVbYjZdO2NjPWIzLmNyZWF0ZVR3ZWVuKGIwLGI0P2NkW2IwXTowKTtiOFtiMF09Y2RbYjBdfHxiRy5zdHlsZShiMixiMCk7aWYoIShiMCBpbiBjZCkpe2NkW2IwXT1jYy5zdGFydDtpZihiNCl7Y2MuZW5kPWNjLnN0YXJ0O2NjLnN0YXJ0PWIwPT09IndpZHRoInx8YjA9PT0iaGVpZ2h0Ij8xOjB9fX19fWZ1bmN0aW9uIEgoYjAsYlosYjIsZSxiMSl7cmV0dXJuIG5ldyBILnByb3RvdHlwZS5pbml0KGIwLGJaLGIyLGUsYjEpfWJHLlR3ZWVuPUg7SC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkgsaW5pdDpmdW5jdGlvbihiMSxiWixiMyxlLGIyLGIwKXt0aGlzLmVsZW09YjE7dGhpcy5wcm9wPWIzO3RoaXMuZWFzaW5nPWIyfHwic3dpbmciO3RoaXMub3B0aW9ucz1iWjt0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCk7dGhpcy5lbmQ9ZTt0aGlzLnVuaXQ9YjB8fChiRy5jc3NOdW1iZXJbYjNdPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT1ILnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBlJiZlLmdldD9lLmdldCh0aGlzKTpILnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihiMCl7dmFyIGJaLGU9SC5wcm9wSG9va3NbdGhpcy5wcm9wXTt0aGlzLnBvcz1iWj1iRy5lYXNpbmdbdGhpcy5lYXNpbmddKGIwLHRoaXMub3B0aW9ucy5kdXJhdGlvbipiMCwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTt0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqYlordGhpcy5zdGFydDtpZih0aGlzLm9wdGlvbnMuc3RlcCl7dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyl9aWYoZSYmZS5zZXQpe2Uuc2V0KHRoaXMpfWVsc2V7SC5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpfXJldHVybiB0aGlzfX07SC5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGU9SC5wcm90b3R5cGU7SC5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oYlope3ZhciBlO2lmKGJaLmVsZW1bYloucHJvcF0hPW51bGwmJighYlouZWxlbS5zdHlsZXx8YlouZWxlbS5zdHlsZVtiWi5wcm9wXT09bnVsbCkpe3JldHVybiBiWi5lbGVtW2JaLnByb3BdfWU9YkcuY3NzKGJaLmVsZW0sYloucHJvcCxmYWxzZSwiIik7cmV0dXJuICFlfHxlPT09ImF1dG8iPzA6ZX0sc2V0OmZ1bmN0aW9uKGUpe2lmKGJHLmZ4LnN0ZXBbZS5wcm9wXSl7YkcuZnguc3RlcFtlLnByb3BdKGUpfWVsc2V7aWYoZS5lbGVtLnN0eWxlJiYoZS5lbGVtLnN0eWxlW2JHLmNzc1Byb3BzW2UucHJvcF1dIT1udWxsfHxiRy5jc3NIb29rc1tlLnByb3BdKSl7Ykcuc3R5bGUoZS5lbGVtLGUucHJvcCxlLm5vdytlLnVuaXQpfWVsc2V7ZS5lbGVtW2UucHJvcF09ZS5ub3d9fX19fTtILnByb3BIb29rcy5zY3JvbGxUb3A9SC5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGUpe2lmKGUuZWxlbS5ub2RlVHlwZSYmZS5lbGVtLnBhcmVudE5vZGUpe2UuZWxlbVtlLnByb3BdPWUubm93fX19O2JHLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGJaLGUpe3ZhciBiMD1iRy5mbltlXTtiRy5mbltlXT1mdW5jdGlvbihiMSxiMyxiMil7cmV0dXJuIGIxPT1udWxsfHx0eXBlb2YgYjE9PT0iYm9vbGVhbiJ8fCghYlomJmJHLmlzRnVuY3Rpb24oYjEpJiZiRy5pc0Z1bmN0aW9uKGIzKSk/YjAuYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZShiRihlLHRydWUpLGIxLGIzLGIyKX19KTtiRy5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihlLGIxLGIwLGJaKXtyZXR1cm4gdGhpcy5maWx0ZXIoUSkuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTpiMX0sZSxiMCxiWil9LGFuaW1hdGU6ZnVuY3Rpb24oYjQsYjEsYjMsYjIpe3ZhciBiMD1iRy5pc0VtcHR5T2JqZWN0KGI0KSxlPWJHLnNwZWVkKGIxLGIzLGIyKSxiWj1mdW5jdGlvbigpe3ZhciBiNT1mKHRoaXMsYkcuZXh0ZW5kKHt9LGI0KSxlKTtpZihiMCl7YjUuc3RvcCh0cnVlKX19O3JldHVybiBiMHx8ZS5xdWV1ZT09PWZhbHNlP3RoaXMuZWFjaChiWik6dGhpcy5xdWV1ZShlLnF1ZXVlLGJaKX0sc3RvcDpmdW5jdGlvbihiMCxiWixlKXt2YXIgYjE9ZnVuY3Rpb24oYjIpe3ZhciBiMz1iMi5zdG9wO2RlbGV0ZSBiMi5zdG9wO2IzKGUpfTtpZih0eXBlb2YgYjAhPT0ic3RyaW5nIil7ZT1iWjtiWj1iMDtiMD1hQn1pZihiWiYmYjAhPT1mYWxzZSl7dGhpcy5xdWV1ZShiMHx8ImZ4IixbXSl9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiNT10cnVlLGIyPWIwIT1udWxsJiZiMCsicXVldWVIb29rcyIsYjQ9YkcudGltZXJzLGIzPWJHLl9kYXRhKHRoaXMpO2lmKGIyKXtpZihiM1tiMl0mJmIzW2IyXS5zdG9wKXtiMShiM1tiMl0pfX1lbHNle2ZvcihiMiBpbiBiMyl7aWYoYjNbYjJdJiZiM1tiMl0uc3RvcCYmYk0udGVzdChiMikpe2IxKGIzW2IyXSl9fX1mb3IoYjI9YjQubGVuZ3RoO2IyLS07KXtpZihiNFtiMl0uZWxlbT09PXRoaXMmJihiMD09bnVsbHx8YjRbYjJdLnF1ZXVlPT09YjApKXtiNFtiMl0uYW5pbS5zdG9wKGUpO2I1PWZhbHNlO2I0LnNwbGljZShiMiwxKX19aWYoYjV8fCFlKXtiRy5kZXF1ZXVlKHRoaXMsYjApfX0pfX0pO2Z1bmN0aW9uIGJGKGIwLGIyKXt2YXIgYjEsZT17aGVpZ2h0OmIwfSxiWj0wO2Zvcig7Ylo8NDtiWis9Mi1iMil7YjE9YlFbYlpdO2VbIm1hcmdpbiIrYjFdPWVbInBhZGRpbmciK2IxXT1iMH1pZihiMil7ZS5vcGFjaXR5PWUud2lkdGg9YjB9cmV0dXJuIGV9YkcuZWFjaCh7c2xpZGVEb3duOmJGKCJzaG93Iiksc2xpZGVVcDpiRigiaGlkZSIpLHNsaWRlVG9nZ2xlOmJGKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGUsYlope2JHLmZuW2VdPWZ1bmN0aW9uKGIwLGIyLGIxKXtyZXR1cm4gdGhpcy5hbmltYXRlKGJaLGIwLGIyLGIxKX19KTtiRy5zcGVlZD1mdW5jdGlvbihiMCxiMSxiWil7dmFyIGU9YjAmJnR5cGVvZiBiMD09PSJvYmplY3QiP2JHLmV4dGVuZCh7fSxiMCk6e2NvbXBsZXRlOmJafHwhYlomJmIxfHxiRy5pc0Z1bmN0aW9uKGIwKSYmYjAsZHVyYXRpb246YjAsZWFzaW5nOmJaJiZiMXx8YjEmJiFiRy5pc0Z1bmN0aW9uKGIxKSYmYjF9O2UuZHVyYXRpb249YkcuZngub2ZmPzA6dHlwZW9mIGUuZHVyYXRpb249PT0ibnVtYmVyIj9lLmR1cmF0aW9uOmUuZHVyYXRpb24gaW4gYkcuZnguc3BlZWRzP2JHLmZ4LnNwZWVkc1tlLmR1cmF0aW9uXTpiRy5meC5zcGVlZHMuX2RlZmF1bHQ7aWYoZS5xdWV1ZT09bnVsbHx8ZS5xdWV1ZT09PXRydWUpe2UucXVldWU9ImZ4In1lLm9sZD1lLmNvbXBsZXRlO2UuY29tcGxldGU9ZnVuY3Rpb24oKXtpZihiRy5pc0Z1bmN0aW9uKGUub2xkKSl7ZS5vbGQuY2FsbCh0aGlzKX1pZihlLnF1ZXVlKXtiRy5kZXF1ZXVlKHRoaXMsZS5xdWV1ZSl9fTtyZXR1cm4gZX07YkcuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybiAwLjUtTWF0aC5jb3MoZSpNYXRoLlBJKS8yfX07YkcudGltZXJzPVtdO2JHLmZ4PUgucHJvdG90eXBlLmluaXQ7YkcuZngudGljaz1mdW5jdGlvbigpe3ZhciBiMCxiWj1iRy50aW1lcnMsZT0wO2Zvcig7ZTxiWi5sZW5ndGg7ZSsrKXtiMD1iWltlXTtpZighYjAoKSYmYlpbZV09PT1iMCl7Ylouc3BsaWNlKGUtLSwxKX19aWYoIWJaLmxlbmd0aCl7YkcuZnguc3RvcCgpfX07YkcuZngudGltZXI9ZnVuY3Rpb24oZSl7aWYoZSgpJiZiRy50aW1lcnMucHVzaChlKSYmIWFiKXthYj1zZXRJbnRlcnZhbChiRy5meC50aWNrLGJHLmZ4LmludGVydmFsKX19O2JHLmZ4LmludGVydmFsPTEzO2JHLmZ4LnN0b3A9ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKGFiKTthYj1udWxsfTtiRy5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH07YkcuZnguc3RlcD17fTtpZihiRy5leHByJiZiRy5leHByLmZpbHRlcnMpe2JHLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4gYkcuZ3JlcChiRy50aW1lcnMsZnVuY3Rpb24oYlope3JldHVybiBlPT09YlouZWxlbX0pLmxlbmd0aH19dmFyIGJtPS9eKD86Ym9keXxodG1sKSQvaTtiRy5mbi5vZmZzZXQ9ZnVuY3Rpb24oY2Epe2lmKGFyZ3VtZW50cy5sZW5ndGgpe3JldHVybiBjYT09PWFCP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGNiKXtiRy5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsY2EsY2IpfSl9dmFyIGI0LGJaLGI1LGI2LGIzLGI3LGUsYjIsYjgsYjEsYjA9dGhpc1swXSxiOT1iMCYmYjAub3duZXJEb2N1bWVudDtpZighYjkpe3JldHVybn1pZigoYjU9YjkuYm9keSk9PT1iMCl7cmV0dXJuIGJHLm9mZnNldC5ib2R5T2Zmc2V0KGIwKX1iWj1iOS5kb2N1bWVudEVsZW1lbnQ7aWYoIWJHLmNvbnRhaW5zKGJaLGIwKSl7cmV0dXJue3RvcDowLGxlZnQ6MH19YjQ9YjAuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YjY9Ym4oYjkpO2IzPWJaLmNsaWVudFRvcHx8YjUuY2xpZW50VG9wfHwwO2I3PWJaLmNsaWVudExlZnR8fGI1LmNsaWVudExlZnR8fDA7ZT1iNi5wYWdlWU9mZnNldHx8Ylouc2Nyb2xsVG9wO2IyPWI2LnBhZ2VYT2Zmc2V0fHxiWi5zY3JvbGxMZWZ0O2I4PWI0LnRvcCtlLWIzO2IxPWI0LmxlZnQrYjItYjc7cmV0dXJue3RvcDpiOCxsZWZ0OmIxfX07Ykcub2Zmc2V0PXtib2R5T2Zmc2V0OmZ1bmN0aW9uKGUpe3ZhciBiMD1lLm9mZnNldFRvcCxiWj1lLm9mZnNldExlZnQ7aWYoYkcuc3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCl7YjArPXBhcnNlRmxvYXQoYkcuY3NzKGUsIm1hcmdpblRvcCIpKXx8MDtiWis9cGFyc2VGbG9hdChiRy5jc3MoZSwibWFyZ2luTGVmdCIpKXx8MH1yZXR1cm57dG9wOmIwLGxlZnQ6Ylp9fSxzZXRPZmZzZXQ6ZnVuY3Rpb24oYjEsY2EsYjQpe3ZhciBiNT1iRy5jc3MoYjEsInBvc2l0aW9uIik7aWYoYjU9PT0ic3RhdGljIil7YjEuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIn12YXIgYjM9YkcoYjEpLGJaPWIzLm9mZnNldCgpLGU9YkcuY3NzKGIxLCJ0b3AiKSxiOD1iRy5jc3MoYjEsImxlZnQiKSxiOT0oYjU9PT0iYWJzb2x1dGUifHxiNT09PSJmaXhlZCIpJiZiRy5pbkFycmF5KCJhdXRvIixbZSxiOF0pPi0xLGI3PXt9LGI2PXt9LGIwLGIyO2lmKGI5KXtiNj1iMy5wb3NpdGlvbigpO2IwPWI2LnRvcDtiMj1iNi5sZWZ0fWVsc2V7YjA9cGFyc2VGbG9hdChlKXx8MDtiMj1wYXJzZUZsb2F0KGI4KXx8MH1pZihiRy5pc0Z1bmN0aW9uKGNhKSl7Y2E9Y2EuY2FsbChiMSxiNCxiWil9aWYoY2EudG9wIT1udWxsKXtiNy50b3A9KGNhLnRvcC1iWi50b3ApK2IwfWlmKGNhLmxlZnQhPW51bGwpe2I3LmxlZnQ9KGNhLmxlZnQtYloubGVmdCkrYjJ9aWYoInVzaW5nIiBpbiBjYSl7Y2EudXNpbmcuY2FsbChiMSxiNyl9ZWxzZXtiMy5jc3MoYjcpfX19O2JHLmZuLmV4dGVuZCh7cG9zaXRpb246ZnVuY3Rpb24oKXtpZighdGhpc1swXSl7cmV0dXJufXZhciBiMD10aGlzWzBdLGJaPXRoaXMub2Zmc2V0UGFyZW50KCksYjE9dGhpcy5vZmZzZXQoKSxlPWJtLnRlc3QoYlpbMF0ubm9kZU5hbWUpP3t0b3A6MCxsZWZ0OjB9OmJaLm9mZnNldCgpO2IxLnRvcC09cGFyc2VGbG9hdChiRy5jc3MoYjAsIm1hcmdpblRvcCIpKXx8MDtiMS5sZWZ0LT1wYXJzZUZsb2F0KGJHLmNzcyhiMCwibWFyZ2luTGVmdCIpKXx8MDtlLnRvcCs9cGFyc2VGbG9hdChiRy5jc3MoYlpbMF0sImJvcmRlclRvcFdpZHRoIikpfHwwO2UubGVmdCs9cGFyc2VGbG9hdChiRy5jc3MoYlpbMF0sImJvcmRlckxlZnRXaWR0aCIpKXx8MDtyZXR1cm57dG9wOmIxLnRvcC1lLnRvcCxsZWZ0OmIxLmxlZnQtZS5sZWZ0fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnR8fG8uYm9keTt3aGlsZShlJiYoIWJtLnRlc3QoZS5ub2RlTmFtZSkmJmJHLmNzcyhlLCJwb3NpdGlvbiIpPT09InN0YXRpYyIpKXtlPWUub2Zmc2V0UGFyZW50fXJldHVybiBlfHxvLmJvZHl9KX19KTtiRy5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKGIwLGJaKXt2YXIgZT0vWS8udGVzdChiWik7YkcuZm5bYjBdPWZ1bmN0aW9uKGIxKXtyZXR1cm4gYkcuYWNjZXNzKHRoaXMsZnVuY3Rpb24oYjIsYjUsYjQpe3ZhciBiMz1ibihiMik7aWYoYjQ9PT1hQil7cmV0dXJuIGIzPyhiWiBpbiBiMyk/YjNbYlpdOmIzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtiNV06YjJbYjVdfWlmKGIzKXtiMy5zY3JvbGxUbyghZT9iNDpiRyhiMykuc2Nyb2xsTGVmdCgpLGU/YjQ6YkcoYjMpLnNjcm9sbFRvcCgpKX1lbHNle2IyW2I1XT1iNH19LGIwLGIxLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSk7ZnVuY3Rpb24gYm4oZSl7cmV0dXJuIGJHLmlzV2luZG93KGUpP2U6ZS5ub2RlVHlwZT09PTk/ZS5kZWZhdWx0Vmlld3x8ZS5wYXJlbnRXaW5kb3c6ZmFsc2V9YkcuZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGUsYlope2JHLmVhY2goe3BhZGRpbmc6ImlubmVyIitlLGNvbnRlbnQ6YlosIiI6Im91dGVyIitlfSxmdW5jdGlvbihiMCxiMSl7YkcuZm5bYjFdPWZ1bmN0aW9uKGI1LGI0KXt2YXIgYjM9YXJndW1lbnRzLmxlbmd0aCYmKGIwfHx0eXBlb2YgYjUhPT0iYm9vbGVhbiIpLGIyPWIwfHwoYjU9PT10cnVlfHxiND09PXRydWU/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiBiRy5hY2Nlc3ModGhpcyxmdW5jdGlvbihiNyxiNixiOCl7dmFyIGI5O2lmKGJHLmlzV2luZG93KGI3KSl7cmV0dXJuIGI3LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IitlXX1pZihiNy5ub2RlVHlwZT09PTkpe2I5PWI3LmRvY3VtZW50RWxlbWVudDtyZXR1cm4gTWF0aC5tYXgoYjcuYm9keVsic2Nyb2xsIitlXSxiOVsic2Nyb2xsIitlXSxiNy5ib2R5WyJvZmZzZXQiK2VdLGI5WyJvZmZzZXQiK2VdLGI5WyJjbGllbnQiK2VdKX1yZXR1cm4gYjg9PT1hQj9iRy5jc3MoYjcsYjYsYjgsYjIpOmJHLnN0eWxlKGI3LGI2LGI4LGIyKX0sYlosYjM/YjU6YUIsYjMpfX0pfSk7YTIualF1ZXJ5PWEyLiQ9Ykc7aWYodHlwZW9mIGRlZmluZT09PSJmdW5jdGlvbiImJmRlZmluZS5hbWQmJmRlZmluZS5hbWQualF1ZXJ5KXtkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gYkd9KX19KSh3aW5kb3cpOyFmdW5jdGlvbihhKXthKGZ1bmN0aW9uKCl7YS5zdXBwb3J0LnRyYW5zaXRpb249KGZ1bmN0aW9uKCl7dmFyIGI9KGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYm9vdHN0cmFwIiksZD17V2Via2l0VHJhbnNpdGlvbjoid2Via2l0VHJhbnNpdGlvbkVuZCIsTW96VHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCIsT1RyYW5zaXRpb246Im9UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kIix0cmFuc2l0aW9uOiJ0cmFuc2l0aW9uZW5kIn0sYztmb3IoYyBpbiBkKXtpZihlLnN0eWxlW2NdIT09dW5kZWZpbmVkKXtyZXR1cm4gZFtjXX19fSgpKTtyZXR1cm4gYiYme2VuZDpifX0pKCl9KX0od2luZG93LmpRdWVyeSk7IWZ1bmN0aW9uKGMpe3ZhciBiPSdbZGF0YS1kaXNtaXNzPSJhbGVydCJdJyxhPWZ1bmN0aW9uKGQpe2MoZCkub24oImNsaWNrIixiLHRoaXMuY2xvc2UpfTthLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbihpKXt2YXIgaD1jKHRoaXMpLGY9aC5hdHRyKCJkYXRhLXRhcmdldCIpLGc7aWYoIWYpe2Y9aC5hdHRyKCJocmVmIik7Zj1mJiZmLnJlcGxhY2UoLy4qKD89I1teXHNdKiQpLywiIil9Zz1jKGYpO2kmJmkucHJldmVudERlZmF1bHQoKTtnLmxlbmd0aHx8KGc9aC5oYXNDbGFzcygiYWxlcnQiKT9oOmgucGFyZW50KCkpO2cudHJpZ2dlcihpPWMuRXZlbnQoImNsb3NlIikpO2lmKGkuaXNEZWZhdWx0UHJldmVudGVkKCkpe3JldHVybn1nLnJlbW92ZUNsYXNzKCJpbiIpO2Z1bmN0aW9uIGQoKXtnLnRyaWdnZXIoImNsb3NlZCIpLnJlbW92ZSgpfWMuc3VwcG9ydC50cmFuc2l0aW9uJiZnLmhhc0NsYXNzKCJmYWRlIik/Zy5vbihjLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZCk6ZCgpfTtjLmZuLmFsZXJ0PWZ1bmN0aW9uKGQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZj1jKHRoaXMpLGU9Zi5kYXRhKCJhbGVydCIpO2lmKCFlKXtmLmRhdGEoImFsZXJ0IiwoZT1uZXcgYSh0aGlzKSkpfWlmKHR5cGVvZiBkPT0ic3RyaW5nIil7ZVtkXS5jYWxsKGYpfX0pfTtjLmZuLmFsZXJ0LkNvbnN0cnVjdG9yPWE7YyhmdW5jdGlvbigpe2MoImJvZHkiKS5vbigiY2xpY2suYWxlcnQuZGF0YS1hcGkiLGIsYS5wcm90b3R5cGUuY2xvc2UpfSl9KHdpbmRvdy5qUXVlcnkpOyFmdW5jdGlvbihiKXt2YXIgYT1mdW5jdGlvbihkLGMpe3RoaXMuJGVsZW1lbnQ9YihkKTt0aGlzLm9wdGlvbnM9Yi5leHRlbmQoe30sYi5mbi5idXR0b24uZGVmYXVsdHMsYyl9O2EucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGYpe3ZhciBoPSJkaXNhYmxlZCIsYz10aGlzLiRlbGVtZW50LGU9Yy5kYXRhKCksZz1jLmlzKCJpbnB1dCIpPyJ2YWwiOiJodG1sIjtmPWYrIlRleHQiO2UucmVzZXRUZXh0fHxjLmRhdGEoInJlc2V0VGV4dCIsY1tnXSgpKTtjW2ddKGVbZl18fHRoaXMub3B0aW9uc1tmXSk7c2V0VGltZW91dChmdW5jdGlvbigpe2Y9PSJsb2FkaW5nVGV4dCI/Yy5hZGRDbGFzcyhoKS5hdHRyKGgsaCk6Yy5yZW1vdmVDbGFzcyhoKS5yZW1vdmVBdHRyKGgpfSwwKX07YS5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcy4kZWxlbWVudC5wYXJlbnQoJ1tkYXRhLXRvZ2dsZT0iYnV0dG9ucy1yYWRpbyJdJyk7YyYmYy5maW5kKCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpO3RoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoImFjdGl2ZSIpfTtiLmZuLmJ1dHRvbj1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGY9Yih0aGlzKSxlPWYuZGF0YSgiYnV0dG9uIiksZD10eXBlb2YgYz09Im9iamVjdCImJmM7aWYoIWUpe2YuZGF0YSgiYnV0dG9uIiwoZT1uZXcgYSh0aGlzLGQpKSl9aWYoYz09InRvZ2dsZSIpe2UudG9nZ2xlKCl9ZWxzZXtpZihjKXtlLnNldFN0YXRlKGMpfX19KX07Yi5mbi5idXR0b24uZGVmYXVsdHM9e2xvYWRpbmdUZXh0OiJsb2FkaW5nLi4uIn07Yi5mbi5idXR0b24uQ29uc3RydWN0b3I9YTtiKGZ1bmN0aW9uKCl7YigiYm9keSIpLm9uKCJjbGljay5idXR0b24uZGF0YS1hcGkiLCJbZGF0YS10b2dnbGVePWJ1dHRvbl0iLGZ1bmN0aW9uKGQpe3ZhciBjPWIoZC50YXJnZXQpO2lmKCFjLmhhc0NsYXNzKCJidG4iKSl7Yz1jLmNsb3Nlc3QoIi5idG4iKX1jLmJ1dHRvbigidG9nZ2xlIil9KX0pfSh3aW5kb3cualF1ZXJ5KTshZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oZCxjKXt0aGlzLiRlbGVtZW50PWEoZCk7dGhpcy5vcHRpb25zPWM7dGhpcy5vcHRpb25zLnNsaWRlJiZ0aGlzLnNsaWRlKHRoaXMub3B0aW9ucy5zbGlkZSk7dGhpcy5vcHRpb25zLnBhdXNlPT0iaG92ZXIiJiZ0aGlzLiRlbGVtZW50Lm9uKCJtb3VzZWVudGVyIixhLnByb3h5KHRoaXMucGF1c2UsdGhpcykpLm9uKCJtb3VzZWxlYXZlIixhLnByb3h5KHRoaXMuY3ljbGUsdGhpcykpfTtiLnByb3RvdHlwZT17Y3ljbGU6ZnVuY3Rpb24oYyl7aWYoIWMpe3RoaXMucGF1c2VkPWZhbHNlfXRoaXMub3B0aW9ucy5pbnRlcnZhbCYmIXRoaXMucGF1c2VkJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbChhLnByb3h5KHRoaXMubmV4dCx0aGlzKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKTtyZXR1cm4gdGhpc30sdG86ZnVuY3Rpb24oZyl7dmFyIGM9dGhpcy4kZWxlbWVudC5maW5kKCIuaXRlbS5hY3RpdmUiKSxkPWMucGFyZW50KCkuY2hpbGRyZW4oKSxlPWQuaW5kZXgoYyksZj10aGlzO2lmKGc+KGQubGVuZ3RoLTEpfHxnPDApe3JldHVybn1pZih0aGlzLnNsaWRpbmcpe3JldHVybiB0aGlzLiRlbGVtZW50Lm9uZSgic2xpZCIsZnVuY3Rpb24oKXtmLnRvKGcpfSl9aWYoZT09Zyl7cmV0dXJuIHRoaXMucGF1c2UoKS5jeWNsZSgpfXJldHVybiB0aGlzLnNsaWRlKGc+ZT8ibmV4dCI6InByZXYiLGEoZFtnXSkpfSxwYXVzZTpmdW5jdGlvbihjKXtpZighYyl7dGhpcy5wYXVzZWQ9dHJ1ZX1pZih0aGlzLiRlbGVtZW50LmZpbmQoIi5uZXh0LCAucHJldiIpLmxlbmd0aCYmYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIoYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKTt0aGlzLmN5Y2xlKCl9Y2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKTt0aGlzLmludGVydmFsPW51bGw7cmV0dXJuIHRoaXN9LG5leHQ6ZnVuY3Rpb24oKXtpZih0aGlzLnNsaWRpbmcpe3JldHVybn1yZXR1cm4gdGhpcy5zbGlkZSgibmV4dCIpfSxwcmV2OmZ1bmN0aW9uKCl7aWYodGhpcy5zbGlkaW5nKXtyZXR1cm59cmV0dXJuIHRoaXMuc2xpZGUoInByZXYiKX0sc2xpZGU6ZnVuY3Rpb24oaixkKXt2YXIgbD10aGlzLiRlbGVtZW50LmZpbmQoIi5pdGVtLmFjdGl2ZSIpLGM9ZHx8bFtqXSgpLGk9dGhpcy5pbnRlcnZhbCxrPWo9PSJuZXh0Ij8ibGVmdCI6InJpZ2h0IixmPWo9PSJuZXh0Ij8iZmlyc3QiOiJsYXN0IixnPXRoaXMsaD1hLkV2ZW50KCJzbGlkZSIse3JlbGF0ZWRUYXJnZXQ6Y1swXX0pO3RoaXMuc2xpZGluZz10cnVlO2kmJnRoaXMucGF1c2UoKTtjPWMubGVuZ3RoP2M6dGhpcy4kZWxlbWVudC5maW5kKCIuaXRlbSIpW2ZdKCk7aWYoYy5oYXNDbGFzcygiYWN0aXZlIikpe3JldHVybn1pZihhLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygic2xpZGUiKSl7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGgpO2lmKGguaXNEZWZhdWx0UHJldmVudGVkKCkpe3JldHVybn1jLmFkZENsYXNzKGopO2NbMF0ub2Zmc2V0V2lkdGg7bC5hZGRDbGFzcyhrKTtjLmFkZENsYXNzKGspO3RoaXMuJGVsZW1lbnQub25lKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxmdW5jdGlvbigpe2MucmVtb3ZlQ2xhc3MoW2osa10uam9pbigiICIpKS5hZGRDbGFzcygiYWN0aXZlIik7bC5yZW1vdmVDbGFzcyhbImFjdGl2ZSIsa10uam9pbigiICIpKTtnLnNsaWRpbmc9ZmFsc2U7c2V0VGltZW91dChmdW5jdGlvbigpe2cuJGVsZW1lbnQudHJpZ2dlcigic2xpZCIpfSwwKX0pfWVsc2V7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGgpO2lmKGguaXNEZWZhdWx0UHJldmVudGVkKCkpe3JldHVybn1sLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTtjLmFkZENsYXNzKCJhY3RpdmUiKTt0aGlzLnNsaWRpbmc9ZmFsc2U7dGhpcy4kZWxlbWVudC50cmlnZ2VyKCJzbGlkIil9aSYmdGhpcy5jeWNsZSgpO3JldHVybiB0aGlzfX07YS5mbi5jYXJvdXNlbD1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGc9YSh0aGlzKSxmPWcuZGF0YSgiY2Fyb3VzZWwiKSxkPWEuZXh0ZW5kKHt9LGEuZm4uY2Fyb3VzZWwuZGVmYXVsdHMsdHlwZW9mIGM9PSJvYmplY3QiJiZjKSxlPXR5cGVvZiBjPT0ic3RyaW5nIj9jOmQuc2xpZGU7aWYoIWYpe2cuZGF0YSgiY2Fyb3VzZWwiLChmPW5ldyBiKHRoaXMsZCkpKX1pZih0eXBlb2YgYz09Im51bWJlciIpe2YudG8oYyl9ZWxzZXtpZihlKXtmW2VdKCl9ZWxzZXtpZihkLmludGVydmFsKXtmLmN5Y2xlKCl9fX19KX07YS5mbi5jYXJvdXNlbC5kZWZhdWx0cz17aW50ZXJ2YWw6NTAwMCxwYXVzZToiaG92ZXIifTthLmZuLmNhcm91c2VsLkNvbnN0cnVjdG9yPWI7YShmdW5jdGlvbigpe2EoImJvZHkiKS5vbigiY2xpY2suY2Fyb3VzZWwuZGF0YS1hcGkiLCJbZGF0YS1zbGlkZV0iLGZ1bmN0aW9uKGgpe3ZhciBnPWEodGhpcyksZCxjPWEoZy5hdHRyKCJkYXRhLXRhcmdldCIpfHwoZD1nLmF0dHIoImhyZWYiKSkmJmQucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIiKSksZj0hYy5kYXRhKCJtb2RhbCIpJiZhLmV4dGVuZCh7fSxjLmRhdGEoKSxnLmRhdGEoKSk7Yy5jYXJvdXNlbChmKTtoLnByZXZlbnREZWZhdWx0KCl9KX0pfSh3aW5kb3cualF1ZXJ5KTshZnVuY3Rpb24oYSl7dmFyIGI9ZnVuY3Rpb24oZCxjKXt0aGlzLiRlbGVtZW50PWEoZCk7dGhpcy5vcHRpb25zPWEuZXh0ZW5kKHt9LGEuZm4uY29sbGFwc2UuZGVmYXVsdHMsYyk7aWYodGhpcy5vcHRpb25zLnBhcmVudCl7dGhpcy4kcGFyZW50PWEodGhpcy5vcHRpb25zLnBhcmVudCl9dGhpcy5vcHRpb25zLnRvZ2dsZSYmdGhpcy50b2dnbGUoKX07Yi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmIsZGltZW5zaW9uOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcy4kZWxlbWVudC5oYXNDbGFzcygid2lkdGgiKTtyZXR1cm4gYz8id2lkdGgiOiJoZWlnaHQifSxzaG93OmZ1bmN0aW9uKCl7dmFyIGYsYyxlLGQ7aWYodGhpcy50cmFuc2l0aW9uaW5nKXtyZXR1cm59Zj10aGlzLmRpbWVuc2lvbigpO2M9YS5jYW1lbENhc2UoWyJzY3JvbGwiLGZdLmpvaW4oIi0iKSk7ZT10aGlzLiRwYXJlbnQmJnRoaXMuJHBhcmVudC5maW5kKCI+IC5hY2NvcmRpb24tZ3JvdXAgPiAuaW4iKTtpZihlJiZlLmxlbmd0aCl7ZD1lLmRhdGEoImNvbGxhcHNlIik7aWYoZCYmZC50cmFuc2l0aW9uaW5nKXtyZXR1cm59ZS5jb2xsYXBzZSgiaGlkZSIpO2R8fGUuZGF0YSgiY29sbGFwc2UiLG51bGwpfXRoaXMuJGVsZW1lbnRbZl0oMCk7dGhpcy50cmFuc2l0aW9uKCJhZGRDbGFzcyIsYS5FdmVudCgic2hvdyIpLCJzaG93biIpO2Euc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50W2ZdKHRoaXMuJGVsZW1lbnRbMF1bY10pfSxoaWRlOmZ1bmN0aW9uKCl7dmFyIGM7aWYodGhpcy50cmFuc2l0aW9uaW5nKXtyZXR1cm59Yz10aGlzLmRpbWVuc2lvbigpO3RoaXMucmVzZXQodGhpcy4kZWxlbWVudFtjXSgpKTt0aGlzLnRyYW5zaXRpb24oInJlbW92ZUNsYXNzIixhLkV2ZW50KCJoaWRlIiksImhpZGRlbiIpO3RoaXMuJGVsZW1lbnRbY10oMCl9LHJlc2V0OmZ1bmN0aW9uKGMpe3ZhciBkPXRoaXMuZGltZW5zaW9uKCk7dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcygiY29sbGFwc2UiKVtkXShjfHwiYXV0byIpWzBdLm9mZnNldFdpZHRoO3RoaXMuJGVsZW1lbnRbYyE9PW51bGw/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXSgiY29sbGFwc2UiKTtyZXR1cm4gdGhpc30sdHJhbnNpdGlvbjpmdW5jdGlvbihnLGQsZSl7dmFyIGY9dGhpcyxjPWZ1bmN0aW9uKCl7aWYoZC50eXBlPT0ic2hvdyIpe2YucmVzZXQoKX1mLnRyYW5zaXRpb25pbmc9MDtmLiRlbGVtZW50LnRyaWdnZXIoZSl9O3RoaXMuJGVsZW1lbnQudHJpZ2dlcihkKTtpZihkLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtyZXR1cm59dGhpcy50cmFuc2l0aW9uaW5nPTE7dGhpcy4kZWxlbWVudFtnXSgiaW4iKTthLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiY29sbGFwc2UiKT90aGlzLiRlbGVtZW50Lm9uZShhLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsYyk6YygpfSx0b2dnbGU6ZnVuY3Rpb24oKXt0aGlzW3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImluIik/ImhpZGUiOiJzaG93Il0oKX19O2EuZm4uY29sbGFwc2U9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBmPWEodGhpcyksZT1mLmRhdGEoImNvbGxhcHNlIiksZD10eXBlb2YgYz09Im9iamVjdCImJmM7aWYoIWUpe2YuZGF0YSgiY29sbGFwc2UiLChlPW5ldyBiKHRoaXMsZCkpKX1pZih0eXBlb2YgYz09InN0cmluZyIpe2VbY10oKX19KX07YS5mbi5jb2xsYXBzZS5kZWZhdWx0cz17dG9nZ2xlOnRydWV9O2EuZm4uY29sbGFwc2UuQ29uc3RydWN0b3I9YjthKGZ1bmN0aW9uKCl7YSgiYm9keSIpLm9uKCJjbGljay5jb2xsYXBzZS5kYXRhLWFwaSIsIltkYXRhLXRvZ2dsZT1jb2xsYXBzZV0iLGZ1bmN0aW9uKGgpe3ZhciBnPWEodGhpcyksYyxmPWcuYXR0cigiZGF0YS10YXJnZXQiKXx8aC5wcmV2ZW50RGVmYXVsdCgpfHwoYz1nLmF0dHIoImhyZWYiKSkmJmMucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIiKSxkPWEoZikuZGF0YSgiY29sbGFwc2UiKT8idG9nZ2xlIjpnLmRhdGEoKTtnW2EoZikuaGFzQ2xhc3MoImluIik/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXSgiY29sbGFwc2VkIik7YShmKS5jb2xsYXBzZShkKX0pfSl9KHdpbmRvdy5qUXVlcnkpOyFmdW5jdGlvbihlKXt2YXIgYj0iW2RhdGEtdG9nZ2xlPWRyb3Bkb3duXSIsYT1mdW5jdGlvbihnKXt2YXIgZj1lKGcpLm9uKCJjbGljay5kcm9wZG93bi5kYXRhLWFwaSIsdGhpcy50b2dnbGUpO2UoImh0bWwiKS5vbigiY2xpY2suZHJvcGRvd24uZGF0YS1hcGkiLGZ1bmN0aW9uKCl7Zi5wYXJlbnQoKS5yZW1vdmVDbGFzcygib3BlbiIpfSl9O2EucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphLHRvZ2dsZTpmdW5jdGlvbihpKXt2YXIgaD1lKHRoaXMpLGcsZjtpZihoLmlzKCIuZGlzYWJsZWQsIDpkaXNhYmxlZCIpKXtyZXR1cm59Zz1kKGgpO2Y9Zy5oYXNDbGFzcygib3BlbiIpO2MoKTtpZighZil7Zy50b2dnbGVDbGFzcygib3BlbiIpO2guZm9jdXMoKX1yZXR1cm4gZmFsc2V9LGtleWRvd246ZnVuY3Rpb24oayl7dmFyIGosbCxmLGksaCxnO2lmKCEvKDM4fDQwfDI3KS8udGVzdChrLmtleUNvZGUpKXtyZXR1cm59aj1lKHRoaXMpO2sucHJldmVudERlZmF1bHQoKTtrLnN0b3BQcm9wYWdhdGlvbigpO2lmKGouaXMoIi5kaXNhYmxlZCwgOmRpc2FibGVkIikpe3JldHVybn1pPWQoaik7aD1pLmhhc0NsYXNzKCJvcGVuIik7aWYoIWh8fChoJiZrLmtleUNvZGU9PTI3KSl7cmV0dXJuIGouY2xpY2soKX1sPWUoIltyb2xlPW1lbnVdIGxpOm5vdCguZGl2aWRlcikgYSIsaSk7aWYoIWwubGVuZ3RoKXtyZXR1cm59Zz1sLmluZGV4KGwuZmlsdGVyKCI6Zm9jdXMiKSk7aWYoay5rZXlDb2RlPT0zOCYmZz4wKXtnLS19aWYoay5rZXlDb2RlPT00MCYmZzxsLmxlbmd0aC0xKXtnKyt9aWYoIX5nKXtnPTB9bC5lcShnKS5mb2N1cygpfX07ZnVuY3Rpb24gYygpe2QoZShiKSkucmVtb3ZlQ2xhc3MoIm9wZW4iKX1mdW5jdGlvbiBkKGgpe3ZhciBmPWguYXR0cigiZGF0YS10YXJnZXQiKSxnO2lmKCFmKXtmPWguYXR0cigiaHJlZiIpO2Y9ZiYmZi5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIpfWc9ZShmKTtnLmxlbmd0aHx8KGc9aC5wYXJlbnQoKSk7cmV0dXJuIGd9ZS5mbi5kcm9wZG93bj1mdW5jdGlvbihmKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9ZSh0aGlzKSxnPWguZGF0YSgiZHJvcGRvd24iKTtpZighZyl7aC5kYXRhKCJkcm9wZG93biIsKGc9bmV3IGEodGhpcykpKX1pZih0eXBlb2YgZj09InN0cmluZyIpe2dbZl0uY2FsbChoKX19KX07ZS5mbi5kcm9wZG93bi5Db25zdHJ1Y3Rvcj1hO2UoZnVuY3Rpb24oKXtlKCJodG1sIikub24oImNsaWNrLmRyb3Bkb3duLmRhdGEtYXBpIHRvdWNoc3RhcnQuZHJvcGRvd24uZGF0YS1hcGkiLGMpO2UoImJvZHkiKS5vbigiY2xpY2suZHJvcGRvd24gdG91Y2hzdGFydC5kcm9wZG93bi5kYXRhLWFwaSIsIi5kcm9wZG93biIsZnVuY3Rpb24oZil7Zi5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKCJjbGljay5kcm9wZG93bi5kYXRhLWFwaSB0b3VjaHN0YXJ0LmRyb3Bkb3duLmRhdGEtYXBpIixiLGEucHJvdG90eXBlLnRvZ2dsZSkub24oImtleWRvd24uZHJvcGRvd24uZGF0YS1hcGkgdG91Y2hzdGFydC5kcm9wZG93bi5kYXRhLWFwaSIsYisiLCBbcm9sZT1tZW51XSIsYS5wcm90b3R5cGUua2V5ZG93bil9KX0od2luZG93LmpRdWVyeSk7IWZ1bmN0aW9uKGIpe3ZhciBhPWZ1bmN0aW9uKGQsYyl7dGhpcy5vcHRpb25zPWM7dGhpcy4kZWxlbWVudD1iKGQpLmRlbGVnYXRlKCdbZGF0YS1kaXNtaXNzPSJtb2RhbCJdJywiY2xpY2suZGlzbWlzcy5tb2RhbCIsYi5wcm94eSh0aGlzLmhpZGUsdGhpcykpO3RoaXMub3B0aW9ucy5yZW1vdGUmJnRoaXMuJGVsZW1lbnQuZmluZCgiLm1vZGFsLWJvZHkiKS5sb2FkKHRoaXMub3B0aW9ucy5yZW1vdGUpfTthLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YSx0b2dnbGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1shdGhpcy5pc1Nob3duPyJzaG93IjoiaGlkZSJdKCl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGQ9Yi5FdmVudCgic2hvdyIpO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihkKTtpZih0aGlzLmlzU2hvd258fGQuaXNEZWZhdWx0UHJldmVudGVkKCkpe3JldHVybn1iKCJib2R5IikuYWRkQ2xhc3MoIm1vZGFsLW9wZW4iKTt0aGlzLmlzU2hvd249dHJ1ZTt0aGlzLmVzY2FwZSgpO3RoaXMuYmFja2Ryb3AoZnVuY3Rpb24oKXt2YXIgZT1iLnN1cHBvcnQudHJhbnNpdGlvbiYmYy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpO2lmKCFjLiRlbGVtZW50LnBhcmVudCgpLmxlbmd0aCl7Yy4kZWxlbWVudC5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KX1jLiRlbGVtZW50LnNob3coKTtpZihlKXtjLiRlbGVtZW50WzBdLm9mZnNldFdpZHRofWMuJGVsZW1lbnQuYWRkQ2xhc3MoImluIikuYXR0cigiYXJpYS1oaWRkZW4iLGZhbHNlKS5mb2N1cygpO2MuZW5mb3JjZUZvY3VzKCk7ZT9jLiRlbGVtZW50Lm9uZShiLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXtjLiRlbGVtZW50LnRyaWdnZXIoInNob3duIil9KTpjLiRlbGVtZW50LnRyaWdnZXIoInNob3duIil9KX0saGlkZTpmdW5jdGlvbihkKXtkJiZkLnByZXZlbnREZWZhdWx0KCk7dmFyIGM9dGhpcztkPWIuRXZlbnQoImhpZGUiKTt0aGlzLiRlbGVtZW50LnRyaWdnZXIoZCk7aWYoIXRoaXMuaXNTaG93bnx8ZC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7cmV0dXJufXRoaXMuaXNTaG93bj1mYWxzZTtiKCJib2R5IikucmVtb3ZlQ2xhc3MoIm1vZGFsLW9wZW4iKTt0aGlzLmVzY2FwZSgpO2IoZG9jdW1lbnQpLm9mZigiZm9jdXNpbi5tb2RhbCIpO3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImluIikuYXR0cigiYXJpYS1oaWRkZW4iLHRydWUpO2Iuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/dGhpcy5oaWRlV2l0aFRyYW5zaXRpb24oKTp0aGlzLmhpZGVNb2RhbCgpfSxlbmZvcmNlRm9jdXM6ZnVuY3Rpb24oKXt2YXIgYz10aGlzO2IoZG9jdW1lbnQpLm9uKCJmb2N1c2luLm1vZGFsIixmdW5jdGlvbihkKXtpZihjLiRlbGVtZW50WzBdIT09ZC50YXJnZXQmJiFjLiRlbGVtZW50LmhhcyhkLnRhcmdldCkubGVuZ3RoKXtjLiRlbGVtZW50LmZvY3VzKCl9fSl9LGVzY2FwZTpmdW5jdGlvbigpe3ZhciBjPXRoaXM7aWYodGhpcy5pc1Nob3duJiZ0aGlzLm9wdGlvbnMua2V5Ym9hcmQpe3RoaXMuJGVsZW1lbnQub24oImtleXVwLmRpc21pc3MubW9kYWwiLGZ1bmN0aW9uKGQpe2Qud2hpY2g9PTI3JiZjLmhpZGUoKX0pfWVsc2V7aWYoIXRoaXMuaXNTaG93bil7dGhpcy4kZWxlbWVudC5vZmYoImtleXVwLmRpc21pc3MubW9kYWwiKX19fSxoaWRlV2l0aFRyYW5zaXRpb246ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGQ9c2V0VGltZW91dChmdW5jdGlvbigpe2MuJGVsZW1lbnQub2ZmKGIuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCk7Yy5oaWRlTW9kYWwoKX0sNTAwKTt0aGlzLiRlbGVtZW50Lm9uZShiLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZCk7Yy5oaWRlTW9kYWwoKX0pfSxoaWRlTW9kYWw6ZnVuY3Rpb24oYyl7dGhpcy4kZWxlbWVudC5oaWRlKCkudHJpZ2dlcigiaGlkZGVuIik7dGhpcy5iYWNrZHJvcCgpfSxyZW1vdmVCYWNrZHJvcDpmdW5jdGlvbigpe3RoaXMuJGJhY2tkcm9wLnJlbW92ZSgpO3RoaXMuJGJhY2tkcm9wPW51bGx9LGJhY2tkcm9wOmZ1bmN0aW9uKGYpe3ZhciBlPXRoaXMsZD10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJmYWRlIik/ImZhZGUiOiIiO2lmKHRoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmJhY2tkcm9wKXt2YXIgYz1iLnN1cHBvcnQudHJhbnNpdGlvbiYmZDt0aGlzLiRiYWNrZHJvcD1iKCc8ZGl2IGNsYXNzPSJtb2RhbC1iYWNrZHJvcCAnK2QrJyIgLz4nKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KTtpZih0aGlzLm9wdGlvbnMuYmFja2Ryb3AhPSJzdGF0aWMiKXt0aGlzLiRiYWNrZHJvcC5jbGljayhiLnByb3h5KHRoaXMuaGlkZSx0aGlzKSl9aWYoYyl7dGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGh9dGhpcy4kYmFja2Ryb3AuYWRkQ2xhc3MoImluIik7Yz90aGlzLiRiYWNrZHJvcC5vbmUoYi5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGYpOmYoKX1lbHNle2lmKCF0aGlzLmlzU2hvd24mJnRoaXMuJGJhY2tkcm9wKXt0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcygiaW4iKTtiLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpP3RoaXMuJGJhY2tkcm9wLm9uZShiLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsYi5wcm94eSh0aGlzLnJlbW92ZUJhY2tkcm9wLHRoaXMpKTp0aGlzLnJlbW92ZUJhY2tkcm9wKCl9ZWxzZXtpZihmKXtmKCl9fX19fTtiLmZuLm1vZGFsPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZj1iKHRoaXMpLGU9Zi5kYXRhKCJtb2RhbCIpLGQ9Yi5leHRlbmQoe30sYi5mbi5tb2RhbC5kZWZhdWx0cyxmLmRhdGEoKSx0eXBlb2YgYz09Im9iamVjdCImJmMpO2lmKCFlKXtmLmRhdGEoIm1vZGFsIiwoZT1uZXcgYSh0aGlzLGQpKSl9aWYodHlwZW9mIGM9PSJzdHJpbmciKXtlW2NdKCl9ZWxzZXtpZihkLnNob3cpe2Uuc2hvdygpfX19KX07Yi5mbi5tb2RhbC5kZWZhdWx0cz17YmFja2Ryb3A6dHJ1ZSxrZXlib2FyZDp0cnVlLHNob3c6dHJ1ZX07Yi5mbi5tb2RhbC5Db25zdHJ1Y3Rvcj1hO2IoZnVuY3Rpb24oKXtiKCJib2R5Iikub24oImNsaWNrLm1vZGFsLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJtb2RhbCJdJyxmdW5jdGlvbihoKXt2YXIgZz1iKHRoaXMpLGQ9Zy5hdHRyKCJocmVmIiksYz1iKGcuYXR0cigiZGF0YS10YXJnZXQiKXx8KGQmJmQucmVwbGFjZSgvLiooPz0jW15cc10rJCkvLCIiKSkpLGY9Yy5kYXRhKCJtb2RhbCIpPyJ0b2dnbGUiOmIuZXh0ZW5kKHtyZW1vdGU6IS8jLy50ZXN0KGQpJiZkfSxjLmRhdGEoKSxnLmRhdGEoKSk7aC5wcmV2ZW50RGVmYXVsdCgpO2MubW9kYWwoZikub25lKCJoaWRlIixmdW5jdGlvbigpe2cuZm9jdXMoKX0pfSl9KX0od2luZG93LmpRdWVyeSk7IWZ1bmN0aW9uKGIpe3ZhciBhPWZ1bmN0aW9uKGQsYyl7dGhpcy5pbml0KCJ0b29sdGlwIixkLGMpfTthLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YSxpbml0OmZ1bmN0aW9uKGYsZSxkKXt2YXIgZyxjO3RoaXMudHlwZT1mO3RoaXMuJGVsZW1lbnQ9YihlKTt0aGlzLm9wdGlvbnM9dGhpcy5nZXRPcHRpb25zKGQpO3RoaXMuZW5hYmxlZD10cnVlO2lmKHRoaXMub3B0aW9ucy50cmlnZ2VyPT0iY2xpY2siKXt0aGlzLiRlbGVtZW50Lm9uKCJjbGljay4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYi5wcm94eSh0aGlzLnRvZ2dsZSx0aGlzKSl9ZWxzZXtpZih0aGlzLm9wdGlvbnMudHJpZ2dlciE9Im1hbnVhbCIpe2c9dGhpcy5vcHRpb25zLnRyaWdnZXI9PSJob3ZlciI/Im1vdXNlZW50ZXIiOiJmb2N1cyI7Yz10aGlzLm9wdGlvbnMudHJpZ2dlcj09ImhvdmVyIj8ibW91c2VsZWF2ZSI6ImJsdXIiO3RoaXMuJGVsZW1lbnQub24oZysiLiIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3RvcixiLnByb3h5KHRoaXMuZW50ZXIsdGhpcykpO3RoaXMuJGVsZW1lbnQub24oYysiLiIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3RvcixiLnByb3h5KHRoaXMubGVhdmUsdGhpcykpfX10aGlzLm9wdGlvbnMuc2VsZWN0b3I/KHRoaXMuX29wdGlvbnM9Yi5leHRlbmQoe30sdGhpcy5vcHRpb25zLHt0cmlnZ2VyOiJtYW51YWwiLHNlbGVjdG9yOiIifSkpOnRoaXMuZml4VGl0bGUoKX0sZ2V0T3B0aW9uczpmdW5jdGlvbihjKXtjPWIuZXh0ZW5kKHt9LGIuZm5bdGhpcy50eXBlXS5kZWZhdWx0cyxjLHRoaXMuJGVsZW1lbnQuZGF0YSgpKTtpZihjLmRlbGF5JiZ0eXBlb2YgYy5kZWxheT09Im51bWJlciIpe2MuZGVsYXk9e3Nob3c6Yy5kZWxheSxoaWRlOmMuZGVsYXl9fXJldHVybiBjfSxlbnRlcjpmdW5jdGlvbihkKXt2YXIgYz1iKGQuY3VycmVudFRhcmdldClbdGhpcy50eXBlXSh0aGlzLl9vcHRpb25zKS5kYXRhKHRoaXMudHlwZSk7aWYoIWMub3B0aW9ucy5kZWxheXx8IWMub3B0aW9ucy5kZWxheS5zaG93KXtyZXR1cm4gYy5zaG93KCl9Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7Yy5ob3ZlclN0YXRlPSJpbiI7dGhpcy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihjLmhvdmVyU3RhdGU9PSJpbiIpe2Muc2hvdygpfX0sYy5vcHRpb25zLmRlbGF5LnNob3cpfSxsZWF2ZTpmdW5jdGlvbihkKXt2YXIgYz1iKGQuY3VycmVudFRhcmdldClbdGhpcy50eXBlXSh0aGlzLl9vcHRpb25zKS5kYXRhKHRoaXMudHlwZSk7aWYodGhpcy50aW1lb3V0KXtjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KX1pZighYy5vcHRpb25zLmRlbGF5fHwhYy5vcHRpb25zLmRlbGF5LmhpZGUpe3JldHVybiBjLmhpZGUoKX1jLmhvdmVyU3RhdGU9Im91dCI7dGhpcy50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihjLmhvdmVyU3RhdGU9PSJvdXQiKXtjLmhpZGUoKX19LGMub3B0aW9ucy5kZWxheS5oaWRlKX0sc2hvdzpmdW5jdGlvbigpe3ZhciBnLGMsaSxlLGgsZCxmO2lmKHRoaXMuaGFzQ29udGVudCgpJiZ0aGlzLmVuYWJsZWQpe2c9dGhpcy50aXAoKTt0aGlzLnNldENvbnRlbnQoKTtpZih0aGlzLm9wdGlvbnMuYW5pbWF0aW9uKXtnLmFkZENsYXNzKCJmYWRlIil9ZD10eXBlb2YgdGhpcy5vcHRpb25zLnBsYWNlbWVudD09ImZ1bmN0aW9uIj90aGlzLm9wdGlvbnMucGxhY2VtZW50LmNhbGwodGhpcyxnWzBdLHRoaXMuJGVsZW1lbnRbMF0pOnRoaXMub3B0aW9ucy5wbGFjZW1lbnQ7Yz0vaW4vLnRlc3QoZCk7Zy5yZW1vdmUoKS5jc3Moe3RvcDowLGxlZnQ6MCxkaXNwbGF5OiJibG9jayJ9KS5hcHBlbmRUbyhjP3RoaXMuJGVsZW1lbnQ6ZG9jdW1lbnQuYm9keSk7aT10aGlzLmdldFBvc2l0aW9uKGMpO2U9Z1swXS5vZmZzZXRXaWR0aDtoPWdbMF0ub2Zmc2V0SGVpZ2h0O3N3aXRjaChjP2Quc3BsaXQoIiAiKVsxXTpkKXtjYXNlImJvdHRvbSI6Zj17dG9wOmkudG9wK2kuaGVpZ2h0LGxlZnQ6aS5sZWZ0K2kud2lkdGgvMi1lLzJ9O2JyZWFrO2Nhc2UidG9wIjpmPXt0b3A6aS50b3AtaCxsZWZ0OmkubGVmdCtpLndpZHRoLzItZS8yfTticmVhaztjYXNlImxlZnQiOmY9e3RvcDppLnRvcCtpLmhlaWdodC8yLWgvMixsZWZ0OmkubGVmdC1lfTticmVhaztjYXNlInJpZ2h0IjpmPXt0b3A6aS50b3AraS5oZWlnaHQvMi1oLzIsbGVmdDppLmxlZnQraS53aWR0aH07YnJlYWt9Zy5jc3MoZikuYWRkQ2xhc3MoZCkuYWRkQ2xhc3MoImluIil9fSxzZXRDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy50aXAoKSxjPXRoaXMuZ2V0VGl0bGUoKTtkLmZpbmQoIi50b29sdGlwLWlubmVyIilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0oYyk7ZC5yZW1vdmVDbGFzcygiZmFkZSBpbiB0b3AgYm90dG9tIGxlZnQgcmlnaHQiKX0saGlkZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMsZD10aGlzLnRpcCgpO2QucmVtb3ZlQ2xhc3MoImluIik7ZnVuY3Rpb24gZSgpe3ZhciBmPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLm9mZihiLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpLnJlbW92ZSgpfSw1MDApO2Qub25lKGIuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxmdW5jdGlvbigpe2NsZWFyVGltZW91dChmKTtkLnJlbW92ZSgpfSl9Yi5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJHRpcC5oYXNDbGFzcygiZmFkZSIpP2UoKTpkLnJlbW92ZSgpO3JldHVybiB0aGlzfSxmaXhUaXRsZTpmdW5jdGlvbigpe3ZhciBjPXRoaXMuJGVsZW1lbnQ7aWYoYy5hdHRyKCJ0aXRsZSIpfHx0eXBlb2YoYy5hdHRyKCJkYXRhLW9yaWdpbmFsLXRpdGxlIikpIT0ic3RyaW5nIil7Yy5hdHRyKCJkYXRhLW9yaWdpbmFsLXRpdGxlIixjLmF0dHIoInRpdGxlIil8fCIiKS5yZW1vdmVBdHRyKCJ0aXRsZSIpfX0saGFzQ29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl9LGdldFBvc2l0aW9uOmZ1bmN0aW9uKGMpe3JldHVybiBiLmV4dGVuZCh7fSwoYz97dG9wOjAsbGVmdDowfTp0aGlzLiRlbGVtZW50Lm9mZnNldCgpKSx7d2lkdGg6dGhpcy4kZWxlbWVudFswXS5vZmZzZXRXaWR0aCxoZWlnaHQ6dGhpcy4kZWxlbWVudFswXS5vZmZzZXRIZWlnaHR9KX0sZ2V0VGl0bGU6ZnVuY3Rpb24oKXt2YXIgZSxjPXRoaXMuJGVsZW1lbnQsZD10aGlzLm9wdGlvbnM7ZT1jLmF0dHIoImRhdGEtb3JpZ2luYWwtdGl0bGUiKXx8KHR5cGVvZiBkLnRpdGxlPT0iZnVuY3Rpb24iP2QudGl0bGUuY2FsbChjWzBdKTpkLnRpdGxlKTtyZXR1cm4gZX0sdGlwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHRpcD10aGlzLiR0aXB8fGIodGhpcy5vcHRpb25zLnRlbXBsYXRlKX0sdmFsaWRhdGU6ZnVuY3Rpb24oKXtpZighdGhpcy4kZWxlbWVudFswXS5wYXJlbnROb2RlKXt0aGlzLmhpZGUoKTt0aGlzLiRlbGVtZW50PW51bGw7dGhpcy5vcHRpb25zPW51bGx9fSxlbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9dHJ1ZX0sZGlzYWJsZTpmdW5jdGlvbigpe3RoaXMuZW5hYmxlZD1mYWxzZX0sdG9nZ2xlRW5hYmxlZDpmdW5jdGlvbigpe3RoaXMuZW5hYmxlZD0hdGhpcy5lbmFibGVkfSx0b2dnbGU6ZnVuY3Rpb24oKXt0aGlzW3RoaXMudGlwKCkuaGFzQ2xhc3MoImluIik/ImhpZGUiOiJzaG93Il0oKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGlkZSgpLiRlbGVtZW50Lm9mZigiLiIrdGhpcy50eXBlKS5yZW1vdmVEYXRhKHRoaXMudHlwZSl9fTtiLmZuLnRvb2x0aXA9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBmPWIodGhpcyksZT1mLmRhdGEoInRvb2x0aXAiKSxkPXR5cGVvZiBjPT0ib2JqZWN0IiYmYztpZighZSl7Zi5kYXRhKCJ0b29sdGlwIiwoZT1uZXcgYSh0aGlzLGQpKSl9aWYodHlwZW9mIGM9PSJzdHJpbmciKXtlW2NdKCl9fSl9O2IuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvcj1hO2IuZm4udG9vbHRpcC5kZWZhdWx0cz17YW5pbWF0aW9uOnRydWUscGxhY2VtZW50OiJ0b3AiLHNlbGVjdG9yOmZhbHNlLHRlbXBsYXRlOic8ZGl2IGNsYXNzPSJ0b29sdGlwIj48ZGl2IGNsYXNzPSJ0b29sdGlwLWFycm93Ij48L2Rpdj48ZGl2IGNsYXNzPSJ0b29sdGlwLWlubmVyIj48L2Rpdj48L2Rpdj4nLHRyaWdnZXI6ImhvdmVyIix0aXRsZToiIixkZWxheTowLGh0bWw6dHJ1ZX19KHdpbmRvdy5qUXVlcnkpOyFmdW5jdGlvbihiKXt2YXIgYT1mdW5jdGlvbihkLGMpe3RoaXMuaW5pdCgicG9wb3ZlciIsZCxjKX07YS5wcm90b3R5cGU9Yi5leHRlbmQoe30sYi5mbi50b29sdGlwLkNvbnN0cnVjdG9yLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6YSxzZXRDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50aXAoKSxkPXRoaXMuZ2V0VGl0bGUoKSxjPXRoaXMuZ2V0Q29udGVudCgpO2UuZmluZCgiLnBvcG92ZXItdGl0bGUiKVt0aGlzLm9wdGlvbnMuaHRtbD8iaHRtbCI6InRleHQiXShkKTtlLmZpbmQoIi5wb3BvdmVyLWNvbnRlbnQgPiAqIilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0oYyk7ZS5yZW1vdmVDbGFzcygiZmFkZSB0b3AgYm90dG9tIGxlZnQgcmlnaHQgaW4iKX0saGFzQ29udGVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl8fHRoaXMuZ2V0Q29udGVudCgpfSxnZXRDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGQsYz10aGlzLiRlbGVtZW50LGU9dGhpcy5vcHRpb25zO2Q9Yy5hdHRyKCJkYXRhLWNvbnRlbnQiKXx8KHR5cGVvZiBlLmNvbnRlbnQ9PSJmdW5jdGlvbiI/ZS5jb250ZW50LmNhbGwoY1swXSk6ZS5jb250ZW50KTtyZXR1cm4gZH0sdGlwOmZ1bmN0aW9uKCl7aWYoIXRoaXMuJHRpcCl7dGhpcy4kdGlwPWIodGhpcy5vcHRpb25zLnRlbXBsYXRlKX1yZXR1cm4gdGhpcy4kdGlwfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5oaWRlKCkuJGVsZW1lbnQub2ZmKCIuIit0aGlzLnR5cGUpLnJlbW92ZURhdGEodGhpcy50eXBlKX19KTtiLmZuLnBvcG92ZXI9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBmPWIodGhpcyksZT1mLmRhdGEoInBvcG92ZXIiKSxkPXR5cGVvZiBjPT0ib2JqZWN0IiYmYztpZighZSl7Zi5kYXRhKCJwb3BvdmVyIiwoZT1uZXcgYSh0aGlzLGQpKSl9aWYodHlwZW9mIGM9PSJzdHJpbmciKXtlW2NdKCl9fSl9O2IuZm4ucG9wb3Zlci5Db25zdHJ1Y3Rvcj1hO2IuZm4ucG9wb3Zlci5kZWZhdWx0cz1iLmV4dGVuZCh7fSxiLmZuLnRvb2x0aXAuZGVmYXVsdHMse3BsYWNlbWVudDoicmlnaHQiLHRyaWdnZXI6ImNsaWNrIixjb250ZW50OiIiLHRlbXBsYXRlOic8ZGl2IGNsYXNzPSJwb3BvdmVyIj48ZGl2IGNsYXNzPSJhcnJvdyI+PC9kaXY+PGRpdiBjbGFzcz0icG9wb3Zlci1pbm5lciI+PGgzIGNsYXNzPSJwb3BvdmVyLXRpdGxlIj48L2gzPjxkaXYgY2xhc3M9InBvcG92ZXItY29udGVudCI+PHA+PC9wPjwvZGl2PjwvZGl2PjwvZGl2Pid9KX0od2luZG93LmpRdWVyeSk7IWZ1bmN0aW9uKGIpe2Z1bmN0aW9uIGEoZixlKXt2YXIgZz1iLnByb3h5KHRoaXMucHJvY2Vzcyx0aGlzKSxjPWIoZikuaXMoImJvZHkiKT9iKHdpbmRvdyk6YihmKSxkO3RoaXMub3B0aW9ucz1iLmV4dGVuZCh7fSxiLmZuLnNjcm9sbHNweS5kZWZhdWx0cyxlKTt0aGlzLiRzY3JvbGxFbGVtZW50PWMub24oInNjcm9sbC5zY3JvbGwtc3B5LmRhdGEtYXBpIixnKTt0aGlzLnNlbGVjdG9yPSh0aGlzLm9wdGlvbnMudGFyZ2V0fHwoKGQ9YihmKS5hdHRyKCJocmVmIikpJiZkLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIikpfHwiIikrIiAubmF2IGxpID4gYSI7dGhpcy4kYm9keT1iKCJib2R5Iik7dGhpcy5yZWZyZXNoKCk7dGhpcy5wcm9jZXNzKCl9YS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmEscmVmcmVzaDpmdW5jdGlvbigpe3ZhciBjPXRoaXMsZDt0aGlzLm9mZnNldHM9YihbXSk7dGhpcy50YXJnZXRzPWIoW10pO2Q9dGhpcy4kYm9keS5maW5kKHRoaXMuc2VsZWN0b3IpLm1hcChmdW5jdGlvbigpe3ZhciBmPWIodGhpcyksZT1mLmRhdGEoInRhcmdldCIpfHxmLmF0dHIoImhyZWYiKSxnPS9eI1x3Ly50ZXN0KGUpJiZiKGUpO3JldHVybihnJiZnLmxlbmd0aCYmW1tnLnBvc2l0aW9uKCkudG9wLGVdXSl8fG51bGx9KS5zb3J0KGZ1bmN0aW9uKGYsZSl7cmV0dXJuIGZbMF0tZVswXX0pLmVhY2goZnVuY3Rpb24oKXtjLm9mZnNldHMucHVzaCh0aGlzWzBdKTtjLnRhcmdldHMucHVzaCh0aGlzWzFdKX0pfSxwcm9jZXNzOmZ1bmN0aW9uKCl7dmFyIGg9dGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSt0aGlzLm9wdGlvbnMub2Zmc2V0LGU9dGhpcy4kc2Nyb2xsRWxlbWVudFswXS5zY3JvbGxIZWlnaHR8fHRoaXMuJGJvZHlbMF0uc2Nyb2xsSGVpZ2h0LGc9ZS10aGlzLiRzY3JvbGxFbGVtZW50LmhlaWdodCgpLGY9dGhpcy5vZmZzZXRzLGM9dGhpcy50YXJnZXRzLGo9dGhpcy5hY3RpdmVUYXJnZXQsZDtpZihoPj1nKXtyZXR1cm4gaiE9KGQ9Yy5sYXN0KClbMF0pJiZ0aGlzLmFjdGl2YXRlKGQpfWZvcihkPWYubGVuZ3RoO2QtLTspe2ohPWNbZF0mJmg+PWZbZF0mJighZltkKzFdfHxoPD1mW2QrMV0pJiZ0aGlzLmFjdGl2YXRlKGNbZF0pfX0sYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dmFyIGQsYzt0aGlzLmFjdGl2ZVRhcmdldD1lO2IodGhpcy5zZWxlY3RvcikucGFyZW50KCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpO2M9dGhpcy5zZWxlY3RvcisnW2RhdGEtdGFyZ2V0PSInK2UrJyJdLCcrdGhpcy5zZWxlY3RvcisnW2hyZWY9IicrZSsnIl0nO2Q9YihjKS5wYXJlbnQoImxpIikuYWRkQ2xhc3MoImFjdGl2ZSIpO2lmKGQucGFyZW50KCIuZHJvcGRvd24tbWVudSIpLmxlbmd0aCl7ZD1kLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpfWQudHJpZ2dlcigiYWN0aXZhdGUiKX19O2IuZm4uc2Nyb2xsc3B5PWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZj1iKHRoaXMpLGU9Zi5kYXRhKCJzY3JvbGxzcHkiKSxkPXR5cGVvZiBjPT0ib2JqZWN0IiYmYztpZighZSl7Zi5kYXRhKCJzY3JvbGxzcHkiLChlPW5ldyBhKHRoaXMsZCkpKX1pZih0eXBlb2YgYz09InN0cmluZyIpe2VbY10oKX19KX07Yi5mbi5zY3JvbGxzcHkuQ29uc3RydWN0b3I9YTtiLmZuLnNjcm9sbHNweS5kZWZhdWx0cz17b2Zmc2V0OjEwfTtiKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7YignW2RhdGEtc3B5PSJzY3JvbGwiXScpLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1iKHRoaXMpO2Muc2Nyb2xsc3B5KGMuZGF0YSgpKX0pfSl9KHdpbmRvdy5qUXVlcnkpOyFmdW5jdGlvbihiKXt2YXIgYT1mdW5jdGlvbihjKXt0aGlzLmVsZW1lbnQ9YihjKX07YS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmEsc2hvdzpmdW5jdGlvbigpe3ZhciBpPXRoaXMuZWxlbWVudCxmPWkuY2xvc2VzdCgidWw6bm90KC5kcm9wZG93bi1tZW51KSIpLGQ9aS5hdHRyKCJkYXRhLXRhcmdldCIpLGcsYyxoO2lmKCFkKXtkPWkuYXR0cigiaHJlZiIpO2Q9ZCYmZC5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIpfWlmKGkucGFyZW50KCJsaSIpLmhhc0NsYXNzKCJhY3RpdmUiKSl7cmV0dXJufWc9Zi5maW5kKCIuYWN0aXZlIGEiKS5sYXN0KClbMF07aD1iLkV2ZW50KCJzaG93Iix7cmVsYXRlZFRhcmdldDpnfSk7aS50cmlnZ2VyKGgpO2lmKGguaXNEZWZhdWx0UHJldmVudGVkKCkpe3JldHVybn1jPWIoZCk7dGhpcy5hY3RpdmF0ZShpLnBhcmVudCgibGkiKSxmKTt0aGlzLmFjdGl2YXRlKGMsYy5wYXJlbnQoKSxmdW5jdGlvbigpe2kudHJpZ2dlcih7dHlwZToic2hvd24iLHJlbGF0ZWRUYXJnZXQ6Z30pfSl9LGFjdGl2YXRlOmZ1bmN0aW9uKGUsZCxoKXt2YXIgYz1kLmZpbmQoIj4gLmFjdGl2ZSIpLGc9aCYmYi5zdXBwb3J0LnRyYW5zaXRpb24mJmMuaGFzQ2xhc3MoImZhZGUiKTtmdW5jdGlvbiBmKCl7Yy5yZW1vdmVDbGFzcygiYWN0aXZlIikuZmluZCgiPiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIik7ZS5hZGRDbGFzcygiYWN0aXZlIik7aWYoZyl7ZVswXS5vZmZzZXRXaWR0aDtlLmFkZENsYXNzKCJpbiIpfWVsc2V7ZS5yZW1vdmVDbGFzcygiZmFkZSIpfWlmKGUucGFyZW50KCIuZHJvcGRvd24tbWVudSIpKXtlLmNsb3Nlc3QoImxpLmRyb3Bkb3duIikuYWRkQ2xhc3MoImFjdGl2ZSIpfWgmJmgoKX1nP2Mub25lKGIuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxmKTpmKCk7Yy5yZW1vdmVDbGFzcygiaW4iKX19O2IuZm4udGFiPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1iKHRoaXMpLGQ9ZS5kYXRhKCJ0YWIiKTtpZighZCl7ZS5kYXRhKCJ0YWIiLChkPW5ldyBhKHRoaXMpKSl9aWYodHlwZW9mIGM9PSJzdHJpbmciKXtkW2NdKCl9fSl9O2IuZm4udGFiLkNvbnN0cnVjdG9yPWE7YihmdW5jdGlvbigpe2IoImJvZHkiKS5vbigiY2xpY2sudGFiLmRhdGEtYXBpIiwnW2RhdGEtdG9nZ2xlPSJ0YWIiXSwgW2RhdGEtdG9nZ2xlPSJwaWxsIl0nLGZ1bmN0aW9uKGMpe2MucHJldmVudERlZmF1bHQoKTtiKHRoaXMpLnRhYigic2hvdyIpfSl9KX0od2luZG93LmpRdWVyeSk7IWZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKGQsYyl7dGhpcy4kZWxlbWVudD1hKGQpO3RoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxhLmZuLnR5cGVhaGVhZC5kZWZhdWx0cyxjKTt0aGlzLm1hdGNoZXI9dGhpcy5vcHRpb25zLm1hdGNoZXJ8fHRoaXMubWF0Y2hlcjt0aGlzLnNvcnRlcj10aGlzLm9wdGlvbnMuc29ydGVyfHx0aGlzLnNvcnRlcjt0aGlzLmhpZ2hsaWdodGVyPXRoaXMub3B0aW9ucy5oaWdobGlnaHRlcnx8dGhpcy5oaWdobGlnaHRlcjt0aGlzLnVwZGF0ZXI9dGhpcy5vcHRpb25zLnVwZGF0ZXJ8fHRoaXMudXBkYXRlcjt0aGlzLiRtZW51PWEodGhpcy5vcHRpb25zLm1lbnUpLmFwcGVuZFRvKCJib2R5Iik7dGhpcy5zb3VyY2U9dGhpcy5vcHRpb25zLnNvdXJjZTt0aGlzLnNob3duPWZhbHNlO3RoaXMubGlzdGVuKCl9O2IucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiLHNlbGVjdDpmdW5jdGlvbigpe3ZhciBjPXRoaXMuJG1lbnUuZmluZCgiLmFjdGl2ZSIpLmF0dHIoImRhdGEtdmFsdWUiKTt0aGlzLiRlbGVtZW50LnZhbCh0aGlzLnVwZGF0ZXIoYykpLmNoYW5nZSgpO3JldHVybiB0aGlzLmhpZGUoKX0sdXBkYXRlcjpmdW5jdGlvbihjKXtyZXR1cm4gY30sc2hvdzpmdW5jdGlvbigpe3ZhciBjPWEuZXh0ZW5kKHt9LHRoaXMuJGVsZW1lbnQub2Zmc2V0KCkse2hlaWdodDp0aGlzLiRlbGVtZW50WzBdLm9mZnNldEhlaWdodH0pO3RoaXMuJG1lbnUuY3NzKHt0b3A6Yy50b3ArYy5oZWlnaHQsbGVmdDpjLmxlZnR9KTt0aGlzLiRtZW51LnNob3coKTt0aGlzLnNob3duPXRydWU7cmV0dXJuIHRoaXN9LGhpZGU6ZnVuY3Rpb24oKXt0aGlzLiRtZW51LmhpZGUoKTt0aGlzLnNob3duPWZhbHNlO3JldHVybiB0aGlzfSxsb29rdXA6ZnVuY3Rpb24oZCl7dmFyIGM7dGhpcy5xdWVyeT10aGlzLiRlbGVtZW50LnZhbCgpO2lmKCF0aGlzLnF1ZXJ5fHx0aGlzLnF1ZXJ5Lmxlbmd0aDx0aGlzLm9wdGlvbnMubWluTGVuZ3RoKXtyZXR1cm4gdGhpcy5zaG93bj90aGlzLmhpZGUoKTp0aGlzfWM9YS5pc0Z1bmN0aW9uKHRoaXMuc291cmNlKT90aGlzLnNvdXJjZSh0aGlzLnF1ZXJ5LGEucHJveHkodGhpcy5wcm9jZXNzLHRoaXMpKTp0aGlzLnNvdXJjZTtyZXR1cm4gYz90aGlzLnByb2Nlc3MoYyk6dGhpc30scHJvY2VzczpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2M9YS5ncmVwKGMsZnVuY3Rpb24oZSl7cmV0dXJuIGQubWF0Y2hlcihlKX0pO2M9dGhpcy5zb3J0ZXIoYyk7aWYoIWMubGVuZ3RoKXtyZXR1cm4gdGhpcy5zaG93bj90aGlzLmhpZGUoKTp0aGlzfXJldHVybiB0aGlzLnJlbmRlcihjLnNsaWNlKDAsdGhpcy5vcHRpb25zLml0ZW1zKSkuc2hvdygpfSxtYXRjaGVyOmZ1bmN0aW9uKGMpe3JldHVybiB+Yy50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy5xdWVyeS50b0xvd2VyQ2FzZSgpKX0sc29ydGVyOmZ1bmN0aW9uKGUpe3ZhciBmPVtdLGQ9W10sYz1bXSxnO3doaWxlKGc9ZS5zaGlmdCgpKXtpZighZy50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy5xdWVyeS50b0xvd2VyQ2FzZSgpKSl7Zi5wdXNoKGcpfWVsc2V7aWYofmcuaW5kZXhPZih0aGlzLnF1ZXJ5KSl7ZC5wdXNoKGcpfWVsc2V7Yy5wdXNoKGcpfX19cmV0dXJuIGYuY29uY2F0KGQsYyl9LGhpZ2hsaWdodGVyOmZ1bmN0aW9uKGMpe3ZhciBkPXRoaXMucXVlcnkucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywiXFwkJiIpO3JldHVybiBjLnJlcGxhY2UobmV3IFJlZ0V4cCgiKCIrZCsiKSIsImlnIiksZnVuY3Rpb24oZSxmKXtyZXR1cm4iPHN0cm9uZz4iK2YrIjwvc3Ryb25nPiJ9KX0scmVuZGVyOmZ1bmN0aW9uKGMpe3ZhciBkPXRoaXM7Yz1hKGMpLm1hcChmdW5jdGlvbihlLGYpe2U9YShkLm9wdGlvbnMuaXRlbSkuYXR0cigiZGF0YS12YWx1ZSIsZik7ZS5maW5kKCJhIikuaHRtbChkLmhpZ2hsaWdodGVyKGYpKTtyZXR1cm4gZVswXX0pO2MuZmlyc3QoKS5hZGRDbGFzcygiYWN0aXZlIik7dGhpcy4kbWVudS5odG1sKGMpO3JldHVybiB0aGlzfSxuZXh0OmZ1bmN0aW9uKGQpe3ZhciBlPXRoaXMuJG1lbnUuZmluZCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxjPWUubmV4dCgpO2lmKCFjLmxlbmd0aCl7Yz1hKHRoaXMuJG1lbnUuZmluZCgibGkiKVswXSl9Yy5hZGRDbGFzcygiYWN0aXZlIil9LHByZXY6ZnVuY3Rpb24oZCl7dmFyIGU9dGhpcy4kbWVudS5maW5kKCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLGM9ZS5wcmV2KCk7aWYoIWMubGVuZ3RoKXtjPXRoaXMuJG1lbnUuZmluZCgibGkiKS5sYXN0KCl9Yy5hZGRDbGFzcygiYWN0aXZlIil9LGxpc3RlbjpmdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQub24oImJsdXIiLGEucHJveHkodGhpcy5ibHVyLHRoaXMpKS5vbigia2V5cHJlc3MiLGEucHJveHkodGhpcy5rZXlwcmVzcyx0aGlzKSkub24oImtleXVwIixhLnByb3h5KHRoaXMua2V5dXAsdGhpcykpO2lmKGEuYnJvd3Nlci53ZWJraXR8fGEuYnJvd3Nlci5tc2llKXt0aGlzLiRlbGVtZW50Lm9uKCJrZXlkb3duIixhLnByb3h5KHRoaXMua2V5ZG93bix0aGlzKSl9dGhpcy4kbWVudS5vbigiY2xpY2siLGEucHJveHkodGhpcy5jbGljayx0aGlzKSkub24oIm1vdXNlZW50ZXIiLCJsaSIsYS5wcm94eSh0aGlzLm1vdXNlZW50ZXIsdGhpcykpfSxtb3ZlOmZ1bmN0aW9uKGMpe2lmKCF0aGlzLnNob3duKXtyZXR1cm59c3dpdGNoKGMua2V5Q29kZSl7Y2FzZSA5OmNhc2UgMTM6Y2FzZSAyNzpjLnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSAzODpjLnByZXZlbnREZWZhdWx0KCk7dGhpcy5wcmV2KCk7YnJlYWs7Y2FzZSA0MDpjLnByZXZlbnREZWZhdWx0KCk7dGhpcy5uZXh0KCk7YnJlYWt9Yy5zdG9wUHJvcGFnYXRpb24oKX0sa2V5ZG93bjpmdW5jdGlvbihjKXt0aGlzLnN1cHByZXNzS2V5UHJlc3NSZXBlYXQ9IX5hLmluQXJyYXkoYy5rZXlDb2RlLFs0MCwzOCw5LDEzLDI3XSk7dGhpcy5tb3ZlKGMpfSxrZXlwcmVzczpmdW5jdGlvbihjKXtpZih0aGlzLnN1cHByZXNzS2V5UHJlc3NSZXBlYXQpe3JldHVybn10aGlzLm1vdmUoYyl9LGtleXVwOmZ1bmN0aW9uKGMpe3N3aXRjaChjLmtleUNvZGUpe2Nhc2UgNDA6Y2FzZSAzODpicmVhaztjYXNlIDk6Y2FzZSAxMzppZighdGhpcy5zaG93bil7cmV0dXJufXRoaXMuc2VsZWN0KCk7YnJlYWs7Y2FzZSAyNzppZighdGhpcy5zaG93bil7cmV0dXJufXRoaXMuaGlkZSgpO2JyZWFrO2RlZmF1bHQ6dGhpcy5sb29rdXAoKX1jLnN0b3BQcm9wYWdhdGlvbigpO2MucHJldmVudERlZmF1bHQoKX0sYmx1cjpmdW5jdGlvbihkKXt2YXIgYz10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtjLmhpZGUoKX0sMTUwKX0sY2xpY2s6ZnVuY3Rpb24oYyl7Yy5zdG9wUHJvcGFnYXRpb24oKTtjLnByZXZlbnREZWZhdWx0KCk7dGhpcy5zZWxlY3QoKX0sbW91c2VlbnRlcjpmdW5jdGlvbihjKXt0aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIik7YShjLmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKCJhY3RpdmUiKX19O2EuZm4udHlwZWFoZWFkPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZj1hKHRoaXMpLGU9Zi5kYXRhKCJ0eXBlYWhlYWQiKSxkPXR5cGVvZiBjPT0ib2JqZWN0IiYmYztpZighZSl7Zi5kYXRhKCJ0eXBlYWhlYWQiLChlPW5ldyBiKHRoaXMsZCkpKX1pZih0eXBlb2YgYz09InN0cmluZyIpe2VbY10oKX19KX07YS5mbi50eXBlYWhlYWQuZGVmYXVsdHM9e3NvdXJjZTpbXSxpdGVtczo4LG1lbnU6Jzx1bCBjbGFzcz0idHlwZWFoZWFkIGRyb3Bkb3duLW1lbnUiPjwvdWw+JyxpdGVtOic8bGk+PGEgaHJlZj0iIyI+PC9hPjwvbGk+JyxtaW5MZW5ndGg6MX07YS5mbi50eXBlYWhlYWQuQ29uc3RydWN0b3I9YjthKGZ1bmN0aW9uKCl7YSgiYm9keSIpLm9uKCJmb2N1cy50eXBlYWhlYWQuZGF0YS1hcGkiLCdbZGF0YS1wcm92aWRlPSJ0eXBlYWhlYWQiXScsZnVuY3Rpb24oZCl7dmFyIGM9YSh0aGlzKTtpZihjLmRhdGEoInR5cGVhaGVhZCIpKXtyZXR1cm59ZC5wcmV2ZW50RGVmYXVsdCgpO2MudHlwZWFoZWFkKGMuZGF0YSgpKX0pfSl9KHdpbmRvdy5qUXVlcnkpOyFmdW5jdGlvbihiKXt2YXIgYT1mdW5jdGlvbihkLGMpe3RoaXMub3B0aW9ucz1iLmV4dGVuZCh7fSxiLmZuLmFmZml4LmRlZmF1bHRzLGMpO3RoaXMuJHdpbmRvdz1iKHdpbmRvdykub24oInNjcm9sbC5hZmZpeC5kYXRhLWFwaSIsYi5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb24sdGhpcykpO3RoaXMuJGVsZW1lbnQ9YihkKTt0aGlzLmNoZWNrUG9zaXRpb24oKX07YS5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbj1mdW5jdGlvbigpe2lmKCF0aGlzLiRlbGVtZW50LmlzKCI6dmlzaWJsZSIpKXtyZXR1cm59dmFyIGc9Yihkb2N1bWVudCkuaGVpZ2h0KCksaT10aGlzLiR3aW5kb3cuc2Nyb2xsVG9wKCksYz10aGlzLiRlbGVtZW50Lm9mZnNldCgpLGo9dGhpcy5vcHRpb25zLm9mZnNldCxlPWouYm90dG9tLGY9ai50b3AsaD0iYWZmaXggYWZmaXgtdG9wIGFmZml4LWJvdHRvbSIsZDtpZih0eXBlb2YgaiE9Im9iamVjdCIpe2U9Zj1qfWlmKHR5cGVvZiBmPT0iZnVuY3Rpb24iKXtmPWoudG9wKCl9aWYodHlwZW9mIGU9PSJmdW5jdGlvbiIpe2U9ai5ib3R0b20oKX1kPXRoaXMudW5waW4hPW51bGwmJihpK3RoaXMudW5waW48PWMudG9wKT9mYWxzZTplIT1udWxsJiYoYy50b3ArdGhpcy4kZWxlbWVudC5oZWlnaHQoKT49Zy1lKT8iYm90dG9tIjpmIT1udWxsJiZpPD1mPyJ0b3AiOmZhbHNlO2lmKHRoaXMuYWZmaXhlZD09PWQpe3JldHVybn10aGlzLmFmZml4ZWQ9ZDt0aGlzLnVucGluPWQ9PSJib3R0b20iP2MudG9wLWk6bnVsbDt0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKGgpLmFkZENsYXNzKCJhZmZpeCIrKGQ/Ii0iK2Q6IiIpKX07Yi5mbi5hZmZpeD1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGY9Yih0aGlzKSxlPWYuZGF0YSgiYWZmaXgiKSxkPXR5cGVvZiBjPT0ib2JqZWN0IiYmYztpZighZSl7Zi5kYXRhKCJhZmZpeCIsKGU9bmV3IGEodGhpcyxkKSkpfWlmKHR5cGVvZiBjPT0ic3RyaW5nIil7ZVtjXSgpfX0pfTtiLmZuLmFmZml4LkNvbnN0cnVjdG9yPWE7Yi5mbi5hZmZpeC5kZWZhdWx0cz17b2Zmc2V0OjB9O2Iod2luZG93KS5vbigibG9hZCIsZnVuY3Rpb24oKXtiKCdbZGF0YS1zcHk9ImFmZml4Il0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9Yih0aGlzKSxjPWQuZGF0YSgpO2Mub2Zmc2V0PWMub2Zmc2V0fHx7fTtjLm9mZnNldEJvdHRvbSYmKGMub2Zmc2V0LmJvdHRvbT1jLm9mZnNldEJvdHRvbSk7Yy5vZmZzZXRUb3AmJihjLm9mZnNldC50b3A9Yy5vZmZzZXRUb3ApO2QuYWZmaXgoYyl9KX0pfSh3aW5kb3cualF1ZXJ5KTt2YXIgcT1udWxsO3dpbmRvdy5QUl9TSE9VTERfVVNFX0NPTlRJTlVBVElPTj0hMDsoZnVuY3Rpb24oKXtmdW5jdGlvbiBkKEYpe2Z1bmN0aW9uIHcoSil7dmFyIEs9Si5jaGFyQ29kZUF0KDApO2lmKEshPT05Mil7cmV0dXJuIEt9dmFyIEk9Si5jaGFyQXQoMSk7cmV0dXJuKEs9a1tJXSk/SzoiMCI8PUkmJkk8PSI3Ij9wYXJzZUludChKLnN1YnN0cmluZygxKSw4KTpJPT09InUifHxJPT09IngiP3BhcnNlSW50KEouc3Vic3RyaW5nKDIpLDE2KTpKLmNoYXJDb2RlQXQoMSl9ZnVuY3Rpb24gQyhJKXtpZihJPDMyKXtyZXR1cm4oSTwxNj8iXFx4MCI6IlxceCIpK0kudG9TdHJpbmcoMTYpfUk9U3RyaW5nLmZyb21DaGFyQ29kZShJKTtpZihJPT09IlxcInx8ST09PSItInx8ST09PSJbInx8ST09PSJdIil7ST0iXFwiK0l9cmV0dXJuIEl9ZnVuY3Rpb24gQShKKXtmb3IodmFyIE09Si5zdWJzdHJpbmcoMSxKLmxlbmd0aC0xKS5tYXRjaCgvXFx1W1xkQS1GYS1mXXs0fXxcXHhbXGRBLUZhLWZdezJ9fFxcWzAtM11bMC03XXswLDJ9fFxcWzAtN117MSwyfXxcXFtcU1xzXXxbXlxcXS9nKSxKPVtdLEk9W10sTz1NWzBdPT09Il4iLFA9Tz8xOjAsTD1NLmxlbmd0aDtQPEw7KytQKXt2YXIgSz1NW1BdO2lmKC9cXFtiZHN3XS9pLnRlc3QoSykpe0oucHVzaChLKX1lbHNle3ZhciBLPXcoSyksTjtQKzI8TCYmIi0iPT09TVtQKzFdPyhOPXcoTVtQKzJdKSxQKz0yKTpOPUs7SS5wdXNoKFtLLE5dKTtOPDY1fHxLPjEyMnx8KE48NjV8fEs+OTB8fEkucHVzaChbTWF0aC5tYXgoNjUsSyl8MzIsTWF0aC5taW4oTiw5MCl8MzJdKSxOPDk3fHxLPjEyMnx8SS5wdXNoKFtNYXRoLm1heCg5NyxLKSYtMzMsTWF0aC5taW4oTiwxMjIpJi0zM10pKX19SS5zb3J0KGZ1bmN0aW9uKFEsUil7cmV0dXJuIFFbMF0tUlswXXx8UlsxXS1RWzFdfSk7TT1bXTtLPVtOYU4sTmFOXTtmb3IoUD0wO1A8SS5sZW5ndGg7KytQKXtMPUlbUF0sTFswXTw9S1sxXSsxP0tbMV09TWF0aC5tYXgoS1sxXSxMWzFdKTpNLnB1c2goSz1MKX1JPVsiWyJdO08mJkkucHVzaCgiXiIpO0kucHVzaC5hcHBseShJLEopO2ZvcihQPTA7UDxNLmxlbmd0aDsrK1Ape0w9TVtQXSxJLnB1c2goQyhMWzBdKSksTFsxXT5MWzBdJiYoTFsxXSsxPkxbMF0mJkkucHVzaCgiLSIpLEkucHVzaChDKExbMV0pKSl9SS5wdXNoKCJdIik7cmV0dXJuIEkuam9pbigiIil9ZnVuY3Rpb24gRShKKXtmb3IodmFyIE09Si5zb3VyY2UubWF0Y2goL1xbKD86W15cXFxdXXxcXFtcU1xzXSkqXXxcXHVbXGRBLUZhLWZdezR9fFxceFtcZEEtRmEtZl17Mn18XFxcZCt8XFxbXlxkdXhdfFwoXD9bITo9XXxbKCleXXxbXigpW1xcXl0rL2cpLEk9TS5sZW5ndGgsTj1bXSxPPTAsTD0wO088STsrK08pe3ZhciBLPU1bT107Sz09PSIoIj8rK0w6IlxcIj09PUsuY2hhckF0KDApJiYoSz0rSy5zdWJzdHJpbmcoMSkpJiZLPD1MJiYoTltLXT0tMSl9Zm9yKE89MTtPPE4ubGVuZ3RoOysrTyl7LTE9PT1OW09dJiYoTltPXT0rK0cpfWZvcihMPU89MDtPPEk7KytPKXtLPU1bT10sSz09PSIoIj8oKytMLE5bTF09PT12b2lkIDAmJihNW09dPSIoPzoiKSk6IlxcIj09PUsuY2hhckF0KDApJiYoSz0rSy5zdWJzdHJpbmcoMSkpJiZLPD1MJiYoTVtPXT0iXFwiK05bTF0pfWZvcihMPU89MDtPPEk7KytPKXsiXiI9PT1NW09dJiYiXiIhPT1NW08rMV0mJihNW09dPSIiKX1pZihKLmlnbm9yZUNhc2UmJkgpe2ZvcihPPTA7TzxJOysrTyl7Sz1NW09dLEo9Sy5jaGFyQXQoMCksSy5sZW5ndGg+PTImJko9PT0iWyI/TVtPXT1BKEspOkohPT0iXFwiJiYoTVtPXT1LLnJlcGxhY2UoL1tBLVphLXpdL2csZnVuY3Rpb24oUCl7UD1QLmNoYXJDb2RlQXQoMCk7cmV0dXJuIlsiK1N0cmluZy5mcm9tQ2hhckNvZGUoUCYtMzMsUHwzMikrIl0ifSkpfX1yZXR1cm4gTS5qb2luKCIiKX1mb3IodmFyIEc9MCxIPSExLHg9ITEsdT0wLEQ9Ri5sZW5ndGg7dTxEOysrdSl7dmFyIEI9Rlt1XTtpZihCLmlnbm9yZUNhc2Upe3g9ITB9ZWxzZXtpZigvW2Etel0vaS50ZXN0KEIuc291cmNlLnJlcGxhY2UoL1xcdVtcZGEtZl17NH18XFx4W1xkYS1mXXsyfXxcXFteVVh1eF0vZ2ksIiIpKSl7SD0hMDt4PSExO2JyZWFrfX19Zm9yKHZhciBrPXtiOjgsdDo5LG46MTAsdjoxMSxmOjEyLHI6MTN9LHY9W10sdT0wLEQ9Ri5sZW5ndGg7dTxEOysrdSl7Qj1GW3VdO2lmKEIuZ2xvYmFsfHxCLm11bHRpbGluZSl7dGhyb3cgRXJyb3IoIiIrQil9di5wdXNoKCIoPzoiK0UoQikrIikiKX1yZXR1cm4gUmVnRXhwKHYuam9pbigifCIpLHg/ImdpIjoiZyIpfWZ1bmN0aW9uIGMoQil7ZnVuY3Rpb24gdShFKXtzd2l0Y2goRS5ub2RlVHlwZSl7Y2FzZSAxOmlmKHgudGVzdChFLmNsYXNzTmFtZSkpe2JyZWFrfWZvcih2YXIgRj1FLmZpcnN0Q2hpbGQ7RjtGPUYubmV4dFNpYmxpbmcpe3UoRil9Rj1FLm5vZGVOYW1lO2lmKCJCUiI9PT1GfHwiTEkiPT09Ril7d1tEXT0iXG4iLENbRDw8MV09QSsrLENbRCsrPDwxfDFdPUV9YnJlYWs7Y2FzZSAzOmNhc2UgNDpGPUUubm9kZVZhbHVlLEYubGVuZ3RoJiYoRj1rP0YucmVwbGFjZSgvXHJcbj8vZywiXG4iKTpGLnJlcGxhY2UoL1tcdFxuXHIgXSsvZywiICIpLHdbRF09RixDW0Q8PDFdPUEsQSs9Ri5sZW5ndGgsQ1tEKys8PDF8MV09RSl9fXZhciB4PS8oPzpefFxzKW5vY29kZSg/OlxzfCQpLyx3PVtdLEE9MCxDPVtdLEQ9MCx2O0IuY3VycmVudFN0eWxlP3Y9Qi5jdXJyZW50U3R5bGUud2hpdGVTcGFjZTp3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSYmKHY9ZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShCLHEpLmdldFByb3BlcnR5VmFsdWUoIndoaXRlLXNwYWNlIikpO3ZhciBrPXYmJiJwcmUiPT09di5zdWJzdHJpbmcoMCwzKTt1KEIpO3JldHVybnthOncuam9pbigiIikucmVwbGFjZSgvXG4kLywiIiksYzpDfX1mdW5jdGlvbiB0KHUsayx3LHYpe2smJih1PXthOmssZDp1fSx3KHUpLHYucHVzaC5hcHBseSh2LHUuZSkpfWZ1bmN0aW9uIGgodSxrKXtmdW5jdGlvbiB4KFApe2Zvcih2YXIgRj1QLmQsQz1bRiwicGxuIl0sTD0wLEo9UC5hLm1hdGNoKEEpfHxbXSxCPXt9LEU9MCxOPUoubGVuZ3RoO0U8TjsrK0Upe3ZhciBLPUpbRV0sTz1CW0tdLEQ9dm9pZCAwLE07aWYodHlwZW9mIE89PT0ic3RyaW5nIil7TT0hMX1lbHNle3ZhciBJPXdbSy5jaGFyQXQoMCldO2lmKEkpe0Q9Sy5tYXRjaChJWzFdKSxPPUlbMF19ZWxzZXtmb3IoTT0wO008djsrK00pe2lmKEk9a1tNXSxEPUsubWF0Y2goSVsxXSkpe089SVswXTticmVha319RHx8KE89InBsbiIpfWlmKChNPU8ubGVuZ3RoPj01JiYibGFuZy0iPT09Ty5zdWJzdHJpbmcoMCw1KSkmJiEoRCYmdHlwZW9mIERbMV09PT0ic3RyaW5nIikpe009ITEsTz0ic3JjIn1NfHwoQltLXT1PKX1JPUw7TCs9Sy5sZW5ndGg7aWYoTSl7TT1EWzFdO3ZhciBIPUsuaW5kZXhPZihNKSxHPUgrTS5sZW5ndGg7RFsyXSYmKEc9Sy5sZW5ndGgtRFsyXS5sZW5ndGgsSD1HLU0ubGVuZ3RoKTtPPU8uc3Vic3RyaW5nKDUpO3QoRitJLEsuc3Vic3RyaW5nKDAsSCkseCxDKTt0KEYrSStILE0scyhPLE0pLEMpO3QoRitJK0csSy5zdWJzdHJpbmcoRykseCxDKX1lbHNle0MucHVzaChGK0ksTyl9fVAuZT1DfXZhciB3PXt9LEE7KGZ1bmN0aW9uKCl7Zm9yKHZhciBHPXUuY29uY2F0KGspLEI9W10sRj17fSxIPTAsRT1HLmxlbmd0aDtIPEU7KytIKXt2YXIgRD1HW0hdLEk9RFszXTtpZihJKXtmb3IodmFyIEM9SS5sZW5ndGg7LS1DPj0wOyl7d1tJLmNoYXJBdChDKV09RH19RD1EWzFdO0k9IiIrRDtGLmhhc093blByb3BlcnR5KEkpfHwoQi5wdXNoKEQpLEZbSV09cSl9Qi5wdXNoKC9bXFNcc10vKTtBPWQoQil9KSgpO3ZhciB2PWsubGVuZ3RoO3JldHVybiB4fWZ1bmN0aW9uIG8odSl7dmFyIGs9W10sdz1bXTt1LnRyaXBsZVF1b3RlZFN0cmluZ3M/ay5wdXNoKFsic3RyIiwvXig/OicnJyg/OlteJ1xcXXxcXFtcU1xzXXwnJz8oPz1bXiddKSkqKD86JycnfCQpfCIiIig/OlteIlxcXXxcXFtcU1xzXXwiIj8oPz1bXiJdKSkqKD86IiIifCQpfCcoPzpbXidcXF18XFxbXFNcc10pKig/Oid8JCl8Iig/OlteIlxcXXxcXFtcU1xzXSkqKD86InwkKSkvLHEsIidcIiJdKTp1Lm11bHRpTGluZVN0cmluZ3M/ay5wdXNoKFsic3RyIiwvXig/OicoPzpbXidcXF18XFxbXFNcc10pKig/Oid8JCl8Iig/OlteIlxcXXxcXFtcU1xzXSkqKD86InwkKXxgKD86W15cXGBdfFxcW1xTXHNdKSooPzpgfCQpKS8scSwiJ1wiYCJdKTprLnB1c2goWyJzdHIiLC9eKD86Jyg/OlteXG5ccidcXF18XFwuKSooPzonfCQpfCIoPzpbXlxuXHIiXFxdfFxcLikqKD86InwkKSkvLHEsIlwiJyJdKTt1LnZlcmJhdGltU3RyaW5ncyYmdy5wdXNoKFsic3RyIiwvXkAiKD86W14iXXwiIikqKD86InwkKS8scV0pO3ZhciB2PXUuaGFzaENvbW1lbnRzO3YmJih1LmNTdHlsZUNvbW1lbnRzPyh2PjE/ay5wdXNoKFsiY29tIiwvXiMoPzojIyg/OlteI118Iyg/ISMjKSkqKD86IyMjfCQpfC4qKS8scSwiIyJdKTprLnB1c2goWyJjb20iLC9eIyg/Oig/OmRlZmluZXxlbGlmfGVsc2V8ZW5kaWZ8ZXJyb3J8aWZkZWZ8aW5jbHVkZXxpZm5kZWZ8bGluZXxwcmFnbWF8dW5kZWZ8d2FybmluZylcYnxbXlxuXHJdKikvLHEsIiMiXSksdy5wdXNoKFsic3RyIiwvXjwoPzooPzooPzpcLlwuXC8pKnxcLz8pKD86W1x3LV0rKD86XC9bXHctXSspKyk/W1x3LV0rXC5ofFthLXpdXHcqKT4vLHFdKSk6ay5wdXNoKFsiY29tIiwvXiNbXlxuXHJdKi8scSwiIyJdKSk7dS5jU3R5bGVDb21tZW50cyYmKHcucHVzaChbImNvbSIsL15cL1wvW15cblxyXSovLHFdKSx3LnB1c2goWyJjb20iLC9eXC9cKltcU1xzXSo/KD86XCpcL3wkKS8scV0pKTt1LnJlZ2V4TGl0ZXJhbHMmJncucHVzaChbImxhbmctcmVnZXgiLC9eKD86Xl5cLj98WyErLV18IT18IT09fCN8JXwlPXwmfCYmfCYmPXwmPXxcKHxcKnxcKj18XCs9fCx8LT18LT58XC98XC89fDp8Ojp8O3w8fDw8fDw8PXw8PXw9fD09fD09PXw+fD49fD4+fD4+PXw+Pj58Pj4+PXxbP0BbXl18XF49fFxeXF58XF5cXj18e3xcfHxcfD18XHxcfHxcfFx8PXx+fGJyZWFrfGNhc2V8Y29udGludWV8ZGVsZXRlfGRvfGVsc2V8ZmluYWxseXxpbnN0YW5jZW9mfHJldHVybnx0aHJvd3x0cnl8dHlwZW9mKVxzKihcLyg/PVteKi9dKSg/OlteL1tcXF18XFxbXFNcc118XFsoPzpbXlxcXF1dfFxcW1xTXHNdKSooPzpdfCQpKStcLykvXSk7KHY9dS50eXBlcykmJncucHVzaChbInR5cCIsdl0pO3U9KCIiK3Uua2V5d29yZHMpLnJlcGxhY2UoL14gfCAkL2csIiIpO3UubGVuZ3RoJiZ3LnB1c2goWyJrd2QiLFJlZ0V4cCgiXig/OiIrdS5yZXBsYWNlKC9bXHMsXSsvZywifCIpKyIpXFxiIikscV0pO2sucHVzaChbInBsbiIsL15ccysvLHEsIiBcclxuXHRceGEwIl0pO3cucHVzaChbImxpdCIsL15AWyRfYS16XVtcdyRAXSovaSxxXSxbInR5cCIsL14oPzpbQF9dP1tBLVpdK1thLXpdW1x3JEBdKnxcdytfdFxiKS8scV0sWyJwbG4iLC9eWyRfYS16XVtcdyRAXSovaSxxXSxbImxpdCIsL14oPzoweFtcZGEtZl0rfCg/OlxkKD86X1xkKykqXGQqKD86XC5cZCopP3xcLlxkXCspKD86ZVsrLV0/XGQrKT8pW2Etel0qL2kscSwiMDEyMzQ1Njc4OSJdLFsicGxuIiwvXlxcW1xTXHNdPy8scV0sWyJwdW4iLC9eLlteXHNcdyItJCcuL0BcXGBdKi8scV0pO3JldHVybiBoKGssdyl9ZnVuY3Rpb24gcihILHgpe2Z1bmN0aW9uIEUoSyl7c3dpdGNoKEsubm9kZVR5cGUpe2Nhc2UgMTppZihCLnRlc3QoSy5jbGFzc05hbWUpKXticmVha31pZigiQlIiPT09Sy5ub2RlTmFtZSl7QyhLKSxLLnBhcmVudE5vZGUmJksucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChLKX1lbHNle2ZvcihLPUsuZmlyc3RDaGlsZDtLO0s9Sy5uZXh0U2libGluZyl7RShLKX19YnJlYWs7Y2FzZSAzOmNhc2UgNDppZih2KXt2YXIgaz1LLm5vZGVWYWx1ZSxMPWsubWF0Y2goSSk7aWYoTCl7dmFyIE09ay5zdWJzdHJpbmcoMCxMLmluZGV4KTtLLm5vZGVWYWx1ZT1NOyhrPWsuc3Vic3RyaW5nKEwuaW5kZXgrTFswXS5sZW5ndGgpKSYmSy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShKLmNyZWF0ZVRleHROb2RlKGspLEsubmV4dFNpYmxpbmcpO0MoSyk7TXx8Sy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKEspfX19fWZ1bmN0aW9uIEMoSyl7ZnVuY3Rpb24gayhNLFIpe3ZhciBRPVI/TS5jbG9uZU5vZGUoITEpOk0sUD1NLnBhcmVudE5vZGU7aWYoUCl7dmFyIFA9ayhQLDEpLE89TS5uZXh0U2libGluZztQLmFwcGVuZENoaWxkKFEpO2Zvcih2YXIgTj1PO047Tj1PKXtPPU4ubmV4dFNpYmxpbmcsUC5hcHBlbmRDaGlsZChOKX19cmV0dXJuIFF9Zm9yKDshSy5uZXh0U2libGluZzspe2lmKEs9Sy5wYXJlbnROb2RlLCFLKXtyZXR1cm59fWZvcih2YXIgSz1rKEsubmV4dFNpYmxpbmcsMCksTDsoTD1LLnBhcmVudE5vZGUpJiZMLm5vZGVUeXBlPT09MTspe0s9TH1GLnB1c2goSyl9dmFyIEI9Lyg/Ol58XHMpbm9jb2RlKD86XHN8JCkvLEk9L1xyXG4/fFxuLyxKPUgub3duZXJEb2N1bWVudCxBO0guY3VycmVudFN0eWxlP0E9SC5jdXJyZW50U3R5bGUud2hpdGVTcGFjZTp3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSYmKEE9Si5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKEgscSkuZ2V0UHJvcGVydHlWYWx1ZSgid2hpdGUtc3BhY2UiKSk7dmFyIHY9QSYmInByZSI9PT1BLnN1YnN0cmluZygwLDMpO2ZvcihBPUouY3JlYXRlRWxlbWVudCgiTEkiKTtILmZpcnN0Q2hpbGQ7KXtBLmFwcGVuZENoaWxkKEguZmlyc3RDaGlsZCl9Zm9yKHZhciBGPVtBXSxEPTA7RDxGLmxlbmd0aDsrK0Qpe0UoRltEXSl9eD09PSh4fDApJiZGWzBdLnNldEF0dHJpYnV0ZSgidmFsdWUiLHgpO3ZhciB1PUouY3JlYXRlRWxlbWVudCgiT0wiKTt1LmNsYXNzTmFtZT0ibGluZW51bXMiO2Zvcih2YXIgdz1NYXRoLm1heCgwLHgtMXwwKXx8MCxEPTAsRz1GLmxlbmd0aDtEPEc7KytEKXtBPUZbRF0sQS5jbGFzc05hbWU9IkwiKyhEK3cpJTEwLEEuZmlyc3RDaGlsZHx8QS5hcHBlbmRDaGlsZChKLmNyZWF0ZVRleHROb2RlKCJceGEwIikpLHUuYXBwZW5kQ2hpbGQoQSl9SC5hcHBlbmRDaGlsZCh1KX1mdW5jdGlvbiB6KHUsayl7Zm9yKHZhciB3PWsubGVuZ3RoOy0tdz49MDspe3ZhciB2PWtbd107eS5oYXNPd25Qcm9wZXJ0eSh2KT93aW5kb3cuY29uc29sZSYmY29uc29sZS53YXJuKCJjYW5ub3Qgb3ZlcnJpZGUgbGFuZ3VhZ2UgaGFuZGxlciAlcyIsdik6eVt2XT11fX1mdW5jdGlvbiBzKHUsayl7aWYoIXV8fCF5Lmhhc093blByb3BlcnR5KHUpKXt1PS9eXHMqPC8udGVzdChrKT8iZGVmYXVsdC1tYXJrdXAiOiJkZWZhdWx0LWNvZGUifXJldHVybiB5W3VdfWZ1bmN0aW9uIHAoWCl7dmFyIEw9WC5nO3RyeXt2YXIgVD1jKFguaCksUT1ULmE7WC5hPVE7WC5jPVQuYztYLmQ9MDtzKEwsUSkoWCk7dmFyIE49L1xiTVNJRVxiLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEw9L1xuL2csRj1YLmEsRz1GLmxlbmd0aCxUPTAsTT1YLmMsST1NLmxlbmd0aCxRPTAsVT1YLmUsUj1VLmxlbmd0aCxYPTA7VVtSXT1HO3ZhciBILEs7Zm9yKEs9SD0wO0s8Ujspe1VbS10hPT1VW0srMl0/KFVbSCsrXT1VW0srK10sVVtIKytdPVVbSysrXSk6Sys9Mn1SPUg7Zm9yKEs9SD0wO0s8Ujspe2Zvcih2YXIgQT1VW0tdLFM9VVtLKzFdLFc9SysyO1crMjw9UiYmVVtXKzFdPT09Uzspe1crPTJ9VVtIKytdPUE7VVtIKytdPVM7Sz1XfWZvcihVLmxlbmd0aD1IO1E8STspe3ZhciBKPU1bUSsyXXx8RyxWPVVbWCsyXXx8RyxXPU1hdGgubWluKEosViksUD1NW1ErMV0sTztpZihQLm5vZGVUeXBlIT09MSYmKE89Ri5zdWJzdHJpbmcoVCxXKSkpe04mJihPPU8ucmVwbGFjZShMLCJcciIpKTtQLm5vZGVWYWx1ZT1PO3ZhciBFPVAub3duZXJEb2N1bWVudCxEPUUuY3JlYXRlRWxlbWVudCgiU1BBTiIpO0QuY2xhc3NOYW1lPVVbWCsxXTt2YXIgQj1QLnBhcmVudE5vZGU7Qi5yZXBsYWNlQ2hpbGQoRCxQKTtELmFwcGVuZENoaWxkKFApO1Q8SiYmKE1bUSsxXT1QPUUuY3JlYXRlVGV4dE5vZGUoRi5zdWJzdHJpbmcoVyxKKSksQi5pbnNlcnRCZWZvcmUoUCxELm5leHRTaWJsaW5nKSl9VD1XO1Q+PUomJihRKz0yKTtUPj1WJiYoWCs9Mil9fWNhdGNoKEMpeyJjb25zb2xlIiBpbiB3aW5kb3cmJmNvbnNvbGUubG9nKEMmJkMuc3RhY2s/Qy5zdGFjazpDKX19dmFyIG09WyJicmVhayxjb250aW51ZSxkbyxlbHNlLGZvcixpZixyZXR1cm4sd2hpbGUiXSxqPVtbbSwiYXV0byxjYXNlLGNoYXIsY29uc3QsZGVmYXVsdCxkb3VibGUsZW51bSxleHRlcm4sZmxvYXQsZ290byxpbnQsbG9uZyxyZWdpc3RlcixzaG9ydCxzaWduZWQsc2l6ZW9mLHN0YXRpYyxzdHJ1Y3Qsc3dpdGNoLHR5cGVkZWYsdW5pb24sdW5zaWduZWQsdm9pZCx2b2xhdGlsZSJdLCJjYXRjaCxjbGFzcyxkZWxldGUsZmFsc2UsaW1wb3J0LG5ldyxvcGVyYXRvcixwcml2YXRlLHByb3RlY3RlZCxwdWJsaWMsdGhpcyx0aHJvdyx0cnVlLHRyeSx0eXBlb2YiXSxuPVtqLCJhbGlnbm9mLGFsaWduX3VuaW9uLGFzbSxheGlvbSxib29sLGNvbmNlcHQsY29uY2VwdF9tYXAsY29uc3RfY2FzdCxjb25zdGV4cHIsZGVjbHR5cGUsZHluYW1pY19jYXN0LGV4cGxpY2l0LGV4cG9ydCxmcmllbmQsaW5saW5lLGxhdGVfY2hlY2ssbXV0YWJsZSxuYW1lc3BhY2UsbnVsbHB0cixyZWludGVycHJldF9jYXN0LHN0YXRpY19hc3NlcnQsc3RhdGljX2Nhc3QsdGVtcGxhdGUsdHlwZWlkLHR5cGVuYW1lLHVzaW5nLHZpcnR1YWwsd2hlcmUiXSxsPVtqLCJhYnN0cmFjdCxib29sZWFuLGJ5dGUsZXh0ZW5kcyxmaW5hbCxmaW5hbGx5LGltcGxlbWVudHMsaW1wb3J0LGluc3RhbmNlb2YsbnVsbCxuYXRpdmUscGFja2FnZSxzdHJpY3RmcCxzdXBlcixzeW5jaHJvbml6ZWQsdGhyb3dzLHRyYW5zaWVudCJdLGk9W2wsImFzLGJhc2UsYnksY2hlY2tlZCxkZWNpbWFsLGRlbGVnYXRlLGRlc2NlbmRpbmcsZHluYW1pYyxldmVudCxmaXhlZCxmb3JlYWNoLGZyb20sZ3JvdXAsaW1wbGljaXQsaW4saW50ZXJmYWNlLGludGVybmFsLGludG8saXMsbG9jayxvYmplY3Qsb3V0LG92ZXJyaWRlLG9yZGVyYnkscGFyYW1zLHBhcnRpYWwscmVhZG9ubHkscmVmLHNieXRlLHNlYWxlZCxzdGFja2FsbG9jLHN0cmluZyxzZWxlY3QsdWludCx1bG9uZyx1bmNoZWNrZWQsdW5zYWZlLHVzaG9ydCx2YXIiXSxqPVtqLCJkZWJ1Z2dlcixldmFsLGV4cG9ydCxmdW5jdGlvbixnZXQsbnVsbCxzZXQsdW5kZWZpbmVkLHZhcix3aXRoLEluZmluaXR5LE5hTiJdLGc9W20sImFuZCxhcyxhc3NlcnQsY2xhc3MsZGVmLGRlbCxlbGlmLGV4Y2VwdCxleGVjLGZpbmFsbHksZnJvbSxnbG9iYWwsaW1wb3J0LGluLGlzLGxhbWJkYSxub25sb2NhbCxub3Qsb3IscGFzcyxwcmludCxyYWlzZSx0cnksd2l0aCx5aWVsZCxGYWxzZSxUcnVlLE5vbmUiXSxmPVttLCJhbGlhcyxhbmQsYmVnaW4sY2FzZSxjbGFzcyxkZWYsZGVmaW5lZCxlbHNpZixlbmQsZW5zdXJlLGZhbHNlLGluLG1vZHVsZSxuZXh0LG5pbCxub3Qsb3IscmVkbyxyZXNjdWUscmV0cnksc2VsZixzdXBlcix0aGVuLHRydWUsdW5kZWYsdW5sZXNzLHVudGlsLHdoZW4seWllbGQsQkVHSU4sRU5EIl0sbT1bbSwiY2FzZSxkb25lLGVsaWYsZXNhYyxldmFsLGZpLGZ1bmN0aW9uLGluLGxvY2FsLHNldCx0aGVuLHVudGlsIl0sZT0vXihESVJ8RklMRXx2ZWN0b3J8KGRlfHByaW9yaXR5Xyk/cXVldWV8bGlzdHxzdGFja3woY29uc3RfKT9pdGVyYXRvcnwobXVsdGkpPyhzZXR8bWFwKXxiaXRzZXR8dT8oaW50fGZsb2F0KVxkKikvLGI9L1xTLyxhPW8oe2tleXdvcmRzOltuLGksaiwiY2FsbGVyLGRlbGV0ZSxkaWUsZG8sZHVtcCxlbHNpZixldmFsLGV4aXQsZm9yZWFjaCxmb3IsZ290byxpZixpbXBvcnQsbGFzdCxsb2NhbCxteSxuZXh0LG5vLG91cixwcmludCxwYWNrYWdlLHJlZG8scmVxdWlyZSxzdWIsdW5kZWYsdW5sZXNzLHVudGlsLHVzZSx3YW50YXJyYXksd2hpbGUsQkVHSU4sRU5EIitnLGYsbV0saGFzaENvbW1lbnRzOiEwLGNTdHlsZUNvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITAscmVnZXhMaXRlcmFsczohMH0pLHk9e307eihhLFsiZGVmYXVsdC1jb2RlIl0pO3ooaChbXSxbWyJwbG4iLC9eW148P10rL10sWyJkZWMiLC9ePCFcd1tePl0qKD86PnwkKS9dLFsiY29tIiwvXjxcIS0tW1xTXHNdKj8oPzotLVw+fCQpL10sWyJsYW5nLSIsL148XD8oW1xTXHNdKz8pKD86XD8+fCQpL10sWyJsYW5nLSIsL148JShbXFNcc10rPykoPzolPnwkKS9dLFsicHVuIiwvXig/OjxbJT9dfFslP10+KS9dLFsibGFuZy0iLC9ePHhtcFxiW14+XSo+KFtcU1xzXSs/KTxcL3htcFxiW14+XSo+L2ldLFsibGFuZy1qcyIsL148c2NyaXB0XGJbXj5dKj4oW1xTXHNdKj8pKDxcL3NjcmlwdFxiW14+XSo+KS9pXSxbImxhbmctY3NzIiwvXjxzdHlsZVxiW14+XSo+KFtcU1xzXSo/KSg8XC9zdHlsZVxiW14+XSo+KS9pXSxbImxhbmctaW4udGFnIiwvXig8XC8/W2Etel1bXjw+XSo+KS9pXV0pLFsiZGVmYXVsdC1tYXJrdXAiLCJodG0iLCJodG1sIiwibXhtbCIsInhodG1sIiwieG1sIiwieHNsIl0pO3ooaChbWyJwbG4iLC9eXHMrLyxxLCIgXHRcclxuIl0sWyJhdHYiLC9eKD86IlteIl0qIj98J1teJ10qJz8pLyxxLCJcIiciXV0sW1sidGFnIiwvXl48XC8/W2Etel0oPzpbXHctLjpdKlx3KT98XC8/PiQvaV0sWyJhdG4iLC9eKD8hc3R5bGVbXHM9XXxvbilbYS16XSg/OltcdzotXSpcdyk/L2ldLFsibGFuZy11cS52YWwiLC9ePVxzKihbXlxzIic+XSooPzpbXlxzIicvPl18XC8oPz1ccykpKS9dLFsicHVuIiwvXlsvPC0+XSsvXSxbImxhbmctanMiLC9eb25cdytccyo9XHMqIihbXiJdKykiL2ldLFsibGFuZy1qcyIsL15vblx3K1xzKj1ccyonKFteJ10rKScvaV0sWyJsYW5nLWpzIiwvXm9uXHcrXHMqPVxzKihbXlxzIic+XSspL2ldLFsibGFuZy1jc3MiLC9ec3R5bGVccyo9XHMqIihbXiJdKykiL2ldLFsibGFuZy1jc3MiLC9ec3R5bGVccyo9XHMqJyhbXiddKyknL2ldLFsibGFuZy1jc3MiLC9ec3R5bGVccyo9XHMqKFteXHMiJz5dKykvaV1dKSxbImluLnRhZyJdKTt6KGgoW10sW1siYXR2IiwvXltcU1xzXSsvXV0pLFsidXEudmFsIl0pO3oobyh7a2V5d29yZHM6bixoYXNoQ29tbWVudHM6ITAsY1N0eWxlQ29tbWVudHM6ITAsdHlwZXM6ZX0pLFsiYyIsImNjIiwiY3BwIiwiY3h4IiwiY3ljIiwibSJdKTt6KG8oe2tleXdvcmRzOiJudWxsLHRydWUsZmFsc2UifSksWyJqc29uIl0pO3oobyh7a2V5d29yZHM6aSxoYXNoQ29tbWVudHM6ITAsY1N0eWxlQ29tbWVudHM6ITAsdmVyYmF0aW1TdHJpbmdzOiEwLHR5cGVzOmV9KSxbImNzIl0pO3oobyh7a2V5d29yZHM6bCxjU3R5bGVDb21tZW50czohMH0pLFsiamF2YSJdKTt6KG8oe2tleXdvcmRzOm0saGFzaENvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITB9KSxbImJzaCIsImNzaCIsInNoIl0pO3oobyh7a2V5d29yZHM6ZyxoYXNoQ29tbWVudHM6ITAsbXVsdGlMaW5lU3RyaW5nczohMCx0cmlwbGVRdW90ZWRTdHJpbmdzOiEwfSksWyJjdiIsInB5Il0pO3oobyh7a2V5d29yZHM6ImNhbGxlcixkZWxldGUsZGllLGRvLGR1bXAsZWxzaWYsZXZhbCxleGl0LGZvcmVhY2gsZm9yLGdvdG8saWYsaW1wb3J0LGxhc3QsbG9jYWwsbXksbmV4dCxubyxvdXIscHJpbnQscGFja2FnZSxyZWRvLHJlcXVpcmUsc3ViLHVuZGVmLHVubGVzcyx1bnRpbCx1c2Usd2FudGFycmF5LHdoaWxlLEJFR0lOLEVORCIsaGFzaENvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITAscmVnZXhMaXRlcmFsczohMH0pLFsicGVybCIsInBsIiwicG0iXSk7eihvKHtrZXl3b3JkczpmLGhhc2hDb21tZW50czohMCxtdWx0aUxpbmVTdHJpbmdzOiEwLHJlZ2V4TGl0ZXJhbHM6ITB9KSxbInJiIl0pO3oobyh7a2V5d29yZHM6aixjU3R5bGVDb21tZW50czohMCxyZWdleExpdGVyYWxzOiEwfSksWyJqcyJdKTt6KG8oe2tleXdvcmRzOiJhbGwsYW5kLGJ5LGNhdGNoLGNsYXNzLGVsc2UsZXh0ZW5kcyxmYWxzZSxmaW5hbGx5LGZvcixpZixpbixpcyxpc250LGxvb3AsbmV3LG5vLG5vdCxudWxsLG9mLG9mZixvbixvcixyZXR1cm4sc3VwZXIsdGhlbix0cnVlLHRyeSx1bmxlc3MsdW50aWwsd2hlbix3aGlsZSx5ZXMiLGhhc2hDb21tZW50czozLGNTdHlsZUNvbW1lbnRzOiEwLG11bHRpbGluZVN0cmluZ3M6ITAsdHJpcGxlUXVvdGVkU3RyaW5nczohMCxyZWdleExpdGVyYWxzOiEwfSksWyJjb2ZmZWUiXSk7eihoKFtdLFtbInN0ciIsL15bXFNcc10rL11dKSxbInJlZ2V4Il0pO3dpbmRvdy5wcmV0dHlQcmludE9uZT1mdW5jdGlvbih1LGssdyl7dmFyIHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUFJFIik7di5pbm5lckhUTUw9dTt3JiZyKHYsdyk7cCh7ZzprLGk6dyxoOnZ9KTtyZXR1cm4gdi5pbm5lckhUTUx9O3dpbmRvdy5wcmV0dHlQcmludD1mdW5jdGlvbihFKXtmdW5jdGlvbiB2KCl7Zm9yKHZhciBMPXdpbmRvdy5QUl9TSE9VTERfVVNFX0NPTlRJTlVBVElPTj93Lm5vdygpKzI1MDpJbmZpbml0eTt1PEEubGVuZ3RoJiZ3Lm5vdygpPEw7dSsrKXt2YXIgTz1BW3VdLEk9Ty5jbGFzc05hbWU7aWYoSS5pbmRleE9mKCJwcmV0dHlwcmludCIpPj0wKXt2YXIgST1JLm1hdGNoKEIpLEssSDtpZihIPSFJKXtIPU87Zm9yKHZhciBNPXZvaWQgMCxOPUguZmlyc3RDaGlsZDtOO049Ti5uZXh0U2libGluZyl7dmFyIEo9Ti5ub2RlVHlwZSxNPUo9PT0xP00/SDpOOko9PT0zP2IudGVzdChOLm5vZGVWYWx1ZSk/SDpNOk19SD0oSz1NPT09SD92b2lkIDA6TSkmJiJDT0RFIj09PUsudGFnTmFtZX1IJiYoST1LLmNsYXNzTmFtZS5tYXRjaChCKSk7SSYmKEk9SVsxXSk7SD0hMTtmb3IoTT1PLnBhcmVudE5vZGU7TTtNPU0ucGFyZW50Tm9kZSl7aWYoKE0udGFnTmFtZT09PSJwcmUifHxNLnRhZ05hbWU9PT0iY29kZSJ8fE0udGFnTmFtZT09PSJ4bXAiKSYmTS5jbGFzc05hbWUmJk0uY2xhc3NOYW1lLmluZGV4T2YoInByZXR0eXByaW50Iik+PTApe0g9ITA7YnJlYWt9fUh8fCgoSD0oSD1PLmNsYXNzTmFtZS5tYXRjaCgvXGJsaW5lbnVtc1xiKD86OihcZCspKT8vKSk/SFsxXSYmSFsxXS5sZW5ndGg/K0hbMV06ITA6ITEpJiZyKE8sSCksRD17ZzpJLGg6TyxpOkh9LHAoRCkpfX11PEEubGVuZ3RoP3NldFRpbWVvdXQodiwyNTApOkUmJkUoKX1mb3IodmFyIEM9W2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwcmUiKSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY29kZSIpLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ4bXAiKV0sQT1bXSx4PTA7eDxDLmxlbmd0aDsrK3gpe2Zvcih2YXIgRj0wLEc9Q1t4XS5sZW5ndGg7RjxHOysrRil7QS5wdXNoKENbeF1bRl0pfX12YXIgQz1xLHc9RGF0ZTt3Lm5vd3x8KHc9e25vdzpmdW5jdGlvbigpe3JldHVybiArbmV3IERhdGV9fSk7dmFyIHU9MCxELEI9L1xibGFuZyg/OnVhZ2UpPy0oW1x3Ll0rKSg/IVxTKS87digpfTt3aW5kb3cuUFI9e2NyZWF0ZVNpbXBsZUxleGVyOmgscmVnaXN0ZXJMYW5nSGFuZGxlcjp6LHNvdXJjZURlY29yYXRvcjpvLFBSX0FUVFJJQl9OQU1FOiJhdG4iLFBSX0FUVFJJQl9WQUxVRToiYXR2IixQUl9DT01NRU5UOiJjb20iLFBSX0RFQ0xBUkFUSU9OOiJkZWMiLFBSX0tFWVdPUkQ6Imt3ZCIsUFJfTElURVJBTDoibGl0IixQUl9OT0NPREU6Im5vY29kZSIsUFJfUExBSU46InBsbiIsUFJfUFVOQ1RVQVRJT046InB1biIsUFJfU09VUkNFOiJzcmMiLFBSX1NUUklORzoic3RyIixQUl9UQUc6InRhZyIsUFJfVFlQRToidHlwIn19KSgpO2pRdWVyeShkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXskKCIudG9wYmFyIikuZHJvcGRvd24oKTtwcmV0dHlQcmludCgpfSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9saWNlbnNlLmh0bWwgYi8wLjUuMC1pbmN1YmF0aW5nL2xpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTMxZDIyCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9saWNlbnNlLmh0bWwKQEAgLTAsMCArMSw0NjEgQEAKKzwhRE9DVFlQRSBodG1sPgorPCEtLQorIHwgR2VuZXJhdGVkIGJ5IEFwYWNoZSBNYXZlbiBEb3hpYSBhdCAyMDE1LTA3LTA5CisgfCBSZW5kZXJlZCB1c2luZyBBcGFjaGUgTWF2ZW4gRmx1aWRvIFNraW4gMS4zLjAKKy0tPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgorICA8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCIgLz4KKyAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCIgLz4KKyAgICA8bWV0YSBuYW1lPSJEYXRlLVJldmlzaW9uLXl5eXltbWRkIiBjb250ZW50PSIyMDE1MDcwOSIgLz4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbiIgLz4KKyAgICA8dGl0bGU+TWV0YWRhdGEgYW5kIEdvdmVybmFuY2UgLSBQcm9qZWN0IExpY2Vuc2U8L3RpdGxlPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3Mvc2l0ZS5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9wcmludC5jc3MiIG1lZGlhPSJwcmludCIgLz4KKworICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9qcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIAorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkgeyAkKCAnLmNhcm91c2VsJyApLmNhcm91c2VsKCB7IGludGVydmFsOiAzNTAwIH0gKSB9ICk7PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ0b3BCYXJFbmFibGVkIj4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKworICAgIDxkaXYgaWQ9InRvcGJhciIgY2xhc3M9Im5hdmJhciBuYXZiYXItZml4ZWQtdG9wICI+CisgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItaW5uZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciIgc3R5bGU9IndpZHRoOiA2OCU7Ij48ZGl2IGNsYXNzPSJuYXYtY29sbGFwc2UiPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QXRsYXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJBYm91dCI+QWJvdXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iV2lraSI+V2lraTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJOZXdzIj5OZXdzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2dpdC13aXAtdXMuYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yLWF0bGFzLmdpdCIgIHRpdGxlPSJHaXQiPkdpdDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yL2F0bGFzIiAgdGl0bGU9IlN2biI+U3ZuPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0FUTEFTIiAgdGl0bGU9IkppcmEiPkppcmE8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMvUG93ZXJlZEJ5IiAgdGl0bGU9IlBvd2VyZWQgYnkiPlBvd2VyZWQgYnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9ibG9ncy5hcGFjaGUub3JnL2F0bGFzLyIgIHRpdGxlPSJCbG9nIj5CbG9nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UHJvamVjdCBJbmZvcm1hdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJwcm9qZWN0LWluZm8uaHRtbCIgIHRpdGxlPSJTdW1tYXJ5Ij5TdW1tYXJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJtYWlsLWxpc3RzLmh0bWwiICB0aXRsZT0iTWFpbGluZyBMaXN0cyI+TWFpbGluZyBMaXN0czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3dlYmNoYXQuZnJlZW5vZGUubmV0P2NoYW5uZWxzPWFwYWNoZWF0bGFzJnVpbz1kNCIgIHRpdGxlPSJJUkMiPklSQzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0idGVhbS1saXN0Lmh0bWwiICB0aXRsZT0iVGVhbSI+VGVhbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaXNzdWUtdHJhY2tpbmcuaHRtbCIgIHRpdGxlPSJJc3N1ZSBUcmFja2luZyI+SXNzdWUgVHJhY2tpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InNvdXJjZS1yZXBvc2l0b3J5Lmh0bWwiICB0aXRsZT0iU291cmNlIFJlcG9zaXRvcnkiPlNvdXJjZSBSZXBvc2l0b3J5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJsaWNlbnNlLmh0bWwiICB0aXRsZT0iTGljZW5zZSI+TGljZW5zZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlbGVhc2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iQ29taW5nIHNvb24iPkNvbWluZyBzb29uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+RG9jdW1lbnRhdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9ImN1cnJlbnQiPmN1cnJlbnQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZXNvdXJjZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJPdmVydmlldyI+T3ZlcnZpZXc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlF1aWNrU3RhcnQuaHRtbCIgIHRpdGxlPSJHZXR0aW5nIFN0YXJ0ZWQiPkdldHRpbmcgU3RhcnRlZDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQXJjaGl0ZWN0dXJlLmh0bWwiICB0aXRsZT0iQXJjaGl0ZWN0dXJlIj5BcmNoaXRlY3R1cmU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Ikluc3RhbGxhdGlvblN0ZXBzLmh0bWwiICB0aXRsZT0iSW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlR5cGVTeXN0ZW0uaHRtbCIgIHRpdGxlPSJUeXBlIFN5c3RlbSI+VHlwZSBTeXN0ZW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkNvbmZpZ3VyYXRpb24uaHRtbCIgIHRpdGxlPSJDb25maWd1cmF0aW9uIj5Db25maWd1cmF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJTZWN1cml0eS5odG1sIiAgdGl0bGU9IlNlY3VyaXR5Ij5TZWN1cml0eTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iYXBpL3Jlc3QuaHRtbCIgIHRpdGxlPSJSZXN0IEFQSSI+UmVzdCBBUEk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BU0YgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vaG93LWl0LXdvcmtzLmh0bWwiICB0aXRsZT0iSG93IEFwYWNoZSBXb3JrcyI+SG93IEFwYWNoZSBXb3JrczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vIiAgdGl0bGU9IkZvdW5kYXRpb24iPkZvdW5kYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3Nwb25zb3JzaGlwLmh0bWwiICB0aXRsZT0iU3BvbnNvcmluZyBBcGFjaGUiPlNwb25zb3JpbmcgQXBhY2hlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi90aGFua3MuaHRtbCIgIHRpdGxlPSJUaGFua3MiPlRoYW5rczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBpZD0ic2VhcmNoLWZvcm0iIGFjdGlvbj0iaHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaCIgbWV0aG9kPSJnZXQiICBjbGFzcz0ibmF2YmFyLXNlYXJjaCBwdWxsLXJpZ2h0IiA+CisgICAgCisgIDxpbnB1dCB2YWx1ZT0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnIiBuYW1lPSJzaXRlc2VhcmNoIiB0eXBlPSJoaWRkZW4iLz4KKyAgPGlucHV0IGNsYXNzPSJzZWFyY2gtcXVlcnkiIG5hbWU9InEiIGlkPSJxdWVyeSIgdHlwZT0idGV4dCIgLz4KKzwvZm9ybT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9jb29wL2NzZS9icmFuZD9mb3JtPXNlYXJjaC1mb3JtIj48L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICA8aWZyYW1lIHNyYz0iaHR0cDovL3d3dy5mYWNlYm9vay5jb20vcGx1Z2lucy9saWtlLnBocD9ocmVmPWh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzJnNlbmQ9ZmFsc2UmbGF5b3V0PWJ1dHRvbl9jb3VudCZzaG93LWZhY2VzPWZhbHNlJmFjdGlvbj1saWtlJmNvbG9yc2NoZW1lPWRhcmsiCisgICAgICAgIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPSIwIgorICAgICAgICBzdHlsZT0iYm9yZGVyOm5vbmU7IHdpZHRoOjgwcHg7IGhlaWdodDoyMHB4OyBtYXJnaW4tdG9wOiAxMHB4OyIgIGNsYXNzPSJwdWxsLXJpZ2h0IiA+PC9pZnJhbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2FwaXMuZ29vZ2xlLmNvbS9qcy9wbHVzb25lLmpzIj48L3NjcmlwdD4KKworICAgICAgICA8dWwgY2xhc3M9Im5hdiBwdWxsLXJpZ2h0Ij48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij4KKyAgICAKKyAgICA8ZGl2IGNsYXNzPSJnLXBsdXNvbmUiIGRhdGEtaHJlZj0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3MiIGRhdGEtc2l6ZT0ibWVkaXVtIiAgd2lkdGg9IjYwcHgiIGFsaWduPSJyaWdodCIgPjwvZGl2PgorCisgICAgICAgIDwvbGk+PC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIAorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIAorICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgIDxkaXYgaWQ9ImJhbm5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtbGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uIiBpZD0iYmFubmVyTGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2F0bGFzLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgQXRsYXMiIHdpZHRoPSIyMDBweCIgaGVpZ2h0PSI0NXB4Ii8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4gICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vaW5jdWJhdG9yLmFwYWNoZS5vcmciIGlkPSJiYW5uZXJSaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2FwYWNoZS1pbmN1YmF0b3ItbG9nby5wbmciICBhbHQ9IkFwYWNoZSBJbmN1YmF0b3IiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiPjxoci8+PC9kaXY+CisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0iYnJlYWRjcnVtYnMiPgorICAgICAgICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiPgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iQXBhY2hlIj4KKyAgICAgICAgQXBhY2hlPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJBdGxhcyI+CisgICAgICAgIEF0bGFzPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0iIj5Qcm9qZWN0IExpY2Vuc2U8L2xpPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICA8bGkgaWQ9InB1Ymxpc2hEYXRlIiBjbGFzcz0icHVsbC1yaWdodCI+TGFzdCBQdWJsaXNoZWQ6IDIwMTUtMDctMDk8L2xpPiA8bGkgY2xhc3M9ImRpdmlkZXIgcHVsbC1yaWdodCI+fDwvbGk+CisgICAgICAgICAgICAgIDxsaSBpZD0icHJvamVjdFZlcnNpb24iIGNsYXNzPSJwdWxsLXJpZ2h0Ij5WZXJzaW9uOiAwLjUtaW5jdWJhdGluZzwvbGk+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9kaXY+CisKKyAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxkaXYgaWQ9ImJvZHlDb2x1bW4iID4KKyAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj5PdmVydmlldzxhIG5hbWU9Ik92ZXJ2aWV3Ij48L2E+PC9oMj48YSBuYW1lPSJPdmVydmlldyI+PC9hPgorPHA+VHlwaWNhbGx5IHRoZSBsaWNlbnNlcyBsaXN0ZWQgZm9yIHRoZSBwcm9qZWN0IGFyZSB0aGF0IG9mIHRoZSBwcm9qZWN0IGl0c2VsZiwgYW5kIG5vdCBvZiBkZXBlbmRlbmNpZXMuPC9wPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDI+UHJvamVjdCBMaWNlbnNlPGEgbmFtZT0iUHJvamVjdF9MaWNlbnNlIj48L2E+PC9oMj48YSBuYW1lPSJQcm9qZWN0X0xpY2Vuc2UiPjwvYT4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzPlRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAyLjA8YSBuYW1lPSJUaGVfQXBhY2hlX1NvZnR3YXJlX0xpY2Vuc2VfVmVyc2lvbl8yLjAiPjwvYT48L2gzPjxhIG5hbWU9IlRoZV9BcGFjaGVfU29mdHdhcmVfTGljZW5zZV9WZXJzaW9uXzIuMCI+PC9hPgorPGRpdiBjbGFzcz0ic291cmNlIj4KKzxwcmU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICZxdW90O0xpY2Vuc2UmcXVvdDsgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICZxdW90O0xpY2Vuc29yJnF1b3Q7IHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQorICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICAmcXVvdDtMZWdhbCBFbnRpdHkmcXVvdDsgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICZxdW90O2NvbnRyb2wmcXVvdDsgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICZxdW90O1lvdSZxdW90OyAob3IgJnF1b3Q7WW91ciZxdW90Oykgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgJnF1b3Q7U291cmNlJnF1b3Q7IGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgJnF1b3Q7T2JqZWN0JnF1b3Q7IGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCisgICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CisgICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCisgICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCisKKyAgICAgICZxdW90O1dvcmsmcXVvdDsgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAmcXVvdDtEZXJpdmF0aXZlIFdvcmtzJnF1b3Q7IHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgJnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCisgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCisgICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKKyAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKKyAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgorICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICZxdW90O3N1Ym1pdHRlZCZxdW90OworICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgJnF1b3Q7Tm90IGEgQ29udHJpYnV0aW9uLiZxdW90OworCisgICAgICAmcXVvdDtDb250cmlidXRvciZxdW90OyBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAorICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKyAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAorICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCisgICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKKyAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAorICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCisgICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCisgICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQorICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKKyAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKKyAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CisgICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKKyAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAorICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKKyAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgorICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCisKKyAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKKworICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCisgICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAorICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCisgICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgorICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKKworICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgJnF1b3Q7Tk9USUNFJnF1b3Q7IHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KKworICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKKyAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICZxdW90O1tdJnF1b3Q7CisgICAgICByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLiAoRG9uJ3QgaW5jbHVkZQorICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKKyAgICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYQorICAgICAgZmlsZSBvciBjbGFzcyBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiBwdXJwb3NlIGJlIGluY2x1ZGVkIG9uIHRoZQorICAgICAgc2FtZSAmcXVvdDtwcmludGVkIHBhZ2UmcXVvdDsgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICZxdW90O0xpY2Vuc2UmcXVvdDspOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorPC9wcmU+PC9kaXY+PC9kaXY+PC9kaXY+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKworICAgIDxoci8+CisKKyAgICA8Zm9vdGVyPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IHNwYW4xMiI+Q29weXJpZ2h0ICZjb3B5OyAgICAgICAgICAgICAgICAgICAgMjAxNQorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIj5BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbjwvYT4uCisgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxwIGlkPSJwb3dlcmVkQnkiIGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvIiB0aXRsZT0iQnVpbHQgYnkgTWF2ZW4iIGNsYXNzPSJwb3dlcmVkQnkiPgorICAgICAgICA8aW1nIGNsYXNzPSJidWlsdEJ5IiBhbHQ9IkJ1aWx0IGJ5IE1hdmVuIiBzcmM9Ii4vaW1hZ2VzL2xvZ29zL21hdmVuLWZlYXRoZXIucG5nIiAvPgorICAgICAgPC9hPgorICAgICAgICAgICAgICA8L3A+CisgICAgICAgIAorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgIDwvZm9vdGVyPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL21haWwtbGlzdHMuaHRtbCBiLzAuNS4wLWluY3ViYXRpbmcvbWFpbC1saXN0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MjA3NGIKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL21haWwtbGlzdHMuaHRtbApAQCAtMCwwICsxLDI3MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8IS0tCisgfCBHZW5lcmF0ZWQgYnkgQXBhY2hlIE1hdmVuIERveGlhIGF0IDIwMTUtMDctMDkKKyB8IFJlbmRlcmVkIHVzaW5nIEFwYWNoZSBNYXZlbiBGbHVpZG8gU2tpbiAxLjMuMAorLS0+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgorICAgIDxtZXRhIG5hbWU9IkRhdGUtUmV2aXNpb24teXl5eW1tZGQiIGNvbnRlbnQ9IjIwMTUwNzA5IiAvPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtTGFuZ3VhZ2UiIGNvbnRlbnQ9ImVuIiAvPgorICAgIDx0aXRsZT5NZXRhZGF0YSBhbmQgR292ZXJuYW5jZSAtIFByb2plY3QgTWFpbGluZyBMaXN0czwvdGl0bGU+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9zaXRlLmNzcyIgLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3ByaW50LmNzcyIgbWVkaWE9InByaW50IiAvPgorCisgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL2pzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmpzIj48L3NjcmlwdD4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+JCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7ICQoICcuY2Fyb3VzZWwnICkuY2Fyb3VzZWwoIHsgaW50ZXJ2YWw6IDM1MDAgfSApIH0gKTs8L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHkgY2xhc3M9InRvcEJhckVuYWJsZWQiPgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorCisgICAgPGRpdiBpZD0idG9wYmFyIiBjbGFzcz0ibmF2YmFyIG5hdmJhci1maXhlZC10b3AgIj4KKyAgICAgIDxkaXYgY2xhc3M9Im5hdmJhci1pbm5lciI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIiBzdHlsZT0id2lkdGg6IDY4JTsiPjxkaXYgY2xhc3M9Im5hdi1jb2xsYXBzZSI+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJuYXYiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BdGxhcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9IkFib3V0Ij5BYm91dDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJXaWtpIj5XaWtpPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9Ik5ld3MiPk5ld3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0LXdpcC11cy5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3ItYXRsYXMuZ2l0IiAgdGl0bGU9IkdpdCI+R2l0PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3IvYXRsYXMiICB0aXRsZT0iU3ZuIj5Tdm48L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvQVRMQVMiICB0aXRsZT0iSmlyYSI+SmlyYTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUy9Qb3dlcmVkQnkiICB0aXRsZT0iUG93ZXJlZCBieSI+UG93ZXJlZCBieTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL2Jsb2dzLmFwYWNoZS5vcmcvYXRsYXMvIiAgdGl0bGU9IkJsb2ciPkJsb2c8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5Qcm9qZWN0IEluZm9ybWF0aW9uIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InByb2plY3QtaW5mby5odG1sIiAgdGl0bGU9IlN1bW1hcnkiPlN1bW1hcnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Im1haWwtbGlzdHMuaHRtbCIgIHRpdGxlPSJNYWlsaW5nIExpc3RzIj5NYWlsaW5nIExpc3RzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd2ViY2hhdC5mcmVlbm9kZS5uZXQ/Y2hhbm5lbHM9YXBhY2hlYXRsYXMmdWlvPWQ0IiAgdGl0bGU9IklSQyI+SVJDPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJ0ZWFtLWxpc3QuaHRtbCIgIHRpdGxlPSJUZWFtIj5UZWFtPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpc3N1ZS10cmFja2luZy5odG1sIiAgdGl0bGU9Iklzc3VlIFRyYWNraW5nIj5Jc3N1ZSBUcmFja2luZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ic291cmNlLXJlcG9zaXRvcnkuaHRtbCIgIHRpdGxlPSJTb3VyY2UgUmVwb3NpdG9yeSI+U291cmNlIFJlcG9zaXRvcnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImxpY2Vuc2UuaHRtbCIgIHRpdGxlPSJMaWNlbnNlIj5MaWNlbnNlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UmVsZWFzZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJDb21pbmcgc29vbiI+Q29taW5nIHNvb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5Eb2N1bWVudGF0aW9uIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iY3VycmVudCI+Y3VycmVudDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlc291cmNlcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9Ik92ZXJ2aWV3Ij5PdmVydmlldzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iUXVpY2tTdGFydC5odG1sIiAgdGl0bGU9IkdldHRpbmcgU3RhcnRlZCI+R2V0dGluZyBTdGFydGVkPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJBcmNoaXRlY3R1cmUuaHRtbCIgIHRpdGxlPSJBcmNoaXRlY3R1cmUiPkFyY2hpdGVjdHVyZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iSW5zdGFsbGF0aW9uU3RlcHMuaHRtbCIgIHRpdGxlPSJJbnN0YWxsYXRpb24iPkluc3RhbGxhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iVHlwZVN5c3RlbS5odG1sIiAgdGl0bGU9IlR5cGUgU3lzdGVtIj5UeXBlIFN5c3RlbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQ29uZmlndXJhdGlvbi5odG1sIiAgdGl0bGU9IkNvbmZpZ3VyYXRpb24iPkNvbmZpZ3VyYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlNlY3VyaXR5Lmh0bWwiICB0aXRsZT0iU2VjdXJpdHkiPlNlY3VyaXR5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJhcGkvcmVzdC5odG1sIiAgdGl0bGU9IlJlc3QgQVBJIj5SZXN0IEFQSTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkFTRiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9ob3ctaXQtd29ya3MuaHRtbCIgIHRpdGxlPSJIb3cgQXBhY2hlIFdvcmtzIj5Ib3cgQXBhY2hlIFdvcmtzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi8iICB0aXRsZT0iRm91bmRhdGlvbiI+Rm91bmRhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vc3BvbnNvcnNoaXAuaHRtbCIgIHRpdGxlPSJTcG9uc29yaW5nIEFwYWNoZSI+U3BvbnNvcmluZyBBcGFjaGU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3RoYW5rcy5odG1sIiAgdGl0bGU9IlRoYW5rcyI+VGhhbmtzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJzZWFyY2gtZm9ybSIgYWN0aW9uPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoIiBtZXRob2Q9ImdldCIgIGNsYXNzPSJuYXZiYXItc2VhcmNoIHB1bGwtcmlnaHQiID4KKyAgICAKKyAgPGlucHV0IHZhbHVlPSJodHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmciIG5hbWU9InNpdGVzZWFyY2giIHR5cGU9ImhpZGRlbiIvPgorICA8aW5wdXQgY2xhc3M9InNlYXJjaC1xdWVyeSIgbmFtZT0icSIgaWQ9InF1ZXJ5IiB0eXBlPSJ0ZXh0IiAvPgorPC9mb3JtPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL3d3dy5nb29nbGUuY29tL2Nvb3AvY3NlL2JyYW5kP2Zvcm09c2VhcmNoLWZvcm0iPjwvc2NyaXB0PgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgIDxpZnJhbWUgc3JjPSJodHRwOi8vd3d3LmZhY2Vib29rLmNvbS9wbHVnaW5zL2xpa2UucGhwP2hyZWY9aHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3Mmc2VuZD1mYWxzZSZsYXlvdXQ9YnV0dG9uX2NvdW50JnNob3ctZmFjZXM9ZmFsc2UmYWN0aW9uPWxpa2UmY29sb3JzY2hlbWU9ZGFyayIKKyAgICAgICAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9IjAiCisgICAgICAgIHN0eWxlPSJib3JkZXI6bm9uZTsgd2lkdGg6ODBweDsgaGVpZ2h0OjIwcHg7IG1hcmdpbi10b3A6IDEwcHg7IiAgY2xhc3M9InB1bGwtcmlnaHQiID48L2lmcmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vYXBpcy5nb29nbGUuY29tL2pzL3BsdXNvbmUuanMiPjwvc2NyaXB0PgorCisgICAgICAgIDx1bCBjbGFzcz0ibmF2IHB1bGwtcmlnaHQiPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPgorICAgIAorICAgIDxkaXYgY2xhc3M9ImctcGx1c29uZSIgZGF0YS1ocmVmPSJodHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmcvYXRsYXMtZG9jcyIgZGF0YS1zaXplPSJtZWRpdW0iICB3aWR0aD0iNjBweCIgYWxpZ249InJpZ2h0IiA+PC9kaXY+CisKKyAgICAgICAgPC9saT48L3VsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgCisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgICAgCisgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgICAgICAgPGRpdiBpZD0iYmFubmVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1sZWZ0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4iIGlkPSJiYW5uZXJMZWZ0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvYXRsYXMtbG9nby5wbmciICBhbHQ9IkFwYWNoZSBBdGxhcyIgd2lkdGg9IjIwMHB4IiBoZWlnaHQ9IjQ1cHgiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9pbmN1YmF0b3IuYXBhY2hlLm9yZyIgaWQ9ImJhbm5lclJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvYXBhY2hlLWluY3ViYXRvci1sb2dvLnBuZyIgIGFsdD0iQXBhY2hlIEluY3ViYXRvciIvPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJjbGVhciI+PGhyLz48L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJicmVhZGNydW1icyI+CisgICAgICAgIDx1bCBjbGFzcz0iYnJlYWRjcnVtYiI+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciIGNsYXNzPSJleHRlcm5hbExpbmsiIHRpdGxlPSJBcGFjaGUiPgorICAgICAgICBBcGFjaGU8L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIgIj4vPC9saT4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkF0bGFzIj4KKyAgICAgICAgQXRsYXM8L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIgIj4vPC9saT4KKyAgICAgICAgPGxpIGNsYXNzPSIiPlByb2plY3QgTWFpbGluZyBMaXN0czwvbGk+CisgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgIDxsaSBpZD0icHVibGlzaERhdGUiIGNsYXNzPSJwdWxsLXJpZ2h0Ij5MYXN0IFB1Ymxpc2hlZDogMjAxNS0wNy0wOTwvbGk+IDxsaSBjbGFzcz0iZGl2aWRlciBwdWxsLXJpZ2h0Ij58PC9saT4KKyAgICAgICAgICAgICAgPGxpIGlkPSJwcm9qZWN0VmVyc2lvbiIgY2xhc3M9InB1bGwtcmlnaHQiPlZlcnNpb246IDAuNS1pbmN1YmF0aW5nPC9saT4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2Rpdj4KKworICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgPGRpdiBpZD0iYm9keUNvbHVtbiIgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDI+UHJvamVjdCBNYWlsaW5nIExpc3RzPGEgbmFtZT0iUHJvamVjdF9NYWlsaW5nX0xpc3RzIj48L2E+PC9oMj48YSBuYW1lPSJQcm9qZWN0X01haWxpbmdfTGlzdHMiPjwvYT4KKzxwPlRoZXNlIGFyZSB0aGUgbWFpbGluZyBsaXN0cyB0aGF0IGhhdmUgYmVlbiBlc3RhYmxpc2hlZCBmb3IgdGhpcyBwcm9qZWN0LiBGb3IgZWFjaCBsaXN0LCB0aGVyZSBpcyBhIHN1YnNjcmliZSwgdW5zdWJzY3JpYmUsIGFuZCBhbiBhcmNoaXZlIGxpbmsuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InRhYmxlIHRhYmxlLXN0cmlwZWQiPgorPHRyIGNsYXNzPSJhIj4KKzx0aD5OYW1lPC90aD4KKzx0aD5TdWJzY3JpYmU8L3RoPgorPHRoPlVuc3Vic2NyaWJlPC90aD4KKzx0aD5Qb3N0PC90aD4KKzx0aD5BcmNoaXZlPC90aD48L3RyPgorPHRyIGNsYXNzPSJiIj4KKzx0ZD5hdGxhcy1kZXY8L3RkPgorPHRkPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Im1haWx0bzpkZXYtc3Vic2NyaWJlQGF0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnIj5TdWJzY3JpYmU8L2E+PC90ZD4KKzx0ZD48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJtYWlsdG86ZGV2LXVuc3Vic2NyaWJlQGF0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnIj5VbnN1YnNjcmliZTwvYT48L3RkPgorPHRkPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Im1haWx0bzpkZXZAYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmciPlBvc3Q8L2E+PC90ZD4KKzx0ZD48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJodHRwOi8vbWFpbC1hcmNoaXZlcy5hcGFjaGUub3JnL21vZF9tYm94L2F0bGFzLWRldi8iPm1haWwtYXJjaGl2ZXMuYXBhY2hlLm9yZzwvYT48L3RkPjwvdHI+Cis8dHIgY2xhc3M9ImEiPgorPHRkPmF0bGFzLWNvbW1pdHM8L3RkPgorPHRkPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Im1haWx0bzpjb21taXRzLXN1YnNjcmliZUBhdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZyI+U3Vic2NyaWJlPC9hPjwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOmNvbW1pdHMtdW5zdWJzY3JpYmVAYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmciPlVuc3Vic2NyaWJlPC9hPjwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOmNvbW1pdHNAYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmciPlBvc3Q8L2E+PC90ZD4KKzx0ZD48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJodHRwOi8vbWFpbC1hcmNoaXZlcy5hcGFjaGUub3JnL21vZF9tYm94L2F0bGFzLWNvbW1pdHMvIj5tYWlsLWFyY2hpdmVzLmFwYWNoZS5vcmc8L2E+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKworICAgIDxoci8+CisKKyAgICA8Zm9vdGVyPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IHNwYW4xMiI+Q29weXJpZ2h0ICZjb3B5OyAgICAgICAgICAgICAgICAgICAgMjAxNQorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIj5BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbjwvYT4uCisgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxwIGlkPSJwb3dlcmVkQnkiIGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvIiB0aXRsZT0iQnVpbHQgYnkgTWF2ZW4iIGNsYXNzPSJwb3dlcmVkQnkiPgorICAgICAgICA8aW1nIGNsYXNzPSJidWlsdEJ5IiBhbHQ9IkJ1aWx0IGJ5IE1hdmVuIiBzcmM9Ii4vaW1hZ2VzL2xvZ29zL21hdmVuLWZlYXRoZXIucG5nIiAvPgorICAgICAgPC9hPgorICAgICAgICAgICAgICA8L3A+CisgICAgICAgIAorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgIDwvZm9vdGVyPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS8wLjUuMC1pbmN1YmF0aW5nL3Byb2plY3QtaW5mby5odG1sIGIvMC41LjAtaW5jdWJhdGluZy9wcm9qZWN0LWluZm8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDEyMmZkCi0tLSAvZGV2L251bGwKKysrIGIvMC41LjAtaW5jdWJhdGluZy9wcm9qZWN0LWluZm8uaHRtbApAQCAtMCwwICsxLDI3OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8IS0tCisgfCBHZW5lcmF0ZWQgYnkgQXBhY2hlIE1hdmVuIERveGlhIGF0IDIwMTUtMDctMDkKKyB8IFJlbmRlcmVkIHVzaW5nIEFwYWNoZSBNYXZlbiBGbHVpZG8gU2tpbiAxLjMuMAorLS0+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgorICAgIDxtZXRhIG5hbWU9IkRhdGUtUmV2aXNpb24teXl5eW1tZGQiIGNvbnRlbnQ9IjIwMTUwNzA5IiAvPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtTGFuZ3VhZ2UiIGNvbnRlbnQ9ImVuIiAvPgorICAgIDx0aXRsZT5NZXRhZGF0YSBhbmQgR292ZXJuYW5jZSAtIFByb2plY3QgSW5mb3JtYXRpb248L3RpdGxlPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3Mvc2l0ZS5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9wcmludC5jc3MiIG1lZGlhPSJwcmludCIgLz4KKworICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9qcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIAorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkgeyAkKCAnLmNhcm91c2VsJyApLmNhcm91c2VsKCB7IGludGVydmFsOiAzNTAwIH0gKSB9ICk7PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ0b3BCYXJFbmFibGVkIj4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKworICAgIDxkaXYgaWQ9InRvcGJhciIgY2xhc3M9Im5hdmJhciBuYXZiYXItZml4ZWQtdG9wICI+CisgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItaW5uZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciIgc3R5bGU9IndpZHRoOiA2OCU7Ij48ZGl2IGNsYXNzPSJuYXYtY29sbGFwc2UiPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QXRsYXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJBYm91dCI+QWJvdXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iV2lraSI+V2lraTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJOZXdzIj5OZXdzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2dpdC13aXAtdXMuYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yLWF0bGFzLmdpdCIgIHRpdGxlPSJHaXQiPkdpdDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yL2F0bGFzIiAgdGl0bGU9IlN2biI+U3ZuPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0FUTEFTIiAgdGl0bGU9IkppcmEiPkppcmE8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMvUG93ZXJlZEJ5IiAgdGl0bGU9IlBvd2VyZWQgYnkiPlBvd2VyZWQgYnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9ibG9ncy5hcGFjaGUub3JnL2F0bGFzLyIgIHRpdGxlPSJCbG9nIj5CbG9nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UHJvamVjdCBJbmZvcm1hdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJwcm9qZWN0LWluZm8uaHRtbCIgIHRpdGxlPSJTdW1tYXJ5Ij5TdW1tYXJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJtYWlsLWxpc3RzLmh0bWwiICB0aXRsZT0iTWFpbGluZyBMaXN0cyI+TWFpbGluZyBMaXN0czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3dlYmNoYXQuZnJlZW5vZGUubmV0P2NoYW5uZWxzPWFwYWNoZWF0bGFzJnVpbz1kNCIgIHRpdGxlPSJJUkMiPklSQzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0idGVhbS1saXN0Lmh0bWwiICB0aXRsZT0iVGVhbSI+VGVhbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaXNzdWUtdHJhY2tpbmcuaHRtbCIgIHRpdGxlPSJJc3N1ZSBUcmFja2luZyI+SXNzdWUgVHJhY2tpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InNvdXJjZS1yZXBvc2l0b3J5Lmh0bWwiICB0aXRsZT0iU291cmNlIFJlcG9zaXRvcnkiPlNvdXJjZSBSZXBvc2l0b3J5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJsaWNlbnNlLmh0bWwiICB0aXRsZT0iTGljZW5zZSI+TGljZW5zZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlbGVhc2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iQ29taW5nIHNvb24iPkNvbWluZyBzb29uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+RG9jdW1lbnRhdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9ImN1cnJlbnQiPmN1cnJlbnQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZXNvdXJjZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJPdmVydmlldyI+T3ZlcnZpZXc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlF1aWNrU3RhcnQuaHRtbCIgIHRpdGxlPSJHZXR0aW5nIFN0YXJ0ZWQiPkdldHRpbmcgU3RhcnRlZDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQXJjaGl0ZWN0dXJlLmh0bWwiICB0aXRsZT0iQXJjaGl0ZWN0dXJlIj5BcmNoaXRlY3R1cmU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Ikluc3RhbGxhdGlvblN0ZXBzLmh0bWwiICB0aXRsZT0iSW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlR5cGVTeXN0ZW0uaHRtbCIgIHRpdGxlPSJUeXBlIFN5c3RlbSI+VHlwZSBTeXN0ZW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkNvbmZpZ3VyYXRpb24uaHRtbCIgIHRpdGxlPSJDb25maWd1cmF0aW9uIj5Db25maWd1cmF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJTZWN1cml0eS5odG1sIiAgdGl0bGU9IlNlY3VyaXR5Ij5TZWN1cml0eTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iYXBpL3Jlc3QuaHRtbCIgIHRpdGxlPSJSZXN0IEFQSSI+UmVzdCBBUEk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BU0YgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vaG93LWl0LXdvcmtzLmh0bWwiICB0aXRsZT0iSG93IEFwYWNoZSBXb3JrcyI+SG93IEFwYWNoZSBXb3JrczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vIiAgdGl0bGU9IkZvdW5kYXRpb24iPkZvdW5kYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3Nwb25zb3JzaGlwLmh0bWwiICB0aXRsZT0iU3BvbnNvcmluZyBBcGFjaGUiPlNwb25zb3JpbmcgQXBhY2hlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi90aGFua3MuaHRtbCIgIHRpdGxlPSJUaGFua3MiPlRoYW5rczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBpZD0ic2VhcmNoLWZvcm0iIGFjdGlvbj0iaHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaCIgbWV0aG9kPSJnZXQiICBjbGFzcz0ibmF2YmFyLXNlYXJjaCBwdWxsLXJpZ2h0IiA+CisgICAgCisgIDxpbnB1dCB2YWx1ZT0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnIiBuYW1lPSJzaXRlc2VhcmNoIiB0eXBlPSJoaWRkZW4iLz4KKyAgPGlucHV0IGNsYXNzPSJzZWFyY2gtcXVlcnkiIG5hbWU9InEiIGlkPSJxdWVyeSIgdHlwZT0idGV4dCIgLz4KKzwvZm9ybT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9jb29wL2NzZS9icmFuZD9mb3JtPXNlYXJjaC1mb3JtIj48L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICA8aWZyYW1lIHNyYz0iaHR0cDovL3d3dy5mYWNlYm9vay5jb20vcGx1Z2lucy9saWtlLnBocD9ocmVmPWh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzJnNlbmQ9ZmFsc2UmbGF5b3V0PWJ1dHRvbl9jb3VudCZzaG93LWZhY2VzPWZhbHNlJmFjdGlvbj1saWtlJmNvbG9yc2NoZW1lPWRhcmsiCisgICAgICAgIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPSIwIgorICAgICAgICBzdHlsZT0iYm9yZGVyOm5vbmU7IHdpZHRoOjgwcHg7IGhlaWdodDoyMHB4OyBtYXJnaW4tdG9wOiAxMHB4OyIgIGNsYXNzPSJwdWxsLXJpZ2h0IiA+PC9pZnJhbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2FwaXMuZ29vZ2xlLmNvbS9qcy9wbHVzb25lLmpzIj48L3NjcmlwdD4KKworICAgICAgICA8dWwgY2xhc3M9Im5hdiBwdWxsLXJpZ2h0Ij48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij4KKyAgICAKKyAgICA8ZGl2IGNsYXNzPSJnLXBsdXNvbmUiIGRhdGEtaHJlZj0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3MiIGRhdGEtc2l6ZT0ibWVkaXVtIiAgd2lkdGg9IjYwcHgiIGFsaWduPSJyaWdodCIgPjwvZGl2PgorCisgICAgICAgIDwvbGk+PC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIAorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIAorICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgIDxkaXYgaWQ9ImJhbm5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtbGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uIiBpZD0iYmFubmVyTGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2F0bGFzLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgQXRsYXMiIHdpZHRoPSIyMDBweCIgaGVpZ2h0PSI0NXB4Ii8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4gICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vaW5jdWJhdG9yLmFwYWNoZS5vcmciIGlkPSJiYW5uZXJSaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2FwYWNoZS1pbmN1YmF0b3ItbG9nby5wbmciICBhbHQ9IkFwYWNoZSBJbmN1YmF0b3IiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiPjxoci8+PC9kaXY+CisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0iYnJlYWRjcnVtYnMiPgorICAgICAgICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiPgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iQXBhY2hlIj4KKyAgICAgICAgQXBhY2hlPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJBdGxhcyI+CisgICAgICAgIEF0bGFzPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0iIj5Qcm9qZWN0IEluZm9ybWF0aW9uPC9saT4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgPGxpIGlkPSJwdWJsaXNoRGF0ZSIgY2xhc3M9InB1bGwtcmlnaHQiPkxhc3QgUHVibGlzaGVkOiAyMDE1LTA3LTA5PC9saT4gPGxpIGNsYXNzPSJkaXZpZGVyIHB1bGwtcmlnaHQiPnw8L2xpPgorICAgICAgICAgICAgICA8bGkgaWQ9InByb2plY3RWZXJzaW9uIiBjbGFzcz0icHVsbC1yaWdodCI+VmVyc2lvbjogMC41LWluY3ViYXRpbmc8L2xpPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvZGl2PgorCisgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICA8ZGl2IGlkPSJib2R5Q29sdW1uIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj5Qcm9qZWN0IEluZm9ybWF0aW9uPGEgbmFtZT0iUHJvamVjdF9JbmZvcm1hdGlvbiI+PC9hPjwvaDI+Cis8cD5UaGlzIGRvY3VtZW50IHByb3ZpZGVzIGFuIG92ZXJ2aWV3IG9mIHRoZSB2YXJpb3VzIGRvY3VtZW50cyBhbmQgbGlua3MgdGhhdCBhcmUgcGFydCBvZiB0aGlzIHByb2plY3QncyBnZW5lcmFsIGluZm9ybWF0aW9uLiBBbGwgb2YgdGhpcyBjb250ZW50IGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IDxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnIj5NYXZlbjwvYT4gb24gYmVoYWxmIG9mIHRoZSBwcm9qZWN0LjwvcD4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzPk92ZXJ2aWV3PGEgbmFtZT0iT3ZlcnZpZXciPjwvYT48L2gzPgorPHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InRhYmxlIHRhYmxlLXN0cmlwZWQiPgorPHRyIGNsYXNzPSJhIj4KKzx0aD5Eb2N1bWVudDwvdGg+Cis8dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+Cis8dHIgY2xhc3M9ImIiPgorPHRkPjxhIGhyZWY9ImluZGV4Lmh0bWwiPkFib3V0PC9hPjwvdGQ+Cis8dGQ+QXBhY2hlIEF0bGFzIERvY3VtZW50YXRpb248L3RkPjwvdHI+Cis8dHIgY2xhc3M9ImEiPgorPHRkPjxhIGhyZWY9InRlYW0tbGlzdC5odG1sIj5Qcm9qZWN0IFRlYW08L2E+PC90ZD4KKzx0ZD5UaGlzIGRvY3VtZW50IHByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIHRoZSBtZW1iZXJzIG9mIHRoaXMgcHJvamVjdC4gVGhlc2UgYXJlIHRoZSBpbmRpdmlkdWFscyB3aG8gaGF2ZSBjb250cmlidXRlZCB0byB0aGUgcHJvamVjdCBpbiBvbmUgZm9ybSBvciBhbm90aGVyLjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0iYiI+Cis8dGQ+PGEgaHJlZj0ibWFpbC1saXN0cy5odG1sIj5NYWlsaW5nIExpc3RzPC9hPjwvdGQ+Cis8dGQ+VGhpcyBkb2N1bWVudCBwcm92aWRlcyBzdWJzY3JpcHRpb24gYW5kIGFyY2hpdmUgaW5mb3JtYXRpb24gZm9yIHRoaXMgcHJvamVjdCdzIG1haWxpbmcgbGlzdHMuPC90ZD48L3RyPgorPHRyIGNsYXNzPSJhIj4KKzx0ZD48YSBocmVmPSJpc3N1ZS10cmFja2luZy5odG1sIj5Jc3N1ZSBUcmFja2luZzwvYT48L3RkPgorPHRkPlRoaXMgaXMgYSBsaW5rIHRvIHRoZSBpc3N1ZSBtYW5hZ2VtZW50IHN5c3RlbSBmb3IgdGhpcyBwcm9qZWN0LiBJc3N1ZXMgKGJ1Z3MsIGZlYXR1cmVzLCBjaGFuZ2UgcmVxdWVzdHMpIGNhbiBiZSBjcmVhdGVkIGFuZCBxdWVyaWVkIHVzaW5nIHRoaXMgbGluay48L3RkPjwvdHI+Cis8dHIgY2xhc3M9ImIiPgorPHRkPjxhIGhyZWY9ImxpY2Vuc2UuaHRtbCI+UHJvamVjdCBMaWNlbnNlPC9hPjwvdGQ+Cis8dGQ+VGhpcyBpcyBhIGxpbmsgdG8gdGhlIGRlZmluaXRpb25zIG9mIHByb2plY3QgbGljZW5zZXMuPC90ZD48L3RyPgorPHRyIGNsYXNzPSJhIj4KKzx0ZD48YSBocmVmPSJzb3VyY2UtcmVwb3NpdG9yeS5odG1sIj5Tb3VyY2UgUmVwb3NpdG9yeTwvYT48L3RkPgorPHRkPlRoaXMgaXMgYSBsaW5rIHRvIHRoZSBvbmxpbmUgc291cmNlIHJlcG9zaXRvcnkgdGhhdCBjYW4gYmUgdmlld2VkIHZpYSBhIHdlYiBicm93c2VyLjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PjwvZGl2PgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisKKyAgICA8aHIvPgorCisgICAgPGZvb3Rlcj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyBzcGFuMTIiPkNvcHlyaWdodCAmY29weTsgICAgICAgICAgICAgICAgICAgIDIwMTUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZyI+QXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb248L2E+LgorICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8cCBpZD0icG93ZXJlZEJ5IiBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnLyIgdGl0bGU9IkJ1aWx0IGJ5IE1hdmVuIiBjbGFzcz0icG93ZXJlZEJ5Ij4KKyAgICAgICAgPGltZyBjbGFzcz0iYnVpbHRCeSIgYWx0PSJCdWlsdCBieSBNYXZlbiIgc3JjPSIuL2ltYWdlcy9sb2dvcy9tYXZlbi1mZWF0aGVyLnBuZyIgLz4KKyAgICAgIDwvYT4KKyAgICAgICAgICAgICAgPC9wPgorICAgICAgICAKKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICA8L2Zvb3Rlcj4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvMC41LjAtaW5jdWJhdGluZy9zb3VyY2UtcmVwb3NpdG9yeS5odG1sIGIvMC41LjAtaW5jdWJhdGluZy9zb3VyY2UtcmVwb3NpdG9yeS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMmY2MWMKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL3NvdXJjZS1yZXBvc2l0b3J5Lmh0bWwKQEAgLTAsMCArMSwyNzIgQEAKKzwhRE9DVFlQRSBodG1sPgorPCEtLQorIHwgR2VuZXJhdGVkIGJ5IEFwYWNoZSBNYXZlbiBEb3hpYSBhdCAyMDE1LTA3LTA5CisgfCBSZW5kZXJlZCB1c2luZyBBcGFjaGUgTWF2ZW4gRmx1aWRvIFNraW4gMS4zLjAKKy0tPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgorICA8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCIgLz4KKyAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCIgLz4KKyAgICA8bWV0YSBuYW1lPSJEYXRlLVJldmlzaW9uLXl5eXltbWRkIiBjb250ZW50PSIyMDE1MDcwOSIgLz4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbiIgLz4KKyAgICA8dGl0bGU+TWV0YWRhdGEgYW5kIEdvdmVybmFuY2UgLSBTb3VyY2UgUmVwb3NpdG9yeTwvdGl0bGU+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9zaXRlLmNzcyIgLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3ByaW50LmNzcyIgbWVkaWE9InByaW50IiAvPgorCisgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL2pzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmpzIj48L3NjcmlwdD4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+JCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7ICQoICcuY2Fyb3VzZWwnICkuY2Fyb3VzZWwoIHsgaW50ZXJ2YWw6IDM1MDAgfSApIH0gKTs8L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHkgY2xhc3M9InRvcEJhckVuYWJsZWQiPgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorCisgICAgPGRpdiBpZD0idG9wYmFyIiBjbGFzcz0ibmF2YmFyIG5hdmJhci1maXhlZC10b3AgIj4KKyAgICAgIDxkaXYgY2xhc3M9Im5hdmJhci1pbm5lciI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIiBzdHlsZT0id2lkdGg6IDY4JTsiPjxkaXYgY2xhc3M9Im5hdi1jb2xsYXBzZSI+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJuYXYiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BdGxhcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9IkFib3V0Ij5BYm91dDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJXaWtpIj5XaWtpPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9Ik5ld3MiPk5ld3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0LXdpcC11cy5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3ItYXRsYXMuZ2l0IiAgdGl0bGU9IkdpdCI+R2l0PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3IvYXRsYXMiICB0aXRsZT0iU3ZuIj5Tdm48L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvQVRMQVMiICB0aXRsZT0iSmlyYSI+SmlyYTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUy9Qb3dlcmVkQnkiICB0aXRsZT0iUG93ZXJlZCBieSI+UG93ZXJlZCBieTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL2Jsb2dzLmFwYWNoZS5vcmcvYXRsYXMvIiAgdGl0bGU9IkJsb2ciPkJsb2c8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5Qcm9qZWN0IEluZm9ybWF0aW9uIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InByb2plY3QtaW5mby5odG1sIiAgdGl0bGU9IlN1bW1hcnkiPlN1bW1hcnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Im1haWwtbGlzdHMuaHRtbCIgIHRpdGxlPSJNYWlsaW5nIExpc3RzIj5NYWlsaW5nIExpc3RzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd2ViY2hhdC5mcmVlbm9kZS5uZXQ/Y2hhbm5lbHM9YXBhY2hlYXRsYXMmdWlvPWQ0IiAgdGl0bGU9IklSQyI+SVJDPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJ0ZWFtLWxpc3QuaHRtbCIgIHRpdGxlPSJUZWFtIj5UZWFtPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpc3N1ZS10cmFja2luZy5odG1sIiAgdGl0bGU9Iklzc3VlIFRyYWNraW5nIj5Jc3N1ZSBUcmFja2luZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ic291cmNlLXJlcG9zaXRvcnkuaHRtbCIgIHRpdGxlPSJTb3VyY2UgUmVwb3NpdG9yeSI+U291cmNlIFJlcG9zaXRvcnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImxpY2Vuc2UuaHRtbCIgIHRpdGxlPSJMaWNlbnNlIj5MaWNlbnNlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UmVsZWFzZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJDb21pbmcgc29vbiI+Q29taW5nIHNvb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5Eb2N1bWVudGF0aW9uIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iY3VycmVudCI+Y3VycmVudDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlc291cmNlcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9Ik92ZXJ2aWV3Ij5PdmVydmlldzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iUXVpY2tTdGFydC5odG1sIiAgdGl0bGU9IkdldHRpbmcgU3RhcnRlZCI+R2V0dGluZyBTdGFydGVkPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJBcmNoaXRlY3R1cmUuaHRtbCIgIHRpdGxlPSJBcmNoaXRlY3R1cmUiPkFyY2hpdGVjdHVyZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iSW5zdGFsbGF0aW9uU3RlcHMuaHRtbCIgIHRpdGxlPSJJbnN0YWxsYXRpb24iPkluc3RhbGxhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iVHlwZVN5c3RlbS5odG1sIiAgdGl0bGU9IlR5cGUgU3lzdGVtIj5UeXBlIFN5c3RlbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQ29uZmlndXJhdGlvbi5odG1sIiAgdGl0bGU9IkNvbmZpZ3VyYXRpb24iPkNvbmZpZ3VyYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlNlY3VyaXR5Lmh0bWwiICB0aXRsZT0iU2VjdXJpdHkiPlNlY3VyaXR5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJhcGkvcmVzdC5odG1sIiAgdGl0bGU9IlJlc3QgQVBJIj5SZXN0IEFQSTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkFTRiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9ob3ctaXQtd29ya3MuaHRtbCIgIHRpdGxlPSJIb3cgQXBhY2hlIFdvcmtzIj5Ib3cgQXBhY2hlIFdvcmtzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi8iICB0aXRsZT0iRm91bmRhdGlvbiI+Rm91bmRhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vc3BvbnNvcnNoaXAuaHRtbCIgIHRpdGxlPSJTcG9uc29yaW5nIEFwYWNoZSI+U3BvbnNvcmluZyBBcGFjaGU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3RoYW5rcy5odG1sIiAgdGl0bGU9IlRoYW5rcyI+VGhhbmtzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJzZWFyY2gtZm9ybSIgYWN0aW9uPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoIiBtZXRob2Q9ImdldCIgIGNsYXNzPSJuYXZiYXItc2VhcmNoIHB1bGwtcmlnaHQiID4KKyAgICAKKyAgPGlucHV0IHZhbHVlPSJodHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmciIG5hbWU9InNpdGVzZWFyY2giIHR5cGU9ImhpZGRlbiIvPgorICA8aW5wdXQgY2xhc3M9InNlYXJjaC1xdWVyeSIgbmFtZT0icSIgaWQ9InF1ZXJ5IiB0eXBlPSJ0ZXh0IiAvPgorPC9mb3JtPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL3d3dy5nb29nbGUuY29tL2Nvb3AvY3NlL2JyYW5kP2Zvcm09c2VhcmNoLWZvcm0iPjwvc2NyaXB0PgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgIDxpZnJhbWUgc3JjPSJodHRwOi8vd3d3LmZhY2Vib29rLmNvbS9wbHVnaW5zL2xpa2UucGhwP2hyZWY9aHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3Mmc2VuZD1mYWxzZSZsYXlvdXQ9YnV0dG9uX2NvdW50JnNob3ctZmFjZXM9ZmFsc2UmYWN0aW9uPWxpa2UmY29sb3JzY2hlbWU9ZGFyayIKKyAgICAgICAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9IjAiCisgICAgICAgIHN0eWxlPSJib3JkZXI6bm9uZTsgd2lkdGg6ODBweDsgaGVpZ2h0OjIwcHg7IG1hcmdpbi10b3A6IDEwcHg7IiAgY2xhc3M9InB1bGwtcmlnaHQiID48L2lmcmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vYXBpcy5nb29nbGUuY29tL2pzL3BsdXNvbmUuanMiPjwvc2NyaXB0PgorCisgICAgICAgIDx1bCBjbGFzcz0ibmF2IHB1bGwtcmlnaHQiPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPgorICAgIAorICAgIDxkaXYgY2xhc3M9ImctcGx1c29uZSIgZGF0YS1ocmVmPSJodHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmcvYXRsYXMtZG9jcyIgZGF0YS1zaXplPSJtZWRpdW0iICB3aWR0aD0iNjBweCIgYWxpZ249InJpZ2h0IiA+PC9kaXY+CisKKyAgICAgICAgPC9saT48L3VsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgCisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgICAgCisgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgICAgICAgPGRpdiBpZD0iYmFubmVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1sZWZ0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4iIGlkPSJiYW5uZXJMZWZ0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvYXRsYXMtbG9nby5wbmciICBhbHQ9IkFwYWNoZSBBdGxhcyIgd2lkdGg9IjIwMHB4IiBoZWlnaHQ9IjQ1cHgiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9pbmN1YmF0b3IuYXBhY2hlLm9yZyIgaWQ9ImJhbm5lclJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvYXBhY2hlLWluY3ViYXRvci1sb2dvLnBuZyIgIGFsdD0iQXBhY2hlIEluY3ViYXRvciIvPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJjbGVhciI+PGhyLz48L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJicmVhZGNydW1icyI+CisgICAgICAgIDx1bCBjbGFzcz0iYnJlYWRjcnVtYiI+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciIGNsYXNzPSJleHRlcm5hbExpbmsiIHRpdGxlPSJBcGFjaGUiPgorICAgICAgICBBcGFjaGU8L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIgIj4vPC9saT4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkF0bGFzIj4KKyAgICAgICAgQXRsYXM8L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIgIj4vPC9saT4KKyAgICAgICAgPGxpIGNsYXNzPSIiPlNvdXJjZSBSZXBvc2l0b3J5PC9saT4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgPGxpIGlkPSJwdWJsaXNoRGF0ZSIgY2xhc3M9InB1bGwtcmlnaHQiPkxhc3QgUHVibGlzaGVkOiAyMDE1LTA3LTA5PC9saT4gPGxpIGNsYXNzPSJkaXZpZGVyIHB1bGwtcmlnaHQiPnw8L2xpPgorICAgICAgICAgICAgICA8bGkgaWQ9InByb2plY3RWZXJzaW9uIiBjbGFzcz0icHVsbC1yaWdodCI+VmVyc2lvbjogMC41LWluY3ViYXRpbmc8L2xpPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvZGl2PgorCisgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICA8ZGl2IGlkPSJib2R5Q29sdW1uIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj5PdmVydmlldzxhIG5hbWU9Ik92ZXJ2aWV3Ij48L2E+PC9oMj48YSBuYW1lPSJPdmVydmlldyI+PC9hPgorPHA+VGhpcyBwcm9qZWN0IHVzZXMgYSBTb3VyY2UgQ29udGVudCBNYW5hZ2VtZW50IFN5c3RlbSB0byBtYW5hZ2UgaXRzIHNvdXJjZSBjb2RlLjwvcD48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPldlYiBBY2Nlc3M8YSBuYW1lPSJXZWJfQWNjZXNzIj48L2E+PC9oMj48YSBuYW1lPSJXZWJfQWNjZXNzIj48L2E+Cis8cD5UaGUgZm9sbG93aW5nIGlzIGEgbGluayB0byB0aGUgb25saW5lIHNvdXJjZSByZXBvc2l0b3J5LjwvcD4KKzxkaXYgY2xhc3M9InNvdXJjZSI+Cis8cHJlPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Imh0dHBzOi8vZ2l0LXdpcC11cy5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3ItYXRsYXMuZ2l0L2F0bGFzLWRvY3MiPmh0dHBzOi8vZ2l0LXdpcC11cy5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3ItYXRsYXMuZ2l0L2F0bGFzLWRvY3M8L2E+PC9wcmU+PC9kaXY+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj5Bbm9ueW1vdXMgYWNjZXNzPGEgbmFtZT0iQW5vbnltb3VzX2FjY2VzcyI+PC9hPjwvaDI+PGEgbmFtZT0iQW5vbnltb3VzX2FjY2VzcyI+PC9hPgorPHA+UmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIFNDTSB1c2VkIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGFub255bW91c2x5IGNoZWNrIG91dC4gVGhlIGNvbm5lY3Rpb24gdXJsIGlzOjwvcD4KKzxkaXYgY2xhc3M9InNvdXJjZSI+Cis8cHJlPmh0dHBzOi8vZ2l0LXdpcC11cy5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3ItYXRsYXMuZ2l0L2F0bGFzLWRvY3M8L3ByZT48L2Rpdj48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPkRldmVsb3BlciBhY2Nlc3M8YSBuYW1lPSJEZXZlbG9wZXJfYWNjZXNzIj48L2E+PC9oMj48YSBuYW1lPSJEZXZlbG9wZXJfYWNjZXNzIj48L2E+Cis8cD5SZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgU0NNIHVzZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZGV2ZWxvcGVyIGNoZWNrIG91dC4gVGhlIGNvbm5lY3Rpb24gdXJsIGlzOjwvcD4KKzxkaXYgY2xhc3M9InNvdXJjZSI+Cis8cHJlPmh0dHBzOi8vZ2l0LXdpcC11cy5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3ItYXRsYXMuZ2l0L2F0bGFzLWRvY3M8L3ByZT48L2Rpdj48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPkFjY2VzcyBmcm9tIGJlaGluZCBhIGZpcmV3YWxsPGEgbmFtZT0iQWNjZXNzX2Zyb21fYmVoaW5kX2FfZmlyZXdhbGwiPjwvYT48L2gyPjxhIG5hbWU9IkFjY2Vzc19mcm9tX2JlaGluZF9hX2ZpcmV3YWxsIj48L2E+Cis8cD5SZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgU0NNIHVzZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYWNjZXNzIGJlaGluZCBhIGZpcmV3YWxsLjwvcD48L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorCisgICAgPGhyLz4KKworICAgIDxmb290ZXI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgc3BhbjEyIj5Db3B5cmlnaHQgJmNvcHk7ICAgICAgICAgICAgICAgICAgICAyMDE1CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciPkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9hPi4KKyAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPHAgaWQ9InBvd2VyZWRCeSIgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy8iIHRpdGxlPSJCdWlsdCBieSBNYXZlbiIgY2xhc3M9InBvd2VyZWRCeSI+CisgICAgICAgIDxpbWcgY2xhc3M9ImJ1aWx0QnkiIGFsdD0iQnVpbHQgYnkgTWF2ZW4iIHNyYz0iLi9pbWFnZXMvbG9nb3MvbWF2ZW4tZmVhdGhlci5wbmciIC8+CisgICAgICA8L2E+CisgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgPC9mb290ZXI+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvdGVhbS1saXN0Lmh0bWwgYi8wLjUuMC1pbmN1YmF0aW5nL3RlYW0tbGlzdC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMzg3MjEKLS0tIC9kZXYvbnVsbAorKysgYi8wLjUuMC1pbmN1YmF0aW5nL3RlYW0tbGlzdC5odG1sCkBAIC0wLDAgKzEsNDY1IEBACis8IURPQ1RZUEUgaHRtbD4KKzwhLS0KKyB8IEdlbmVyYXRlZCBieSBBcGFjaGUgTWF2ZW4gRG94aWEgYXQgMjAxNS0wNy0wOQorIHwgUmVuZGVyZWQgdXNpbmcgQXBhY2hlIE1hdmVuIEZsdWlkbyBTa2luIDEuMy4wCistLT4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CisgICAgPG1ldGEgbmFtZT0iRGF0ZS1SZXZpc2lvbi15eXl5bW1kZCIgY29udGVudD0iMjAxNTA3MDkiIC8+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4iIC8+CisgICAgPHRpdGxlPk1ldGFkYXRhIGFuZCBHb3Zlcm5hbmNlIC0gVGVhbSBsaXN0PC90aXRsZT4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmNzcyIgLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3NpdGUuY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvcHJpbnQuY3NzIiBtZWRpYT0icHJpbnQiIC8+CisKKyAgICAgIAorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4vanMvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uanMiPjwvc2NyaXB0PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHsgJCggJy5jYXJvdXNlbCcgKS5jYXJvdXNlbCggeyBpbnRlcnZhbDogMzUwMCB9ICkgfSApOzwvc2NyaXB0PgorICAgICAgICAgIAorICAgICAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keSBjbGFzcz0idG9wQmFyRW5hYmxlZCI+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisKKyAgICA8ZGl2IGlkPSJ0b3BiYXIiIGNsYXNzPSJuYXZiYXIgbmF2YmFyLWZpeGVkLXRvcCAiPgorICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWlubmVyIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiIHN0eWxlPSJ3aWR0aDogNjglOyI+PGRpdiBjbGFzcz0ibmF2LWNvbGxhcHNlIj4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Im5hdiI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkF0bGFzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iQWJvdXQiPkFib3V0PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9Ildpa2kiPldpa2k8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iTmV3cyI+TmV3czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXQtd2lwLXVzLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci1hdGxhcy5naXQiICB0aXRsZT0iR2l0Ij5HaXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci9hdGxhcyIgIHRpdGxlPSJTdm4iPlN2bjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9BVExBUyIgIHRpdGxlPSJKaXJhIj5KaXJhPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTL1Bvd2VyZWRCeSIgIHRpdGxlPSJQb3dlcmVkIGJ5Ij5Qb3dlcmVkIGJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vYmxvZ3MuYXBhY2hlLm9yZy9hdGxhcy8iICB0aXRsZT0iQmxvZyI+QmxvZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlByb2plY3QgSW5mb3JtYXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0icHJvamVjdC1pbmZvLmh0bWwiICB0aXRsZT0iU3VtbWFyeSI+U3VtbWFyeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibWFpbC1saXN0cy5odG1sIiAgdGl0bGU9Ik1haWxpbmcgTGlzdHMiPk1haWxpbmcgTGlzdHM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93ZWJjaGF0LmZyZWVub2RlLm5ldD9jaGFubmVscz1hcGFjaGVhdGxhcyZ1aW89ZDQiICB0aXRsZT0iSVJDIj5JUkM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InRlYW0tbGlzdC5odG1sIiAgdGl0bGU9IlRlYW0iPlRlYW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imlzc3VlLXRyYWNraW5nLmh0bWwiICB0aXRsZT0iSXNzdWUgVHJhY2tpbmciPklzc3VlIFRyYWNraW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJzb3VyY2UtcmVwb3NpdG9yeS5odG1sIiAgdGl0bGU9IlNvdXJjZSBSZXBvc2l0b3J5Ij5Tb3VyY2UgUmVwb3NpdG9yeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibGljZW5zZS5odG1sIiAgdGl0bGU9IkxpY2Vuc2UiPkxpY2Vuc2U8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZWxlYXNlcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9IkNvbWluZyBzb29uIj5Db21pbmcgc29vbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkRvY3VtZW50YXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJjdXJyZW50Ij5jdXJyZW50PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UmVzb3VyY2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJRdWlja1N0YXJ0Lmh0bWwiICB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj5HZXR0aW5nIFN0YXJ0ZWQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkFyY2hpdGVjdHVyZS5odG1sIiAgdGl0bGU9IkFyY2hpdGVjdHVyZSI+QXJjaGl0ZWN0dXJlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJJbnN0YWxsYXRpb25TdGVwcy5odG1sIiAgdGl0bGU9Ikluc3RhbGxhdGlvbiI+SW5zdGFsbGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJUeXBlU3lzdGVtLmh0bWwiICB0aXRsZT0iVHlwZSBTeXN0ZW0iPlR5cGUgU3lzdGVtPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJDb25maWd1cmF0aW9uLmh0bWwiICB0aXRsZT0iQ29uZmlndXJhdGlvbiI+Q29uZmlndXJhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iU2VjdXJpdHkuaHRtbCIgIHRpdGxlPSJTZWN1cml0eSI+U2VjdXJpdHk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImFwaS9yZXN0Lmh0bWwiICB0aXRsZT0iUmVzdCBBUEkiPlJlc3QgQVBJPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QVNGIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL2hvdy1pdC13b3Jrcy5odG1sIiAgdGl0bGU9IkhvdyBBcGFjaGUgV29ya3MiPkhvdyBBcGFjaGUgV29ya3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uLyIgIHRpdGxlPSJGb3VuZGF0aW9uIj5Gb3VuZGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9zcG9uc29yc2hpcC5odG1sIiAgdGl0bGU9IlNwb25zb3JpbmcgQXBhY2hlIj5TcG9uc29yaW5nIEFwYWNoZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vdGhhbmtzLmh0bWwiICB0aXRsZT0iVGhhbmtzIj5UaGFua3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gaWQ9InNlYXJjaC1mb3JtIiBhY3Rpb249Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2giIG1ldGhvZD0iZ2V0IiAgY2xhc3M9Im5hdmJhci1zZWFyY2ggcHVsbC1yaWdodCIgPgorICAgIAorICA8aW5wdXQgdmFsdWU9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZyIgbmFtZT0ic2l0ZXNlYXJjaCIgdHlwZT0iaGlkZGVuIi8+CisgIDxpbnB1dCBjbGFzcz0ic2VhcmNoLXF1ZXJ5IiBuYW1lPSJxIiBpZD0icXVlcnkiIHR5cGU9InRleHQiIC8+Cis8L2Zvcm0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vY29vcC9jc2UvYnJhbmQ/Zm9ybT1zZWFyY2gtZm9ybSI+PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgPGlmcmFtZSBzcmM9Imh0dHA6Ly93d3cuZmFjZWJvb2suY29tL3BsdWdpbnMvbGlrZS5waHA/aHJlZj1odHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmcvYXRsYXMtZG9jcyZzZW5kPWZhbHNlJmxheW91dD1idXR0b25fY291bnQmc2hvdy1mYWNlcz1mYWxzZSZhY3Rpb249bGlrZSZjb2xvcnNjaGVtZT1kYXJrIgorICAgICAgICBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0iMCIKKyAgICAgICAgc3R5bGU9ImJvcmRlcjpub25lOyB3aWR0aDo4MHB4OyBoZWlnaHQ6MjBweDsgbWFyZ2luLXRvcDogMTBweDsiICBjbGFzcz0icHVsbC1yaWdodCIgPjwvaWZyYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9hcGlzLmdvb2dsZS5jb20vanMvcGx1c29uZS5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgPHVsIGNsYXNzPSJuYXYgcHVsbC1yaWdodCI+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CisgICAgCisgICAgPGRpdiBjbGFzcz0iZy1wbHVzb25lIiBkYXRhLWhyZWY9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzIiBkYXRhLXNpemU9Im1lZGl1bSIgIHdpZHRoPSI2MHB4IiBhbGlnbj0icmlnaHQiID48L2Rpdj4KKworICAgICAgICA8L2xpPjwvdWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAKKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICAKKyAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICA8ZGl2IGlkPSJiYW5uZXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLWxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLiIgaWQ9ImJhbm5lckxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hdGxhcy1sb2dvLnBuZyIgIGFsdD0iQXBhY2hlIEF0bGFzIiB3aWR0aD0iMjAwcHgiIGhlaWdodD0iNDVweCIvPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+ICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2luY3ViYXRvci5hcGFjaGUub3JnIiBpZD0iYmFubmVyUmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hcGFjaGUtaW5jdWJhdG9yLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgSW5jdWJhdG9yIi8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIj48aHIvPjwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImJyZWFkY3J1bWJzIj4KKyAgICAgICAgPHVsIGNsYXNzPSJicmVhZGNydW1iIj4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZyIgY2xhc3M9ImV4dGVybmFsTGluayIgdGl0bGU9IkFwYWNoZSI+CisgICAgICAgIEFwYWNoZTwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iQXRsYXMiPgorICAgICAgICBBdGxhczwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICA8bGkgY2xhc3M9IiI+VGVhbSBsaXN0PC9saT4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgPGxpIGlkPSJwdWJsaXNoRGF0ZSIgY2xhc3M9InB1bGwtcmlnaHQiPkxhc3QgUHVibGlzaGVkOiAyMDE1LTA3LTA5PC9saT4gPGxpIGNsYXNzPSJkaXZpZGVyIHB1bGwtcmlnaHQiPnw8L2xpPgorICAgICAgICAgICAgICA8bGkgaWQ9InByb2plY3RWZXJzaW9uIiBjbGFzcz0icHVsbC1yaWdodCI+VmVyc2lvbjogMC41LWluY3ViYXRpbmc8L2xpPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvZGl2PgorCisgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICA8ZGl2IGlkPSJib2R5Q29sdW1uIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj5UaGUgVGVhbTxhIG5hbWU9IlRoZV9UZWFtIj48L2E+PC9oMj48YSBuYW1lPSJUaGVfVGVhbSI+PC9hPgorPHA+QSBzdWNjZXNzZnVsIHByb2plY3QgcmVxdWlyZXMgbWFueSBwZW9wbGUgdG8gcGxheSBtYW55IHJvbGVzLiBTb21lIG1lbWJlcnMgd3JpdGUgY29kZSBvciBkb2N1bWVudGF0aW9uLCB3aGlsZSBvdGhlcnMgYXJlIHZhbHVhYmxlIGFzIHRlc3RlcnMsIHN1Ym1pdHRpbmcgcGF0Y2hlcyBhbmQgc3VnZ2VzdGlvbnMuPC9wPgorPHA+VGhlIHRlYW0gaXMgY29tcHJpc2VkIG9mIE1lbWJlcnMgYW5kIENvbnRyaWJ1dG9ycy4gTWVtYmVycyBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBvZiBhIHByb2plY3QgYW5kIGFjdGl2ZWx5IGV2b2x2ZSB0aGUgY29kZS1iYXNlLiBDb250cmlidXRvcnMgaW1wcm92ZSB0aGUgcHJvamVjdCB0aHJvdWdoIHN1Ym1pc3Npb24gb2YgcGF0Y2hlcyBhbmQgc3VnZ2VzdGlvbnMgdG8gdGhlIE1lbWJlcnMuIFRoZSBudW1iZXIgb2YgQ29udHJpYnV0b3JzIHRvIHRoZSBwcm9qZWN0IGlzIHVuYm91bmRlZC4gR2V0IGludm9sdmVkIHRvZGF5LiBBbGwgY29udHJpYnV0aW9ucyB0byB0aGUgcHJvamVjdCBhcmUgZ3JlYXRseSBhcHByZWNpYXRlZC48L3A+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5NZW1iZXJzPGEgbmFtZT0iTWVtYmVycyI+PC9hPjwvaDM+PGEgbmFtZT0iTWVtYmVycyI+PC9hPgorPHA+VGhlIGZvbGxvd2luZyBpcyBhIGxpc3Qgb2YgZGV2ZWxvcGVycyB3aXRoIGNvbW1pdCBwcml2aWxlZ2VzIHRoYXQgaGF2ZSBkaXJlY3RseSBjb250cmlidXRlZCB0byB0aGUgcHJvamVjdCBpbiBvbmUgd2F5IG9yIGFub3RoZXIuPC9wPgorPHRhYmxlIGJvcmRlcj0iMCIgY2xhc3M9InRhYmxlIHRhYmxlLXN0cmlwZWQiPgorPHRyIGNsYXNzPSJhIj4KKzx0aD5JZDwvdGg+Cis8dGg+TmFtZTwvdGg+Cis8dGg+RW1haWw8L3RoPgorPHRoPk9yZ2FuaXphdGlvbjwvdGg+Cis8dGg+Um9sZXM8L3RoPgorPHRoPlRpbWUgWm9uZTwvdGg+Cis8dGg+QWN0dWFsIFRpbWUgKEdNVCk8L3RoPjwvdHI+Cis8dHIgY2xhc3M9ImIiPgorPHRkPjxhIG5hbWU9InZlbmthdGVzaCI+PC9hPnZlbmthdGVzaDwvdGQ+Cis8dGQ+VmVua2F0ZXNoIFNlZXRoYXJhbTwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOnZlbmthdGVzaEBhcGFjaGUub3JnIj52ZW5rYXRlc2hAYXBhY2hlLm9yZzwvYT48L3RkPgorPHRkPkhvcnRvbndvcmtzIEluYy48L3RkPgorPHRkPmNvbW1pdHRlciwgUFBNQzwvdGQ+Cis8dGQ+LTg8L3RkPgorPHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItMCI+LTg8L3NwYW4+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJhIj4KKzx0ZD48YSBuYW1lPSJyaGJ1dGFuaSI+PC9hPnJoYnV0YW5pPC90ZD4KKzx0ZD5IYXJpc2ggQnV0YW5pPC90ZD4KKzx0ZD48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJtYWlsdG86cmhidXRhbmlAYXBhY2hlLm9yZyI+cmhidXRhbmlAYXBhY2hlLm9yZzwvYT48L3RkPgorPHRkPkhvcnRvbndvcmtzIEluYy48L3RkPgorPHRkPmNvbW1pdHRlciwgUFBNQzwvdGQ+Cis8dGQ+LTg8L3RkPgorPHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItMSI+LTg8L3NwYW4+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJiIj4KKzx0ZD48YSBuYW1lPSJzaHdldGhhZ3MiPjwvYT5zaHdldGhhZ3M8L3RkPgorPHRkPlNod2V0aGEgR1M8L3RkPgorPHRkPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Im1haWx0bzpzaHdldGhhZ3NAYXBhY2hlLm9yZyI+c2h3ZXRoYWdzQGFwYWNoZS5vcmc8L2E+PC90ZD4KKzx0ZD5Ib3J0b253b3JrcyBJbmMuPC90ZD4KKzx0ZD5jb21taXR0ZXIsIFBQTUM8L3RkPgorPHRkPiswNTozMDwvdGQ+Cis8dGQ+PHNwYW4gaWQ9ImRldmVsb3Blci0yIj4rMDU6MzA8L3NwYW4+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJhIj4KKzx0ZD48YSBuYW1lPSJqbWFyb24iPjwvYT5qbWFyb248L3RkPgorPHRkPkpvbiBNYXJvbjwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOmptYXJvbkBob3J0b253b3Jrcy5jb20iPmptYXJvbkBob3J0b253b3Jrcy5jb208L2E+PC90ZD4KKzx0ZD5Ib3J0b253b3JrcyBJbmMuPC90ZD4KKzx0ZD5jb21taXR0ZXI8L3RkPgorPHRkPi01PC90ZD4KKzx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLTMiPi01PC9zcGFuPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0iYiI+Cis8dGQ+PGEgbmFtZT0iQUFobiI+PC9hPkFBaG48L3RkPgorPHRkPkFuZHJldyBBaG48L3RkPgorPHRkPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Im1haWx0bzphYWhuQGhvcnRvbndvcmtzLmNvbSI+YWFobkBob3J0b253b3Jrcy5jb208L2E+PC90ZD4KKzx0ZD5Ib3J0b253b3JrcyBJbmMuPC90ZD4KKzx0ZD5jb21taXR0ZXI8L3RkPgorPHRkPi04PC90ZD4KKzx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLTQiPi04PC9zcGFuPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0iYSI+Cis8dGQ+PGEgbmFtZT0iZGthc3BhciI+PC9hPmRrYXNwYXI8L3RkPgorPHRkPkRhdmlkIEthc3BhcjwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOmRrYXNwYXJAbWVyay5jb20iPmRrYXNwYXJAbWVyay5jb208L2E+PC90ZD4KKzx0ZD5NZXJjayAmYW1wOyBDbyBJbmMuPC90ZD4KKzx0ZD5jb21taXR0ZXI8L3RkPgorPHRkPisxPC90ZD4KKzx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLTUiPisxPC9zcGFuPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0iYiI+Cis8dGQ+PGEgbmFtZT0iaWxhc2VrIj48L2E+aWxhc2VrPC90ZD4KKzx0ZD5Jdm8gTGFzZWs8L3RkPgorPHRkPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Im1haWx0bzppbGFzZWtAbWVyY2suY29tIj5pbGFzZWtAbWVyY2suY29tPC9hPjwvdGQ+Cis8dGQ+TWVyY2sgJmFtcDsgQ28gSW5jLjwvdGQ+Cis8dGQ+Y29tbWl0dGVyPC90ZD4KKzx0ZD4rMTwvdGQ+Cis8dGQ+PHNwYW4gaWQ9ImRldmVsb3Blci02Ij4rMTwvc3Bhbj48L3RkPjwvdHI+Cis8dHIgY2xhc3M9ImEiPgorPHRkPjxhIG5hbWU9ImRmdXNhcm8iPjwvYT5kZnVzYXJvPC90ZD4KKzx0ZD5EZW5uaXMgRnVzYXJvPC90ZD4KKzx0ZD48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJtYWlsdG86ZGZ1c2Fyb0BhZXRuYS5jb20iPmRmdXNhcm9AYWV0bmEuY29tPC9hPjwvdGQ+Cis8dGQ+QWV0bmEgSW5jLjwvdGQ+Cis8dGQ+Y29tbWl0dGVyPC90ZD4KKzx0ZD4tNTwvdGQ+Cis8dGQ+PHNwYW4gaWQ9ImRldmVsb3Blci03Ij4tNTwvc3Bhbj48L3RkPjwvdHI+Cis8dHIgY2xhc3M9ImIiPgorPHRkPjxhIG5hbWU9ImNoeXplciI+PC9hPmNoeXplcjwvdGQ+Cis8dGQ+Q2hyaXMgSHl6ZXI8L3RkPgorPHRkPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Im1haWx0bzpjaHl6ZXJAYWV0bmEuY29tIj5jaHl6ZXJAYWV0bmEuY29tPC9hPjwvdGQ+Cis8dGQ+QWV0bmEgSW5jLjwvdGQ+Cis8dGQ+Y29tbWl0dGVyPC90ZD4KKzx0ZD4tNTwvdGQ+Cis8dGQ+PHNwYW4gaWQ9ImRldmVsb3Blci04Ij4tNTwvc3Bhbj48L3RkPjwvdHI+Cis8dHIgY2xhc3M9ImEiPgorPHRkPjxhIG5hbWU9ImRtYXJrd2F0Ij48L2E+ZG1hcmt3YXQ8L3RkPgorPHRkPkRhbmllbCBNYXJrd2F0PC90ZD4KKzx0ZD48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJtYWlsdG86ZG1hcmt3YXRAYWV0bmEuY29tIj5kbWFya3dhdEBhZXRuYS5jb208L2E+PC90ZD4KKzx0ZD5BZXRuYSBJbmMuPC90ZD4KKzx0ZD5jb21taXR0ZXI8L3RkPgorPHRkPi01PC90ZD4KKzx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLTkiPi01PC9zcGFuPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0iYiI+Cis8dGQ+PGEgbmFtZT0iZ3NlbmlhIj48L2E+Z3NlbmlhPC90ZD4KKzx0ZD5HcmVnIFNlbmlhPC90ZD4KKzx0ZD48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJtYWlsdG86Z3NlbmlhQGFldG5hLmNvbSI+Z3NlbmlhQGFldG5hLmNvbTwvYT48L3RkPgorPHRkPkFldG5hIEluYy48L3RkPgorPHRkPmNvbW1pdHRlcjwvdGQ+Cis8dGQ+LTU8L3RkPgorPHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItMTAiPi01PC9zcGFuPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0iYSI+Cis8dGQ+PGEgbmFtZT0iamFtZXMiPjwvYT5qYW1lczwvdGQ+Cis8dGQ+SmFtZXMgVm9sbG1lcjwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOmphbWVzQHRhcmdldC5jb20iPmphbWVzQHRhcmdldC5jb208L2E+PC90ZD4KKzx0ZD5UYXJnZXQgSW5jLjwvdGQ+Cis8dGQ+Y29tbWl0dGVyPC90ZD4KKzx0ZD4tNjwvdGQ+Cis8dGQ+PHNwYW4gaWQ9ImRldmVsb3Blci0xMSI+LTY8L3NwYW4+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJiIj4KKzx0ZD48YSBuYW1lPSJhZG9zc2V0dCI+PC9hPmFkb3NzZXR0PC90ZD4KKzx0ZD5BYXJvbiBEb3NzZXR0PC90ZD4KKzx0ZD48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJtYWlsdG86YWRvc3NldHRAdGFyZ2V0LmNvbSI+YWRvc3NldHRAdGFyZ2V0LmNvbTwvYT48L3RkPgorPHRkPlRhcmdldCBJbmMuPC90ZD4KKzx0ZD5jb21taXR0ZXI8L3RkPgorPHRkPi02PC90ZD4KKzx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLTEyIj4tNjwvc3Bhbj48L3RkPjwvdHI+Cis8dHIgY2xhc3M9ImEiPgorPHRkPjxhIG5hbWU9Im1zY2h1c3NsZXIiPjwvYT5tc2NodXNzbGVyPC90ZD4KKzx0ZD5NaXRjaCBTY2h1c3NsZXI8L3RkPgorPHRkPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Im1haWx0bzptc2NodXNzbGVyQGFwYWNoZS5vcmciPm1zY2h1c3NsZXJAYXBhY2hlLm9yZzwvYT48L3RkPgorPHRkPkpQTUM8L3RkPgorPHRkPmNvbW1pdHRlcjwvdGQ+Cis8dGQ+LTU8L3RkPgorPHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItMTMiPi01PC9zcGFuPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0iYiI+Cis8dGQ+PGEgbmFtZT0idmF2YXNhcmFsYSI+PC9hPnZhdmFzYXJhbGE8L3RkPgorPHRkPlZpc3dhbmF0aCBBdmFzYXJhbGE8L3RkPgorPHRkPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Im1haWx0bzp2YXZhc2FyYWxhQHNsYi5jb20iPnZhdmFzYXJhbGFAc2xiLmNvbTwvYT48L3RkPgorPHRkPlNjaGx1bWJlcmdlciBJbmMuPC90ZD4KKzx0ZD5jb21taXR0ZXI8L3RkPgorPHRkPi02PC90ZD4KKzx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLTE0Ij4tNjwvc3Bhbj48L3RkPjwvdHI+Cis8dHIgY2xhc3M9ImEiPgorPHRkPjxhIG5hbWU9ImF2YXJtYSI+PC9hPmF2YXJtYTwvdGQ+Cis8dGQ+QW5pbCBWYXJtYTwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOmF2YXJtYUBzbGIuY29tIj5hdmFybWFAc2xiLmNvbTwvYT48L3RkPgorPHRkPlNjaGx1bWJlcmdlciBJbmMuPC90ZD4KKzx0ZD5jb21taXR0ZXI8L3RkPgorPHRkPi02PC90ZD4KKzx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLTE1Ij4tNjwvc3Bhbj48L3RkPjwvdHI+Cis8dHIgY2xhc3M9ImIiPgorPHRkPjxhIG5hbWU9ImJzdG9ydHoiPjwvYT5ic3RvcnR6PC90ZD4KKzx0ZD5CYXJiYXJhIFN0b3J0ejwvdGQ+Cis8dGQ+YnN0b3J0ekBzYXA8L3RkPgorPHRkPlNBUCBJbmMuPC90ZD4KKzx0ZD5jb21taXR0ZXI8L3RkPgorPHRkPi04PC90ZD4KKzx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLTE2Ij4tODwvc3Bhbj48L3RkPjwvdHI+Cis8dHIgY2xhc3M9ImEiPgorPHRkPjxhIG5hbWU9InNyaWtzdW4iPjwvYT5zcmlrc3VuPC90ZD4KKzx0ZD5TcmlrYW50aCBTdW5kYXJyYWphbjwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOnNyaWtzdW5AYXBhY2hlLm9yZyI+c3Jpa3N1bkBhcGFjaGUub3JnPC9hPjwvdGQ+Cis8dGQ+SW5Nb2JpPC90ZD4KKzx0ZD5jb21taXR0ZXIsIFBQTUM8L3RkPgorPHRkPiswNTozMDwvdGQ+Cis8dGQ+PHNwYW4gaWQ9ImRldmVsb3Blci0xNyI+KzA1OjMwPC9zcGFuPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0iYiI+Cis8dGQ+PGEgbmFtZT0ic3N1cmVzaCI+PC9hPnNzdXJlc2g8L3RkPgorPHRkPlN1cmVzaCBTcmluaXZhczwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOnNzdXJlc2hAYXBhY2hlLm9yZyI+c3N1cmVzaEBhcGFjaGUub3JnPC9hPjwvdGQ+Cis8dGQ+SG9ydG9ud29ya3MgSW5jLjwvdGQ+Cis8dGQ+Y29tbWl0dGVyPC90ZD4KKzx0ZD4tODwvdGQ+Cis8dGQ+PHNwYW4gaWQ9ImRldmVsb3Blci0xOCI+LTg8L3NwYW4+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJhIj4KKzx0ZD48YSBuYW1lPSJ2cmFuZ2FuYXRoYW4iPjwvYT52cmFuZ2FuYXRoYW48L3RkPgorPHRkPlZlbmthdCBSYW5nYW5hdGhhbjwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOnZyYW5nYW5hdGhhbkBhcGFjaGUub3JnIj52cmFuZ2FuYXRoYW5AYXBhY2hlLm9yZzwvYT48L3RkPgorPHRkPkhvcnRvbndvcmtzIEluYy48L3RkPgorPHRkPmNvbW1pdHRlcjwvdGQ+Cis8dGQ+LTg8L3RkPgorPHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItMTkiPi04PC9zcGFuPjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDM+Q29udHJpYnV0b3JzPGEgbmFtZT0iQ29udHJpYnV0b3JzIj48L2E+PC9oMz48YSBuYW1lPSJDb250cmlidXRvcnMiPjwvYT4KKzxwPlRoZXJlIGFyZSBubyBjb250cmlidXRvcnMgbGlzdGVkIGZvciB0aGlzIHByb2plY3QuIFBsZWFzZSBjaGVjayBiYWNrIGFnYWluIGxhdGVyLjwvcD48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitmdW5jdGlvbiBvZmZzZXREYXRlKGlkLCBvZmZzZXQpIHsKKyAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKKyAgICB2YXIgbm93VGltZSA9IG5vdy5nZXRUaW1lKCk7CisgICAgdmFyIGxvY2FsT2Zmc2V0ID0gbm93LmdldFRpbWV6b25lT2Zmc2V0KCk7CisgICAgdmFyIGRldmVsb3BlclRpbWUgPSBub3dUaW1lICsgKCBvZmZzZXQgKiA2MCAqIDYwICogMTAwMCApKyAoIGxvY2FsT2Zmc2V0ICogNjAgKiAxMDAwICk7CisgICAgdmFyIGRldmVsb3BlckRhdGUgPSBuZXcgRGF0ZShkZXZlbG9wZXJUaW1lKTsKKworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5pbm5lckhUTUwgPSBkZXZlbG9wZXJEYXRlOworfQorCitmdW5jdGlvbiBpbml0KCl7CisgICAgb2Zmc2V0RGF0ZSgnZGV2ZWxvcGVyLTAnLCAnLTgnKTsKKyAgICBvZmZzZXREYXRlKCdkZXZlbG9wZXItMScsICctOCcpOworICAgIG9mZnNldERhdGUoJ2RldmVsb3Blci0yJywgJzAnKTsKKyAgICBvZmZzZXREYXRlKCdkZXZlbG9wZXItMycsICctNScpOworICAgIG9mZnNldERhdGUoJ2RldmVsb3Blci00JywgJy04Jyk7CisgICAgb2Zmc2V0RGF0ZSgnZGV2ZWxvcGVyLTUnLCAnKzEnKTsKKyAgICBvZmZzZXREYXRlKCdkZXZlbG9wZXItNicsICcrMScpOworICAgIG9mZnNldERhdGUoJ2RldmVsb3Blci03JywgJy01Jyk7CisgICAgb2Zmc2V0RGF0ZSgnZGV2ZWxvcGVyLTgnLCAnLTUnKTsKKyAgICBvZmZzZXREYXRlKCdkZXZlbG9wZXItOScsICctNScpOworICAgIG9mZnNldERhdGUoJ2RldmVsb3Blci0xMCcsICctNScpOworICAgIG9mZnNldERhdGUoJ2RldmVsb3Blci0xMScsICctNicpOworICAgIG9mZnNldERhdGUoJ2RldmVsb3Blci0xMicsICctNicpOworICAgIG9mZnNldERhdGUoJ2RldmVsb3Blci0xMycsICctNScpOworICAgIG9mZnNldERhdGUoJ2RldmVsb3Blci0xNCcsICctNicpOworICAgIG9mZnNldERhdGUoJ2RldmVsb3Blci0xNScsICctNicpOworICAgIG9mZnNldERhdGUoJ2RldmVsb3Blci0xNicsICctOCcpOworICAgIG9mZnNldERhdGUoJ2RldmVsb3Blci0xNycsICcwJyk7CisgICAgb2Zmc2V0RGF0ZSgnZGV2ZWxvcGVyLTE4JywgJy04Jyk7CisgICAgb2Zmc2V0RGF0ZSgnZGV2ZWxvcGVyLTE5JywgJy04Jyk7Cit9CisKK3dpbmRvdy5vbkxvYWQgPSBpbml0KCk7Cis8L3NjcmlwdD48L2Rpdj48L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorCisgICAgPGhyLz4KKworICAgIDxmb290ZXI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgc3BhbjEyIj5Db3B5cmlnaHQgJmNvcHk7ICAgICAgICAgICAgICAgICAgICAyMDE1CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciPkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9hPi4KKyAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPHAgaWQ9InBvd2VyZWRCeSIgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy8iIHRpdGxlPSJCdWlsdCBieSBNYXZlbiIgY2xhc3M9InBvd2VyZWRCeSI+CisgICAgICAgIDxpbWcgY2xhc3M9ImJ1aWx0QnkiIGFsdD0iQnVpbHQgYnkgTWF2ZW4iIHNyYz0iLi9pbWFnZXMvbG9nb3MvbWF2ZW4tZmVhdGhlci5wbmciIC8+CisgICAgICA8L2E+CisgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgPC9mb290ZXI+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhLzAuNS4wLWluY3ViYXRpbmcvdHlwZXMtaW5zdGFuY2UucG5nIGIvMC41LjAtaW5jdWJhdGluZy90eXBlcy1pbnN0YW5jZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFmY2EyMQotLS0gL2Rldi9udWxsCisrKyBiLzAuNS4wLWluY3ViYXRpbmcvdHlwZXMtaW5zdGFuY2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0FyY2hpdGVjdHVyZS5odG1sIGIvQXJjaGl0ZWN0dXJlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNjNTI3MQotLS0gL2Rldi9udWxsCisrKyBiL0FyY2hpdGVjdHVyZS5odG1sCkBAIC0wLDAgKzEsMjYxIEBACis8IURPQ1RZUEUgaHRtbD4KKzwhLS0KKyB8IEdlbmVyYXRlZCBieSBBcGFjaGUgTWF2ZW4gRG94aWEgYXQgMjAxNS0wNy0wOQorIHwgUmVuZGVyZWQgdXNpbmcgQXBhY2hlIE1hdmVuIEZsdWlkbyBTa2luIDEuMy4wCistLT4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CisgICAgPG1ldGEgbmFtZT0iRGF0ZS1SZXZpc2lvbi15eXl5bW1kZCIgY29udGVudD0iMjAxNTA3MDkiIC8+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4iIC8+CisgICAgPHRpdGxlPk1ldGFkYXRhIGFuZCBHb3Zlcm5hbmNlIC0gQXJjaGl0ZWN0dXJlPC90aXRsZT4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmNzcyIgLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3NpdGUuY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvcHJpbnQuY3NzIiBtZWRpYT0icHJpbnQiIC8+CisKKyAgICAgIAorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4vanMvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uanMiPjwvc2NyaXB0PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHsgJCggJy5jYXJvdXNlbCcgKS5jYXJvdXNlbCggeyBpbnRlcnZhbDogMzUwMCB9ICkgfSApOzwvc2NyaXB0PgorICAgICAgICAgIAorICAgICAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keSBjbGFzcz0idG9wQmFyRW5hYmxlZCI+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisKKyAgICA8ZGl2IGlkPSJ0b3BiYXIiIGNsYXNzPSJuYXZiYXIgbmF2YmFyLWZpeGVkLXRvcCAiPgorICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWlubmVyIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiIHN0eWxlPSJ3aWR0aDogNjglOyI+PGRpdiBjbGFzcz0ibmF2LWNvbGxhcHNlIj4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Im5hdiI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkF0bGFzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iQWJvdXQiPkFib3V0PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9Ildpa2kiPldpa2k8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iTmV3cyI+TmV3czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXQtd2lwLXVzLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci1hdGxhcy5naXQiICB0aXRsZT0iR2l0Ij5HaXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci9hdGxhcyIgIHRpdGxlPSJTdm4iPlN2bjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9BVExBUyIgIHRpdGxlPSJKaXJhIj5KaXJhPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTL1Bvd2VyZWRCeSIgIHRpdGxlPSJQb3dlcmVkIGJ5Ij5Qb3dlcmVkIGJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vYmxvZ3MuYXBhY2hlLm9yZy9hdGxhcy8iICB0aXRsZT0iQmxvZyI+QmxvZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlByb2plY3QgSW5mb3JtYXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0icHJvamVjdC1pbmZvLmh0bWwiICB0aXRsZT0iU3VtbWFyeSI+U3VtbWFyeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibWFpbC1saXN0cy5odG1sIiAgdGl0bGU9Ik1haWxpbmcgTGlzdHMiPk1haWxpbmcgTGlzdHM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93ZWJjaGF0LmZyZWVub2RlLm5ldD9jaGFubmVscz1hcGFjaGVhdGxhcyZ1aW89ZDQiICB0aXRsZT0iSVJDIj5JUkM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InRlYW0tbGlzdC5odG1sIiAgdGl0bGU9IlRlYW0iPlRlYW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imlzc3VlLXRyYWNraW5nLmh0bWwiICB0aXRsZT0iSXNzdWUgVHJhY2tpbmciPklzc3VlIFRyYWNraW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJzb3VyY2UtcmVwb3NpdG9yeS5odG1sIiAgdGl0bGU9IlNvdXJjZSBSZXBvc2l0b3J5Ij5Tb3VyY2UgUmVwb3NpdG9yeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibGljZW5zZS5odG1sIiAgdGl0bGU9IkxpY2Vuc2UiPkxpY2Vuc2U8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZWxlYXNlcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZHluL2Nsb3Nlci5jZ2kvaW5jdWJhdG9yL2F0bGFzLzAuNS4wLWluY3ViYXRpbmcvIiAgdGl0bGU9IjAuNS1pbmN1YmF0aW5nIj4wLjUtaW5jdWJhdGluZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkRvY3VtZW50YXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iMC41LjAtaW5jdWJhdGluZy9pbmRleC5odG1sIiAgdGl0bGU9ImN1cnJlbnQiPmN1cnJlbnQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IjAuNS4wLWluY3ViYXRpbmcvaW5kZXguaHRtbCIgIHRpdGxlPSIwLjUtaW5jdWJhdGluZyI+MC41LWluY3ViYXRpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZXNvdXJjZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJPdmVydmlldyI+T3ZlcnZpZXc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlF1aWNrU3RhcnQuaHRtbCIgIHRpdGxlPSJHZXR0aW5nIFN0YXJ0ZWQiPkdldHRpbmcgU3RhcnRlZDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQXJjaGl0ZWN0dXJlLmh0bWwiICB0aXRsZT0iQXJjaGl0ZWN0dXJlIj5BcmNoaXRlY3R1cmU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Ikluc3RhbGxhdGlvblN0ZXBzLmh0bWwiICB0aXRsZT0iSW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlR5cGVTeXN0ZW0uaHRtbCIgIHRpdGxlPSJUeXBlIFN5c3RlbSI+VHlwZSBTeXN0ZW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkNvbmZpZ3VyYXRpb24uaHRtbCIgIHRpdGxlPSJDb25maWd1cmF0aW9uIj5Db25maWd1cmF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJTZWN1cml0eS5odG1sIiAgdGl0bGU9IlNlY3VyaXR5Ij5TZWN1cml0eTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iYXBpL3Jlc3QuaHRtbCIgIHRpdGxlPSJSZXN0IEFQSSI+UmVzdCBBUEk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BU0YgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vaG93LWl0LXdvcmtzLmh0bWwiICB0aXRsZT0iSG93IEFwYWNoZSBXb3JrcyI+SG93IEFwYWNoZSBXb3JrczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vIiAgdGl0bGU9IkZvdW5kYXRpb24iPkZvdW5kYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3Nwb25zb3JzaGlwLmh0bWwiICB0aXRsZT0iU3BvbnNvcmluZyBBcGFjaGUiPlNwb25zb3JpbmcgQXBhY2hlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi90aGFua3MuaHRtbCIgIHRpdGxlPSJUaGFua3MiPlRoYW5rczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBpZD0ic2VhcmNoLWZvcm0iIGFjdGlvbj0iaHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaCIgbWV0aG9kPSJnZXQiICBjbGFzcz0ibmF2YmFyLXNlYXJjaCBwdWxsLXJpZ2h0IiA+CisgICAgCisgIDxpbnB1dCB2YWx1ZT0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnIiBuYW1lPSJzaXRlc2VhcmNoIiB0eXBlPSJoaWRkZW4iLz4KKyAgPGlucHV0IGNsYXNzPSJzZWFyY2gtcXVlcnkiIG5hbWU9InEiIGlkPSJxdWVyeSIgdHlwZT0idGV4dCIgLz4KKzwvZm9ybT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9jb29wL2NzZS9icmFuZD9mb3JtPXNlYXJjaC1mb3JtIj48L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICA8aWZyYW1lIHNyYz0iaHR0cDovL3d3dy5mYWNlYm9vay5jb20vcGx1Z2lucy9saWtlLnBocD9ocmVmPWh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzJnNlbmQ9ZmFsc2UmbGF5b3V0PWJ1dHRvbl9jb3VudCZzaG93LWZhY2VzPWZhbHNlJmFjdGlvbj1saWtlJmNvbG9yc2NoZW1lPWRhcmsiCisgICAgICAgIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPSIwIgorICAgICAgICBzdHlsZT0iYm9yZGVyOm5vbmU7IHdpZHRoOjgwcHg7IGhlaWdodDoyMHB4OyBtYXJnaW4tdG9wOiAxMHB4OyIgIGNsYXNzPSJwdWxsLXJpZ2h0IiA+PC9pZnJhbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2FwaXMuZ29vZ2xlLmNvbS9qcy9wbHVzb25lLmpzIj48L3NjcmlwdD4KKworICAgICAgICA8dWwgY2xhc3M9Im5hdiBwdWxsLXJpZ2h0Ij48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij4KKyAgICAKKyAgICA8ZGl2IGNsYXNzPSJnLXBsdXNvbmUiIGRhdGEtaHJlZj0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3MiIGRhdGEtc2l6ZT0ibWVkaXVtIiAgd2lkdGg9IjYwcHgiIGFsaWduPSJyaWdodCIgPjwvZGl2PgorCisgICAgICAgIDwvbGk+PC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIAorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIAorICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgIDxkaXYgaWQ9ImJhbm5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtbGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uIiBpZD0iYmFubmVyTGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2F0bGFzLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgQXRsYXMiIHdpZHRoPSIyMDBweCIgaGVpZ2h0PSI0NXB4Ii8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4gICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vaW5jdWJhdG9yLmFwYWNoZS5vcmciIGlkPSJiYW5uZXJSaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2FwYWNoZS1pbmN1YmF0b3ItbG9nby5wbmciICBhbHQ9IkFwYWNoZSBJbmN1YmF0b3IiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiPjxoci8+PC9kaXY+CisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0iYnJlYWRjcnVtYnMiPgorICAgICAgICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiPgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iQXBhY2hlIj4KKyAgICAgICAgQXBhY2hlPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJBdGxhcyI+CisgICAgICAgIEF0bGFzPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0iIj5BcmNoaXRlY3R1cmU8L2xpPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICA8bGkgaWQ9InB1Ymxpc2hEYXRlIiBjbGFzcz0icHVsbC1yaWdodCI+TGFzdCBQdWJsaXNoZWQ6IDIwMTUtMDctMDk8L2xpPiA8bGkgY2xhc3M9ImRpdmlkZXIgcHVsbC1yaWdodCI+fDwvbGk+CisgICAgICAgICAgICAgIDxsaSBpZD0icHJvamVjdFZlcnNpb24iIGNsYXNzPSJwdWxsLXJpZ2h0Ij5WZXJzaW9uOiAwLjYtaW5jdWJhdGluZy1TTkFQU0hPVDwvbGk+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9kaXY+CisKKyAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxkaXYgaWQ9ImJvZHlDb2x1bW4iID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPkFyY2hpdGVjdHVyZTxhIG5hbWU9IkFyY2hpdGVjdHVyZSI+PC9hPjwvaDI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5JbnRyb2R1Y3Rpb248YSBuYW1lPSJJbnRyb2R1Y3Rpb24iPjwvYT48L2gzPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDM+TWV0YWRhdGEgSGlnaCBMZXZlbCBBcmNoaXRlY3R1cmUgLSBPdmVydmlldzxhIG5hbWU9Ik1ldGFkYXRhX0hpZ2hfTGV2ZWxfQXJjaGl0ZWN0dXJlXy1fT3ZlcnZpZXciPjwvYT48L2gzPgorPHA+PGltZyBzcmM9ImFyY2hpdGVjdHVyZS5wbmciIGFsdD0iIiAvPjwvcD48L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorCisgICAgPGhyLz4KKworICAgIDxmb290ZXI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgc3BhbjEyIj5Db3B5cmlnaHQgJmNvcHk7ICAgICAgICAgICAgICAgICAgICAyMDE1CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciPkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9hPi4KKyAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPHAgaWQ9InBvd2VyZWRCeSIgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy8iIHRpdGxlPSJCdWlsdCBieSBNYXZlbiIgY2xhc3M9InBvd2VyZWRCeSI+CisgICAgICAgIDxpbWcgY2xhc3M9ImJ1aWx0QnkiIGFsdD0iQnVpbHQgYnkgTWF2ZW4iIHNyYz0iLi9pbWFnZXMvbG9nb3MvbWF2ZW4tZmVhdGhlci5wbmciIC8+CisgICAgICA8L2E+CisgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgPC9mb290ZXI+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0NvbmZpZ3VyYXRpb24uaHRtbCBiL0NvbmZpZ3VyYXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDVjMWEzCi0tLSAvZGV2L251bGwKKysrIGIvQ29uZmlndXJhdGlvbi5odG1sCkBAIC0wLDAgKzEsMzEwIEBACis8IURPQ1RZUEUgaHRtbD4KKzwhLS0KKyB8IEdlbmVyYXRlZCBieSBBcGFjaGUgTWF2ZW4gRG94aWEgYXQgMjAxNS0wNy0wOQorIHwgUmVuZGVyZWQgdXNpbmcgQXBhY2hlIE1hdmVuIEZsdWlkbyBTa2luIDEuMy4wCistLT4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CisgICAgPG1ldGEgbmFtZT0iRGF0ZS1SZXZpc2lvbi15eXl5bW1kZCIgY29udGVudD0iMjAxNTA3MDkiIC8+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4iIC8+CisgICAgPHRpdGxlPk1ldGFkYXRhIGFuZCBHb3Zlcm5hbmNlIC0gQ29uZmlndXJpbmcgQXBhY2hlIEF0bGFzPC90aXRsZT4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmNzcyIgLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3NpdGUuY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvcHJpbnQuY3NzIiBtZWRpYT0icHJpbnQiIC8+CisKKyAgICAgIAorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4vanMvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uanMiPjwvc2NyaXB0PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHsgJCggJy5jYXJvdXNlbCcgKS5jYXJvdXNlbCggeyBpbnRlcnZhbDogMzUwMCB9ICkgfSApOzwvc2NyaXB0PgorICAgICAgICAgIAorICAgICAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keSBjbGFzcz0idG9wQmFyRW5hYmxlZCI+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisKKyAgICA8ZGl2IGlkPSJ0b3BiYXIiIGNsYXNzPSJuYXZiYXIgbmF2YmFyLWZpeGVkLXRvcCAiPgorICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWlubmVyIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiIHN0eWxlPSJ3aWR0aDogNjglOyI+PGRpdiBjbGFzcz0ibmF2LWNvbGxhcHNlIj4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Im5hdiI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkF0bGFzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iQWJvdXQiPkFib3V0PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9Ildpa2kiPldpa2k8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iTmV3cyI+TmV3czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXQtd2lwLXVzLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci1hdGxhcy5naXQiICB0aXRsZT0iR2l0Ij5HaXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci9hdGxhcyIgIHRpdGxlPSJTdm4iPlN2bjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9BVExBUyIgIHRpdGxlPSJKaXJhIj5KaXJhPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTL1Bvd2VyZWRCeSIgIHRpdGxlPSJQb3dlcmVkIGJ5Ij5Qb3dlcmVkIGJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vYmxvZ3MuYXBhY2hlLm9yZy9hdGxhcy8iICB0aXRsZT0iQmxvZyI+QmxvZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlByb2plY3QgSW5mb3JtYXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0icHJvamVjdC1pbmZvLmh0bWwiICB0aXRsZT0iU3VtbWFyeSI+U3VtbWFyeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibWFpbC1saXN0cy5odG1sIiAgdGl0bGU9Ik1haWxpbmcgTGlzdHMiPk1haWxpbmcgTGlzdHM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93ZWJjaGF0LmZyZWVub2RlLm5ldD9jaGFubmVscz1hcGFjaGVhdGxhcyZ1aW89ZDQiICB0aXRsZT0iSVJDIj5JUkM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InRlYW0tbGlzdC5odG1sIiAgdGl0bGU9IlRlYW0iPlRlYW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imlzc3VlLXRyYWNraW5nLmh0bWwiICB0aXRsZT0iSXNzdWUgVHJhY2tpbmciPklzc3VlIFRyYWNraW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJzb3VyY2UtcmVwb3NpdG9yeS5odG1sIiAgdGl0bGU9IlNvdXJjZSBSZXBvc2l0b3J5Ij5Tb3VyY2UgUmVwb3NpdG9yeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibGljZW5zZS5odG1sIiAgdGl0bGU9IkxpY2Vuc2UiPkxpY2Vuc2U8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZWxlYXNlcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZHluL2Nsb3Nlci5jZ2kvaW5jdWJhdG9yL2F0bGFzLzAuNS4wLWluY3ViYXRpbmcvIiAgdGl0bGU9IjAuNS1pbmN1YmF0aW5nIj4wLjUtaW5jdWJhdGluZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkRvY3VtZW50YXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iMC41LjAtaW5jdWJhdGluZy9pbmRleC5odG1sIiAgdGl0bGU9ImN1cnJlbnQiPmN1cnJlbnQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IjAuNS4wLWluY3ViYXRpbmcvaW5kZXguaHRtbCIgIHRpdGxlPSIwLjUtaW5jdWJhdGluZyI+MC41LWluY3ViYXRpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZXNvdXJjZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJPdmVydmlldyI+T3ZlcnZpZXc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlF1aWNrU3RhcnQuaHRtbCIgIHRpdGxlPSJHZXR0aW5nIFN0YXJ0ZWQiPkdldHRpbmcgU3RhcnRlZDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQXJjaGl0ZWN0dXJlLmh0bWwiICB0aXRsZT0iQXJjaGl0ZWN0dXJlIj5BcmNoaXRlY3R1cmU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Ikluc3RhbGxhdGlvblN0ZXBzLmh0bWwiICB0aXRsZT0iSW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlR5cGVTeXN0ZW0uaHRtbCIgIHRpdGxlPSJUeXBlIFN5c3RlbSI+VHlwZSBTeXN0ZW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkNvbmZpZ3VyYXRpb24uaHRtbCIgIHRpdGxlPSJDb25maWd1cmF0aW9uIj5Db25maWd1cmF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJTZWN1cml0eS5odG1sIiAgdGl0bGU9IlNlY3VyaXR5Ij5TZWN1cml0eTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iYXBpL3Jlc3QuaHRtbCIgIHRpdGxlPSJSZXN0IEFQSSI+UmVzdCBBUEk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BU0YgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vaG93LWl0LXdvcmtzLmh0bWwiICB0aXRsZT0iSG93IEFwYWNoZSBXb3JrcyI+SG93IEFwYWNoZSBXb3JrczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vIiAgdGl0bGU9IkZvdW5kYXRpb24iPkZvdW5kYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3Nwb25zb3JzaGlwLmh0bWwiICB0aXRsZT0iU3BvbnNvcmluZyBBcGFjaGUiPlNwb25zb3JpbmcgQXBhY2hlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi90aGFua3MuaHRtbCIgIHRpdGxlPSJUaGFua3MiPlRoYW5rczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBpZD0ic2VhcmNoLWZvcm0iIGFjdGlvbj0iaHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaCIgbWV0aG9kPSJnZXQiICBjbGFzcz0ibmF2YmFyLXNlYXJjaCBwdWxsLXJpZ2h0IiA+CisgICAgCisgIDxpbnB1dCB2YWx1ZT0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnIiBuYW1lPSJzaXRlc2VhcmNoIiB0eXBlPSJoaWRkZW4iLz4KKyAgPGlucHV0IGNsYXNzPSJzZWFyY2gtcXVlcnkiIG5hbWU9InEiIGlkPSJxdWVyeSIgdHlwZT0idGV4dCIgLz4KKzwvZm9ybT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9jb29wL2NzZS9icmFuZD9mb3JtPXNlYXJjaC1mb3JtIj48L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICA8aWZyYW1lIHNyYz0iaHR0cDovL3d3dy5mYWNlYm9vay5jb20vcGx1Z2lucy9saWtlLnBocD9ocmVmPWh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzJnNlbmQ9ZmFsc2UmbGF5b3V0PWJ1dHRvbl9jb3VudCZzaG93LWZhY2VzPWZhbHNlJmFjdGlvbj1saWtlJmNvbG9yc2NoZW1lPWRhcmsiCisgICAgICAgIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPSIwIgorICAgICAgICBzdHlsZT0iYm9yZGVyOm5vbmU7IHdpZHRoOjgwcHg7IGhlaWdodDoyMHB4OyBtYXJnaW4tdG9wOiAxMHB4OyIgIGNsYXNzPSJwdWxsLXJpZ2h0IiA+PC9pZnJhbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2FwaXMuZ29vZ2xlLmNvbS9qcy9wbHVzb25lLmpzIj48L3NjcmlwdD4KKworICAgICAgICA8dWwgY2xhc3M9Im5hdiBwdWxsLXJpZ2h0Ij48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij4KKyAgICAKKyAgICA8ZGl2IGNsYXNzPSJnLXBsdXNvbmUiIGRhdGEtaHJlZj0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3MiIGRhdGEtc2l6ZT0ibWVkaXVtIiAgd2lkdGg9IjYwcHgiIGFsaWduPSJyaWdodCIgPjwvZGl2PgorCisgICAgICAgIDwvbGk+PC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIAorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIAorICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgIDxkaXYgaWQ9ImJhbm5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtbGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uIiBpZD0iYmFubmVyTGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2F0bGFzLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgQXRsYXMiIHdpZHRoPSIyMDBweCIgaGVpZ2h0PSI0NXB4Ii8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4gICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vaW5jdWJhdG9yLmFwYWNoZS5vcmciIGlkPSJiYW5uZXJSaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2FwYWNoZS1pbmN1YmF0b3ItbG9nby5wbmciICBhbHQ9IkFwYWNoZSBJbmN1YmF0b3IiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiPjxoci8+PC9kaXY+CisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0iYnJlYWRjcnVtYnMiPgorICAgICAgICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiPgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iQXBhY2hlIj4KKyAgICAgICAgQXBhY2hlPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJBdGxhcyI+CisgICAgICAgIEF0bGFzPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0iIj5Db25maWd1cmluZyBBcGFjaGUgQXRsYXM8L2xpPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICA8bGkgaWQ9InB1Ymxpc2hEYXRlIiBjbGFzcz0icHVsbC1yaWdodCI+TGFzdCBQdWJsaXNoZWQ6IDIwMTUtMDctMDk8L2xpPiA8bGkgY2xhc3M9ImRpdmlkZXIgcHVsbC1yaWdodCI+fDwvbGk+CisgICAgICAgICAgICAgIDxsaSBpZD0icHJvamVjdFZlcnNpb24iIGNsYXNzPSJwdWxsLXJpZ2h0Ij5WZXJzaW9uOiAwLjYtaW5jdWJhdGluZy1TTkFQU0hPVDwvbGk+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9kaXY+CisKKyAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxkaXYgaWQ9ImJvZHlDb2x1bW4iID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPkNvbmZpZ3VyaW5nIEFwYWNoZSBBdGxhczxhIG5hbWU9IkNvbmZpZ3VyaW5nX0FwYWNoZV9BdGxhcyI+PC9hPjwvaDI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5JbnRyb2R1Y3Rpb248YSBuYW1lPSJJbnRyb2R1Y3Rpb24iPjwvYT48L2gzPgorPHA+QWxsIGNvbmZpZ3VyYXRpb24gaW4gQXRsYXMgdXNlcyBqYXZhIHByb3BlcnRpZXMgc3R5bGUgY29uZmlndXJhdGlvbi48L3A+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5BcHBsaWNhdGlvbiBQcm9wZXJ0aWVzPGEgbmFtZT0iQXBwbGljYXRpb25fUHJvcGVydGllcyI+PC9hPjwvaDM+Cis8cD5UaGUgbWFpbiBjb25maWd1cmF0aW9uIGZpbGUgaXMgYXBwbGljYXRpb24ucHJvcGVydGllcyB3aGljaCBpcyBpbiB0aGUgPGI+Y29uZjwvYj4gZGlyIGF0IHRoZSBkZXBsb3llZCBsb2NhdGlvbi4gSXQgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBzZWN0aW9uczo8L3A+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoND5HcmFwaCBEYXRhYmFzZSBDb25maWdzPGEgbmFtZT0iR3JhcGhfRGF0YWJhc2VfQ29uZmlncyI+PC9hPjwvaDQ+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoNT5HcmFwaCBwZXJzaXN0ZW5jZSBlbmdpbmU8YSBuYW1lPSJHcmFwaF9wZXJzaXN0ZW5jZV9lbmdpbmUiPjwvYT48L2g1PgorPHA+PGEgaHJlZj0iaHR0cDovL3MzLnRoaW5rYXVyZWxpdXMuY29tL2RvY3MvdGl0YW4vMC41LjQvdGl0YW4tY29uZmlnLXJlZi5odG1sIj5saW5rPC9hPiBmb3IgbW9yZSBkZXRhaWxzLiBUaGUgZXhhbXBsZSBiZWxvdyB1c2VzIEJlcmtlbGV5REJKRS48L3A+Cis8ZGl2IGNsYXNzPSJzb3VyY2UiPgorPHByZT4KK2F0bGFzLmdyYXBoLnN0b3JhZ2UuYmFja2VuZD1iZXJrZWxleWplCithdGxhcy5ncmFwaC5zdG9yYWdlLmRpcmVjdG9yeT1kYXRhL2JlcmtsZXkKKworPC9wcmU+PC9kaXY+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoNT5HcmFwaCBTZWFyY2ggSW5kZXg8YSBuYW1lPSJHcmFwaF9TZWFyY2hfSW5kZXgiPjwvYT48L2g1PgorPHA+VGhpcyBzZWN0aW9uIHNldHMgdXAgdGhlIGdyYXBoIGRiIC0gdGl0YW4gLSB0byB1c2UgYW4gc2VhcmNoIGluZGV4aW5nIHN5c3RlbS4gVGhlIGV4YW1wbGUgY29uZmlndXJhdGlvbiBiZWxvdyBzZXRzdXAgdG8gdXNlIGFuIGVtYmVkZGVkIEVsYXN0aWMgc2VhcmNoIGluZGV4aW5nIHN5c3RlbS48L3A+Cis8ZGl2IGNsYXNzPSJzb3VyY2UiPgorPHByZT4KK2F0bGFzLmdyYXBoLmluZGV4LnNlYXJjaC5iYWNrZW5kPWVsYXN0aWNzZWFyY2gKK2F0bGFzLmdyYXBoLmluZGV4LnNlYXJjaC5kaXJlY3Rvcnk9ZGF0YS9lcworYXRsYXMuZ3JhcGguaW5kZXguc2VhcmNoLmVsYXN0aWNzZWFyY2guY2xpZW50LW9ubHk9ZmFsc2UKK2F0bGFzLmdyYXBoLmluZGV4LnNlYXJjaC5lbGFzdGljc2VhcmNoLmxvY2FsLW1vZGU9dHJ1ZQorYXRsYXMuZ3JhcGguaW5kZXguc2VhcmNoLmVsYXN0aWNzZWFyY2guY3JlYXRlLnNsZWVwPTIwMDAKKworPC9wcmU+PC9kaXY+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoND5IaXZlIExpbmVhZ2UgQ29uZmlnczxhIG5hbWU9IkhpdmVfTGluZWFnZV9Db25maWdzIj48L2E+PC9oND4KKzxwPlRoZSBoaWdoZXIgbGF5ZXIgc2VydmljZXMgbGlrZSBoaXZlIGxpbmVhZ2UsIHNjaGVtYSwgZXRjLiBhcmUgZHJpdmVuIGJ5IHRoZSB0eXBlIHN5c3RlbSBhbmQgdGhpcyBzZWN0aW9uIGVuY29kZXMgdGhlIHNwZWNpZmljIHR5cGVzIGZvciB0aGUgaGl2ZSBkYXRhIG1vZGVsLjwvcD4KKzxwPiMgVGhpcyBtb2RlbHMgcmVmbGVjdHMgdGhlIGJhc2Ugc3VwZXIgdHlwZXMgZm9yIERhdGEgYW5kIFByb2Nlc3M8L3A+Cis8ZGl2IGNsYXNzPSJzb3VyY2UiPgorPHByZT4KK2F0bGFzLmxpbmVhZ2UuaGl2ZS50YWJsZS50eXBlLm5hbWU9RGF0YVNldAorYXRsYXMubGluZWFnZS5oaXZlLnByb2Nlc3MudHlwZS5uYW1lPVByb2Nlc3MKK2F0bGFzLmxpbmVhZ2UuaGl2ZS5wcm9jZXNzLmlucHV0cy5uYW1lPWlucHV0cworYXRsYXMubGluZWFnZS5oaXZlLnByb2Nlc3Mub3V0cHV0cy5uYW1lPW91dHB1dHMKKworIyMgU2NoZW1hCithdGxhcy5saW5lYWdlLmhpdmUudGFibGUuc2NoZW1hLnF1ZXJ5PWhpdmVfdGFibGUgd2hlcmUgbmFtZT0/LCBjb2x1bW5zCisKKzwvcHJlPjwvZGl2PjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDQ+U2VjdXJpdHkgUHJvcGVydGllczxhIG5hbWU9IlNlY3VyaXR5X1Byb3BlcnRpZXMiPjwvYT48L2g0PjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDU+U1NMIGNvbmZpZzxhIG5hbWU9IlNTTF9jb25maWciPjwvYT48L2g1PgorPHA+VGhlIGZvbGxvd2luZyBwcm9wZXJ0eSBpcyB1c2VkIHRvIHRvZ2dsZSB0aGUgU1NMIGZlYXR1cmUuPC9wPgorPGRpdiBjbGFzcz0ic291cmNlIj4KKzxwcmU+CithdGxhcy5lbmFibGVUTFM9ZmFsc2UKKworPC9wcmU+PC9kaXY+PC9kaXY+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKworICAgIDxoci8+CisKKyAgICA8Zm9vdGVyPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IHNwYW4xMiI+Q29weXJpZ2h0ICZjb3B5OyAgICAgICAgICAgICAgICAgICAgMjAxNQorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIj5BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbjwvYT4uCisgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxwIGlkPSJwb3dlcmVkQnkiIGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvIiB0aXRsZT0iQnVpbHQgYnkgTWF2ZW4iIGNsYXNzPSJwb3dlcmVkQnkiPgorICAgICAgICA8aW1nIGNsYXNzPSJidWlsdEJ5IiBhbHQ9IkJ1aWx0IGJ5IE1hdmVuIiBzcmM9Ii4vaW1hZ2VzL2xvZ29zL21hdmVuLWZlYXRoZXIucG5nIiAvPgorICAgICAgPC9hPgorICAgICAgICAgICAgICA8L3A+CisgICAgICAgIAorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgIDwvZm9vdGVyPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9JbnN0YWxsYXRpb25TdGVwcy5odG1sIGIvSW5zdGFsbGF0aW9uU3RlcHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGQ4ZTAxCi0tLSAvZGV2L251bGwKKysrIGIvSW5zdGFsbGF0aW9uU3RlcHMuaHRtbApAQCAtMCwwICsxLDM5OSBAQAorPCFET0NUWVBFIGh0bWw+Cis8IS0tCisgfCBHZW5lcmF0ZWQgYnkgQXBhY2hlIE1hdmVuIERveGlhIGF0IDIwMTUtMDctMDkKKyB8IFJlbmRlcmVkIHVzaW5nIEFwYWNoZSBNYXZlbiBGbHVpZG8gU2tpbiAxLjMuMAorLS0+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgorICAgIDxtZXRhIG5hbWU9IkRhdGUtUmV2aXNpb24teXl5eW1tZGQiIGNvbnRlbnQ9IjIwMTUwNzA5IiAvPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtTGFuZ3VhZ2UiIGNvbnRlbnQ9ImVuIiAvPgorICAgIDx0aXRsZT5NZXRhZGF0YSBhbmQgR292ZXJuYW5jZSAtIEJ1aWxkaW5nICYgSW5zdGFsbGluZyBBcGFjaGUgQXRsYXM8L3RpdGxlPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3Mvc2l0ZS5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9wcmludC5jc3MiIG1lZGlhPSJwcmludCIgLz4KKworICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9qcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIAorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkgeyAkKCAnLmNhcm91c2VsJyApLmNhcm91c2VsKCB7IGludGVydmFsOiAzNTAwIH0gKSB9ICk7PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ0b3BCYXJFbmFibGVkIj4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKworICAgIDxkaXYgaWQ9InRvcGJhciIgY2xhc3M9Im5hdmJhciBuYXZiYXItZml4ZWQtdG9wICI+CisgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItaW5uZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciIgc3R5bGU9IndpZHRoOiA2OCU7Ij48ZGl2IGNsYXNzPSJuYXYtY29sbGFwc2UiPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QXRsYXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJBYm91dCI+QWJvdXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iV2lraSI+V2lraTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJOZXdzIj5OZXdzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2dpdC13aXAtdXMuYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yLWF0bGFzLmdpdCIgIHRpdGxlPSJHaXQiPkdpdDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yL2F0bGFzIiAgdGl0bGU9IlN2biI+U3ZuPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0FUTEFTIiAgdGl0bGU9IkppcmEiPkppcmE8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMvUG93ZXJlZEJ5IiAgdGl0bGU9IlBvd2VyZWQgYnkiPlBvd2VyZWQgYnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9ibG9ncy5hcGFjaGUub3JnL2F0bGFzLyIgIHRpdGxlPSJCbG9nIj5CbG9nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UHJvamVjdCBJbmZvcm1hdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJwcm9qZWN0LWluZm8uaHRtbCIgIHRpdGxlPSJTdW1tYXJ5Ij5TdW1tYXJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJtYWlsLWxpc3RzLmh0bWwiICB0aXRsZT0iTWFpbGluZyBMaXN0cyI+TWFpbGluZyBMaXN0czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3dlYmNoYXQuZnJlZW5vZGUubmV0P2NoYW5uZWxzPWFwYWNoZWF0bGFzJnVpbz1kNCIgIHRpdGxlPSJJUkMiPklSQzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0idGVhbS1saXN0Lmh0bWwiICB0aXRsZT0iVGVhbSI+VGVhbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaXNzdWUtdHJhY2tpbmcuaHRtbCIgIHRpdGxlPSJJc3N1ZSBUcmFja2luZyI+SXNzdWUgVHJhY2tpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InNvdXJjZS1yZXBvc2l0b3J5Lmh0bWwiICB0aXRsZT0iU291cmNlIFJlcG9zaXRvcnkiPlNvdXJjZSBSZXBvc2l0b3J5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJsaWNlbnNlLmh0bWwiICB0aXRsZT0iTGljZW5zZSI+TGljZW5zZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlbGVhc2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9keW4vY2xvc2VyLmNnaS9pbmN1YmF0b3IvYXRsYXMvMC41LjAtaW5jdWJhdGluZy8iICB0aXRsZT0iMC41LWluY3ViYXRpbmciPjAuNS1pbmN1YmF0aW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+RG9jdW1lbnRhdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSIwLjUuMC1pbmN1YmF0aW5nL2luZGV4Lmh0bWwiICB0aXRsZT0iY3VycmVudCI+Y3VycmVudDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iMC41LjAtaW5jdWJhdGluZy9pbmRleC5odG1sIiAgdGl0bGU9IjAuNS1pbmN1YmF0aW5nIj4wLjUtaW5jdWJhdGluZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlc291cmNlcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9Ik92ZXJ2aWV3Ij5PdmVydmlldzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iUXVpY2tTdGFydC5odG1sIiAgdGl0bGU9IkdldHRpbmcgU3RhcnRlZCI+R2V0dGluZyBTdGFydGVkPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJBcmNoaXRlY3R1cmUuaHRtbCIgIHRpdGxlPSJBcmNoaXRlY3R1cmUiPkFyY2hpdGVjdHVyZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iSW5zdGFsbGF0aW9uU3RlcHMuaHRtbCIgIHRpdGxlPSJJbnN0YWxsYXRpb24iPkluc3RhbGxhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iVHlwZVN5c3RlbS5odG1sIiAgdGl0bGU9IlR5cGUgU3lzdGVtIj5UeXBlIFN5c3RlbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQ29uZmlndXJhdGlvbi5odG1sIiAgdGl0bGU9IkNvbmZpZ3VyYXRpb24iPkNvbmZpZ3VyYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlNlY3VyaXR5Lmh0bWwiICB0aXRsZT0iU2VjdXJpdHkiPlNlY3VyaXR5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJhcGkvcmVzdC5odG1sIiAgdGl0bGU9IlJlc3QgQVBJIj5SZXN0IEFQSTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkFTRiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9ob3ctaXQtd29ya3MuaHRtbCIgIHRpdGxlPSJIb3cgQXBhY2hlIFdvcmtzIj5Ib3cgQXBhY2hlIFdvcmtzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi8iICB0aXRsZT0iRm91bmRhdGlvbiI+Rm91bmRhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vc3BvbnNvcnNoaXAuaHRtbCIgIHRpdGxlPSJTcG9uc29yaW5nIEFwYWNoZSI+U3BvbnNvcmluZyBBcGFjaGU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3RoYW5rcy5odG1sIiAgdGl0bGU9IlRoYW5rcyI+VGhhbmtzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJzZWFyY2gtZm9ybSIgYWN0aW9uPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoIiBtZXRob2Q9ImdldCIgIGNsYXNzPSJuYXZiYXItc2VhcmNoIHB1bGwtcmlnaHQiID4KKyAgICAKKyAgPGlucHV0IHZhbHVlPSJodHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmciIG5hbWU9InNpdGVzZWFyY2giIHR5cGU9ImhpZGRlbiIvPgorICA8aW5wdXQgY2xhc3M9InNlYXJjaC1xdWVyeSIgbmFtZT0icSIgaWQ9InF1ZXJ5IiB0eXBlPSJ0ZXh0IiAvPgorPC9mb3JtPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL3d3dy5nb29nbGUuY29tL2Nvb3AvY3NlL2JyYW5kP2Zvcm09c2VhcmNoLWZvcm0iPjwvc2NyaXB0PgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgIDxpZnJhbWUgc3JjPSJodHRwOi8vd3d3LmZhY2Vib29rLmNvbS9wbHVnaW5zL2xpa2UucGhwP2hyZWY9aHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3Mmc2VuZD1mYWxzZSZsYXlvdXQ9YnV0dG9uX2NvdW50JnNob3ctZmFjZXM9ZmFsc2UmYWN0aW9uPWxpa2UmY29sb3JzY2hlbWU9ZGFyayIKKyAgICAgICAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9IjAiCisgICAgICAgIHN0eWxlPSJib3JkZXI6bm9uZTsgd2lkdGg6ODBweDsgaGVpZ2h0OjIwcHg7IG1hcmdpbi10b3A6IDEwcHg7IiAgY2xhc3M9InB1bGwtcmlnaHQiID48L2lmcmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vYXBpcy5nb29nbGUuY29tL2pzL3BsdXNvbmUuanMiPjwvc2NyaXB0PgorCisgICAgICAgIDx1bCBjbGFzcz0ibmF2IHB1bGwtcmlnaHQiPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPgorICAgIAorICAgIDxkaXYgY2xhc3M9ImctcGx1c29uZSIgZGF0YS1ocmVmPSJodHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmcvYXRsYXMtZG9jcyIgZGF0YS1zaXplPSJtZWRpdW0iICB3aWR0aD0iNjBweCIgYWxpZ249InJpZ2h0IiA+PC9kaXY+CisKKyAgICAgICAgPC9saT48L3VsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgCisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgICAgCisgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgICAgICAgPGRpdiBpZD0iYmFubmVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1sZWZ0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4iIGlkPSJiYW5uZXJMZWZ0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvYXRsYXMtbG9nby5wbmciICBhbHQ9IkFwYWNoZSBBdGxhcyIgd2lkdGg9IjIwMHB4IiBoZWlnaHQ9IjQ1cHgiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9pbmN1YmF0b3IuYXBhY2hlLm9yZyIgaWQ9ImJhbm5lclJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvYXBhY2hlLWluY3ViYXRvci1sb2dvLnBuZyIgIGFsdD0iQXBhY2hlIEluY3ViYXRvciIvPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJjbGVhciI+PGhyLz48L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJicmVhZGNydW1icyI+CisgICAgICAgIDx1bCBjbGFzcz0iYnJlYWRjcnVtYiI+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciIGNsYXNzPSJleHRlcm5hbExpbmsiIHRpdGxlPSJBcGFjaGUiPgorICAgICAgICBBcGFjaGU8L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIgIj4vPC9saT4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkF0bGFzIj4KKyAgICAgICAgQXRsYXM8L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIgIj4vPC9saT4KKyAgICAgICAgPGxpIGNsYXNzPSIiPkJ1aWxkaW5nICYgSW5zdGFsbGluZyBBcGFjaGUgQXRsYXM8L2xpPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICA8bGkgaWQ9InB1Ymxpc2hEYXRlIiBjbGFzcz0icHVsbC1yaWdodCI+TGFzdCBQdWJsaXNoZWQ6IDIwMTUtMDctMDk8L2xpPiA8bGkgY2xhc3M9ImRpdmlkZXIgcHVsbC1yaWdodCI+fDwvbGk+CisgICAgICAgICAgICAgIDxsaSBpZD0icHJvamVjdFZlcnNpb24iIGNsYXNzPSJwdWxsLXJpZ2h0Ij5WZXJzaW9uOiAwLjYtaW5jdWJhdGluZy1TTkFQU0hPVDwvbGk+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9kaXY+CisKKyAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxkaXYgaWQ9ImJvZHlDb2x1bW4iID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzPkJ1aWxkaW5nICZhbXA7IEluc3RhbGxpbmcgQXBhY2hlIEF0bGFzPGEgbmFtZT0iQnVpbGRpbmdfX0luc3RhbGxpbmdfQXBhY2hlX0F0bGFzIj48L2E+PC9oMz48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGg0PkJ1aWxkaW5nIEF0bGFzPGEgbmFtZT0iQnVpbGRpbmdfQXRsYXMiPjwvYT48L2g0PgorPGRpdiBjbGFzcz0ic291cmNlIj4KKzxwcmU+CitnaXQgY2xvbmUgaHR0cHM6Ly9naXQtd2lwLXVzLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci1hdGxhcy5naXQgYXRsYXMKKworY2QgYXRsYXMKKworZXhwb3J0IE1BVkVOX09QVFM9JnF1b3Q7LVhteDEwMjRtIC1YWDpNYXhQZXJtU2l6ZT0yNTZtJnF1b3Q7ICZhbXA7JmFtcDsgbXZuIGNsZWFuIGluc3RhbGwKKworPC9wcmU+PC9kaXY+Cis8cD5PbmNlIHRoZSBidWlsZCBzdWNjZXNzZnVsbHkgY29tcGxldGVzLCBhcnRpZmFjdHMgY2FuIGJlIHBhY2thZ2VkIGZvciBkZXBsb3ltZW50LjwvcD4KKzxkaXYgY2xhc3M9InNvdXJjZSI+Cis8cHJlPgorCittdm4gY2xlYW4gdmVyaWZ5IGFzc2VtYmx5OmFzc2VtYmx5IC1Ec2tpcFRlc3RzCisKKworPC9wcmU+PC9kaXY+Cis8cD5UYXIgY2FuIGJlIGZvdW5kIGluIGF0bGFzL3RhcmdldC9hcGFjaGUtYXRsYXMtJHtwcm9qZWN0LnZlcnNpb259LWJpbi50YXIuZ3o8L3A+Cis8cD5UYXIgaXMgc3RydWN0dXJlZCBhcyBmb2xsb3dzPC9wPgorPGRpdiBjbGFzcz0ic291cmNlIj4KKzxwcmU+CisKK3wtIGJpbgorICAgfC0gYXRsYXNfc3RhcnQucHkKKyAgIHwtIGF0bGFzX3N0b3AucHkKKyAgIHwtIGF0bGFzX2NvbmZpZy5weQorICAgfC0gcXVpY2tfc3RhcnQucHkKKyAgIHwtIGNwdXRpbC5weQorfC0gY29uZgorICAgfC0gYXBwbGljYXRpb24ucHJvcGVydGllcworICAgfC0gY2xpZW50LnByb3BlcnRpZXMKKyAgIHwtIGF0bGFzLWVudi5zaAorICAgfC0gbG9nNGoueG1sCit8LSBkb2NzCit8LSBzZXJ2ZXIKKyAgIHwtIHdlYmFwcAorICAgICAgfC0gYXRsYXMud2FyCit8LSBSRUFETUUKK3wtIE5PVElDRS50eHQKK3wtIExJQ0VOU0UudHh0Cit8LSBESVNDTEFJTUVSLnR4dAorfC0gQ0hBTkdFUy50eHQKKworCis8L3ByZT48L2Rpdj48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGg0Pkluc3RhbGxpbmcgJmFtcDsgUnVubmluZyBBdGxhczxhIG5hbWU9Ikluc3RhbGxpbmdfX1J1bm5pbmdfQXRsYXMiPjwvYT48L2g0PgorPHA+PGI+SW5zdGFsbGluZyBBdGxhczwvYj48L3A+Cis8ZGl2IGNsYXNzPSJzb3VyY2UiPgorPHByZT4KK3RhciAteHp2ZiBhcGFjaGUtYXRsYXMtJHtwcm9qZWN0LnZlcnNpb259LWJpbi50YXIuZ3oKKyogY2QgYXRsYXMtJHtwcm9qZWN0LnZlcnNpb259CisKKzwvcHJlPjwvZGl2PgorPHA+PGI+Q29uZmlndXJpbmcgQXRsYXM8L2I+PC9wPgorPHA+QnkgZGVmYXVsdCBjb25maWcgZGlyZWN0b3J5IHVzZWQgYnkgQXRsYXMgaXMge3BhY2thZ2UgZGlyfS9jb25mLiBUbyBvdmVycmlkZSB0aGlzIHNldCBlbnZpcm9ubWVudCB2YXJpYWJsZSBNRVRBREFUQV9DT05GIHRvIHRoZSBwYXRoIG9mIHRoZSBjb25mIGRpci48L3A+Cis8cD5hdGxhcy1lbnYuc2ggaGFzIGJlZW4gYWRkZWQgdG8gdGhlIEF0bGFzIGNvbmYuIFRoaXMgZmlsZSBjYW4gYmUgdXNlZCB0byBzZXQgdmFyaW91cyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB5b3UgbmVlZCBmb3IgeW91IHNlcnZpY2VzLiBJbiBhZGRpdGlvbiB5b3UgY2FuIHNldCBhbnkgb3RoZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIHlvdSBtaWdodCBuZWVkLiBUaGlzIGZpbGUgd2lsbCBiZSBzb3VyY2VkIGJ5IGF0bGFzIHNjcmlwdHMgYmVmb3JlIGFueSBjb21tYW5kcyBhcmUgZXhlY3V0ZWQuIFRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBhdmFpbGFibGUgdG8gc2V0LjwvcD4KKzxkaXYgY2xhc3M9InNvdXJjZSI+Cis8cHJlPgorIyBUaGUgamF2YSBpbXBsZW1lbnRhdGlvbiB0byB1c2UuIElmIEpBVkFfSE9NRSBpcyBub3QgZm91bmQgd2UgZXhwZWN0IGphdmEgYW5kIGphciB0byBiZSBpbiBwYXRoCisjZXhwb3J0IEpBVkFfSE9NRT0KKworIyBhbnkgYWRkaXRpb25hbCBqYXZhIG9wdHMgeW91IHdhbnQgdG8gc2V0LiBUaGlzIHdpbGwgYXBwbHkgdG8gYm90aCBjbGllbnQgYW5kIHNlcnZlciBvcGVyYXRpb25zCisjZXhwb3J0IE1FVEFEQVRBX09QVFM9CisKKyMgYW55IGFkZGl0aW9uYWwgamF2YSBvcHRzIHRoYXQgeW91IHdhbnQgdG8gc2V0IGZvciBjbGllbnQgb25seQorI2V4cG9ydCBNRVRBREFUQV9DTElFTlRfT1BUUz0KKworIyBqYXZhIGhlYXAgc2l6ZSB3ZSB3YW50IHRvIHNldCBmb3IgdGhlIGNsaWVudC4gRGVmYXVsdCBpcyAxMDI0TUIKKyNleHBvcnQgTUVUQURBVEFfQ0xJRU5UX0hFQVA9CisKKyMgYW55IGFkZGl0aW9uYWwgb3B0cyB5b3Ugd2FudCB0byBzZXQgZm9yIGF0bGFzIHNlcnZpY2UuCisjZXhwb3J0IE1FVEFEQVRBX1NFUlZFUl9PUFRTPQorCisjIGphdmEgaGVhcCBzaXplIHdlIHdhbnQgdG8gc2V0IGZvciB0aGUgYXRsYXMgc2VydmVyLiBEZWZhdWx0IGlzIDEwMjRNQgorI2V4cG9ydCBNRVRBREFUQV9TRVJWRVJfSEVBUD0KKworIyBXaGF0IGlzIGlzIGNvbnNpZGVyZWQgYXMgYXRsYXMgaG9tZSBkaXIuIERlZmF1bHQgaXMgdGhlIGJhc2UgbG9jYWlvbiBvZiB0aGUgaW5zdGFsbGVkIHNvZnR3YXJlCisjZXhwb3J0IE1FVEFEQVRBX0hPTUVfRElSPQorCisjIFdoZXJlIGxvZyBmaWxlcyBhcmUgc3RvcmVkLiBEZWZhdHVsdCBpcyBsb2dzIGRpcmVjdG9yeSB1bmRlciB0aGUgYmFzZSBpbnN0YWxsIGxvY2F0aW9uCisjZXhwb3J0IE1FVEFEQVRBX0xPR19ESVI9CisKKyMgV2hlcmUgcGlkIGZpbGVzIGFyZSBzdG9yZWQuIERlZmF0dWx0IGlzIGxvZ3MgZGlyZWN0b3J5IHVuZGVyIHRoZSBiYXNlIGluc3RhbGwgbG9jYXRpb24KKyNleHBvcnQgTUVUQURBVEFfUElEX0RJUj0KKworIyB3aGVyZSB0aGUgYXRsYXMgdGl0YW4gZGIgZGF0YSBpcyBzdG9yZWQuIERlZmF0dWx0IGlzIGxvZ3MvZGF0YSBkaXJlY3RvcnkgdW5kZXIgdGhlIGJhc2UgaW5zdGFsbCBsb2NhdGlvbgorI2V4cG9ydCBNRVRBREFUQV9EQVRBX0RJUj0KKworIyBXaGVyZSBkbyB5b3Ugd2FudCB0byBleHBhbmQgdGhlIHdhciBmaWxlLiBCeSBEZWZhdWx0IGl0IGlzIGluIC9zZXJ2ZXIvd2ViYXBwIGRpciB1bmRlciB0aGUgYmFzZSBpbnN0YWxsIGRpci4KKyNleHBvcnQgTUVUQURBVEFfRVhQQU5ERURfV0VCQVBQX0RJUj0KKworPC9wcmU+PC9kaXY+Cis8cD48Yj5OT1RFIGZvciBNYWMgT1MgdXNlcnM8L2I+PC9wPgorPGRpdiBjbGFzcz0ic291cmNlIj4KKzxwcmU+CitJZiB5b3UgYXJlIHVzaW5nIGEgTWFjIE9TLCB5b3Ugd2lsbCBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgTUVUQURBVEFfU0VSVkVSX09QVFMgKGV4cGxhaW5lZCBhYm92ZSkuCisKK0luICB7cGFja2FnZSBkaXJ9L2NvbmYvYXRsYXMtZW52LnNoIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUKKyNleHBvcnQgTUVUQURBVEFfU0VSVkVSX09QVFM9CisKK2FuZCBjaGFuZ2UgaXQgdG8gbG9vayBhcyBiZWxvdworZXhwb3J0IE1FVEFEQVRBX1NFUlZFUl9PUFRTPSZxdW90Oy1EamF2YS5hd3QuaGVhZGxlc3M9dHJ1ZSAtRGphdmEuc2VjdXJpdHkua3JiNS5yZWFsbT0gLURqYXZhLnNlY3VyaXR5LmtyYjUua2RjPSZxdW90OworCis8L3ByZT48L2Rpdj4KKzxwPjxiPlN0YXJ0aW5nIEF0bGFzIFNlcnZlcjwvYj48L3A+Cis8ZGl2IGNsYXNzPSJzb3VyY2UiPgorPHByZT4KK2Jpbi9hdGxhc19zdGFydC5weSBbLXBvcnQgJmx0O3BvcnQmZ3Q7XQorCis8L3ByZT48L2Rpdj4KKzxwPkJ5IGRlZmF1bHQsICogVG8gY2hhbmdlIHRoZSBwb3J0LCB1c2UgLXBvcnQgb3B0aW9uLiAqIGF0bGFzIHNlcnZlciBzdGFydHMgd2l0aCBjb25mIGZyb20ge3BhY2thZ2UgZGlyfS9jb25mLiBUbyBvdmVycmlkZSB0aGlzICh0byB1c2UgdGhlIHNhbWUgY29uZiB3aXRoIG11bHRpcGxlIGF0bGFzIHVwZ3JhZGVzKSwgc2V0IGVudmlyb25tZW50IHZhcmlhYmxlIE1FVEFEQVRBX0NPTkYgdG8gdGhlIHBhdGggb2YgY29uZiBkaXI8L3A+Cis8cD48Yj5Vc2luZyBBdGxhczwvYj48L3A+Cis8ZGl2IGNsYXNzPSJzb3VyY2UiPgorPHByZT4KKyogVmVyaWZ5IGlmIHRoZSBzZXJ2ZXIgaXMgdXAgYW5kIHJ1bm5pbmcKKyAgY3VybCAtdiBodHRwOi8vbG9jYWxob3N0OjIxMDAwL2FwaS9hdGxhcy9hZG1pbi92ZXJzaW9uCisgIHsmcXVvdDtWZXJzaW9uJnF1b3Q7OiZxdW90O3YwLjEmcXVvdDt9CisKKyogTGlzdCB0aGUgdHlwZXMgaW4gdGhlIHJlcG9zaXRvcnkKKyAgY3VybCAtdiBodHRwOi8vbG9jYWxob3N0OjIxMDAwL2FwaS9hdGxhcy90eXBlcworICB7JnF1b3Q7bGlzdCZxdW90OzpbJnF1b3Q7YmlnaW50ZWdlciZxdW90OywmcXVvdDtzaG9ydCZxdW90OywmcXVvdDtieXRlJnF1b3Q7LCZxdW90O2ludCZxdW90OywmcXVvdDtzdHJpbmcmcXVvdDssJnF1b3Q7YmlnZGVjaW1hbCZxdW90OywmcXVvdDtib29sZWFuJnF1b3Q7LCZxdW90O2RhdGUmcXVvdDssJnF1b3Q7ZG91YmxlJnF1b3Q7LCZxdW90O2xvbmcmcXVvdDssJnF1b3Q7ZmxvYXQmcXVvdDtdLCZxdW90O3JlcXVlc3RJZCZxdW90OzomcXVvdDs5MDI1ODA3ODZAcXRwLTE0Nzk3NzEzMjgtMCZxdW90O30KKworKiBMaXN0IHRoZSBpbnN0YW5jZXMgZm9yIGEgZ2l2ZW4gdHlwZQorICBjdXJsIC12IGh0dHA6Ly9sb2NhbGhvc3Q6MjEwMDAvYXBpL2F0bGFzL2VudGl0aWVzP3R5cGU9aGl2ZV90YWJsZQorICB7JnF1b3Q7cmVxdWVzdElkJnF1b3Q7OiZxdW90Ozc4ODU1ODAwN0BxdHAtNDQ4MDg2NTQtNSZxdW90OywmcXVvdDtsaXN0JnF1b3Q7OlsmcXVvdDtjYjliNTUxMy1jNjcyLTQyY2ItODQ3Ny1iOGYzZTUzN2ExNjImcXVvdDssJnF1b3Q7ZWM5ODU3MTktYTc5NC00Yzk4LWI5OGYtMDUwOWJkMjNhYWMwJnF1b3Q7LCZxdW90OzQ4OTk4ZjgxLWYxZDMtNDVhMi05ODlhLTIyM2FmNWMxZWQ2ZSZxdW90OywmcXVvdDthNTRiMzg2ZS1jNzU5LTQ2NTEtODc3OS1hMDk5Mjk0MjQ0YzQmcXVvdDtdfQorCisgIGN1cmwgLXYgaHR0cDovL2xvY2FsaG9zdDoyMTAwMC9hcGkvYXRsYXMvZW50aXRpZXMvbGlzdC9oaXZlX2RiCisKKyogU2VhcmNoIGZvciBlbnRpdGllcyAoaW5zdGFuY2VzKSBpbiB0aGUgcmVwb3NpdG9yeQorICBjdXJsIC12IGh0dHA6Ly9sb2NhbGhvc3Q6MjEwMDAvYXBpL2F0bGFzL2Rpc2NvdmVyeS9zZWFyY2gvZHNsP3F1ZXJ5PSZxdW90O2Zyb20gaGl2ZV90YWJsZSZxdW90OworCis8L3ByZT48L2Rpdj4KKzxwPjxiPkRhc2hib2FyZDwvYj48L3A+Cis8cD5PbmNlIGF0bGFzIGlzIHN0YXJ0ZWQsIHlvdSBjYW4gdmlldyB0aGUgc3RhdHVzIG9mIGF0bGFzIGVudGl0aWVzIHVzaW5nIHRoZSBXZWItYmFzZWQgZGFzaGJvYXJkLiBcWW91IGNhbiBvcGVuIHlvdXIgYnJvd3NlciBhdCB0aGUgY29ycmVzcG9uZGluZyBwb3J0IHRvIHVzZSB0aGUgd2ViIFVJLjwvcD4KKzxwPjxiPlN0b3BwaW5nIEF0bGFzIFNlcnZlcjwvYj48L3A+Cis8ZGl2IGNsYXNzPSJzb3VyY2UiPgorPHByZT4KK2Jpbi9hdGxhc19zdG9wLnB5CisKKzwvcHJlPjwvZGl2PjwvZGl2PgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisKKyAgICA8aHIvPgorCisgICAgPGZvb3Rlcj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyBzcGFuMTIiPkNvcHlyaWdodCAmY29weTsgICAgICAgICAgICAgICAgICAgIDIwMTUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZyI+QXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb248L2E+LgorICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8cCBpZD0icG93ZXJlZEJ5IiBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnLyIgdGl0bGU9IkJ1aWx0IGJ5IE1hdmVuIiBjbGFzcz0icG93ZXJlZEJ5Ij4KKyAgICAgICAgPGltZyBjbGFzcz0iYnVpbHRCeSIgYWx0PSJCdWlsdCBieSBNYXZlbiIgc3JjPSIuL2ltYWdlcy9sb2dvcy9tYXZlbi1mZWF0aGVyLnBuZyIgLz4KKyAgICAgIDwvYT4KKyAgICAgICAgICAgICAgPC9wPgorICAgICAgICAKKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICA8L2Zvb3Rlcj4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUXVpY2tTdGFydC5odG1sIGIvUXVpY2tTdGFydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyNzczZjgKLS0tIC9kZXYvbnVsbAorKysgYi9RdWlja1N0YXJ0Lmh0bWwKQEAgLTAsMCArMSwyNzcgQEAKKzwhRE9DVFlQRSBodG1sPgorPCEtLQorIHwgR2VuZXJhdGVkIGJ5IEFwYWNoZSBNYXZlbiBEb3hpYSBhdCAyMDE1LTA3LTA5CisgfCBSZW5kZXJlZCB1c2luZyBBcGFjaGUgTWF2ZW4gRmx1aWRvIFNraW4gMS4zLjAKKy0tPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgorICA8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCIgLz4KKyAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCIgLz4KKyAgICA8bWV0YSBuYW1lPSJEYXRlLVJldmlzaW9uLXl5eXltbWRkIiBjb250ZW50PSIyMDE1MDcwOSIgLz4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbiIgLz4KKyAgICA8dGl0bGU+TWV0YWRhdGEgYW5kIEdvdmVybmFuY2UgLSBRdWljayBTdGFydCBHdWlkZTwvdGl0bGU+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9zaXRlLmNzcyIgLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3ByaW50LmNzcyIgbWVkaWE9InByaW50IiAvPgorCisgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL2pzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmpzIj48L3NjcmlwdD4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+JCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7ICQoICcuY2Fyb3VzZWwnICkuY2Fyb3VzZWwoIHsgaW50ZXJ2YWw6IDM1MDAgfSApIH0gKTs8L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHkgY2xhc3M9InRvcEJhckVuYWJsZWQiPgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorCisgICAgPGRpdiBpZD0idG9wYmFyIiBjbGFzcz0ibmF2YmFyIG5hdmJhci1maXhlZC10b3AgIj4KKyAgICAgIDxkaXYgY2xhc3M9Im5hdmJhci1pbm5lciI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIiBzdHlsZT0id2lkdGg6IDY4JTsiPjxkaXYgY2xhc3M9Im5hdi1jb2xsYXBzZSI+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJuYXYiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BdGxhcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9IkFib3V0Ij5BYm91dDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJXaWtpIj5XaWtpPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9Ik5ld3MiPk5ld3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0LXdpcC11cy5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3ItYXRsYXMuZ2l0IiAgdGl0bGU9IkdpdCI+R2l0PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3IvYXRsYXMiICB0aXRsZT0iU3ZuIj5Tdm48L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvQVRMQVMiICB0aXRsZT0iSmlyYSI+SmlyYTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUy9Qb3dlcmVkQnkiICB0aXRsZT0iUG93ZXJlZCBieSI+UG93ZXJlZCBieTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL2Jsb2dzLmFwYWNoZS5vcmcvYXRsYXMvIiAgdGl0bGU9IkJsb2ciPkJsb2c8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5Qcm9qZWN0IEluZm9ybWF0aW9uIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InByb2plY3QtaW5mby5odG1sIiAgdGl0bGU9IlN1bW1hcnkiPlN1bW1hcnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Im1haWwtbGlzdHMuaHRtbCIgIHRpdGxlPSJNYWlsaW5nIExpc3RzIj5NYWlsaW5nIExpc3RzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd2ViY2hhdC5mcmVlbm9kZS5uZXQ/Y2hhbm5lbHM9YXBhY2hlYXRsYXMmdWlvPWQ0IiAgdGl0bGU9IklSQyI+SVJDPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJ0ZWFtLWxpc3QuaHRtbCIgIHRpdGxlPSJUZWFtIj5UZWFtPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpc3N1ZS10cmFja2luZy5odG1sIiAgdGl0bGU9Iklzc3VlIFRyYWNraW5nIj5Jc3N1ZSBUcmFja2luZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ic291cmNlLXJlcG9zaXRvcnkuaHRtbCIgIHRpdGxlPSJTb3VyY2UgUmVwb3NpdG9yeSI+U291cmNlIFJlcG9zaXRvcnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImxpY2Vuc2UuaHRtbCIgIHRpdGxlPSJMaWNlbnNlIj5MaWNlbnNlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UmVsZWFzZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2R5bi9jbG9zZXIuY2dpL2luY3ViYXRvci9hdGxhcy8wLjUuMC1pbmN1YmF0aW5nLyIgIHRpdGxlPSIwLjUtaW5jdWJhdGluZyI+MC41LWluY3ViYXRpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5Eb2N1bWVudGF0aW9uIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IjAuNS4wLWluY3ViYXRpbmcvaW5kZXguaHRtbCIgIHRpdGxlPSJjdXJyZW50Ij5jdXJyZW50PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSIwLjUuMC1pbmN1YmF0aW5nL2luZGV4Lmh0bWwiICB0aXRsZT0iMC41LWluY3ViYXRpbmciPjAuNS1pbmN1YmF0aW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UmVzb3VyY2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJRdWlja1N0YXJ0Lmh0bWwiICB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj5HZXR0aW5nIFN0YXJ0ZWQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkFyY2hpdGVjdHVyZS5odG1sIiAgdGl0bGU9IkFyY2hpdGVjdHVyZSI+QXJjaGl0ZWN0dXJlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJJbnN0YWxsYXRpb25TdGVwcy5odG1sIiAgdGl0bGU9Ikluc3RhbGxhdGlvbiI+SW5zdGFsbGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJUeXBlU3lzdGVtLmh0bWwiICB0aXRsZT0iVHlwZSBTeXN0ZW0iPlR5cGUgU3lzdGVtPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJDb25maWd1cmF0aW9uLmh0bWwiICB0aXRsZT0iQ29uZmlndXJhdGlvbiI+Q29uZmlndXJhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iU2VjdXJpdHkuaHRtbCIgIHRpdGxlPSJTZWN1cml0eSI+U2VjdXJpdHk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImFwaS9yZXN0Lmh0bWwiICB0aXRsZT0iUmVzdCBBUEkiPlJlc3QgQVBJPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QVNGIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL2hvdy1pdC13b3Jrcy5odG1sIiAgdGl0bGU9IkhvdyBBcGFjaGUgV29ya3MiPkhvdyBBcGFjaGUgV29ya3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uLyIgIHRpdGxlPSJGb3VuZGF0aW9uIj5Gb3VuZGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9zcG9uc29yc2hpcC5odG1sIiAgdGl0bGU9IlNwb25zb3JpbmcgQXBhY2hlIj5TcG9uc29yaW5nIEFwYWNoZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vdGhhbmtzLmh0bWwiICB0aXRsZT0iVGhhbmtzIj5UaGFua3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gaWQ9InNlYXJjaC1mb3JtIiBhY3Rpb249Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2giIG1ldGhvZD0iZ2V0IiAgY2xhc3M9Im5hdmJhci1zZWFyY2ggcHVsbC1yaWdodCIgPgorICAgIAorICA8aW5wdXQgdmFsdWU9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZyIgbmFtZT0ic2l0ZXNlYXJjaCIgdHlwZT0iaGlkZGVuIi8+CisgIDxpbnB1dCBjbGFzcz0ic2VhcmNoLXF1ZXJ5IiBuYW1lPSJxIiBpZD0icXVlcnkiIHR5cGU9InRleHQiIC8+Cis8L2Zvcm0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vY29vcC9jc2UvYnJhbmQ/Zm9ybT1zZWFyY2gtZm9ybSI+PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgPGlmcmFtZSBzcmM9Imh0dHA6Ly93d3cuZmFjZWJvb2suY29tL3BsdWdpbnMvbGlrZS5waHA/aHJlZj1odHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmcvYXRsYXMtZG9jcyZzZW5kPWZhbHNlJmxheW91dD1idXR0b25fY291bnQmc2hvdy1mYWNlcz1mYWxzZSZhY3Rpb249bGlrZSZjb2xvcnNjaGVtZT1kYXJrIgorICAgICAgICBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0iMCIKKyAgICAgICAgc3R5bGU9ImJvcmRlcjpub25lOyB3aWR0aDo4MHB4OyBoZWlnaHQ6MjBweDsgbWFyZ2luLXRvcDogMTBweDsiICBjbGFzcz0icHVsbC1yaWdodCIgPjwvaWZyYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9hcGlzLmdvb2dsZS5jb20vanMvcGx1c29uZS5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgPHVsIGNsYXNzPSJuYXYgcHVsbC1yaWdodCI+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CisgICAgCisgICAgPGRpdiBjbGFzcz0iZy1wbHVzb25lIiBkYXRhLWhyZWY9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzIiBkYXRhLXNpemU9Im1lZGl1bSIgIHdpZHRoPSI2MHB4IiBhbGlnbj0icmlnaHQiID48L2Rpdj4KKworICAgICAgICA8L2xpPjwvdWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAKKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICAKKyAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICA8ZGl2IGlkPSJiYW5uZXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLWxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLiIgaWQ9ImJhbm5lckxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hdGxhcy1sb2dvLnBuZyIgIGFsdD0iQXBhY2hlIEF0bGFzIiB3aWR0aD0iMjAwcHgiIGhlaWdodD0iNDVweCIvPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+ICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2luY3ViYXRvci5hcGFjaGUub3JnIiBpZD0iYmFubmVyUmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hcGFjaGUtaW5jdWJhdG9yLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgSW5jdWJhdG9yIi8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIj48aHIvPjwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImJyZWFkY3J1bWJzIj4KKyAgICAgICAgPHVsIGNsYXNzPSJicmVhZGNydW1iIj4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZyIgY2xhc3M9ImV4dGVybmFsTGluayIgdGl0bGU9IkFwYWNoZSI+CisgICAgICAgIEFwYWNoZTwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iQXRsYXMiPgorICAgICAgICBBdGxhczwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICA8bGkgY2xhc3M9IiI+UXVpY2sgU3RhcnQgR3VpZGU8L2xpPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICA8bGkgaWQ9InB1Ymxpc2hEYXRlIiBjbGFzcz0icHVsbC1yaWdodCI+TGFzdCBQdWJsaXNoZWQ6IDIwMTUtMDctMDk8L2xpPiA8bGkgY2xhc3M9ImRpdmlkZXIgcHVsbC1yaWdodCI+fDwvbGk+CisgICAgICAgICAgICAgIDxsaSBpZD0icHJvamVjdFZlcnNpb24iIGNsYXNzPSJwdWxsLXJpZ2h0Ij5WZXJzaW9uOiAwLjYtaW5jdWJhdGluZy1TTkFQU0hPVDwvbGk+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9kaXY+CisKKyAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxkaXYgaWQ9ImJvZHlDb2x1bW4iID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPlF1aWNrIFN0YXJ0IEd1aWRlPGEgbmFtZT0iUXVpY2tfU3RhcnRfR3VpZGUiPjwvYT48L2gyPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDM+SW50cm9kdWN0aW9uPGEgbmFtZT0iSW50cm9kdWN0aW9uIj48L2E+PC9oMz4KKzxwPlRoaXMgcXVpY2sgc3RhcnQgdXNlciBndWlkZSBpcyBhIHNpbXBsZSBjbGllbnQgdGhhdCBhZGRzIGEgZmV3IHNhbXBsZSB0eXBlIGRlZmluaXRpb25zIG1vZGVsZWQgYWZ0ZXIgdGhlIGV4YW1wbGUgYXMgc2hvd24gYmVsb3cuIEl0IGFsc28gYWRkcyBleGFtcGxlIGVudGl0aWVzIGFsb25nIHdpdGggdHJhaXRzIGFzIHNob3duIGluIHRoZSBpbnN0YW5jZSBncmFwaCBiZWxvdy48L3A+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoND5FeGFtcGxlIFR5cGUgRGVmaW5pdGlvbnM8YSBuYW1lPSJFeGFtcGxlX1R5cGVfRGVmaW5pdGlvbnMiPjwvYT48L2g0PgorPHA+PGltZyBzcmM9Imd1aWRlLWNsYXNzLWRpYWdyYW0ucG5nIiBhbHQ9IiIgLz48L3A+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoND5FeGFtcGxlIEluc3RhbmNlIEdyYXBoPGEgbmFtZT0iRXhhbXBsZV9JbnN0YW5jZV9HcmFwaCI+PC9hPjwvaDQ+Cis8cD48aW1nIHNyYz0iZ3VpZGUtaW5zdGFuY2UtZ3JhcGgucG5nIiBhbHQ9IiIgLz48L3A+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5SdW5uaW5nIHRoZSBleGFtcGxlPGEgbmFtZT0iUnVubmluZ190aGVfZXhhbXBsZSI+PC9hPjwvaDM+Cis8cD5UaGlzIHdpbGwgYWRkIHNhbXBsZSB0eXBlcyBhbmQgaW5zdGFuY2VzIGFsb25nIHdpdGggdHJhaXRzIGFzIHNob3duIGluIHRoZSBpbnN0YW5jZSBncmFwaCBhYm92ZS48L3A+Cis8cD48L3A+Cis8dWw+Cis8bGk+YmluL3F1aWNrLXN0YXJ0LnNoPC9saT48L3VsPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDM+RGFzaGJvYXJkPGEgbmFtZT0iRGFzaGJvYXJkIj48L2E+PC9oMz4KKzxwPkEgc2ltcGxlIGRhc2hib2FyZCB3aXRoIHNlYXJjaCBpcyBhdmFpbGFibGUuPC9wPgorPHA+PC9wPgorPHVsPgorPGxpPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6MjEwMDAvZGFzaGJvYXJkIj5odHRwOi8vbG9jYWxob3N0OjIxMDAwL2Rhc2hib2FyZDwvYT48L2xpPjwvdWw+PC9kaXY+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKworICAgIDxoci8+CisKKyAgICA8Zm9vdGVyPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IHNwYW4xMiI+Q29weXJpZ2h0ICZjb3B5OyAgICAgICAgICAgICAgICAgICAgMjAxNQorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIj5BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbjwvYT4uCisgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxwIGlkPSJwb3dlcmVkQnkiIGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvIiB0aXRsZT0iQnVpbHQgYnkgTWF2ZW4iIGNsYXNzPSJwb3dlcmVkQnkiPgorICAgICAgICA8aW1nIGNsYXNzPSJidWlsdEJ5IiBhbHQ9IkJ1aWx0IGJ5IE1hdmVuIiBzcmM9Ii4vaW1hZ2VzL2xvZ29zL21hdmVuLWZlYXRoZXIucG5nIiAvPgorICAgICAgPC9hPgorICAgICAgICAgICAgICA8L3A+CisgICAgICAgIAorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgIDwvZm9vdGVyPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9SZXBvc2l0b3J5Lmh0bWwgYi9SZXBvc2l0b3J5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZhYTA3MAotLS0gL2Rldi9udWxsCisrKyBiL1JlcG9zaXRvcnkuaHRtbApAQCAtMCwwICsxLDI1OCBAQAorPCFET0NUWVBFIGh0bWw+Cis8IS0tCisgfCBHZW5lcmF0ZWQgYnkgQXBhY2hlIE1hdmVuIERveGlhIGF0IDIwMTUtMDctMDkKKyB8IFJlbmRlcmVkIHVzaW5nIEFwYWNoZSBNYXZlbiBGbHVpZG8gU2tpbiAxLjMuMAorLS0+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgorICAgIDxtZXRhIG5hbWU9IkRhdGUtUmV2aXNpb24teXl5eW1tZGQiIGNvbnRlbnQ9IjIwMTUwNzA5IiAvPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtTGFuZ3VhZ2UiIGNvbnRlbnQ9ImVuIiAvPgorICAgIDx0aXRsZT5NZXRhZGF0YSBhbmQgR292ZXJuYW5jZSAtIFJlcG9zaXRvcnk8L3RpdGxlPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3Mvc2l0ZS5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9wcmludC5jc3MiIG1lZGlhPSJwcmludCIgLz4KKworICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9qcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIAorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkgeyAkKCAnLmNhcm91c2VsJyApLmNhcm91c2VsKCB7IGludGVydmFsOiAzNTAwIH0gKSB9ICk7PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ0b3BCYXJFbmFibGVkIj4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKworICAgIDxkaXYgaWQ9InRvcGJhciIgY2xhc3M9Im5hdmJhciBuYXZiYXItZml4ZWQtdG9wICI+CisgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItaW5uZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciIgc3R5bGU9IndpZHRoOiA2OCU7Ij48ZGl2IGNsYXNzPSJuYXYtY29sbGFwc2UiPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QXRsYXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJBYm91dCI+QWJvdXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iV2lraSI+V2lraTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJOZXdzIj5OZXdzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2dpdC13aXAtdXMuYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yLWF0bGFzLmdpdCIgIHRpdGxlPSJHaXQiPkdpdDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yL2F0bGFzIiAgdGl0bGU9IlN2biI+U3ZuPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0FUTEFTIiAgdGl0bGU9IkppcmEiPkppcmE8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMvUG93ZXJlZEJ5IiAgdGl0bGU9IlBvd2VyZWQgYnkiPlBvd2VyZWQgYnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9ibG9ncy5hcGFjaGUub3JnL2F0bGFzLyIgIHRpdGxlPSJCbG9nIj5CbG9nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UHJvamVjdCBJbmZvcm1hdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJwcm9qZWN0LWluZm8uaHRtbCIgIHRpdGxlPSJTdW1tYXJ5Ij5TdW1tYXJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJtYWlsLWxpc3RzLmh0bWwiICB0aXRsZT0iTWFpbGluZyBMaXN0cyI+TWFpbGluZyBMaXN0czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3dlYmNoYXQuZnJlZW5vZGUubmV0P2NoYW5uZWxzPWFwYWNoZWF0bGFzJnVpbz1kNCIgIHRpdGxlPSJJUkMiPklSQzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0idGVhbS1saXN0Lmh0bWwiICB0aXRsZT0iVGVhbSI+VGVhbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaXNzdWUtdHJhY2tpbmcuaHRtbCIgIHRpdGxlPSJJc3N1ZSBUcmFja2luZyI+SXNzdWUgVHJhY2tpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InNvdXJjZS1yZXBvc2l0b3J5Lmh0bWwiICB0aXRsZT0iU291cmNlIFJlcG9zaXRvcnkiPlNvdXJjZSBSZXBvc2l0b3J5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJsaWNlbnNlLmh0bWwiICB0aXRsZT0iTGljZW5zZSI+TGljZW5zZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlbGVhc2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9keW4vY2xvc2VyLmNnaS9pbmN1YmF0b3IvYXRsYXMvMC41LjAtaW5jdWJhdGluZy8iICB0aXRsZT0iMC41LWluY3ViYXRpbmciPjAuNS1pbmN1YmF0aW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+RG9jdW1lbnRhdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSIwLjUuMC1pbmN1YmF0aW5nL2luZGV4Lmh0bWwiICB0aXRsZT0iY3VycmVudCI+Y3VycmVudDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iMC41LjAtaW5jdWJhdGluZy9pbmRleC5odG1sIiAgdGl0bGU9IjAuNS1pbmN1YmF0aW5nIj4wLjUtaW5jdWJhdGluZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlc291cmNlcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9Ik92ZXJ2aWV3Ij5PdmVydmlldzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iUXVpY2tTdGFydC5odG1sIiAgdGl0bGU9IkdldHRpbmcgU3RhcnRlZCI+R2V0dGluZyBTdGFydGVkPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJBcmNoaXRlY3R1cmUuaHRtbCIgIHRpdGxlPSJBcmNoaXRlY3R1cmUiPkFyY2hpdGVjdHVyZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iSW5zdGFsbGF0aW9uU3RlcHMuaHRtbCIgIHRpdGxlPSJJbnN0YWxsYXRpb24iPkluc3RhbGxhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iVHlwZVN5c3RlbS5odG1sIiAgdGl0bGU9IlR5cGUgU3lzdGVtIj5UeXBlIFN5c3RlbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQ29uZmlndXJhdGlvbi5odG1sIiAgdGl0bGU9IkNvbmZpZ3VyYXRpb24iPkNvbmZpZ3VyYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlNlY3VyaXR5Lmh0bWwiICB0aXRsZT0iU2VjdXJpdHkiPlNlY3VyaXR5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJhcGkvcmVzdC5odG1sIiAgdGl0bGU9IlJlc3QgQVBJIj5SZXN0IEFQSTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkFTRiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9ob3ctaXQtd29ya3MuaHRtbCIgIHRpdGxlPSJIb3cgQXBhY2hlIFdvcmtzIj5Ib3cgQXBhY2hlIFdvcmtzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi8iICB0aXRsZT0iRm91bmRhdGlvbiI+Rm91bmRhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vc3BvbnNvcnNoaXAuaHRtbCIgIHRpdGxlPSJTcG9uc29yaW5nIEFwYWNoZSI+U3BvbnNvcmluZyBBcGFjaGU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3RoYW5rcy5odG1sIiAgdGl0bGU9IlRoYW5rcyI+VGhhbmtzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJzZWFyY2gtZm9ybSIgYWN0aW9uPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoIiBtZXRob2Q9ImdldCIgIGNsYXNzPSJuYXZiYXItc2VhcmNoIHB1bGwtcmlnaHQiID4KKyAgICAKKyAgPGlucHV0IHZhbHVlPSJodHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmciIG5hbWU9InNpdGVzZWFyY2giIHR5cGU9ImhpZGRlbiIvPgorICA8aW5wdXQgY2xhc3M9InNlYXJjaC1xdWVyeSIgbmFtZT0icSIgaWQ9InF1ZXJ5IiB0eXBlPSJ0ZXh0IiAvPgorPC9mb3JtPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL3d3dy5nb29nbGUuY29tL2Nvb3AvY3NlL2JyYW5kP2Zvcm09c2VhcmNoLWZvcm0iPjwvc2NyaXB0PgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgIDxpZnJhbWUgc3JjPSJodHRwOi8vd3d3LmZhY2Vib29rLmNvbS9wbHVnaW5zL2xpa2UucGhwP2hyZWY9aHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3Mmc2VuZD1mYWxzZSZsYXlvdXQ9YnV0dG9uX2NvdW50JnNob3ctZmFjZXM9ZmFsc2UmYWN0aW9uPWxpa2UmY29sb3JzY2hlbWU9ZGFyayIKKyAgICAgICAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9IjAiCisgICAgICAgIHN0eWxlPSJib3JkZXI6bm9uZTsgd2lkdGg6ODBweDsgaGVpZ2h0OjIwcHg7IG1hcmdpbi10b3A6IDEwcHg7IiAgY2xhc3M9InB1bGwtcmlnaHQiID48L2lmcmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vYXBpcy5nb29nbGUuY29tL2pzL3BsdXNvbmUuanMiPjwvc2NyaXB0PgorCisgICAgICAgIDx1bCBjbGFzcz0ibmF2IHB1bGwtcmlnaHQiPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPgorICAgIAorICAgIDxkaXYgY2xhc3M9ImctcGx1c29uZSIgZGF0YS1ocmVmPSJodHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmcvYXRsYXMtZG9jcyIgZGF0YS1zaXplPSJtZWRpdW0iICB3aWR0aD0iNjBweCIgYWxpZ249InJpZ2h0IiA+PC9kaXY+CisKKyAgICAgICAgPC9saT48L3VsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgCisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgICAgCisgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgICAgICAgPGRpdiBpZD0iYmFubmVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1sZWZ0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4iIGlkPSJiYW5uZXJMZWZ0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvYXRsYXMtbG9nby5wbmciICBhbHQ9IkFwYWNoZSBBdGxhcyIgd2lkdGg9IjIwMHB4IiBoZWlnaHQ9IjQ1cHgiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9pbmN1YmF0b3IuYXBhY2hlLm9yZyIgaWQ9ImJhbm5lclJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvYXBhY2hlLWluY3ViYXRvci1sb2dvLnBuZyIgIGFsdD0iQXBhY2hlIEluY3ViYXRvciIvPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJjbGVhciI+PGhyLz48L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJicmVhZGNydW1icyI+CisgICAgICAgIDx1bCBjbGFzcz0iYnJlYWRjcnVtYiI+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciIGNsYXNzPSJleHRlcm5hbExpbmsiIHRpdGxlPSJBcGFjaGUiPgorICAgICAgICBBcGFjaGU8L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIgIj4vPC9saT4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkF0bGFzIj4KKyAgICAgICAgQXRsYXM8L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIgIj4vPC9saT4KKyAgICAgICAgPGxpIGNsYXNzPSIiPlJlcG9zaXRvcnk8L2xpPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICA8bGkgaWQ9InB1Ymxpc2hEYXRlIiBjbGFzcz0icHVsbC1yaWdodCI+TGFzdCBQdWJsaXNoZWQ6IDIwMTUtMDctMDk8L2xpPiA8bGkgY2xhc3M9ImRpdmlkZXIgcHVsbC1yaWdodCI+fDwvbGk+CisgICAgICAgICAgICAgIDxsaSBpZD0icHJvamVjdFZlcnNpb24iIGNsYXNzPSJwdWxsLXJpZ2h0Ij5WZXJzaW9uOiAwLjYtaW5jdWJhdGluZy1TTkFQU0hPVDwvbGk+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9kaXY+CisKKyAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxkaXYgaWQ9ImJvZHlDb2x1bW4iID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPlJlcG9zaXRvcnk8YSBuYW1lPSJSZXBvc2l0b3J5Ij48L2E+PC9oMj48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzPkludHJvZHVjdGlvbjxhIG5hbWU9IkludHJvZHVjdGlvbiI+PC9hPjwvaDM+PC9kaXY+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKworICAgIDxoci8+CisKKyAgICA8Zm9vdGVyPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IHNwYW4xMiI+Q29weXJpZ2h0ICZjb3B5OyAgICAgICAgICAgICAgICAgICAgMjAxNQorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIj5BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbjwvYT4uCisgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxwIGlkPSJwb3dlcmVkQnkiIGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvIiB0aXRsZT0iQnVpbHQgYnkgTWF2ZW4iIGNsYXNzPSJwb3dlcmVkQnkiPgorICAgICAgICA8aW1nIGNsYXNzPSJidWlsdEJ5IiBhbHQ9IkJ1aWx0IGJ5IE1hdmVuIiBzcmM9Ii4vaW1hZ2VzL2xvZ29zL21hdmVuLWZlYXRoZXIucG5nIiAvPgorICAgICAgPC9hPgorICAgICAgICAgICAgICA8L3A+CisgICAgICAgIAorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgIDwvZm9vdGVyPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9TZWFyY2guaHRtbCBiL1NlYXJjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYjNlYzYKLS0tIC9kZXYvbnVsbAorKysgYi9TZWFyY2guaHRtbApAQCAtMCwwICsxLDM0NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8IS0tCisgfCBHZW5lcmF0ZWQgYnkgQXBhY2hlIE1hdmVuIERveGlhIGF0IDIwMTUtMDctMDkKKyB8IFJlbmRlcmVkIHVzaW5nIEFwYWNoZSBNYXZlbiBGbHVpZG8gU2tpbiAxLjMuMAorLS0+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgorICAgIDxtZXRhIG5hbWU9IkRhdGUtUmV2aXNpb24teXl5eW1tZGQiIGNvbnRlbnQ9IjIwMTUwNzA5IiAvPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtTGFuZ3VhZ2UiIGNvbnRlbnQ9ImVuIiAvPgorICAgIDx0aXRsZT5NZXRhZGF0YSBhbmQgR292ZXJuYW5jZSAtIFNlYXJjaDwvdGl0bGU+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9zaXRlLmNzcyIgLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3ByaW50LmNzcyIgbWVkaWE9InByaW50IiAvPgorCisgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL2pzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmpzIj48L3NjcmlwdD4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+JCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7ICQoICcuY2Fyb3VzZWwnICkuY2Fyb3VzZWwoIHsgaW50ZXJ2YWw6IDM1MDAgfSApIH0gKTs8L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHkgY2xhc3M9InRvcEJhckVuYWJsZWQiPgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorCisgICAgPGRpdiBpZD0idG9wYmFyIiBjbGFzcz0ibmF2YmFyIG5hdmJhci1maXhlZC10b3AgIj4KKyAgICAgIDxkaXYgY2xhc3M9Im5hdmJhci1pbm5lciI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIiBzdHlsZT0id2lkdGg6IDY4JTsiPjxkaXYgY2xhc3M9Im5hdi1jb2xsYXBzZSI+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJuYXYiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BdGxhcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9IkFib3V0Ij5BYm91dDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJXaWtpIj5XaWtpPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9Ik5ld3MiPk5ld3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0LXdpcC11cy5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3ItYXRsYXMuZ2l0IiAgdGl0bGU9IkdpdCI+R2l0PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3IvYXRsYXMiICB0aXRsZT0iU3ZuIj5Tdm48L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvQVRMQVMiICB0aXRsZT0iSmlyYSI+SmlyYTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUy9Qb3dlcmVkQnkiICB0aXRsZT0iUG93ZXJlZCBieSI+UG93ZXJlZCBieTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL2Jsb2dzLmFwYWNoZS5vcmcvYXRsYXMvIiAgdGl0bGU9IkJsb2ciPkJsb2c8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5Qcm9qZWN0IEluZm9ybWF0aW9uIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InByb2plY3QtaW5mby5odG1sIiAgdGl0bGU9IlN1bW1hcnkiPlN1bW1hcnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Im1haWwtbGlzdHMuaHRtbCIgIHRpdGxlPSJNYWlsaW5nIExpc3RzIj5NYWlsaW5nIExpc3RzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd2ViY2hhdC5mcmVlbm9kZS5uZXQ/Y2hhbm5lbHM9YXBhY2hlYXRsYXMmdWlvPWQ0IiAgdGl0bGU9IklSQyI+SVJDPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJ0ZWFtLWxpc3QuaHRtbCIgIHRpdGxlPSJUZWFtIj5UZWFtPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpc3N1ZS10cmFja2luZy5odG1sIiAgdGl0bGU9Iklzc3VlIFRyYWNraW5nIj5Jc3N1ZSBUcmFja2luZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ic291cmNlLXJlcG9zaXRvcnkuaHRtbCIgIHRpdGxlPSJTb3VyY2UgUmVwb3NpdG9yeSI+U291cmNlIFJlcG9zaXRvcnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImxpY2Vuc2UuaHRtbCIgIHRpdGxlPSJMaWNlbnNlIj5MaWNlbnNlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UmVsZWFzZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2R5bi9jbG9zZXIuY2dpL2luY3ViYXRvci9hdGxhcy8wLjUuMC1pbmN1YmF0aW5nLyIgIHRpdGxlPSIwLjUtaW5jdWJhdGluZyI+MC41LWluY3ViYXRpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5Eb2N1bWVudGF0aW9uIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IjAuNS4wLWluY3ViYXRpbmcvaW5kZXguaHRtbCIgIHRpdGxlPSJjdXJyZW50Ij5jdXJyZW50PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSIwLjUuMC1pbmN1YmF0aW5nL2luZGV4Lmh0bWwiICB0aXRsZT0iMC41LWluY3ViYXRpbmciPjAuNS1pbmN1YmF0aW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UmVzb3VyY2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJRdWlja1N0YXJ0Lmh0bWwiICB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj5HZXR0aW5nIFN0YXJ0ZWQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkFyY2hpdGVjdHVyZS5odG1sIiAgdGl0bGU9IkFyY2hpdGVjdHVyZSI+QXJjaGl0ZWN0dXJlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJJbnN0YWxsYXRpb25TdGVwcy5odG1sIiAgdGl0bGU9Ikluc3RhbGxhdGlvbiI+SW5zdGFsbGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJUeXBlU3lzdGVtLmh0bWwiICB0aXRsZT0iVHlwZSBTeXN0ZW0iPlR5cGUgU3lzdGVtPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJDb25maWd1cmF0aW9uLmh0bWwiICB0aXRsZT0iQ29uZmlndXJhdGlvbiI+Q29uZmlndXJhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iU2VjdXJpdHkuaHRtbCIgIHRpdGxlPSJTZWN1cml0eSI+U2VjdXJpdHk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImFwaS9yZXN0Lmh0bWwiICB0aXRsZT0iUmVzdCBBUEkiPlJlc3QgQVBJPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QVNGIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL2hvdy1pdC13b3Jrcy5odG1sIiAgdGl0bGU9IkhvdyBBcGFjaGUgV29ya3MiPkhvdyBBcGFjaGUgV29ya3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uLyIgIHRpdGxlPSJGb3VuZGF0aW9uIj5Gb3VuZGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9zcG9uc29yc2hpcC5odG1sIiAgdGl0bGU9IlNwb25zb3JpbmcgQXBhY2hlIj5TcG9uc29yaW5nIEFwYWNoZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vdGhhbmtzLmh0bWwiICB0aXRsZT0iVGhhbmtzIj5UaGFua3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gaWQ9InNlYXJjaC1mb3JtIiBhY3Rpb249Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2giIG1ldGhvZD0iZ2V0IiAgY2xhc3M9Im5hdmJhci1zZWFyY2ggcHVsbC1yaWdodCIgPgorICAgIAorICA8aW5wdXQgdmFsdWU9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZyIgbmFtZT0ic2l0ZXNlYXJjaCIgdHlwZT0iaGlkZGVuIi8+CisgIDxpbnB1dCBjbGFzcz0ic2VhcmNoLXF1ZXJ5IiBuYW1lPSJxIiBpZD0icXVlcnkiIHR5cGU9InRleHQiIC8+Cis8L2Zvcm0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vY29vcC9jc2UvYnJhbmQ/Zm9ybT1zZWFyY2gtZm9ybSI+PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgPGlmcmFtZSBzcmM9Imh0dHA6Ly93d3cuZmFjZWJvb2suY29tL3BsdWdpbnMvbGlrZS5waHA/aHJlZj1odHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmcvYXRsYXMtZG9jcyZzZW5kPWZhbHNlJmxheW91dD1idXR0b25fY291bnQmc2hvdy1mYWNlcz1mYWxzZSZhY3Rpb249bGlrZSZjb2xvcnNjaGVtZT1kYXJrIgorICAgICAgICBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0iMCIKKyAgICAgICAgc3R5bGU9ImJvcmRlcjpub25lOyB3aWR0aDo4MHB4OyBoZWlnaHQ6MjBweDsgbWFyZ2luLXRvcDogMTBweDsiICBjbGFzcz0icHVsbC1yaWdodCIgPjwvaWZyYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9hcGlzLmdvb2dsZS5jb20vanMvcGx1c29uZS5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgPHVsIGNsYXNzPSJuYXYgcHVsbC1yaWdodCI+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CisgICAgCisgICAgPGRpdiBjbGFzcz0iZy1wbHVzb25lIiBkYXRhLWhyZWY9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzIiBkYXRhLXNpemU9Im1lZGl1bSIgIHdpZHRoPSI2MHB4IiBhbGlnbj0icmlnaHQiID48L2Rpdj4KKworICAgICAgICA8L2xpPjwvdWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAKKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICAKKyAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICA8ZGl2IGlkPSJiYW5uZXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLWxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLiIgaWQ9ImJhbm5lckxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hdGxhcy1sb2dvLnBuZyIgIGFsdD0iQXBhY2hlIEF0bGFzIiB3aWR0aD0iMjAwcHgiIGhlaWdodD0iNDVweCIvPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+ICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2luY3ViYXRvci5hcGFjaGUub3JnIiBpZD0iYmFubmVyUmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hcGFjaGUtaW5jdWJhdG9yLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgSW5jdWJhdG9yIi8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIj48aHIvPjwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImJyZWFkY3J1bWJzIj4KKyAgICAgICAgPHVsIGNsYXNzPSJicmVhZGNydW1iIj4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZyIgY2xhc3M9ImV4dGVybmFsTGluayIgdGl0bGU9IkFwYWNoZSI+CisgICAgICAgIEFwYWNoZTwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iQXRsYXMiPgorICAgICAgICBBdGxhczwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICA8bGkgY2xhc3M9IiI+U2VhcmNoPC9saT4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgPGxpIGlkPSJwdWJsaXNoRGF0ZSIgY2xhc3M9InB1bGwtcmlnaHQiPkxhc3QgUHVibGlzaGVkOiAyMDE1LTA3LTA5PC9saT4gPGxpIGNsYXNzPSJkaXZpZGVyIHB1bGwtcmlnaHQiPnw8L2xpPgorICAgICAgICAgICAgICA8bGkgaWQ9InByb2plY3RWZXJzaW9uIiBjbGFzcz0icHVsbC1yaWdodCI+VmVyc2lvbjogMC42LWluY3ViYXRpbmctU05BUFNIT1Q8L2xpPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvZGl2PgorCisgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICA8ZGl2IGlkPSJib2R5Q29sdW1uIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj5TZWFyY2g8YSBuYW1lPSJTZWFyY2giPjwvYT48L2gyPgorPHA+QXRsYXMgZXhwb3NlcyBzZWFyY2ggb3ZlciB0aGUgbWV0YWRhdGEgaW4gdHdvIHdheXM6PC9wPgorPHVsPgorPGxpPlNlYXJjaCB1c2luZyBEU0w8L2xpPgorPGxpPkZ1bGwtdGV4dCBzZWFyY2g8L2xpPjwvdWw+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5TZWFyY2ggRFNMIEdyYW1tYXI8YSBuYW1lPSJTZWFyY2hfRFNMX0dyYW1tYXIiPjwvYT48L2gzPgorPHA+VGhlIERTTCBleHBvc2VzIGFuIFNRTCBsaWtlIHF1ZXJ5IGxhbmd1YWdlIGZvciBzZWFyY2hpbmcgdGhlIG1ldGFkYXRhIGJhc2VkIG9uIHRoZSB0eXBlIHN5c3RlbS4gVGhlIGdyYW1tYXIgZm9yIHRoZSBEU0wgaXMgYmVsb3cuPC9wPgorPGRpdiBjbGFzcz0ic291cmNlIj4KKzxwcmU+CitxdWVyeVdpdGhQYXRoOiBxdWVyeSB+IG9wdChXSVRIUEFUSCkKKworcXVlcnk6IHJlcDFzZXAoc2luZ2xlUXVlcnksIG9wdChDT01NQSkpCisKK3NpbmdsZVF1ZXJ5OiBzaW5nbGVRcnlTcmMgfiBvcHQobG9vcEV4cHJlc3Npb24pIH4gb3B0KHNlbGVjdENsYXVzZSkKKworc2luZ2xlUXJ5U3JjID0gRlJPTSB+IGZyb21TcmMgfiBvcHQoV0hFUkUpIH4gb3B0KGV4cHIgXj8gbm90SWRFeHByZXNzaW9uKSB8CisgICAgICAgIFdIRVJFIH4gKGV4cHIgXj8gbm90SWRFeHByZXNzaW9uKSB8CisgICAgICAgIGV4cHIgXj8gbm90SWRFeHByZXNzaW9uIHwKKyAgICAgICAgZnJvbVNyYyB+IG9wdChXSEVSRSkgfiBvcHQoZXhwciBePyBub3RJZEV4cHJlc3Npb24pCisKK2Zyb21TcmM6IGlkZW50aWZpZXIgfiBBUyB+IGFsaWFzIHwgaWRlbnRpZmllcgorCitsb29wRXhwcmVzc2lvbjogTE9PUCB+IChMUEFSRU4gfiZndDsgcXVlcnkgJmx0O34gUlBBUkVOKSB+IG9wdChpbnRDb25zdGFudCAmbHQ7fiBUSU1FUykgfiBvcHQoQVMgfiZndDsgYWxpYXMpCisKK3NlbGVjdENsYXVzZTogU0VMRUNUIH4gcmVwMXNlcChzZWxlY3RFeHByZXNzaW9uLCBDT01NQSkKKworc2VsZWN0RXhwcmVzc2lvbjogIGV4cHIgfiBvcHQoQVMgfiZndDsgYWxpYXMpCisKK2V4cHI6ICBjb21wRSB+IG9wdChyZXAoZXhwclJpZ2h0KSkKKworZXhwclJpZ2h0OiAoQU5EIHwgT1IpIH4gY29tcEUKKworY29tcEU6CisgICAgICAgIGFyaXRoRSB+IChMVCB8IExURSB8IEVRIHwgTkVRIHwgR1QgfCBHVEUpIH4gYXJpdGhFIHwKKyAgICAgICAgICAgIGFyaXRoRSB+IChJU0EgfCBJUykgfiBpZGVudCAgfAorICAgICAgICAgICAgYXJpdGhFIH4gSEFTIH4gaWRlbnQgIHwKKyAgICAgICAgICAgIGFyaXRoRQorCithcml0aEU6IG11bHRpRSB+IG9wdChyZXAoYXJpdGhFUmlnaHQpKQorCithcml0aEVSaWdodDogKFBMVVMgfCBNSU5VUykgfiBtdWx0aUUKKworbXVsdGlFOiBhdG9tRSB+IG9wdChyZXAobXVsdGlFUmlnaHQpKQorCittdWx0aUVSaWdodDogKFNUQVIgfCBESVYpIH4gYXRvbUUKKworYXRvbUU6IGxpdGVyYWwgfCBpZGVudGlmaWVyIHwgTFBBUkVOIH4mZ3Q7IGV4cHIgJmx0O34gUlBBUkVOCisKK2lkZW50aWZpZXI6IHJlcDFzZXAoaWRlbnQsIERPVCkKKworYWxpYXM6IGlkZW50IHwgc3RyaW5nTGl0CisKK2xpdGVyYWw6IGJvb2xlYW5Db25zdGFudCB8CisgICAgICAgIGludENvbnN0YW50ICB8CisgICAgICAgIGxvbmdDb25zdGFudCAgfAorICAgICAgICBmbG9hdENvbnN0YW50IHwKKyAgICAgICAgZG91YmxlQ29uc3RhbnQgIHwKKyAgICAgICAgc3RyaW5nTGl0CisKKzwvcHJlPjwvZGl2PgorPHA+R3JhbW1hciBsYW5ndWFnZToge25vZm9ybWF0fSBvcHQoYSkgICAgID0mZ3Q7IGEgaXMgb3B0aW9uYWwgfiAgICAgICAgICAgID0mZ3Q7IGEgY29tYmluYXRvci4gJ2EgfiBiJyBtZWFucyBhIGZvbGxvd2VkIGJ5IGIgcmVwICAgICAgICAgPSZndDsgemVybyBvciBtb3JlIHJlcDFzZXAgPSZndDsgb25lIG9yIG1vcmUsIHNlcGFyYXRlZCBieSBzZWNvbmQgYXJnLiB7bm9mb3JtYXR9PC9wPgorPHA+TGFuZ3VhZ2UgTm90ZXM6PC9wPgorPHVsPgorPGxpPkEgPGI+PGEgaHJlZj0iLi9TaW5nbGVRdWVyeS5odG1sIj5TaW5nbGVRdWVyeTwvYT48L2I+IGV4cHJlc3Npb24gY2FuIGJlIHVzZWQgdG8gc2VhcmNoIGZvciBlbnRpdGllcyBvZiBhIDxpPlRyYWl0PC9pPiBvciA8aT5DbGFzczwvaT4uPC9saT48L3VsPkVudGl0aWVzIGNhbiBiZSBmaWx0ZXJlZCBiYXNlZCBvbiBhICdXaGVyZSBDbGF1c2UnIGFuZCBFbnRpdHkgQXR0cmlidXRlcyBjYW4gYmUgcmV0cmlldmVkIGJhc2VkIG9uIGEgJ1NlbGVjdCBDbGF1c2UnLgorPHVsPgorPGxpPkFuIEVudGl0eSBHcmFwaCBjYW4gYmUgdHJhdmVyc2VkL2pvaW5lZCBieSBjb21iaW5pbmcgb25lIG9yIG1vcmUgPGEgaHJlZj0iLi9TaW5nbGVRdWVyaWVzLmh0bWwiPlNpbmdsZVF1ZXJpZXM8L2E+LjwvbGk+Cis8bGk+QW4gYXR0ZW1wdCBpcyBtYWRlIHRvIG1ha2UgdGhlIGV4cHJlc3Npb25zIGxvb2sgU1FMIGxpa2UgYnkgYWNjZXB0aW5nIGtleXdvcmRzICZxdW90O1NFTEVDVCZxdW90Oyw8L2xpPjwvdWw+JnF1b3Q7RlJPTSZxdW90OywgYW5kICZxdW90O1dIRVJFJnF1b3Q7OyBidXQgdGhlc2UgYXJlIG9wdGlvbmFsIGFuZCB1c2VycyBjYW4gc2ltcGx5IHRoaW5rIGluIHRlcm1zIG9mIEVudGl0eSBHcmFwaCBUcmF2ZXJzYWxzLgorPHVsPgorPGxpPlRoZSB0cmFuc2l0aXZlIGNsb3N1cmUgb2YgYW4gRW50aXR5IHJlbGF0aW9uc2hpcCBjYW4gYmUgZXhwcmVzc2VkIHZpYSB0aGUgPGk+TG9vcDwvaT4gZXhwcmVzc2lvbi4gQTwvbGk+PC91bD48aT5Mb29wPC9pPiBleHByZXNzaW9uIGNhbiBiZSBhbnkgdHJhdmVyc2FsIChyZWN1cnNpdmVseSBhIHF1ZXJ5KSB0aGF0IHJlcHJlc2VudHMgYSA8aT5QYXRoPC9pPiB0aGF0IGVuZHMgaW4gYW4gRW50aXR5IG9mIHRoZSBzYW1lIDxpPlR5cGU8L2k+IGFzIHRoZSBzdGFydGluZyBFbnRpdHkuCis8dWw+Cis8bGk+VGhlIDxpPjxhIGhyZWY9Ii4vV2l0aFBhdGguaHRtbCI+V2l0aFBhdGg8L2E+PC9pPiBjbGF1c2UgY2FuIGJlIHVzZWQgd2l0aCB0cmFuc2l0aXZlIGNsb3N1cmUgcXVlcmllcyB0byByZXRyaWV2ZSB0aGUgUGF0aCB0aGF0PC9saT48L3VsPmNvbm5lY3RzIHRoZSB0d28gcmVsYXRlZCBFbnRpdGllcy4gKFdlIGFsc28gcHJvdmlkZSBhIGhpZ2hlciBsZXZlbCBpbnRlcmZhY2UgZm9yIENsb3N1cmUgUXVlcmllcyBzZWUgc2NhbGFkb2MgZm9yICdvcmcuYXBhY2hlLm1ldGFkYXRhLnF1ZXJ5LkNsb3N1cmVRdWVyeScpCis8dWw+Cis8bGk+VGhlcmUgYXJlIGNvdXBsZSBvZiBQcmVkaWNhdGUgZnVuY3Rpb25zIGRpZmZlcmVudCBmcm9tIFNRTDoKKzx1bD4KKzxsaT48aT5pczwvaT4gb3IgPGk+aXNhPC9pPmNhbiBiZSB1c2VkIHRvIGZpbHRlciBFbnRpdGllcyB0aGF0IGhhdmUgYSBwYXJ0aWN1bGFyIFRyYWl0LjwvbGk+Cis8bGk+PGk+aGFzPC9pPiBjYW4gYmUgdXNlZCB0byBmaWx0ZXIgRW50aXRpZXMgdGhhdCBoYXZlIGEgdmFsdWUgZm9yIGEgcGFydGljdWxhciBBdHRyaWJ1dGUuPC9saT48L3VsPjwvbGk+PC91bD48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGg0PkRTTCBFeGFtcGxlczxhIG5hbWU9IkRTTF9FeGFtcGxlcyI+PC9hPjwvaDQ+Cis8cD48L3A+Cis8dWw+Cis8bGk+ZnJvbSBEQjwvbGk+Cis8bGk+REIgd2hlcmUgbmFtZT0mcXVvdDtSZXBvcnRpbmcmcXVvdDsgc2VsZWN0IG5hbWUsIG93bmVyPC9saT4KKzxsaT5EQiBoYXMgbmFtZTwvbGk+Cis8bGk+REIgaXMgPGEgaHJlZj0iLi9KZGJjQWNjZXNzLmh0bWwiPkpkYmNBY2Nlc3M8L2E+PC9saT4KKzxsaT5Db2x1bW4gd2hlcmUgQ29sdW1uIGlzYSBQSUk8L2xpPgorPGxpPlRhYmxlIHdoZXJlIG5hbWU9JnF1b3Q7c2FsZXNfZmFjdCZxdW90OywgY29sdW1uczwvbGk+Cis8bGk+VGFibGUgd2hlcmUgbmFtZT0mcXVvdDtzYWxlc19mYWN0JnF1b3Q7LCBjb2x1bW5zIGFzIGNvbHVtbiBzZWxlY3QgY29sdW1uLm5hbWUsIGNvbHVtbi5kYXRhVHlwZSwgY29sdW1uLmNvbW1lbnQ8L2xpPjwvdWw+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5GdWxsLXRleHQgU2VhcmNoPGEgbmFtZT0iRnVsbC10ZXh0X1NlYXJjaCI+PC9hPjwvaDM+Cis8cD5BdGxhcyBhbHNvIGV4cG9zZXMgYSBsdWNlbmUgc3R5bGUgZnVsbC10ZXh0IHNlYXJjaCBjYXBhYmlsaXR5LjwvcD48L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorCisgICAgPGhyLz4KKworICAgIDxmb290ZXI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgc3BhbjEyIj5Db3B5cmlnaHQgJmNvcHk7ICAgICAgICAgICAgICAgICAgICAyMDE1CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciPkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9hPi4KKyAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPHAgaWQ9InBvd2VyZWRCeSIgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy8iIHRpdGxlPSJCdWlsdCBieSBNYXZlbiIgY2xhc3M9InBvd2VyZWRCeSI+CisgICAgICAgIDxpbWcgY2xhc3M9ImJ1aWx0QnkiIGFsdD0iQnVpbHQgYnkgTWF2ZW4iIHNyYz0iLi9pbWFnZXMvbG9nb3MvbWF2ZW4tZmVhdGhlci5wbmciIC8+CisgICAgICA8L2E+CisgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgPC9mb290ZXI+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NlY3VyaXR5Lmh0bWwgYi9TZWN1cml0eS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5N2RkNGMKLS0tIC9kZXYvbnVsbAorKysgYi9TZWN1cml0eS5odG1sCkBAIC0wLDAgKzEsMzI2IEBACis8IURPQ1RZUEUgaHRtbD4KKzwhLS0KKyB8IEdlbmVyYXRlZCBieSBBcGFjaGUgTWF2ZW4gRG94aWEgYXQgMjAxNS0wNy0wOQorIHwgUmVuZGVyZWQgdXNpbmcgQXBhY2hlIE1hdmVuIEZsdWlkbyBTa2luIDEuMy4wCistLT4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CisgICAgPG1ldGEgbmFtZT0iRGF0ZS1SZXZpc2lvbi15eXl5bW1kZCIgY29udGVudD0iMjAxNTA3MDkiIC8+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4iIC8+CisgICAgPHRpdGxlPk1ldGFkYXRhIGFuZCBHb3Zlcm5hbmNlIC0gU2VjdXJpdHkgRmVhdHVyZXMgb2YgQXBhY2hlIEF0bGFzPC90aXRsZT4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmNzcyIgLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3NpdGUuY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvcHJpbnQuY3NzIiBtZWRpYT0icHJpbnQiIC8+CisKKyAgICAgIAorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4vanMvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uanMiPjwvc2NyaXB0PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHsgJCggJy5jYXJvdXNlbCcgKS5jYXJvdXNlbCggeyBpbnRlcnZhbDogMzUwMCB9ICkgfSApOzwvc2NyaXB0PgorICAgICAgICAgIAorICAgICAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keSBjbGFzcz0idG9wQmFyRW5hYmxlZCI+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisKKyAgICA8ZGl2IGlkPSJ0b3BiYXIiIGNsYXNzPSJuYXZiYXIgbmF2YmFyLWZpeGVkLXRvcCAiPgorICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWlubmVyIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiIHN0eWxlPSJ3aWR0aDogNjglOyI+PGRpdiBjbGFzcz0ibmF2LWNvbGxhcHNlIj4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Im5hdiI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkF0bGFzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iQWJvdXQiPkFib3V0PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9Ildpa2kiPldpa2k8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iTmV3cyI+TmV3czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXQtd2lwLXVzLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci1hdGxhcy5naXQiICB0aXRsZT0iR2l0Ij5HaXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci9hdGxhcyIgIHRpdGxlPSJTdm4iPlN2bjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9BVExBUyIgIHRpdGxlPSJKaXJhIj5KaXJhPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTL1Bvd2VyZWRCeSIgIHRpdGxlPSJQb3dlcmVkIGJ5Ij5Qb3dlcmVkIGJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vYmxvZ3MuYXBhY2hlLm9yZy9hdGxhcy8iICB0aXRsZT0iQmxvZyI+QmxvZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlByb2plY3QgSW5mb3JtYXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0icHJvamVjdC1pbmZvLmh0bWwiICB0aXRsZT0iU3VtbWFyeSI+U3VtbWFyeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibWFpbC1saXN0cy5odG1sIiAgdGl0bGU9Ik1haWxpbmcgTGlzdHMiPk1haWxpbmcgTGlzdHM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93ZWJjaGF0LmZyZWVub2RlLm5ldD9jaGFubmVscz1hcGFjaGVhdGxhcyZ1aW89ZDQiICB0aXRsZT0iSVJDIj5JUkM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InRlYW0tbGlzdC5odG1sIiAgdGl0bGU9IlRlYW0iPlRlYW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imlzc3VlLXRyYWNraW5nLmh0bWwiICB0aXRsZT0iSXNzdWUgVHJhY2tpbmciPklzc3VlIFRyYWNraW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJzb3VyY2UtcmVwb3NpdG9yeS5odG1sIiAgdGl0bGU9IlNvdXJjZSBSZXBvc2l0b3J5Ij5Tb3VyY2UgUmVwb3NpdG9yeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibGljZW5zZS5odG1sIiAgdGl0bGU9IkxpY2Vuc2UiPkxpY2Vuc2U8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZWxlYXNlcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZHluL2Nsb3Nlci5jZ2kvaW5jdWJhdG9yL2F0bGFzLzAuNS4wLWluY3ViYXRpbmcvIiAgdGl0bGU9IjAuNS1pbmN1YmF0aW5nIj4wLjUtaW5jdWJhdGluZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkRvY3VtZW50YXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iMC41LjAtaW5jdWJhdGluZy9pbmRleC5odG1sIiAgdGl0bGU9ImN1cnJlbnQiPmN1cnJlbnQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IjAuNS4wLWluY3ViYXRpbmcvaW5kZXguaHRtbCIgIHRpdGxlPSIwLjUtaW5jdWJhdGluZyI+MC41LWluY3ViYXRpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZXNvdXJjZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJPdmVydmlldyI+T3ZlcnZpZXc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlF1aWNrU3RhcnQuaHRtbCIgIHRpdGxlPSJHZXR0aW5nIFN0YXJ0ZWQiPkdldHRpbmcgU3RhcnRlZDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQXJjaGl0ZWN0dXJlLmh0bWwiICB0aXRsZT0iQXJjaGl0ZWN0dXJlIj5BcmNoaXRlY3R1cmU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Ikluc3RhbGxhdGlvblN0ZXBzLmh0bWwiICB0aXRsZT0iSW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlR5cGVTeXN0ZW0uaHRtbCIgIHRpdGxlPSJUeXBlIFN5c3RlbSI+VHlwZSBTeXN0ZW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkNvbmZpZ3VyYXRpb24uaHRtbCIgIHRpdGxlPSJDb25maWd1cmF0aW9uIj5Db25maWd1cmF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJTZWN1cml0eS5odG1sIiAgdGl0bGU9IlNlY3VyaXR5Ij5TZWN1cml0eTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iYXBpL3Jlc3QuaHRtbCIgIHRpdGxlPSJSZXN0IEFQSSI+UmVzdCBBUEk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BU0YgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vaG93LWl0LXdvcmtzLmh0bWwiICB0aXRsZT0iSG93IEFwYWNoZSBXb3JrcyI+SG93IEFwYWNoZSBXb3JrczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vIiAgdGl0bGU9IkZvdW5kYXRpb24iPkZvdW5kYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3Nwb25zb3JzaGlwLmh0bWwiICB0aXRsZT0iU3BvbnNvcmluZyBBcGFjaGUiPlNwb25zb3JpbmcgQXBhY2hlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi90aGFua3MuaHRtbCIgIHRpdGxlPSJUaGFua3MiPlRoYW5rczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBpZD0ic2VhcmNoLWZvcm0iIGFjdGlvbj0iaHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaCIgbWV0aG9kPSJnZXQiICBjbGFzcz0ibmF2YmFyLXNlYXJjaCBwdWxsLXJpZ2h0IiA+CisgICAgCisgIDxpbnB1dCB2YWx1ZT0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnIiBuYW1lPSJzaXRlc2VhcmNoIiB0eXBlPSJoaWRkZW4iLz4KKyAgPGlucHV0IGNsYXNzPSJzZWFyY2gtcXVlcnkiIG5hbWU9InEiIGlkPSJxdWVyeSIgdHlwZT0idGV4dCIgLz4KKzwvZm9ybT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9jb29wL2NzZS9icmFuZD9mb3JtPXNlYXJjaC1mb3JtIj48L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICA8aWZyYW1lIHNyYz0iaHR0cDovL3d3dy5mYWNlYm9vay5jb20vcGx1Z2lucy9saWtlLnBocD9ocmVmPWh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzJnNlbmQ9ZmFsc2UmbGF5b3V0PWJ1dHRvbl9jb3VudCZzaG93LWZhY2VzPWZhbHNlJmFjdGlvbj1saWtlJmNvbG9yc2NoZW1lPWRhcmsiCisgICAgICAgIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPSIwIgorICAgICAgICBzdHlsZT0iYm9yZGVyOm5vbmU7IHdpZHRoOjgwcHg7IGhlaWdodDoyMHB4OyBtYXJnaW4tdG9wOiAxMHB4OyIgIGNsYXNzPSJwdWxsLXJpZ2h0IiA+PC9pZnJhbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2FwaXMuZ29vZ2xlLmNvbS9qcy9wbHVzb25lLmpzIj48L3NjcmlwdD4KKworICAgICAgICA8dWwgY2xhc3M9Im5hdiBwdWxsLXJpZ2h0Ij48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij4KKyAgICAKKyAgICA8ZGl2IGNsYXNzPSJnLXBsdXNvbmUiIGRhdGEtaHJlZj0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3MiIGRhdGEtc2l6ZT0ibWVkaXVtIiAgd2lkdGg9IjYwcHgiIGFsaWduPSJyaWdodCIgPjwvZGl2PgorCisgICAgICAgIDwvbGk+PC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIAorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIAorICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgIDxkaXYgaWQ9ImJhbm5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtbGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uIiBpZD0iYmFubmVyTGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2F0bGFzLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgQXRsYXMiIHdpZHRoPSIyMDBweCIgaGVpZ2h0PSI0NXB4Ii8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4gICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vaW5jdWJhdG9yLmFwYWNoZS5vcmciIGlkPSJiYW5uZXJSaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2FwYWNoZS1pbmN1YmF0b3ItbG9nby5wbmciICBhbHQ9IkFwYWNoZSBJbmN1YmF0b3IiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiPjxoci8+PC9kaXY+CisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0iYnJlYWRjcnVtYnMiPgorICAgICAgICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiPgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iQXBhY2hlIj4KKyAgICAgICAgQXBhY2hlPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJBdGxhcyI+CisgICAgICAgIEF0bGFzPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0iIj5TZWN1cml0eSBGZWF0dXJlcyBvZiBBcGFjaGUgQXRsYXM8L2xpPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICA8bGkgaWQ9InB1Ymxpc2hEYXRlIiBjbGFzcz0icHVsbC1yaWdodCI+TGFzdCBQdWJsaXNoZWQ6IDIwMTUtMDctMDk8L2xpPiA8bGkgY2xhc3M9ImRpdmlkZXIgcHVsbC1yaWdodCI+fDwvbGk+CisgICAgICAgICAgICAgIDxsaSBpZD0icHJvamVjdFZlcnNpb24iIGNsYXNzPSJwdWxsLXJpZ2h0Ij5WZXJzaW9uOiAwLjYtaW5jdWJhdGluZy1TTkFQU0hPVDwvbGk+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9kaXY+CisKKyAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxkaXYgaWQ9ImJvZHlDb2x1bW4iID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPlNlY3VyaXR5IEZlYXR1cmVzIG9mIEFwYWNoZSBBdGxhczxhIG5hbWU9IlNlY3VyaXR5X0ZlYXR1cmVzX29mX0FwYWNoZV9BdGxhcyI+PC9hPjwvaDI+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5PdmVydmlldzxhIG5hbWU9Ik92ZXJ2aWV3Ij48L2E+PC9oMz4KKzxwPlRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBmb3IgZW5oYW5jaW5nIHRoZSBzZWN1cml0eSBvZiB0aGUgcGxhdGZvcm06PC9wPgorPHVsPgorPGxpPlNTTDwvbGk+Cis8bGk+U2VydmljZSBBdXRoZW50aWNhdGlvbjwvbGk+Cis8bGk+U1BORUdPLWJhc2VkIEhUVFAgQXV0aGVudGljYXRpb248L2xpPjwvdWw+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoND5TU0w8YSBuYW1lPSJTU0wiPjwvYT48L2g0PgorPHA+Qm90aCBTU0wgb25lLXdheSAoc2VydmVyIGF1dGhlbnRpY2F0aW9uKSBhbmQgdHdvLXdheSAoc2VydmVyIGFuZCBjbGllbnQgYXV0aGVudGljYXRpb24pIGFyZSBzdXBwb3J0ZWQuICBUaGUgZm9sbG93aW5nIGFwcGxpY2F0aW9uIHByb3BlcnRpZXMgKHByb3BlcnRpZXMgY29uZmlndXJlZCBpbiB0aGUgYXBwbGljYXRpb24ucHJvcGVydGllcyBmaWxlKSBhcmUgYXZhaWxhYmxlIGZvciBjb25maWd1cmluZyBTU0w6PC9wPgorPHA+PC9wPgorPHVsPgorPGxpPjxjb2RlPmF0bGFzLmVuYWJsZVRMUzwvY29kZT4gKGZhbHNlfHRydWUpIFtkZWZhdWx0OiBmYWxzZV0gLSBlbmFibGUvZGlzYWJsZSB0aGUgU1NMIGxpc3RlbmVyPC9saT4KKzxsaT48Y29kZT5rZXlzdG9yZS5maWxlPC9jb2RlPiAtIHRoZSBwYXRoIHRvIHRoZSBrZXlzdG9yZSBmaWxlIGxldmVyYWdlZCBieSB0aGUgc2VydmVyLiAgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUuPC9saT4KKzxsaT48Y29kZT50cnVzdHN0b3JlLmZpbGU8L2NvZGU+IC0gdGhlIHBhdGggdG8gdGhlIHRydXN0c3RvcmUgZmlsZS4gVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjZXJ0aWZpY2F0ZXMgb2Ygb3RoZXIgdHJ1c3RlZCBlbnRpdGllcyAoZS5nLiB0aGUgY2VydGlmaWNhdGVzIGZvciBjbGllbnQgcHJvY2Vzc2VzIGlmIHR3by13YXkgU1NMIGlzIGVuYWJsZWQpLiAgSW4gbW9zdCBpbnN0YW5jZXMgdGhpcyBjYW4gYmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBrZXlzdG9yZS5maWxlIHByb3BlcnR5IChlc3BlY2lhbGx5IGlmIG9uZS13YXkgU1NMIGlzIGVuYWJsZWQpLjwvbGk+Cis8bGk+PGNvZGU+Y2xpZW50LmF1dGguZW5hYmxlZDwvY29kZT4gKGZhbHNlfHRydWUpIFtkZWZhdWx0OiBmYWxzZV0gLSBlbmFibGUvZGlzYWJsZSBjbGllbnQgYXV0aGVudGljYXRpb24uICBJZiBlbmFibGVkLCB0aGUgY2xpZW50IHdpbGwgaGF2ZSB0byBhdXRoZW50aWNhdGUgdG8gdGhlIHNlcnZlciBkdXJpbmcgdGhlIHRyYW5zcG9ydCBzZXNzaW9uIGtleSBjcmVhdGlvbiBwcm9jZXNzIChpLmUuIHR3by13YXkgU1NMIGlzIGluIGVmZmVjdCkuPC9saT4KKzxsaT48Y29kZT5jZXJ0LnN0b3Jlcy5jcmVkZW50aWFsLnByb3ZpZGVyLnBhdGg8L2NvZGU+IC0gdGhlIHBhdGggdG8gdGhlIENyZWRlbnRpYWwgUHJvdmlkZXIgc3RvcmUgZmlsZS4gIFRoZSBwYXNzd29yZHMgZm9yIHRoZSBrZXlzdG9yZSwgdHJ1c3RzdG9yZSwgYW5kIHNlcnZlciBjZXJ0aWZpY2F0ZSBhcmUgbWFpbnRhaW5lZCBpbiB0aGlzIHNlY3VyZSBmaWxlLiAgVXRpbGl6ZSB0aGUgY3B1dGlsIHNjcmlwdCBpbiB0aGUgJ2JpbicgZGlyZWN0b3kgKHNlZSBiZWxvdykgdG8gcG9wdWxhdGUgdGhpcyBmaWxlIHdpdGggdGhlIHBhc3N3b3JkcyByZXF1aXJlZC48L2xpPjwvdWw+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoNT5DcmVkZW50aWFsIFByb3ZpZGVyIFV0aWxpdHkgU2NyaXB0PGEgbmFtZT0iQ3JlZGVudGlhbF9Qcm92aWRlcl9VdGlsaXR5X1NjcmlwdCI+PC9hPjwvaDU+Cis8cD5JbiBvcmRlciB0byBwcmV2ZW50IHRoZSB1c2Ugb2YgY2xlYXItdGV4dCBwYXNzd29yZHMsIHRoZSBBdGxhcyBwbGF0b2ZybSBtYWtlcyB1c2Ugb2YgdGhlIENyZWRlbnRpYWwgUHJvdmlkZXIgZmFjaWxpdHkgZm9yIHNlY3VyZSBwYXNzd29yZCBzdG9yYWdlIChzZWUgPGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0iaHR0cDovL2hhZG9vcC5hcGFjaGUub3JnL2RvY3MvY3VycmVudC9oYWRvb3AtcHJvamVjdC1kaXN0L2hhZG9vcC1jb21tb24vQ29tbWFuZHNNYW51YWwuaHRtbCNjcmVkZW50aWFsIj5IYWRvb3AgQ3JlZGVudGlhbCBDb21tYW5kIFJlZmVyZW5jZTwvYT4gZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBmYWNpbGl0eSkuICBUaGUgY3B1dGlsIHNjcmlwdCBpbiB0aGUgJ2JpbicgZGlyZWN0b3J5IGNhbiBiZSBsZXZlcmFnZWQgdG8gY3JlYXRlIHRoZSBwYXNzd29yZCBzdG9yZSByZXF1aXJlZC48L3A+Cis8cD5UbyBjcmVhdGUgdGhlIGNyZWRlbnRpYWwgcHJvdmRpZXIgZm9yIEF0bGFzOjwvcD4KKzxwPjwvcD4KKzx1bD4KKzxsaT48Y29kZT5iaW48L2NvZGU+JyBkaXJlY3Rvcnk8L2xpPgorPGxpPjxjb2RlPi4vY3B1dGlsLnNoPC9jb2RlPic8L2xpPgorPGxpPkVudGVyIHRoZSBwYXRoIGZvciB0aGUgZ2VuZXJhdGVkIGNyZWRlbnRpYWwgcHJvdmlkZXIuICBUaGUgZm9ybWF0IGZvciB0aGUgcGF0aCBpczoKKzx1bD4KKzxsaT48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJqY2VrczovL2ZpbGUvbG9jYWwvZmlsZS9wYXRoL2ZpbGUuamNla3MiPmpjZWtzOi8vZmlsZS9sb2NhbC9maWxlL3BhdGgvZmlsZS5qY2VrczwvYT4gb3IgPGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0iamNla3M6Ly9oZGZzQG5hbWVub2RlaG9zdDpwb3J0L3BhdGgvaW4vaGRmcy90by9maWxlLmpjZWtzLiI+amNla3M6Ly9oZGZzQG5hbWVub2RlaG9zdDpwb3J0L3BhdGgvaW4vaGRmcy90by9maWxlLmpjZWtzLjwvYT4gIFRoZSBmaWxlcyBnZW5lcmFsbHkgdXNlIHRoZSAmcXVvdDsuamNla3MmcXVvdDsgZXh0ZW5zaW9uIChlLmcuIHRlc3QuamNla3MpPC9saT48L3VsPjwvbGk+Cis8bGk+RW50ZXIgdGhlIHBhc3N3b3JkcyBmb3IgdGhlIGtleXN0b3JlLCB0cnVzdHN0b3JlLCBhbmQgc2VydmVyIGtleSAodGhlc2UgcGFzc3dvcmRzIG5lZWQgdG8gbWF0Y2ggdGhlIG9uZXMgdXRpbGl6ZWQgZm9yIGFjdHVhbGx5IGNyZWF0aW5nIHRoZSBhc3NvY2lhdGVkIGNlcnRpZmljYXRlIHN0b3JlIGZpbGVzKS48L2xpPjwvdWw+Cis8cD5UaGUgY3JlZGVudGlhbCBwcm92aWRlciB3aWxsIGJlIGdlbmVyYXRlZCBhbmQgc2F2ZWQgdG8gdGhlIHBhdGggcHJvdmlkZWQuPC9wPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDQ+U2VydmljZSBBdXRoZW50aWNhdGlvbjxhIG5hbWU9IlNlcnZpY2VfQXV0aGVudGljYXRpb24iPjwvYT48L2g0PgorPHA+VGhlIEF0bGFzIHBsYXRmb3JtLCB1cG9uIHN0YXJ0dXAsIGlzIGFzc29jaWF0ZWQgdG8gYW4gYXV0aGVudGljYXRlZCBpZGVudGl0eS4gIEJ5IGRlZmF1bHQsIGluIGFuIGluc2VjdXJlIGVudmlyb25tZW50LCB0aGF0IGlkZW50aXR5IGlzIHRoZSBzYW1lIGFzIHRoZSBPUyBhdXRoZW50aWNhdGVkIHVzZXIgbGF1bmNoaW5nIHRoZSBzZXJ2ZXIuICBIb3dldmVyLCBpbiBhIHNlY3VyZSBjbHVzdGVyIGxldmVyYWdpbmcga2VyYmVyb3MsIGl0IGlzIGNvbnNpZGVyZWQgYSBiZXN0IHByYWN0aWNlIHRvIGNvbmZpZ3VyZSBhIGtleXRhYiBhbmQgcHJpbmNpcGFsIGluIG9yZGVyIGZvciB0aGUgcGxhdGZvcm0gdG8gYXV0aGVudGljYXRlIHRvIHRoZSBLREMuIFRoaXMgYWxsb3dzIHRoZSBzZXJ2aWNlIHRvIHN1YnNlcXVlbnRseSBpbnRlcmFjdCB3aXRoIG90aGVyIHNlY3VyZSBjbHVzdGVyIHNlcnZpY2VzIChlLmcuIEhERlMpLjwvcD4KKzxwPlRoZSBwcm9wZXJ0aWVzIGZvciBjb25maWd1cmluZyBzZXJ2aWNlIGF1dGhlbnRpY2F0aW9uIGFyZTo8L3A+Cis8cD48L3A+Cis8dWw+Cis8bGk+PGNvZGU+YXRsYXMuYXV0aGVudGljYXRpb24ubWV0aG9kPC9jb2RlPiAoc2ltcGxlfGtlcmJlcm9zKSBbZGVmYXVsdDogc2ltcGxlXSAtIHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2QgdG8gdXRpbGl6ZS4gIFNpbXBsZSB3aWxsIGxldmVyYWdlIHRoZSBPUyBhdXRoZW50aWNhdGVkIGlkZW50aXR5IGFuZCBpcyB0aGUgZGVmYXVsdCBtZWNoYW5pc20uICAna2VyYmVyb3MnIGluZGljYXRlcyB0aGF0IHRoZSBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRvIGF1dGhlbnRpY2F0ZSB0byB0aGUgS0RDIGxldmVyYWdpbmcgdGhlIGNvbmZpZ3VyZWQga2V5dGFiIGFuZCBwcmluY2lwYWwuPC9saT4KKzxsaT48Y29kZT5hdGxhcy5hdXRoZW50aWNhdGlvbi5rZXl0YWI8L2NvZGU+IC0gdGhlIHBhdGggdG8gdGhlIGtleXRhYiBmaWxlLjwvbGk+Cis8bGk+PGNvZGU+YXRsYXMuYXV0aGVudGljYXRpb24ucHJpbmNpcGFsPC9jb2RlPiAtIHRoZSBwcmluY2lwYWwgdG8gdXNlIGZvciBhdXRoZW50aWNhdGluZyB0byB0aGUgS0RDLiAgVGhlIHByaW5jaXBhbCBpcyBnZW5lcmFsbHkgb2YgdGhlIGZvcm0gJnF1b3Q7dXNlci9ob3N0QHJlYWxtJnF1b3Q7LiAgWW91IG1heSB1c2UgdGhlICdfSE9TVCcgdG9rZW4gZm9yIHRoZSBob3N0bmFtZSBhbmQgdGhlIGxvY2FsIGhvc3RuYW1lIHdpbGwgYmUgc3Vic3RpdHV0ZWQgaW4gYnkgdGhlIHJ1bnRpbWUgKGUuZy4gJnF1b3Q7QXRsYXMvX0hPU1RARVhBTVBMRS5DT00mcXVvdDspLjwvbGk+PC91bD48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGg0PlNQTkVHTy1iYXNlZCBIVFRQIEF1dGhlbnRpY2F0aW9uPGEgbmFtZT0iU1BORUdPLWJhc2VkX0hUVFBfQXV0aGVudGljYXRpb24iPjwvYT48L2g0PgorPHA+SFRUUCBhY2Nlc3MgdG8gdGhlIEF0bGFzIHBsYXRmb3JtIGNhbiBiZSBzZWN1cmVkIGJ5IGVuYWJsaW5nIHRoZSBwbGF0Zm9ybSdzIFNQTkVHTyBzdXBwb3J0LiAgVGhlcmUgYXJlIGN1cnJlbnRseSB0d28gc3VwcG9ydGVkIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbXM6PC9wPgorPHA+PC9wPgorPHVsPgorPGxpPjxjb2RlPnNpbXBsZTwvY29kZT4gLSBhdXRoZW50aWNhdGlvbiBpcyBwZXJmb3JtZWQgdmlhIGEgcHJvdmlkZWQgdXNlciBuYW1lPC9saT4KKzxsaT48Y29kZT5rZXJiZXJvczwvY29kZT4gLSB0aGUgS0RDIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkgb2YgdGhlIGNsaWVudCBpcyBsZXZlcmFnZWQgdG8gYXV0aGVudGljYXRlIHRvIHRoZSBzZXJ2ZXI8L2xpPjwvdWw+Cis8cD5UaGUga2VyYmVyb3Mgc3VwcG9ydCByZXF1aXJlcyB0aGUgY2xpZW50IGFjY2Vzc2luZyB0aGUgc2VydmVyIHRvIGZpcnN0IGF1dGhlbnRpY2F0ZSB0byB0aGUgS0RDICh1c3VhbGx5IHRoaXMgaXMgZG9uZSB2aWEgdGhlICdraW5pdCcgY29tbWFuZCkuICBPbmNlIGF1dGhlbnRpY2F0ZWQsIHRoZSB1c2VyIG1heSBhY2Nlc3MgdGhlIHNlcnZlciAodGhlIGF1dGhlbnRpY2F0ZWQgaWRlbnRpdHkgd2lsbCBiZSByZWxhdGVkIHRvIHRoZSBzZXJ2ZXIgdmlhIHRoZSBTUE5FR08gbmVnb3RpYXRpb24gbWVjaGFuaXNtKS48L3A+Cis8cD5UaGUgcHJvcGVydGllcyBmb3IgY29uZmlndXJpbmcgdGhlIFNQTkVHTyBzdXBwb3J0IGFyZTo8L3A+Cis8cD48L3A+Cis8dWw+Cis8bGk+PGNvZGU+YXRsYXMuaHR0cC5hdXRoZW50aWNhdGlvbi5lbmFibGVkPC9jb2RlPiAodHJ1ZXxmYWxzZSkgW2RlZmF1bHQ6IGZhbHNlXSAtIGEgcHJvcGVydHkgaW5kaWNhdGluZyB3aGV0aGVyIHRvIGVuYWJsZSBIVFRQIGF1dGhlbnRpY2F0aW9uPC9saT4KKzxsaT48Y29kZT5hdGxhcy5odHRwLmF1dGhlbnRpY2F0aW9uLnR5cGU8L2NvZGU+IChzaW1wbGV8a2VyYmVyb3MpIFtkZWZhdWx0OiBzaW1wbGVdIC0gdGhlIGF1dGhlbnRpY2F0aW9uIHR5cGU8L2xpPgorPGxpPjxjb2RlPmF0bGFzLmh0dHAuYXV0aGVudGljYXRpb24ua2VyYmVyb3MucHJpbmNpcGFsPC9jb2RlPiAtIHRoZSB3ZWItYXBwbGljYXRpb24gS2VyYmVyb3MgcHJpbmNpcGFsIG5hbWUuIFRoZSBLZXJiZXJvcyBwcmluY2lwYWwgbmFtZSBtdXN0IHN0YXJ0IHdpdGggJnF1b3Q7SFRUUC8uLi4mcXVvdDsuIEZvciBleGFtcGxlOiAmcXVvdDtIVFRQL2xvY2FsaG9zdEBMT0NBTEhPU1QmcXVvdDsuIFRoZXJlIGlzIG5vIGRlZmF1bHQgdmFsdWUuPC9saT4KKzxsaT48Y29kZT5hdGxhcy5odHRwLmF1dGhlbnRpY2F0aW9uLmtlcmJlcm9zLmtleXRhYjwvY29kZT4gLSB0aGUgcGF0aCB0byB0aGUga2V5dGFiIGZpbGUgY29udGFpbmluZyB0aGUgY3JlZGVudGlhbHMgZm9yIHRoZSBrZXJiZXJvcyBwcmluY2lwYWwuPC9saT48L3VsPgorPHA+Rm9yIGEgbW9yZSBkZXRhaWxlZCBkaXNjdXNzaW9uIG9mIHRoZSBIVFRQIGF1dGhlbnRpY2F0aW9uIG1lY2hhbmlzbSByZWZlciB0byA8YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJodHRwOi8vaGFkb29wLmFwYWNoZS5vcmcvZG9jcy9zdGFibGUvaGFkb29wLWF1dGgvQ29uZmlndXJhdGlvbi5odG1sIj5IYWRvb3AgQXV0aCwgSmF2YSBIVFRQIFNQTkVHTyAyLjYuMCAtIFNlcnZlciBTaWRlIENvbmZpZ3VyYXRpb248L2E+LiAgVGhlIHByZWZpeCB0aGF0IGRvY3VtZW50IHJlZmVyZW5jZXMgaXMgJnF1b3Q7YXRsYXMuaHR0cC5hdXRoZW50aWNhdGlvbiZxdW90OyBpbiB0aGUgY2FzZSBvZiB0aGUgQXRsYXMgYXV0aGVudGljYXRpb24gaW1wbGVtZW50YXRpb24uPC9wPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDQ+Q2xpZW50IHNlY3VyaXR5IGNvbmZpZ3VyYXRpb248YSBuYW1lPSJDbGllbnRfc2VjdXJpdHlfY29uZmlndXJhdGlvbiI+PC9hPjwvaDQ+Cis8cD5XaGVuIGxldmVyYWdpbmcgQXRsYXMgY2xpZW50IGNvZGUgdG8gY29tbXVuaWNhdGUgd2l0aCBhbiBBdGxhcyBzZXJ2ZXIgY29uZmlndXJlZCBmb3IgU1NMIHRyYW5zcG9ydCBhbmQvb3IgS2VyYmVyb3MgYXV0aGVudGljYXRpb24sIHRoZXJlIGlzIGEgcmVxdWlyZW1lbnQgdG8gcHJvdmlkZSBhIGNsaWVudCBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCBwcm92aWRlcyB0aGUgc2VjdXJpdHkgcHJvcGVydGllcyB0aGF0IGFsbG93IGZvciBjb21tdW5pY2F0aW9uIHdpdGgsIG9yIGF1dGhlbnRpY2F0aW5nIHRvLCB0aGUgc2VydmVyLiBDcmVhdGUgYSBjbGllbnQucHJvcGVydGllcyBmaWxlIHdpdGggdGhlIGFwcHJvcHJpYXRlIHNldHRpbmdzIChzZWUgYmVsb3cpIGFuZCBwbGFjZSBpdCBvbiB0aGUgY2xpZW50J3MgY2xhc3NwYXRoIG9yIGluIHRoZSBkaXJlY3Rvcnkgc3BlY2lmaWVkIGJ5IHRoZSAmcXVvdDthdGxhcy5jb25mJnF1b3Q7IHN5c3RlbSBwcm9wZXJ0eS48L3A+Cis8cD5UaGUgY2xpZW50IHByb3BlcnRpZXMgZm9yIFNTTCBjb21tdW5pY2F0aW9uIGFyZTo8L3A+Cis8cD48L3A+Cis8dWw+Cis8bGk+PGNvZGU+YXRsYXMuZW5hYmxlVExTPC9jb2RlPiAoZmFsc2V8dHJ1ZSkgW2RlZmF1bHQ6IGZhbHNlXSAtIGVuYWJsZS9kaXNhYmxlIHRoZSBTU0wgY2xpZW50IGNvbW11bmljYXRpb24gaW5mcmFzdHJ1Y3R1cmUuPC9saT4KKzxsaT48Y29kZT5rZXlzdG9yZS5maWxlPC9jb2RlPiAtIHRoZSBwYXRoIHRvIHRoZSBrZXlzdG9yZSBmaWxlIGxldmVyYWdlZCBieSB0aGUgY2xpZW50LiAgVGhpcyBmaWxlIGlzIG9ubHkgcmVxdWlyZWQgaWYgMi1XYXkgU1NMIGlzIGVuYWJsZWQgYXQgdGhlIHNlcnZlciBhbmQgY29udGFpbnMgdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZS48L2xpPgorPGxpPjxjb2RlPnRydXN0c3RvcmUuZmlsZTwvY29kZT4gLSB0aGUgcGF0aCB0byB0aGUgdHJ1c3RzdG9yZSBmaWxlLiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNlcnRpZmljYXRlcyBvZiB0cnVzdGVkIGVudGl0aWVzIChlLmcuIHRoZSBjZXJ0aWZpY2F0ZXMgZm9yIHRoZSBzZXJ2ZXIgb3IgYSBzaGFyZWQgY2VydGlmaWNhdGlvbiBhdXRob3JpdHkpLiBUaGlzIGZpbGUgaXMgcmVxdWlyZWQgZm9yIGJvdGggb25lLXdheSBvciB0d28td2F5IFNTTC48L2xpPgorPGxpPjxjb2RlPmNlcnQuc3RvcmVzLmNyZWRlbnRpYWwucHJvdmlkZXIucGF0aDwvY29kZT4gLSB0aGUgcGF0aCB0byB0aGUgQ3JlZGVudGlhbCBQcm92aWRlciBzdG9yZSBmaWxlLiAgVGhlIHBhc3N3b3JkcyBmb3IgdGhlIGtleXN0b3JlLCB0cnVzdHN0b3JlLCBhbmQgY2xpZW50IGNlcnRpZmljYXRlIGFyZSBtYWludGFpbmVkIGluIHRoaXMgc2VjdXJlIGZpbGUuPC9saT48L3VsPgorPHA+VGhlIHByb3BlcnR5IHJlcXVpcmVkIGZvciBhdXRoZW50aWNhdGluZyB0byB0aGUgc2VydmVyIChpZiBhdXRoZW50aWNhdGlvbiBpcyBlbmFibGVkKTo8L3A+Cis8cD48L3A+Cis8dWw+Cis8bGk+PGNvZGU+YXRsYXMuaHR0cC5hdXRoZW50aWNhdGlvbi50eXBlPC9jb2RlPiAoc2ltcGxlfGtlcmJlcm9zKSBbZGVmYXVsdDogc2ltcGxlXSAtIHRoZSBhdXRoZW50aWNhdGlvbiB0eXBlPC9saT48L3VsPgorPHA+SWYgdGhlIGF1dGhlbnRpY2F0aW9uIHR5cGUgc3BlY2lmaWVkIGlzICdrZXJiZXJvcycsIHRoZW4gdGhlIGtlcmJlcm9zIHRpY2tldCBjYWNoZSB3aWxsIGJlIGFjY2Vzc2VkIGZvciBhdXRoZW50aWNhdGluZyB0byB0aGUgc2VydmVyIChUaGVyZWZvcmUgdGhlIGNsaWVudCBpcyByZXF1aXJlZCB0byBhdXRoZW50aWNhdGUgdG8gdGhlIEtEQyBwcmlvciB0byBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHNlcnZlciB1c2luZyAna2luaXQnIG9yIGEgc2ltaWxhciBtZWNoYW5pc20pLjwvcD48L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorCisgICAgPGhyLz4KKworICAgIDxmb290ZXI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgc3BhbjEyIj5Db3B5cmlnaHQgJmNvcHk7ICAgICAgICAgICAgICAgICAgICAyMDE1CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciPkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9hPi4KKyAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPHAgaWQ9InBvd2VyZWRCeSIgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy8iIHRpdGxlPSJCdWlsdCBieSBNYXZlbiIgY2xhc3M9InBvd2VyZWRCeSI+CisgICAgICAgIDxpbWcgY2xhc3M9ImJ1aWx0QnkiIGFsdD0iQnVpbHQgYnkgTWF2ZW4iIHNyYz0iLi9pbWFnZXMvbG9nb3MvbWF2ZW4tZmVhdGhlci5wbmciIC8+CisgICAgICA8L2E+CisgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgPC9mb290ZXI+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1R5cGVTeXN0ZW0uaHRtbCBiL1R5cGVTeXN0ZW0uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGQwZjJmCi0tLSAvZGV2L251bGwKKysrIGIvVHlwZVN5c3RlbS5odG1sCkBAIC0wLDAgKzEsMjgxIEBACis8IURPQ1RZUEUgaHRtbD4KKzwhLS0KKyB8IEdlbmVyYXRlZCBieSBBcGFjaGUgTWF2ZW4gRG94aWEgYXQgMjAxNS0wNy0wOQorIHwgUmVuZGVyZWQgdXNpbmcgQXBhY2hlIE1hdmVuIEZsdWlkbyBTa2luIDEuMy4wCistLT4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CisgICAgPG1ldGEgbmFtZT0iRGF0ZS1SZXZpc2lvbi15eXl5bW1kZCIgY29udGVudD0iMjAxNTA3MDkiIC8+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4iIC8+CisgICAgPHRpdGxlPk1ldGFkYXRhIGFuZCBHb3Zlcm5hbmNlIC0gVHlwZSBTeXN0ZW08L3RpdGxlPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3Mvc2l0ZS5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9wcmludC5jc3MiIG1lZGlhPSJwcmludCIgLz4KKworICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9qcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIAorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkgeyAkKCAnLmNhcm91c2VsJyApLmNhcm91c2VsKCB7IGludGVydmFsOiAzNTAwIH0gKSB9ICk7PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ0b3BCYXJFbmFibGVkIj4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKworICAgIDxkaXYgaWQ9InRvcGJhciIgY2xhc3M9Im5hdmJhciBuYXZiYXItZml4ZWQtdG9wICI+CisgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItaW5uZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciIgc3R5bGU9IndpZHRoOiA2OCU7Ij48ZGl2IGNsYXNzPSJuYXYtY29sbGFwc2UiPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QXRsYXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJBYm91dCI+QWJvdXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iV2lraSI+V2lraTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJOZXdzIj5OZXdzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2dpdC13aXAtdXMuYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yLWF0bGFzLmdpdCIgIHRpdGxlPSJHaXQiPkdpdDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yL2F0bGFzIiAgdGl0bGU9IlN2biI+U3ZuPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0FUTEFTIiAgdGl0bGU9IkppcmEiPkppcmE8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMvUG93ZXJlZEJ5IiAgdGl0bGU9IlBvd2VyZWQgYnkiPlBvd2VyZWQgYnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9ibG9ncy5hcGFjaGUub3JnL2F0bGFzLyIgIHRpdGxlPSJCbG9nIj5CbG9nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UHJvamVjdCBJbmZvcm1hdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJwcm9qZWN0LWluZm8uaHRtbCIgIHRpdGxlPSJTdW1tYXJ5Ij5TdW1tYXJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJtYWlsLWxpc3RzLmh0bWwiICB0aXRsZT0iTWFpbGluZyBMaXN0cyI+TWFpbGluZyBMaXN0czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3dlYmNoYXQuZnJlZW5vZGUubmV0P2NoYW5uZWxzPWFwYWNoZWF0bGFzJnVpbz1kNCIgIHRpdGxlPSJJUkMiPklSQzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0idGVhbS1saXN0Lmh0bWwiICB0aXRsZT0iVGVhbSI+VGVhbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaXNzdWUtdHJhY2tpbmcuaHRtbCIgIHRpdGxlPSJJc3N1ZSBUcmFja2luZyI+SXNzdWUgVHJhY2tpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InNvdXJjZS1yZXBvc2l0b3J5Lmh0bWwiICB0aXRsZT0iU291cmNlIFJlcG9zaXRvcnkiPlNvdXJjZSBSZXBvc2l0b3J5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJsaWNlbnNlLmh0bWwiICB0aXRsZT0iTGljZW5zZSI+TGljZW5zZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlbGVhc2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9keW4vY2xvc2VyLmNnaS9pbmN1YmF0b3IvYXRsYXMvMC41LjAtaW5jdWJhdGluZy8iICB0aXRsZT0iMC41LWluY3ViYXRpbmciPjAuNS1pbmN1YmF0aW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+RG9jdW1lbnRhdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSIwLjUuMC1pbmN1YmF0aW5nL2luZGV4Lmh0bWwiICB0aXRsZT0iY3VycmVudCI+Y3VycmVudDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iMC41LjAtaW5jdWJhdGluZy9pbmRleC5odG1sIiAgdGl0bGU9IjAuNS1pbmN1YmF0aW5nIj4wLjUtaW5jdWJhdGluZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlc291cmNlcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9Ik92ZXJ2aWV3Ij5PdmVydmlldzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iUXVpY2tTdGFydC5odG1sIiAgdGl0bGU9IkdldHRpbmcgU3RhcnRlZCI+R2V0dGluZyBTdGFydGVkPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJBcmNoaXRlY3R1cmUuaHRtbCIgIHRpdGxlPSJBcmNoaXRlY3R1cmUiPkFyY2hpdGVjdHVyZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iSW5zdGFsbGF0aW9uU3RlcHMuaHRtbCIgIHRpdGxlPSJJbnN0YWxsYXRpb24iPkluc3RhbGxhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iVHlwZVN5c3RlbS5odG1sIiAgdGl0bGU9IlR5cGUgU3lzdGVtIj5UeXBlIFN5c3RlbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQ29uZmlndXJhdGlvbi5odG1sIiAgdGl0bGU9IkNvbmZpZ3VyYXRpb24iPkNvbmZpZ3VyYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlNlY3VyaXR5Lmh0bWwiICB0aXRsZT0iU2VjdXJpdHkiPlNlY3VyaXR5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJhcGkvcmVzdC5odG1sIiAgdGl0bGU9IlJlc3QgQVBJIj5SZXN0IEFQSTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkFTRiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9ob3ctaXQtd29ya3MuaHRtbCIgIHRpdGxlPSJIb3cgQXBhY2hlIFdvcmtzIj5Ib3cgQXBhY2hlIFdvcmtzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi8iICB0aXRsZT0iRm91bmRhdGlvbiI+Rm91bmRhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vc3BvbnNvcnNoaXAuaHRtbCIgIHRpdGxlPSJTcG9uc29yaW5nIEFwYWNoZSI+U3BvbnNvcmluZyBBcGFjaGU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3RoYW5rcy5odG1sIiAgdGl0bGU9IlRoYW5rcyI+VGhhbmtzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJzZWFyY2gtZm9ybSIgYWN0aW9uPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoIiBtZXRob2Q9ImdldCIgIGNsYXNzPSJuYXZiYXItc2VhcmNoIHB1bGwtcmlnaHQiID4KKyAgICAKKyAgPGlucHV0IHZhbHVlPSJodHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmciIG5hbWU9InNpdGVzZWFyY2giIHR5cGU9ImhpZGRlbiIvPgorICA8aW5wdXQgY2xhc3M9InNlYXJjaC1xdWVyeSIgbmFtZT0icSIgaWQ9InF1ZXJ5IiB0eXBlPSJ0ZXh0IiAvPgorPC9mb3JtPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL3d3dy5nb29nbGUuY29tL2Nvb3AvY3NlL2JyYW5kP2Zvcm09c2VhcmNoLWZvcm0iPjwvc2NyaXB0PgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgIDxpZnJhbWUgc3JjPSJodHRwOi8vd3d3LmZhY2Vib29rLmNvbS9wbHVnaW5zL2xpa2UucGhwP2hyZWY9aHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3Mmc2VuZD1mYWxzZSZsYXlvdXQ9YnV0dG9uX2NvdW50JnNob3ctZmFjZXM9ZmFsc2UmYWN0aW9uPWxpa2UmY29sb3JzY2hlbWU9ZGFyayIKKyAgICAgICAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9IjAiCisgICAgICAgIHN0eWxlPSJib3JkZXI6bm9uZTsgd2lkdGg6ODBweDsgaGVpZ2h0OjIwcHg7IG1hcmdpbi10b3A6IDEwcHg7IiAgY2xhc3M9InB1bGwtcmlnaHQiID48L2lmcmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vYXBpcy5nb29nbGUuY29tL2pzL3BsdXNvbmUuanMiPjwvc2NyaXB0PgorCisgICAgICAgIDx1bCBjbGFzcz0ibmF2IHB1bGwtcmlnaHQiPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPgorICAgIAorICAgIDxkaXYgY2xhc3M9ImctcGx1c29uZSIgZGF0YS1ocmVmPSJodHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmcvYXRsYXMtZG9jcyIgZGF0YS1zaXplPSJtZWRpdW0iICB3aWR0aD0iNjBweCIgYWxpZ249InJpZ2h0IiA+PC9kaXY+CisKKyAgICAgICAgPC9saT48L3VsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgCisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgICAgCisgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgICAgICAgPGRpdiBpZD0iYmFubmVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1sZWZ0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4iIGlkPSJiYW5uZXJMZWZ0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvYXRsYXMtbG9nby5wbmciICBhbHQ9IkFwYWNoZSBBdGxhcyIgd2lkdGg9IjIwMHB4IiBoZWlnaHQ9IjQ1cHgiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9pbmN1YmF0b3IuYXBhY2hlLm9yZyIgaWQ9ImJhbm5lclJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvYXBhY2hlLWluY3ViYXRvci1sb2dvLnBuZyIgIGFsdD0iQXBhY2hlIEluY3ViYXRvciIvPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJjbGVhciI+PGhyLz48L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJicmVhZGNydW1icyI+CisgICAgICAgIDx1bCBjbGFzcz0iYnJlYWRjcnVtYiI+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciIGNsYXNzPSJleHRlcm5hbExpbmsiIHRpdGxlPSJBcGFjaGUiPgorICAgICAgICBBcGFjaGU8L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIgIj4vPC9saT4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkF0bGFzIj4KKyAgICAgICAgQXRsYXM8L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIgIj4vPC9saT4KKyAgICAgICAgPGxpIGNsYXNzPSIiPlR5cGUgU3lzdGVtPC9saT4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgPGxpIGlkPSJwdWJsaXNoRGF0ZSIgY2xhc3M9InB1bGwtcmlnaHQiPkxhc3QgUHVibGlzaGVkOiAyMDE1LTA3LTA5PC9saT4gPGxpIGNsYXNzPSJkaXZpZGVyIHB1bGwtcmlnaHQiPnw8L2xpPgorICAgICAgICAgICAgICA8bGkgaWQ9InByb2plY3RWZXJzaW9uIiBjbGFzcz0icHVsbC1yaWdodCI+VmVyc2lvbjogMC42LWluY3ViYXRpbmctU05BUFNIT1Q8L2xpPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvZGl2PgorCisgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICA8ZGl2IGlkPSJib2R5Q29sdW1uIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj5UeXBlIFN5c3RlbTxhIG5hbWU9IlR5cGVfU3lzdGVtIj48L2E+PC9oMj48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzPkludHJvZHVjdGlvbjxhIG5hbWU9IkludHJvZHVjdGlvbiI+PC9hPjwvaDM+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5PdmVydmlldzxhIG5hbWU9Ik92ZXJ2aWV3Ij48L2E+PC9oMz48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGg0PkRhdGEgVHlwZXMgT3ZlcnZpZXc8YSBuYW1lPSJEYXRhX1R5cGVzX092ZXJ2aWV3Ij48L2E+PC9oND4KKzxwPjxpbWcgc3JjPSJkYXRhLXR5cGVzLnBuZyIgYWx0PSIiIC8+PC9wPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDQ+VHlwZXMgSW5zdGFuY2VzIE92ZXJ2aWV3PGEgbmFtZT0iVHlwZXNfSW5zdGFuY2VzX092ZXJ2aWV3Ij48L2E+PC9oND4KKzxwPjxpbWcgc3JjPSJ0eXBlcy1pbnN0YW5jZXMucG5nIiBhbHQ9IiIgLz48L3A+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5EZXRhaWxzPGEgbmFtZT0iRGV0YWlscyI+PC9hPjwvaDM+Cis8cD4jIyMgU3RydWN0cyBhcmUgbGlrZSBDIHN0cnVjdHMgLSB0aGV5IGRvbid0IGhhdmUgYW4gaWRlbnRpdHkgLSBubyBpbmRlcGVuZGVudCBsaWZlY3ljbGUgLSBsaWtlIGEgYmFnIG9mIHByb3BlcnRpZXMgLSBsaWtlIGluIGhpdmUsIGFsc288L3A+Cis8cD4jIyMgQ2xhc3NlcyBhcmUgY2xhc3NlcyAtIGxpa2UgYW55IE9PIGNsYXNzIC0gaGF2ZSBpZGVudGl0eSAtIGNhbiBoYXZlIGluaGVyaXRlbmNlIC0gY2FuIGNvbnRhaW4gc3RydWN0cyAtIGRvbid0IG5lY2Vzc2FyaWx5IG5lZWQgdG8gdXNlIGEgc3RydWN0IGluc2lkZSB0aGUgY2xhc3MgdG8gZGVmaW5lIHByb3BzIC0gY2FuIGFsc28gZGVmaW5lIHByb3BzIHVzaW5nIDxhIGhyZWY9Ii4vQXR0cmlidXRlRGVmaW5pdGlvbi5odG1sIj5BdHRyaWJ1dGVEZWZpbml0aW9uPC9hPiB1c2luZyB0aGUgYmFzaWMgZGF0YSB0eXBlcyAtIGNsYXNzZXMgYXJlIGltbXV0YWJsZSBvbmNlIGNyZWF0ZWQ8L3A+Cis8cD4jIyMgT24gc2VhcmNoIGludGVyZmFjZTogLSBjYW4gc2VhcmNoIGZvciBhbGwgaW5zdGFuY2VzIG9mIGEgY2xhc3MgLSBjbGFzc2VzIGNvdWxkIGJlY29tZSB0YWJsZXMgaW4gYSByZWxhdGlvbmFsIHN5c3RlbSwgZm9yIGluc3RhbmNlIAktIGFsc28gZGF0YWJhc2VzLCBjb2x1bW5zLCBldGMuPC9wPgorPHA+IyMjIFRyYWl0cyBpcyBzaW1pbGFyIHRvIHNjYWxhIC0gdHJhaXRzIG1vcmUgbGlrZSBkZWNvcmF0b3JzICg/KSAtIHRyYWl0cyBnZXQgYXBwbGllZCB0byBpbnN0YW5jZXMgLSBub3QgY2xhc3NlcyAJLSB0aGlzIHNhdGlzZmllcyB0aGUgY2xhc3NpZmljYXRpb24gbWVjaGFuaXNtIChpc2gpIC0gY2FuIGhhdmUgYSBjbGFzcyBpbnN0YW5jZSBoYXZlIGFueSBudW1iZXIgb2YgdHJhaXRzIC0gZS5nLiBzZWN1cml0eSBjbGVhcmFuY2UgLSBhbnkgUGVyc29uIGNsYXNzIGNvdWxkIGhhdmUgaXQ7IHNvIHdlIGFkZCBpdCBhcyBhIG1peGluIHRvIHRoZSBQZXJzb24gY2xhc3MgCS0gc2VjdXJpdHkgY2xlYXJhbmNlIHRyYWl0IGhhcyBhIGxldmVsIGF0dHJpYnV0ZSAJLSB0cmFpdHMgYXJlIGxhYmVscyAJLSBlYWNoIGxhYmVsIGNhbiBoYXZlIGl0cyBvd24gYXR0cmlidXRlIC0gcmVhc29uIGZvciBkb2luZyB0aGlzIGlzOiAJLSBtb2RlbGVkIHNlY3VyaXR5IGNsZWFyYW5jZSB0cmFpdCAJLSB3YW50IHRvIHByZXNjcmliZSBpdCB0byBvdGhlciB0aGluZ3MsIHRvbyAJLSBjYW4gbm93IHNlYXJjaCBmb3IgYW55dGhpbmcgdGhhdCBoYXMgc2VjdXJpdHkgY2xlYXJhbmNlIGxldmVsID0gMSwgZm9yIGluc3RhbmNlPC9wPgorPHA+IyMjIE9uIEluc3RhbmNlczogLSBjbGFzcywgdHJhaXQsIHN0cnVjdCBhbGwgaGF2ZSBiYWdzIG9mIGF0dHJpYnV0ZXMgLSBjYW4gZ2V0IG5hbWUgb2YgdHlwZSBhc3NvY2lhdGVkIHdpdGggYXR0cmlidXRlIC0gY2FuIGdldCBvciBzZXQgdGhlIGF0dHJpYnV0ZSBpbiB0aGF0IGJhZyBmb3IgZWFjaCBpbnN0YW5jZTwvcD4KKzxwPiMjIyBPbiBDbGFzc2lmaWNhdGlvbjogLSBjcmVhdGUgY29sdW1uIGFzIGEgY2xhc3MgLSBjcmVhdGUgYSB0cmFpdCB0byBjbGFzc2lmeSBhcyAmcXVvdDtQSEkmcXVvdDsgLSB3b3VsZCBjcmVhdGUgdGhlIGluc3RhbmNlIG9mIHRoZSBjb2x1bW4gd2l0aCB0aGUgUEhJIHRyYWl0IC0gYXBwbHkgdHJhaXRzIHRvIGluc3RhbmNlcyAtIENBTidUIGFwcGx5IHRyYWl0cyB0byBjbGFzczwvcD4KKzxwPiMjIyBPdGhlciB1c2VmdWwgaW5mb3JtYXRpb248L3A+Cis8cD48YSBocmVmPSIuL0hpZXJhcmNoaWNhbENsYXNzVHlwZS5odG1sIj5IaWVyYXJjaGljYWxDbGFzc1R5cGU8L2E+IC0gYmFzZSB0eXBlIGZvciA8YSBocmVmPSIuL0NsYXNzVHlwZS5odG1sIj5DbGFzc1R5cGU8L2E+IGFuZCA8YSBocmVmPSIuL1RyYWl0VHlwZS5odG1sIj5UcmFpdFR5cGU8L2E+IEluc3RhbmNlcyBjcmVhdGVkIGZyb20gRGVmaW5pdGlvbnM8L3A+Cis8cD5FdmVyeSBpbnN0YW5jZSBpcyByZWZlcmVuY2VhYmxlIC0gaS5lLiBzb21ldGhpbmcgY2FuIHBvaW50IHRvIGl0IGluIHRoZSBncmFwaCBkYiA8YSBocmVmPSIuL01ldGFkYXRhU2VydmljZS5odG1sIj5NZXRhZGF0YVNlcnZpY2U8L2E+IG1heSBub3QgYmUgdXNlZCBsb25ndGVybSAtIGl0IGlzIGN1cnJlbnRseSB1c2VkIGZvciBib290c3RyYXBwaW5nIHRoZSByZXBvICZhbXA7IHR5cGUgc3lzdGVtPC9wPgorPHA+SWQgY2xhc3MgLSByZXByZXNlbnRzIHRoZSBJZCBvZiBhbiBpbnN0YW5jZTwvcD4KKzxwPldoZW4gdGhlIHdlYiBzZXJ2aWNlIHJlY2VpdmVzIGFuIG9iamVjdCBncmFwaCwgdGhlIDxhIGhyZWY9Ii4vT2JqZWN0R3JhcGhXYWxrZXIuaHRtbCI+T2JqZWN0R3JhcGhXYWxrZXI8L2E+IGlzIHVzZWQgdG8gdXBkYXRlIHRoaW5ncyAJLSA8YSBocmVmPSIuL0Rpc2NvdmVySW5zdGFuY2VzLmh0bWwiPkRpc2NvdmVySW5zdGFuY2VzPC9hPiBpcyB1c2VkIHRvIGRpc2NvdmVyIHRoZSBpbnN0YW5jZXMgaW4gdGhlIG9iamVjdCBncmFwaCByZWNlaXZlZCBieSB0aGUgd2ViIHNlcnZpY2U8L3A+Cis8cD48YSBocmVmPSIuL01hcElkcy5odG1sIj5NYXBJZHM8L2E+IGFzc2lnbnMgbmV3IGlkcyB0byB0aGUgZGlzY292ZXJlZCBpbnN0YW5jZXMgaW4gdGhlIG9iamVjdCBncmFwaDwvcD4KKzxwPkFueXRoaW5nIHVuZGVyIHRoZSBzdG9yYWdlIHBhY2thZ2UgaXMgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2U8L3A+PC9kaXY+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKworICAgIDxoci8+CisKKyAgICA8Zm9vdGVyPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IHNwYW4xMiI+Q29weXJpZ2h0ICZjb3B5OyAgICAgICAgICAgICAgICAgICAgMjAxNQorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIj5BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbjwvYT4uCisgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxwIGlkPSJwb3dlcmVkQnkiIGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvIiB0aXRsZT0iQnVpbHQgYnkgTWF2ZW4iIGNsYXNzPSJwb3dlcmVkQnkiPgorICAgICAgICA8aW1nIGNsYXNzPSJidWlsdEJ5IiBhbHQ9IkJ1aWx0IGJ5IE1hdmVuIiBzcmM9Ii4vaW1hZ2VzL2xvZ29zL21hdmVuLWZlYXRoZXIucG5nIiAvPgorICAgICAgPC9hPgorICAgICAgICAgICAgICA8L3A+CisgICAgICAgIAorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgIDwvZm9vdGVyPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9hcGkvYXBwbGUtdG91Y2gtaWNvbi5wbmcgYi9hcGkvYXBwbGUtdG91Y2gtaWNvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQyZmMzOQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS9hcHBsZS10b3VjaC1pY29uLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcGkvYXBwbGljYXRpb24ud2FkbCBiL2FwaS9hcHBsaWNhdGlvbi53YWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0Njg1Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcGkvYXBwbGljYXRpb24ud2FkbApAQCAtMCwwICsxLDQwMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzx3YWRsOmFwcGxpY2F0aW9uIHhtbG5zOndhZGw9Imh0dHA6Ly93YWRsLmRldi5qYXZhLm5ldC8yMDA5LzAyIiB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICA8d2FkbDpkb2MgeG1sbnM6ZW51bmNpYXRlPSJodHRwOi8vZW51bmNpYXRlLmNvZGVoYXVzLm9yZy8iIGVudW5jaWF0ZTpnZW5lcmF0ZWRCeT0iRW51bmNpYXRlLTEuMjkiLz4KKyAgPHdhZGw6Z3JhbW1hcnMvPgorICA8d2FkbDpyZXNvdXJjZXMgYmFzZT0iaHR0cDovL2xvY2FsaG9zdDo4MDgwL2F0bGFzLXdlYmFwcCI+CisgICAgPHdhZGw6cmVzb3VyY2UgcGF0aD0iL2FwaS9hdGxhcy9lbnRpdGllcyI+CisgICAgICA8d2FkbDptZXRob2QgbmFtZT0iUE9TVCI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtTdWJtaXRzIGFuIGVudGl0eSBkZWZpbml0aW9uIChpbnN0YW5jZSkgY29ycmVzcG9uZGluZyB0byBhIGdpdmVuIHR5cGUuXV0+CisgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgIDx3YWRsOnJlc3BvbnNlPgorICAgICAgICAgIDx3YWRsOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPgorICAgICAgICA8L3dhZGw6cmVzcG9uc2U+CisgICAgICA8L3dhZGw6bWV0aG9kPgorICAgICAgPHdhZGw6bWV0aG9kIG5hbWU9IkdFVCI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtHZXRzIHRoZSBsaXN0IG9mIGVudGl0aWVzIGZvciBhIGdpdmVuIGVudGl0eSB0eXBlLl1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXF1ZXN0PgorICAgICAgICAgIDx3YWRsOnBhcmFtIG5hbWU9InR5cGUiIHN0eWxlPSJxdWVyeSI+CisgICAgICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgICAgIDwhW0NEQVRBW25hbWUgb2YgYSB0eXBlIHdoaWNoIGlzIHVuaXF1ZV1dPgorICAgICAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgICA8L3dhZGw6cGFyYW0+CisgICAgICAgIDwvd2FkbDpyZXF1ZXN0PgorICAgICAgICA8d2FkbDpyZXNwb25zZT4KKyAgICAgICAgICA8d2FkbDpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz4KKyAgICAgICAgPC93YWRsOnJlc3BvbnNlPgorICAgICAgPC93YWRsOm1ldGhvZD4KKyAgICA8L3dhZGw6cmVzb3VyY2U+CisgICAgPHdhZGw6cmVzb3VyY2UgcGF0aD0iL2FwaS9hdGxhcy90eXBlcyI+CisgICAgICA8d2FkbDptZXRob2QgbmFtZT0iUE9TVCI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtTdWJtaXRzIGEgdHlwZSBkZWZpbml0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiB0eXBlIHJlcHJlc2VudGluZyBhIG1ldGEgbW9kZWwgb2YgYQorZG9tYWluLiBDb3VsZCByZXByZXNlbnQgdGhpbmdzIGxpa2UgSGl2ZSBEYXRhYmFzZSwgSGl2ZSBUYWJsZSwgZXRjLl1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXNwb25zZT4KKyAgICAgICAgICA8d2FkbDpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz4KKyAgICAgICAgPC93YWRsOnJlc3BvbnNlPgorICAgICAgPC93YWRsOm1ldGhvZD4KKyAgICAgIDx3YWRsOm1ldGhvZCBuYW1lPSJHRVQiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbR2V0cyB0aGUgbGlzdCBvZiB0cmFpdCB0eXBlIG5hbWVzIHJlZ2lzdGVyZWQgaW4gdGhlIHR5cGUgc3lzdGVtLl1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXF1ZXN0PgorICAgICAgICAgIDx3YWRsOnBhcmFtIG5hbWU9InR5cGUiIHN0eWxlPSJxdWVyeSI+CisgICAgICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgICAgIDwhW0NEQVRBW3R5cGUgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIGVudW0KK29yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS50eXBlcy5EYXRhVHlwZXMuVHlwZUNhdGVnb3J5CitUeXBpY2FsbHksIHdvdWxkIGJlIG9uZSBvZiBhbGwsIFRSQUlULCBDTEFTUywgRU5VTSwgU1RSVUNUXV0+CisgICAgICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICAgIDwvd2FkbDpwYXJhbT4KKyAgICAgICAgPC93YWRsOnJlcXVlc3Q+CisgICAgICAgIDx3YWRsOnJlc3BvbnNlPgorICAgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICAgIDwhW0NEQVRBW2VudGl0eSBuYW1lcyByZXNwb25zZSBwYXlsb2FkIGFzIGpzb25dXT4KKyAgICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICAgIDx3YWRsOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPgorICAgICAgICA8L3dhZGw6cmVzcG9uc2U+CisgICAgICA8L3dhZGw6bWV0aG9kPgorICAgIDwvd2FkbDpyZXNvdXJjZT4KKyAgICA8d2FkbDpyZXNvdXJjZSBwYXRoPSIvYXBpL2F0bGFzL2FkbWluL3N0YWNrIj4KKyAgICAgIDx3YWRsOm1ldGhvZCBuYW1lPSJHRVQiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbRmV0Y2hlcyB0aGUgdGhyZWFkIHN0YWNrIGR1bXAgZm9yIHRoaXMgYXBwbGljYXRpb24uXV0+CisgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgIDx3YWRsOnJlc3BvbnNlPgorICAgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICAgIDwhW0NEQVRBW2pzb24gcmVwcmVzZW50aW5nIHRoZSB0aHJlYWQgc3RhY2sgZHVtcC5dXT4KKyAgICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICAgIDx3YWRsOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0idGV4dC9wbGFpbiIvPgorICAgICAgICA8L3dhZGw6cmVzcG9uc2U+CisgICAgICA8L3dhZGw6bWV0aG9kPgorICAgIDwvd2FkbDpyZXNvdXJjZT4KKyAgICA8d2FkbDpyZXNvdXJjZSBwYXRoPSIvYXBpL2F0bGFzL2FkbWluL3ZlcnNpb24iPgorICAgICAgPHdhZGw6bWV0aG9kIG5hbWU9IkdFVCI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtGZXRjaGVzIHRoZSB2ZXJzaW9uIGZvciB0aGlzIGFwcGxpY2F0aW9uLl1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXNwb25zZT4KKyAgICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgICA8IVtDREFUQVtqc29uIHJlcHJlc2VudGluZyB0aGUgdmVyc2lvbi5dXT4KKyAgICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICAgIDx3YWRsOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPgorICAgICAgICA8L3dhZGw6cmVzcG9uc2U+CisgICAgICA8L3dhZGw6bWV0aG9kPgorICAgIDwvd2FkbDpyZXNvdXJjZT4KKyAgICA8d2FkbDpyZXNvdXJjZSBwYXRoPSIvYXBpL2F0bGFzL2Rpc2NvdmVyeS9zZWFyY2giPgorICAgICAgPHdhZGw6bWV0aG9kIG5hbWU9IkdFVCI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtTZWFyY2ggdXNpbmcgYSBnaXZlbiBxdWVyeS5dXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgPHdhZGw6cmVxdWVzdD4KKyAgICAgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJxdWVyeSIgc3R5bGU9InF1ZXJ5Ij4KKyAgICAgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICAgICAgPCFbQ0RBVEFbc2VhcmNoIHF1ZXJ5IGluIHJhdyBncmVtbGluIG9yIERTTCBmb3JtYXQgZmFsbGluZyBiYWNrIHRvIGZ1bGwgdGV4dC5dXT4KKyAgICAgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgICAgPC93YWRsOnBhcmFtPgorICAgICAgICA8L3dhZGw6cmVxdWVzdD4KKyAgICAgICAgPHdhZGw6cmVzcG9uc2U+CisgICAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgICAgPCFbQ0RBVEFbSlNPTiByZXByZXNlbnRpbmcgdGhlIHR5cGUgYW5kIHJlc3VsdHMuXV0+CisgICAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgICA8d2FkbDpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz4KKyAgICAgICAgPC93YWRsOnJlc3BvbnNlPgorICAgICAgPC93YWRsOm1ldGhvZD4KKyAgICA8L3dhZGw6cmVzb3VyY2U+CisgICAgPHdhZGw6cmVzb3VyY2UgcGF0aD0iL2FwaS9hdGxhcy9lbnRpdGllcy97Z3VpZH0iPgorICAgICAgPHdhZGw6cGFyYW0gbmFtZT0iZ3VpZCIgc3R5bGU9InRlbXBsYXRlIj4KKyAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgIDwhW0NEQVRBW0dVSUQgZm9yIHRoZSBlbnRpdHldXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgIDwvd2FkbDpwYXJhbT4KKyAgICAgIDx3YWRsOm1ldGhvZCBuYW1lPSJHRVQiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbRmV0Y2ggdGhlIGNvbXBsZXRlIGRlZmluaXRpb24gb2YgYW4gZW50aXR5IGdpdmVuIGl0cyBHVUlELl1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXF1ZXN0Lz4KKyAgICAgICAgPHdhZGw6cmVzcG9uc2U+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgICA8d2FkbDptZXRob2QgbmFtZT0iUFVUIj4KKyAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgIDwhW0NEQVRBW0FkZHMgcHJvcGVydHkgdG8gdGhlIGdpdmVuIGVudGl0eSBpZF1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXF1ZXN0PgorICAgICAgICAgIDx3YWRsOnBhcmFtIG5hbWU9InByb3BlcnR5IiBzdHlsZT0icXVlcnkiPgorICAgICAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgICAgICA8IVtDREFUQVtwcm9wZXJ0eSB0byBhZGRdXT4KKyAgICAgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgICAgPC93YWRsOnBhcmFtPgorICAgICAgICAgIDx3YWRsOnBhcmFtIG5hbWU9InZhbHVlIiBzdHlsZT0icXVlcnkiPgorICAgICAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgICAgICA8IVtDREFUQVtwcm9wZXJ0eSdzIHZhbHVlXV0+CisgICAgICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICAgIDwvd2FkbDpwYXJhbT4KKyAgICAgICAgPC93YWRsOnJlcXVlc3Q+CisgICAgICAgIDx3YWRsOnJlc3BvbnNlPgorICAgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICAgIDwhW0NEQVRBW3Jlc3BvbnNlIHBheWxvYWQgYXMganNvbl1dPgorICAgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgPC93YWRsOnJlc291cmNlPgorICAgIDx3YWRsOnJlc291cmNlIHBhdGg9Ii9hcGkvYXRsYXMvZ3JhcGgvdmVydGljZXMiPgorICAgICAgPHdhZGw6bWV0aG9kIG5hbWU9IkdFVCI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtHZXQgYSBsaXN0IG9mIHZlcnRpY2VzIG1hdGNoaW5nIGEgcHJvcGVydHkga2V5IGFuZCBhIHZhbHVlLgorPHAvPgorR0VUIGh0dHA6Ly9ob3N0L21ldGFkYXRhL2xpbmVhZ2UvdmVydGljZXM/a2V5PTxrZXk+JnZhbHVlPTx2YWx1ZT4KK2dyYXBoLmdldFZlcnRpY2VzKGtleSwgdmFsdWUpO11dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXF1ZXN0PgorICAgICAgICAgIDx3YWRsOnBhcmFtIG5hbWU9ImtleSIgc3R5bGU9InF1ZXJ5Ii8+CisgICAgICAgICAgPHdhZGw6cGFyYW0gbmFtZT0idmFsdWUiIHN0eWxlPSJxdWVyeSIvPgorICAgICAgICA8L3dhZGw6cmVxdWVzdD4KKyAgICAgICAgPHdhZGw6cmVzcG9uc2U+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgPC93YWRsOnJlc291cmNlPgorICAgIDx3YWRsOnJlc291cmNlIHBhdGg9Ii9hcGkvYXRsYXMvdHlwZXMve3R5cGVOYW1lfSI+CisgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJ0eXBlTmFtZSIgc3R5bGU9InRlbXBsYXRlIj4KKyAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgIDwhW0NEQVRBW25hbWUgb2YgYSB0eXBlIHdoaWNoIGlzIHVuaXF1ZS5dXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgIDwvd2FkbDpwYXJhbT4KKyAgICAgIDx3YWRsOm1ldGhvZCBuYW1lPSJHRVQiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbRmV0Y2ggdGhlIGNvbXBsZXRlIGRlZmluaXRpb24gb2YgYSBnaXZlbiB0eXBlIG5hbWUgd2hpY2ggaXMgdW5pcXVlLl1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXF1ZXN0Lz4KKyAgICAgICAgPHdhZGw6cmVzcG9uc2U+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgPC93YWRsOnJlc291cmNlPgorICAgIDx3YWRsOnJlc291cmNlIHBhdGg9Ii9hcGkvYXRsYXMvZGlzY292ZXJ5L3NlYXJjaC9kc2wiPgorICAgICAgPHdhZGw6bWV0aG9kIG5hbWU9IkdFVCI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtTZWFyY2ggdXNpbmcgcXVlcnkgRFNMIGZvcm1hdC5dXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgPHdhZGw6cmVxdWVzdD4KKyAgICAgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJxdWVyeSIgc3R5bGU9InF1ZXJ5Ij4KKyAgICAgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICAgICAgPCFbQ0RBVEFbc2VhcmNoIHF1ZXJ5IGluIERTTCBmb3JtYXQuXV0+CisgICAgICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICAgIDwvd2FkbDpwYXJhbT4KKyAgICAgICAgPC93YWRsOnJlcXVlc3Q+CisgICAgICAgIDx3YWRsOnJlc3BvbnNlPgorICAgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICAgIDwhW0NEQVRBW0pTT04gcmVwcmVzZW50aW5nIHRoZSB0eXBlIGFuZCByZXN1bHRzLl1dPgorICAgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgPC93YWRsOnJlc291cmNlPgorICAgIDx3YWRsOnJlc291cmNlIHBhdGg9Ii9hcGkvYXRsYXMvZGlzY292ZXJ5L3NlYXJjaC9mdWxsdGV4dCI+CisgICAgICA8d2FkbDptZXRob2QgbmFtZT0iR0VUIj4KKyAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgIDwhW0NEQVRBW1NlYXJjaCB1c2luZyBmdWxsIHRleHQgc2VhcmNoLl1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXF1ZXN0PgorICAgICAgICAgIDx3YWRsOnBhcmFtIG5hbWU9InF1ZXJ5IiBzdHlsZT0icXVlcnkiPgorICAgICAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgICAgICA8IVtDREFUQVtzZWFyY2ggcXVlcnkuXV0+CisgICAgICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICAgIDwvd2FkbDpwYXJhbT4KKyAgICAgICAgPC93YWRsOnJlcXVlc3Q+CisgICAgICAgIDx3YWRsOnJlc3BvbnNlPgorICAgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICAgIDwhW0NEQVRBW0pTT04gcmVwcmVzZW50aW5nIHRoZSB0eXBlIGFuZCByZXN1bHRzLl1dPgorICAgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgPC93YWRsOnJlc291cmNlPgorICAgIDx3YWRsOnJlc291cmNlIHBhdGg9Ii9hcGkvYXRsYXMvZGlzY292ZXJ5L3NlYXJjaC9ncmVtbGluIj4KKyAgICAgIDx3YWRsOm1ldGhvZCBuYW1lPSJHRVQiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbU2VhcmNoIHVzaW5nIHJhdyBncmVtbGluIHF1ZXJ5IGZvcm1hdC5dXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgPHdhZGw6cmVxdWVzdD4KKyAgICAgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJxdWVyeSIgc3R5bGU9InF1ZXJ5Ij4KKyAgICAgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICAgICAgPCFbQ0RBVEFbc2VhcmNoIHF1ZXJ5IGluIHJhdyBncmVtbGluIGZvcm1hdC5dXT4KKyAgICAgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgICAgPC93YWRsOnBhcmFtPgorICAgICAgICA8L3dhZGw6cmVxdWVzdD4KKyAgICAgICAgPHdhZGw6cmVzcG9uc2U+CisgICAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgICAgPCFbQ0RBVEFbSlNPTiByZXByZXNlbnRpbmcgdGhlIHR5cGUgYW5kIHJlc3VsdHMuXV0+CisgICAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgICA8d2FkbDpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz4KKyAgICAgICAgPC93YWRsOnJlc3BvbnNlPgorICAgICAgPC93YWRsOm1ldGhvZD4KKyAgICA8L3dhZGw6cmVzb3VyY2U+CisgICAgPHdhZGw6cmVzb3VyY2UgcGF0aD0iL2FwaS9hdGxhcy9lbnRpdGllcy97Z3VpZH0vdHJhaXRzIj4KKyAgICAgIDx3YWRsOnBhcmFtIG5hbWU9Imd1aWQiIHN0eWxlPSJ0ZW1wbGF0ZSI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtnbG9iYWxseSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGVudGl0eV1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgPC93YWRsOnBhcmFtPgorICAgICAgPHdhZGw6bWV0aG9kIG5hbWU9IkdFVCI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtHZXRzIHRoZSBsaXN0IG9mIHRyYWl0IG5hbWVzIGZvciBhIGdpdmVuIGVudGl0eSByZXByZXNlbnRlZCBieSBhIGd1aWQuXV0+CisgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgIDx3YWRsOnJlcXVlc3QvPgorICAgICAgICA8d2FkbDpyZXNwb25zZT4KKyAgICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgICA8IVtDREFUQVthIGxpc3Qgb2YgdHJhaXQgbmFtZXMgZm9yIHRoZSBnaXZlbiBlbnRpdHkgZ3VpZF1dPgorICAgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgICA8d2FkbDptZXRob2QgbmFtZT0iUE9TVCI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtBZGRzIGEgbmV3IHRyYWl0IHRvIGFuIGV4aXN0aW5nIGVudGl0eSByZXByZXNlbnRlZCBieSBhIGd1aWQuXV0+CisgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgIDx3YWRsOnJlcXVlc3QvPgorICAgICAgICA8d2FkbDpyZXNwb25zZT4KKyAgICAgICAgICA8d2FkbDpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz4KKyAgICAgICAgPC93YWRsOnJlc3BvbnNlPgorICAgICAgPC93YWRsOm1ldGhvZD4KKyAgICA8L3dhZGw6cmVzb3VyY2U+CisgICAgPHdhZGw6cmVzb3VyY2UgcGF0aD0iL2FwaS9hdGxhcy9ncmFwaC9lZGdlcy97aWR9Ij4KKyAgICAgIDx3YWRsOnBhcmFtIG5hbWU9ImlkIiBzdHlsZT0idGVtcGxhdGUiLz4KKyAgICAgIDx3YWRsOm1ldGhvZCBuYW1lPSJHRVQiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbR2V0IGEgc2luZ2xlIGVkZ2Ugd2l0aCBhIHVuaXF1ZSBpZC4KKworR0VUIGh0dHA6Ly9ob3N0L21ldGFkYXRhL2xpbmVhZ2UvZWRnZXMvaWQKK2dyYXBoLmdldEVkZ2UoaWQpO11dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXF1ZXN0Lz4KKyAgICAgICAgPHdhZGw6cmVzcG9uc2U+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgPC93YWRsOnJlc291cmNlPgorICAgIDx3YWRsOnJlc291cmNlIHBhdGg9Ii9hcGkvYXRsYXMvZ3JhcGgvdmVydGljZXMve2lkfSI+CisgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJpZCIgc3R5bGU9InRlbXBsYXRlIi8+CisgICAgICA8d2FkbDptZXRob2QgbmFtZT0iR0VUIj4KKyAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgIDwhW0NEQVRBW0dldCBhIHNpbmdsZSB2ZXJ0ZXggd2l0aCBhIHVuaXF1ZSBpZC4KKworR0VUIGh0dHA6Ly9ob3N0L21ldGFkYXRhL2xpbmVhZ2UvdmVydGljZXMvaWQKK2dyYXBoLmdldFZlcnRleChpZCk7XV0+CisgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgIDx3YWRsOnJlcXVlc3QvPgorICAgICAgICA8d2FkbDpyZXNwb25zZT4KKyAgICAgICAgICA8d2FkbDpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz4KKyAgICAgICAgPC93YWRsOnJlc3BvbnNlPgorICAgICAgPC93YWRsOm1ldGhvZD4KKyAgICA8L3dhZGw6cmVzb3VyY2U+CisgICAgPHdhZGw6cmVzb3VyY2UgcGF0aD0iL2FwaS9hdGxhcy9lbnRpdGllcy97Z3VpZH0vdHJhaXRzL3t0cmFpdE5hbWV9Ij4KKyAgICAgIDx3YWRsOnBhcmFtIG5hbWU9Imd1aWQiIHN0eWxlPSJ0ZW1wbGF0ZSI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVtnbG9iYWxseSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGVudGl0eV1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgPC93YWRsOnBhcmFtPgorICAgICAgPHdhZGw6cGFyYW0gbmFtZT0idHJhaXROYW1lIiBzdHlsZT0idGVtcGxhdGUiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbbmFtZSBvZiB0aGUgdHJhaXRdXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgIDwvd2FkbDpwYXJhbT4KKyAgICAgIDx3YWRsOm1ldGhvZCBuYW1lPSJERUxFVEUiPgorICAgICAgICA8d2FkbDpkb2M+CisgICAgICAgICAgPCFbQ0RBVEFbRGVsZXRlcyBhIGdpdmVuIHRyYWl0IGZyb20gYW4gZXhpc3RpbmcgZW50aXR5IHJlcHJlc2VudGVkIGJ5IGEgZ3VpZC5dXT4KKyAgICAgICAgPC93YWRsOmRvYz4KKyAgICAgICAgPHdhZGw6cmVxdWVzdC8+CisgICAgICAgIDx3YWRsOnJlc3BvbnNlPgorICAgICAgICAgIDx3YWRsOnJlcHJlc2VudGF0aW9uIG1lZGlhVHlwZT0iYXBwbGljYXRpb24vanNvbiIvPgorICAgICAgICA8L3dhZGw6cmVzcG9uc2U+CisgICAgICA8L3dhZGw6bWV0aG9kPgorICAgIDwvd2FkbDpyZXNvdXJjZT4KKyAgICA8d2FkbDpyZXNvdXJjZSBwYXRoPSIvYXBpL2F0bGFzL2dyYXBoL3ZlcnRpY2VzL3Byb3BlcnRpZXMve2lkfSI+CisgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJpZCIgc3R5bGU9InRlbXBsYXRlIi8+CisgICAgICA8d2FkbDptZXRob2QgbmFtZT0iR0VUIj4KKyAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgIDwhW0NEQVRBW0dldCBwcm9wZXJ0aWVzIGZvciBhIHNpbmdsZSB2ZXJ0ZXggd2l0aCBhIHVuaXF1ZSBpZC4KK1RoaXMgaXMgTk9UIGEgcmV4c3RlciBBUEkuCis8cC8+CitHRVQgaHR0cDovL2hvc3QvbWV0YWRhdGEvbGluZWFnZS92ZXJ0aWNlcy9wcm9wZXJ0aWVzL2lkXV0+CisgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgIDx3YWRsOnJlcXVlc3Q+CisgICAgICAgICAgPHdhZGw6cGFyYW0gbmFtZT0icmVsYXRpb25zaGlwcyIgc3R5bGU9InF1ZXJ5Ii8+CisgICAgICAgIDwvd2FkbDpyZXF1ZXN0PgorICAgICAgICA8d2FkbDpyZXNwb25zZT4KKyAgICAgICAgICA8d2FkbDpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz4KKyAgICAgICAgPC93YWRsOnJlc3BvbnNlPgorICAgICAgPC93YWRsOm1ldGhvZD4KKyAgICA8L3dhZGw6cmVzb3VyY2U+CisgICAgPHdhZGw6cmVzb3VyY2UgcGF0aD0iL2FwaS9hdGxhcy9ncmFwaC92ZXJ0aWNlcy97aWR9L3tkaXJlY3Rpb259Ij4KKyAgICAgIDx3YWRsOnBhcmFtIG5hbWU9ImlkIiBzdHlsZT0idGVtcGxhdGUiLz4KKyAgICAgIDx3YWRsOnBhcmFtIG5hbWU9ImRpcmVjdGlvbiIgc3R5bGU9InRlbXBsYXRlIi8+CisgICAgICA8d2FkbDptZXRob2QgbmFtZT0iR0VUIj4KKyAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgIDwhW0NEQVRBW0dldCBhIGxpc3Qgb2YgYWRqYWNlbnQgZWRnZXMgd2l0aCBhIGRpcmVjdGlvbi4KKworR0VUIGh0dHA6Ly9ob3N0L21ldGFkYXRhL2xpbmVhZ2UvdmVydGljZXMvaWQvZGlyZWN0aW9uCitncmFwaC5nZXRWZXJ0ZXgoaWQpLmdldHtEaXJlY3Rpb259RWRnZXMoKTsKK2RpcmVjdGlvbjogeyg/IW91dEUpKD8hYm90aEUpKD8haW5FKSg/IW91dCkoPyFib3RoKSg/IWluKSg/IXF1ZXJ5KS4rfV1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXF1ZXN0Lz4KKyAgICAgICAgPHdhZGw6cmVzcG9uc2U+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgPC93YWRsOnJlc291cmNlPgorICAgIDx3YWRsOnJlc291cmNlIHBhdGg9Ii9hcGkvYXRsYXMvbGluZWFnZS9oaXZlL3RhYmxlL3t0YWJsZU5hbWV9L3NjaGVtYSI+CisgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJ0YWJsZU5hbWUiIHN0eWxlPSJ0ZW1wbGF0ZSI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVt0YWJsZSBuYW1lXV0+CisgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICA8L3dhZGw6cGFyYW0+CisgICAgICA8d2FkbDptZXRob2QgbmFtZT0iR0VUIj4KKyAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgIDwhW0NEQVRBW1JldHVybiB0aGUgc2NoZW1hIGZvciB0aGUgZ2l2ZW4gdGFibGVOYW1lLl1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXF1ZXN0Lz4KKyAgICAgICAgPHdhZGw6cmVzcG9uc2U+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgPC93YWRsOnJlc291cmNlPgorICAgIDx3YWRsOnJlc291cmNlIHBhdGg9Ii9hcGkvYXRsYXMvbGluZWFnZS9oaXZlL3RhYmxlL3t0YWJsZU5hbWV9L2lucHV0cy9ncmFwaCI+CisgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJ0YWJsZU5hbWUiIHN0eWxlPSJ0ZW1wbGF0ZSI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVt0YWJsZSBuYW1lXV0+CisgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICA8L3dhZGw6cGFyYW0+CisgICAgICA8d2FkbDptZXRob2QgbmFtZT0iR0VUIj4KKyAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgIDwhW0NEQVRBW1JldHVybnMgdGhlIGlucHV0cyBncmFwaCBmb3IgYSBnaXZlbiBlbnRpdHkuXV0+CisgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICAgIDx3YWRsOnJlcXVlc3QvPgorICAgICAgICA8d2FkbDpyZXNwb25zZT4KKyAgICAgICAgICA8d2FkbDpyZXByZXNlbnRhdGlvbiBtZWRpYVR5cGU9ImFwcGxpY2F0aW9uL2pzb24iLz4KKyAgICAgICAgPC93YWRsOnJlc3BvbnNlPgorICAgICAgPC93YWRsOm1ldGhvZD4KKyAgICA8L3dhZGw6cmVzb3VyY2U+CisgICAgPHdhZGw6cmVzb3VyY2UgcGF0aD0iL2FwaS9hdGxhcy9saW5lYWdlL2hpdmUvdGFibGUve3RhYmxlTmFtZX0vb3V0cHV0cy9ncmFwaCI+CisgICAgICA8d2FkbDpwYXJhbSBuYW1lPSJ0YWJsZU5hbWUiIHN0eWxlPSJ0ZW1wbGF0ZSI+CisgICAgICAgIDx3YWRsOmRvYz4KKyAgICAgICAgICA8IVtDREFUQVt0YWJsZSBuYW1lXV0+CisgICAgICAgIDwvd2FkbDpkb2M+CisgICAgICA8L3dhZGw6cGFyYW0+CisgICAgICA8d2FkbDptZXRob2QgbmFtZT0iR0VUIj4KKyAgICAgICAgPHdhZGw6ZG9jPgorICAgICAgICAgIDwhW0NEQVRBW1JldHVybnMgdGhlIG91dHB1dHMgZ3JhcGggZm9yIGEgZ2l2ZW4gZW50aXR5Ll1dPgorICAgICAgICA8L3dhZGw6ZG9jPgorICAgICAgICA8d2FkbDpyZXF1ZXN0Lz4KKyAgICAgICAgPHdhZGw6cmVzcG9uc2U+CisgICAgICAgICAgPHdhZGw6cmVwcmVzZW50YXRpb24gbWVkaWFUeXBlPSJhcHBsaWNhdGlvbi9qc29uIi8+CisgICAgICAgIDwvd2FkbDpyZXNwb25zZT4KKyAgICAgIDwvd2FkbDptZXRob2Q+CisgICAgPC93YWRsOnJlc291cmNlPgorICA8L3dhZGw6cmVzb3VyY2VzPgorPC93YWRsOmFwcGxpY2F0aW9uPgpkaWZmIC0tZ2l0IGEvYXBpL2Nyb3NzZG9tYWluLnhtbCBiL2FwaS9jcm9zc2RvbWFpbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0MjkyOQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS9jcm9zc2RvbWFpbi54bWwKQEAgLTAsMCArMSwyNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgY3Jvc3MtZG9tYWluLXBvbGljeSBTWVNURU0gImh0dHA6Ly93d3cuYWRvYmUuY29tL3htbC9kdGRzL2Nyb3NzLWRvbWFpbi1wb2xpY3kuZHRkIj4KKzxjcm9zcy1kb21haW4tcG9saWN5PgorICAKKyAgCis8IS0tIFJlYWQgdGhpczogd3d3LmFkb2JlLmNvbS9kZXZuZXQvYXJ0aWNsZXMvY3Jvc3Nkb21haW5fcG9saWN5X2ZpbGVfc3BlYy5odG1sIC0tPgorCis8IS0tIE1vc3QgcmVzdHJpY3RpdmUgcG9saWN5OiAtLT4KKwk8c2l0ZS1jb250cm9sIHBlcm1pdHRlZC1jcm9zcy1kb21haW4tcG9saWNpZXM9Im5vbmUiLz4KKwkKKwkKKwkKKzwhLS0gTGVhc3QgcmVzdHJpY3RpdmUgcG9saWN5OiAtLT4KKzwhLS0KKwk8c2l0ZS1jb250cm9sIHBlcm1pdHRlZC1jcm9zcy1kb21haW4tcG9saWNpZXM9ImFsbCIvPgorCTxhbGxvdy1hY2Nlc3MtZnJvbSBkb21haW49IioiIHRvLXBvcnRzPSIqIiBzZWN1cmU9ImZhbHNlIi8+CisJPGFsbG93LWh0dHAtcmVxdWVzdC1oZWFkZXJzLWZyb20gZG9tYWluPSIqIiBoZWFkZXJzPSIqIiBzZWN1cmU9ImZhbHNlIi8+CistLT4KKzwhLS0KKyAgSWYgeW91IGhvc3QgYSBjcm9zc2RvbWFpbi54bWwgZmlsZSB3aXRoIGFsbG93LWFjY2Vzcy1mcm9tIGRvbWFpbj3igJwq4oCdIAkgCQorICBhbmQgZG9u4oCZdCB1bmRlcnN0YW5kIGFsbCBvZiB0aGUgcG9pbnRzIGRlc2NyaWJlZCBoZXJlLCB5b3UgcHJvYmFibHkgCSAJCisgIGhhdmUgYSBuYXN0eSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5LiB+IHNpbW9uIHdpbGxpc29uCistLT4KKworPC9jcm9zcy1kb21haW4tcG9saWN5PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwaS9jc3MvaG9tZS5naWYgYi9hcGkvY3NzL2hvbWUuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YWEzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGkvY3NzL2hvbWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwaS9jc3MvcHJldHRpZnkuY3NzIGIvYXBpL2Nzcy9wcmV0dGlmeS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ0YjNhMgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS9jc3MvcHJldHRpZnkuY3NzCkBAIC0wLDAgKzEgQEAKKy5wbG57Y29sb3I6IzAwMH1AbWVkaWEgc2NyZWVuey5zdHJ7Y29sb3I6IzA4MH0ua3dke2NvbG9yOiMwMDh9LmNvbXtjb2xvcjojODAwfS50eXB7Y29sb3I6IzYwNn0ubGl0e2NvbG9yOiMwNjZ9LnB1biwub3BuLC5jbG97Y29sb3I6IzY2MH0udGFne2NvbG9yOiMwMDh9LmF0bntjb2xvcjojNjA2fS5hdHZ7Y29sb3I6IzA4MH0uZGVjLC52YXJ7Y29sb3I6IzYwNn0uZnVue2NvbG9yOnJlZH19QG1lZGlhIHByaW50LHByb2plY3Rpb257LnN0cntjb2xvcjojMDYwfS5rd2R7Y29sb3I6IzAwNjtmb250LXdlaWdodDpib2xkfS5jb217Y29sb3I6IzYwMDtmb250LXN0eWxlOml0YWxpY30udHlwe2NvbG9yOiM0MDQ7Zm9udC13ZWlnaHQ6Ym9sZH0ubGl0e2NvbG9yOiMwNDR9LnB1biwub3BuLC5jbG97Y29sb3I6IzQ0MH0udGFne2NvbG9yOiMwMDY7Zm9udC13ZWlnaHQ6Ym9sZH0uYXRue2NvbG9yOiM0MDR9LmF0dntjb2xvcjojMDYwfX1wcmUucHJldHR5cHJpbnR7cGFkZGluZzoycHg7Ym9yZGVyOjFweCBzb2xpZCAjODg4fW9sLmxpbmVudW1ze21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjB9bGkuTDAsbGkuTDEsbGkuTDIsbGkuTDMsbGkuTDUsbGkuTDYsbGkuTDcsbGkuTDh7bGlzdC1zdHlsZS10eXBlOm5vbmV9bGkuTDEsbGkuTDMsbGkuTDUsbGkuTDcsbGkuTDl7YmFja2dyb3VuZDojZWVlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwaS9jc3Mvc3R5bGUuY3NzIGIvYXBpL2Nzcy9zdHlsZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RlMjljYwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS9jc3Mvc3R5bGUuY3NzCkBAIC0wLDAgKzEsNzU5IEBACisvKioKKyAqIEhUTUw1IOKcsCBCb2lsZXJwbGF0ZQorICoKKyAqIHN0eWxlLmNzcyBjb250YWlucyBhIHJlc2V0LCBmb250IG5vcm1hbGl6YXRpb24gYW5kIHNvbWUgYmFzZSBzdHlsZXMuCisgKgorICogQ3JlZGl0IGlzIGxlZnQgd2hlcmUgY3JlZGl0IGlzIGR1ZS4KKyAqIE11Y2ggaW5zcGlyYXRpb24gd2FzIHRha2VuIGZyb20gdGhlc2UgcHJvamVjdHM6CisgKiAtIHl1aS55YWhvb2FwaXMuY29tLzIuOC4xL2J1aWxkL2Jhc2UvYmFzZS5jc3MKKyAqIC0gY2FtZW5kZXNpZ24uY29tL2Rlc2lnbi8KKyAqIC0gcHJhZWduYW56LmRlL3dlYmxvZy9odG1sY3NzanMta2lja3N0YXJ0CisgKi8KKworCisvKioKKyAqIGh0bWw1ZG9jdG9yLmNvbSBSZXNldCBTdHlsZXNoZWV0IChFcmljIE1leWVyJ3MgUmVzZXQgUmVsb2FkZWQgKyBIVE1MNSBiYXNlbGluZSkKKyAqIHYxLjYuMSAyMDEwLTA5LTE3IHwgQXV0aG9yczogRXJpYyBNZXllciAmIFJpY2hhcmQgQ2xhcmsKKyAqIGh0bWw1ZG9jdG9yLmNvbS9odG1sLTUtcmVzZXQtc3R5bGVzaGVldC8KKyAqLworCitodG1sLCBib2R5LCBkaXYsIHNwYW4sIG9iamVjdCwgaWZyYW1lLAoraDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgcCwgYmxvY2txdW90ZSwgcHJlLAorYWJiciwgYWRkcmVzcywgY2l0ZSwgY29kZSwgZGVsLCBkZm4sIGVtLCBpbWcsIGlucywga2JkLCBxLCBzYW1wLAorc21hbGwsIHN0cm9uZywgc3ViLCBzdXAsIHZhciwgYiwgaSwgZGwsIGR0LCBkZCwgb2wsIHVsLCBsaSwKK2ZpZWxkc2V0LCBmb3JtLCBsYWJlbCwgbGVnZW5kLAordGFibGUsIGNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGQsCithcnRpY2xlLCBhc2lkZSwgY2FudmFzLCBkZXRhaWxzLCBmaWdjYXB0aW9uLCBmaWd1cmUsCitmb290ZXIsIGhlYWRlciwgaGdyb3VwLCBtZW51LCBuYXYsIHNlY3Rpb24sIHN1bW1hcnksCit0aW1lLCBtYXJrLCBhdWRpbywgdmlkZW8geworICBtYXJnaW46IDA7CisgIHBhZGRpbmc6IDA7CisgIGJvcmRlcjogMDsKKyAgZm9udC1zaXplOiAxMDAlOworICBmb250OiBpbmhlcml0OworICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7Cit9CisKK2FydGljbGUsIGFzaWRlLCBkZXRhaWxzLCBmaWdjYXB0aW9uLCBmaWd1cmUsCitmb290ZXIsIGhlYWRlciwgaGdyb3VwLCBtZW51LCBuYXYsIHNlY3Rpb24geworICBkaXNwbGF5OiBibG9jazsKK30KKworYmxvY2txdW90ZSwgcSB7IHF1b3Rlczogbm9uZTsgfQorCitibG9ja3F1b3RlOmJlZm9yZSwgYmxvY2txdW90ZTphZnRlciwKK3E6YmVmb3JlLCBxOmFmdGVyIHsgY29udGVudDogIiI7IGNvbnRlbnQ6IG5vbmU7IH0KKworaW5zIHsgYmFja2dyb3VuZC1jb2xvcjogI2ZmOTsgY29sb3I6ICMwMDA7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQorCittYXJrIHsgYmFja2dyb3VuZC1jb2xvcjogI2ZmOTsgY29sb3I6ICMwMDA7IGZvbnQtc3R5bGU6IGl0YWxpYzsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KKworZGVsIHsgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7IH0KKworYWJiclt0aXRsZV0sIGRmblt0aXRsZV0geyBib3JkZXItYm90dG9tOiAxcHggZG90dGVkOyBjdXJzb3I6IGhlbHA7IH0KKwordGFibGUgeyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBib3JkZXItc3BhY2luZzogMDsgfQorCitociB7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDFweDsgYm9yZGVyOiAwOyBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYzsgbWFyZ2luOiAxZW0gMDsgcGFkZGluZzogMDsgfQorCitpbnB1dCwgc2VsZWN0IHsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgfQorCisKKy8qKgorICogRm9udCBub3JtYWxpemF0aW9uIGluc3BpcmVkIGJ5IFlVSSBMaWJyYXJ5J3MgZm9udHMuY3NzOiBkZXZlbG9wZXIueWFob28uY29tL3l1aS8KKyAqLworCitib2R5IHsgZm9udDoxM3B4LzEuMjMxIHNhbnMtc2VyaWY7ICpmb250LXNpemU6c21hbGw7IH0gLyogSGFjayByZXRhaW5lZCB0byBwcmVzZXJ2ZSBzcGVjaWZpY2l0eSAqLworc2VsZWN0LCBpbnB1dCwgdGV4dGFyZWEsIGJ1dHRvbiB7IGZvbnQ6OTklIHNhbnMtc2VyaWY7IH0KKworLyogTm9ybWFsaXplIG1vbm9zcGFjZSBzaXppbmc6CisgICBlbi53aWtpcGVkaWEub3JnL3dpa2kvTWVkaWFXaWtpX3RhbGs6Q29tbW9uLmNzcy9BcmNoaXZlXzExI1RlbGV0eXBlX3N0eWxlX2ZpeF9mb3JfQ2hyb21lICovCitwcmUsIGNvZGUsIGtiZCwgc2FtcCB7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2UsIHNhbnMtc2VyaWY7IH0KKworCisvKioKKyAqIE1pbmltYWwgYmFzZSBzdHlsZXMuCisgKi8KKworLyogQWx3YXlzIGZvcmNlIGEgc2Nyb2xsYmFyIGluIG5vbi1JRSAqLworaHRtbCB7IG92ZXJmbG93LXk6IHNjcm9sbDsgfQorCisvKiBBY2Nlc3NpYmxlIGZvY3VzIHRyZWF0bWVudDogcGVvcGxlLm9wZXJhLmNvbS9wYXRyaWNrbC9leHBlcmltZW50cy9rZXlib2FyZC90ZXN0ICovCithOmhvdmVyLCBhOmFjdGl2ZSB7IG91dGxpbmU6IG5vbmU7IH0KKwordWwsIG9sIHsgbWFyZ2luLWxlZnQ6IDJlbTsgfQorb2wgeyBsaXN0LXN0eWxlLXR5cGU6IGRlY2ltYWw7IH0KKworLyogUmVtb3ZlIG1hcmdpbnMgZm9yIG5hdmlnYXRpb24gbGlzdHMgKi8KK25hdiB1bCwgbmF2IGxpIHsgbWFyZ2luOiAwOyBsaXN0LXN0eWxlOm5vbmU7IGxpc3Qtc3R5bGUtaW1hZ2U6IG5vbmU7IH0KKworc21hbGwgeyBmb250LXNpemU6IDg1JTsgfQorc3Ryb25nLCB0aCB7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CisKK3RkIHsgdmVydGljYWwtYWxpZ246IHRvcDsgfQorCisvKiBTZXQgc3ViLCBzdXAgd2l0aG91dCBhZmZlY3RpbmcgbGluZS1oZWlnaHQ6IGdpc3QuZ2l0aHViLmNvbS80MTM5MzAgKi8KK3N1Yiwgc3VwIHsgZm9udC1zaXplOiA3NSU7IGxpbmUtaGVpZ2h0OiAwOyBwb3NpdGlvbjogcmVsYXRpdmU7IH0KK3N1cCB7IHRvcDogLTAuNWVtOyB9CitzdWIgeyBib3R0b206IC0wLjI1ZW07IH0KKworcHJlIHsKKyAgLyogd3d3LnBhdGhmLmNvbS9ibG9ncy8yMDA4LzA1L2Zvcm1hdHRpbmctcXVvdGVkLWNvZGUtaW4tYmxvZy1wb3N0cy1jc3MyMS13aGl0ZS1zcGFjZS1wcmUtd3JhcC8gKi8KKyAgcGFkZGluZzogMTVweDsKK30KKwordGV4dGFyZWEgeyBvdmVyZmxvdzogYXV0bzsgfSAvKiB3d3cuc2l0ZXBvaW50LmNvbS9ibG9ncy8yMDEwLzA4LzIwL2llLXJlbW92ZS10ZXh0YXJlYS1zY3JvbGxiYXJzLyAqLworCisuaWU2IGxlZ2VuZCwgLmllNyBsZWdlbmQgeyBtYXJnaW4tbGVmdDogLTdweDsgfSAKKworLyogQWxpZ24gY2hlY2tib3hlcywgcmFkaW9zLCB0ZXh0IGlucHV0cyB3aXRoIHRoZWlyIGxhYmVsIGJ5OiBUaGllcnJ5IEtvYmxlbnR6IHRqa2Rlc2lnbi5jb20vZXotY3NzL2Nzcy9iYXNlLmNzcyAgKi8KK2lucHV0W3R5cGU9InJhZGlvIl0geyB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207IH0KK2lucHV0W3R5cGU9ImNoZWNrYm94Il0geyB2ZXJ0aWNhbC1hbGlnbjogYm90dG9tOyB9CisuaWU3IGlucHV0W3R5cGU9ImNoZWNrYm94Il0geyB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7IH0KKy5pZTYgaW5wdXQgeyB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1ib3R0b207IH0KKworLyogSGFuZCBjdXJzb3Igb24gY2xpY2thYmxlIGlucHV0IGVsZW1lbnRzICovCitsYWJlbCwgaW5wdXRbdHlwZT0iYnV0dG9uIl0sIGlucHV0W3R5cGU9InN1Ym1pdCJdLCBpbnB1dFt0eXBlPSJpbWFnZSJdLCBidXR0b24geyBjdXJzb3I6IHBvaW50ZXI7IH0KKworLyogV2Via2l0IGJyb3dzZXJzIGFkZCBhIDJweCBtYXJnaW4gb3V0c2lkZSB0aGUgY2hyb21lIG9mIGZvcm0gZWxlbWVudHMgKi8KK2J1dHRvbiwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEgeyBtYXJnaW46IDA7IH0KKworLyogQ29sb3JzIGZvciBmb3JtIHZhbGlkaXR5ICovCitpbnB1dDp2YWxpZCwgdGV4dGFyZWE6dmFsaWQgICB7ICB9CitpbnB1dDppbnZhbGlkLCB0ZXh0YXJlYTppbnZhbGlkIHsKKyAgIGJvcmRlci1yYWRpdXM6IDFweDsgLW1vei1ib3gtc2hhZG93OiAwcHggMHB4IDVweCByZWQ7IC13ZWJraXQtYm94LXNoYWRvdzogMHB4IDBweCA1cHggcmVkOyBib3gtc2hhZG93OiAwcHggMHB4IDVweCByZWQ7Cit9Cisubm8tYm94c2hhZG93IGlucHV0OmludmFsaWQsIC5uby1ib3hzaGFkb3cgdGV4dGFyZWE6aW52YWxpZCB7IGJhY2tncm91bmQtY29sb3I6ICNmMGRkZGQ7IH0KKworCisvKiBUaGVzZSBzZWxlY3Rpb24gZGVjbGFyYXRpb25zIGhhdmUgdG8gYmUgc2VwYXJhdGUKKyAgIE5vIHRleHQtc2hhZG93OiB0d2l0dGVyLmNvbS9taWtldGF5bHIvc3RhdHVzLzEyMjI4ODA1MzAxCisgICBBbHNvOiBob3QgcGluayEgKi8KKzo6LW1vei1zZWxlY3Rpb257IGJhY2tncm91bmQ6ICNGRjVFOTk7IGNvbG9yOiNmZmY7IHRleHQtc2hhZG93OiBub25lOyB9Cis6OnNlbGVjdGlvbiB7IGJhY2tncm91bmQ6I0ZGNUU5OTsgY29sb3I6I2ZmZjsgdGV4dC1zaGFkb3c6IG5vbmU7IH0KKworLyogai5tcC93ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciAqLworYTpsaW5rIHsgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiAjRkY1RTk5OyB9CisKKy8qIE1ha2UgYnV0dG9ucyBwbGF5IG5pY2UgaW4gSUU6CisgICB3d3cudmlnZXQuY29tL2luc3BpcmUvc3R5bGluZy10aGUtYnV0dG9uLWVsZW1lbnQtaW4taW50ZXJuZXQtZXhwbG9yZXIvICovCitidXR0b24geyAgd2lkdGg6IGF1dG87IG92ZXJmbG93OiB2aXNpYmxlOyB9CisKKy8qIEJpY3ViaWMgcmVzaXppbmcgZm9yIG5vbi1uYXRpdmUgc2l6ZWQgSU1HOgorICAgY29kZS5mbGlja3IuY29tL2Jsb2cvMjAwOC8xMS8xMi9vbi11aS1xdWFsaXR5LXRoZS1saXR0bGUtdGhpbmdzLWNsaWVudC1zaWRlLWltYWdlLXJlc2l6aW5nLyAqLworLmllNyBpbWcgeyAtbXMtaW50ZXJwb2xhdGlvbi1tb2RlOiBiaWN1YmljOyB9CisKKy8qKgorICogWW91IG1pZ2h0IHR3ZWFrIHRoZXNlLi4KKyAqLworCitib2R5LCBzZWxlY3QsIGlucHV0LCB0ZXh0YXJlYSB7CisgIC8qICM0NDQgbG9va3MgYmV0dGVyIHRoYW4gYmxhY2s6IHR3aXR0ZXIuY29tL0hfRkovc3RhdHVzZXMvMTE4MDA3MTk4NTkgKi8KKyAgY29sb3I6ICM0NDQ7CisgIC8qIFNldCB5b3VyIGJhc2UgZm9udCBoZXJlLCB0byBhcHBseSBldmVubHkgKi8KKyAgLyogZm9udC1mYW1pbHk6IEdlb3JnaWEsIHNlcmlmOyAgKi8KK30KKworLyogSGVhZGVycyAoaDEsIGgyLCBldGMpIGhhdmUgbm8gZGVmYXVsdCBmb250LXNpemUgb3IgbWFyZ2luOyBkZWZpbmUgdGhvc2UgeW91cnNlbGYgKi8KK2gxLCBoMiwgaDMsIGg0LCBoNSwgaDYgeyBmb250LXdlaWdodDogYm9sZDsgfQorCithLCBhOmFjdGl2ZSwgYTp2aXNpdGVkIHsgY29sb3I6ICM2MDc4OTA7IH0KK2E6aG92ZXIgeyBjb2xvcjogIzAzNjsgfQorCisKKy8qKgorICogUHJpbWFyeSBzdHlsZXMKKyAqCisgKiBBdXRob3I6IAorICovCisKKworYm9keXt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MH0KKy5jb250YWluZXJ7dGV4dC1hbGlnbjpsZWZ0O3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MDttYXJnaW46MCBhdXRvO3dpZHRoOjgwMHB4fQorLmNvbHVtbntmbG9hdDpsZWZ0O21hcmdpbjowIDVweCAwIDA7cGFkZGluZzowfQorKiBodG1sIC5jb2x1bW57b3ZlcmZsb3cteDpoaWRkZW59CisuYm9yZGVye3BhZGRpbmctcmlnaHQ6MnB4O21hcmdpbi1yaWdodDoycHg7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZGRkfQorLnNwYW4tMXt3aWR0aDozNXB4fQorLnNwYW4tMnt3aWR0aDo3NXB4fQorLnNwYW4tM3t3aWR0aDoxMTVweH0KKy5zcGFuLTR7d2lkdGg6MTU1cHh9Cisuc3Bhbi01e3dpZHRoOjE5NXB4fQorLnNwYW4tNnt3aWR0aDoyMzVweH0KKy5zcGFuLTd7d2lkdGg6Mjc1cHh9Cisuc3Bhbi04e3dpZHRoOjMxNXB4fQorLnNwYW4tOXt3aWR0aDozNTVweH0KKy5zcGFuLTEwe3dpZHRoOjM5NXB4fQorLnNwYW4tMTF7d2lkdGg6NDM1cHh9Cisuc3Bhbi0xMnt3aWR0aDo0NzVweH0KKy5zcGFuLTEze3dpZHRoOjUxNXB4fQorLnNwYW4tMTR7d2lkdGg6NTU1cHh9Cisuc3Bhbi0xNXt3aWR0aDo1OTVweH0KKy5zcGFuLTE2e3dpZHRoOjYzNXB4fQorLnNwYW4tMTd7d2lkdGg6Njc1cHh9Cisuc3Bhbi0xOHt3aWR0aDo3MTVweH0KKy5zcGFuLTE5e3dpZHRoOjc1NXB4fQorLnNwYW4tMjB7d2lkdGg6Nzk1cHh9Cisuc3Bhbi0yMXt3aWR0aDo4MzVweH0KKy5zcGFuLTIye3dpZHRoOjg3NXB4fQorLnNwYW4tMjN7d2lkdGg6OTE1cHh9Cisuc3Bhbi0yNHt3aWR0aDo5NTVweDttYXJnaW46MH0KKy5sYXN0e21hcmdpbi1yaWdodDowfQorLmFwcGVuZC0xe3BhZGRpbmctcmlnaHQ6NDBweH0KKy5hcHBlbmQtMntwYWRkaW5nLXJpZ2h0OjgwcHh9CisuYXBwZW5kLTN7cGFkZGluZy1yaWdodDoxMjBweH0KKy5hcHBlbmQtNHtwYWRkaW5nLXJpZ2h0OjE2MHB4fQorLmFwcGVuZC01e3BhZGRpbmctcmlnaHQ6MjAwcHh9CisucHJlcGVuZC0xe3BhZGRpbmctbGVmdDo0MHB4fQorLnByZXBlbmQtMntwYWRkaW5nLWxlZnQ6ODBweH0KKy5wcmVwZW5kLTN7cGFkZGluZy1sZWZ0OjEyMHB4fQorLnByZXBlbmQtNHtwYWRkaW5nLWxlZnQ6MTYwcHh9CisucHJlcGVuZC01e3BhZGRpbmctbGVmdDoyMDBweH0KKy5jbGVhcntkaXNwbGF5OmlubGluZS1ibG9ja30KKy5jbGVhcjphZnRlciwuY29udGFpbmVyOmFmdGVye2NvbnRlbnQ6Ii4iO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7Y2xlYXI6Ym90aDt2aXNpYmlsaXR5OmhpZGRlbn0KKyogaHRtbCAuY2xlYXJ7aGVpZ2h0OjElfQorLmNsZWFye2Rpc3BsYXk6YmxvY2t9CitoMSxoMixoMyxoNCxoNSxoNiwgcCx1bCxvbCxkbCxwcmUsZm9ybXtwYWRkaW5nLWxlZnQ6NXB4O3BhZGRpbmctcmlnaHQ6NXB4fQordGFibGV7bWFyZ2luLWxlZnQ6NXB4O21hcmdpbi1yaWdodDo1cHh9CitpbWd7bWFyZ2luOjAgMCAxOHB4IDB9CisucHVsbC0xe21hcmdpbi1sZWZ0Oi03MHB4fQorLnB1bGwtMnttYXJnaW4tbGVmdDotMTQwcHh9CisucHVsbC0ze21hcmdpbi1sZWZ0Oi0yMTBweH0KKy5wdXNoLTB7bWFyZ2luOjAgMCAwIDE4cHg7ZmxvYXQ6cmlnaHR9CisucHVzaC0xe21hcmdpbjowIC03MHB4IDAgMThweDtmbG9hdDpyaWdodH0KKy5wdXNoLTJ7bWFyZ2luOjAgLTE0MHB4IDAgMThweDtmbG9hdDpyaWdodH0KKy5wdXNoLTN7bWFyZ2luOjAgLTIxMHB4IDAgMThweDtmbG9hdDpyaWdodH0KKy5kZXByZWNhdGVke3RleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdofQorCisvKiBAZW5kICovCisKKy8qIEBncm91cCB0eXBvZ3JhcGh5LmNzcyAqLworCitib2R5IHsKKyAgZm9udC1zaXplOiAxMnB4OworICBsaW5lLWhlaWdodDogMThweDsgLyogRG8gYSBjb21wbGV0ZSBmaW5kL3JlcGxhY2Ugb24gIjE4cHgiIHRvIGNoYW5nZSB0aGlzICovCit9CisKKworLyogRGVmYXVsdCBmb250cyAqLworaDEsaDIsaDMsCitoNCxoNSxoNiAgeyBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOyB9Citib2R5ICAgICAgeyBmb250LWZhbWlseTogIkx1Y2lkYSBHcmFuZGUiLCBDYWxpYnJpLCBBcmlhbCwgc2Fucy1zZXJpZjsgfQorcHJlICAgICAgIHsgZm9udC1mYW1pbHk6IE1vbmFjbywgIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlOyB9Citjb2RlICAgICAgeyBmb250LWZhbWlseTogQ29uc29sYXMsICJCaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm8iLCAiQ291cmllciBOZXciLCBNb25hY28sIENvdXJpZXIsIG1vbm9zcGFjZTsgfQorCisKKy8qIEhlYWRpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitoMSxoMixoMyxoNCxoNSxoNiB7CisgIGNvbG9yOiMxMTE7CisgIGNsZWFyOmJvdGg7Cit9CisKK2gxIGEsIGgyIGEsIGgzIGEsIGg0IGEsIGg1IGEsIGg2IGEgeworICAgIGNvbG9yOiAjMTExOworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworaDEgeyBmb250LXNpemU6IDMwcHg7IGxpbmUtaGVpZ2h0OjM2cHg7IHBhZGRpbmc6MTBweCAwIDE4cHggMDsgfQoraDIgeyBmb250LXNpemU6IDIwcHg7IGxpbmUtaGVpZ2h0OjM2cHg7IH0KK2gzIHsgZm9udC1zaXplOiAxMnB4OyBsaW5lLWhlaWdodDoyNHB4OyB9CitoNCB7IGZvbnQtc2l6ZTogMTJweDsgZm9udC13ZWlnaHQ6Ym9sZDsgfQoraDUgeyBmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OmJvbGQ7IH0KK2g2IHsgZm9udC1zaXplOiAxMnB4OyB9CisKKworLyogVGV4dCBlbGVtZW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworcCAgICAgICAgICAgeyBtYXJnaW46IDAgMCAxOHB4IDA7IHRleHQtYWxpZ246anVzdGlmeTsgfQorcC5sYXN0ICAgICAgeyBtYXJnaW4tYm90dG9tOjA7IH0KK3AgaW1nICAgICAgIHsgZmxvYXQ6IGxlZnQ7IG1hcmdpbjoxOHB4IDE4cHggMThweCAwOyBwYWRkaW5nOjA7IH0KK3AgaW1nLnRvcCAgIHsgbWFyZ2luLXRvcDowOyB9IC8qIFVzZSB0aGlzIGlmIHRoZSBpbWFnZSBpcyBhdCB0aGUgdG9wIG9mIHRoZSA8cD4uICovCisKK3VsLCBvbCAgICAgIHsgbWFyZ2luOiAwIDAgMThweCAwOyB9Cit1bCAgICAgICAgICB7IGxpc3Qtc3R5bGUtdHlwZTpjaXJjbGU7IH0KK29sICAgICAgICAgIHsgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsOyB9CitkbCAgICAgICAgICB7IG1hcmdpbjogMCAwIDE4cHggMDsgfQorZGwgZHQgICAgICAgeyBmb250LXdlaWdodDogYm9sZDsgfQorCithICAgICAgICAgICB7IGNvbG9yOiAjQTY4MDAwOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgb3V0bGluZTogbm9uZTsgfQorYTpob3ZlciAgICAgeyBjb2xvcjogIzAwMDsgfQorCitibG9ja3F1b3RlICB7IG1hcmdpbjogMCAwIDE4cHggMThweDsgY29sb3I6ICM2NjY7IGZvbnQtc3R5bGU6IGl0YWxpYzsgfQorc3Ryb25nICAgICAgeyBmb250LXdlaWdodDogYm9sZDsgfQorZW0gICAgICAgICAgeyBmb250LXN0eWxlOiBpdGFsaWM7IH0KK3ByZSAgICAgICAgIHsgbWFyZ2luLWJvdHRvbTogMThweDsgYmFja2dyb3VuZDogI2VlZTsgYm9yZGVyOjFweCBzb2xpZCAjZGRkOyBwYWRkaW5nOjE2cHg7IH0KK2NvZGUgeworICAgIGJhY2tncm91bmQ6ICNlZWU7CisgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKKyAgICBjb2xvcjogIzU1NTsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBmb250OiBub3JtYWwgMS4xZW0gIkx1Y2lkYSBTYW5zIFVuaWNvZGUiLHNlcmlmOworICAgIG1hcmdpbi1ib3R0b206IDEycHg7CisgICAgcGFkZGluZzogOHB4IDEwcHg7CisgICAgd2hpdGUtc3BhY2U6IHByZTsKKyAgICBvdmVyZmxvdzogYXV0bzsKKyAgICBtYXgtaGVpZ2h0OiAzMDBweDsKK30KKworLyogVXNlIHRoaXMgdG8gY3JlYXRlIGEgaG9yaXpvbnRhbCBydWxlciBhY3Jvc3MgYSBjb2x1bW4uICovCitociB7CisgIGJhY2tncm91bmQ6ICNGRkRGNzM7CisgIGNvbG9yOiAjRkZERjczOworICBjbGVhcjogYm90aDsKKyAgZmxvYXQ6IG5vbmU7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDJweDsKKyAgbWFyZ2luOiAwIDAgMTZweCAwOworICBib3JkZXI6IG5vbmU7Cit9CisKKworLyogVGFibGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit0YWJsZSAgIHsgbWFyZ2luLWJvdHRvbTogMTZweDsgYm9yZGVyLXRvcDoxcHggc29saWQgI2RkZDsgYm9yZGVyLWxlZnQ6MXB4IHNvbGlkICNkZGQ7IH0KK3RoLHRkICAgeyBoZWlnaHQ6IDEzcHg7IHBhZGRpbmc6MnB4IDRweDsgYm9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZDsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZGRkOyB9Cit0aCAgICAgIHsgZm9udC13ZWlnaHQ6Ym9sZDsgfQorCisKKy8qIFNvbWUgZGVmYXVsdCBjbGFzc2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitwLnNtYWxsICAgeyBmb250LXNpemU6IDEwcHg7IG1hcmdpbi1ib3R0b206IDE4cHg7IH0KK3AubGFyZ2UgICB7IGZvbnQtc2l6ZTogMTRweDsgbGluZS1oZWlnaHQ6MzZweDsgfQorcC5xdWlldCAgIHsgY29sb3I6ICM2NjY7IH0KKy5oaWRlICAgICB7IGRpc3BsYXk6IG5vbmU7IH0KKworCisuY2FwcyB7CisgIGZvbnQtdmFyaWFudDogc21hbGwtY2FwczsKKyAgbGV0dGVyLXNwYWNpbmc6IDFweDsKKyAgdGV4dC10cmFuc2Zvcm06IGxvd2VyY2FzZTsKK30KKworLyogQGVuZCAqLworCisvKiBAZ3JvdXAgc3R5bGVzICovCisKKy8qIEBncm91cCBIZWFkZXIgKi8KKworI2hlYWRlciB7CisJcGFkZGluZy10b3A6IDEuOGVtOworCW1hcmdpbi1ib3R0b206IDEuOGVtOworfQorI3NpdGUtbmFtZSB7CisgICAgbGluZS1oZWlnaHQ6IDM2cHg7Cit9Cisjc2l0ZS1uYW1lIGEgeworICAgIGZvbnQtdmFyaWFudDogc21hbGwtY2FwczsKKyAgICBmb250LXNpemU6IDNlbTsKKyAgICBsZXR0ZXItc3BhY2luZzogM3B4OworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgICBjb2xvcjogIzQ0NDsKK30KKyNzaXRlLW5hbWUgYTp2aXNpdGVkIHsKKyAgICBjb2xvcjogIzQ0NDsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9Cisjc2l0ZS1uYW1lIGEgc3Ryb25nIHsKKyAgICBjb2xvcjogYmxhY2s7Cit9Cisjc2l0ZS1kZXNjcmlwdGlvbiB7CisJcGFkZGluZy10b3A6IDEuNGVtOworCXBhZGRpbmctYm90dG9tOiAxLjRlbTsKK30KKyNzaXRlLWRlc2NyaXB0aW9uIGgzIHsKKwlmb250LXNpemU6IDJlbTsKKwltYXJnaW46IDA7CisJZm9udC13ZWlnaHQ6IG5vcm1hbDsKK30KKyNzaXRlLWRlc2NyaXB0aW9uIHAjcmVhZC1tb3JlIHsKKwl0ZXh0LWFsaWduOiByaWdodDsKKwltYXJnaW46IDZweCAwIDA7Cit9Cisjc2l0ZS1kZXNjcmlwdGlvbiBwI3JlYWQtbW9yZSBhLCAjc2l0ZS1kZXNjcmlwdGlvbiBwI3JlYWQtbW9yZSBhOnZpc2l0ZWQgeworCWZvbnQtc2l6ZTogMS40ZW07CisJY29sb3I6ICM1MTUxNTE7Cit9Cisjc2l0ZS1kZXNjcmlwdGlvbiBwI3JlYWQtbW9yZSBhOmhvdmVyIHsKKwljb2xvcjogIzkxOTE5MTsKK30KKyNzaXRlLWRlc2NyaXB0aW9uIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjNDE4OEQyOworCWJvcmRlci10b3A6IDJweCBzb2xpZCAjZmZmOworCWNvbG9yOiAjNDQ0OworfQorLyogQGVuZCAqLworCisvKiBAZ3JvdXAgTmF2aWdhdGlvbiAqLworCit1bC5uYXZpZ2F0aW9uLCB1bC5uYXZpZ2F0aW9uIGxpIHsKKyAgbGlzdC1zdHlsZTogbm9uZTsKK30KK3VsLm5hdmlnYXRpb24gbGkgeworICBkaXNwbGF5OiBpbmxpbmU7CisgIG1hcmdpbi1yaWdodDogMS4zZW07Cit9CisKKyNwcmltYXJ5IHsKKwlsaW5lLWhlaWdodDogNzJweDsKKwltYXJnaW4tYm90dG9tOiAtMjRweDsKKwl0ZXh0LWFsaWduOiByaWdodDsKK30KKyNwcmltYXJ5IGxpIHsKKwlwYWRkaW5nLWJvdHRvbTogNXB4OworfQorI3ByaW1hcnkgYSB7CisJY29sb3I6ICM0NDQ7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworCWZvbnQtc2l6ZTogMS4yZW07Cit9CisjcHJpbWFyeSBsaTpob3ZlciB7CisJYm9yZGVyLWJvdHRvbTogNnB4IHNvbGlkICNGRkRGNzM7Cit9Cisjc2Vjb25kYXJ5IHsKKwlwYWRkaW5nLXRvcDogN3B4OworCWJhY2tncm91bmQtY29sb3I6ICNGRkRGNzM7Cit9Cisjc2Vjb25kYXJ5IHVsIHsKKyAgICBsaXN0LXN0eWxlOiBub25lOworCW1hcmdpbi1ib3R0b206IDdweDsKK30KKyNzZWNvbmRhcnkgdWwgbGkgeworICAgIGRpc3BsYXk6IGlubGluZTsKKyAgICBsaXN0LXN0eWxlOiBub25lOworCW1hcmdpbi1yaWdodDogMDsKK30KKyNzZWNvbmRhcnkgdWwgbGkgYSB7CisJY29sb3I6ICM1MTUxNTE7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworCXBhZGRpbmc6IDhweCAyNHB4IDhweCAyNHB4OworCW1hcmdpbi1sZWZ0OiAtNHB4OworfQorI3NlY29uZGFyeSB1bCBsaSBhLnNlbGVjdGVkIHsKKwliYWNrZ3JvdW5kLWNvbG9yOiAjNTE1MTUxOworCWNvbG9yOiAjZmZmOworfQorI3NlY29uZGFyeSB1bCBhOmhvdmVyIHsKKwliYWNrZ3JvdW5kOiAjZmZmNGQwOworfQorLyoKKwl4QnJlYWRjcnVtYnMgKEV4dGVuZGVkIEJyZWFkY3J1bWJzKSBqUXVlcnkgUGx1Z2luCisJ77+9IDIwMDkgYWpheEJsZW5kZXIuY29tCisJRm9yIGFueSBxdWVzdGlvbnMgcGxlYXNlIHZpc2l0IHd3dy5hamF4YmxlbmRlci5jb20KKwlvciBlbWFpbCB1cyBhdCBzdXBwb3J0QGFqYXhibGVuZGVyLmNvbQorKi8KKy54YnJlYWRjcnVtYnMgeworCXBvc2l0aW9uOiByZWxhdGl2ZTsKKwl6LWluZGV4OiAxMDAwOworfQorLnhicmVhZGNydW1icyBMSSBVTCB7CisJcG9zaXRpb246IGFic29sdXRlOworCWZsb2F0OiBsZWZ0OworfQorLnhicmVhZGNydW1icywgLnhicmVhZGNydW1icyBMSSwgLnhicmVhZGNydW1icyBVTCwgLnhicmVhZGNydW1icyBVTCBMSSB7CisJbGlzdC1zdHlsZTogbm9uZTsKKwltYXJnaW46IDA7CisJcGFkZGluZzogMDsKK30KKy54YnJlYWRjcnVtYnMgeyBjbGVhcjogYm90aDsgfQorLnhicmVhZGNydW1icywgLnhicmVhZGNydW1icyBMSSB7CisJZmxvYXQ6IGxlZnQ7Cit9CisueGJyZWFkY3J1bWJzIFVMIHsKKwlkaXNwbGF5OiBub25lOworfQorCisvKiAgQmFzZSBzdHlsZSBvZiB4QnJlYWRjcnVtYnMgICovCisvKiAgVG9wIExldmVsICAqLworLnhicmVhZGNydW1icyB7CisJYmFja2dyb3VuZDogI0ZGREY3MzsKKwl3aWR0aDogMTAwJTsKK30KKy54YnJlYWRjcnVtYnMgTEkgeworICAgIGJvcmRlci1yaWdodDogbm9uZTsKKyAgICBwYWRkaW5nOiA1cHggMTVweCA1cHggMTBweDsKKwloZWlnaHQ6IDE2cHg7Cit9CisueGJyZWFkY3J1bWJzIExJLmN1cnJlbnQgeworCWJhY2tncm91bmQ6IG5vbmU7Cit9CisueGJyZWFkY3J1bWJzIExJIFVMIExJIHsKKyAgICBiYWNrZ3JvdW5kOiBub25lOworfQorLnhicmVhZGNydW1icyBMSSBBIHsKKwlmb250LXNpemU6IDExcHg7CisJY29sb3I6ICM1MTUxNTE7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworICAgIHBhZGRpbmctcmlnaHQ6IDJlbTsKK30KKy54YnJlYWRjcnVtYnMgTEkgQS5ob21lIHsKKyAgICBiYWNrZ3JvdW5kOiB1cmwoIGhvbWUuZ2lmICkgbm8tcmVwZWF0IGxlZnQgY2VudGVyOworICAgIHBhZGRpbmctbGVmdDogMjBweDsKK30KKy54YnJlYWRjcnVtYnMgTEkgQTpIT1ZFUiwgLnhicmVhZGNydW1icyBMSS5ob3ZlciBBIHsKKwljb2xvcjogIzAwMDsKK30KKy8qICBUb3AgTGV2ZWwgLSBDdXJyZW50IFBhZ2UgICovCisueGJyZWFkY3J1bWJzIExJLmN1cnJlbnQgQSB7CisJY29sb3I6ICMzMzMzMzM7CisJZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisvKiAgU3ViLWxldmVsICAqLworLnhicmVhZGNydW1icyBMSSBVTCB7CisJcGFkZGluZzogM3B4OworCWJhY2tncm91bmQ6ICNmZmY0ZDA7CisJZm9udC1zaXplOiAxMXB4OworCW1pbi13aWR0aDogMTgwcHg7CisgICAgbWF4LWhlaWdodDogNTAwcHg7CisgICAgb3ZlcmZsb3c6IGF1dG87CisJdG9wOiAyNXB4OworfQorLnhicmVhZGNydW1icyBMSSBVTCBMSSB7CisJZmxvYXQ6IGxlZnQ7CisJd2lkdGg6IDEwMCU7CisJYm9yZGVyLXJpZ2h0OiBub25lOworCWhlaWdodDogYXV0bzsKK30KKy54YnJlYWRjcnVtYnMgTEkgVUwgTEkgQSB7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworCWNvbG9yOiAjNjY2NjY2ICFpbXBvcnRhbnQ7CisJZGlzcGxheTogYmxvY2s7CisJcGFkZGluZzogNHB4OworCWJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgIzY2NjY2NjsKK30KKy54YnJlYWRjcnVtYnMgTEkgVUwgTEk6bGFzdC1jaGlsZCBBIHsKKwlib3JkZXItYm90dG9tOiBub25lOworfQorLnhicmVhZGNydW1icyBMSSBVTCBMSSBBOkhPVkVSIHsKKyAgICBiYWNrZ3JvdW5kOiAjZmZmYmVlOworfQorYm9keS5hZHZpc29yaWVzICNuYXYtYWR2aXNvcmllcyxib2R5LmNvbW11bml0eSAjbmF2LWNvbW11bml0eSxib2R5LmJsb2cgI25hdi1ibG9nLGJvZHkuY29kZSAjbmF2LWNvZGUsYm9keS5hYm91dCAjbmF2LWFib3V0LGJvZHkuZG9jdW1lbnRhdGlvbiAjbmF2LWRvY3VtZW50YXRpb257Ym9yZGVyLWJvdHRvbTogNnB4IHNvbGlkICNGRkRGNzM7fQorLyogQGVuZCAqLworCisvKiBAZ3JvdXAgTWFpbiAqLworCisjbWFpbiB7CisJZm9udC1zaXplOiAxLjJlbTsKKwlsaW5lLWhlaWdodDogMS41ZW07CisJY29sb3I6ICMxRTI1MEQ7Cit9CisjbWFpbiBoMiB7CisJZm9udC1zaXplOiAxLjhlbTsKKwlmb250LXdlaWdodDogbm9ybWFsOworICAgIGJvcmRlci1ib3R0b206IDNweCBzb2xpZCAjYzJiMmQ0OworICAgIHBhZGRpbmctdG9wOiAxMHB4OworCXBhZGRpbmctbGVmdDogMDsKKwlwYWRkaW5nLXJpZ2h0OiAwOworCW1hcmdpbi1ib3R0b206IDZweDsKK30KKyNtYWluIGgzIHsKKwlmb250LXNpemU6IDEuNGVtOworCWZvbnQtd2VpZ2h0OiBub3JtYWw7CisJYm9yZGVyLWJvdHRvbTogNHB4IHNvbGlkICNmN2Y3Zjc7CisJcGFkZGluZzogMCAwIDVweDsKKwltYXJnaW4tYm90dG9tOiAwLjRlbTsKK30KKyNtYWluIGgzIC5jYXBzIHsKKwlmb250LXNpemU6IDEuM2VtOworfQorI21haW4gLmhmZWVkIC5oZW50cnkgeworCWxpc3Qtc3R5bGU6IG5vbmU7CisJbGlzdC1zdHlsZS10eXBlOiBub25lOworCW1hcmdpbi1ib3R0b206IDJlbTsKKwlib3JkZXItYm90dG9tOiA0cHggc29saWQgI2VlZTsKKwlwYWRkaW5nLWJvdHRvbTogMWVtOworCWNsZWFyOiBib3RoOworfQorI21haW4gLmhmZWVkIC5oZW50cnk6bGFzdC1jaGlsZCB7CisJYm9yZGVyLWJvdHRvbTogbm9uZTsKK30jbWFpbiAuaGZlZWQgLmhlbnRyeSAuZW50cnktdGl0bGUgeworCWJvcmRlci1ib3R0b206IG5vbmU7Cit9CisjbWFpbiBociB7CisJY29sb3I6ICNGRkRGNzM7CisJYmFja2dyb3VuZC1jb2xvcjogI0ZGREY3MzsKKwlib3JkZXItY29sb3I6ICNGRkRGNzM7Cit9CisjbWFpbiBwIHsKKwl0ZXh0LWFsaWduOiBsZWZ0OworCXBhZGRpbmctbGVmdDogMDsKKwlwYWRkaW5nLXJpZ2h0OiAwOworfQorI21haW4gaW1nIHsKKwltYXgtd2lkdGg6IDc0MHB4OworfQorI21haW4gb2wgeworCW1hcmdpbi1sZWZ0OiAxLjVlbTsKK30KKyNtYWluIHVsIHsKKwltYXJnaW4tbGVmdDogMS4yZW07CisJbGlzdC1zdHlsZTogZGlzYzsKK30KKyNtYWluIC5pbnRybyB7CisJZm9udC1zaXplOiAxLjJlbTsKKwljb2xvcjogIzUxNTE1MTsKKwlib3JkZXItYm90dG9tOiAzcHggc29saWQgI2Y4ZmJmZDsKK30KKyNtYWluIC5nZXQtc3RhcnRlZCBhIHsKKwl0ZXh0LWFsaWduOiBjZW50ZXI7CisJYmFja2dyb3VuZC1jb2xvcjogIzg5NDJENjsKKwljb2xvcjogI2ZmZjsKKwlkaXNwbGF5OiBibG9jazsKKwlib3JkZXItcmFkaXVzOiAxMnB4OworCS13ZWJraXQtYm9yZGVyLXJhZGl1czogMTJweDsKKwktbW96LWJvcmRlci1yYWRpdXM6IDEycHg7CisJcGFkZGluZzogOHB4IDZweDsKKwl3aWR0aDogMTBlbTsKKwlmb250LXNpemU6IDEuNGVtOworCW1hcmdpbi1sZWZ0OiBhdXRvOworCW1hcmdpbi1yaWdodDogYXV0bzsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisjbWFpbiAuZ2V0LXN0YXJ0ZWQgYTpob3ZlciB7CisJYmFja2dyb3VuZC1jb2xvcjogIzlENjlENjsKK30KKyNtYWluIHByZSB7CisgICAgbWF4LWhlaWdodDogNjAwcHg7CisJb3ZlcmZsb3c6IGF1dG87Cit9CisKKy8qIEBlbmQgKi8KKy8qIEBncm91cCBGb290ZXIgKi8KKworI2Zvb3RlciB7CisJY29sb3I6ICM2NjY7CisJZm9udC1zaXplOiAxMXB4OworCWJvcmRlci10b3A6IDRweCBkb3VibGUgI2U3ZTdlNzsKKwltYXJnaW4tdG9wOiAyZW07CisJcGFkZGluZy10b3A6IDEuMmVtOworCXRleHQtYWxpZ246IGNlbnRlcjsKK30KKy8qI2Zvb3RlciBhIHsKKwljb2xvcjogIzc4Nzg3ODsKKwl0ZXh0LWRlY29yYXRpb246IG5vbmU7CisJYm9yZGVyLWJvdHRvbTogMXB4IGRvdHRlZCAjNzg3ODc4OworfQorI2Zvb3RlciBhOmhvdmVyIHsKKwlib3JkZXItYm90dG9tOiAxcHggc29saWQgIzc4Nzg3ODsKK30qLworCisvKiBAZW5kICovCisKKy51cGRhdGUsIC5ub3RlLCAubm90aWNlLCAuYWxlcnQgeworbWFyZ2luOiAxMHB4IDAgMjBweDsKK3BhZGRpbmc6IDVweCAyMHB4IDVweCAyMHB4OworY2xlYXI6IGJvdGg7Cit9Cisubm90ZSB7CisJYmFja2dyb3VuZDogI2U2ZWNmMjsKKwlib3JkZXItdG9wOiAycHggc29saWQgIzg5OTZhZDsKKwlib3JkZXItYm90dG9tOiAycHggc29saWQgIzg5OTZhZDsKK30KKy51cGRhdGUsIC5ub3RpY2UgeworCWJhY2tncm91bmQ6ICM5MkVENkI7CisJYm9yZGVyLXRvcDogMnB4IHNvbGlkICMyQjhFMDA7CisJYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICMyQjhFMDA7Cit9CisuYWxlcnQgeworCWJhY2tncm91bmQ6ICNmZmJmYmY7CisJYm9yZGVyLXRvcDogMnB4IHNvbGlkICNmMzM7CisJYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNmMzM7Cit9CisuYWxlcnQgYSB7CisJY29sb3I6I2YwMDsKK30KKy5hbGVydCBhOnZpc2l0ZWQgeworCWNvbG9yOiAjZjMzOworfQorCisvKiBKYXZhRG9jLVNwZWNpZmljIFN0eWxlcyAqLworLlRhYmxlSGVhZGluZ0NvbG9yICAgICB7IHRleHQtYWxpZ246IGxlZnQ7IGJvcmRlci13aWR0aDogMCB9CisuVGFibGVTdWJIZWFkaW5nQ29sb3IgIHsgdGV4dC1hbGlnbjogbGVmdDsgYm9yZGVyLXdpZHRoOiAwIH0KKy5UYWJsZVJvd0NvbG9yICAgICAgICAgeyB0ZXh0LWFsaWduOiBsZWZ0OyBib3JkZXItd2lkdGg6IDAgfQorLk5hdkJhckNlbGwxICAgIHsgdGV4dC1hbGlnbjogbGVmdDsgYm9yZGVyLXdpZHRoOiAwIH0KKy5OYXZCYXJDZWxsMVJldiB7IHRleHQtYWxpZ246IGxlZnQ7IGJvcmRlci13aWR0aDogMCB9CisuRnJhbWVJdGVtRm9udCB7IHRleHQtYWxpZ246IGxlZnQ7IH0KKworLyogQGVuZCAqLworCisKKworLyoqCisgKiBOb24tc2VtYW50aWMgaGVscGVyIGNsYXNzZXM6IHBsZWFzZSBkZWZpbmUgeW91ciBzdHlsZXMgYmVmb3JlIHRoaXMgc2VjdGlvbi4KKyAqLworCisvKiBGb3IgaW1hZ2UgcmVwbGFjZW1lbnQgKi8KKy5pciB7IGRpc3BsYXk6IGJsb2NrOyB0ZXh0LWluZGVudDogLTk5OWVtOyBvdmVyZmxvdzogaGlkZGVuOyBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OyB0ZXh0LWFsaWduOiBsZWZ0OyBkaXJlY3Rpb246IGx0cjsgfQorCisvKiBIaWRlIGZvciBib3RoIHNjcmVlbnJlYWRlcnMgYW5kIGJyb3dzZXJzOgorICAgY3NzLWRpc2N1c3MuaW5jdXRpby5jb20vd2lraS9TY3JlZW5yZWFkZXJfVmlzaWJpbGl0eSAqLworLmhpZGRlbiB7IGRpc3BsYXk6IG5vbmU7IHZpc2liaWxpdHk6IGhpZGRlbjsgfQorCisvKiBIaWRlIG9ubHkgdmlzdWFsbHksIGJ1dCBoYXZlIGl0IGF2YWlsYWJsZSBmb3Igc2NyZWVucmVhZGVyczogYnkgSm9uIE5lYWwuCisgIHd3dy53ZWJhaW0ub3JnL3RlY2huaXF1ZXMvY3NzL2ludmlzaWJsZWNvbnRlbnQvICAmICBqLm1wL3Zpc3VhbGx5aGlkZGVuICovCisudmlzdWFsbHloaWRkZW4geyBib3JkZXI6IDA7IGNsaXA6IHJlY3QoMCAwIDAgMCk7IGhlaWdodDogMXB4OyBtYXJnaW46IC0xcHg7IG92ZXJmbG93OiBoaWRkZW47IHBhZGRpbmc6IDA7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgd2lkdGg6IDFweDsgfQorLyogRXh0ZW5kcyB0aGUgLnZpc3VhbGx5aGlkZGVuIGNsYXNzIHRvIGFsbG93IHRoZSBlbGVtZW50IHRvIGJlIGZvY3VzYWJsZSB3aGVuIG5hdmlnYXRlZCB0byB2aWEgdGhlIGtleWJvYXJkOiBkcnVwYWwub3JnL25vZGUvODk3NjM4ICovCisudmlzdWFsbHloaWRkZW4uZm9jdXNhYmxlOmFjdGl2ZSwKKy52aXN1YWxseWhpZGRlbi5mb2N1c2FibGU6Zm9jdXMgeyBjbGlwOiBhdXRvOyBoZWlnaHQ6IGF1dG87IG1hcmdpbjogMDsgb3ZlcmZsb3c6IHZpc2libGU7IHBvc2l0aW9uOiBzdGF0aWM7IHdpZHRoOiBhdXRvOyB9CisKKy8qIEhpZGUgdmlzdWFsbHkgYW5kIGZyb20gc2NyZWVucmVhZGVycywgYnV0IG1haW50YWluIGxheW91dCAqLworLmludmlzaWJsZSB7IHZpc2liaWxpdHk6IGhpZGRlbjsgfQorCisvKiBUaGUgTWFnbmlmaWNlbnQgQ2xlYXJmaXg6IFVwZGF0ZWQgdG8gcHJldmVudCBtYXJnaW4tY29sbGFwc2luZyBvbiBjaGlsZCBlbGVtZW50cy4KKyAgIGoubXAvYmVzdGNsZWFyZml4ICovCisuY2xlYXJmaXg6YmVmb3JlLCAuY2xlYXJmaXg6YWZ0ZXIgeyBjb250ZW50OiAiXDAwMjAiOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAwOyBvdmVyZmxvdzogaGlkZGVuOyB9CisuY2xlYXJmaXg6YWZ0ZXIgeyBjbGVhcjogYm90aDsgfQorLyogRml4IGNsZWFyZml4OiBibHVlcHJpbnRjc3MubGlnaHRob3VzZWFwcC5jb20vcHJvamVjdHMvMTUzMTgvdGlja2V0cy81LWV4dHJhLW1hcmdpbi1wYWRkaW5nLWJvdHRvbS1vZi1wYWdlICovCisuY2xlYXJmaXggeyB6b29tOiAxOyB9CisKKworCisvKioKKyAqIE1lZGlhIHF1ZXJpZXMgZm9yIHJlc3BvbnNpdmUgZGVzaWduLgorICoKKyAqIFRoZXNlIGZvbGxvdyBhZnRlciBwcmltYXJ5IHN0eWxlcyBzbyB0aGV5IHdpbGwgc3VjY2Vzc2Z1bGx5IG92ZXJyaWRlLgorICovCisKK0BtZWRpYSBhbGwgYW5kIChvcmllbnRhdGlvbjpwb3J0cmFpdCkgeworICAvKiBTdHlsZSBhZGp1c3RtZW50cyBmb3IgcG9ydHJhaXQgbW9kZSBnb2VzIGhlcmUgKi8KKworfQorCitAbWVkaWEgYWxsIGFuZCAob3JpZW50YXRpb246bGFuZHNjYXBlKSB7CisgIC8qIFN0eWxlIGFkanVzdG1lbnRzIGZvciBsYW5kc2NhcGUgbW9kZSBnb2VzIGhlcmUgKi8KKworfQorCisvKiBHcmFkZS1BIE1vYmlsZSBCcm93c2VycyAoT3BlcmEgTW9iaWxlLCBNb2JpbGUgU2FmYXJpLCBBbmRyb2lkIENocm9tZSkKKyAgIGNvbnNpZGVyIHRoaXM6IHd3dy5jbG91ZGZvdXIuY29tL2Nzcy1tZWRpYS1xdWVyeS1mb3ItbW9iaWxlLWlzLWZvb2xzLWdvbGQvICovCitAbWVkaWEgc2NyZWVuIGFuZCAobWF4LWRldmljZS13aWR0aDogNDgwcHgpIHsKKworCisgIC8qIFVuY29tbWVudCBpZiB5b3UgZG9uJ3Qgd2FudCBpT1MgYW5kIFdpbk1vYmlsZSB0byBtb2JpbGUtb3B0aW1pemUgdGhlIHRleHQgZm9yIHlvdTogai5tcC90ZXh0c2l6ZWFkanVzdCAqLworICAvKiBodG1sIHsgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0Om5vbmU7IC1tcy10ZXh0LXNpemUtYWRqdXN0Om5vbmU7IH0gKi8KK30KKworCisvKioKKyAqIFByaW50IHN0eWxlcy4KKyAqCisgKiBJbmxpbmVkIHRvIGF2b2lkIHJlcXVpcmVkIEhUVFAgY29ubmVjdGlvbjogd3d3LnBocGllZC5jb20vZGVsYXktbG9hZGluZy15b3VyLXByaW50LWNzcy8KKyAqLworQG1lZGlhIHByaW50IHsKKyAgKiB7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7IGNvbG9yOiBibGFjayAhaW1wb3J0YW50OyB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OyBmaWx0ZXI6bm9uZSAhaW1wb3J0YW50OworICAtbXMtZmlsdGVyOiBub25lICFpbXBvcnRhbnQ7IH0gLyogQmxhY2sgcHJpbnRzIGZhc3Rlcjogc2FuYmVpamkuY29tL2FyY2hpdmVzLzk1MyAqLworICBhLCBhOnZpc2l0ZWQgeyBjb2xvcjogIzQ0NCAhaW1wb3J0YW50OyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgfQorICBhW2hyZWZdOmFmdGVyIHsgY29udGVudDogIiAoIiBhdHRyKGhyZWYpICIpIjsgfQorICBhYmJyW3RpdGxlXTphZnRlciB7IGNvbnRlbnQ6ICIgKCIgYXR0cih0aXRsZSkgIikiOyB9CisgIC5pciBhOmFmdGVyLCBhW2hyZWZePSJqYXZhc2NyaXB0OiJdOmFmdGVyLCBhW2hyZWZePSIjIl06YWZ0ZXIgeyBjb250ZW50OiAiIjsgfSAgLyogRG9uJ3Qgc2hvdyBsaW5rcyBmb3IgaW1hZ2VzLCBvciBqYXZhc2NyaXB0L2ludGVybmFsIGxpbmtzICovCisgIHByZSwgYmxvY2txdW90ZSB7IGJvcmRlcjogMXB4IHNvbGlkICM5OTk7IHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDsgfQorICB0aGVhZCB7IGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsgfSAvKiBjc3MtZGlzY3Vzcy5pbmN1dGlvLmNvbS93aWtpL1ByaW50aW5nX1RhYmxlcyAqLworICB0ciwgaW1nIHsgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkOyB9CisgIEBwYWdlIHsgbWFyZ2luOiAwLjVjbTsgfQorICBwLCBoMiwgaDMgeyBvcnBoYW5zOiAzOyB3aWRvd3M6IDM7IH0KKyAgaDIsIGgzeyBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZDsgfQorfQorCmRpZmYgLS1naXQgYS9hcGkvZmF2aWNvbi5pY28gYi9hcGkvZmF2aWNvbi5pY28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjMGQyOQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS9mYXZpY29uLmljbwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcGkvaW5kZXguaHRtbCBiL2FwaS9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViM2UyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcGkvaW5kZXguaHRtbApAQCAtMCwwICsxLDEyMyBAQAorPCFkb2N0eXBlIGh0bWw+Cis8IS0tIHBhdWxpcmlzaC5jb20vMjAwOC9jb25kaXRpb25hbC1zdHlsZXNoZWV0cy12cy1jc3MtaGFja3MtYW5zd2VyLW5laXRoZXIvIC0tPgorPCEtLVtpZiBsdCBJRSA3IF0+IDxodG1sIGNsYXNzPSJuby1qcyBpZTYiIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cis8IS0tW2lmIElFIDcgXT4gICAgPGh0bWwgY2xhc3M9Im5vLWpzIGllNyIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4KKzwhLS1baWYgSUUgOCBdPiAgICA8aHRtbCBjbGFzcz0ibm8tanMgaWU4IiBsYW5nPSJlbiI+IDwhW2VuZGlmXS0tPgorPCEtLVtpZiAoZ3RlIElFIDkpfCEoSUUpXT48IS0tPiA8aHRtbCBjbGFzcz0ibm8tanMiIGxhbmc9ImVuIj4gPCEtLTwhW2VuZGlmXS0tPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKworICA8IS0tIEFsd2F5cyBmb3JjZSBsYXRlc3QgSUUgcmVuZGVyaW5nIGVuZ2luZSAoZXZlbiBpbiBpbnRyYW5ldCkgJiBDaHJvbWUgRnJhbWUKKyAgICAgICBSZW1vdmUgdGhpcyBpZiB5b3UgdXNlIHRoZSAuaHRhY2Nlc3MgLS0+CisgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+CisKKyAgPHRpdGxlPkFwYWNoZSBEYXRhIEdvdmVybmFuY2UgQVBJczwvdGl0bGU+CisKKyAgPCEtLSBNb2JpbGUgdmlld3BvcnQgb3B0aW1pemVkOiBqLm1wL2JwbGF0ZXZpZXdwb3J0IC0tPgorICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CisKKyAgPCEtLSBDU1M6IGltcGxpZWQgbWVkaWE9ImFsbCIgLS0+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3N0eWxlLmNzcz92PTIiPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9wcmV0dGlmeS5jc3MiPgorCisgIDwhLS0gQWxsIEphdmFTY3JpcHQgYXQgdGhlIGJvdHRvbSwgZXhjZXB0IGZvciBNb2Rlcm5penIgd2hpY2ggZW5hYmxlcyBIVE1MNSBlbGVtZW50cyAmIGZlYXR1cmUgZGV0ZWN0cyAtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvbW9kZXJuaXpyLTEuNy5taW4uanMiPjwvc2NyaXB0PgorCis8L2hlYWQ+CisKKzxib2R5IGNsYXNzPSJob21lIj4KKworICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgIDxoZWFkZXI+CisgICAgICA8ZGl2IGlkPSJoZWFkZXIiIGNsYXNzPSJjb2x1bW4gZmlyc3QgbGFzdCBzcGFuLTIwIj4KKyAgICAgICAgPGRpdiBpZD0ic2l0ZS1uYW1lIiBjbGFzcz0iY29sdW1uIHNwYW4tMTggYXBwZW5kLTEgcHJlcGVuZC0xIGZpcnN0IGxhc3QiPjxhIGhyZWY9ImluZGV4Lmh0bWwiPkFwYWNoZSBEYXRhIEdvdmVybmFuY2UgQVBJczwvYT48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0icHJpbWFyeSIgY2xhc3M9ImNvbHVtbiBzcGFuLTE4IGFwcGVuZC0xIHByZXBlbmQtMSBmaXJzdCBsYXN0Ij4KKyAgICAgICAgICA8dWwgY2xhc3M9Im5hdmlnYXRpb24iPgorICAgICAgICAgICAgPGxpIGlkPSJuYXYtcmVzdCI+PGEgaHJlZj0icmVzdC5odG1sIj5SRVNUPC9hPjwvbGk+CisgICAgICAgICAgICA8bGkgaWQ9Im5hdi1kYXRhIj48YSBocmVmPSJtb2RlbC5odG1sIj5EYXRhIE1vZGVsPC9hPjwvbGk+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXY+CisgICAgICAgICAgPHVsIGNsYXNzPSJ4YnJlYWRjcnVtYnMiIGlkPSJicmVhZGNydW1icyI+CisgICAgICAgICAgICA8bGkgY2xhc3M9ImN1cnJlbnQiPgorICAgICAgICAgICAgICA8YSBocmVmPSJpbmRleC5odG1sIiBjbGFzcz0iaG9tZSI+SG9tZTwvYT4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2hlYWRlcj4KKyAgICA8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29sdW1uIGZpcnN0IGxhc3Qgc3Bhbi0yMCI+CisKKyAgICAgIDxoMT5SRVNUIFJlc291cmNlczwvaDE+CisgICAgICA8cD4KKyAgICAgICAgVGhpcyBBUEkgc3VwcG9ydHMgYSA8YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JlcHJlc2VudGF0aW9uYWxfU3RhdGVfVHJhbnNmZXIiPlJlcHJlc2VudGF0aW9uYWwgU3RhdGUgVHJhbnNmZXIgKFJFU1QpPC9hPgorICAgICAgICBtb2RlbCBmb3IgYWNjZXNzaW5nIGEgc2V0IG9mIHJlc291cmNlcyB0aHJvdWdoIGEgZml4ZWQgc2V0IG9mIG9wZXJhdGlvbnMuIFRoZSBmb2xsb3dpbmcgcmVzb3VyY2VzIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIFJFU1RmdWwgbW9kZWw6CisgICAgICA8L3A+CisgICAgICA8dWw+CisgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9BZG1pblJlc291cmNlLmh0bWwiPkFkbWluUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX0VudGl0eVJlc291cmNlLmh0bWwiPkVudGl0eVJlc291cmNlPC9hPjwvbGk+CisgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9IaXZlTGluZWFnZVJlc291cmNlLmh0bWwiPkhpdmVMaW5lYWdlUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX01ldGFkYXRhRGlzY292ZXJ5UmVzb3VyY2UuaHRtbCI+TWV0YWRhdGFEaXNjb3ZlcnlSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfUmV4c3RlckdyYXBoUmVzb3VyY2UuaHRtbCI+UmV4c3RlckdyYXBoUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX1R5cGVzUmVzb3VyY2UuaHRtbCI+VHlwZXNSZXNvdXJjZTwvYT48L2xpPgorICAgICAgPC91bD4KKyAgICAgIDxwPgorICAgICAgICBUaGVyZSBpcyBhbHNvIGEgPGEgaHJlZj0iYXBwbGljYXRpb24ud2FkbCI+V0FETCBkb2N1bWVudDwvYT4gZGVzY3JpYmluZyB0aGUgUkVTVCBBUEkuCisgICAgICA8L3A+CisKKyAgICA8aDE+RGF0YSBNb2RlbDwvaDE+CisKKyAgICA8cD4KKyAgICAgIEFsbCBlbmRwb2ludHMgYWN0IG9uIGEgY29tbW9uIHNldCBvZiBkYXRhLiBUaGUgZGF0YSBjYW4gYmUgcmVwcmVzZW50ZWQgd2l0aCBkaWZmZXJlbmNlIG1lZGlhIChpLmUuICJNSU1FIikgdHlwZXMsIGRlcGVuZGluZyBvbiB0aGUgZW5kcG9pbnQKKyAgICAgIHRoYXQgY29uc3VtZXMgYW5kL29yIHByb2R1Y2VzIHRoZSBkYXRhLiBUaGUgZGF0YSBjYW4gZGVzY3JpYmVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1hNTC9TY2hlbWEiPlhNTCBTY2hlbWE8L2E+LCB3aGljaCBkZWZpbml0aXZlbHkKKyAgICAgIGRlc2NyaWJlcyB0aGUgWE1MIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRhLCBidXQgaXMgYWxzbyB1c2VmdWwgZm9yIGRlc2NyaWJpbmcgdGhlIG90aGVyIGZvcm1hdHMgb2YgdGhlIGRhdGEsIHN1Y2ggYXMgPGEgaHJlZj0iaHR0cDovL2pzb24ub3JnIj5KU09OPC9hPi4KKyAgICA8L3A+CisKKyAgICA8cD4KKyAgICAgIFRoaXMgZG9jdW1lbnQgd2lsbCBkZXNjcmliZSB0aGUgZGF0YSB1c2luZyB0ZXJtcyBiYXNlZCBvbiA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvU2NoZW1hIj5YTUwgU2NoZW1hPC9hPi4KKyAgICAgIERhdGEgY2FuIGJlIGdyb3VwZWQgYnkgbmFtZXNwYWNlLCB3aXRoIGEgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJpbmcgdGhlIDxpPmVsZW1lbnRzPC9pPiBhbmQgPGk+dHlwZXM8L2k+IG9mIHRoZSBuYW1lc3BhY2UuCisgICAgICBHZW5lcmFsbHkgc3BlYWtpbmcsIDxpPnR5cGVzPC9pPiBkZWZpbmUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZGF0YSBhbmQgPGk+ZWxlbWVudHM8L2k+IGFyZSA8aT5pbnN0YW5jZXM8L2k+IG9mIGEgdHlwZS4gRm9yIGV4YW1wbGUsCisgICAgICA8aT5lbGVtZW50czwvaT4gYXJlIHVzdWFsbHkgcHJvZHVjZWQgYnkgKG9yIGNvbnN1bWVkIGJ5KSBhIFJFU1QgZW5kcG9pbnQsIGFuZCB0aGUgc3RydWN0dXJlIG9mIGVhY2ggZWxlbWVudCBpcyBkZXNjcmliZWQgYnkKKyAgICAgIGl0cyA8aT50eXBlPC9pPi4KKyAgICA8L3A+CisKKworICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiIC8+CisgICAgPC9kaXY+CisgICAgPGZvb3Rlcj4KKyAgICAgIDxkaXYgaWQ9ImZvb3RlciI+CisgICAgICAgIEdlbmVyYXRlZCBieSA8YSBocmVmPSJodHRwOi8vZW51bmNpYXRlLmNvZGVoYXVzLm9yZyI+RW51bmNpYXRlPC9hPi4KKyAgICAgIDwvZGl2PgorICAgIDwvZm9vdGVyPgorICA8L2Rpdj4gPCEtLSEgZW5kIG9mICNjb250YWluZXIgLS0+CisKKyAgPCEtLSBKYXZhU2NyaXB0IGF0IHRoZSBib3R0b20gZm9yIGZhc3QgcGFnZSBsb2FkaW5nIC0tPgorCisgIDwhLS0gR3JhYiBHb29nbGUgQ0ROJ3MgalF1ZXJ5LCB3aXRoIGEgcHJvdG9jb2wgcmVsYXRpdmUgVVJMOyBmYWxsIGJhY2sgdG8gbG9jYWwgaWYgbmVjZXNzYXJ5IC0tPgorICA8c2NyaXB0IHNyYz0iLy9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS41LjEvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD53aW5kb3cualF1ZXJ5IHx8IGRvY3VtZW50LndyaXRlKCI8c2NyaXB0IHNyYz0nanMvbGlicy9qcXVlcnktMS41LjEubWluLmpzJz5ceDNDL3NjcmlwdD4iKTwvc2NyaXB0PgorCisgIDwhLS1tYW5hZ2UgdGhlIG5hdmlnYXRpb24gbWVudS0tPgorICA8c2NyaXB0IHNyYz0ianMvbGlicy94YnJlYWRjcnVtYnMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PgorICAgICQoZnVuY3Rpb24oKSB7CisgICAgICAkKCcjYnJlYWRjcnVtYnMnKS54QnJlYWRjcnVtYnMoKTsKKyAgICB9KTsKKyAgPC9zY3JpcHQ+CisKKworICA8IS0tIHByZXR0aWZ5IGNvZGUgYmxvY2tzLiBzZWUgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2dvb2dsZS1jb2RlLXByZXR0aWZ5LyAtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvcHJldHRpZnkvcHJldHRpZnkuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PgorICAgICQoZnVuY3Rpb24oKSB7CisgICAgICBwcmV0dHlQcmludCgpOworICAgIH0pOworICA8L3NjcmlwdD4KKworICA8IS0tW2lmIGx0IElFIDcgXT4KKyAgICA8c2NyaXB0IHNyYz0ianMvbGlicy9kZF9iZWxhdGVkcG5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PkREX2JlbGF0ZWRQTkcuZml4KCJpbWcsIC5wbmdfYmciKTsgLy8gRml4IGFueSA8aW1nPiBvciAucG5nX2JnIGJnLWltYWdlcy4gQWxzbywgcGxlYXNlIHJlYWQgZ29vLmdsL21aaXliIDwvc2NyaXB0PgorICA8IVtlbmRpZl0tLT4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvYXBpL2pzL2xpYnMvZGRfYmVsYXRlZHBuZy5qcyBiL2FwaS9qcy9saWJzL2RkX2JlbGF0ZWRwbmcuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA2MmZiMwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS9qcy9saWJzL2RkX2JlbGF0ZWRwbmcuanMKQEAgLTAsMCArMSwxMyBAQAorLyoqCisqIEREX2JlbGF0ZWRQTkc6IEFkZHMgSUU2IHN1cHBvcnQ6IFBORyBpbWFnZXMgZm9yIENTUyBiYWNrZ3JvdW5kLWltYWdlIGFuZCBIVE1MIDxJTUcvPi4KKyogQXV0aG9yOiBEcmV3IERpbGxlcgorKiBFbWFpbDogZHJldy5kaWxsZXJAZ21haWwuY29tCisqIFVSTDogaHR0cDovL3d3dy5kaWxsZXJkZXNpZ24uY29tL2V4cGVyaW1lbnQvRERfYmVsYXRlZFBORy8KKyogVmVyc2lvbjogMC4wLjhhCisqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZTogaHR0cDovL2RpbGxlcmRlc2lnbi5jb20vZXhwZXJpbWVudC9ERF9iZWxhdGVkUE5HLyNsaWNlbnNlCisqCisqIEV4YW1wbGUgdXNhZ2U6CisqIEREX2JlbGF0ZWRQTkcuZml4KCcucG5nX2JnJyk7IC8vIGFyZ3VtZW50IGlzIGEgQ1NTIHNlbGVjdG9yCisqIEREX2JlbGF0ZWRQTkcuZml4UG5nKCBzb21lTm9kZSApOyAvLyBhcmd1bWVudCBpcyBhbiBIVE1MRG9tRWxlbWVudAorKiovCit2YXIgRERfYmVsYXRlZFBORz17bnM6IkREX2JlbGF0ZWRQTkciLGltZ1NpemU6e30sZGVsYXk6MTAsbm9kZXNGaXhlZDowLGNyZWF0ZVZtbE5hbWVTcGFjZTpmdW5jdGlvbigpe2lmKGRvY3VtZW50Lm5hbWVzcGFjZXMmJiFkb2N1bWVudC5uYW1lc3BhY2VzW3RoaXMubnNdKXtkb2N1bWVudC5uYW1lc3BhY2VzLmFkZCh0aGlzLm5zLCJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIpfX0sY3JlYXRlVm1sU3R5bGVTaGVldDpmdW5jdGlvbigpe3ZhciBiLGE7Yj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO2Iuc2V0QXR0cmlidXRlKCJtZWRpYSIsInNjcmVlbiIpO2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5maXJzdENoaWxkLmluc2VydEJlZm9yZShiLGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5maXJzdENoaWxkLmZpcnN0Q2hpbGQpO2lmKGIuc3R5bGVTaGVldCl7Yj1iLnN0eWxlU2hlZXQ7Yi5hZGRSdWxlKHRoaXMubnMrIlxcOioiLCJ7YmVoYXZpb3I6dXJsKCNkZWZhdWx0I1ZNTCl9Iik7Yi5hZGRSdWxlKHRoaXMubnMrIlxcOnNoYXBlIiwicG9zaXRpb246YWJzb2x1dGU7Iik7Yi5hZGRSdWxlKCJpbWcuIit0aGlzLm5zKyJfc2l6ZUZpbmRlciIsImJlaGF2aW9yOm5vbmU7IGJvcmRlcjpub25lOyBwb3NpdGlvbjphYnNvbHV0ZTsgei1pbmRleDotMTsgdG9wOi0xMDAwMHB4OyB2aXNpYmlsaXR5OmhpZGRlbjsiKTt0aGlzLnNjcmVlblN0eWxlU2hlZXQ9YjthPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7YS5zZXRBdHRyaWJ1dGUoIm1lZGlhIiwicHJpbnQiKTtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZmlyc3RDaGlsZC5pbnNlcnRCZWZvcmUoYSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZmlyc3RDaGlsZC5maXJzdENoaWxkKTthPWEuc3R5bGVTaGVldDthLmFkZFJ1bGUodGhpcy5ucysiXFw6KiIsIntkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7fSIpO2EuYWRkUnVsZSgiaW1nLiIrdGhpcy5ucysiX3NpemVGaW5kZXIiLCJ7ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O30iKX19LHJlYWRQcm9wZXJ0eUNoYW5nZTpmdW5jdGlvbigpe3ZhciBiLGMsYTtiPWV2ZW50LnNyY0VsZW1lbnQ7aWYoIWIudm1sSW5pdGlhdGVkKXtyZXR1cm59aWYoZXZlbnQucHJvcGVydHlOYW1lLnNlYXJjaCgiYmFja2dyb3VuZCIpIT0tMXx8ZXZlbnQucHJvcGVydHlOYW1lLnNlYXJjaCgiYm9yZGVyIikhPS0xKXtERF9iZWxhdGVkUE5HLmFwcGx5Vk1MKGIpfWlmKGV2ZW50LnByb3BlcnR5TmFtZT09InN0eWxlLmRpc3BsYXkiKXtjPShiLmN1cnJlbnRTdHlsZS5kaXNwbGF5PT0ibm9uZSIpPyJub25lIjoiYmxvY2siO2ZvcihhIGluIGIudm1sKXtpZihiLnZtbC5oYXNPd25Qcm9wZXJ0eShhKSl7Yi52bWxbYV0uc2hhcGUuc3R5bGUuZGlzcGxheT1jfX19aWYoZXZlbnQucHJvcGVydHlOYW1lLnNlYXJjaCgiZmlsdGVyIikhPS0xKXtERF9iZWxhdGVkUE5HLnZtbE9wYWNpdHkoYil9fSx2bWxPcGFjaXR5OmZ1bmN0aW9uKGIpe2lmKGIuY3VycmVudFN0eWxlLmZpbHRlci5zZWFyY2goImxwaGEiKSE9LTEpe3ZhciBhPWIuY3VycmVudFN0eWxlLmZpbHRlcjthPXBhcnNlSW50KGEuc3Vic3RyaW5nKGEubGFzdEluZGV4T2YoIj0iKSsxLGEubGFzdEluZGV4T2YoIikiKSksMTApLzEwMDtiLnZtbC5jb2xvci5zaGFwZS5zdHlsZS5maWx0ZXI9Yi5jdXJyZW50U3R5bGUuZmlsdGVyO2Iudm1sLmltYWdlLmZpbGwub3BhY2l0eT1hfX0saGFuZGxlUHNldWRvSG92ZXI6ZnVuY3Rpb24oYSl7c2V0VGltZW91dChmdW5jdGlvbigpe0REX2JlbGF0ZWRQTkcuYXBwbHlWTUwoYSl9LDEpfSxmaXg6ZnVuY3Rpb24oYSl7aWYodGhpcy5zY3JlZW5TdHlsZVNoZWV0KXt2YXIgYyxiO2M9YS5zcGxpdCgiLCIpO2ZvcihiPTA7YjxjLmxlbmd0aDtiKyspe3RoaXMuc2NyZWVuU3R5bGVTaGVldC5hZGRSdWxlKGNbYl0sImJlaGF2aW9yOmV4cHJlc3Npb24oRERfYmVsYXRlZFBORy5maXhQbmcodGhpcykpIil9fX0sYXBwbHlWTUw6ZnVuY3Rpb24oYSl7YS5ydW50aW1lU3R5bGUuY3NzVGV4dD0iIjt0aGlzLnZtbEZpbGwoYSk7dGhpcy52bWxPZmZzZXRzKGEpO3RoaXMudm1sT3BhY2l0eShhKTtpZihhLmlzSW1nKXt0aGlzLmNvcHlJbWFnZUJvcmRlcnMoYSl9fSxhdHRhY2hIYW5kbGVyczpmdW5jdGlvbihpKXt2YXIgZCxjLGcsZSxiLGY7ZD10aGlzO2M9e3Jlc2l6ZToidm1sT2Zmc2V0cyIsbW92ZToidm1sT2Zmc2V0cyJ9O2lmKGkubm9kZU5hbWU9PSJBIil7ZT17bW91c2VsZWF2ZToiaGFuZGxlUHNldWRvSG92ZXIiLG1vdXNlZW50ZXI6ImhhbmRsZVBzZXVkb0hvdmVyIixmb2N1czoiaGFuZGxlUHNldWRvSG92ZXIiLGJsdXI6ImhhbmRsZVBzZXVkb0hvdmVyIn07Zm9yKGIgaW4gZSl7aWYoZS5oYXNPd25Qcm9wZXJ0eShiKSl7Y1tiXT1lW2JdfX19Zm9yKGYgaW4gYyl7aWYoYy5oYXNPd25Qcm9wZXJ0eShmKSl7Zz1mdW5jdGlvbigpe2RbY1tmXV0oaSl9O2kuYXR0YWNoRXZlbnQoIm9uIitmLGcpfX1pLmF0dGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIix0aGlzLnJlYWRQcm9wZXJ0eUNoYW5nZSl9LGdpdmVMYXlvdXQ6ZnVuY3Rpb24oYSl7YS5zdHlsZS56b29tPTE7aWYoYS5jdXJyZW50U3R5bGUucG9zaXRpb249PSJzdGF0aWMiKXthLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSJ9fSxjb3B5SW1hZ2VCb3JkZXJzOmZ1bmN0aW9uKGIpe3ZhciBjLGE7Yz17Ym9yZGVyU3R5bGU6dHJ1ZSxib3JkZXJXaWR0aDp0cnVlLGJvcmRlckNvbG9yOnRydWV9O2ZvcihhIGluIGMpe2lmKGMuaGFzT3duUHJvcGVydHkoYSkpe2Iudm1sLmNvbG9yLnNoYXBlLnN0eWxlW2FdPWIuY3VycmVudFN0eWxlW2FdfX19LHZtbEZpbGw6ZnVuY3Rpb24oZSl7aWYoIWUuY3VycmVudFN0eWxlKXtyZXR1cm59ZWxzZXt2YXIgZCxmLGcsYixhLGM7ZD1lLmN1cnJlbnRTdHlsZX1mb3IoYiBpbiBlLnZtbCl7aWYoZS52bWwuaGFzT3duUHJvcGVydHkoYikpe2Uudm1sW2JdLnNoYXBlLnN0eWxlLnpJbmRleD1kLnpJbmRleH19ZS5ydW50aW1lU3R5bGUuYmFja2dyb3VuZENvbG9yPSIiO2UucnVudGltZVN0eWxlLmJhY2tncm91bmRJbWFnZT0iIjtmPXRydWU7aWYoZC5iYWNrZ3JvdW5kSW1hZ2UhPSJub25lInx8ZS5pc0ltZyl7aWYoIWUuaXNJbWcpe2Uudm1sQmc9ZC5iYWNrZ3JvdW5kSW1hZ2U7ZS52bWxCZz1lLnZtbEJnLnN1YnN0cig1LGUudm1sQmcubGFzdEluZGV4T2YoJyIpJyktNSl9ZWxzZXtlLnZtbEJnPWUuc3JjfWc9dGhpcztpZighZy5pbWdTaXplW2Uudm1sQmddKXthPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpO2cuaW1nU2l6ZVtlLnZtbEJnXT1hO2EuY2xhc3NOYW1lPWcubnMrIl9zaXplRmluZGVyIjthLnJ1bnRpbWVTdHlsZS5jc3NUZXh0PSJiZWhhdmlvcjpub25lOyBwb3NpdGlvbjphYnNvbHV0ZTsgbGVmdDotMTAwMDBweDsgdG9wOi0xMDAwMHB4OyBib3JkZXI6bm9uZTsgbWFyZ2luOjA7IHBhZGRpbmc6MDsiO2M9ZnVuY3Rpb24oKXt0aGlzLndpZHRoPXRoaXMub2Zmc2V0V2lkdGg7dGhpcy5oZWlnaHQ9dGhpcy5vZmZzZXRIZWlnaHQ7Zy52bWxPZmZzZXRzKGUpfTthLmF0dGFjaEV2ZW50KCJvbmxvYWQiLGMpO2Euc3JjPWUudm1sQmc7YS5yZW1vdmVBdHRyaWJ1dGUoIndpZHRoIik7YS5yZW1vdmVBdHRyaWJ1dGUoImhlaWdodCIpO2RvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGEsZG9jdW1lbnQuYm9keS5maXJzdENoaWxkKX1lLnZtbC5pbWFnZS5maWxsLnNyYz1lLnZtbEJnO2Y9ZmFsc2V9ZS52bWwuaW1hZ2UuZmlsbC5vbj0hZjtlLnZtbC5pbWFnZS5maWxsLmNvbG9yPSJub25lIjtlLnZtbC5jb2xvci5zaGFwZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9ZC5iYWNrZ3JvdW5kQ29sb3I7ZS5ydW50aW1lU3R5bGUuYmFja2dyb3VuZEltYWdlPSJub25lIjtlLnJ1bnRpbWVTdHlsZS5iYWNrZ3JvdW5kQ29sb3I9InRyYW5zcGFyZW50In0sdm1sT2Zmc2V0czpmdW5jdGlvbihkKXt2YXIgaCxuLGEsZSxnLG0sZixsLGosaSxrO2g9ZC5jdXJyZW50U3R5bGU7bj17VzpkLmNsaWVudFdpZHRoKzEsSDpkLmNsaWVudEhlaWdodCsxLHc6dGhpcy5pbWdTaXplW2Qudm1sQmddLndpZHRoLGg6dGhpcy5pbWdTaXplW2Qudm1sQmddLmhlaWdodCxMOmQub2Zmc2V0TGVmdCxUOmQub2Zmc2V0VG9wLGJMVzpkLmNsaWVudExlZnQsYlRXOmQuY2xpZW50VG9wfTthPShuLkwrbi5iTFc9PTEpPzE6MDtlPWZ1bmN0aW9uKGIscCxxLGMscyx1KXtiLmNvb3Jkc2l6ZT1jKyIsIitzO2IuY29vcmRvcmlnaW49dSsiLCIrdTtiLnBhdGg9Im0wLDBsIitjKyIsMGwiK2MrIiwiK3MrImwwLCIrcysiIHhlIjtiLnN0eWxlLndpZHRoPWMrInB4IjtiLnN0eWxlLmhlaWdodD1zKyJweCI7Yi5zdHlsZS5sZWZ0PXArInB4IjtiLnN0eWxlLnRvcD1xKyJweCJ9O2UoZC52bWwuY29sb3Iuc2hhcGUsKG4uTCsoZC5pc0ltZz8wOm4uYkxXKSksKG4uVCsoZC5pc0ltZz8wOm4uYlRXKSksKG4uVy0xKSwobi5ILTEpLDApO2UoZC52bWwuaW1hZ2Uuc2hhcGUsKG4uTCtuLmJMVyksKG4uVCtuLmJUVyksKG4uVyksKG4uSCksMSk7Zz17WDowLFk6MH07aWYoZC5pc0ltZyl7Zy5YPXBhcnNlSW50KGgucGFkZGluZ0xlZnQsMTApKzE7Zy5ZPXBhcnNlSW50KGgucGFkZGluZ1RvcCwxMCkrMX1lbHNle2ZvcihqIGluIGcpe2lmKGcuaGFzT3duUHJvcGVydHkoaikpe3RoaXMuZmlndXJlUGVyY2VudGFnZShnLG4saixoWyJiYWNrZ3JvdW5kUG9zaXRpb24iK2pdKX19fWQudm1sLmltYWdlLmZpbGwucG9zaXRpb249KGcuWC9uLlcpKyIsIisoZy5ZL24uSCk7bT1oLmJhY2tncm91bmRSZXBlYXQ7Zj17VDoxLFI6bi5XK2EsQjpuLkgsTDoxK2F9O2w9e1g6e2IxOiJMIixiMjoiUiIsZDoiVyJ9LFk6e2IxOiJUIixiMjoiQiIsZDoiSCJ9fTtpZihtIT0icmVwZWF0Inx8ZC5pc0ltZyl7aT17VDooZy5ZKSxSOihnLlgrbi53KSxCOihnLlkrbi5oKSxMOihnLlgpfTtpZihtLnNlYXJjaCgicmVwZWF0LSIpIT0tMSl7az1tLnNwbGl0KCJyZXBlYXQtIilbMV0udG9VcHBlckNhc2UoKTtpW2xba10uYjFdPTE7aVtsW2tdLmIyXT1uW2xba10uZF19aWYoaS5CPm4uSCl7aS5CPW4uSH1kLnZtbC5pbWFnZS5zaGFwZS5zdHlsZS5jbGlwPSJyZWN0KCIraS5UKyJweCAiKyhpLlIrYSkrInB4ICIraS5CKyJweCAiKyhpLkwrYSkrInB4KSJ9ZWxzZXtkLnZtbC5pbWFnZS5zaGFwZS5zdHlsZS5jbGlwPSJyZWN0KCIrZi5UKyJweCAiK2YuUisicHggIitmLkIrInB4ICIrZi5MKyJweCkifX0sZmlndXJlUGVyY2VudGFnZTpmdW5jdGlvbihkLGMsZixhKXt2YXIgYixlO2U9dHJ1ZTtiPShmPT0iWCIpO3N3aXRjaChhKXtjYXNlImxlZnQiOmNhc2UidG9wIjpkW2ZdPTA7YnJlYWs7Y2FzZSJjZW50ZXIiOmRbZl09MC41O2JyZWFrO2Nhc2UicmlnaHQiOmNhc2UiYm90dG9tIjpkW2ZdPTE7YnJlYWs7ZGVmYXVsdDppZihhLnNlYXJjaCgiJSIpIT0tMSl7ZFtmXT1wYXJzZUludChhLDEwKS8xMDB9ZWxzZXtlPWZhbHNlfX1kW2ZdPU1hdGguY2VpbChlPygoY1tiPyJXIjoiSCJdKmRbZl0pLShjW2I/InciOiJoIl0qZFtmXSkpOnBhcnNlSW50KGEsMTApKTtpZihkW2ZdJTI9PT0wKXtkW2ZdKyt9cmV0dXJuIGRbZl19LGZpeFBuZzpmdW5jdGlvbihjKXtjLnN0eWxlLmJlaGF2aW9yPSJub25lIjt2YXIgZyxiLGYsYSxkO2lmKGMubm9kZU5hbWU9PSJCT0RZInx8Yy5ub2RlTmFtZT09IlREInx8Yy5ub2RlTmFtZT09IlRSIil7cmV0dXJufWMuaXNJbWc9ZmFsc2U7aWYoYy5ub2RlTmFtZT09IklNRyIpe2lmKGMuc3JjLnRvTG93ZXJDYXNlKCkuc2VhcmNoKC9cLnBuZyQvKSE9LTEpe2MuaXNJbWc9dHJ1ZTtjLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiJ9ZWxzZXtyZXR1cm59fWVsc2V7aWYoYy5jdXJyZW50U3R5bGUuYmFja2dyb3VuZEltYWdlLnRvTG93ZXJDYXNlKCkuc2VhcmNoKCIucG5nIik9PS0xKXtyZXR1cm59fWc9RERfYmVsYXRlZFBORztjLnZtbD17Y29sb3I6e30saW1hZ2U6e319O2I9e3NoYXBlOnt9LGZpbGw6e319O2ZvcihhIGluIGMudm1sKXtpZihjLnZtbC5oYXNPd25Qcm9wZXJ0eShhKSl7Zm9yKGQgaW4gYil7aWYoYi5oYXNPd25Qcm9wZXJ0eShkKSl7Zj1nLm5zKyI6IitkO2Mudm1sW2FdW2RdPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZil9fWMudm1sW2FdLnNoYXBlLnN0cm9rZWQ9ZmFsc2U7Yy52bWxbYV0uc2hhcGUuYXBwZW5kQ2hpbGQoYy52bWxbYV0uZmlsbCk7Yy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjLnZtbFthXS5zaGFwZSxjKX19Yy52bWwuaW1hZ2Uuc2hhcGUuZmlsbGNvbG9yPSJub25lIjtjLnZtbC5pbWFnZS5maWxsLnR5cGU9InRpbGUiO2Mudm1sLmNvbG9yLmZpbGwub249ZmFsc2U7Zy5hdHRhY2hIYW5kbGVycyhjKTtnLmdpdmVMYXlvdXQoYyk7Zy5naXZlTGF5b3V0KGMub2Zmc2V0UGFyZW50KTtjLnZtbEluaXRpYXRlZD10cnVlO2cuYXBwbHlWTUwoYyl9fTt0cnl7ZG9jdW1lbnQuZXhlY0NvbW1hbmQoIkJhY2tncm91bmRJbWFnZUNhY2hlIixmYWxzZSx0cnVlKX1jYXRjaChyKXt9RERfYmVsYXRlZFBORy5jcmVhdGVWbWxOYW1lU3BhY2UoKTtERF9iZWxhdGVkUE5HLmNyZWF0ZVZtbFN0eWxlU2hlZXQoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcGkvanMvbGlicy9qcXVlcnktMS41LjEubWluLmpzIGIvYXBpL2pzL2xpYnMvanF1ZXJ5LTEuNS4xLm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGZkNjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpL2pzL2xpYnMvanF1ZXJ5LTEuNS4xLm1pbi5qcwpAQCAtMCwwICsxLDE2IEBACisvKiEKKyAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjEuNS4xCisgKiBodHRwOi8vanF1ZXJ5LmNvbS8KKyAqCisgKiBDb3B5cmlnaHQgMjAxMSwgSm9obiBSZXNpZworICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuCisgKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCisgKgorICogSW5jbHVkZXMgU2l6emxlLmpzCisgKiBodHRwOi8vc2l6emxlanMuY29tLworICogQ29weXJpZ2h0IDIwMTEsIFRoZSBEb2pvIEZvdW5kYXRpb24KKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQsIEJTRCwgYW5kIEdQTCBMaWNlbnNlcy4KKyAqCisgKiBEYXRlOiBXZWQgRmViIDIzIDEzOjU1OjI5IDIwMTEgLTA1MDAKKyAqLworKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gY2coYSl7cmV0dXJuIGQuaXNXaW5kb3coYSk/YTphLm5vZGVUeXBlPT09OT9hLmRlZmF1bHRWaWV3fHxhLnBhcmVudFdpbmRvdzohMX1mdW5jdGlvbiBjZChhKXtpZighYlpbYV0pe3ZhciBiPWQoIjwiK2ErIj4iKS5hcHBlbmRUbygiYm9keSIpLGM9Yi5jc3MoImRpc3BsYXkiKTtiLnJlbW92ZSgpO2lmKGM9PT0ibm9uZSJ8fGM9PT0iIiljPSJibG9jayI7YlpbYV09Y31yZXR1cm4gYlpbYV19ZnVuY3Rpb24gY2MoYSxiKXt2YXIgYz17fTtkLmVhY2goY2IuY29uY2F0LmFwcGx5KFtdLGNiLnNsaWNlKDAsYikpLGZ1bmN0aW9uKCl7Y1t0aGlzXT1hfSk7cmV0dXJuIGN9ZnVuY3Rpb24gYlkoKXt0cnl7cmV0dXJuIG5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYil7fX1mdW5jdGlvbiBiWCgpe3RyeXtyZXR1cm4gbmV3IGEuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goYil7fX1mdW5jdGlvbiBiVygpe2QoYSkudW5sb2FkKGZ1bmN0aW9uKCl7Zm9yKHZhciBhIGluIGJVKWJVW2FdKDAsMSl9KX1mdW5jdGlvbiBiUShhLGMpe2EuZGF0YUZpbHRlciYmKGM9YS5kYXRhRmlsdGVyKGMsYS5kYXRhVHlwZSkpO3ZhciBlPWEuZGF0YVR5cGVzLGY9e30sZyxoLGk9ZS5sZW5ndGgsaixrPWVbMF0sbCxtLG4sbyxwO2ZvcihnPTE7ZzxpO2crKyl7aWYoZz09PTEpZm9yKGggaW4gYS5jb252ZXJ0ZXJzKXR5cGVvZiBoPT09InN0cmluZyImJihmW2gudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2hdKTtsPWssaz1lW2ddO2lmKGs9PT0iKiIpaz1sO2Vsc2UgaWYobCE9PSIqIiYmbCE9PWspe209bCsiICIrayxuPWZbbV18fGZbIiogIitrXTtpZighbil7cD1iO2ZvcihvIGluIGYpe2o9by5zcGxpdCgiICIpO2lmKGpbMF09PT1sfHxqWzBdPT09IioiKXtwPWZbalsxXSsiICIra107aWYocCl7bz1mW29dLG89PT0hMD9uPXA6cD09PSEwJiYobj1vKTticmVha319fX0hbiYmIXAmJmQuZXJyb3IoIk5vIGNvbnZlcnNpb24gZnJvbSAiK20ucmVwbGFjZSgiICIsIiB0byAiKSksbiE9PSEwJiYoYz1uP24oYyk6cChvKGMpKSl9fXJldHVybiBjfWZ1bmN0aW9uIGJQKGEsYyxkKXt2YXIgZT1hLmNvbnRlbnRzLGY9YS5kYXRhVHlwZXMsZz1hLnJlc3BvbnNlRmllbGRzLGgsaSxqLGs7Zm9yKGkgaW4gZylpIGluIGQmJihjW2dbaV1dPWRbaV0pO3doaWxlKGZbMF09PT0iKiIpZi5zaGlmdCgpLGg9PT1iJiYoaD1hLm1pbWVUeXBlfHxjLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSk7aWYoaClmb3IoaSBpbiBlKWlmKGVbaV0mJmVbaV0udGVzdChoKSl7Zi51bnNoaWZ0KGkpO2JyZWFrfWlmKGZbMF1pbiBkKWo9ZlswXTtlbHNle2ZvcihpIGluIGQpe2lmKCFmWzBdfHxhLmNvbnZlcnRlcnNbaSsiICIrZlswXV0pe2o9aTticmVha31rfHwoaz1pKX1qPWp8fGt9aWYoail7aiE9PWZbMF0mJmYudW5zaGlmdChqKTtyZXR1cm4gZFtqXX19ZnVuY3Rpb24gYk8oYSxiLGMsZSl7aWYoZC5pc0FycmF5KGIpJiZiLmxlbmd0aClkLmVhY2goYixmdW5jdGlvbihiLGYpe2N8fGJxLnRlc3QoYSk/ZShhLGYpOmJPKGErIlsiKyh0eXBlb2YgZj09PSJvYmplY3QifHxkLmlzQXJyYXkoZik/YjoiIikrIl0iLGYsYyxlKX0pO2Vsc2UgaWYoY3x8Yj09bnVsbHx8dHlwZW9mIGIhPT0ib2JqZWN0IillKGEsYik7ZWxzZSBpZihkLmlzQXJyYXkoYil8fGQuaXNFbXB0eU9iamVjdChiKSllKGEsIiIpO2Vsc2UgZm9yKHZhciBmIGluIGIpYk8oYSsiWyIrZisiXSIsYltmXSxjLGUpfWZ1bmN0aW9uIGJOKGEsYyxkLGUsZixnKXtmPWZ8fGMuZGF0YVR5cGVzWzBdLGc9Z3x8e30sZ1tmXT0hMDt2YXIgaD1hW2ZdLGk9MCxqPWg/aC5sZW5ndGg6MCxrPWE9PT1iSCxsO2Zvcig7aTxqJiYoa3x8IWwpO2krKylsPWhbaV0oYyxkLGUpLHR5cGVvZiBsPT09InN0cmluZyImJigha3x8Z1tsXT9sPWI6KGMuZGF0YVR5cGVzLnVuc2hpZnQobCksbD1iTihhLGMsZCxlLGwsZykpKTsoa3x8IWwpJiYhZ1siKiJdJiYobD1iTihhLGMsZCxlLCIqIixnKSk7cmV0dXJuIGx9ZnVuY3Rpb24gYk0oYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7dHlwZW9mIGIhPT0ic3RyaW5nIiYmKGM9YixiPSIqIik7aWYoZC5pc0Z1bmN0aW9uKGMpKXt2YXIgZT1iLnRvTG93ZXJDYXNlKCkuc3BsaXQoYkIpLGY9MCxnPWUubGVuZ3RoLGgsaSxqO2Zvcig7ZjxnO2YrKyloPWVbZl0saj0vXlwrLy50ZXN0KGgpLGomJihoPWguc3Vic3RyKDEpfHwiKiIpLGk9YVtoXT1hW2hdfHxbXSxpW2o/InVuc2hpZnQiOiJwdXNoIl0oYyl9fX1mdW5jdGlvbiBibyhhLGIsYyl7dmFyIGU9Yj09PSJ3aWR0aCI/Ymk6YmosZj1iPT09IndpZHRoIj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0O2lmKGM9PT0iYm9yZGVyIilyZXR1cm4gZjtkLmVhY2goZSxmdW5jdGlvbigpe2N8fChmLT1wYXJzZUZsb2F0KGQuY3NzKGEsInBhZGRpbmciK3RoaXMpKXx8MCksYz09PSJtYXJnaW4iP2YrPXBhcnNlRmxvYXQoZC5jc3MoYSwibWFyZ2luIit0aGlzKSl8fDA6Zi09cGFyc2VGbG9hdChkLmNzcyhhLCJib3JkZXIiK3RoaXMrIldpZHRoIikpfHwwfSk7cmV0dXJuIGZ9ZnVuY3Rpb24gYmEoYSxiKXtiLnNyYz9kLmFqYXgoe3VybDpiLnNyYyxhc3luYzohMSxkYXRhVHlwZToic2NyaXB0In0pOmQuZ2xvYmFsRXZhbChiLnRleHR8fGIudGV4dENvbnRlbnR8fGIuaW5uZXJIVE1MfHwiIiksYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYil9ZnVuY3Rpb24gXyhhKXtyZXR1cm4iZ2V0RWxlbWVudHNCeVRhZ05hbWUiaW4gYT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6InF1ZXJ5U2VsZWN0b3JBbGwiaW4gYT9hLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKTpbXX1mdW5jdGlvbiAkKGEsYil7aWYoYi5ub2RlVHlwZT09PTEpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtiLmNsZWFyQXR0cmlidXRlcygpLGIubWVyZ2VBdHRyaWJ1dGVzKGEpO2lmKGM9PT0ib2JqZWN0IiliLm91dGVySFRNTD1hLm91dGVySFRNTDtlbHNlIGlmKGMhPT0iaW5wdXQifHxhLnR5cGUhPT0iY2hlY2tib3giJiZhLnR5cGUhPT0icmFkaW8iKXtpZihjPT09Im9wdGlvbiIpYi5zZWxlY3RlZD1hLmRlZmF1bHRTZWxlY3RlZDtlbHNlIGlmKGM9PT0iaW5wdXQifHxjPT09InRleHRhcmVhIiliLmRlZmF1bHRWYWx1ZT1hLmRlZmF1bHRWYWx1ZX1lbHNlIGEuY2hlY2tlZCYmKGIuZGVmYXVsdENoZWNrZWQ9Yi5jaGVja2VkPWEuY2hlY2tlZCksYi52YWx1ZSE9PWEudmFsdWUmJihiLnZhbHVlPWEudmFsdWUpO2IucmVtb3ZlQXR0cmlidXRlKGQuZXhwYW5kbyl9fWZ1bmN0aW9uIFooYSxiKXtpZihiLm5vZGVUeXBlPT09MSYmZC5oYXNEYXRhKGEpKXt2YXIgYz1kLmV4cGFuZG8sZT1kLmRhdGEoYSksZj1kLmRhdGEoYixlKTtpZihlPWVbY10pe3ZhciBnPWUuZXZlbnRzO2Y9ZltjXT1kLmV4dGVuZCh7fSxlKTtpZihnKXtkZWxldGUgZi5oYW5kbGUsZi5ldmVudHM9e307Zm9yKHZhciBoIGluIGcpZm9yKHZhciBpPTAsaj1nW2hdLmxlbmd0aDtpPGo7aSsrKWQuZXZlbnQuYWRkKGIsaCsoZ1toXVtpXS5uYW1lc3BhY2U/Ii4iOiIiKStnW2hdW2ldLm5hbWVzcGFjZSxnW2hdW2ldLGdbaF1baV0uZGF0YSl9fX19ZnVuY3Rpb24gWShhLGIpe3JldHVybiBkLm5vZGVOYW1lKGEsInRhYmxlIik/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6YX1mdW5jdGlvbiBPKGEsYixjKXtpZihkLmlzRnVuY3Rpb24oYikpcmV0dXJuIGQuZ3JlcChhLGZ1bmN0aW9uKGEsZCl7dmFyIGU9ISFiLmNhbGwoYSxkLGEpO3JldHVybiBlPT09Y30pO2lmKGIubm9kZVR5cGUpcmV0dXJuIGQuZ3JlcChhLGZ1bmN0aW9uKGEsZCl7cmV0dXJuIGE9PT1iPT09Y30pO2lmKHR5cGVvZiBiPT09InN0cmluZyIpe3ZhciBlPWQuZ3JlcChhLGZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVUeXBlPT09MX0pO2lmKEoudGVzdChiKSlyZXR1cm4gZC5maWx0ZXIoYixlLCFjKTtiPWQuZmlsdGVyKGIsZSl9cmV0dXJuIGQuZ3JlcChhLGZ1bmN0aW9uKGEsZSl7cmV0dXJuIGQuaW5BcnJheShhLGIpPj0wPT09Y30pfWZ1bmN0aW9uIE4oYSl7cmV0dXJuIWF8fCFhLnBhcmVudE5vZGV8fGEucGFyZW50Tm9kZS5ub2RlVHlwZT09PTExfWZ1bmN0aW9uIEYoYSxiKXtyZXR1cm4oYSYmYSE9PSIqIj9hKyIuIjoiIikrYi5yZXBsYWNlKHIsImAiKS5yZXBsYWNlKHMsIiYiKX1mdW5jdGlvbiBFKGEpe3ZhciBiLGMsZSxmLGcsaCxpLGosayxsLG0sbixvLHE9W10scj1bXSxzPWQuX2RhdGEodGhpcywiZXZlbnRzIik7aWYoYS5saXZlRmlyZWQhPT10aGlzJiZzJiZzLmxpdmUmJiFhLnRhcmdldC5kaXNhYmxlZCYmKCFhLmJ1dHRvbnx8YS50eXBlIT09ImNsaWNrIikpe2EubmFtZXNwYWNlJiYobj1uZXcgUmVnRXhwKCIoXnxcXC4pIithLm5hbWVzcGFjZS5zcGxpdCgiLiIpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpKSxhLmxpdmVGaXJlZD10aGlzO3ZhciB0PXMubGl2ZS5zbGljZSgwKTtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKWc9dFtpXSxnLm9yaWdUeXBlLnJlcGxhY2UocCwiIik9PT1hLnR5cGU/ci5wdXNoKGcuc2VsZWN0b3IpOnQuc3BsaWNlKGktLSwxKTtmPWQoYS50YXJnZXQpLmNsb3Nlc3QocixhLmN1cnJlbnRUYXJnZXQpO2ZvcihqPTAsaz1mLmxlbmd0aDtqPGs7aisrKXttPWZbal07Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7Zz10W2ldO2lmKG0uc2VsZWN0b3I9PT1nLnNlbGVjdG9yJiYoIW58fG4udGVzdChnLm5hbWVzcGFjZSkpJiYhbS5lbGVtLmRpc2FibGVkKXtoPW0uZWxlbSxlPW51bGw7aWYoZy5wcmVUeXBlPT09Im1vdXNlZW50ZXIifHxnLnByZVR5cGU9PT0ibW91c2VsZWF2ZSIpYS50eXBlPWcucHJlVHlwZSxlPWQoYS5yZWxhdGVkVGFyZ2V0KS5jbG9zZXN0KGcuc2VsZWN0b3IpWzBdOyghZXx8ZSE9PWgpJiZxLnB1c2goe2VsZW06aCxoYW5kbGVPYmo6ZyxsZXZlbDptLmxldmVsfSl9fX1mb3Ioaj0wLGs9cS5sZW5ndGg7ajxrO2orKyl7Zj1xW2pdO2lmKGMmJmYubGV2ZWw+YylicmVhazthLmN1cnJlbnRUYXJnZXQ9Zi5lbGVtLGEuZGF0YT1mLmhhbmRsZU9iai5kYXRhLGEuaGFuZGxlT2JqPWYuaGFuZGxlT2JqLG89Zi5oYW5kbGVPYmoub3JpZ0hhbmRsZXIuYXBwbHkoZi5lbGVtLGFyZ3VtZW50cyk7aWYobz09PSExfHxhLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe2M9Zi5sZXZlbCxvPT09ITEmJihiPSExKTtpZihhLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpYnJlYWt9fXJldHVybiBifX1mdW5jdGlvbiBDKGEsYyxlKXt2YXIgZj1kLmV4dGVuZCh7fSxlWzBdKTtmLnR5cGU9YSxmLm9yaWdpbmFsRXZlbnQ9e30sZi5saXZlRmlyZWQ9YixkLmV2ZW50LmhhbmRsZS5jYWxsKGMsZiksZi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmZVswXS5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIHcoKXtyZXR1cm4hMH1mdW5jdGlvbiB2KCl7cmV0dXJuITF9ZnVuY3Rpb24gZyhhKXtmb3IodmFyIGIgaW4gYSlpZihiIT09InRvSlNPTiIpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gZihhLGMsZil7aWYoZj09PWImJmEubm9kZVR5cGU9PT0xKXtmPWEuZ2V0QXR0cmlidXRlKCJkYXRhLSIrYyk7aWYodHlwZW9mIGY9PT0ic3RyaW5nIil7dHJ5e2Y9Zj09PSJ0cnVlIj8hMDpmPT09ImZhbHNlIj8hMTpmPT09Im51bGwiP251bGw6ZC5pc05hTihmKT9lLnRlc3QoZik/ZC5wYXJzZUpTT04oZik6ZjpwYXJzZUZsb2F0KGYpfWNhdGNoKGcpe31kLmRhdGEoYSxjLGYpfWVsc2UgZj1ifXJldHVybiBmfXZhciBjPWEuZG9jdW1lbnQsZD1mdW5jdGlvbigpe2Z1bmN0aW9uIEkoKXtpZighZC5pc1JlYWR5KXt0cnl7Yy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwoImxlZnQiKX1jYXRjaChhKXtzZXRUaW1lb3V0KEksMSk7cmV0dXJufWQucmVhZHkoKX19dmFyIGQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IGQuZm4uaW5pdChhLGIsZyl9LGU9YS5qUXVlcnksZj1hLiQsZyxoPS9eKD86W148XSooPFtcd1xXXSs+KVtePl0qJHwjKFtcd1wtXSspJCkvLGk9L1xTLyxqPS9eXHMrLyxrPS9ccyskLyxsPS9cZC8sbT0vXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT4pPyQvLG49L15bXF0sOnt9XHNdKiQvLG89L1xcKD86WyJcXFwvYmZucnRdfHVbMC05YS1mQS1GXXs0fSkvZyxwPS8iW14iXFxcblxyXSoifHRydWV8ZmFsc2V8bnVsbHwtP1xkKyg/OlwuXGQqKT8oPzpbZUVdWytcLV0/XGQrKT8vZyxxPS8oPzpefDp8LCkoPzpccypcWykrL2cscj0vKHdlYmtpdClbIFwvXShbXHcuXSspLyxzPS8ob3BlcmEpKD86Lip2ZXJzaW9uKT9bIFwvXShbXHcuXSspLyx0PS8obXNpZSkgKFtcdy5dKykvLHU9Lyhtb3ppbGxhKSg/Oi4qPyBydjooW1x3Ll0rKSk/Lyx2PW5hdmlnYXRvci51c2VyQWdlbnQsdyx4PSExLHksej0idGhlbiBkb25lIGZhaWwgaXNSZXNvbHZlZCBpc1JlamVjdGVkIHByb21pc2UiLnNwbGl0KCIgIiksQSxCPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsQz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LEQ9QXJyYXkucHJvdG90eXBlLnB1c2gsRT1BcnJheS5wcm90b3R5cGUuc2xpY2UsRj1TdHJpbmcucHJvdG90eXBlLnRyaW0sRz1BcnJheS5wcm90b3R5cGUuaW5kZXhPZixIPXt9O2QuZm49ZC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmQsaW5pdDpmdW5jdGlvbihhLGUsZil7dmFyIGcsaSxqLGs7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYS5ub2RlVHlwZSl7dGhpcy5jb250ZXh0PXRoaXNbMF09YSx0aGlzLmxlbmd0aD0xO3JldHVybiB0aGlzfWlmKGE9PT0iYm9keSImJiFlJiZjLmJvZHkpe3RoaXMuY29udGV4dD1jLHRoaXNbMF09Yy5ib2R5LHRoaXMuc2VsZWN0b3I9ImJvZHkiLHRoaXMubGVuZ3RoPTE7cmV0dXJuIHRoaXN9aWYodHlwZW9mIGE9PT0ic3RyaW5nIil7Zz1oLmV4ZWMoYSk7aWYoIWd8fCFnWzFdJiZlKXJldHVybiFlfHxlLmpxdWVyeT8oZXx8ZikuZmluZChhKTp0aGlzLmNvbnN0cnVjdG9yKGUpLmZpbmQoYSk7aWYoZ1sxXSl7ZT1lIGluc3RhbmNlb2YgZD9lWzBdOmUsaz1lP2Uub3duZXJEb2N1bWVudHx8ZTpjLGo9bS5leGVjKGEpLGo/ZC5pc1BsYWluT2JqZWN0KGUpPyhhPVtjLmNyZWF0ZUVsZW1lbnQoalsxXSldLGQuZm4uYXR0ci5jYWxsKGEsZSwhMCkpOmE9W2suY3JlYXRlRWxlbWVudChqWzFdKV06KGo9ZC5idWlsZEZyYWdtZW50KFtnWzFdXSxba10pLGE9KGouY2FjaGVhYmxlP2QuY2xvbmUoai5mcmFnbWVudCk6ai5mcmFnbWVudCkuY2hpbGROb2Rlcyk7cmV0dXJuIGQubWVyZ2UodGhpcyxhKX1pPWMuZ2V0RWxlbWVudEJ5SWQoZ1syXSk7aWYoaSYmaS5wYXJlbnROb2RlKXtpZihpLmlkIT09Z1syXSlyZXR1cm4gZi5maW5kKGEpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1pfXRoaXMuY29udGV4dD1jLHRoaXMuc2VsZWN0b3I9YTtyZXR1cm4gdGhpc31pZihkLmlzRnVuY3Rpb24oYSkpcmV0dXJuIGYucmVhZHkoYSk7YS5zZWxlY3RvciE9PWImJih0aGlzLnNlbGVjdG9yPWEuc2VsZWN0b3IsdGhpcy5jb250ZXh0PWEuY29udGV4dCk7cmV0dXJuIGQubWFrZUFycmF5KGEsdGhpcyl9LHNlbGVjdG9yOiIiLGpxdWVyeToiMS41LjEiLGxlbmd0aDowLHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gRS5jYWxsKHRoaXMsMCl9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD90aGlzLnRvQXJyYXkoKTphPDA/dGhpc1t0aGlzLmxlbmd0aCthXTp0aGlzW2FdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPXRoaXMuY29uc3RydWN0b3IoKTtkLmlzQXJyYXkoYSk/RC5hcHBseShlLGEpOmQubWVyZ2UoZSxhKSxlLnByZXZPYmplY3Q9dGhpcyxlLmNvbnRleHQ9dGhpcy5jb250ZXh0LGI9PT0iZmluZCI/ZS5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyh0aGlzLnNlbGVjdG9yPyIgIjoiIikrYzpiJiYoZS5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyIuIitiKyIoIitjKyIpIik7cmV0dXJuIGV9LGVhY2g6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5lYWNoKHRoaXMsYSxiKX0scmVhZHk6ZnVuY3Rpb24oYSl7ZC5iaW5kUmVhZHkoKSx5LmRvbmUoYSk7cmV0dXJuIHRoaXN9LGVxOmZ1bmN0aW9uKGEpe3JldHVybiBhPT09LTE/dGhpcy5zbGljZShhKTp0aGlzLnNsaWNlKGEsK2ErMSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKEUuYXBwbHkodGhpcyxhcmd1bWVudHMpLCJzbGljZSIsRS5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX0sbWFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhkLm1hcCh0aGlzLGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEuY2FsbChiLGMsYil9KSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6RCxzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX0sZC5mbi5pbml0LnByb3RvdHlwZT1kLmZuLGQuZXh0ZW5kPWQuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYyxlLGYsZyxoLGk9YXJndW1lbnRzWzBdfHx7fSxqPTEsaz1hcmd1bWVudHMubGVuZ3RoLGw9ITE7dHlwZW9mIGk9PT0iYm9vbGVhbiImJihsPWksaT1hcmd1bWVudHNbMV18fHt9LGo9MiksdHlwZW9mIGkhPT0ib2JqZWN0IiYmIWQuaXNGdW5jdGlvbihpKSYmKGk9e30pLGs9PT1qJiYoaT10aGlzLC0taik7Zm9yKDtqPGs7aisrKWlmKChhPWFyZ3VtZW50c1tqXSkhPW51bGwpZm9yKGMgaW4gYSl7ZT1pW2NdLGY9YVtjXTtpZihpPT09Ziljb250aW51ZTtsJiZmJiYoZC5pc1BsYWluT2JqZWN0KGYpfHwoZz1kLmlzQXJyYXkoZikpKT8oZz8oZz0hMSxoPWUmJmQuaXNBcnJheShlKT9lOltdKTpoPWUmJmQuaXNQbGFpbk9iamVjdChlKT9lOnt9LGlbY109ZC5leHRlbmQobCxoLGYpKTpmIT09YiYmKGlbY109Zil9cmV0dXJuIGl9LGQuZXh0ZW5kKHtub0NvbmZsaWN0OmZ1bmN0aW9uKGIpe2EuJD1mLGImJihhLmpRdWVyeT1lKTtyZXR1cm4gZH0saXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxyZWFkeTpmdW5jdGlvbihhKXthPT09ITAmJmQucmVhZHlXYWl0LS07aWYoIWQucmVhZHlXYWl0fHxhIT09ITAmJiFkLmlzUmVhZHkpe2lmKCFjLmJvZHkpcmV0dXJuIHNldFRpbWVvdXQoZC5yZWFkeSwxKTtkLmlzUmVhZHk9ITA7aWYoYSE9PSEwJiYtLWQucmVhZHlXYWl0PjApcmV0dXJuO3kucmVzb2x2ZVdpdGgoYyxbZF0pLGQuZm4udHJpZ2dlciYmZChjKS50cmlnZ2VyKCJyZWFkeSIpLnVuYmluZCgicmVhZHkiKX19LGJpbmRSZWFkeTpmdW5jdGlvbigpe2lmKCF4KXt4PSEwO2lmKGMucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpcmV0dXJuIHNldFRpbWVvdXQoZC5yZWFkeSwxKTtpZihjLmFkZEV2ZW50TGlzdGVuZXIpYy5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixBLCExKSxhLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGQucmVhZHksITEpO2Vsc2UgaWYoYy5hdHRhY2hFdmVudCl7Yy5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixBKSxhLmF0dGFjaEV2ZW50KCJvbmxvYWQiLGQucmVhZHkpO3ZhciBiPSExO3RyeXtiPWEuZnJhbWVFbGVtZW50PT1udWxsfWNhdGNoKGUpe31jLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCYmYiYmSSgpfX19LGlzRnVuY3Rpb246ZnVuY3Rpb24oYSl7cmV0dXJuIGQudHlwZShhKT09PSJmdW5jdGlvbiJ9LGlzQXJyYXk6QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oYSl7cmV0dXJuIGQudHlwZShhKT09PSJhcnJheSJ9LGlzV2luZG93OmZ1bmN0aW9uKGEpe3JldHVybiBhJiZ0eXBlb2YgYT09PSJvYmplY3QiJiYic2V0SW50ZXJ2YWwiaW4gYX0saXNOYU46ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGx8fCFsLnRlc3QoYSl8fGlzTmFOKGEpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP1N0cmluZyhhKTpIW0IuY2FsbChhKV18fCJvYmplY3QifSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe2lmKCFhfHxkLnR5cGUoYSkhPT0ib2JqZWN0Inx8YS5ub2RlVHlwZXx8ZC5pc1dpbmRvdyhhKSlyZXR1cm4hMTtpZihhLmNvbnN0cnVjdG9yJiYhQy5jYWxsKGEsImNvbnN0cnVjdG9yIikmJiFDLmNhbGwoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJvdG90eXBlT2YiKSlyZXR1cm4hMTt2YXIgYztmb3IoYyBpbiBhKXt9cmV0dXJuIGM9PT1ifHxDLmNhbGwoYSxjKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgYX0scGFyc2VKU09OOmZ1bmN0aW9uKGIpe2lmKHR5cGVvZiBiIT09InN0cmluZyJ8fCFiKXJldHVybiBudWxsO2I9ZC50cmltKGIpO2lmKG4udGVzdChiLnJlcGxhY2UobywiQCIpLnJlcGxhY2UocCwiXSIpLnJlcGxhY2UocSwiIikpKXJldHVybiBhLkpTT04mJmEuSlNPTi5wYXJzZT9hLkpTT04ucGFyc2UoYik6KG5ldyBGdW5jdGlvbigicmV0dXJuICIrYikpKCk7ZC5lcnJvcigiSW52YWxpZCBKU09OOiAiK2IpfSxwYXJzZVhNTDpmdW5jdGlvbihiLGMsZSl7YS5ET01QYXJzZXI/KGU9bmV3IERPTVBhcnNlcixjPWUucGFyc2VGcm9tU3RyaW5nKGIsInRleHQveG1sIikpOihjPW5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MRE9NIiksYy5hc3luYz0iZmFsc2UiLGMubG9hZFhNTChiKSksZT1jLmRvY3VtZW50RWxlbWVudCwoIWV8fCFlLm5vZGVOYW1lfHxlLm5vZGVOYW1lPT09InBhcnNlcmVycm9yIikmJmQuZXJyb3IoIkludmFsaWQgWE1MOiAiK2IpO3JldHVybiBjfSxub29wOmZ1bmN0aW9uKCl7fSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGEpe2lmKGEmJmkudGVzdChhKSl7dmFyIGI9Yy5oZWFkfHxjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGMuZG9jdW1lbnRFbGVtZW50LGU9Yy5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtkLnN1cHBvcnQuc2NyaXB0RXZhbCgpP2UuYXBwZW5kQ2hpbGQoYy5jcmVhdGVUZXh0Tm9kZShhKSk6ZS50ZXh0PWEsYi5pbnNlcnRCZWZvcmUoZSxiLmZpcnN0Q2hpbGQpLGIucmVtb3ZlQ2hpbGQoZSl9fSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk9PT1iLnRvVXBwZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxjLGUpe3ZhciBmLGc9MCxoPWEubGVuZ3RoLGk9aD09PWJ8fGQuaXNGdW5jdGlvbihhKTtpZihlKXtpZihpKXtmb3IoZiBpbiBhKWlmKGMuYXBwbHkoYVtmXSxlKT09PSExKWJyZWFrfWVsc2UgZm9yKDtnPGg7KWlmKGMuYXBwbHkoYVtnKytdLGUpPT09ITEpYnJlYWt9ZWxzZSBpZihpKXtmb3IoZiBpbiBhKWlmKGMuY2FsbChhW2ZdLGYsYVtmXSk9PT0hMSlicmVha31lbHNlIGZvcih2YXIgaj1hWzBdO2c8aCYmYy5jYWxsKGosZyxqKSE9PSExO2o9YVsrK2ddKXt9cmV0dXJuIGF9LHRyaW06Rj9mdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjpGLmNhbGwoYSl9OmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOihhKyIiKS5yZXBsYWNlKGosIiIpLnJlcGxhY2UoaywiIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fFtdO2lmKGEhPW51bGwpe3ZhciBlPWQudHlwZShhKTthLmxlbmd0aD09bnVsbHx8ZT09PSJzdHJpbmcifHxlPT09ImZ1bmN0aW9uInx8ZT09PSJyZWdleHAifHxkLmlzV2luZG93KGEpP0QuY2FsbChjLGEpOmQubWVyZ2UoYyxhKX1yZXR1cm4gY30saW5BcnJheTpmdW5jdGlvbihhLGIpe2lmKGIuaW5kZXhPZilyZXR1cm4gYi5pbmRleE9mKGEpO2Zvcih2YXIgYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrKylpZihiW2NdPT09YSlyZXR1cm4gYztyZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxjKXt2YXIgZD1hLmxlbmd0aCxlPTA7aWYodHlwZW9mIGMubGVuZ3RoPT09Im51bWJlciIpZm9yKHZhciBmPWMubGVuZ3RoO2U8ZjtlKyspYVtkKytdPWNbZV07ZWxzZSB3aGlsZShjW2VdIT09YilhW2QrK109Y1tlKytdO2EubGVuZ3RoPWQ7cmV0dXJuIGF9LGdyZXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPVtdLGU7Yz0hIWM7Zm9yKHZhciBmPTAsZz1hLmxlbmd0aDtmPGc7ZisrKWU9ISFiKGFbZl0sZiksYyE9PWUmJmQucHVzaChhW2ZdKTtyZXR1cm4gZH0sbWFwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGg7ZjxnO2YrKyllPWIoYVtmXSxmLGMpLGUhPW51bGwmJihkW2QubGVuZ3RoXT1lKTtyZXR1cm4gZC5jb25jYXQuYXBwbHkoW10sZCl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihhLGMsZSl7YXJndW1lbnRzLmxlbmd0aD09PTImJih0eXBlb2YgYz09PSJzdHJpbmciPyhlPWEsYT1lW2NdLGM9Yik6YyYmIWQuaXNGdW5jdGlvbihjKSYmKGU9YyxjPWIpKSwhYyYmYSYmKGM9ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShlfHx0aGlzLGFyZ3VtZW50cyl9KSxhJiYoYy5ndWlkPWEuZ3VpZD1hLmd1aWR8fGMuZ3VpZHx8ZC5ndWlkKyspO3JldHVybiBjfSxhY2Nlc3M6ZnVuY3Rpb24oYSxjLGUsZixnLGgpe3ZhciBpPWEubGVuZ3RoO2lmKHR5cGVvZiBjPT09Im9iamVjdCIpe2Zvcih2YXIgaiBpbiBjKWQuYWNjZXNzKGEsaixjW2pdLGYsZyxlKTtyZXR1cm4gYX1pZihlIT09Yil7Zj0haCYmZiYmZC5pc0Z1bmN0aW9uKGUpO2Zvcih2YXIgaz0wO2s8aTtrKyspZyhhW2tdLGMsZj9lLmNhbGwoYVtrXSxrLGcoYVtrXSxjKSk6ZSxoKTtyZXR1cm4gYX1yZXR1cm4gaT9nKGFbMF0sYyk6Yn0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9LF9EZWZlcnJlZDpmdW5jdGlvbigpe3ZhciBhPVtdLGIsYyxlLGY9e2RvbmU6ZnVuY3Rpb24oKXtpZighZSl7dmFyIGM9YXJndW1lbnRzLGcsaCxpLGosaztiJiYoaz1iLGI9MCk7Zm9yKGc9MCxoPWMubGVuZ3RoO2c8aDtnKyspaT1jW2ddLGo9ZC50eXBlKGkpLGo9PT0iYXJyYXkiP2YuZG9uZS5hcHBseShmLGkpOmo9PT0iZnVuY3Rpb24iJiZhLnB1c2goaSk7ayYmZi5yZXNvbHZlV2l0aChrWzBdLGtbMV0pfXJldHVybiB0aGlzfSxyZXNvbHZlV2l0aDpmdW5jdGlvbihkLGYpe2lmKCFlJiYhYiYmIWMpe2M9MTt0cnl7d2hpbGUoYVswXSlhLnNoaWZ0KCkuYXBwbHkoZCxmKX1jYXRjaChnKXt0aHJvdyBnfWZpbmFsbHl7Yj1bZCxmXSxjPTB9fXJldHVybiB0aGlzfSxyZXNvbHZlOmZ1bmN0aW9uKCl7Zi5yZXNvbHZlV2l0aChkLmlzRnVuY3Rpb24odGhpcy5wcm9taXNlKT90aGlzLnByb21pc2UoKTp0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHRoaXN9LGlzUmVzb2x2ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4gY3x8Yn0sY2FuY2VsOmZ1bmN0aW9uKCl7ZT0xLGE9W107cmV0dXJuIHRoaXN9fTtyZXR1cm4gZn0sRGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9ZC5fRGVmZXJyZWQoKSxjPWQuX0RlZmVycmVkKCksZTtkLmV4dGVuZChiLHt0aGVuOmZ1bmN0aW9uKGEsYyl7Yi5kb25lKGEpLmZhaWwoYyk7cmV0dXJuIHRoaXN9LGZhaWw6Yy5kb25lLHJlamVjdFdpdGg6Yy5yZXNvbHZlV2l0aCxyZWplY3Q6Yy5yZXNvbHZlLGlzUmVqZWN0ZWQ6Yy5pc1Jlc29sdmVkLHByb21pc2U6ZnVuY3Rpb24oYSl7aWYoYT09bnVsbCl7aWYoZSlyZXR1cm4gZTtlPWE9e319dmFyIGM9ei5sZW5ndGg7d2hpbGUoYy0tKWFbeltjXV09Ylt6W2NdXTtyZXR1cm4gYX19KSxiLmRvbmUoYy5jYW5jZWwpLmZhaWwoYi5jYW5jZWwpLGRlbGV0ZSBiLmNhbmNlbCxhJiZhLmNhbGwoYixiKTtyZXR1cm4gYn0sd2hlbjpmdW5jdGlvbihhKXt2YXIgYj1hcmd1bWVudHMubGVuZ3RoLGM9Yjw9MSYmYSYmZC5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/YTpkLkRlZmVycmVkKCksZT1jLnByb21pc2UoKTtpZihiPjEpe3ZhciBmPUUuY2FsbChhcmd1bWVudHMsMCksZz1iLGg9ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2ZbYV09YXJndW1lbnRzLmxlbmd0aD4xP0UuY2FsbChhcmd1bWVudHMsMCk6YiwtLWd8fGMucmVzb2x2ZVdpdGgoZSxmKX19O3doaWxlKGItLSlhPWZbYl0sYSYmZC5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/YS5wcm9taXNlKCkudGhlbihoKGIpLGMucmVqZWN0KTotLWc7Z3x8Yy5yZXNvbHZlV2l0aChlLGYpfWVsc2UgYyE9PWEmJmMucmVzb2x2ZShhKTtyZXR1cm4gZX0sdWFNYXRjaDpmdW5jdGlvbihhKXthPWEudG9Mb3dlckNhc2UoKTt2YXIgYj1yLmV4ZWMoYSl8fHMuZXhlYyhhKXx8dC5leGVjKGEpfHxhLmluZGV4T2YoImNvbXBhdGlibGUiKTwwJiZ1LmV4ZWMoYSl8fFtdO3JldHVybnticm93c2VyOmJbMV18fCIiLHZlcnNpb246YlsyXXx8IjAifX0sc3ViOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShiLGMpe3JldHVybiBuZXcgYS5mbi5pbml0KGIsYyl9ZC5leHRlbmQoITAsYSx0aGlzKSxhLnN1cGVyY2xhc3M9dGhpcyxhLmZuPWEucHJvdG90eXBlPXRoaXMoKSxhLmZuLmNvbnN0cnVjdG9yPWEsYS5zdWJjbGFzcz10aGlzLnN1YmNsYXNzLGEuZm4uaW5pdD1mdW5jdGlvbiBiKGIsYyl7YyYmYyBpbnN0YW5jZW9mIGQmJiEoYyBpbnN0YW5jZW9mIGEpJiYoYz1hKGMpKTtyZXR1cm4gZC5mbi5pbml0LmNhbGwodGhpcyxiLGMsZSl9LGEuZm4uaW5pdC5wcm90b3R5cGU9YS5mbjt2YXIgZT1hKGMpO3JldHVybiBhfSxicm93c2VyOnt9fSkseT1kLl9EZWZlcnJlZCgpLGQuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe0hbIltvYmplY3QgIitiKyJdIl09Yi50b0xvd2VyQ2FzZSgpfSksdz1kLnVhTWF0Y2godiksdy5icm93c2VyJiYoZC5icm93c2VyW3cuYnJvd3Nlcl09ITAsZC5icm93c2VyLnZlcnNpb249dy52ZXJzaW9uKSxkLmJyb3dzZXIud2Via2l0JiYoZC5icm93c2VyLnNhZmFyaT0hMCksRyYmKGQuaW5BcnJheT1mdW5jdGlvbihhLGIpe3JldHVybiBHLmNhbGwoYixhKX0pLGkudGVzdCgiICIpJiYoaj0vXltcc1x4QTBdKy8saz0vW1xzXHhBMF0rJC8pLGc9ZChjKSxjLmFkZEV2ZW50TGlzdGVuZXI/QT1mdW5jdGlvbigpe2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQSwhMSksZC5yZWFkeSgpfTpjLmF0dGFjaEV2ZW50JiYoQT1mdW5jdGlvbigpe2MucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSImJihjLmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEEpLGQucmVhZHkoKSl9KTtyZXR1cm4gZH0oKTsoZnVuY3Rpb24oKXtkLnN1cHBvcnQ9e307dmFyIGI9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTtiLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGIuaW5uZXJIVE1MPSIgICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnIHN0eWxlPSdjb2xvcjpyZWQ7ZmxvYXQ6bGVmdDtvcGFjaXR5Oi41NTsnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+Ijt2YXIgZT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIiksZj1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF0sZz1jLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLGg9Zy5hcHBlbmRDaGlsZChjLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxpPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF07aWYoZSYmZS5sZW5ndGgmJmYpe2Quc3VwcG9ydD17bGVhZGluZ1doaXRlc3BhY2U6Yi5maXJzdENoaWxkLm5vZGVUeXBlPT09Myx0Ym9keTohYi5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsaHRtbFNlcmlhbGl6ZTohIWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsc3R5bGU6L3JlZC8udGVzdChmLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksaHJlZk5vcm1hbGl6ZWQ6Zi5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIvYSIsb3BhY2l0eTovXjAuNTUkLy50ZXN0KGYuc3R5bGUub3BhY2l0eSksY3NzRmxvYXQ6ISFmLnN0eWxlLmNzc0Zsb2F0LGNoZWNrT246aS52YWx1ZT09PSJvbiIsb3B0U2VsZWN0ZWQ6aC5zZWxlY3RlZCxkZWxldGVFeHBhbmRvOiEwLG9wdERpc2FibGVkOiExLGNoZWNrQ2xvbmU6ITEsbm9DbG9uZUV2ZW50OiEwLG5vQ2xvbmVDaGVja2VkOiEwLGJveE1vZGVsOm51bGwsaW5saW5lQmxvY2tOZWVkc0xheW91dDohMSxzaHJpbmtXcmFwQmxvY2tzOiExLHJlbGlhYmxlSGlkZGVuT2Zmc2V0czohMH0saS5jaGVja2VkPSEwLGQuc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZD1pLmNsb25lTm9kZSghMCkuY2hlY2tlZCxnLmRpc2FibGVkPSEwLGQuc3VwcG9ydC5vcHREaXNhYmxlZD0haC5kaXNhYmxlZDt2YXIgaj1udWxsO2Quc3VwcG9ydC5zY3JpcHRFdmFsPWZ1bmN0aW9uKCl7aWYoaj09PW51bGwpe3ZhciBiPWMuZG9jdW1lbnRFbGVtZW50LGU9Yy5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxmPSJzY3JpcHQiK2Qubm93KCk7dHJ5e2UuYXBwZW5kQ2hpbGQoYy5jcmVhdGVUZXh0Tm9kZSgid2luZG93LiIrZisiPTE7IikpfWNhdGNoKGcpe31iLmluc2VydEJlZm9yZShlLGIuZmlyc3RDaGlsZCksYVtmXT8oaj0hMCxkZWxldGUgYVtmXSk6aj0hMSxiLnJlbW92ZUNoaWxkKGUpLGI9ZT1mPW51bGx9cmV0dXJuIGp9O3RyeXtkZWxldGUgYi50ZXN0fWNhdGNoKGspe2Quc3VwcG9ydC5kZWxldGVFeHBhbmRvPSExfSFiLmFkZEV2ZW50TGlzdGVuZXImJmIuYXR0YWNoRXZlbnQmJmIuZmlyZUV2ZW50JiYoYi5hdHRhY2hFdmVudCgib25jbGljayIsZnVuY3Rpb24gbCgpe2Quc3VwcG9ydC5ub0Nsb25lRXZlbnQ9ITEsYi5kZXRhY2hFdmVudCgib25jbGljayIsbCl9KSxiLmNsb25lTm9kZSghMCkuZmlyZUV2ZW50KCJvbmNsaWNrIikpLGI9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxiLmlubmVySFRNTD0iPGlucHV0IHR5cGU9J3JhZGlvJyBuYW1lPSdyYWRpb3Rlc3QnIGNoZWNrZWQ9J2NoZWNrZWQnLz4iO3ZhciBtPWMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO20uYXBwZW5kQ2hpbGQoYi5maXJzdENoaWxkKSxkLnN1cHBvcnQuY2hlY2tDbG9uZT1tLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCxkKGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxiPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTtpZihiKXthLnN0eWxlLndpZHRoPWEuc3R5bGUucGFkZGluZ0xlZnQ9IjFweCIsYi5hcHBlbmRDaGlsZChhKSxkLmJveE1vZGVsPWQuc3VwcG9ydC5ib3hNb2RlbD1hLm9mZnNldFdpZHRoPT09Miwiem9vbSJpbiBhLnN0eWxlJiYoYS5zdHlsZS5kaXNwbGF5PSJpbmxpbmUiLGEuc3R5bGUuem9vbT0xLGQuc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWEub2Zmc2V0V2lkdGg9PT0yLGEuc3R5bGUuZGlzcGxheT0iIixhLmlubmVySFRNTD0iPGRpdiBzdHlsZT0nd2lkdGg6NHB4Oyc+PC9kaXY+IixkLnN1cHBvcnQuc2hyaW5rV3JhcEJsb2Nrcz1hLm9mZnNldFdpZHRoIT09MiksYS5pbm5lckhUTUw9Ijx0YWJsZT48dHI+PHRkIHN0eWxlPSdwYWRkaW5nOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25lJz48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+Ijt2YXIgZT1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpO2Quc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHM9ZVswXS5vZmZzZXRIZWlnaHQ9PT0wLGVbMF0uc3R5bGUuZGlzcGxheT0iIixlWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGQuc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHM9ZC5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyYmZVswXS5vZmZzZXRIZWlnaHQ9PT0wLGEuaW5uZXJIVE1MPSIiLGIucmVtb3ZlQ2hpbGQoYSkuc3R5bGUuZGlzcGxheT0ibm9uZSIsYT1lPW51bGx9fSk7dmFyIG49ZnVuY3Rpb24oYSl7dmFyIGI9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTthPSJvbiIrYTtpZighYi5hdHRhY2hFdmVudClyZXR1cm4hMDt2YXIgZD1hIGluIGI7ZHx8KGIuc2V0QXR0cmlidXRlKGEsInJldHVybjsiKSxkPXR5cGVvZiBiW2FdPT09ImZ1bmN0aW9uIiksYj1udWxsO3JldHVybiBkfTtkLnN1cHBvcnQuc3VibWl0QnViYmxlcz1uKCJzdWJtaXQiKSxkLnN1cHBvcnQuY2hhbmdlQnViYmxlcz1uKCJjaGFuZ2UiKSxiPWU9Zj1udWxsfX0pKCk7dmFyIGU9L14oPzpcey4qXH18XFsuKlxdKSQvO2QuZXh0ZW5kKHtjYWNoZTp7fSx1dWlkOjAsZXhwYW5kbzoialF1ZXJ5IisoZC5mbi5qcXVlcnkrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksbm9EYXRhOntlbWJlZDohMCxvYmplY3Q6ImNsc2lkOkQyN0NEQjZFLUFFNkQtMTFjZi05NkI4LTQ0NDU1MzU0MDAwMCIsYXBwbGV0OiEwfSxoYXNEYXRhOmZ1bmN0aW9uKGEpe2E9YS5ub2RlVHlwZT9kLmNhY2hlW2FbZC5leHBhbmRvXV06YVtkLmV4cGFuZG9dO3JldHVybiEhYSYmIWcoYSl9LGRhdGE6ZnVuY3Rpb24oYSxjLGUsZil7aWYoZC5hY2NlcHREYXRhKGEpKXt2YXIgZz1kLmV4cGFuZG8saD10eXBlb2YgYz09PSJzdHJpbmciLGksaj1hLm5vZGVUeXBlLGs9aj9kLmNhY2hlOmEsbD1qP2FbZC5leHBhbmRvXTphW2QuZXhwYW5kb10mJmQuZXhwYW5kbztpZigoIWx8fGYmJmwmJiFrW2xdW2ddKSYmaCYmZT09PWIpcmV0dXJuO2x8fChqP2FbZC5leHBhbmRvXT1sPSsrZC51dWlkOmw9ZC5leHBhbmRvKSxrW2xdfHwoa1tsXT17fSxqfHwoa1tsXS50b0pTT049ZC5ub29wKSk7aWYodHlwZW9mIGM9PT0ib2JqZWN0Inx8dHlwZW9mIGM9PT0iZnVuY3Rpb24iKWY/a1tsXVtnXT1kLmV4dGVuZChrW2xdW2ddLGMpOmtbbF09ZC5leHRlbmQoa1tsXSxjKTtpPWtbbF0sZiYmKGlbZ118fChpW2ddPXt9KSxpPWlbZ10pLGUhPT1iJiYoaVtjXT1lKTtpZihjPT09ImV2ZW50cyImJiFpW2NdKXJldHVybiBpW2ddJiZpW2ddLmV2ZW50cztyZXR1cm4gaD9pW2NdOml9fSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGIsYyxlKXtpZihkLmFjY2VwdERhdGEoYikpe3ZhciBmPWQuZXhwYW5kbyxoPWIubm9kZVR5cGUsaT1oP2QuY2FjaGU6YixqPWg/YltkLmV4cGFuZG9dOmQuZXhwYW5kbztpZighaVtqXSlyZXR1cm47aWYoYyl7dmFyIGs9ZT9pW2pdW2ZdOmlbal07aWYoayl7ZGVsZXRlIGtbY107aWYoIWcoaykpcmV0dXJufX1pZihlKXtkZWxldGUgaVtqXVtmXTtpZighZyhpW2pdKSlyZXR1cm59dmFyIGw9aVtqXVtmXTtkLnN1cHBvcnQuZGVsZXRlRXhwYW5kb3x8aSE9YT9kZWxldGUgaVtqXTppW2pdPW51bGwsbD8oaVtqXT17fSxofHwoaVtqXS50b0pTT049ZC5ub29wKSxpW2pdW2ZdPWwpOmgmJihkLnN1cHBvcnQuZGVsZXRlRXhwYW5kbz9kZWxldGUgYltkLmV4cGFuZG9dOmIucmVtb3ZlQXR0cmlidXRlP2IucmVtb3ZlQXR0cmlidXRlKGQuZXhwYW5kbyk6YltkLmV4cGFuZG9dPW51bGwpfX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBkLmRhdGEoYSxiLGMsITApfSxhY2NlcHREYXRhOmZ1bmN0aW9uKGEpe2lmKGEubm9kZU5hbWUpe3ZhciBiPWQubm9EYXRhW2Eubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07aWYoYilyZXR1cm4gYiE9PSEwJiZhLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09Yn1yZXR1cm4hMH19KSxkLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGMpe3ZhciBlPW51bGw7aWYodHlwZW9mIGE9PT0idW5kZWZpbmVkIil7aWYodGhpcy5sZW5ndGgpe2U9ZC5kYXRhKHRoaXNbMF0pO2lmKHRoaXNbMF0ubm9kZVR5cGU9PT0xKXt2YXIgZz10aGlzWzBdLmF0dHJpYnV0ZXMsaDtmb3IodmFyIGk9MCxqPWcubGVuZ3RoO2k8ajtpKyspaD1nW2ldLm5hbWUsaC5pbmRleE9mKCJkYXRhLSIpPT09MCYmKGg9aC5zdWJzdHIoNSksZih0aGlzWzBdLGgsZVtoXSkpfX1yZXR1cm4gZX1pZih0eXBlb2YgYT09PSJvYmplY3QiKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkLmRhdGEodGhpcyxhKX0pO3ZhciBrPWEuc3BsaXQoIi4iKTtrWzFdPWtbMV0/Ii4iK2tbMV06IiI7aWYoYz09PWIpe2U9dGhpcy50cmlnZ2VySGFuZGxlcigiZ2V0RGF0YSIra1sxXSsiISIsW2tbMF1dKSxlPT09YiYmdGhpcy5sZW5ndGgmJihlPWQuZGF0YSh0aGlzWzBdLGEpLGU9Zih0aGlzWzBdLGEsZSkpO3JldHVybiBlPT09YiYma1sxXT90aGlzLmRhdGEoa1swXSk6ZX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9ZCh0aGlzKSxlPVtrWzBdLGNdO2IudHJpZ2dlckhhbmRsZXIoInNldERhdGEiK2tbMV0rIiEiLGUpLGQuZGF0YSh0aGlzLGEsYyksYi50cmlnZ2VySGFuZGxlcigiY2hhbmdlRGF0YSIra1sxXSsiISIsZSl9KX0scmVtb3ZlRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZC5yZW1vdmVEYXRhKHRoaXMsYSl9KX19KSxkLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiLGMpe2lmKGEpe2I9KGJ8fCJmeCIpKyJxdWV1ZSI7dmFyIGU9ZC5fZGF0YShhLGIpO2lmKCFjKXJldHVybiBlfHxbXTshZXx8ZC5pc0FycmF5KGMpP2U9ZC5fZGF0YShhLGIsZC5tYWtlQXJyYXkoYykpOmUucHVzaChjKTtyZXR1cm4gZX19LGRlcXVldWU6ZnVuY3Rpb24oYSxiKXtiPWJ8fCJmeCI7dmFyIGM9ZC5xdWV1ZShhLGIpLGU9Yy5zaGlmdCgpO2U9PT0iaW5wcm9ncmVzcyImJihlPWMuc2hpZnQoKSksZSYmKGI9PT0iZngiJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxlLmNhbGwoYSxmdW5jdGlvbigpe2QuZGVxdWV1ZShhLGIpfSkpLGMubGVuZ3RofHxkLnJlbW92ZURhdGEoYSxiKyJxdWV1ZSIsITApfX0pLGQuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGMpe3R5cGVvZiBhIT09InN0cmluZyImJihjPWEsYT0iZngiKTtpZihjPT09YilyZXR1cm4gZC5xdWV1ZSh0aGlzWzBdLGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGU9ZC5xdWV1ZSh0aGlzLGEsYyk7YT09PSJmeCImJmVbMF0hPT0iaW5wcm9ncmVzcyImJmQuZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2QuZGVxdWV1ZSh0aGlzLGEpfSl9LGRlbGF5OmZ1bmN0aW9uKGEsYil7YT1kLmZ4P2QuZnguc3BlZWRzW2FdfHxhOmEsYj1ifHwiZngiO3JldHVybiB0aGlzLnF1ZXVlKGIsZnVuY3Rpb24oKXt2YXIgYz10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtkLmRlcXVldWUoYyxiKX0sYSl9KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xdWV1ZShhfHwiZngiLFtdKX19KTt2YXIgaD0vW1xuXHRccl0vZyxpPS9ccysvLGo9L1xyL2csaz0vXig/OmhyZWZ8c3JjfHN0eWxlKSQvLGw9L14oPzpidXR0b258aW5wdXQpJC9pLG09L14oPzpidXR0b258aW5wdXR8b2JqZWN0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksbj0vXmEoPzpyZWEpPyQvaSxvPS9eKD86cmFkaW98Y2hlY2tib3gpJC9pO2QucHJvcHM9eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUiLHJlYWRvbmx5OiJyZWFkT25seSIsbWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIscm93c3Bhbjoicm93U3BhbiIsY29sc3BhbjoiY29sU3BhbiIsdGFiaW5kZXg6InRhYkluZGV4Iix1c2VtYXA6InVzZU1hcCIsZnJhbWVib3JkZXI6ImZyYW1lQm9yZGVyIn0sZC5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZC5hY2Nlc3ModGhpcyxhLGIsITAsZC5hdHRyKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkLmF0dHIodGhpcyxhLCIiKSx0aGlzLm5vZGVUeXBlPT09MSYmdGhpcy5yZW1vdmVBdHRyaWJ1dGUoYSl9KX0sYWRkQ2xhc3M6ZnVuY3Rpb24oYSl7aWYoZC5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9ZCh0aGlzKTtjLmFkZENsYXNzKGEuY2FsbCh0aGlzLGIsYy5hdHRyKCJjbGFzcyIpKSl9KTtpZihhJiZ0eXBlb2YgYT09PSJzdHJpbmciKXt2YXIgYj0oYXx8IiIpLnNwbGl0KGkpO2Zvcih2YXIgYz0wLGU9dGhpcy5sZW5ndGg7YzxlO2MrKyl7dmFyIGY9dGhpc1tjXTtpZihmLm5vZGVUeXBlPT09MSlpZihmLmNsYXNzTmFtZSl7dmFyIGc9IiAiK2YuY2xhc3NOYW1lKyIgIixoPWYuY2xhc3NOYW1lO2Zvcih2YXIgaj0wLGs9Yi5sZW5ndGg7ajxrO2orKylnLmluZGV4T2YoIiAiK2Jbal0rIiAiKTwwJiYoaCs9IiAiK2Jbal0pO2YuY2xhc3NOYW1lPWQudHJpbShoKX1lbHNlIGYuY2xhc3NOYW1lPWF9fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXtpZihkLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1kKHRoaXMpO2MucmVtb3ZlQ2xhc3MoYS5jYWxsKHRoaXMsYixjLmF0dHIoImNsYXNzIikpKX0pO2lmKGEmJnR5cGVvZiBhPT09InN0cmluZyJ8fGE9PT1iKXt2YXIgYz0oYXx8IiIpLnNwbGl0KGkpO2Zvcih2YXIgZT0wLGY9dGhpcy5sZW5ndGg7ZTxmO2UrKyl7dmFyIGc9dGhpc1tlXTtpZihnLm5vZGVUeXBlPT09MSYmZy5jbGFzc05hbWUpaWYoYSl7dmFyIGo9KCIgIitnLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoaCwiICIpO2Zvcih2YXIgaz0wLGw9Yy5sZW5ndGg7azxsO2srKylqPWoucmVwbGFjZSgiICIrY1trXSsiICIsIiAiKTtnLmNsYXNzTmFtZT1kLnRyaW0oail9ZWxzZSBnLmNsYXNzTmFtZT0iIn19cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGEsZT10eXBlb2YgYj09PSJib29sZWFuIjtpZihkLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZT1kKHRoaXMpO2UudG9nZ2xlQ2xhc3MoYS5jYWxsKHRoaXMsYyxlLmF0dHIoImNsYXNzIiksYiksYil9KTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoYz09PSJzdHJpbmciKXt2YXIgZixnPTAsaD1kKHRoaXMpLGo9YixrPWEuc3BsaXQoaSk7d2hpbGUoZj1rW2crK10paj1lP2o6IWguaGFzQ2xhc3MoZiksaFtqPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oZil9ZWxzZSBpZihjPT09InVuZGVmaW5lZCJ8fGM9PT0iYm9vbGVhbiIpdGhpcy5jbGFzc05hbWUmJmQuX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIsdGhpcy5jbGFzc05hbWUpLHRoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lfHxhPT09ITE/IiI6ZC5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIifSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiPSIgIithKyIgIjtmb3IodmFyIGM9MCxkPXRoaXMubGVuZ3RoO2M8ZDtjKyspaWYoKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoaCwiICIpLmluZGV4T2YoYik+LTEpcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihhKXtpZighYXJndW1lbnRzLmxlbmd0aCl7dmFyIGM9dGhpc1swXTtpZihjKXtpZihkLm5vZGVOYW1lKGMsIm9wdGlvbiIpKXt2YXIgZT1jLmF0dHJpYnV0ZXMudmFsdWU7cmV0dXJuIWV8fGUuc3BlY2lmaWVkP2MudmFsdWU6Yy50ZXh0fWlmKGQubm9kZU5hbWUoYywic2VsZWN0Iikpe3ZhciBmPWMuc2VsZWN0ZWRJbmRleCxnPVtdLGg9Yy5vcHRpb25zLGk9Yy50eXBlPT09InNlbGVjdC1vbmUiO2lmKGY8MClyZXR1cm4gbnVsbDtmb3IodmFyIGs9aT9mOjAsbD1pP2YrMTpoLmxlbmd0aDtrPGw7aysrKXt2YXIgbT1oW2tdO2lmKG0uc2VsZWN0ZWQmJihkLnN1cHBvcnQub3B0RGlzYWJsZWQ/IW0uZGlzYWJsZWQ6bS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIik9PT1udWxsKSYmKCFtLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFkLm5vZGVOYW1lKG0ucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2E9ZChtKS52YWwoKTtpZihpKXJldHVybiBhO2cucHVzaChhKX19aWYoaSYmIWcubGVuZ3RoJiZoLmxlbmd0aClyZXR1cm4gZChoW2ZdKS52YWwoKTtyZXR1cm4gZ31pZihvLnRlc3QoYy50eXBlKSYmIWQuc3VwcG9ydC5jaGVja09uKXJldHVybiBjLmdldEF0dHJpYnV0ZSgidmFsdWUiKT09PW51bGw/Im9uIjpjLnZhbHVlO3JldHVybihjLnZhbHVlfHwiIikucmVwbGFjZShqLCIiKX1yZXR1cm4gYn12YXIgbj1kLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1kKHRoaXMpLGU9YTtpZih0aGlzLm5vZGVUeXBlPT09MSl7biYmKGU9YS5jYWxsKHRoaXMsYixjLnZhbCgpKSksZT09bnVsbD9lPSIiOnR5cGVvZiBlPT09Im51bWJlciI/ZSs9IiI6ZC5pc0FycmF5KGUpJiYoZT1kLm1hcChlLGZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOmErIiJ9KSk7aWYoZC5pc0FycmF5KGUpJiZvLnRlc3QodGhpcy50eXBlKSl0aGlzLmNoZWNrZWQ9ZC5pbkFycmF5KGMudmFsKCksZSk+PTA7ZWxzZSBpZihkLm5vZGVOYW1lKHRoaXMsInNlbGVjdCIpKXt2YXIgZj1kLm1ha2VBcnJheShlKTtkKCJvcHRpb24iLHRoaXMpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkPWQuaW5BcnJheShkKHRoaXMpLnZhbCgpLGYpPj0wfSksZi5sZW5ndGh8fCh0aGlzLnNlbGVjdGVkSW5kZXg9LTEpfWVsc2UgdGhpcy52YWx1ZT1lfX0pfX0pLGQuZXh0ZW5kKHthdHRyRm46e3ZhbDohMCxjc3M6ITAsaHRtbDohMCx0ZXh0OiEwLGRhdGE6ITAsd2lkdGg6ITAsaGVpZ2h0OiEwLG9mZnNldDohMH0sYXR0cjpmdW5jdGlvbihhLGMsZSxmKXtpZighYXx8YS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04fHxhLm5vZGVUeXBlPT09MilyZXR1cm4gYjtpZihmJiZjIGluIGQuYXR0ckZuKXJldHVybiBkKGEpW2NdKGUpO3ZhciBnPWEubm9kZVR5cGUhPT0xfHwhZC5pc1hNTERvYyhhKSxoPWUhPT1iO2M9ZyYmZC5wcm9wc1tjXXx8YztpZihhLm5vZGVUeXBlPT09MSl7dmFyIGk9ay50ZXN0KGMpO2lmKGM9PT0ic2VsZWN0ZWQiJiYhZC5zdXBwb3J0Lm9wdFNlbGVjdGVkKXt2YXIgaj1hLnBhcmVudE5vZGU7aiYmKGouc2VsZWN0ZWRJbmRleCxqLnBhcmVudE5vZGUmJmoucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KX1pZigoYyBpbiBhfHxhW2NdIT09YikmJmcmJiFpKXtoJiYoYz09PSJ0eXBlIiYmbC50ZXN0KGEubm9kZU5hbWUpJiZhLnBhcmVudE5vZGUmJmQuZXJyb3IoInR5cGUgcHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZCIpLGU9PT1udWxsP2Eubm9kZVR5cGU9PT0xJiZhLnJlbW92ZUF0dHJpYnV0ZShjKTphW2NdPWUpO2lmKGQubm9kZU5hbWUoYSwiZm9ybSIpJiZhLmdldEF0dHJpYnV0ZU5vZGUoYykpcmV0dXJuIGEuZ2V0QXR0cmlidXRlTm9kZShjKS5ub2RlVmFsdWU7aWYoYz09PSJ0YWJJbmRleCIpe3ZhciBvPWEuZ2V0QXR0cmlidXRlTm9kZSgidGFiSW5kZXgiKTtyZXR1cm4gbyYmby5zcGVjaWZpZWQ/by52YWx1ZTptLnRlc3QoYS5ub2RlTmFtZSl8fG4udGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6Yn1yZXR1cm4gYVtjXX1pZighZC5zdXBwb3J0LnN0eWxlJiZnJiZjPT09InN0eWxlIil7aCYmKGEuc3R5bGUuY3NzVGV4dD0iIitlKTtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0fWgmJmEuc2V0QXR0cmlidXRlKGMsIiIrZSk7aWYoIWEuYXR0cmlidXRlc1tjXSYmKGEuaGFzQXR0cmlidXRlJiYhYS5oYXNBdHRyaWJ1dGUoYykpKXJldHVybiBiO3ZhciBwPSFkLnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWQmJmcmJmk/YS5nZXRBdHRyaWJ1dGUoYywyKTphLmdldEF0dHJpYnV0ZShjKTtyZXR1cm4gcD09PW51bGw/YjpwfWgmJihhW2NdPWUpO3JldHVybiBhW2NdfX0pO3ZhciBwPS9cLiguKikkLyxxPS9eKD86dGV4dGFyZWF8aW5wdXR8c2VsZWN0KSQvaSxyPS9cLi9nLHM9LyAvZyx0PS9bXlx3XHMufGBdL2csdT1mdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKHQsIlxcJCYiKX07ZC5ldmVudD17YWRkOmZ1bmN0aW9uKGMsZSxmLGcpe2lmKGMubm9kZVR5cGUhPT0zJiZjLm5vZGVUeXBlIT09OCl7dHJ5e2QuaXNXaW5kb3coYykmJihjIT09YSYmIWMuZnJhbWVFbGVtZW50KSYmKGM9YSl9Y2F0Y2goaCl7fWlmKGY9PT0hMSlmPXY7ZWxzZSBpZighZilyZXR1cm47dmFyIGksajtmLmhhbmRsZXImJihpPWYsZj1pLmhhbmRsZXIpLGYuZ3VpZHx8KGYuZ3VpZD1kLmd1aWQrKyk7dmFyIGs9ZC5fZGF0YShjKTtpZighaylyZXR1cm47dmFyIGw9ay5ldmVudHMsbT1rLmhhbmRsZTtsfHwoay5ldmVudHM9bD17fSksbXx8KGsuaGFuZGxlPW09ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIGQhPT0idW5kZWZpbmVkIiYmIWQuZXZlbnQudHJpZ2dlcmVkP2QuZXZlbnQuaGFuZGxlLmFwcGx5KG0uZWxlbSxhcmd1bWVudHMpOmJ9KSxtLmVsZW09YyxlPWUuc3BsaXQoIiAiKTt2YXIgbixvPTAscDt3aGlsZShuPWVbbysrXSl7aj1pP2QuZXh0ZW5kKHt9LGkpOntoYW5kbGVyOmYsZGF0YTpnfSxuLmluZGV4T2YoIi4iKT4tMT8ocD1uLnNwbGl0KCIuIiksbj1wLnNoaWZ0KCksai5uYW1lc3BhY2U9cC5zbGljZSgwKS5zb3J0KCkuam9pbigiLiIpKToocD1bXSxqLm5hbWVzcGFjZT0iIiksai50eXBlPW4sai5ndWlkfHwoai5ndWlkPWYuZ3VpZCk7dmFyIHE9bFtuXSxyPWQuZXZlbnQuc3BlY2lhbFtuXXx8e307aWYoIXEpe3E9bFtuXT1bXTtpZighci5zZXR1cHx8ci5zZXR1cC5jYWxsKGMsZyxwLG0pPT09ITEpYy5hZGRFdmVudExpc3RlbmVyP2MuYWRkRXZlbnRMaXN0ZW5lcihuLG0sITEpOmMuYXR0YWNoRXZlbnQmJmMuYXR0YWNoRXZlbnQoIm9uIituLG0pfXIuYWRkJiYoci5hZGQuY2FsbChjLGopLGouaGFuZGxlci5ndWlkfHwoai5oYW5kbGVyLmd1aWQ9Zi5ndWlkKSkscS5wdXNoKGopLGQuZXZlbnQuZ2xvYmFsW25dPSEwfWM9bnVsbH19LGdsb2JhbDp7fSxyZW1vdmU6ZnVuY3Rpb24oYSxjLGUsZil7aWYoYS5ub2RlVHlwZSE9PTMmJmEubm9kZVR5cGUhPT04KXtlPT09ITEmJihlPXYpO3ZhciBnLGgsaSxqLGs9MCxsLG0sbixvLHAscSxyLHM9ZC5oYXNEYXRhKGEpJiZkLl9kYXRhKGEpLHQ9cyYmcy5ldmVudHM7aWYoIXN8fCF0KXJldHVybjtjJiZjLnR5cGUmJihlPWMuaGFuZGxlcixjPWMudHlwZSk7aWYoIWN8fHR5cGVvZiBjPT09InN0cmluZyImJmMuY2hhckF0KDApPT09Ii4iKXtjPWN8fCIiO2ZvcihoIGluIHQpZC5ldmVudC5yZW1vdmUoYSxoK2MpO3JldHVybn1jPWMuc3BsaXQoIiAiKTt3aGlsZShoPWNbaysrXSl7cj1oLHE9bnVsbCxsPWguaW5kZXhPZigiLiIpPDAsbT1bXSxsfHwobT1oLnNwbGl0KCIuIiksaD1tLnNoaWZ0KCksbj1uZXcgUmVnRXhwKCIoXnxcXC4pIitkLm1hcChtLnNsaWNlKDApLnNvcnQoKSx1KS5qb2luKCJcXC4oPzouKlxcLik/IikrIihcXC58JCkiKSkscD10W2hdO2lmKCFwKWNvbnRpbnVlO2lmKCFlKXtmb3Ioaj0wO2o8cC5sZW5ndGg7aisrKXtxPXBbal07aWYobHx8bi50ZXN0KHEubmFtZXNwYWNlKSlkLmV2ZW50LnJlbW92ZShhLHIscS5oYW5kbGVyLGopLHAuc3BsaWNlKGotLSwxKX1jb250aW51ZX1vPWQuZXZlbnQuc3BlY2lhbFtoXXx8e307Zm9yKGo9Znx8MDtqPHAubGVuZ3RoO2orKyl7cT1wW2pdO2lmKGUuZ3VpZD09PXEuZ3VpZCl7aWYobHx8bi50ZXN0KHEubmFtZXNwYWNlKSlmPT1udWxsJiZwLnNwbGljZShqLS0sMSksby5yZW1vdmUmJm8ucmVtb3ZlLmNhbGwoYSxxKTtpZihmIT1udWxsKWJyZWFrfX1pZihwLmxlbmd0aD09PTB8fGYhPW51bGwmJnAubGVuZ3RoPT09MSkoIW8udGVhcmRvd258fG8udGVhcmRvd24uY2FsbChhLG0pPT09ITEpJiZkLnJlbW92ZUV2ZW50KGEsaCxzLmhhbmRsZSksZz1udWxsLGRlbGV0ZSB0W2hdfWlmKGQuaXNFbXB0eU9iamVjdCh0KSl7dmFyIHc9cy5oYW5kbGU7dyYmKHcuZWxlbT1udWxsKSxkZWxldGUgcy5ldmVudHMsZGVsZXRlIHMuaGFuZGxlLGQuaXNFbXB0eU9iamVjdChzKSYmZC5yZW1vdmVEYXRhKGEsYiwhMCl9fX0sdHJpZ2dlcjpmdW5jdGlvbihhLGMsZSl7dmFyIGY9YS50eXBlfHxhLGc9YXJndW1lbnRzWzNdO2lmKCFnKXthPXR5cGVvZiBhPT09Im9iamVjdCI/YVtkLmV4cGFuZG9dP2E6ZC5leHRlbmQoZC5FdmVudChmKSxhKTpkLkV2ZW50KGYpLGYuaW5kZXhPZigiISIpPj0wJiYoYS50eXBlPWY9Zi5zbGljZSgwLC0xKSxhLmV4Y2x1c2l2ZT0hMCksZXx8KGEuc3RvcFByb3BhZ2F0aW9uKCksZC5ldmVudC5nbG9iYWxbZl0mJmQuZWFjaChkLmNhY2hlLGZ1bmN0aW9uKCl7dmFyIGI9ZC5leHBhbmRvLGU9dGhpc1tiXTtlJiZlLmV2ZW50cyYmZS5ldmVudHNbZl0mJmQuZXZlbnQudHJpZ2dlcihhLGMsZS5oYW5kbGUuZWxlbSl9KSk7aWYoIWV8fGUubm9kZVR5cGU9PT0zfHxlLm5vZGVUeXBlPT09OClyZXR1cm4gYjthLnJlc3VsdD1iLGEudGFyZ2V0PWUsYz1kLm1ha2VBcnJheShjKSxjLnVuc2hpZnQoYSl9YS5jdXJyZW50VGFyZ2V0PWU7dmFyIGg9ZC5fZGF0YShlLCJoYW5kbGUiKTtoJiZoLmFwcGx5KGUsYyk7dmFyIGk9ZS5wYXJlbnROb2RlfHxlLm93bmVyRG9jdW1lbnQ7dHJ5e2UmJmUubm9kZU5hbWUmJmQubm9EYXRhW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV18fGVbIm9uIitmXSYmZVsib24iK2ZdLmFwcGx5KGUsYyk9PT0hMSYmKGEucmVzdWx0PSExLGEucHJldmVudERlZmF1bHQoKSl9Y2F0Y2goail7fWlmKCFhLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmkpZC5ldmVudC50cmlnZ2VyKGEsYyxpLCEwKTtlbHNlIGlmKCFhLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt2YXIgayxsPWEudGFyZ2V0LG09Zi5yZXBsYWNlKHAsIiIpLG49ZC5ub2RlTmFtZShsLCJhIikmJm09PT0iY2xpY2siLG89ZC5ldmVudC5zcGVjaWFsW21dfHx7fTtpZigoIW8uX2RlZmF1bHR8fG8uX2RlZmF1bHQuY2FsbChlLGEpPT09ITEpJiYhbiYmIShsJiZsLm5vZGVOYW1lJiZkLm5vRGF0YVtsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSl7dHJ5e2xbbV0mJihrPWxbIm9uIittXSxrJiYobFsib24iK21dPW51bGwpLGQuZXZlbnQudHJpZ2dlcmVkPSEwLGxbbV0oKSl9Y2F0Y2gocSl7fWsmJihsWyJvbiIrbV09ayksZC5ldmVudC50cmlnZ2VyZWQ9ITF9fX0saGFuZGxlOmZ1bmN0aW9uKGMpe3ZhciBlLGYsZyxoLGksaj1bXSxrPWQubWFrZUFycmF5KGFyZ3VtZW50cyk7Yz1rWzBdPWQuZXZlbnQuZml4KGN8fGEuZXZlbnQpLGMuY3VycmVudFRhcmdldD10aGlzLGU9Yy50eXBlLmluZGV4T2YoIi4iKTwwJiYhYy5leGNsdXNpdmUsZXx8KGc9Yy50eXBlLnNwbGl0KCIuIiksYy50eXBlPWcuc2hpZnQoKSxqPWcuc2xpY2UoMCkuc29ydCgpLGg9bmV3IFJlZ0V4cCgiKF58XFwuKSIrai5qb2luKCJcXC4oPzouKlxcLik/IikrIihcXC58JCkiKSksYy5uYW1lc3BhY2U9Yy5uYW1lc3BhY2V8fGouam9pbigiLiIpLGk9ZC5fZGF0YSh0aGlzLCJldmVudHMiKSxmPShpfHx7fSlbYy50eXBlXTtpZihpJiZmKXtmPWYuc2xpY2UoMCk7Zm9yKHZhciBsPTAsbT1mLmxlbmd0aDtsPG07bCsrKXt2YXIgbj1mW2xdO2lmKGV8fGgudGVzdChuLm5hbWVzcGFjZSkpe2MuaGFuZGxlcj1uLmhhbmRsZXIsYy5kYXRhPW4uZGF0YSxjLmhhbmRsZU9iaj1uO3ZhciBvPW4uaGFuZGxlci5hcHBseSh0aGlzLGspO28hPT1iJiYoYy5yZXN1bHQ9byxvPT09ITEmJihjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24oKSkpO2lmKGMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSlicmVha319fXJldHVybiBjLnJlc3VsdH0scHJvcHM6ImFsdEtleSBhdHRyQ2hhbmdlIGF0dHJOYW1lIGJ1YmJsZXMgYnV0dG9uIGNhbmNlbGFibGUgY2hhckNvZGUgY2xpZW50WCBjbGllbnRZIGN0cmxLZXkgY3VycmVudFRhcmdldCBkYXRhIGRldGFpbCBldmVudFBoYXNlIGZyb21FbGVtZW50IGhhbmRsZXIga2V5Q29kZSBsYXllclggbGF5ZXJZIG1ldGFLZXkgbmV3VmFsdWUgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHByZXZWYWx1ZSByZWxhdGVkTm9kZSByZWxhdGVkVGFyZ2V0IHNjcmVlblggc2NyZWVuWSBzaGlmdEtleSBzcmNFbGVtZW50IHRhcmdldCB0b0VsZW1lbnQgdmlldyB3aGVlbERlbHRhIHdoaWNoIi5zcGxpdCgiICIpLGZpeDpmdW5jdGlvbihhKXtpZihhW2QuZXhwYW5kb10pcmV0dXJuIGE7dmFyIGU9YTthPWQuRXZlbnQoZSk7Zm9yKHZhciBmPXRoaXMucHJvcHMubGVuZ3RoLGc7ZjspZz10aGlzLnByb3BzWy0tZl0sYVtnXT1lW2ddO2EudGFyZ2V0fHwoYS50YXJnZXQ9YS5zcmNFbGVtZW50fHxjKSxhLnRhcmdldC5ub2RlVHlwZT09PTMmJihhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlKSwhYS5yZWxhdGVkVGFyZ2V0JiZhLmZyb21FbGVtZW50JiYoYS5yZWxhdGVkVGFyZ2V0PWEuZnJvbUVsZW1lbnQ9PT1hLnRhcmdldD9hLnRvRWxlbWVudDphLmZyb21FbGVtZW50KTtpZihhLnBhZ2VYPT1udWxsJiZhLmNsaWVudFghPW51bGwpe3ZhciBoPWMuZG9jdW1lbnRFbGVtZW50LGk9Yy5ib2R5O2EucGFnZVg9YS5jbGllbnRYKyhoJiZoLnNjcm9sbExlZnR8fGkmJmkuc2Nyb2xsTGVmdHx8MCktKGgmJmguY2xpZW50TGVmdHx8aSYmaS5jbGllbnRMZWZ0fHwwKSxhLnBhZ2VZPWEuY2xpZW50WSsoaCYmaC5zY3JvbGxUb3B8fGkmJmkuc2Nyb2xsVG9wfHwwKS0oaCYmaC5jbGllbnRUb3B8fGkmJmkuY2xpZW50VG9wfHwwKX1hLndoaWNoPT1udWxsJiYoYS5jaGFyQ29kZSE9bnVsbHx8YS5rZXlDb2RlIT1udWxsKSYmKGEud2hpY2g9YS5jaGFyQ29kZSE9bnVsbD9hLmNoYXJDb2RlOmEua2V5Q29kZSksIWEubWV0YUtleSYmYS5jdHJsS2V5JiYoYS5tZXRhS2V5PWEuY3RybEtleSksIWEud2hpY2gmJmEuYnV0dG9uIT09YiYmKGEud2hpY2g9YS5idXR0b24mMT8xOmEuYnV0dG9uJjI/MzphLmJ1dHRvbiY0PzI6MCk7cmV0dXJuIGF9LGd1aWQ6MWU4LHByb3h5OmQucHJveHksc3BlY2lhbDp7cmVhZHk6e3NldHVwOmQuYmluZFJlYWR5LHRlYXJkb3duOmQubm9vcH0sbGl2ZTp7YWRkOmZ1bmN0aW9uKGEpe2QuZXZlbnQuYWRkKHRoaXMsRihhLm9yaWdUeXBlLGEuc2VsZWN0b3IpLGQuZXh0ZW5kKHt9LGEse2hhbmRsZXI6RSxndWlkOmEuaGFuZGxlci5ndWlkfSkpfSxyZW1vdmU6ZnVuY3Rpb24oYSl7ZC5ldmVudC5yZW1vdmUodGhpcyxGKGEub3JpZ1R5cGUsYS5zZWxlY3RvciksYSl9fSxiZWZvcmV1bmxvYWQ6e3NldHVwOmZ1bmN0aW9uKGEsYixjKXtkLmlzV2luZG93KHRoaXMpJiYodGhpcy5vbmJlZm9yZXVubG9hZD1jKX0sdGVhcmRvd246ZnVuY3Rpb24oYSxiKXt0aGlzLm9uYmVmb3JldW5sb2FkPT09YiYmKHRoaXMub25iZWZvcmV1bmxvYWQ9bnVsbCl9fX19LGQucmVtb3ZlRXZlbnQ9Yy5yZW1vdmVFdmVudExpc3RlbmVyP2Z1bmN0aW9uKGEsYixjKXthLnJlbW92ZUV2ZW50TGlzdGVuZXImJmEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMsITEpfTpmdW5jdGlvbihhLGIsYyl7YS5kZXRhY2hFdmVudCYmYS5kZXRhY2hFdmVudCgib24iK2IsYyl9LGQuRXZlbnQ9ZnVuY3Rpb24oYSl7aWYoIXRoaXMucHJldmVudERlZmF1bHQpcmV0dXJuIG5ldyBkLkV2ZW50KGEpO2EmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhpcy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQcmV2ZW50ZWR8fGEucmV0dXJuVmFsdWU9PT0hMXx8YS5nZXRQcmV2ZW50RGVmYXVsdCYmYS5nZXRQcmV2ZW50RGVmYXVsdCgpP3c6dik6dGhpcy50eXBlPWEsdGhpcy50aW1lU3RhbXA9ZC5ub3coKSx0aGlzW2QuZXhwYW5kb109ITB9LGQuRXZlbnQucHJvdG90eXBlPXtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPXc7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O2EmJihhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTphLnJldHVyblZhbHVlPSExKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD13O3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDthJiYoYS5zdG9wUHJvcGFnYXRpb24mJmEuc3RvcFByb3BhZ2F0aW9uKCksYS5jYW5jZWxCdWJibGU9ITApfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPXcsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX0saXNEZWZhdWx0UHJldmVudGVkOnYsaXNQcm9wYWdhdGlvblN0b3BwZWQ6dixpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDp2fTt2YXIgeD1mdW5jdGlvbihhKXt2YXIgYj1hLnJlbGF0ZWRUYXJnZXQ7dHJ5e2lmKGIhPT1jJiYhYi5wYXJlbnROb2RlKXJldHVybjt3aGlsZShiJiZiIT09dGhpcyliPWIucGFyZW50Tm9kZTtiIT09dGhpcyYmKGEudHlwZT1hLmRhdGEsZC5ldmVudC5oYW5kbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1jYXRjaChlKXt9fSx5PWZ1bmN0aW9uKGEpe2EudHlwZT1hLmRhdGEsZC5ldmVudC5oYW5kbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtkLmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSxmdW5jdGlvbihhLGIpe2QuZXZlbnQuc3BlY2lhbFthXT17c2V0dXA6ZnVuY3Rpb24oYyl7ZC5ldmVudC5hZGQodGhpcyxiLGMmJmMuc2VsZWN0b3I/eTp4LGEpfSx0ZWFyZG93bjpmdW5jdGlvbihhKXtkLmV2ZW50LnJlbW92ZSh0aGlzLGIsYSYmYS5zZWxlY3Rvcj95OngpfX19KSxkLnN1cHBvcnQuc3VibWl0QnViYmxlc3x8KGQuZXZlbnQuc3BlY2lhbC5zdWJtaXQ9e3NldHVwOmZ1bmN0aW9uKGEsYil7aWYodGhpcy5ub2RlTmFtZSYmdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09ImZvcm0iKWQuZXZlbnQuYWRkKHRoaXMsImNsaWNrLnNwZWNpYWxTdWJtaXQiLGZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0LGM9Yi50eXBlOyhjPT09InN1Ym1pdCJ8fGM9PT0iaW1hZ2UiKSYmZChiKS5jbG9zZXN0KCJmb3JtIikubGVuZ3RoJiZDKCJzdWJtaXQiLHRoaXMsYXJndW1lbnRzKX0pLGQuZXZlbnQuYWRkKHRoaXMsImtleXByZXNzLnNwZWNpYWxTdWJtaXQiLGZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0LGM9Yi50eXBlOyhjPT09InRleHQifHxjPT09InBhc3N3b3JkIikmJmQoYikuY2xvc2VzdCgiZm9ybSIpLmxlbmd0aCYmYS5rZXlDb2RlPT09MTMmJkMoInN1Ym1pdCIsdGhpcyxhcmd1bWVudHMpfSk7ZWxzZSByZXR1cm4hMX0sdGVhcmRvd246ZnVuY3Rpb24oYSl7ZC5ldmVudC5yZW1vdmUodGhpcywiLnNwZWNpYWxTdWJtaXQiKX19KTtpZighZC5zdXBwb3J0LmNoYW5nZUJ1YmJsZXMpe3ZhciB6LEE9ZnVuY3Rpb24oYSl7dmFyIGI9YS50eXBlLGM9YS52YWx1ZTtiPT09InJhZGlvInx8Yj09PSJjaGVja2JveCI/Yz1hLmNoZWNrZWQ6Yj09PSJzZWxlY3QtbXVsdGlwbGUiP2M9YS5zZWxlY3RlZEluZGV4Pi0xP2QubWFwKGEub3B0aW9ucyxmdW5jdGlvbihhKXtyZXR1cm4gYS5zZWxlY3RlZH0pLmpvaW4oIi0iKToiIjphLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0ic2VsZWN0IiYmKGM9YS5zZWxlY3RlZEluZGV4KTtyZXR1cm4gY30sQj1mdW5jdGlvbiBCKGEpe3ZhciBjPWEudGFyZ2V0LGUsZjtpZihxLnRlc3QoYy5ub2RlTmFtZSkmJiFjLnJlYWRPbmx5KXtlPWQuX2RhdGEoYywiX2NoYW5nZV9kYXRhIiksZj1BKGMpLChhLnR5cGUhPT0iZm9jdXNvdXQifHxjLnR5cGUhPT0icmFkaW8iKSYmZC5fZGF0YShjLCJfY2hhbmdlX2RhdGEiLGYpO2lmKGU9PT1ifHxmPT09ZSlyZXR1cm47aWYoZSE9bnVsbHx8ZilhLnR5cGU9ImNoYW5nZSIsYS5saXZlRmlyZWQ9YixkLmV2ZW50LnRyaWdnZXIoYSxhcmd1bWVudHNbMV0sYyl9fTtkLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtmaWx0ZXJzOntmb2N1c291dDpCLGJlZm9yZWRlYWN0aXZhdGU6QixjbGljazpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldCxjPWIudHlwZTsoYz09PSJyYWRpbyJ8fGM9PT0iY2hlY2tib3gifHxiLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0ic2VsZWN0IikmJkIuY2FsbCh0aGlzLGEpfSxrZXlkb3duOmZ1bmN0aW9uKGEpe3ZhciBiPWEudGFyZ2V0LGM9Yi50eXBlOyhhLmtleUNvZGU9PT0xMyYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09InRleHRhcmVhInx8YS5rZXlDb2RlPT09MzImJihjPT09ImNoZWNrYm94Inx8Yz09PSJyYWRpbyIpfHxjPT09InNlbGVjdC1tdWx0aXBsZSIpJiZCLmNhbGwodGhpcyxhKX0sYmVmb3JlYWN0aXZhdGU6ZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7ZC5fZGF0YShiLCJfY2hhbmdlX2RhdGEiLEEoYikpfX0sc2V0dXA6ZnVuY3Rpb24oYSxiKXtpZih0aGlzLnR5cGU9PT0iZmlsZSIpcmV0dXJuITE7Zm9yKHZhciBjIGluIHopZC5ldmVudC5hZGQodGhpcyxjKyIuc3BlY2lhbENoYW5nZSIseltjXSk7cmV0dXJuIHEudGVzdCh0aGlzLm5vZGVOYW1lKX0sdGVhcmRvd246ZnVuY3Rpb24oYSl7ZC5ldmVudC5yZW1vdmUodGhpcywiLnNwZWNpYWxDaGFuZ2UiKTtyZXR1cm4gcS50ZXN0KHRoaXMubm9kZU5hbWUpfX0sej1kLmV2ZW50LnNwZWNpYWwuY2hhbmdlLmZpbHRlcnMsei5mb2N1cz16LmJlZm9yZWFjdGl2YXRlfWMuYWRkRXZlbnRMaXN0ZW5lciYmZC5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7YT1kLmV2ZW50LmZpeChhKSxhLnR5cGU9YjtyZXR1cm4gZC5ldmVudC5oYW5kbGUuY2FsbCh0aGlzLGEpfWQuZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoYSxjLCEwKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxjLCEwKX19fSksZC5lYWNoKFsiYmluZCIsIm9uZSJdLGZ1bmN0aW9uKGEsYyl7ZC5mbltjXT1mdW5jdGlvbihhLGUsZil7aWYodHlwZW9mIGE9PT0ib2JqZWN0Iil7Zm9yKHZhciBnIGluIGEpdGhpc1tjXShnLGUsYVtnXSxmKTtyZXR1cm4gdGhpc31pZihkLmlzRnVuY3Rpb24oZSl8fGU9PT0hMSlmPWUsZT1iO3ZhciBoPWM9PT0ib25lIj9kLnByb3h5KGYsZnVuY3Rpb24oYSl7ZCh0aGlzKS51bmJpbmQoYSxoKTtyZXR1cm4gZi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTpmO2lmKGE9PT0idW5sb2FkIiYmYyE9PSJvbmUiKXRoaXMub25lKGEsZSxmKTtlbHNlIGZvcih2YXIgaT0wLGo9dGhpcy5sZW5ndGg7aTxqO2krKylkLmV2ZW50LmFkZCh0aGlzW2ldLGEsaCxlKTtyZXR1cm4gdGhpc319KSxkLmZuLmV4dGVuZCh7dW5iaW5kOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGEhPT0ib2JqZWN0Inx8YS5wcmV2ZW50RGVmYXVsdClmb3IodmFyIGU9MCxmPXRoaXMubGVuZ3RoO2U8ZjtlKyspZC5ldmVudC5yZW1vdmUodGhpc1tlXSxhLGIpO2Vsc2UgZm9yKHZhciBjIGluIGEpdGhpcy51bmJpbmQoYyxhW2NdKTtyZXR1cm4gdGhpc30sZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMubGl2ZShiLGMsZCxhKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg9PT0wP3RoaXMudW5iaW5kKCJsaXZlIik6dGhpcy5kaWUoYixudWxsLGMsYSl9LHRyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZC5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihhLGIpe2lmKHRoaXNbMF0pe3ZhciBjPWQuRXZlbnQoYSk7Yy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCksZC5ldmVudC50cmlnZ2VyKGMsYix0aGlzWzBdKTtyZXR1cm4gYy5yZXN1bHR9fSx0b2dnbGU6ZnVuY3Rpb24oYSl7dmFyIGI9YXJndW1lbnRzLGM9MTt3aGlsZShjPGIubGVuZ3RoKWQucHJveHkoYSxiW2MrK10pO3JldHVybiB0aGlzLmNsaWNrKGQucHJveHkoYSxmdW5jdGlvbihlKXt2YXIgZj0oZC5fZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIithLmd1aWQpfHwwKSVjO2QuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkLGYrMSksZS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBiW2ZdLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8ITF9KSl9LGhvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfX0pO3ZhciBEPXtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQiLG1vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifTtkLmVhY2goWyJsaXZlIiwiZGllIl0sZnVuY3Rpb24oYSxjKXtkLmZuW2NdPWZ1bmN0aW9uKGEsZSxmLGcpe3ZhciBoLGk9MCxqLGssbCxtPWd8fHRoaXMuc2VsZWN0b3Isbj1nP3RoaXM6ZCh0aGlzLmNvbnRleHQpO2lmKHR5cGVvZiBhPT09Im9iamVjdCImJiFhLnByZXZlbnREZWZhdWx0KXtmb3IodmFyIG8gaW4gYSluW2NdKG8sZSxhW29dLG0pO3JldHVybiB0aGlzfWQuaXNGdW5jdGlvbihlKSYmKGY9ZSxlPWIpLGE9KGF8fCIiKS5zcGxpdCgiICIpO3doaWxlKChoPWFbaSsrXSkhPW51bGwpe2o9cC5leGVjKGgpLGs9IiIsaiYmKGs9alswXSxoPWgucmVwbGFjZShwLCIiKSk7aWYoaD09PSJob3ZlciIpe2EucHVzaCgibW91c2VlbnRlciIraywibW91c2VsZWF2ZSIrayk7Y29udGludWV9bD1oLGg9PT0iZm9jdXMifHxoPT09ImJsdXIiPyhhLnB1c2goRFtoXStrKSxoPWgrayk6aD0oRFtoXXx8aCkraztpZihjPT09ImxpdmUiKWZvcih2YXIgcT0wLHI9bi5sZW5ndGg7cTxyO3ErKylkLmV2ZW50LmFkZChuW3FdLCJsaXZlLiIrRihoLG0pLHtkYXRhOmUsc2VsZWN0b3I6bSxoYW5kbGVyOmYsb3JpZ1R5cGU6aCxvcmlnSGFuZGxlcjpmLHByZVR5cGU6bH0pO2Vsc2Ugbi51bmJpbmQoImxpdmUuIitGKGgsbSksZil9cmV0dXJuIHRoaXN9fSksZC5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7ZC5mbltiXT1mdW5jdGlvbihhLGMpe2M9PW51bGwmJihjPWEsYT1udWxsKTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMuYmluZChiLGEsYyk6dGhpcy50cmlnZ2VyKGIpfSxkLmF0dHJGbiYmKGQuYXR0ckZuW2JdPSEwKX0pLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdShhLGIsYyxkLGUsZil7Zm9yKHZhciBnPTAsaD1kLmxlbmd0aDtnPGg7ZysrKXt2YXIgaT1kW2ddO2lmKGkpe3ZhciBqPSExO2k9aVthXTt3aGlsZShpKXtpZihpLnNpemNhY2hlPT09Yyl7aj1kW2kuc2l6c2V0XTticmVha31pZihpLm5vZGVUeXBlPT09MSl7Znx8KGkuc2l6Y2FjaGU9YyxpLnNpenNldD1nKTtpZih0eXBlb2YgYiE9PSJzdHJpbmciKXtpZihpPT09Yil7aj0hMDticmVha319ZWxzZSBpZihrLmZpbHRlcihiLFtpXSkubGVuZ3RoPjApe2o9aTticmVha319aT1pW2FdfWRbZ109an19fWZ1bmN0aW9uIHQoYSxiLGMsZCxlLGYpe2Zvcih2YXIgZz0wLGg9ZC5sZW5ndGg7ZzxoO2crKyl7dmFyIGk9ZFtnXTtpZihpKXt2YXIgaj0hMTtpPWlbYV07d2hpbGUoaSl7aWYoaS5zaXpjYWNoZT09PWMpe2o9ZFtpLnNpenNldF07YnJlYWt9aS5ub2RlVHlwZT09PTEmJiFmJiYoaS5zaXpjYWNoZT1jLGkuc2l6c2V0PWcpO2lmKGkubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWIpe2o9aTticmVha31pPWlbYV19ZFtnXT1qfX19dmFyIGE9LygoPzpcKCg/OlwoW14oKV0rXCl8W14oKV0rKStcKXxcWyg/OlxbW15cW1xdXSpcXXxbJyJdW14nIl0qWyciXXxbXlxbXF0nIl0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/KCg/Oi58XHJ8XG4pKikvZyxlPTAsZj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGc9ITEsaD0hMCxpPS9cXC9nLGo9L1xXLztbMCwwXS5zb3J0KGZ1bmN0aW9uKCl7aD0hMTtyZXR1cm4gMH0pO3ZhciBrPWZ1bmN0aW9uKGIsZCxlLGcpe2U9ZXx8W10sZD1kfHxjO3ZhciBoPWQ7aWYoZC5ub2RlVHlwZSE9PTEmJmQubm9kZVR5cGUhPT05KXJldHVybltdO2lmKCFifHx0eXBlb2YgYiE9PSJzdHJpbmciKXJldHVybiBlO3ZhciBpLGosbixvLHEscixzLHQsdT0hMCx3PWsuaXNYTUwoZCkseD1bXSx5PWI7ZG97YS5leGVjKCIiKSxpPWEuZXhlYyh5KTtpZihpKXt5PWlbM10seC5wdXNoKGlbMV0pO2lmKGlbMl0pe289aVszXTticmVha319fXdoaWxlKGkpO2lmKHgubGVuZ3RoPjEmJm0uZXhlYyhiKSlpZih4Lmxlbmd0aD09PTImJmwucmVsYXRpdmVbeFswXV0paj12KHhbMF0reFsxXSxkKTtlbHNle2o9bC5yZWxhdGl2ZVt4WzBdXT9bZF06ayh4LnNoaWZ0KCksZCk7d2hpbGUoeC5sZW5ndGgpYj14LnNoaWZ0KCksbC5yZWxhdGl2ZVtiXSYmKGIrPXguc2hpZnQoKSksaj12KGIsail9ZWxzZXshZyYmeC5sZW5ndGg+MSYmZC5ub2RlVHlwZT09PTkmJiF3JiZsLm1hdGNoLklELnRlc3QoeFswXSkmJiFsLm1hdGNoLklELnRlc3QoeFt4Lmxlbmd0aC0xXSkmJihxPWsuZmluZCh4LnNoaWZ0KCksZCx3KSxkPXEuZXhwcj9rLmZpbHRlcihxLmV4cHIscS5zZXQpWzBdOnEuc2V0WzBdKTtpZihkKXtxPWc/e2V4cHI6eC5wb3AoKSxzZXQ6cChnKX06ay5maW5kKHgucG9wKCkseC5sZW5ndGg9PT0xJiYoeFswXT09PSJ+Inx8eFswXT09PSIrIikmJmQucGFyZW50Tm9kZT9kLnBhcmVudE5vZGU6ZCx3KSxqPXEuZXhwcj9rLmZpbHRlcihxLmV4cHIscS5zZXQpOnEuc2V0LHgubGVuZ3RoPjA/bj1wKGopOnU9ITE7d2hpbGUoeC5sZW5ndGgpcj14LnBvcCgpLHM9cixsLnJlbGF0aXZlW3JdP3M9eC5wb3AoKTpyPSIiLHM9PW51bGwmJihzPWQpLGwucmVsYXRpdmVbcl0obixzLHcpfWVsc2Ugbj14PVtdfW58fChuPWopLG58fGsuZXJyb3Iocnx8Yik7aWYoZi5jYWxsKG4pPT09IltvYmplY3QgQXJyYXldIilpZih1KWlmKGQmJmQubm9kZVR5cGU9PT0xKWZvcih0PTA7blt0XSE9bnVsbDt0Kyspblt0XSYmKG5bdF09PT0hMHx8blt0XS5ub2RlVHlwZT09PTEmJmsuY29udGFpbnMoZCxuW3RdKSkmJmUucHVzaChqW3RdKTtlbHNlIGZvcih0PTA7blt0XSE9bnVsbDt0Kyspblt0XSYmblt0XS5ub2RlVHlwZT09PTEmJmUucHVzaChqW3RdKTtlbHNlIGUucHVzaC5hcHBseShlLG4pO2Vsc2UgcChuLGUpO28mJihrKG8saCxlLGcpLGsudW5pcXVlU29ydChlKSk7cmV0dXJuIGV9O2sudW5pcXVlU29ydD1mdW5jdGlvbihhKXtpZihyKXtnPWgsYS5zb3J0KHIpO2lmKGcpZm9yKHZhciBiPTE7YjxhLmxlbmd0aDtiKyspYVtiXT09PWFbYi0xXSYmYS5zcGxpY2UoYi0tLDEpfXJldHVybiBhfSxrLm1hdGNoZXM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gayhhLG51bGwsbnVsbCxiKX0say5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gayhiLG51bGwsbnVsbCxbYV0pLmxlbmd0aD4wfSxrLmZpbmQ9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKCFhKXJldHVybltdO2Zvcih2YXIgZT0wLGY9bC5vcmRlci5sZW5ndGg7ZTxmO2UrKyl7dmFyIGcsaD1sLm9yZGVyW2VdO2lmKGc9bC5sZWZ0TWF0Y2hbaF0uZXhlYyhhKSl7dmFyIGo9Z1sxXTtnLnNwbGljZSgxLDEpO2lmKGouc3Vic3RyKGoubGVuZ3RoLTEpIT09IlxcIil7Z1sxXT0oZ1sxXXx8IiIpLnJlcGxhY2UoaSwiIiksZD1sLmZpbmRbaF0oZyxiLGMpO2lmKGQhPW51bGwpe2E9YS5yZXBsYWNlKGwubWF0Y2hbaF0sIiIpO2JyZWFrfX19fWR8fChkPXR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09InVuZGVmaW5lZCI/Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOltdKTtyZXR1cm57c2V0OmQsZXhwcjphfX0say5maWx0ZXI9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGYsZyxoPWEsaT1bXSxqPWMsbT1jJiZjWzBdJiZrLmlzWE1MKGNbMF0pO3doaWxlKGEmJmMubGVuZ3RoKXtmb3IodmFyIG4gaW4gbC5maWx0ZXIpaWYoKGY9bC5sZWZ0TWF0Y2hbbl0uZXhlYyhhKSkhPW51bGwmJmZbMl0pe3ZhciBvLHAscT1sLmZpbHRlcltuXSxyPWZbMV07Zz0hMSxmLnNwbGljZSgxLDEpO2lmKHIuc3Vic3RyKHIubGVuZ3RoLTEpPT09IlxcIiljb250aW51ZTtqPT09aSYmKGk9W10pO2lmKGwucHJlRmlsdGVyW25dKXtmPWwucHJlRmlsdGVyW25dKGYsaixkLGksZSxtKTtpZihmKXtpZihmPT09ITApY29udGludWV9ZWxzZSBnPW89ITB9aWYoZilmb3IodmFyIHM9MDsocD1qW3NdKSE9bnVsbDtzKyspaWYocCl7bz1xKHAsZixzLGopO3ZhciB0PWVeISFvO2QmJm8hPW51bGw/dD9nPSEwOmpbc109ITE6dCYmKGkucHVzaChwKSxnPSEwKX1pZihvIT09Yil7ZHx8KGo9aSksYT1hLnJlcGxhY2UobC5tYXRjaFtuXSwiIik7aWYoIWcpcmV0dXJuW107YnJlYWt9fWlmKGE9PT1oKWlmKGc9PW51bGwpay5lcnJvcihhKTtlbHNlIGJyZWFrO2g9YX1yZXR1cm4gan0say5lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2F9O3ZhciBsPWsuc2VsZWN0b3JzPXtvcmRlcjpbIklEIiwiTkFNRSIsIlRBRyJdLG1hdGNoOntJRDovIygoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sQ0xBU1M6L1wuKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspLyxOQU1FOi9cW25hbWU9WyciXSooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylbJyJdKlxdLyxBVFRSOi9cW1xzKigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKVxzKig/OihcUz89KVxzKig/OihbJyJdKSguKj8pXDN8KCM/KD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKil8KXwpXHMqXF0vLFRBRzovXigoPzpbXHdcdTAwYzAtXHVGRkZGXCpcLV18XFwuKSspLyxDSElMRDovOihvbmx5fG50aHxsYXN0fGZpcnN0KS1jaGlsZCg/OlwoXHMqKGV2ZW58b2RkfCg/OlsrXC1dP1xkK3woPzpbK1wtXT9cZCopP25ccyooPzpbK1wtXVxzKlxkKyk/KSlccypcKSk/LyxQT1M6LzoobnRofGVxfGd0fGx0fGZpcnN0fGxhc3R8ZXZlbnxvZGQpKD86XCgoXGQqKVwpKT8oPz1bXlwtXXwkKS8sUFNFVURPOi86KCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspKD86XCgoWyciXT8pKCg/OlwoW15cKV0rXCl8W15cKFwpXSopKylcMlwpKT8vfSxsZWZ0TWF0Y2g6e30sYXR0ck1hcDp7ImNsYXNzIjoiY2xhc3NOYW1lIiwiZm9yIjoiaHRtbEZvciJ9LGF0dHJIYW5kbGU6e2hyZWY6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJocmVmIil9LHR5cGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJ0eXBlIil9fSxyZWxhdGl2ZTp7IisiOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGI9PT0ic3RyaW5nIixkPWMmJiFqLnRlc3QoYiksZT1jJiYhZDtkJiYoYj1iLnRvTG93ZXJDYXNlKCkpO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGgsaDtmPGc7ZisrKWlmKGg9YVtmXSl7d2hpbGUoKGg9aC5wcmV2aW91c1NpYmxpbmcpJiZoLm5vZGVUeXBlIT09MSl7fWFbZl09ZXx8aCYmaC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yj9ofHwhMTpoPT09Yn1lJiZrLmZpbHRlcihiLGEsITApfSwiPiI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPXR5cGVvZiBiPT09InN0cmluZyIsZT0wLGY9YS5sZW5ndGg7aWYoZCYmIWoudGVzdChiKSl7Yj1iLnRvTG93ZXJDYXNlKCk7Zm9yKDtlPGY7ZSsrKXtjPWFbZV07aWYoYyl7dmFyIGc9Yy5wYXJlbnROb2RlO2FbZV09Zy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yj9nOiExfX19ZWxzZXtmb3IoO2U8ZjtlKyspYz1hW2VdLGMmJihhW2VdPWQ/Yy5wYXJlbnROb2RlOmMucGFyZW50Tm9kZT09PWIpO2QmJmsuZmlsdGVyKGIsYSwhMCl9fSwiIjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZj1lKyssZz11O3R5cGVvZiBiPT09InN0cmluZyImJiFqLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz10KSxnKCJwYXJlbnROb2RlIixiLGYsYSxkLGMpfSwifiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9dTt0eXBlb2YgYj09PSJzdHJpbmciJiYhai50ZXN0KGIpJiYoYj1iLnRvTG93ZXJDYXNlKCksZD1iLGc9dCksZygicHJldmlvdXNTaWJsaW5nIixiLGYsYSxkLGMpfX0sZmluZDp7SUQ6ZnVuY3Rpb24oYSxiLGMpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRCeUlkIT09InVuZGVmaW5lZCImJiFjKXt2YXIgZD1iLmdldEVsZW1lbnRCeUlkKGFbMV0pO3JldHVybiBkJiZkLnBhcmVudE5vZGU/W2RdOltdfX0sTkFNRTpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlOYW1lIT09InVuZGVmaW5lZCIpe3ZhciBjPVtdLGQ9Yi5nZXRFbGVtZW50c0J5TmFtZShhWzFdKTtmb3IodmFyIGU9MCxmPWQubGVuZ3RoO2U8ZjtlKyspZFtlXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKT09PWFbMV0mJmMucHVzaChkW2VdKTtyZXR1cm4gYy5sZW5ndGg9PT0wP251bGw6Y319LFRBRzpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09InVuZGVmaW5lZCIpcmV0dXJuIGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYVsxXSl9fSxwcmVGaWx0ZXI6e0NMQVNTOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXthPSIgIithWzFdLnJlcGxhY2UoaSwiIikrIiAiO2lmKGYpcmV0dXJuIGE7Zm9yKHZhciBnPTAsaDsoaD1iW2ddKSE9bnVsbDtnKyspaCYmKGVeKGguY2xhc3NOYW1lJiYoIiAiK2guY2xhc3NOYW1lKyIgIikucmVwbGFjZSgvW1x0XG5ccl0vZywiICIpLmluZGV4T2YoYSk+PTApP2N8fGQucHVzaChoKTpjJiYoYltnXT0hMSkpO3JldHVybiExfSxJRDpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXS5yZXBsYWNlKGksIiIpfSxUQUc6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYVsxXS5yZXBsYWNlKGksIiIpLnRvTG93ZXJDYXNlKCl9LENISUxEOmZ1bmN0aW9uKGEpe2lmKGFbMV09PT0ibnRoIil7YVsyXXx8ay5lcnJvcihhWzBdKSxhWzJdPWFbMl0ucmVwbGFjZSgvXlwrfFxzKi9nLCIiKTt2YXIgYj0vKC0/KShcZCopKD86bihbK1wtXT9cZCopKT8vLmV4ZWMoYVsyXT09PSJldmVuIiYmIjJuInx8YVsyXT09PSJvZGQiJiYiMm4rMSJ8fCEvXEQvLnRlc3QoYVsyXSkmJiIwbisiK2FbMl18fGFbMl0pO2FbMl09YlsxXSsoYlsyXXx8MSktMCxhWzNdPWJbM10tMH1lbHNlIGFbMl0mJmsuZXJyb3IoYVswXSk7YVswXT1lKys7cmV0dXJuIGF9LEFUVFI6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciBnPWFbMV09YVsxXS5yZXBsYWNlKGksIiIpOyFmJiZsLmF0dHJNYXBbZ10mJihhWzFdPWwuYXR0ck1hcFtnXSksYVs0XT0oYVs0XXx8YVs1XXx8IiIpLnJlcGxhY2UoaSwiIiksYVsyXT09PSJ+PSImJihhWzRdPSIgIithWzRdKyIgIik7cmV0dXJuIGF9LFBTRVVETzpmdW5jdGlvbihiLGMsZCxlLGYpe2lmKGJbMV09PT0ibm90IilpZigoYS5leGVjKGJbM10pfHwiIikubGVuZ3RoPjF8fC9eXHcvLnRlc3QoYlszXSkpYlszXT1rKGJbM10sbnVsbCxudWxsLGMpO2Vsc2V7dmFyIGc9ay5maWx0ZXIoYlszXSxjLGQsITBeZik7ZHx8ZS5wdXNoLmFwcGx5KGUsZyk7cmV0dXJuITF9ZWxzZSBpZihsLm1hdGNoLlBPUy50ZXN0KGJbMF0pfHxsLm1hdGNoLkNISUxELnRlc3QoYlswXSkpcmV0dXJuITA7cmV0dXJuIGJ9LFBPUzpmdW5jdGlvbihhKXthLnVuc2hpZnQoITApO3JldHVybiBhfX0sZmlsdGVyczp7ZW5hYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSExJiZhLnR5cGUhPT0iaGlkZGVuIn0sZGlzYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5jaGVja2VkPT09ITB9LHNlbGVjdGVkOmZ1bmN0aW9uKGEpe2EucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7cmV0dXJuIGEuc2VsZWN0ZWQ9PT0hMH0scGFyZW50OmZ1bmN0aW9uKGEpe3JldHVybiEhYS5maXJzdENoaWxkfSxlbXB0eTpmdW5jdGlvbihhKXtyZXR1cm4hYS5maXJzdENoaWxkfSxoYXM6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiEhayhjWzNdLGEpLmxlbmd0aH0saGVhZGVyOmZ1bmN0aW9uKGEpe3JldHVybi9oXGQvaS50ZXN0KGEubm9kZU5hbWUpfSx0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiJ0ZXh0Ij09PWEuZ2V0QXR0cmlidXRlKCJ0eXBlIil9LHJhZGlvOmZ1bmN0aW9uKGEpe3JldHVybiJyYWRpbyI9PT1hLnR5cGV9LGNoZWNrYm94OmZ1bmN0aW9uKGEpe3JldHVybiJjaGVja2JveCI9PT1hLnR5cGV9LGZpbGU6ZnVuY3Rpb24oYSl7cmV0dXJuImZpbGUiPT09YS50eXBlfSxwYXNzd29yZDpmdW5jdGlvbihhKXtyZXR1cm4icGFzc3dvcmQiPT09YS50eXBlfSxzdWJtaXQ6ZnVuY3Rpb24oYSl7cmV0dXJuInN1Ym1pdCI9PT1hLnR5cGV9LGltYWdlOmZ1bmN0aW9uKGEpe3JldHVybiJpbWFnZSI9PT1hLnR5cGV9LHJlc2V0OmZ1bmN0aW9uKGEpe3JldHVybiJyZXNldCI9PT1hLnR5cGV9LGJ1dHRvbjpmdW5jdGlvbihhKXtyZXR1cm4iYnV0dG9uIj09PWEudHlwZXx8YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImJ1dHRvbiJ9LGlucHV0OmZ1bmN0aW9uKGEpe3JldHVybi9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2kudGVzdChhLm5vZGVOYW1lKX19LHNldEZpbHRlcnM6e2ZpcnN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0wfSxsYXN0OmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBiPT09ZC5sZW5ndGgtMX0sZXZlbjpmdW5jdGlvbihhLGIpe3JldHVybiBiJTI9PT0wfSxvZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYiUyPT09MX0sbHQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPGNbM10tMH0sZ3Q6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPmNbM10tMH0sbnRoOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gY1szXS0wPT09Yn0sZXE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjWzNdLTA9PT1ifX0sZmlsdGVyOntQU0VVRE86ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsxXSxmPWwuZmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpO2lmKGU9PT0iY29udGFpbnMiKXJldHVybihhLnRleHRDb250ZW50fHxhLmlubmVyVGV4dHx8ay5nZXRUZXh0KFthXSl8fCIiKS5pbmRleE9mKGJbM10pPj0wO2lmKGU9PT0ibm90Iil7dmFyIGc9YlszXTtmb3IodmFyIGg9MCxpPWcubGVuZ3RoO2g8aTtoKyspaWYoZ1toXT09PWEpcmV0dXJuITE7cmV0dXJuITB9ay5lcnJvcihlKX0sQ0hJTEQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iWzFdLGQ9YTtzd2l0Y2goYyl7Y2FzZSJvbmx5IjpjYXNlImZpcnN0Ijp3aGlsZShkPWQucHJldmlvdXNTaWJsaW5nKWlmKGQubm9kZVR5cGU9PT0xKXJldHVybiExO2lmKGM9PT0iZmlyc3QiKXJldHVybiEwO2Q9YTtjYXNlImxhc3QiOndoaWxlKGQ9ZC5uZXh0U2libGluZylpZihkLm5vZGVUeXBlPT09MSlyZXR1cm4hMTtyZXR1cm4hMDtjYXNlIm50aCI6dmFyIGU9YlsyXSxmPWJbM107aWYoZT09PTEmJmY9PT0wKXJldHVybiEwO3ZhciBnPWJbMF0saD1hLnBhcmVudE5vZGU7aWYoaCYmKGguc2l6Y2FjaGUhPT1nfHwhYS5ub2RlSW5kZXgpKXt2YXIgaT0wO2ZvcihkPWguZmlyc3RDaGlsZDtkO2Q9ZC5uZXh0U2libGluZylkLm5vZGVUeXBlPT09MSYmKGQubm9kZUluZGV4PSsraSk7aC5zaXpjYWNoZT1nfXZhciBqPWEubm9kZUluZGV4LWY7cmV0dXJuIGU9PT0wP2o9PT0wOmolZT09PTAmJmovZT49MH19LElEOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEubm9kZVR5cGU9PT0xJiZhLmdldEF0dHJpYnV0ZSgiaWQiKT09PWJ9LFRBRzpmdW5jdGlvbihhLGIpe3JldHVybiBiPT09IioiJiZhLm5vZGVUeXBlPT09MXx8YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yn0sQ0xBU1M6ZnVuY3Rpb24oYSxiKXtyZXR1cm4oIiAiKyhhLmNsYXNzTmFtZXx8YS5nZXRBdHRyaWJ1dGUoImNsYXNzIikpKyIgIikuaW5kZXhPZihiKT4tMX0sQVRUUjpmdW5jdGlvbihhLGIpe3ZhciBjPWJbMV0sZD1sLmF0dHJIYW5kbGVbY10/bC5hdHRySGFuZGxlW2NdKGEpOmFbY10hPW51bGw/YVtjXTphLmdldEF0dHJpYnV0ZShjKSxlPWQrIiIsZj1iWzJdLGc9Yls0XTtyZXR1cm4gZD09bnVsbD9mPT09IiE9IjpmPT09Ij0iP2U9PT1nOmY9PT0iKj0iP2UuaW5kZXhPZihnKT49MDpmPT09In49Ij8oIiAiK2UrIiAiKS5pbmRleE9mKGcpPj0wOmc/Zj09PSIhPSI/ZSE9PWc6Zj09PSJePSI/ZS5pbmRleE9mKGcpPT09MDpmPT09IiQ9Ij9lLnN1YnN0cihlLmxlbmd0aC1nLmxlbmd0aCk9PT1nOmY9PT0ifD0iP2U9PT1nfHxlLnN1YnN0cigwLGcubGVuZ3RoKzEpPT09ZysiLSI6ITE6ZSYmZCE9PSExfSxQT1M6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsyXSxmPWwuc2V0RmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpfX19LG09bC5tYXRjaC5QT1Msbj1mdW5jdGlvbihhLGIpe3JldHVybiJcXCIrKGItMCsxKX07Zm9yKHZhciBvIGluIGwubWF0Y2gpbC5tYXRjaFtvXT1uZXcgUmVnRXhwKGwubWF0Y2hbb10uc291cmNlKy8oPyFbXlxbXSpcXSkoPyFbXlwoXSpcKSkvLnNvdXJjZSksbC5sZWZ0TWF0Y2hbb109bmV3IFJlZ0V4cCgvKF4oPzoufFxyfFxuKSo/KS8uc291cmNlK2wubWF0Y2hbb10uc291cmNlLnJlcGxhY2UoL1xcKFxkKykvZyxuKSk7dmFyIHA9ZnVuY3Rpb24oYSxiKXthPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEsMCk7aWYoYil7Yi5wdXNoLmFwcGx5KGIsYSk7cmV0dXJuIGJ9cmV0dXJuIGF9O3RyeXtBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzLDApWzBdLm5vZGVUeXBlfWNhdGNoKHEpe3A9ZnVuY3Rpb24oYSxiKXt2YXIgYz0wLGQ9Ynx8W107aWYoZi5jYWxsKGEpPT09IltvYmplY3QgQXJyYXldIilBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShkLGEpO2Vsc2UgaWYodHlwZW9mIGEubGVuZ3RoPT09Im51bWJlciIpZm9yKHZhciBlPWEubGVuZ3RoO2M8ZTtjKyspZC5wdXNoKGFbY10pO2Vsc2UgZm9yKDthW2NdO2MrKylkLnB1c2goYVtjXSk7cmV0dXJuIGR9fXZhciByLHM7Yy5kb2N1bWVudEVsZW1lbnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/cj1mdW5jdGlvbihhLGIpe2lmKGE9PT1iKXtnPSEwO3JldHVybiAwfWlmKCFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9ufHwhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbilyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8tMToxO3JldHVybiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpJjQ/LTE6MX06KHI9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9W10sZj1bXSxoPWEucGFyZW50Tm9kZSxpPWIucGFyZW50Tm9kZSxqPWg7aWYoYT09PWIpe2c9ITA7cmV0dXJuIDB9aWYoaD09PWkpcmV0dXJuIHMoYSxiKTtpZighaClyZXR1cm4tMTtpZighaSlyZXR1cm4gMTt3aGlsZShqKWUudW5zaGlmdChqKSxqPWoucGFyZW50Tm9kZTtqPWk7d2hpbGUoailmLnVuc2hpZnQoaiksaj1qLnBhcmVudE5vZGU7Yz1lLmxlbmd0aCxkPWYubGVuZ3RoO2Zvcih2YXIgaz0wO2s8YyYmazxkO2srKylpZihlW2tdIT09ZltrXSlyZXR1cm4gcyhlW2tdLGZba10pO3JldHVybiBrPT09Yz9zKGEsZltrXSwtMSk6cyhlW2tdLGIsMSl9LHM9ZnVuY3Rpb24oYSxiLGMpe2lmKGE9PT1iKXJldHVybiBjO3ZhciBkPWEubmV4dFNpYmxpbmc7d2hpbGUoZCl7aWYoZD09PWIpcmV0dXJuLTE7ZD1kLm5leHRTaWJsaW5nfXJldHVybiAxfSksay5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiPSIiLGM7Zm9yKHZhciBkPTA7YVtkXTtkKyspYz1hW2RdLGMubm9kZVR5cGU9PT0zfHxjLm5vZGVUeXBlPT09ND9iKz1jLm5vZGVWYWx1ZTpjLm5vZGVUeXBlIT09OCYmKGIrPWsuZ2V0VGV4dChjLmNoaWxkTm9kZXMpKTtyZXR1cm4gYn0sZnVuY3Rpb24oKXt2YXIgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9InNjcmlwdCIrKG5ldyBEYXRlKS5nZXRUaW1lKCksZT1jLmRvY3VtZW50RWxlbWVudDthLmlubmVySFRNTD0iPGEgbmFtZT0nIitkKyInLz4iLGUuaW5zZXJ0QmVmb3JlKGEsZS5maXJzdENoaWxkKSxjLmdldEVsZW1lbnRCeUlkKGQpJiYobC5maW5kLklEPWZ1bmN0aW9uKGEsYyxkKXtpZih0eXBlb2YgYy5nZXRFbGVtZW50QnlJZCE9PSJ1bmRlZmluZWQiJiYhZCl7dmFyIGU9Yy5nZXRFbGVtZW50QnlJZChhWzFdKTtyZXR1cm4gZT9lLmlkPT09YVsxXXx8dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSE9PSJ1bmRlZmluZWQiJiZlLmdldEF0dHJpYnV0ZU5vZGUoImlkIikubm9kZVZhbHVlPT09YVsxXT9bZV06YjpbXX19LGwuZmlsdGVyLklEPWZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGEuZ2V0QXR0cmlidXRlTm9kZSE9PSJ1bmRlZmluZWQiJiZhLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIGEubm9kZVR5cGU9PT0xJiZjJiZjLm5vZGVWYWx1ZT09PWJ9KSxlLnJlbW92ZUNoaWxkKGEpLGU9YT1udWxsfSgpLGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmFwcGVuZENoaWxkKGMuY3JlYXRlQ29tbWVudCgiIikpLGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg+MCYmKGwuZmluZC5UQUc9ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGFbMV0pO2lmKGFbMV09PT0iKiIpe3ZhciBkPVtdO2Zvcih2YXIgZT0wO2NbZV07ZSsrKWNbZV0ubm9kZVR5cGU9PT0xJiZkLnB1c2goY1tlXSk7Yz1kfXJldHVybiBjfSksYS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLGEuZmlyc3RDaGlsZCYmdHlwZW9mIGEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUhPT0idW5kZWZpbmVkIiYmYS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpIT09IiMiJiYobC5hdHRySGFuZGxlLmhyZWY9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJocmVmIiwyKX0pLGE9bnVsbH0oKSxjLnF1ZXJ5U2VsZWN0b3JBbGwmJmZ1bmN0aW9uKCl7dmFyIGE9ayxiPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksZD0iX19zaXp6bGVfXyI7Yi5pbm5lckhUTUw9IjxwIGNsYXNzPSdURVNUJz48L3A+IjtpZighYi5xdWVyeVNlbGVjdG9yQWxsfHxiLnF1ZXJ5U2VsZWN0b3JBbGwoIi5URVNUIikubGVuZ3RoIT09MCl7az1mdW5jdGlvbihiLGUsZixnKXtlPWV8fGM7aWYoIWcmJiFrLmlzWE1MKGUpKXt2YXIgaD0vXihcdyskKXxeXC4oW1x3XC1dKyQpfF4jKFtcd1wtXSskKS8uZXhlYyhiKTtpZihoJiYoZS5ub2RlVHlwZT09PTF8fGUubm9kZVR5cGU9PT05KSl7aWYoaFsxXSlyZXR1cm4gcChlLmdldEVsZW1lbnRzQnlUYWdOYW1lKGIpLGYpO2lmKGhbMl0mJmwuZmluZC5DTEFTUyYmZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBwKGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShoWzJdKSxmKX1pZihlLm5vZGVUeXBlPT09OSl7aWYoYj09PSJib2R5IiYmZS5ib2R5KXJldHVybiBwKFtlLmJvZHldLGYpO2lmKGgmJmhbM10pe3ZhciBpPWUuZ2V0RWxlbWVudEJ5SWQoaFszXSk7aWYoIWl8fCFpLnBhcmVudE5vZGUpcmV0dXJuIHAoW10sZik7aWYoaS5pZD09PWhbM10pcmV0dXJuIHAoW2ldLGYpfXRyeXtyZXR1cm4gcChlLnF1ZXJ5U2VsZWN0b3JBbGwoYiksZil9Y2F0Y2goail7fX1lbHNlIGlmKGUubm9kZVR5cGU9PT0xJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT0ib2JqZWN0Iil7dmFyIG09ZSxuPWUuZ2V0QXR0cmlidXRlKCJpZCIpLG89bnx8ZCxxPWUucGFyZW50Tm9kZSxyPS9eXHMqWyt+XS8udGVzdChiKTtuP289by5yZXBsYWNlKC8nL2csIlxcJCYiKTplLnNldEF0dHJpYnV0ZSgiaWQiLG8pLHImJnEmJihlPWUucGFyZW50Tm9kZSk7dHJ5e2lmKCFyfHxxKXJldHVybiBwKGUucXVlcnlTZWxlY3RvckFsbCgiW2lkPSciK28rIiddICIrYiksZil9Y2F0Y2gocyl7fWZpbmFsbHl7bnx8bS5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4gYShiLGUsZixnKX07Zm9yKHZhciBlIGluIGEpa1tlXT1hW2VdO2I9bnVsbH19KCksZnVuY3Rpb24oKXt2YXIgYT1jLmRvY3VtZW50RWxlbWVudCxiPWEubWF0Y2hlc1NlbGVjdG9yfHxhLm1vek1hdGNoZXNTZWxlY3Rvcnx8YS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGEubXNNYXRjaGVzU2VsZWN0b3IsZD0hMTt0cnl7Yi5jYWxsKGMuZG9jdW1lbnRFbGVtZW50LCJbdGVzdCE9JyddOnNpenpsZSIpfWNhdGNoKGUpe2Q9ITB9YiYmKGsubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYyl7Yz1jLnJlcGxhY2UoL1w9XHMqKFteJyJcXV0qKVxzKlxdL2csIj0nJDEnXSIpO2lmKCFrLmlzWE1MKGEpKXRyeXtpZihkfHwhbC5tYXRjaC5QU0VVRE8udGVzdChjKSYmIS8hPS8udGVzdChjKSlyZXR1cm4gYi5jYWxsKGEsYyl9Y2F0Y2goZSl7fXJldHVybiBrKGMsbnVsbCxudWxsLFthXSkubGVuZ3RoPjB9KX0oKSxmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J3Rlc3QgZSc+PC9kaXY+PGRpdiBjbGFzcz0ndGVzdCc+PC9kaXY+IjtpZihhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aCE9PTApe2EubGFzdENoaWxkLmNsYXNzTmFtZT0iZSI7aWYoYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoPT09MSlyZXR1cm47bC5vcmRlci5zcGxpY2UoMSwwLCJDTEFTUyIpLGwuZmluZC5DTEFTUz1mdW5jdGlvbihhLGIsYyl7aWYodHlwZW9mIGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSE9PSJ1bmRlZmluZWQiJiYhYylyZXR1cm4gYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGFbMV0pfSxhPW51bGx9fSgpLGMuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zP2suY29udGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSE9PWImJihhLmNvbnRhaW5zP2EuY29udGFpbnMoYik6ITApfTpjLmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9rLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuISEoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSYxNil9OmsuY29udGFpbnM9ZnVuY3Rpb24oKXtyZXR1cm4hMX0say5pc1hNTD1mdW5jdGlvbihhKXt2YXIgYj0oYT9hLm93bmVyRG9jdW1lbnR8fGE6MCkuZG9jdW1lbnRFbGVtZW50O3JldHVybiBiP2Iubm9kZU5hbWUhPT0iSFRNTCI6ITF9O3ZhciB2PWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1bXSxlPSIiLGY9Yi5ub2RlVHlwZT9bYl06Yjt3aGlsZShjPWwubWF0Y2guUFNFVURPLmV4ZWMoYSkpZSs9Y1swXSxhPWEucmVwbGFjZShsLm1hdGNoLlBTRVVETywiIik7YT1sLnJlbGF0aXZlW2FdP2ErIioiOmE7Zm9yKHZhciBnPTAsaD1mLmxlbmd0aDtnPGg7ZysrKWsoYSxmW2ddLGQpO3JldHVybiBrLmZpbHRlcihlLGQpfTtkLmZpbmQ9ayxkLmV4cHI9ay5zZWxlY3RvcnMsZC5leHByWyI6Il09ZC5leHByLmZpbHRlcnMsZC51bmlxdWU9ay51bmlxdWVTb3J0LGQudGV4dD1rLmdldFRleHQsZC5pc1hNTERvYz1rLmlzWE1MLGQuY29udGFpbnM9ay5jb250YWluc30oKTt2YXIgRz0vVW50aWwkLyxIPS9eKD86cGFyZW50c3xwcmV2VW50aWx8cHJldkFsbCkvLEk9LywvLEo9L14uW146I1xbXC4sXSokLyxLPUFycmF5LnByb3RvdHlwZS5zbGljZSxMPWQuZXhwci5tYXRjaC5QT1MsTT17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtkLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihhKXt2YXIgYj10aGlzLnB1c2hTdGFjaygiIiwiZmluZCIsYSksYz0wO2Zvcih2YXIgZT0wLGY9dGhpcy5sZW5ndGg7ZTxmO2UrKyl7Yz1iLmxlbmd0aCxkLmZpbmQoYSx0aGlzW2VdLGIpO2lmKGU+MClmb3IodmFyIGc9YztnPGIubGVuZ3RoO2crKylmb3IodmFyIGg9MDtoPGM7aCsrKWlmKGJbaF09PT1iW2ddKXtiLnNwbGljZShnLS0sMSk7YnJlYWt9fXJldHVybiBifSxoYXM6ZnVuY3Rpb24oYSl7dmFyIGI9ZChhKTtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxjPWIubGVuZ3RoO2E8YzthKyspaWYoZC5jb250YWlucyh0aGlzLGJbYV0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soTyh0aGlzLGEsITEpLCJub3QiLGEpfSxmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKE8odGhpcyxhLCEwKSwiZmlsdGVyIixhKX0saXM6ZnVuY3Rpb24oYSl7cmV0dXJuISFhJiZkLmZpbHRlcihhLHRoaXMpLmxlbmd0aD4wfSxjbG9zZXN0OmZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZSxmLGc9dGhpc1swXTtpZihkLmlzQXJyYXkoYSkpe3ZhciBoLGksaj17fSxrPTE7aWYoZyYmYS5sZW5ndGgpe2ZvcihlPTAsZj1hLmxlbmd0aDtlPGY7ZSsrKWk9YVtlXSxqW2ldfHwoaltpXT1kLmV4cHIubWF0Y2guUE9TLnRlc3QoaSk/ZChpLGJ8fHRoaXMuY29udGV4dCk6aSk7d2hpbGUoZyYmZy5vd25lckRvY3VtZW50JiZnIT09Yil7Zm9yKGkgaW4gailoPWpbaV0sKGguanF1ZXJ5P2guaW5kZXgoZyk+LTE6ZChnKS5pcyhoKSkmJmMucHVzaCh7c2VsZWN0b3I6aSxlbGVtOmcsbGV2ZWw6a30pO2c9Zy5wYXJlbnROb2RlLGsrK319cmV0dXJuIGN9dmFyIGw9TC50ZXN0KGEpP2QoYSxifHx0aGlzLmNvbnRleHQpOm51bGw7Zm9yKGU9MCxmPXRoaXMubGVuZ3RoO2U8ZjtlKyspe2c9dGhpc1tlXTt3aGlsZShnKXtpZihsP2wuaW5kZXgoZyk+LTE6ZC5maW5kLm1hdGNoZXNTZWxlY3RvcihnLGEpKXtjLnB1c2goZyk7YnJlYWt9Zz1nLnBhcmVudE5vZGU7aWYoIWd8fCFnLm93bmVyRG9jdW1lbnR8fGc9PT1iKWJyZWFrfX1jPWMubGVuZ3RoPjE/ZC51bmlxdWUoYyk6YztyZXR1cm4gdGhpcy5wdXNoU3RhY2soYywiY2xvc2VzdCIsYSl9LGluZGV4OmZ1bmN0aW9uKGEpe2lmKCFhfHx0eXBlb2YgYT09PSJzdHJpbmciKXJldHVybiBkLmluQXJyYXkodGhpc1swXSxhP2QoYSk6dGhpcy5wYXJlbnQoKS5jaGlsZHJlbigpKTtyZXR1cm4gZC5pbkFycmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKX0sYWRkOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGE9PT0ic3RyaW5nIj9kKGEsYik6ZC5tYWtlQXJyYXkoYSksZT1kLm1lcmdlKHRoaXMuZ2V0KCksYyk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKE4oY1swXSl8fE4oZVswXSk/ZTpkLnVuaXF1ZShlKSl9LGFuZFNlbGY6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hZGQodGhpcy5wcmV2T2JqZWN0KX19KSxkLmVhY2goe3BhcmVudDpmdW5jdGlvbihhKXt2YXIgYj1hLnBhcmVudE5vZGU7cmV0dXJuIGImJmIubm9kZVR5cGUhPT0xMT9iOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGQuZGlyKGEsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZC5kaXIoYSwicGFyZW50Tm9kZSIsYyl9LG5leHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGQubnRoKGEsMiwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihhKXtyZXR1cm4gZC5udGgoYSwyLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gZC5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gZC5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGQuZGlyKGEsIm5leHRTaWJsaW5nIixjKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZC5kaXIoYSwicHJldmlvdXNTaWJsaW5nIixjKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGQuc2libGluZyhhLnBhcmVudE5vZGUuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIGQuc2libGluZyhhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gZC5ub2RlTmFtZShhLCJpZnJhbWUiKT9hLmNvbnRlbnREb2N1bWVudHx8YS5jb250ZW50V2luZG93LmRvY3VtZW50OmQubWFrZUFycmF5KGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe2QuZm5bYV09ZnVuY3Rpb24oYyxlKXt2YXIgZj1kLm1hcCh0aGlzLGIsYyksZz1LLmNhbGwoYXJndW1lbnRzKTtHLnRlc3QoYSl8fChlPWMpLGUmJnR5cGVvZiBlPT09InN0cmluZyImJihmPWQuZmlsdGVyKGUsZikpLGY9dGhpcy5sZW5ndGg+MSYmIU1bYV0/ZC51bmlxdWUoZik6ZiwodGhpcy5sZW5ndGg+MXx8SS50ZXN0KGUpKSYmSC50ZXN0KGEpJiYoZj1mLnJldmVyc2UoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGYsYSxnLmpvaW4oIiwiKSl9fSksZC5leHRlbmQoe2ZpbHRlcjpmdW5jdGlvbihhLGIsYyl7YyYmKGE9Ijpub3QoIithKyIpIik7cmV0dXJuIGIubGVuZ3RoPT09MT9kLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGJbMF0sYSk/W2JbMF1dOltdOmQuZmluZC5tYXRjaGVzKGEsYil9LGRpcjpmdW5jdGlvbihhLGMsZSl7dmFyIGY9W10sZz1hW2NdO3doaWxlKGcmJmcubm9kZVR5cGUhPT05JiYoZT09PWJ8fGcubm9kZVR5cGUhPT0xfHwhZChnKS5pcyhlKSkpZy5ub2RlVHlwZT09PTEmJmYucHVzaChnKSxnPWdbY107cmV0dXJuIGZ9LG50aDpmdW5jdGlvbihhLGIsYyxkKXtiPWJ8fDE7dmFyIGU9MDtmb3IoO2E7YT1hW2NdKWlmKGEubm9kZVR5cGU9PT0xJiYrK2U9PT1iKWJyZWFrO3JldHVybiBhfSxzaWJsaW5nOmZ1bmN0aW9uKGEsYil7dmFyIGM9W107Zm9yKDthO2E9YS5uZXh0U2libGluZylhLm5vZGVUeXBlPT09MSYmYSE9PWImJmMucHVzaChhKTtyZXR1cm4gY319KTt2YXIgUD0vIGpRdWVyeVxkKz0iKD86XGQrfG51bGwpIi9nLFE9L15ccysvLFI9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9pZyxTPS88KFtcdzpdKykvLFQ9Lzx0Ym9keS9pLFU9Lzx8JiM/XHcrOy8sVj0vPCg/OnNjcmlwdHxvYmplY3R8ZW1iZWR8b3B0aW9ufHN0eWxlKS9pLFc9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksWD17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtYLm9wdGdyb3VwPVgub3B0aW9uLFgudGJvZHk9WC50Zm9vdD1YLmNvbGdyb3VwPVguY2FwdGlvbj1YLnRoZWFkLFgudGg9WC50ZCxkLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZXx8KFguX2RlZmF1bHQ9WzEsImRpdjxkaXY+IiwiPC9kaXY+Il0pLGQuZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe2lmKGQuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3ZhciBjPWQodGhpcyk7Yy50ZXh0KGEuY2FsbCh0aGlzLGIsYy50ZXh0KCkpKX0pO2lmKHR5cGVvZiBhIT09Im9iamVjdCImJmEhPT1iKXJldHVybiB0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGMpLmNyZWF0ZVRleHROb2RlKGEpKTtyZXR1cm4gZC50ZXh0KHRoaXMpfSx3cmFwQWxsOmZ1bmN0aW9uKGEpe2lmKGQuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2QodGhpcykud3JhcEFsbChhLmNhbGwodGhpcyxiKSl9KTtpZih0aGlzWzBdKXt2YXIgYj1kKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCk7dGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJlZm9yZSh0aGlzWzBdKSxiLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXM7d2hpbGUoYS5maXJzdENoaWxkJiZhLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0xKWE9YS5maXJzdENoaWxkO3JldHVybiBhfSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7aWYoZC5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7ZCh0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsYikpfSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWQodGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2QodGhpcykud3JhcEFsbChhKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7ZC5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fGQodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuYXBwZW5kQ2hpbGQoYSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMCxmdW5jdGlvbihhKXt0aGlzLm5vZGVUeXBlPT09MSYmdGhpcy5pbnNlcnRCZWZvcmUoYSx0aGlzLmZpcnN0Q2hpbGQpfSl9LGJlZm9yZTpmdW5jdGlvbigpe2lmKHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZSlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMpfSk7aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9ZChhcmd1bWVudHNbMF0pO2EucHVzaC5hcHBseShhLHRoaXMudG9BcnJheSgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYSwiYmVmb3JlIixhcmd1bWVudHMpfX0sYWZ0ZXI6ZnVuY3Rpb24oKXtpZih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCExLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzLm5leHRTaWJsaW5nKX0pO2lmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBhPXRoaXMucHVzaFN0YWNrKHRoaXMsImFmdGVyIixhcmd1bWVudHMpO2EucHVzaC5hcHBseShhLGQoYXJndW1lbnRzWzBdKS50b0FycmF5KCkpO3JldHVybiBhfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZTsoZT10aGlzW2NdKSE9bnVsbDtjKyspaWYoIWF8fGQuZmlsdGVyKGEsW2VdKS5sZW5ndGgpIWImJmUubm9kZVR5cGU9PT0xJiYoZC5jbGVhbkRhdGEoZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKSxkLmNsZWFuRGF0YShbZV0pKSxlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxiOyhiPXRoaXNbYV0pIT1udWxsO2ErKyl7Yi5ub2RlVHlwZT09PTEmJmQuY2xlYW5EYXRhKGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSk7d2hpbGUoYi5maXJzdENoaWxkKWIucmVtb3ZlQ2hpbGQoYi5maXJzdENoaWxkKX1yZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oYSxiKXthPWE9PW51bGw/ITE6YSxiPWI9PW51bGw/YTpiO3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBkLmNsb25lKHRoaXMsYSxiKX0pfSxodG1sOmZ1bmN0aW9uKGEpe2lmKGE9PT1iKXJldHVybiB0aGlzWzBdJiZ0aGlzWzBdLm5vZGVUeXBlPT09MT90aGlzWzBdLmlubmVySFRNTC5yZXBsYWNlKFAsIiIpOm51bGw7aWYodHlwZW9mIGEhPT0ic3RyaW5nInx8Vi50ZXN0KGEpfHwhZC5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlJiZRLnRlc3QoYSl8fFhbKFMuZXhlYyhhKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pZC5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1kKHRoaXMpO2MuaHRtbChhLmNhbGwodGhpcyxiLGMuaHRtbCgpKSl9KTp0aGlzLmVtcHR5KCkuYXBwZW5kKGEpO2Vsc2V7YT1hLnJlcGxhY2UoUiwiPCQxPjwvJDI+Iik7dHJ5e2Zvcih2YXIgYz0wLGU9dGhpcy5sZW5ndGg7YzxlO2MrKyl0aGlzW2NdLm5vZGVUeXBlPT09MSYmKGQuY2xlYW5EYXRhKHRoaXNbY10uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSksdGhpc1tjXS5pbm5lckhUTUw9YSl9Y2F0Y2goZil7dGhpcy5lbXB0eSgpLmFwcGVuZChhKX19cmV0dXJuIHRoaXN9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKGEpe2lmKHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZSl7aWYoZC5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9ZCh0aGlzKSxlPWMuaHRtbCgpO2MucmVwbGFjZVdpdGgoYS5jYWxsKHRoaXMsYixlKSl9KTt0eXBlb2YgYSE9PSJzdHJpbmciJiYoYT1kKGEpLmRldGFjaCgpKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5uZXh0U2libGluZyxjPXRoaXMucGFyZW50Tm9kZTtkKHRoaXMpLnJlbW92ZSgpLGI/ZChiKS5iZWZvcmUoYSk6ZChjKS5hcHBlbmQoYSl9KX1yZXR1cm4gdGhpcy5wdXNoU3RhY2soZChkLmlzRnVuY3Rpb24oYSk/YSgpOmEpLCJyZXBsYWNlV2l0aCIsYSl9LGRldGFjaDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5yZW1vdmUoYSwhMCl9LGRvbU1hbmlwOmZ1bmN0aW9uKGEsYyxlKXt2YXIgZixnLGgsaSxqPWFbMF0saz1bXTtpZighZC5zdXBwb3J0LmNoZWNrQ2xvbmUmJmFyZ3VtZW50cy5sZW5ndGg9PT0zJiZ0eXBlb2Ygaj09PSJzdHJpbmciJiZXLnRlc3QoaikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2QodGhpcykuZG9tTWFuaXAoYSxjLGUsITApfSk7aWYoZC5pc0Z1bmN0aW9uKGopKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZil7dmFyIGc9ZCh0aGlzKTthWzBdPWouY2FsbCh0aGlzLGYsYz9nLmh0bWwoKTpiKSxnLmRvbU1hbmlwKGEsYyxlKX0pO2lmKHRoaXNbMF0pe2k9aiYmai5wYXJlbnROb2RlLGQuc3VwcG9ydC5wYXJlbnROb2RlJiZpJiZpLm5vZGVUeXBlPT09MTEmJmkuY2hpbGROb2Rlcy5sZW5ndGg9PT10aGlzLmxlbmd0aD9mPXtmcmFnbWVudDppfTpmPWQuYnVpbGRGcmFnbWVudChhLHRoaXMsayksaD1mLmZyYWdtZW50LGguY2hpbGROb2Rlcy5sZW5ndGg9PT0xP2c9aD1oLmZpcnN0Q2hpbGQ6Zz1oLmZpcnN0Q2hpbGQ7aWYoZyl7Yz1jJiZkLm5vZGVOYW1lKGcsInRyIik7Zm9yKHZhciBsPTAsbT10aGlzLmxlbmd0aCxuPW0tMTtsPG07bCsrKWUuY2FsbChjP1kodGhpc1tsXSxnKTp0aGlzW2xdLGYuY2FjaGVhYmxlfHxtPjEmJmw8bj9kLmNsb25lKGgsITAsITApOmgpfWsubGVuZ3RoJiZkLmVhY2goayxiYSl9cmV0dXJuIHRoaXN9fSksZC5idWlsZEZyYWdtZW50PWZ1bmN0aW9uKGEsYixlKXt2YXIgZixnLGgsaT1iJiZiWzBdP2JbMF0ub3duZXJEb2N1bWVudHx8YlswXTpjO2EubGVuZ3RoPT09MSYmdHlwZW9mIGFbMF09PT0ic3RyaW5nIiYmYVswXS5sZW5ndGg8NTEyJiZpPT09YyYmYVswXS5jaGFyQXQoMCk9PT0iPCImJiFWLnRlc3QoYVswXSkmJihkLnN1cHBvcnQuY2hlY2tDbG9uZXx8IVcudGVzdChhWzBdKSkmJihnPSEwLGg9ZC5mcmFnbWVudHNbYVswXV0saCYmKGghPT0xJiYoZj1oKSkpLGZ8fChmPWkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGQuY2xlYW4oYSxpLGYsZSkpLGcmJihkLmZyYWdtZW50c1thWzBdXT1oP2Y6MSk7cmV0dXJue2ZyYWdtZW50OmYsY2FjaGVhYmxlOmd9fSxkLmZyYWdtZW50cz17fSxkLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihhLGIpe2QuZm5bYV09ZnVuY3Rpb24oYyl7dmFyIGU9W10sZj1kKGMpLGc9dGhpcy5sZW5ndGg9PT0xJiZ0aGlzWzBdLnBhcmVudE5vZGU7aWYoZyYmZy5ub2RlVHlwZT09PTExJiZnLmNoaWxkTm9kZXMubGVuZ3RoPT09MSYmZi5sZW5ndGg9PT0xKXtmW2JdKHRoaXNbMF0pO3JldHVybiB0aGlzfWZvcih2YXIgaD0wLGk9Zi5sZW5ndGg7aDxpO2grKyl7dmFyIGo9KGg+MD90aGlzLmNsb25lKCEwKTp0aGlzKS5nZXQoKTtkKGZbaF0pW2JdKGopLGU9ZS5jb25jYXQoail9cmV0dXJuIHRoaXMucHVzaFN0YWNrKGUsYSxmLnNlbGVjdG9yKX19KSxkLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBlPWEuY2xvbmVOb2RlKCEwKSxmLGcsaDtpZigoIWQuc3VwcG9ydC5ub0Nsb25lRXZlbnR8fCFkLnN1cHBvcnQubm9DbG9uZUNoZWNrZWQpJiYoYS5ub2RlVHlwZT09PTF8fGEubm9kZVR5cGU9PT0xMSkmJiFkLmlzWE1MRG9jKGEpKXskKGEsZSksZj1fKGEpLGc9XyhlKTtmb3IoaD0wO2ZbaF07KytoKSQoZltoXSxnW2hdKX1pZihiKXtaKGEsZSk7aWYoYyl7Zj1fKGEpLGc9XyhlKTtmb3IoaD0wO2ZbaF07KytoKVooZltoXSxnW2hdKX19cmV0dXJuIGV9LGNsZWFuOmZ1bmN0aW9uKGEsYixlLGYpe2I9Ynx8Yyx0eXBlb2YgYi5jcmVhdGVFbGVtZW50PT09InVuZGVmaW5lZCImJihiPWIub3duZXJEb2N1bWVudHx8YlswXSYmYlswXS5vd25lckRvY3VtZW50fHxjKTt2YXIgZz1bXTtmb3IodmFyIGg9MCxpOyhpPWFbaF0pIT1udWxsO2grKyl7dHlwZW9mIGk9PT0ibnVtYmVyIiYmKGkrPSIiKTtpZighaSljb250aW51ZTtpZih0eXBlb2YgaSE9PSJzdHJpbmcifHxVLnRlc3QoaSkpe2lmKHR5cGVvZiBpPT09InN0cmluZyIpe2k9aS5yZXBsYWNlKFIsIjwkMT48LyQyPiIpO3ZhciBqPShTLmV4ZWMoaSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksaz1YW2pdfHxYLl9kZWZhdWx0LGw9a1swXSxtPWIuY3JlYXRlRWxlbWVudCgiZGl2Iik7bS5pbm5lckhUTUw9a1sxXStpK2tbMl07d2hpbGUobC0tKW09bS5sYXN0Q2hpbGQ7aWYoIWQuc3VwcG9ydC50Ym9keSl7dmFyIG49VC50ZXN0KGkpLG89aj09PSJ0YWJsZSImJiFuP20uZmlyc3RDaGlsZCYmbS5maXJzdENoaWxkLmNoaWxkTm9kZXM6a1sxXT09PSI8dGFibGU+IiYmIW4/bS5jaGlsZE5vZGVzOltdO2Zvcih2YXIgcD1vLmxlbmd0aC0xO3A+PTA7LS1wKWQubm9kZU5hbWUob1twXSwidGJvZHkiKSYmIW9bcF0uY2hpbGROb2Rlcy5sZW5ndGgmJm9bcF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvW3BdKX0hZC5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlJiZRLnRlc3QoaSkmJm0uaW5zZXJ0QmVmb3JlKGIuY3JlYXRlVGV4dE5vZGUoUS5leGVjKGkpWzBdKSxtLmZpcnN0Q2hpbGQpLGk9bS5jaGlsZE5vZGVzfX1lbHNlIGk9Yi5jcmVhdGVUZXh0Tm9kZShpKTtpLm5vZGVUeXBlP2cucHVzaChpKTpnPWQubWVyZ2UoZyxpKX1pZihlKWZvcihoPTA7Z1toXTtoKyspIWZ8fCFkLm5vZGVOYW1lKGdbaF0sInNjcmlwdCIpfHxnW2hdLnR5cGUmJmdbaF0udHlwZS50b0xvd2VyQ2FzZSgpIT09InRleHQvamF2YXNjcmlwdCI/KGdbaF0ubm9kZVR5cGU9PT0xJiZnLnNwbGljZS5hcHBseShnLFtoKzEsMF0uY29uY2F0KGQubWFrZUFycmF5KGdbaF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpKSkpLGUuYXBwZW5kQ2hpbGQoZ1toXSkpOmYucHVzaChnW2hdLnBhcmVudE5vZGU/Z1toXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGdbaF0pOmdbaF0pO3JldHVybiBnfSxjbGVhbkRhdGE6ZnVuY3Rpb24oYSl7dmFyIGIsYyxlPWQuY2FjaGUsZj1kLmV4cGFuZG8sZz1kLmV2ZW50LnNwZWNpYWwsaD1kLnN1cHBvcnQuZGVsZXRlRXhwYW5kbztmb3IodmFyIGk9MCxqOyhqPWFbaV0pIT1udWxsO2krKyl7aWYoai5ub2RlTmFtZSYmZC5ub0RhdGFbai5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSljb250aW51ZTtjPWpbZC5leHBhbmRvXTtpZihjKXtiPWVbY10mJmVbY11bZl07aWYoYiYmYi5ldmVudHMpe2Zvcih2YXIgayBpbiBiLmV2ZW50cylnW2tdP2QuZXZlbnQucmVtb3ZlKGosayk6ZC5yZW1vdmVFdmVudChqLGssYi5oYW5kbGUpO2IuaGFuZGxlJiYoYi5oYW5kbGUuZWxlbT1udWxsKX1oP2RlbGV0ZSBqW2QuZXhwYW5kb106ai5yZW1vdmVBdHRyaWJ1dGUmJmoucmVtb3ZlQXR0cmlidXRlKGQuZXhwYW5kbyksZGVsZXRlIGVbY119fX19KTt2YXIgYmI9L2FscGhhXChbXildKlwpL2ksYmM9L29wYWNpdHk9KFteKV0qKS8sYmQ9Ly0oW2Etel0pL2lnLGJlPS8oW0EtWl0pL2csYmY9L14tP1xkKyg/OnB4KT8kL2ksYmc9L14tP1xkLyxiaD17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sYmk9WyJMZWZ0IiwiUmlnaHQiXSxiaj1bIlRvcCIsIkJvdHRvbSJdLGJrLGJsLGJtLGJuPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIudG9VcHBlckNhc2UoKX07ZC5mbi5jc3M9ZnVuY3Rpb24oYSxjKXtpZihhcmd1bWVudHMubGVuZ3RoPT09MiYmYz09PWIpcmV0dXJuIHRoaXM7cmV0dXJuIGQuYWNjZXNzKHRoaXMsYSxjLCEwLGZ1bmN0aW9uKGEsYyxlKXtyZXR1cm4gZSE9PWI/ZC5zdHlsZShhLGMsZSk6ZC5jc3MoYSxjKX0pfSxkLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPWJrKGEsIm9wYWNpdHkiLCJvcGFjaXR5Iik7cmV0dXJuIGM9PT0iIj8iMSI6Y31yZXR1cm4gYS5zdHlsZS5vcGFjaXR5fX19LGNzc051bWJlcjp7ekluZGV4OiEwLGZvbnRXZWlnaHQ6ITAsb3BhY2l0eTohMCx6b29tOiEwLGxpbmVIZWlnaHQ6ITB9LGNzc1Byb3BzOnsiZmxvYXQiOmQuc3VwcG9ydC5jc3NGbG9hdD8iY3NzRmxvYXQiOiJzdHlsZUZsb2F0In0sc3R5bGU6ZnVuY3Rpb24oYSxjLGUsZil7aWYoYSYmYS5ub2RlVHlwZSE9PTMmJmEubm9kZVR5cGUhPT04JiZhLnN0eWxlKXt2YXIgZyxoPWQuY2FtZWxDYXNlKGMpLGk9YS5zdHlsZSxqPWQuY3NzSG9va3NbaF07Yz1kLmNzc1Byb3BzW2hdfHxoO2lmKGU9PT1iKXtpZihqJiYiZ2V0ImluIGomJihnPWouZ2V0KGEsITEsZikpIT09YilyZXR1cm4gZztyZXR1cm4gaVtjXX1pZih0eXBlb2YgZT09PSJudW1iZXIiJiZpc05hTihlKXx8ZT09bnVsbClyZXR1cm47dHlwZW9mIGU9PT0ibnVtYmVyIiYmIWQuY3NzTnVtYmVyW2hdJiYoZSs9InB4Iik7aWYoIWp8fCEoInNldCJpbiBqKXx8KGU9ai5zZXQoYSxlKSkhPT1iKXRyeXtpW2NdPWV9Y2F0Y2goayl7fX19LGNzczpmdW5jdGlvbihhLGMsZSl7dmFyIGYsZz1kLmNhbWVsQ2FzZShjKSxoPWQuY3NzSG9va3NbZ107Yz1kLmNzc1Byb3BzW2ddfHxnO2lmKGgmJiJnZXQiaW4gaCYmKGY9aC5nZXQoYSwhMCxlKSkhPT1iKXJldHVybiBmO2lmKGJrKXJldHVybiBiayhhLGMsZyl9LHN3YXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9O2Zvcih2YXIgZSBpbiBiKWRbZV09YS5zdHlsZVtlXSxhLnN0eWxlW2VdPWJbZV07Yy5jYWxsKGEpO2ZvcihlIGluIGIpYS5zdHlsZVtlXT1kW2VdfSxjYW1lbENhc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShiZCxibil9fSksZC5jdXJDU1M9ZC5jc3MsZC5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihhLGIpe2QuY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZSl7dmFyIGY7aWYoYyl7YS5vZmZzZXRXaWR0aCE9PTA/Zj1ibyhhLGIsZSk6ZC5zd2FwKGEsYmgsZnVuY3Rpb24oKXtmPWJvKGEsYixlKX0pO2lmKGY8PTApe2Y9YmsoYSxiLGIpLGY9PT0iMHB4IiYmYm0mJihmPWJtKGEsYixiKSk7aWYoZiE9bnVsbClyZXR1cm4gZj09PSIifHxmPT09ImF1dG8iPyIwcHgiOmZ9aWYoZjwwfHxmPT1udWxsKXtmPWEuc3R5bGVbYl07cmV0dXJuIGY9PT0iInx8Zj09PSJhdXRvIj8iMHB4IjpmfXJldHVybiB0eXBlb2YgZj09PSJzdHJpbmciP2Y6ZisicHgifX0sc2V0OmZ1bmN0aW9uKGEsYil7aWYoIWJmLnRlc3QoYikpcmV0dXJuIGI7Yj1wYXJzZUZsb2F0KGIpO2lmKGI+PTApcmV0dXJuIGIrInB4In19fSksZC5zdXBwb3J0Lm9wYWNpdHl8fChkLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBiYy50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/cGFyc2VGbG9hdChSZWdFeHAuJDEpLzEwMCsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZTtjLnpvb209MTt2YXIgZT1kLmlzTmFOKGIpPyIiOiJhbHBoYShvcGFjaXR5PSIrYioxMDArIikiLGY9Yy5maWx0ZXJ8fCIiO2MuZmlsdGVyPWJiLnRlc3QoZik/Zi5yZXBsYWNlKGJiLGUpOmMuZmlsdGVyKyIgIitlfX0pLGMuZGVmYXVsdFZpZXcmJmMuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYmKGJsPWZ1bmN0aW9uKGEsYyxlKXt2YXIgZixnLGg7ZT1lLnJlcGxhY2UoYmUsIi0kMSIpLnRvTG93ZXJDYXNlKCk7aWYoIShnPWEub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykpcmV0dXJuIGI7aWYoaD1nLmdldENvbXB1dGVkU3R5bGUoYSxudWxsKSlmPWguZ2V0UHJvcGVydHlWYWx1ZShlKSxmPT09IiImJiFkLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYSkmJihmPWQuc3R5bGUoYSxlKSk7cmV0dXJuIGZ9KSxjLmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUmJihibT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9YS5jdXJyZW50U3R5bGUmJmEuY3VycmVudFN0eWxlW2JdLGU9YS5ydW50aW1lU3R5bGUmJmEucnVudGltZVN0eWxlW2JdLGY9YS5zdHlsZTshYmYudGVzdChkKSYmYmcudGVzdChkKSYmKGM9Zi5sZWZ0LGUmJihhLnJ1bnRpbWVTdHlsZS5sZWZ0PWEuY3VycmVudFN0eWxlLmxlZnQpLGYubGVmdD1iPT09ImZvbnRTaXplIj8iMWVtIjpkfHwwLGQ9Zi5waXhlbExlZnQrInB4IixmLmxlZnQ9YyxlJiYoYS5ydW50aW1lU3R5bGUubGVmdD1lKSk7cmV0dXJuIGQ9PT0iIj8iYXV0byI6ZH0pLGJrPWJsfHxibSxkLmV4cHImJmQuZXhwci5maWx0ZXJzJiYoZC5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0V2lkdGgsYz1hLm9mZnNldEhlaWdodDtyZXR1cm4gYj09PTAmJmM9PT0wfHwhZC5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyYmKGEuc3R5bGUuZGlzcGxheXx8ZC5jc3MoYSwiZGlzcGxheSIpKT09PSJub25lIn0sZC5leHByLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihhKXtyZXR1cm4hZC5leHByLmZpbHRlcnMuaGlkZGVuKGEpfSk7dmFyIGJwPS8lMjAvZyxicT0vXFtcXSQvLGJyPS9ccj9cbi9nLGJzPS8jLiokLyxidD0vXiguKj8pOlsgXHRdKihbXlxyXG5dKilccj8kL21nLGJ1PS9eKD86Y29sb3J8ZGF0ZXxkYXRldGltZXxlbWFpbHxoaWRkZW58bW9udGh8bnVtYmVyfHBhc3N3b3JkfHJhbmdlfHNlYXJjaHx0ZWx8dGV4dHx0aW1lfHVybHx3ZWVrKSQvaSxidj0vKD86XmZpbGV8XndpZGdldHxcLWV4dGVuc2lvbik6JC8sYnc9L14oPzpHRVR8SEVBRCkkLyxieD0vXlwvXC8vLGJ5PS9cPy8sYno9LzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksYkE9L14oPzpzZWxlY3R8dGV4dGFyZWEpL2ksYkI9L1xzKy8sYkM9LyhbPyZdKV89W14mXSovLGJEPS8oXnxcLSkoW2Etel0pL2csYkU9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiK2MudG9VcHBlckNhc2UoKX0sYkY9L14oW1x3XCtcLlwtXSs6KVwvXC8oW15cLz8jOl0qKSg/OjooXGQrKSk/LyxiRz1kLmZuLmxvYWQsYkg9e30sYkk9e30sYkosYks7dHJ5e2JKPWMubG9jYXRpb24uaHJlZn1jYXRjaChiTCl7Yko9Yy5jcmVhdGVFbGVtZW50KCJhIiksYkouaHJlZj0iIixiSj1iSi5ocmVmfWJLPWJGLmV4ZWMoYkoudG9Mb3dlckNhc2UoKSksZC5mbi5leHRlbmQoe2xvYWQ6ZnVuY3Rpb24oYSxjLGUpe2lmKHR5cGVvZiBhIT09InN0cmluZyImJmJHKXJldHVybiBiRy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoIXRoaXMubGVuZ3RoKXJldHVybiB0aGlzO3ZhciBmPWEuaW5kZXhPZigiICIpO2lmKGY+PTApe3ZhciBnPWEuc2xpY2UoZixhLmxlbmd0aCk7YT1hLnNsaWNlKDAsZil9dmFyIGg9IkdFVCI7YyYmKGQuaXNGdW5jdGlvbihjKT8oZT1jLGM9Yik6dHlwZW9mIGM9PT0ib2JqZWN0IiYmKGM9ZC5wYXJhbShjLGQuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSxoPSJQT1NUIikpO3ZhciBpPXRoaXM7ZC5hamF4KHt1cmw6YSx0eXBlOmgsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yyxjb21wbGV0ZTpmdW5jdGlvbihhLGIsYyl7Yz1hLnJlc3BvbnNlVGV4dCxhLmlzUmVzb2x2ZWQoKSYmKGEuZG9uZShmdW5jdGlvbihhKXtjPWF9KSxpLmh0bWwoZz9kKCI8ZGl2PiIpLmFwcGVuZChjLnJlcGxhY2UoYnosIiIpKS5maW5kKGcpOmMpKSxlJiZpLmVhY2goZSxbYyxiLGFdKX19KTtyZXR1cm4gdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGQucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz9kLm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fGJBLnRlc3QodGhpcy5ub2RlTmFtZSl8fGJ1LnRlc3QodGhpcy50eXBlKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1kKHRoaXMpLnZhbCgpO3JldHVybiBjPT1udWxsP251bGw6ZC5pc0FycmF5KGMpP2QubWFwKGMsZnVuY3Rpb24oYSxjKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6YS5yZXBsYWNlKGJyLCJcclxuIil9fSk6e25hbWU6Yi5uYW1lLHZhbHVlOmMucmVwbGFjZShiciwiXHJcbiIpfX0pLmdldCgpfX0pLGQuZWFjaCgiYWpheFN0YXJ0IGFqYXhTdG9wIGFqYXhDb21wbGV0ZSBhamF4RXJyb3IgYWpheFN1Y2Nlc3MgYWpheFNlbmQiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtkLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJpbmQoYixhKX19KSxkLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxjKXtkW2NdPWZ1bmN0aW9uKGEsZSxmLGcpe2QuaXNGdW5jdGlvbihlKSYmKGc9Z3x8ZixmPWUsZT1iKTtyZXR1cm4gZC5hamF4KHt0eXBlOmMsdXJsOmEsZGF0YTplLHN1Y2Nlc3M6ZixkYXRhVHlwZTpnfSl9fSksZC5leHRlbmQoe2dldFNjcmlwdDpmdW5jdGlvbihhLGMpe3JldHVybiBkLmdldChhLGIsYywic2NyaXB0Iil9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBkLmdldChhLGIsYywianNvbiIpfSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtiP2QuZXh0ZW5kKCEwLGEsZC5hamF4U2V0dGluZ3MsYik6KGI9YSxhPWQuZXh0ZW5kKCEwLGQuYWpheFNldHRpbmdzLGIpKTtmb3IodmFyIGMgaW4ge2NvbnRleHQ6MSx1cmw6MX0pYyBpbiBiP2FbY109YltjXTpjIGluIGQuYWpheFNldHRpbmdzJiYoYVtjXT1kLmFqYXhTZXR0aW5nc1tjXSk7cmV0dXJuIGF9LGFqYXhTZXR0aW5nczp7dXJsOmJKLGlzTG9jYWw6YnYudGVzdChiS1sxXSksZ2xvYmFsOiEwLHR5cGU6IkdFVCIsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIscHJvY2Vzc0RhdGE6ITAsYXN5bmM6ITAsYWNjZXB0czp7eG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixodG1sOiJ0ZXh0L2h0bWwiLHRleHQ6InRleHQvcGxhaW4iLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCIsIioiOiIqLyoifSxjb250ZW50czp7eG1sOi94bWwvLGh0bWw6L2h0bWwvLGpzb246L2pzb24vfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0In0sY29udmVydGVyczp7IiogdGV4dCI6YS5TdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6ZC5wYXJzZUpTT04sInRleHQgeG1sIjpkLnBhcnNlWE1MfX0sYWpheFByZWZpbHRlcjpiTShiSCksYWpheFRyYW5zcG9ydDpiTShiSSksYWpheDpmdW5jdGlvbihhLGMpe2Z1bmN0aW9uIHYoYSxjLGwsbil7aWYociE9PTIpe3I9MixwJiZjbGVhclRpbWVvdXQocCksbz1iLG09bnx8IiIsdS5yZWFkeVN0YXRlPWE/NDowO3ZhciBxLHQsdix3PWw/YlAoZSx1LGwpOmIseCx5O2lmKGE+PTIwMCYmYTwzMDB8fGE9PT0zMDQpe2lmKGUuaWZNb2RpZmllZCl7aWYoeD11LmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIikpZC5sYXN0TW9kaWZpZWRba109eDtpZih5PXUuZ2V0UmVzcG9uc2VIZWFkZXIoIkV0YWciKSlkLmV0YWdba109eX1pZihhPT09MzA0KWM9Im5vdG1vZGlmaWVkIixxPSEwO2Vsc2UgdHJ5e3Q9YlEoZSx3KSxjPSJzdWNjZXNzIixxPSEwfWNhdGNoKHope2M9InBhcnNlcmVycm9yIix2PXp9fWVsc2V7dj1jO2lmKCFjfHxhKWM9ImVycm9yIixhPDAmJihhPTApfXUuc3RhdHVzPWEsdS5zdGF0dXNUZXh0PWMscT9oLnJlc29sdmVXaXRoKGYsW3QsYyx1XSk6aC5yZWplY3RXaXRoKGYsW3UsYyx2XSksdS5zdGF0dXNDb2RlKGopLGo9YixzJiZnLnRyaWdnZXIoImFqYXgiKyhxPyJTdWNjZXNzIjoiRXJyb3IiKSxbdSxlLHE/dDp2XSksaS5yZXNvbHZlV2l0aChmLFt1LGNdKSxzJiYoZy50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt1LGVdKSwtLWQuYWN0aXZlfHxkLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpfX10eXBlb2YgYT09PSJvYmplY3QiJiYoYz1hLGE9YiksYz1jfHx7fTt2YXIgZT1kLmFqYXhTZXR1cCh7fSxjKSxmPWUuY29udGV4dHx8ZSxnPWYhPT1lJiYoZi5ub2RlVHlwZXx8ZiBpbnN0YW5jZW9mIGQpP2QoZik6ZC5ldmVudCxoPWQuRGVmZXJyZWQoKSxpPWQuX0RlZmVycmVkKCksaj1lLnN0YXR1c0NvZGV8fHt9LGssbD17fSxtLG4sbyxwLHEscj0wLHMsdCx1PXtyZWFkeVN0YXRlOjAsc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihhLGIpe3J8fChsW2EudG9Mb3dlckNhc2UoKS5yZXBsYWNlKGJELGJFKV09Yik7cmV0dXJuIHRoaXN9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiByPT09Mj9tOm51bGx9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBjO2lmKHI9PT0yKXtpZighbil7bj17fTt3aGlsZShjPWJ0LmV4ZWMobSkpbltjWzFdLnRvTG93ZXJDYXNlKCldPWNbMl19Yz1uW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIGM9PT1iP251bGw6Y30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtyfHwoZS5taW1lVHlwZT1hKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7YT1hfHwiYWJvcnQiLG8mJm8uYWJvcnQoYSksdigwLGEpO3JldHVybiB0aGlzfX07aC5wcm9taXNlKHUpLHUuc3VjY2Vzcz11LmRvbmUsdS5lcnJvcj11LmZhaWwsdS5jb21wbGV0ZT1pLmRvbmUsdS5zdGF0dXNDb2RlPWZ1bmN0aW9uKGEpe2lmKGEpe3ZhciBiO2lmKHI8Milmb3IoYiBpbiBhKWpbYl09W2pbYl0sYVtiXV07ZWxzZSBiPWFbdS5zdGF0dXNdLHUudGhlbihiLGIpfXJldHVybiB0aGlzfSxlLnVybD0oKGF8fGUudXJsKSsiIikucmVwbGFjZShicywiIikucmVwbGFjZShieCxiS1sxXSsiLy8iKSxlLmRhdGFUeXBlcz1kLnRyaW0oZS5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLnNwbGl0KGJCKSxlLmNyb3NzRG9tYWlufHwocT1iRi5leGVjKGUudXJsLnRvTG93ZXJDYXNlKCkpLGUuY3Jvc3NEb21haW49cSYmKHFbMV0hPWJLWzFdfHxxWzJdIT1iS1syXXx8KHFbM118fChxWzFdPT09Imh0dHA6Ij84MDo0NDMpKSE9KGJLWzNdfHwoYktbMV09PT0iaHR0cDoiPzgwOjQ0MykpKSksZS5kYXRhJiZlLnByb2Nlc3NEYXRhJiZ0eXBlb2YgZS5kYXRhIT09InN0cmluZyImJihlLmRhdGE9ZC5wYXJhbShlLmRhdGEsZS50cmFkaXRpb25hbCkpLGJOKGJILGUsYyx1KTtpZihyPT09MilyZXR1cm4hMTtzPWUuZ2xvYmFsLGUudHlwZT1lLnR5cGUudG9VcHBlckNhc2UoKSxlLmhhc0NvbnRlbnQ9IWJ3LnRlc3QoZS50eXBlKSxzJiZkLmFjdGl2ZSsrPT09MCYmZC5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtpZighZS5oYXNDb250ZW50KXtlLmRhdGEmJihlLnVybCs9KGJ5LnRlc3QoZS51cmwpPyImIjoiPyIpK2UuZGF0YSksaz1lLnVybDtpZihlLmNhY2hlPT09ITEpe3ZhciB3PWQubm93KCkseD1lLnVybC5yZXBsYWNlKGJDLCIkMV89Iit3KTtlLnVybD14Kyh4PT09ZS51cmw/KGJ5LnRlc3QoZS51cmwpPyImIjoiPyIpKyJfPSIrdzoiIil9fWlmKGUuZGF0YSYmZS5oYXNDb250ZW50JiZlLmNvbnRlbnRUeXBlIT09ITF8fGMuY29udGVudFR5cGUpbFsiQ29udGVudC1UeXBlIl09ZS5jb250ZW50VHlwZTtlLmlmTW9kaWZpZWQmJihrPWt8fGUudXJsLGQubGFzdE1vZGlmaWVkW2tdJiYobFsiSWYtTW9kaWZpZWQtU2luY2UiXT1kLmxhc3RNb2RpZmllZFtrXSksZC5ldGFnW2tdJiYobFsiSWYtTm9uZS1NYXRjaCJdPWQuZXRhZ1trXSkpLGwuQWNjZXB0PWUuZGF0YVR5cGVzWzBdJiZlLmFjY2VwdHNbZS5kYXRhVHlwZXNbMF1dP2UuYWNjZXB0c1tlLmRhdGFUeXBlc1swXV0rKGUuZGF0YVR5cGVzWzBdIT09IioiPyIsICovKjsgcT0wLjAxIjoiIik6ZS5hY2NlcHRzWyIqIl07Zm9yKHQgaW4gZS5oZWFkZXJzKXUuc2V0UmVxdWVzdEhlYWRlcih0LGUuaGVhZGVyc1t0XSk7aWYoZS5iZWZvcmVTZW5kJiYoZS5iZWZvcmVTZW5kLmNhbGwoZix1LGUpPT09ITF8fHI9PT0yKSl7dS5hYm9ydCgpO3JldHVybiExfWZvcih0IGluIHtzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSl1W3RdKGVbdF0pO289Yk4oYkksZSxjLHUpO2lmKG8pe3UucmVhZHlTdGF0ZT0xLHMmJmcudHJpZ2dlcigiYWpheFNlbmQiLFt1LGVdKSxlLmFzeW5jJiZlLnRpbWVvdXQ+MCYmKHA9c2V0VGltZW91dChmdW5jdGlvbigpe3UuYWJvcnQoInRpbWVvdXQiKX0sZS50aW1lb3V0KSk7dHJ5e3I9MSxvLnNlbmQobCx2KX1jYXRjaCh5KXtzdGF0dXM8Mj92KC0xLHkpOmQuZXJyb3IoeSl9fWVsc2UgdigtMSwiTm8gVHJhbnNwb3J0Iik7cmV0dXJuIHV9LHBhcmFtOmZ1bmN0aW9uKGEsYyl7dmFyIGU9W10sZj1mdW5jdGlvbihhLGIpe2I9ZC5pc0Z1bmN0aW9uKGIpP2IoKTpiLGVbZS5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtjPT09YiYmKGM9ZC5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO2lmKGQuaXNBcnJheShhKXx8YS5qcXVlcnkmJiFkLmlzUGxhaW5PYmplY3QoYSkpZC5lYWNoKGEsZnVuY3Rpb24oKXtmKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKHZhciBnIGluIGEpYk8oZyxhW2ddLGMsZik7cmV0dXJuIGUuam9pbigiJiIpLnJlcGxhY2UoYnAsIisiKX19KSxkLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e319KTt2YXIgYlI9ZC5ub3coKSxiUz0vKFw9KVw/KCZ8JCl8KClcP1w/KCkvaTtkLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7cmV0dXJuIGQuZXhwYW5kbysiXyIrYlIrK319KSxkLmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9uKGIsYyxlKXt2YXIgZj10eXBlb2YgYi5kYXRhPT09InN0cmluZyI7aWYoYi5kYXRhVHlwZXNbMF09PT0ianNvbnAifHxjLmpzb25wQ2FsbGJhY2t8fGMuanNvbnAhPW51bGx8fGIuanNvbnAhPT0hMSYmKGJTLnRlc3QoYi51cmwpfHxmJiZiUy50ZXN0KGIuZGF0YSkpKXt2YXIgZyxoPWIuanNvbnBDYWxsYmFjaz1kLmlzRnVuY3Rpb24oYi5qc29ucENhbGxiYWNrKT9iLmpzb25wQ2FsbGJhY2soKTpiLmpzb25wQ2FsbGJhY2ssaT1hW2hdLGo9Yi51cmwsaz1iLmRhdGEsbD0iJDEiK2grIiQyIixtPWZ1bmN0aW9uKCl7YVtoXT1pLGcmJmQuaXNGdW5jdGlvbihpKSYmYVtoXShnWzBdKX07Yi5qc29ucCE9PSExJiYoaj1qLnJlcGxhY2UoYlMsbCksYi51cmw9PT1qJiYoZiYmKGs9ay5yZXBsYWNlKGJTLGwpKSxiLmRhdGE9PT1rJiYoais9KC9cPy8udGVzdChqKT8iJiI6Ij8iKStiLmpzb25wKyI9IitoKSkpLGIudXJsPWosYi5kYXRhPWssYVtoXT1mdW5jdGlvbihhKXtnPVthXX0sZS50aGVuKG0sbSksYi5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7Z3x8ZC5lcnJvcihoKyIgd2FzIG5vdCBjYWxsZWQiKTtyZXR1cm4gZ1swXX0sYi5kYXRhVHlwZXNbMF09Impzb24iO3JldHVybiJzY3JpcHQifX0pLGQuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovamF2YXNjcmlwdHxlY21hc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihhKXtkLmdsb2JhbEV2YWwoYSk7cmV0dXJuIGF9fX0pLGQuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihhKXthLmNhY2hlPT09YiYmKGEuY2FjaGU9ITEpLGEuY3Jvc3NEb21haW4mJihhLnR5cGU9IkdFVCIsYS5nbG9iYWw9ITEpfSksZC5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2lmKGEuY3Jvc3NEb21haW4pe3ZhciBkLGU9Yy5oZWFkfHxjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGMuZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKGYsZyl7ZD1jLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGQuYXN5bmM9ImFzeW5jIixhLnNjcmlwdENoYXJzZXQmJihkLmNoYXJzZXQ9YS5zY3JpcHRDaGFyc2V0KSxkLnNyYz1hLnVybCxkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihhLGMpe2lmKCFkLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZC5yZWFkeVN0YXRlKSlkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGUmJmQucGFyZW50Tm9kZSYmZS5yZW1vdmVDaGlsZChkKSxkPWIsY3x8ZygyMDAsInN1Y2Nlc3MiKX0sZS5pbnNlcnRCZWZvcmUoZCxlLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2QmJmQub25sb2FkKDAsMSl9fX19KTt2YXIgYlQ9ZC5ub3coKSxiVSxiVjtkLmFqYXhTZXR0aW5ncy54aHI9YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNMb2NhbCYmYlgoKXx8YlkoKX06YlgsYlY9ZC5hamF4U2V0dGluZ3MueGhyKCksZC5zdXBwb3J0LmFqYXg9ISFiVixkLnN1cHBvcnQuY29ycz1iViYmIndpdGhDcmVkZW50aWFscyJpbiBiVixiVj1iLGQuc3VwcG9ydC5hamF4JiZkLmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24oYSl7aWYoIWEuY3Jvc3NEb21haW58fGQuc3VwcG9ydC5jb3JzKXt2YXIgYztyZXR1cm57c2VuZDpmdW5jdGlvbihlLGYpe3ZhciBnPWEueGhyKCksaCxpO2EudXNlcm5hbWU/Zy5vcGVuKGEudHlwZSxhLnVybCxhLmFzeW5jLGEudXNlcm5hbWUsYS5wYXNzd29yZCk6Zy5vcGVuKGEudHlwZSxhLnVybCxhLmFzeW5jKTtpZihhLnhockZpZWxkcylmb3IoaSBpbiBhLnhockZpZWxkcylnW2ldPWEueGhyRmllbGRzW2ldO2EubWltZVR5cGUmJmcub3ZlcnJpZGVNaW1lVHlwZSYmZy5vdmVycmlkZU1pbWVUeXBlKGEubWltZVR5cGUpLCghYS5jcm9zc0RvbWFpbnx8YS5oYXNDb250ZW50KSYmIWVbIlgtUmVxdWVzdGVkLVdpdGgiXSYmKGVbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTt0cnl7Zm9yKGkgaW4gZSlnLnNldFJlcXVlc3RIZWFkZXIoaSxlW2ldKX1jYXRjaChqKXt9Zy5zZW5kKGEuaGFzQ29udGVudCYmYS5kYXRhfHxudWxsKSxjPWZ1bmN0aW9uKGUsaSl7dmFyIGosayxsLG0sbjt0cnl7aWYoYyYmKGl8fGcucmVhZHlTdGF0ZT09PTQpKXtjPWIsaCYmKGcub25yZWFkeXN0YXRlY2hhbmdlPWQubm9vcCxkZWxldGUgYlVbaF0pO2lmKGkpZy5yZWFkeVN0YXRlIT09NCYmZy5hYm9ydCgpO2Vsc2V7aj1nLnN0YXR1cyxsPWcuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCksbT17fSxuPWcucmVzcG9uc2VYTUwsbiYmbi5kb2N1bWVudEVsZW1lbnQmJihtLnhtbD1uKSxtLnRleHQ9Zy5yZXNwb25zZVRleHQ7dHJ5e2s9Zy5zdGF0dXNUZXh0fWNhdGNoKG8pe2s9IiJ9anx8IWEuaXNMb2NhbHx8YS5jcm9zc0RvbWFpbj9qPT09MTIyMyYmKGo9MjA0KTpqPW0udGV4dD8yMDA6NDA0fX19Y2F0Y2gocCl7aXx8ZigtMSxwKX1tJiZmKGosayxtLGwpfSxhLmFzeW5jJiZnLnJlYWR5U3RhdGUhPT00PyhiVXx8KGJVPXt9LGJXKCkpLGg9YlQrKyxnLm9ucmVhZHlzdGF0ZWNoYW5nZT1iVVtoXT1jKTpjKCl9LGFib3J0OmZ1bmN0aW9uKCl7YyYmYygwLDEpfX19fSk7dmFyIGJaPXt9LGIkPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxiXz0vXihbK1wtXT0pPyhbXGQrLlwtXSspKFthLXolXSopJC9pLGNhLGNiPVtbImhlaWdodCIsIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIl0sWyJ3aWR0aCIsIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0Il0sWyJvcGFjaXR5Il1dO2QuZm4uZXh0ZW5kKHtzaG93OmZ1bmN0aW9uKGEsYixjKXt2YXIgZSxmO2lmKGF8fGE9PT0wKXJldHVybiB0aGlzLmFuaW1hdGUoY2MoInNob3ciLDMpLGEsYixjKTtmb3IodmFyIGc9MCxoPXRoaXMubGVuZ3RoO2c8aDtnKyspZT10aGlzW2ddLGY9ZS5zdHlsZS5kaXNwbGF5LCFkLl9kYXRhKGUsIm9sZGRpc3BsYXkiKSYmZj09PSJub25lIiYmKGY9ZS5zdHlsZS5kaXNwbGF5PSIiKSxmPT09IiImJmQuY3NzKGUsImRpc3BsYXkiKT09PSJub25lIiYmZC5fZGF0YShlLCJvbGRkaXNwbGF5IixjZChlLm5vZGVOYW1lKSk7Zm9yKGc9MDtnPGg7ZysrKXtlPXRoaXNbZ10sZj1lLnN0eWxlLmRpc3BsYXk7aWYoZj09PSIifHxmPT09Im5vbmUiKWUuc3R5bGUuZGlzcGxheT1kLl9kYXRhKGUsIm9sZGRpc3BsYXkiKXx8IiJ9cmV0dXJuIHRoaXN9LGhpZGU6ZnVuY3Rpb24oYSxiLGMpe2lmKGF8fGE9PT0wKXJldHVybiB0aGlzLmFuaW1hdGUoY2MoImhpZGUiLDMpLGEsYixjKTtmb3IodmFyIGU9MCxmPXRoaXMubGVuZ3RoO2U8ZjtlKyspe3ZhciBnPWQuY3NzKHRoaXNbZV0sImRpc3BsYXkiKTtnIT09Im5vbmUiJiYhZC5fZGF0YSh0aGlzW2VdLCJvbGRkaXNwbGF5IikmJmQuX2RhdGEodGhpc1tlXSwib2xkZGlzcGxheSIsZyl9Zm9yKGU9MDtlPGY7ZSsrKXRoaXNbZV0uc3R5bGUuZGlzcGxheT0ibm9uZSI7cmV0dXJuIHRoaXN9LF90b2dnbGU6ZC5mbi50b2dnbGUsdG9nZ2xlOmZ1bmN0aW9uKGEsYixjKXt2YXIgZT10eXBlb2YgYT09PSJib29sZWFuIjtkLmlzRnVuY3Rpb24oYSkmJmQuaXNGdW5jdGlvbihiKT90aGlzLl90b2dnbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpOmE9PW51bGx8fGU/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9ZT9hOmQodGhpcykuaXMoIjpoaWRkZW4iKTtkKHRoaXMpW2I/InNob3ciOiJoaWRlIl0oKX0pOnRoaXMuYW5pbWF0ZShjYygidG9nZ2xlIiwzKSxhLGIsYyk7cmV0dXJuIHRoaXN9LGZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoIjpoaWRkZW4iKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmJ9LGEsYyxkKX0sYW5pbWF0ZTpmdW5jdGlvbihhLGIsYyxlKXt2YXIgZj1kLnNwZWVkKGIsYyxlKTtpZihkLmlzRW1wdHlPYmplY3QoYSkpcmV0dXJuIHRoaXMuZWFjaChmLmNvbXBsZXRlKTtyZXR1cm4gdGhpc1tmLnF1ZXVlPT09ITE/ImVhY2giOiJxdWV1ZSJdKGZ1bmN0aW9uKCl7dmFyIGI9ZC5leHRlbmQoe30sZiksYyxlPXRoaXMubm9kZVR5cGU9PT0xLGc9ZSYmZCh0aGlzKS5pcygiOmhpZGRlbiIpLGg9dGhpcztmb3IoYyBpbiBhKXt2YXIgaT1kLmNhbWVsQ2FzZShjKTtjIT09aSYmKGFbaV09YVtjXSxkZWxldGUgYVtjXSxjPWkpO2lmKGFbY109PT0iaGlkZSImJmd8fGFbY109PT0ic2hvdyImJiFnKXJldHVybiBiLmNvbXBsZXRlLmNhbGwodGhpcyk7aWYoZSYmKGM9PT0iaGVpZ2h0Inx8Yz09PSJ3aWR0aCIpKXtiLm92ZXJmbG93PVt0aGlzLnN0eWxlLm92ZXJmbG93LHRoaXMuc3R5bGUub3ZlcmZsb3dYLHRoaXMuc3R5bGUub3ZlcmZsb3dZXTtpZihkLmNzcyh0aGlzLCJkaXNwbGF5Iik9PT0iaW5saW5lIiYmZC5jc3ModGhpcywiZmxvYXQiKT09PSJub25lIilpZihkLnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCl7dmFyIGo9Y2QodGhpcy5ub2RlTmFtZSk7aj09PSJpbmxpbmUiP3RoaXMuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIjoodGhpcy5zdHlsZS5kaXNwbGF5PSJpbmxpbmUiLHRoaXMuc3R5bGUuem9vbT0xKX1lbHNlIHRoaXMuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIn1kLmlzQXJyYXkoYVtjXSkmJigoYi5zcGVjaWFsRWFzaW5nPWIuc3BlY2lhbEVhc2luZ3x8e30pW2NdPWFbY11bMV0sYVtjXT1hW2NdWzBdKX1iLm92ZXJmbG93IT1udWxsJiYodGhpcy5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIiksYi5jdXJBbmltPWQuZXh0ZW5kKHt9LGEpLGQuZWFjaChhLGZ1bmN0aW9uKGMsZSl7dmFyIGY9bmV3IGQuZngoaCxiLGMpO2lmKGIkLnRlc3QoZSkpZltlPT09InRvZ2dsZSI/Zz8ic2hvdyI6ImhpZGUiOmVdKGEpO2Vsc2V7dmFyIGk9Yl8uZXhlYyhlKSxqPWYuY3VyKCk7aWYoaSl7dmFyIGs9cGFyc2VGbG9hdChpWzJdKSxsPWlbM118fChkLmNzc051bWJlcltjXT8iIjoicHgiKTtsIT09InB4IiYmKGQuc3R5bGUoaCxjLChrfHwxKStsKSxqPShrfHwxKS9mLmN1cigpKmosZC5zdHlsZShoLGMsaitsKSksaVsxXSYmKGs9KGlbMV09PT0iLT0iPy0xOjEpKmsraiksZi5jdXN0b20oaixrLGwpfWVsc2UgZi5jdXN0b20oaixlLCIiKX19KTtyZXR1cm4hMH0pfSxzdG9wOmZ1bmN0aW9uKGEsYil7dmFyIGM9ZC50aW1lcnM7YSYmdGhpcy5xdWV1ZShbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWMubGVuZ3RoLTE7YT49MDthLS0pY1thXS5lbGVtPT09dGhpcyYmKGImJmNbYV0oITApLGMuc3BsaWNlKGEsMSkpfSksYnx8dGhpcy5kZXF1ZXVlKCk7cmV0dXJuIHRoaXN9fSksZC5lYWNoKHtzbGlkZURvd246Y2MoInNob3ciLDEpLHNsaWRlVXA6Y2MoImhpZGUiLDEpLHNsaWRlVG9nZ2xlOmNjKCJ0b2dnbGUiLDEpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oYSxiKXtkLmZuW2FdPWZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsYSxjLGQpfX0pLGQuZXh0ZW5kKHtzcGVlZDpmdW5jdGlvbihhLGIsYyl7dmFyIGU9YSYmdHlwZW9mIGE9PT0ib2JqZWN0Ij9kLmV4dGVuZCh7fSxhKTp7Y29tcGxldGU6Y3x8IWMmJmJ8fGQuaXNGdW5jdGlvbihhKSYmYSxkdXJhdGlvbjphLGVhc2luZzpjJiZifHxiJiYhZC5pc0Z1bmN0aW9uKGIpJiZifTtlLmR1cmF0aW9uPWQuZngub2ZmPzA6dHlwZW9mIGUuZHVyYXRpb249PT0ibnVtYmVyIj9lLmR1cmF0aW9uOmUuZHVyYXRpb24gaW4gZC5meC5zcGVlZHM/ZC5meC5zcGVlZHNbZS5kdXJhdGlvbl06ZC5meC5zcGVlZHMuX2RlZmF1bHQsZS5vbGQ9ZS5jb21wbGV0ZSxlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7ZS5xdWV1ZSE9PSExJiZkKHRoaXMpLmRlcXVldWUoKSxkLmlzRnVuY3Rpb24oZS5vbGQpJiZlLm9sZC5jYWxsKHRoaXMpfTtyZXR1cm4gZX0sZWFzaW5nOntsaW5lYXI6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGMrZCphfSxzd2luZzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4oLU1hdGguY29zKGEqTWF0aC5QSSkvMisuNSkqZCtjfX0sdGltZXJzOltdLGZ4OmZ1bmN0aW9uKGEsYixjKXt0aGlzLm9wdGlvbnM9Yix0aGlzLmVsZW09YSx0aGlzLnByb3A9YyxiLm9yaWd8fChiLm9yaWc9e30pfX0pLGQuZngucHJvdG90eXBlPXt1cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksKGQuZnguc3RlcFt0aGlzLnByb3BdfHxkLmZ4LnN0ZXAuX2RlZmF1bHQpKHRoaXMpfSxjdXI6ZnVuY3Rpb24oKXtpZih0aGlzLmVsZW1bdGhpcy5wcm9wXSE9bnVsbCYmKCF0aGlzLmVsZW0uc3R5bGV8fHRoaXMuZWxlbS5zdHlsZVt0aGlzLnByb3BdPT1udWxsKSlyZXR1cm4gdGhpcy5lbGVtW3RoaXMucHJvcF07dmFyIGEsYj1kLmNzcyh0aGlzLmVsZW0sdGhpcy5wcm9wKTtyZXR1cm4gaXNOYU4oYT1wYXJzZUZsb2F0KGIpKT8hYnx8Yj09PSJhdXRvIj8wOmI6YX0sY3VzdG9tOmZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBnKGEpe3JldHVybiBlLnN0ZXAoYSl9dmFyIGU9dGhpcyxmPWQuZng7dGhpcy5zdGFydFRpbWU9ZC5ub3coKSx0aGlzLnN0YXJ0PWEsdGhpcy5lbmQ9Yix0aGlzLnVuaXQ9Y3x8dGhpcy51bml0fHwoZC5jc3NOdW1iZXJbdGhpcy5wcm9wXT8iIjoicHgiKSx0aGlzLm5vdz10aGlzLnN0YXJ0LHRoaXMucG9zPXRoaXMuc3RhdGU9MCxnLmVsZW09dGhpcy5lbGVtLGcoKSYmZC50aW1lcnMucHVzaChnKSYmIWNhJiYoY2E9c2V0SW50ZXJ2YWwoZi50aWNrLGYuaW50ZXJ2YWwpKX0sc2hvdzpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09ZC5zdHlsZSh0aGlzLmVsZW0sdGhpcy5wcm9wKSx0aGlzLm9wdGlvbnMuc2hvdz0hMCx0aGlzLmN1c3RvbSh0aGlzLnByb3A9PT0id2lkdGgifHx0aGlzLnByb3A9PT0iaGVpZ2h0Ij8xOjAsdGhpcy5jdXIoKSksZCh0aGlzLmVsZW0pLnNob3coKX0saGlkZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09ZC5zdHlsZSh0aGlzLmVsZW0sdGhpcy5wcm9wKSx0aGlzLm9wdGlvbnMuaGlkZT0hMCx0aGlzLmN1c3RvbSh0aGlzLmN1cigpLDApfSxzdGVwOmZ1bmN0aW9uKGEpe3ZhciBiPWQubm93KCksYz0hMDtpZihhfHxiPj10aGlzLm9wdGlvbnMuZHVyYXRpb24rdGhpcy5zdGFydFRpbWUpe3RoaXMubm93PXRoaXMuZW5kLHRoaXMucG9zPXRoaXMuc3RhdGU9MSx0aGlzLnVwZGF0ZSgpLHRoaXMub3B0aW9ucy5jdXJBbmltW3RoaXMucHJvcF09ITA7Zm9yKHZhciBlIGluIHRoaXMub3B0aW9ucy5jdXJBbmltKXRoaXMub3B0aW9ucy5jdXJBbmltW2VdIT09ITAmJihjPSExKTtpZihjKXtpZih0aGlzLm9wdGlvbnMub3ZlcmZsb3chPW51bGwmJiFkLnN1cHBvcnQuc2hyaW5rV3JhcEJsb2Nrcyl7dmFyIGY9dGhpcy5lbGVtLGc9dGhpcy5vcHRpb25zO2QuZWFjaChbIiIsIlgiLCJZIl0sZnVuY3Rpb24oYSxiKXtmLnN0eWxlWyJvdmVyZmxvdyIrYl09Zy5vdmVyZmxvd1thXX0pfXRoaXMub3B0aW9ucy5oaWRlJiZkKHRoaXMuZWxlbSkuaGlkZSgpO2lmKHRoaXMub3B0aW9ucy5oaWRlfHx0aGlzLm9wdGlvbnMuc2hvdylmb3IodmFyIGggaW4gdGhpcy5vcHRpb25zLmN1ckFuaW0pZC5zdHlsZSh0aGlzLmVsZW0saCx0aGlzLm9wdGlvbnMub3JpZ1toXSk7dGhpcy5vcHRpb25zLmNvbXBsZXRlLmNhbGwodGhpcy5lbGVtKX1yZXR1cm4hMX12YXIgaT1iLXRoaXMuc3RhcnRUaW1lO3RoaXMuc3RhdGU9aS90aGlzLm9wdGlvbnMuZHVyYXRpb247dmFyIGo9dGhpcy5vcHRpb25zLnNwZWNpYWxFYXNpbmcmJnRoaXMub3B0aW9ucy5zcGVjaWFsRWFzaW5nW3RoaXMucHJvcF0saz10aGlzLm9wdGlvbnMuZWFzaW5nfHwoZC5lYXNpbmcuc3dpbmc/InN3aW5nIjoibGluZWFyIik7dGhpcy5wb3M9ZC5lYXNpbmdbanx8a10odGhpcy5zdGF0ZSxpLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pLHRoaXMubm93PXRoaXMuc3RhcnQrKHRoaXMuZW5kLXRoaXMuc3RhcnQpKnRoaXMucG9zLHRoaXMudXBkYXRlKCk7cmV0dXJuITB9fSxkLmV4dGVuZChkLmZ4LHt0aWNrOmZ1bmN0aW9uKCl7dmFyIGE9ZC50aW1lcnM7Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDtiKyspYVtiXSgpfHxhLnNwbGljZShiLS0sMSk7YS5sZW5ndGh8fGQuZnguc3RvcCgpfSxpbnRlcnZhbDoxMyxzdG9wOmZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChjYSksY2E9bnVsbH0sc3BlZWRzOntzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LHN0ZXA6e29wYWNpdHk6ZnVuY3Rpb24oYSl7ZC5zdHlsZShhLmVsZW0sIm9wYWNpdHkiLGEubm93KX0sX2RlZmF1bHQ6ZnVuY3Rpb24oYSl7YS5lbGVtLnN0eWxlJiZhLmVsZW0uc3R5bGVbYS5wcm9wXSE9bnVsbD9hLmVsZW0uc3R5bGVbYS5wcm9wXT0oYS5wcm9wPT09IndpZHRoInx8YS5wcm9wPT09ImhlaWdodCI/TWF0aC5tYXgoMCxhLm5vdyk6YS5ub3cpK2EudW5pdDphLmVsZW1bYS5wcm9wXT1hLm5vd319fSksZC5leHByJiZkLmV4cHIuZmlsdGVycyYmKGQuZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGEpe3JldHVybiBkLmdyZXAoZC50aW1lcnMsZnVuY3Rpb24oYil7cmV0dXJuIGE9PT1iLmVsZW19KS5sZW5ndGh9KTt2YXIgY2U9L150KD86YWJsZXxkfGgpJC9pLGNmPS9eKD86Ym9keXxodG1sKSQvaTsiZ2V0Qm91bmRpbmdDbGllbnRSZWN0ImluIGMuZG9jdW1lbnRFbGVtZW50P2QuZm4ub2Zmc2V0PWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF0sYztpZihhKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7ZC5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsYSxiKX0pO2lmKCFifHwhYi5vd25lckRvY3VtZW50KXJldHVybiBudWxsO2lmKGI9PT1iLm93bmVyRG9jdW1lbnQuYm9keSlyZXR1cm4gZC5vZmZzZXQuYm9keU9mZnNldChiKTt0cnl7Yz1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpfWNhdGNoKGUpe312YXIgZj1iLm93bmVyRG9jdW1lbnQsZz1mLmRvY3VtZW50RWxlbWVudDtpZighY3x8IWQuY29udGFpbnMoZyxiKSlyZXR1cm4gYz97dG9wOmMudG9wLGxlZnQ6Yy5sZWZ0fTp7dG9wOjAsbGVmdDowfTt2YXIgaD1mLmJvZHksaT1jZyhmKSxqPWcuY2xpZW50VG9wfHxoLmNsaWVudFRvcHx8MCxrPWcuY2xpZW50TGVmdHx8aC5jbGllbnRMZWZ0fHwwLGw9aS5wYWdlWU9mZnNldHx8ZC5zdXBwb3J0LmJveE1vZGVsJiZnLnNjcm9sbFRvcHx8aC5zY3JvbGxUb3AsbT1pLnBhZ2VYT2Zmc2V0fHxkLnN1cHBvcnQuYm94TW9kZWwmJmcuc2Nyb2xsTGVmdHx8aC5zY3JvbGxMZWZ0LG49Yy50b3ArbC1qLG89Yy5sZWZ0K20taztyZXR1cm57dG9wOm4sbGVmdDpvfX06ZC5mbi5vZmZzZXQ9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpc1swXTtpZihhKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7ZC5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsYSxiKX0pO2lmKCFifHwhYi5vd25lckRvY3VtZW50KXJldHVybiBudWxsO2lmKGI9PT1iLm93bmVyRG9jdW1lbnQuYm9keSlyZXR1cm4gZC5vZmZzZXQuYm9keU9mZnNldChiKTtkLm9mZnNldC5pbml0aWFsaXplKCk7dmFyIGMsZT1iLm9mZnNldFBhcmVudCxmPWIsZz1iLm93bmVyRG9jdW1lbnQsaD1nLmRvY3VtZW50RWxlbWVudCxpPWcuYm9keSxqPWcuZGVmYXVsdFZpZXcsaz1qP2ouZ2V0Q29tcHV0ZWRTdHlsZShiLG51bGwpOmIuY3VycmVudFN0eWxlLGw9Yi5vZmZzZXRUb3AsbT1iLm9mZnNldExlZnQ7d2hpbGUoKGI9Yi5wYXJlbnROb2RlKSYmYiE9PWkmJmIhPT1oKXtpZihkLm9mZnNldC5zdXBwb3J0c0ZpeGVkUG9zaXRpb24mJmsucG9zaXRpb249PT0iZml4ZWQiKWJyZWFrO2M9aj9qLmdldENvbXB1dGVkU3R5bGUoYixudWxsKTpiLmN1cnJlbnRTdHlsZSxsLT1iLnNjcm9sbFRvcCxtLT1iLnNjcm9sbExlZnQsYj09PWUmJihsKz1iLm9mZnNldFRvcCxtKz1iLm9mZnNldExlZnQsZC5vZmZzZXQuZG9lc05vdEFkZEJvcmRlciYmKCFkLm9mZnNldC5kb2VzQWRkQm9yZGVyRm9yVGFibGVBbmRDZWxsc3x8IWNlLnRlc3QoYi5ub2RlTmFtZSkpJiYobCs9cGFyc2VGbG9hdChjLmJvcmRlclRvcFdpZHRoKXx8MCxtKz1wYXJzZUZsb2F0KGMuYm9yZGVyTGVmdFdpZHRoKXx8MCksZj1lLGU9Yi5vZmZzZXRQYXJlbnQpLGQub2Zmc2V0LnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZSYmYy5vdmVyZmxvdyE9PSJ2aXNpYmxlIiYmKGwrPXBhcnNlRmxvYXQoYy5ib3JkZXJUb3BXaWR0aCl8fDAsbSs9cGFyc2VGbG9hdChjLmJvcmRlckxlZnRXaWR0aCl8fDApLGs9Y31pZihrLnBvc2l0aW9uPT09InJlbGF0aXZlInx8ay5wb3NpdGlvbj09PSJzdGF0aWMiKWwrPWkub2Zmc2V0VG9wLG0rPWkub2Zmc2V0TGVmdDtkLm9mZnNldC5zdXBwb3J0c0ZpeGVkUG9zaXRpb24mJmsucG9zaXRpb249PT0iZml4ZWQiJiYobCs9TWF0aC5tYXgoaC5zY3JvbGxUb3AsaS5zY3JvbGxUb3ApLG0rPU1hdGgubWF4KGguc2Nyb2xsTGVmdCxpLnNjcm9sbExlZnQpKTtyZXR1cm57dG9wOmwsbGVmdDptfX0sZC5vZmZzZXQ9e2luaXRpYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT1jLmJvZHksYj1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGUsZixnLGgsaT1wYXJzZUZsb2F0KGQuY3NzKGEsIm1hcmdpblRvcCIpKXx8MCxqPSI8ZGl2IHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7bWFyZ2luOjA7Ym9yZGVyOjVweCBzb2xpZCAjMDAwO3BhZGRpbmc6MDt3aWR0aDoxcHg7aGVpZ2h0OjFweDsnPjxkaXY+PC9kaXY+PC9kaXY+PHRhYmxlIHN0eWxlPSdwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7bWFyZ2luOjA7Ym9yZGVyOjVweCBzb2xpZCAjMDAwO3BhZGRpbmc6MDt3aWR0aDoxcHg7aGVpZ2h0OjFweDsnIGNlbGxwYWRkaW5nPScwJyBjZWxsc3BhY2luZz0nMCc+PHRyPjx0ZD48L3RkPjwvdHI+PC90YWJsZT4iO2QuZXh0ZW5kKGIuc3R5bGUse3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLG1hcmdpbjowLGJvcmRlcjowLHdpZHRoOiIxcHgiLGhlaWdodDoiMXB4Iix2aXNpYmlsaXR5OiJoaWRkZW4ifSksYi5pbm5lckhUTUw9aixhLmluc2VydEJlZm9yZShiLGEuZmlyc3RDaGlsZCksZT1iLmZpcnN0Q2hpbGQsZj1lLmZpcnN0Q2hpbGQsaD1lLm5leHRTaWJsaW5nLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCx0aGlzLmRvZXNOb3RBZGRCb3JkZXI9Zi5vZmZzZXRUb3AhPT01LHRoaXMuZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHM9aC5vZmZzZXRUb3A9PT01LGYuc3R5bGUucG9zaXRpb249ImZpeGVkIixmLnN0eWxlLnRvcD0iMjBweCIsdGhpcy5zdXBwb3J0c0ZpeGVkUG9zaXRpb249Zi5vZmZzZXRUb3A9PT0yMHx8Zi5vZmZzZXRUb3A9PT0xNSxmLnN0eWxlLnBvc2l0aW9uPWYuc3R5bGUudG9wPSIiLGUuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHRoaXMuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlPWYub2Zmc2V0VG9wPT09LTUsdGhpcy5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldD1hLm9mZnNldFRvcCE9PWksYS5yZW1vdmVDaGlsZChiKSxhPWI9ZT1mPWc9aD1udWxsLGQub2Zmc2V0LmluaXRpYWxpemU9ZC5ub29wfSxib2R5T2Zmc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0VG9wLGM9YS5vZmZzZXRMZWZ0O2Qub2Zmc2V0LmluaXRpYWxpemUoKSxkLm9mZnNldC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCYmKGIrPXBhcnNlRmxvYXQoZC5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMrPXBhcnNlRmxvYXQoZC5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCk7cmV0dXJue3RvcDpiLGxlZnQ6Y319LHNldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGU9ZC5jc3MoYSwicG9zaXRpb24iKTtlPT09InN0YXRpYyImJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciBmPWQoYSksZz1mLm9mZnNldCgpLGg9ZC5jc3MoYSwidG9wIiksaT1kLmNzcyhhLCJsZWZ0Iiksaj1lPT09ImFic29sdXRlIiYmZC5pbkFycmF5KCJhdXRvIixbaCxpXSk+LTEsaz17fSxsPXt9LG0sbjtqJiYobD1mLnBvc2l0aW9uKCkpLG09aj9sLnRvcDpwYXJzZUludChoLDEwKXx8MCxuPWo/bC5sZWZ0OnBhcnNlSW50KGksMTApfHwwLGQuaXNGdW5jdGlvbihiKSYmKGI9Yi5jYWxsKGEsYyxnKSksYi50b3AhPW51bGwmJihrLnRvcD1iLnRvcC1nLnRvcCttKSxiLmxlZnQhPW51bGwmJihrLmxlZnQ9Yi5sZWZ0LWcubGVmdCtuKSwidXNpbmciaW4gYj9iLnVzaW5nLmNhbGwoYSxrKTpmLmNzcyhrKX19LGQuZm4uZXh0ZW5kKHtwb3NpdGlvbjpmdW5jdGlvbigpe2lmKCF0aGlzWzBdKXJldHVybiBudWxsO3ZhciBhPXRoaXNbMF0sYj10aGlzLm9mZnNldFBhcmVudCgpLGM9dGhpcy5vZmZzZXQoKSxlPWNmLnRlc3QoYlswXS5ub2RlTmFtZSk/e3RvcDowLGxlZnQ6MH06Yi5vZmZzZXQoKTtjLnRvcC09cGFyc2VGbG9hdChkLmNzcyhhLCJtYXJnaW5Ub3AiKSl8fDAsYy5sZWZ0LT1wYXJzZUZsb2F0KGQuY3NzKGEsIm1hcmdpbkxlZnQiKSl8fDAsZS50b3ArPXBhcnNlRmxvYXQoZC5jc3MoYlswXSwiYm9yZGVyVG9wV2lkdGgiKSl8fDAsZS5sZWZ0Kz1wYXJzZUZsb2F0KGQuY3NzKGJbMF0sImJvcmRlckxlZnRXaWR0aCIpKXx8MDtyZXR1cm57dG9wOmMudG9wLWUudG9wLGxlZnQ6Yy5sZWZ0LWUubGVmdH19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0UGFyZW50fHxjLmJvZHk7d2hpbGUoYSYmKCFjZi50ZXN0KGEubm9kZU5hbWUpJiZkLmNzcyhhLCJwb3NpdGlvbiIpPT09InN0YXRpYyIpKWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9KX19KSxkLmVhY2goWyJMZWZ0IiwiVG9wIl0sZnVuY3Rpb24oYSxjKXt2YXIgZT0ic2Nyb2xsIitjO2QuZm5bZV09ZnVuY3Rpb24oYyl7dmFyIGY9dGhpc1swXSxnO2lmKCFmKXJldHVybiBudWxsO2lmKGMhPT1iKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtnPWNnKHRoaXMpLGc/Zy5zY3JvbGxUbyhhP2QoZykuc2Nyb2xsTGVmdCgpOmMsYT9jOmQoZykuc2Nyb2xsVG9wKCkpOnRoaXNbZV09Y30pO2c9Y2coZik7cmV0dXJuIGc/InBhZ2VYT2Zmc2V0ImluIGc/Z1thPyJwYWdlWU9mZnNldCI6InBhZ2VYT2Zmc2V0Il06ZC5zdXBwb3J0LmJveE1vZGVsJiZnLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtlXXx8Zy5kb2N1bWVudC5ib2R5W2VdOmZbZV19fSksZC5lYWNoKFsiSGVpZ2h0IiwiV2lkdGgiXSxmdW5jdGlvbihhLGMpe3ZhciBlPWMudG9Mb3dlckNhc2UoKTtkLmZuWyJpbm5lciIrY109ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1swXT9wYXJzZUZsb2F0KGQuY3NzKHRoaXNbMF0sZSwicGFkZGluZyIpKTpudWxsfSxkLmZuWyJvdXRlciIrY109ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXNbMF0/cGFyc2VGbG9hdChkLmNzcyh0aGlzWzBdLGUsYT8ibWFyZ2luIjoiYm9yZGVyIikpOm51bGx9LGQuZm5bZV09ZnVuY3Rpb24oYSl7dmFyIGY9dGhpc1swXTtpZighZilyZXR1cm4gYT09bnVsbD9udWxsOnRoaXM7aWYoZC5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9ZCh0aGlzKTtjW2VdKGEuY2FsbCh0aGlzLGIsY1tlXSgpKSl9KTtpZihkLmlzV2luZG93KGYpKXt2YXIgZz1mLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IitjXTtyZXR1cm4gZi5kb2N1bWVudC5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQiJiZnfHxmLmRvY3VtZW50LmJvZHlbImNsaWVudCIrY118fGd9aWYoZi5ub2RlVHlwZT09PTkpcmV0dXJuIE1hdGgubWF4KGYuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2NdLGYuYm9keVsic2Nyb2xsIitjXSxmLmRvY3VtZW50RWxlbWVudFsic2Nyb2xsIitjXSxmLmJvZHlbIm9mZnNldCIrY10sZi5kb2N1bWVudEVsZW1lbnRbIm9mZnNldCIrY10pO2lmKGE9PT1iKXt2YXIgaD1kLmNzcyhmLGUpLGk9cGFyc2VGbG9hdChoKTtyZXR1cm4gZC5pc05hTihpKT9oOml9cmV0dXJuIHRoaXMuY3NzKGUsdHlwZW9mIGE9PT0ic3RyaW5nIj9hOmErInB4Iil9fSksYS5qUXVlcnk9YS4kPWR9KSh3aW5kb3cpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwaS9qcy9saWJzL21vZGVybml6ci0xLjcubWluLmpzIGIvYXBpL2pzL2xpYnMvbW9kZXJuaXpyLTEuNy5taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY1NDg1MAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS9qcy9saWJzL21vZGVybml6ci0xLjcubWluLmpzCkBAIC0wLDAgKzEsMiBAQAorLy8gTW9kZXJuaXpyIHYxLjcgIHd3dy5tb2Rlcm5penIuY29tCit3aW5kb3cuTW9kZXJuaXpyPWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBHKCl7ZS5pbnB1dD1mdW5jdGlvbihhKXtmb3IodmFyIGI9MCxjPWEubGVuZ3RoO2I8YztiKyspdFthW2JdXT0hIShhW2JdaW4gbCk7cmV0dXJuIHR9KCJhdXRvY29tcGxldGUgYXV0b2ZvY3VzIGxpc3QgcGxhY2Vob2xkZXIgbWF4IG1pbiBtdWx0aXBsZSBwYXR0ZXJuIHJlcXVpcmVkIHN0ZXAiLnNwbGl0KCIgIikpLGUuaW5wdXR0eXBlcz1mdW5jdGlvbihhKXtmb3IodmFyIGQ9MCxlLGYsaCxpPWEubGVuZ3RoO2Q8aTtkKyspbC5zZXRBdHRyaWJ1dGUoInR5cGUiLGY9YVtkXSksZT1sLnR5cGUhPT0idGV4dCIsZSYmKGwudmFsdWU9bSxsLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOmFic29sdXRlO3Zpc2liaWxpdHk6aGlkZGVuOyIsL15yYW5nZSQvLnRlc3QoZikmJmwuc3R5bGUuV2Via2l0QXBwZWFyYW5jZSE9PWM/KGcuYXBwZW5kQ2hpbGQobCksaD1iLmRlZmF1bHRWaWV3LGU9aC5nZXRDb21wdXRlZFN0eWxlJiZoLmdldENvbXB1dGVkU3R5bGUobCxudWxsKS5XZWJraXRBcHBlYXJhbmNlIT09InRleHRmaWVsZCImJmwub2Zmc2V0SGVpZ2h0IT09MCxnLnJlbW92ZUNoaWxkKGwpKTovXihzZWFyY2h8dGVsKSQvLnRlc3QoZil8fCgvXih1cmx8ZW1haWwpJC8udGVzdChmKT9lPWwuY2hlY2tWYWxpZGl0eSYmbC5jaGVja1ZhbGlkaXR5KCk9PT0hMTovXmNvbG9yJC8udGVzdChmKT8oZy5hcHBlbmRDaGlsZChsKSxnLm9mZnNldFdpZHRoLGU9bC52YWx1ZSE9bSxnLnJlbW92ZUNoaWxkKGwpKTplPWwudmFsdWUhPW0pKSxzW2FbZF1dPSEhZTtyZXR1cm4gc30oInNlYXJjaCB0ZWwgdXJsIGVtYWlsIGRhdGV0aW1lIGRhdGUgbW9udGggd2VlayB0aW1lIGRhdGV0aW1lLWxvY2FsIG51bWJlciByYW5nZSBjb2xvciIuc3BsaXQoIiAiKSl9ZnVuY3Rpb24gRihhLGIpe3ZhciBjPWEuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYS5zdWJzdHIoMSksZD0oYSsiICIrcC5qb2luKGMrIiAiKStjKS5zcGxpdCgiICIpO3JldHVybiEhRShkLGIpfWZ1bmN0aW9uIEUoYSxiKXtmb3IodmFyIGQgaW4gYSlpZihrW2FbZF1dIT09YyYmKCFifHxiKGFbZF0saikpKXJldHVybiEwfWZ1bmN0aW9uIEQoYSxiKXtyZXR1cm4oIiIrYSkuaW5kZXhPZihiKSE9PS0xfWZ1bmN0aW9uIEMoYSxiKXtyZXR1cm4gdHlwZW9mIGE9PT1ifWZ1bmN0aW9uIEIoYSxiKXtyZXR1cm4gQShvLmpvaW4oYSsiOyIpKyhifHwiIikpfWZ1bmN0aW9uIEEoYSl7ay5jc3NUZXh0PWF9dmFyIGQ9IjEuNyIsZT17fSxmPSEwLGc9Yi5kb2N1bWVudEVsZW1lbnQsaD1iLmhlYWR8fGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXSxpPSJtb2Rlcm5penIiLGo9Yi5jcmVhdGVFbGVtZW50KGkpLGs9ai5zdHlsZSxsPWIuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxtPSI6KSIsbj1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLG89IiAtd2Via2l0LSAtbW96LSAtby0gLW1zLSAta2h0bWwtICIuc3BsaXQoIiAiKSxwPSJXZWJraXQgTW96IE8gbXMgS2h0bWwiLnNwbGl0KCIgIikscT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9LHI9e30scz17fSx0PXt9LHU9W10sdix3PWZ1bmN0aW9uKGEpe3ZhciBjPWIuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxkPWIuY3JlYXRlRWxlbWVudCgiZGl2IiksZTtjLnRleHRDb250ZW50PWErInsjbW9kZXJuaXpye2hlaWdodDozcHh9fSIsaC5hcHBlbmRDaGlsZChjKSxkLmlkPSJtb2Rlcm5penIiLGcuYXBwZW5kQ2hpbGQoZCksZT1kLm9mZnNldEhlaWdodD09PTMsYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpLGQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkKTtyZXR1cm4hIWV9LHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBkKGQsZSl7ZT1lfHxiLmNyZWF0ZUVsZW1lbnQoYVtkXXx8ImRpdiIpO3ZhciBmPShkPSJvbiIrZClpbiBlO2Z8fChlLnNldEF0dHJpYnV0ZXx8KGU9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKSksZS5zZXRBdHRyaWJ1dGUmJmUucmVtb3ZlQXR0cmlidXRlJiYoZS5zZXRBdHRyaWJ1dGUoZCwiIiksZj1DKGVbZF0sImZ1bmN0aW9uIiksQyhlW2RdLGMpfHwoZVtkXT1jKSxlLnJlbW92ZUF0dHJpYnV0ZShkKSkpLGU9bnVsbDtyZXR1cm4gZn12YXIgYT17c2VsZWN0OiJpbnB1dCIsY2hhbmdlOiJpbnB1dCIsc3VibWl0OiJmb3JtIixyZXNldDoiZm9ybSIsZXJyb3I6ImltZyIsbG9hZDoiaW1nIixhYm9ydDoiaW1nIn07cmV0dXJuIGR9KCkseT0oe30pLmhhc093blByb3BlcnR5LHo7Qyh5LGMpfHxDKHkuY2FsbCxjKT96PWZ1bmN0aW9uKGEsYil7cmV0dXJuIGIgaW4gYSYmQyhhLmNvbnN0cnVjdG9yLnByb3RvdHlwZVtiXSxjKX06ej1mdW5jdGlvbihhLGIpe3JldHVybiB5LmNhbGwoYSxiKX0sci5mbGV4Ym94PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYyhhLGIsYyxkKXthLnN0eWxlLmNzc1RleHQ9by5qb2luKGIrIjoiK2MrIjsiKSsoZHx8IiIpfWZ1bmN0aW9uIGEoYSxiLGMsZCl7Yis9IjoiLGEuc3R5bGUuY3NzVGV4dD0oYitvLmpvaW4oYysiOyIrYikpLnNsaWNlKDAsLWIubGVuZ3RoKSsoZHx8IiIpfXZhciBkPWIuY3JlYXRlRWxlbWVudCgiZGl2IiksZT1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2EoZCwiZGlzcGxheSIsImJveCIsIndpZHRoOjQycHg7cGFkZGluZzowOyIpLGMoZSwiYm94LWZsZXgiLCIxIiwid2lkdGg6MTBweDsiKSxkLmFwcGVuZENoaWxkKGUpLGcuYXBwZW5kQ2hpbGQoZCk7dmFyIGY9ZS5vZmZzZXRXaWR0aD09PTQyO2QucmVtb3ZlQ2hpbGQoZSksZy5yZW1vdmVDaGlsZChkKTtyZXR1cm4gZn0sci5jYW52YXM9ZnVuY3Rpb24oKXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO3JldHVybiBhLmdldENvbnRleHQmJmEuZ2V0Q29udGV4dCgiMmQiKX0sci5jYW52YXN0ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGUuY2FudmFzJiZDKGIuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKS5maWxsVGV4dCwiZnVuY3Rpb24iKX0sci53ZWJnbD1mdW5jdGlvbigpe3JldHVybiEhYS5XZWJHTFJlbmRlcmluZ0NvbnRleHR9LHIudG91Y2g9ZnVuY3Rpb24oKXtyZXR1cm4ib250b3VjaHN0YXJ0ImluIGF8fHcoIkBtZWRpYSAoIitvLmpvaW4oInRvdWNoLWVuYWJsZWQpLCgiKSsibW9kZXJuaXpyKSIpfSxyLmdlb2xvY2F0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuISFuYXZpZ2F0b3IuZ2VvbG9jYXRpb259LHIucG9zdG1lc3NhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4hIWEucG9zdE1lc3NhZ2V9LHIud2Vic3FsZGF0YWJhc2U9ZnVuY3Rpb24oKXt2YXIgYj0hIWEub3BlbkRhdGFiYXNlO3JldHVybiBifSxyLmluZGV4ZWREQj1mdW5jdGlvbigpe2Zvcih2YXIgYj0tMSxjPXAubGVuZ3RoOysrYjxjOyl7dmFyIGQ9cFtiXS50b0xvd2VyQ2FzZSgpO2lmKGFbZCsiX2luZGV4ZWREQiJdfHxhW2QrIkluZGV4ZWREQiJdKXJldHVybiEwfXJldHVybiExfSxyLmhhc2hjaGFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4geCgiaGFzaGNoYW5nZSIsYSkmJihiLmRvY3VtZW50TW9kZT09PWN8fGIuZG9jdW1lbnRNb2RlPjcpfSxyLmhpc3Rvcnk9ZnVuY3Rpb24oKXtyZXR1cm4gISEoYS5oaXN0b3J5JiZoaXN0b3J5LnB1c2hTdGF0ZSl9LHIuZHJhZ2FuZGRyb3A9ZnVuY3Rpb24oKXtyZXR1cm4geCgiZHJhZ3N0YXJ0IikmJngoImRyb3AiKX0sci53ZWJzb2NrZXRzPWZ1bmN0aW9uKCl7cmV0dXJuIldlYlNvY2tldCJpbiBhfSxyLnJnYmE9ZnVuY3Rpb24oKXtBKCJiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUwLDI1NSwxNTAsLjUpIik7cmV0dXJuIEQoay5iYWNrZ3JvdW5kQ29sb3IsInJnYmEiKX0sci5oc2xhPWZ1bmN0aW9uKCl7QSgiYmFja2dyb3VuZC1jb2xvcjpoc2xhKDEyMCw0MCUsMTAwJSwuNSkiKTtyZXR1cm4gRChrLmJhY2tncm91bmRDb2xvciwicmdiYSIpfHxEKGsuYmFja2dyb3VuZENvbG9yLCJoc2xhIil9LHIubXVsdGlwbGViZ3M9ZnVuY3Rpb24oKXtBKCJiYWNrZ3JvdW5kOnVybCgvLzopLHVybCgvLzopLHJlZCB1cmwoLy86KSIpO3JldHVybihuZXcgUmVnRXhwKCIodXJsXFxzKlxcKC4qPyl7M30iKSkudGVzdChrLmJhY2tncm91bmQpfSxyLmJhY2tncm91bmRzaXplPWZ1bmN0aW9uKCl7cmV0dXJuIEYoImJhY2tncm91bmRTaXplIil9LHIuYm9yZGVyaW1hZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gRigiYm9yZGVySW1hZ2UiKX0sci5ib3JkZXJyYWRpdXM9ZnVuY3Rpb24oKXtyZXR1cm4gRigiYm9yZGVyUmFkaXVzIiwiIixmdW5jdGlvbihhKXtyZXR1cm4gRChhLCJvcmRlclJhZGl1cyIpfSl9LHIuYm94c2hhZG93PWZ1bmN0aW9uKCl7cmV0dXJuIEYoImJveFNoYWRvdyIpfSxyLnRleHRzaGFkb3c9ZnVuY3Rpb24oKXtyZXR1cm4gYi5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZS50ZXh0U2hhZG93PT09IiJ9LHIub3BhY2l0eT1mdW5jdGlvbigpe0IoIm9wYWNpdHk6LjU1Iik7cmV0dXJuL14wLjU1JC8udGVzdChrLm9wYWNpdHkpfSxyLmNzc2FuaW1hdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gRigiYW5pbWF0aW9uTmFtZSIpfSxyLmNzc2NvbHVtbnM9ZnVuY3Rpb24oKXtyZXR1cm4gRigiY29sdW1uQ291bnQiKX0sci5jc3NncmFkaWVudHM9ZnVuY3Rpb24oKXt2YXIgYT0iYmFja2dyb3VuZC1pbWFnZToiLGI9ImdyYWRpZW50KGxpbmVhcixsZWZ0IHRvcCxyaWdodCBib3R0b20sZnJvbSgjOWY5KSx0byh3aGl0ZSkpOyIsYz0ibGluZWFyLWdyYWRpZW50KGxlZnQgdG9wLCM5ZjksIHdoaXRlKTsiO0EoKGErby5qb2luKGIrYSkrby5qb2luKGMrYSkpLnNsaWNlKDAsLWEubGVuZ3RoKSk7cmV0dXJuIEQoay5iYWNrZ3JvdW5kSW1hZ2UsImdyYWRpZW50Iil9LHIuY3NzcmVmbGVjdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gRigiYm94UmVmbGVjdCIpfSxyLmNzc3RyYW5zZm9ybXM9ZnVuY3Rpb24oKXtyZXR1cm4hIUUoWyJ0cmFuc2Zvcm1Qcm9wZXJ0eSIsIldlYmtpdFRyYW5zZm9ybSIsIk1velRyYW5zZm9ybSIsIk9UcmFuc2Zvcm0iLCJtc1RyYW5zZm9ybSJdKX0sci5jc3N0cmFuc2Zvcm1zM2Q9ZnVuY3Rpb24oKXt2YXIgYT0hIUUoWyJwZXJzcGVjdGl2ZVByb3BlcnR5IiwiV2Via2l0UGVyc3BlY3RpdmUiLCJNb3pQZXJzcGVjdGl2ZSIsIk9QZXJzcGVjdGl2ZSIsIm1zUGVyc3BlY3RpdmUiXSk7YSYmIndlYmtpdFBlcnNwZWN0aXZlImluIGcuc3R5bGUmJihhPXcoIkBtZWRpYSAoIitvLmpvaW4oInRyYW5zZm9ybS0zZCksKCIpKyJtb2Rlcm5penIpIikpO3JldHVybiBhfSxyLmNzc3RyYW5zaXRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIEYoInRyYW5zaXRpb25Qcm9wZXJ0eSIpfSxyLmZvbnRmYWNlPWZ1bmN0aW9uKCl7dmFyIGEsYyxkPWh8fGcsZT1iLmNyZWF0ZUVsZW1lbnQoInN0eWxlIiksZj1iLmltcGxlbWVudGF0aW9ufHx7aGFzRmVhdHVyZTpmdW5jdGlvbigpe3JldHVybiExfX07ZS50eXBlPSJ0ZXh0L2NzcyIsZC5pbnNlcnRCZWZvcmUoZSxkLmZpcnN0Q2hpbGQpLGE9ZS5zaGVldHx8ZS5zdHlsZVNoZWV0O3ZhciBpPWYuaGFzRmVhdHVyZSgiQ1NTMiIsIiIpP2Z1bmN0aW9uKGIpe2lmKCFhfHwhYilyZXR1cm4hMTt2YXIgYz0hMTt0cnl7YS5pbnNlcnRSdWxlKGIsMCksYz0vc3JjL2kudGVzdChhLmNzc1J1bGVzWzBdLmNzc1RleHQpLGEuZGVsZXRlUnVsZShhLmNzc1J1bGVzLmxlbmd0aC0xKX1jYXRjaChkKXt9cmV0dXJuIGN9OmZ1bmN0aW9uKGIpe2lmKCFhfHwhYilyZXR1cm4hMTthLmNzc1RleHQ9YjtyZXR1cm4gYS5jc3NUZXh0Lmxlbmd0aCE9PTAmJi9zcmMvaS50ZXN0KGEuY3NzVGV4dCkmJmEuY3NzVGV4dC5yZXBsYWNlKC9ccit8XG4rL2csIiIpLmluZGV4T2YoYi5zcGxpdCgiICIpWzBdKT09PTB9O2M9aSgnQGZvbnQtZmFjZSB7IGZvbnQtZmFtaWx5OiAiZm9udCI7IHNyYzogdXJsKGRhdGE6LCk7IH0nKSxkLnJlbW92ZUNoaWxkKGUpO3JldHVybiBjfSxyLnZpZGVvPWZ1bmN0aW9uKCl7dmFyIGE9Yi5jcmVhdGVFbGVtZW50KCJ2aWRlbyIpLGM9ISFhLmNhblBsYXlUeXBlO2lmKGMpe2M9bmV3IEJvb2xlYW4oYyksYy5vZ2c9YS5jYW5QbGF5VHlwZSgndmlkZW8vb2dnOyBjb2RlY3M9InRoZW9yYSInKTt2YXIgZD0ndmlkZW8vbXA0OyBjb2RlY3M9ImF2YzEuNDJFMDFFJztjLmgyNjQ9YS5jYW5QbGF5VHlwZShkKyciJyl8fGEuY2FuUGxheVR5cGUoZCsnLCBtcDRhLjQwLjIiJyksYy53ZWJtPWEuY2FuUGxheVR5cGUoJ3ZpZGVvL3dlYm07IGNvZGVjcz0idnA4LCB2b3JiaXMiJyl9cmV0dXJuIGN9LHIuYXVkaW89ZnVuY3Rpb24oKXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoImF1ZGlvIiksYz0hIWEuY2FuUGxheVR5cGU7YyYmKGM9bmV3IEJvb2xlYW4oYyksYy5vZ2c9YS5jYW5QbGF5VHlwZSgnYXVkaW8vb2dnOyBjb2RlY3M9InZvcmJpcyInKSxjLm1wMz1hLmNhblBsYXlUeXBlKCJhdWRpby9tcGVnOyIpLGMud2F2PWEuY2FuUGxheVR5cGUoJ2F1ZGlvL3dhdjsgY29kZWNzPSIxIicpLGMubTRhPWEuY2FuUGxheVR5cGUoImF1ZGlvL3gtbTRhOyIpfHxhLmNhblBsYXlUeXBlKCJhdWRpby9hYWM7IikpO3JldHVybiBjfSxyLmxvY2Fsc3RvcmFnZT1mdW5jdGlvbigpe3RyeXtyZXR1cm4hIWxvY2FsU3RvcmFnZS5nZXRJdGVtfWNhdGNoKGEpe3JldHVybiExfX0sci5zZXNzaW9uc3RvcmFnZT1mdW5jdGlvbigpe3RyeXtyZXR1cm4hIXNlc3Npb25TdG9yYWdlLmdldEl0ZW19Y2F0Y2goYSl7cmV0dXJuITF9fSxyLndlYldvcmtlcnM9ZnVuY3Rpb24oKXtyZXR1cm4hIWEuV29ya2VyfSxyLmFwcGxpY2F0aW9uY2FjaGU9ZnVuY3Rpb24oKXtyZXR1cm4hIWEuYXBwbGljYXRpb25DYWNoZX0sci5zdmc9ZnVuY3Rpb24oKXtyZXR1cm4hIWIuY3JlYXRlRWxlbWVudE5TJiYhIWIuY3JlYXRlRWxlbWVudE5TKHEuc3ZnLCJzdmciKS5jcmVhdGVTVkdSZWN0fSxyLmlubGluZXN2Zz1mdW5jdGlvbigpe3ZhciBhPWIuY3JlYXRlRWxlbWVudCgiZGl2Iik7YS5pbm5lckhUTUw9IjxzdmcvPiI7cmV0dXJuKGEuZmlyc3RDaGlsZCYmYS5maXJzdENoaWxkLm5hbWVzcGFjZVVSSSk9PXEuc3ZnfSxyLnNtaWw9ZnVuY3Rpb24oKXtyZXR1cm4hIWIuY3JlYXRlRWxlbWVudE5TJiYvU1ZHLy50ZXN0KG4uY2FsbChiLmNyZWF0ZUVsZW1lbnROUyhxLnN2ZywiYW5pbWF0ZSIpKSl9LHIuc3ZnY2xpcHBhdGhzPWZ1bmN0aW9uKCl7cmV0dXJuISFiLmNyZWF0ZUVsZW1lbnROUyYmL1NWRy8udGVzdChuLmNhbGwoYi5jcmVhdGVFbGVtZW50TlMocS5zdmcsImNsaXBQYXRoIikpKX07Zm9yKHZhciBIIGluIHIpeihyLEgpJiYodj1ILnRvTG93ZXJDYXNlKCksZVt2XT1yW0hdKCksdS5wdXNoKChlW3ZdPyIiOiJuby0iKSt2KSk7ZS5pbnB1dHx8RygpLGUuY3Jvc3N3aW5kb3dtZXNzYWdpbmc9ZS5wb3N0bWVzc2FnZSxlLmhpc3RvcnltYW5hZ2VtZW50PWUuaGlzdG9yeSxlLmFkZFRlc3Q9ZnVuY3Rpb24oYSxiKXthPWEudG9Mb3dlckNhc2UoKTtpZighZVthXSl7Yj0hIWIoKSxnLmNsYXNzTmFtZSs9IiAiKyhiPyIiOiJuby0iKSthLGVbYV09YjtyZXR1cm4gZX19LEEoIiIpLGo9bD1udWxsLGYmJmEuYXR0YWNoRXZlbnQmJmZ1bmN0aW9uKCl7dmFyIGE9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmlubmVySFRNTD0iPGVsZW0+PC9lbGVtPiI7cmV0dXJuIGEuY2hpbGROb2Rlcy5sZW5ndGghPT0xfSgpJiZmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIHAoYSxiKXt2YXIgYz0tMSxkPWEubGVuZ3RoLGUsZj1bXTt3aGlsZSgrK2M8ZCllPWFbY10sKGI9ZS5tZWRpYXx8YikhPSJzY3JlZW4iJiZmLnB1c2gocChlLmltcG9ydHMsYiksZS5jc3NUZXh0KTtyZXR1cm4gZi5qb2luKCIiKX1mdW5jdGlvbiBvKGEpe3ZhciBiPS0xO3doaWxlKCsrYjxlKWEuY3JlYXRlRWxlbWVudChkW2JdKX12YXIgYz0iYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGNhbnZhc3xkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2aWRlbyIsZD1jLnNwbGl0KCJ8IiksZT1kLmxlbmd0aCxmPW5ldyBSZWdFeHAoIihefFxccykoIitjKyIpIiwiZ2kiKSxnPW5ldyBSZWdFeHAoIjwoLyopKCIrYysiKSIsImdpIiksaD1uZXcgUmVnRXhwKCIoXnxbXlxcbl0qP1xccykoIitjKyIpKFteXFxuXSopKHtbXFxuXFx3XFxXXSo/fSkiLCJnaSIpLGk9Yi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaj1iLmRvY3VtZW50RWxlbWVudCxrPWouZmlyc3RDaGlsZCxsPWIuY3JlYXRlRWxlbWVudCgiYm9keSIpLG09Yi5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLG47byhiKSxvKGkpLGsuaW5zZXJ0QmVmb3JlKG0say5maXJzdENoaWxkKSxtLm1lZGlhPSJwcmludCIsYS5hdHRhY2hFdmVudCgib25iZWZvcmVwcmludCIsZnVuY3Rpb24oKXt2YXIgYT0tMSxjPXAoYi5zdHlsZVNoZWV0cywiYWxsIiksaz1bXSxvO249bnx8Yi5ib2R5O3doaWxlKChvPWguZXhlYyhjKSkhPW51bGwpay5wdXNoKChvWzFdK29bMl0rb1szXSkucmVwbGFjZShmLCIkMS5pZXBwXyQyIikrb1s0XSk7bS5zdHlsZVNoZWV0LmNzc1RleHQ9ay5qb2luKCJcbiIpO3doaWxlKCsrYTxlKXt2YXIgcT1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGRbYV0pLHI9cS5sZW5ndGgscz0tMTt3aGlsZSgrK3M8cilxW3NdLmNsYXNzTmFtZS5pbmRleE9mKCJpZXBwXyIpPDAmJihxW3NdLmNsYXNzTmFtZSs9IiBpZXBwXyIrZFthXSl9aS5hcHBlbmRDaGlsZChuKSxqLmFwcGVuZENoaWxkKGwpLGwuY2xhc3NOYW1lPW4uY2xhc3NOYW1lLGwuaW5uZXJIVE1MPW4uaW5uZXJIVE1MLnJlcGxhY2UoZywiPCQxZm9udCIpfSksYS5hdHRhY2hFdmVudCgib25hZnRlcnByaW50IixmdW5jdGlvbigpe2wuaW5uZXJIVE1MPSIiLGoucmVtb3ZlQ2hpbGQobCksai5hcHBlbmRDaGlsZChuKSxtLnN0eWxlU2hlZXQuY3NzVGV4dD0iIn0pfShhLGIpLGUuX2VuYWJsZUhUTUw1PWYsZS5fdmVyc2lvbj1kLGcuY2xhc3NOYW1lPWcuY2xhc3NOYW1lLnJlcGxhY2UoL1xibm8tanNcYi8sIiIpKyIganMgIit1LmpvaW4oIiAiKTtyZXR1cm4gZX0odGhpcyx0aGlzLmRvY3VtZW50KQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctYXBvbGxvLmpzIGIvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1hcG9sbG8uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA5OGJhZgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctYXBvbGxvLmpzCkBAIC0wLDAgKzEsMiBAQAorUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbWyJjb20iLC9eI1teXG5ccl0qLyxudWxsLCIjIl0sWyJwbG4iLC9eW1x0XG5cciBceGEwXSsvLG51bGwsIlx0XG5cciDCXHhhMCJdLFsic3RyIiwvXiIoPzpbXiJcXF18XFxbXFNcc10pKig/OiJ8JCkvLG51bGwsJyInXV0sW1sia3dkIiwvXig/OkFEU3xBRHxBVUd8QlpGfEJaTUZ8Q0FFfENBRnxDQXxDQ1N8Q09NfENTfERBU3xEQ0F8RENPTXxEQ1N8RERPVUJMfERJTXxET1VCTEV8RFRDQnxEVENGfERWfERYQ0h8RURSVVBUfEVYVEVORHxJTkNSfElOREVYfE5EWHxJTkhJTlR8TFhDSHxNQVNLfE1TS3xNUHxNU1V8Tk9PUHxPVlNLfFFYQ0h8UkFORHxSRUFEfFJFTElOVHxSRVNVTUV8UkVUVVJOfFJPUnxSWE9SfFNRVUFSRXxTVXxUQ1J8VENBQXxPVlNLfFRDRnxUQ3xUU3xXQU5EfFdPUnxXUklURXxYQ0h8WExRfFhYQUxRfFpMfFpRfEFERHxBRFp8U1VCfFNVWnxNUFl8TVBSfE1QWnxEVlB8Q09NfEFCU3xDTEF8Q0xafExEUXxTVE98U1RRfEFMU3xMTFN8TFJTfFRSQXxUU1F8VE1JfFRPVnxBWFR8VElYfERMWXxJTlB8T1VUKVxzLywKK251bGxdLFsidHlwIiwvXig/Oi0/R0VOQURSfD1NSU5VU3wyQkNBRFJ8Vk58Qk9GfE1NfC0/MkNBRFJ8LT9bMS02XUROQURSfEFEUkVTfEJCQ09OfFtFU10/QkFOSz0/fEJMT0NLfEJOS1NVTXxFP0NBRFJ8Q09VTlRcKj98Mj9ERUNcKj98LT9ETkNIQU58LT9ETlBUUnxFUVVBTFN8RVJBU0V8TUVNT1JZfDI/T0NUfFJFTUFEUnxTRVRMT0N8U1VCUk98T1JHfEJTU3xCRVN8U1lOfEVRVXxERUZJTkV8RU5EKVxzLyxudWxsXSxbImxpdCIsL14nKD86LSooPzpcd3xcXFshLX5dKSg/Oltcdy1dKnxcXFshLX5dKVshPT9dPyk/L10sWyJwbG4iLC9eLSooPzpbIS16XXxcXFshLX5dKSg/Oltcdy1dKnxcXFshLX5dKVshPT9dPy9dLFsicHVuIiwvXlteXHdcdFxuXHIgIictKTtcXFx4YTBdKy9dXSksWyJhcG9sbG8iLCJhZ2MiLCJhZWEiXSk7CmRpZmYgLS1naXQgYS9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLWNsai5qcyBiL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctY2xqLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MmEyMjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLWNsai5qcwpAQCAtMCwwICsxLDE4IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLgorCisgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisqLwordmFyIGE9bnVsbDsKK1BSLnJlZ2lzdGVyTGFuZ0hhbmRsZXIoUFIuY3JlYXRlU2ltcGxlTGV4ZXIoW1sib3BuIiwvXlsoW3tdKy8sYSwiKFt7Il0sWyJjbG8iLC9eWylcXX1dKy8sYSwiKV19Il0sWyJjb20iLC9eO1teXG5ccl0qLyxhLCI7Il0sWyJwbG4iLC9eW1x0XG5cciBceGEwXSsvLGEsIlx0XG5cciBceGEwIl0sWyJzdHIiLC9eIig/OlteIlxcXXxcXFtcU1xzXSkqKD86InwkKS8sYSwnIiddXSxbWyJrd2QiLC9eKD86ZGVmfGlmfGRvfGxldHxxdW90ZXx2YXJ8Zm58bG9vcHxyZWN1cnx0aHJvd3x0cnl8bW9uaXRvci1lbnRlcnxtb25pdG9yLWV4aXR8ZGVmbWFjcm98ZGVmbnxkZWZuLXxtYWNyb2V4cGFuZHxtYWNyb2V4cGFuZC0xfGZvcnxkb3NlcXxkb3N5bmN8ZG90aW1lc3xhbmR8b3J8d2hlbnxub3R8YXNzZXJ0fGRvdG98cHJveHl8ZGVmc3RydWN0fGZpcnN0fHJlc3R8Y29uc3xkZWZwcm90b2NvbHxkZWZ0eXBlfGRlZnJlY29yZHxyZWlmeXxkZWZtdWx0aXxkZWZtZXRob2R8bWV0YXx3aXRoLW1ldGF8bnN8aW4tbnN8Y3JlYXRlLW5zfGltcG9ydHxpbnRlcm58cmVmZXJ8YWxpYXN8bmFtZXNwYWNlfHJlc29sdmV8cmVmfGRlcmVmfHJlZnNldHxuZXd8c2V0IXxtZW1mbnx0by1hcnJheXxpbnRvLWFycmF5fGFzZXR8Z2VuLWNsYXNzfHJlZHVjZXxtYXB8ZmlsdGVyfGZpbmR8bmlsP3xlbXB0eT98aGFzaC1tYXB8aGFzaC1zZXR8dmVjfHZlY3RvcnxzZXF8ZmxhdHRlbnxyZXZlcnNlfGFzc29jfGRpc3NvY3xsaXN0fGxpc3Q/fGRpc2p8Z2V0fHVuaW9ufGRpZmZlcmVuY2V8aW50ZXJzZWN0aW9ufGV4dGVuZHxleHRlbmQtdHlwZXxleHRlbmQtcHJvdG9jb2x8cHJuKVxiLyxhXSwKK1sidHlwIiwvXjpbXGRBLVphLXotXSsvXV0pLFsiY2xqIl0pOwpkaWZmIC0tZ2l0IGEvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1jc3MuanMgYi9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLWNzcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDFlMWY1Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1jc3MuanMKQEAgLTAsMCArMSwyIEBACitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbInBsbiIsL15bXHRcblxmXHIgXSsvLG51bGwsIiBcdFxyXG4MIl1dLFtbInN0ciIsL14iKD86W15cblxmXHIiXFxdfFxcKD86XHJcbj98XG58XGYpfFxcW1xTXHNdKSoiLyxudWxsXSxbInN0ciIsL14nKD86W15cblxmXHInXFxdfFxcKD86XHJcbj98XG58XGYpfFxcW1xTXHNdKSonLyxudWxsXSxbImxhbmctY3NzLXN0ciIsL151cmxcKChbXiInKV0qKVwpL2ldLFsia3dkIiwvXig/OnVybHxyZ2J8IWltcG9ydGFudHxAaW1wb3J0fEBwYWdlfEBtZWRpYXxAY2hhcnNldHxpbmhlcml0KSg/PVteXHctXXwkKS9pLG51bGxdLFsibGFuZy1jc3Mta3ciLC9eKC0/KD86W19hLXpdfFxcW1xkYS1mXSsgPykoPzpbXHctXXxcXFxcW1xkYS1mXSsgPykqKVxzKjovaV0sWyJjb20iLC9eXC9cKlteKl0qXCorKD86W14qL11bXipdKlwqKykqXC8vXSxbImNvbSIsCisvXig/OjxcIS0tfC0tXD4pL10sWyJsaXQiLC9eKD86XGQrfFxkKlwuXGQrKSg/OiV8W2Etel0rKT8vaV0sWyJsaXQiLC9eI1tcZGEtZl17Myw2fS9pXSxbInBsbiIsL14tPyg/OltfYS16XXxcXFtcZGEtZl0rID8pKD86W1x3LV18XFxcXFtcZGEtZl0rID8pKi9pXSxbInB1biIsL15bXlxzXHciJ10rL11dKSxbImNzcyJdKTtQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtdLFtbImt3ZCIsL14tPyg/OltfYS16XXxcXFtcZGEtZl0rID8pKD86W1x3LV18XFxcXFtcZGEtZl0rID8pKi9pXV0pLFsiY3NzLWt3Il0pO1BSLnJlZ2lzdGVyTGFuZ0hhbmRsZXIoUFIuY3JlYXRlU2ltcGxlTGV4ZXIoW10sW1sic3RyIiwvXlteIicpXSsvXV0pLFsiY3NzLXN0ciJdKTsKZGlmZiAtLWdpdCBhL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctZ28uanMgYi9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLWdvLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjMThkYzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLWdvLmpzCkBAIC0wLDAgKzEgQEAKK1BSLnJlZ2lzdGVyTGFuZ0hhbmRsZXIoUFIuY3JlYXRlU2ltcGxlTGV4ZXIoW1sicGxuIiwvXltcdFxuXHIgXHhhMF0rLyxudWxsLCJcdFxuXHIgwlx4YTAiXSxbInBsbiIsL14oPzoiKD86W14iXFxdfFxcW1xTXHNdKSooPzoifCQpfCcoPzpbXidcXF18XFxbXFNcc10pKyg/Oid8JCl8YFteYF0qKD86YHwkKSkvLG51bGwsIlwiJyJdXSxbWyJjb20iLC9eKD86XC9cL1teXG5ccl0qfFwvXCpbXFNcc10qP1wqXC8pL10sWyJwbG4iLC9eKD86W14iJy9gXXxcLyg/IVsqL10pKSsvXV0pLFsiZ28iXSk7CmRpZmYgLS1naXQgYS9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLWhzLmpzIGIvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1ocy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDc3YjA4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1ocy5qcwpAQCAtMCwwICsxLDIgQEAKK1BSLnJlZ2lzdGVyTGFuZ0hhbmRsZXIoUFIuY3JlYXRlU2ltcGxlTGV4ZXIoW1sicGxuIiwvXltcdC1cciBdKy8sbnVsbCwiXHRcbgsMXHIgIl0sWyJzdHIiLC9eIig/OlteXG5cZlxyIlxcXXxcXFtcU1xzXSkqKD86InwkKS8sbnVsbCwnIiddLFsic3RyIiwvXicoPzpbXlxuXGZccidcXF18XFxbXiZdKSc/LyxudWxsLCInIl0sWyJsaXQiLC9eKD86MG9bMC03XSt8MHhbXGRhLWZdK3xcZCsoPzpcLlxkKyk/KD86ZVsrLV0/XGQrKT8pL2ksbnVsbCwiMDEyMzQ1Njc4OSJdXSxbWyJjb20iLC9eKD86LS0rW15cblxmXHJdKnx7LSg/OlteLV18LStbXn0tXSkqLX0pL10sWyJrd2QiLC9eKD86Y2FzZXxjbGFzc3xkYXRhfGRlZmF1bHR8ZGVyaXZpbmd8ZG98ZWxzZXxpZnxpbXBvcnR8aW58aW5maXh8aW5maXhsfGluZml4cnxpbnN0YW5jZXxsZXR8bW9kdWxlfG5ld3R5cGV8b2Z8dGhlbnx0eXBlfHdoZXJlfF8pKD89W15cZCdBLVphLXpdfCQpLywKK251bGxdLFsicGxuIiwvXig/OltBLVpdW1x3J10qXC4pKltBLVphLXpdW1x3J10qL10sWyJwdW4iLC9eW15cZFx0LVxyICInQS1aYS16XSsvXV0pLFsiaHMiXSk7CmRpZmYgLS1naXQgYS9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLWxpc3AuanMgYi9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLWxpc3AuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJhMzBlOAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctbGlzcC5qcwpAQCAtMCwwICsxLDMgQEAKK3ZhciBhPW51bGw7CitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbIm9wbiIsL15cKCsvLGEsIigiXSxbImNsbyIsL15cKSsvLGEsIikiXSxbImNvbSIsL147W15cblxyXSovLGEsIjsiXSxbInBsbiIsL15bXHRcblxyIFx4YTBdKy8sYSwiXHRcblxyIFx4YTAiXSxbInN0ciIsL14iKD86W14iXFxdfFxcW1xTXHNdKSooPzoifCQpLyxhLCciJ11dLFtbImt3ZCIsL14oPzpibG9ja3xjW2FkXStyfGNhdGNofGNvbltkc118ZGVmKD86aW5lfHVuKXxkb3xlcXxlcWx8ZXF1YWx8ZXF1YWxwfGV2YWwtd2hlbnxmbGV0fGZvcm1hdHxnb3xpZnxsYWJlbHN8bGFtYmRhfGxldHxsb2FkLXRpbWUtdmFsdWV8bG9jYWxseXxtYWNyb2xldHxtdWx0aXBsZS12YWx1ZS1jYWxsfG5pbHxwcm9nbnxwcm9ndnxxdW90ZXxyZXF1aXJlfHJldHVybi1mcm9tfHNldHF8c3ltYm9sLW1hY3JvbGV0fHR8dGFnYm9keXx0aGV8dGhyb3d8dW53aW5kKVxiLyxhXSwKK1sibGl0IiwvXlsrLV0/KD86WyMwXXhbXGRhLWZdK3xcZCtcL1xkK3woPzpcLlxkK3xcZCsoPzpcLlxkKik/KSg/OltkZV1bKy1dP1xkKyk/KS9pXSxbImxpdCIsL14nKD86LSooPzpcd3xcXFshLX5dKSg/Oltcdy1dKnxcXFshLX5dKVshPT9dPyk/L10sWyJwbG4iLC9eLSooPzpbX2Etel18XFxbIS1+XSkoPzpbXHctXSp8XFxbIS1+XSlbIT0/XT8vaV0sWyJwdW4iLC9eW15cd1x0XG5cciAiJy0pO1xcXHhhMF0rL11dKSxbImNsIiwiZWwiLCJsaXNwIiwic2NtIl0pOwpkaWZmIC0tZ2l0IGEvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1sdWEuanMgYi9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLWx1YS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODNhM2M0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1sdWEuanMKQEAgLTAsMCArMSwyIEBACitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbInBsbiIsL15bXHRcblxyIFx4YTBdKy8sbnVsbCwiXHRcblxyIMJceGEwIl0sWyJzdHIiLC9eKD86Iig/OlteIlxcXXxcXFtcU1xzXSkqKD86InwkKXwnKD86W14nXFxdfFxcW1xTXHNdKSooPzonfCQpKS8sbnVsbCwiXCInIl1dLFtbImNvbSIsL14tLSg/OlxbKD0qKVxbW1xTXHNdKj8oPzpdXDFdfCQpfFteXG5ccl0qKS9dLFsic3RyIiwvXlxbKD0qKVxbW1xTXHNdKj8oPzpdXDFdfCQpL10sWyJrd2QiLC9eKD86YW5kfGJyZWFrfGRvfGVsc2V8ZWxzZWlmfGVuZHxmYWxzZXxmb3J8ZnVuY3Rpb258aWZ8aW58bG9jYWx8bmlsfG5vdHxvcnxyZXBlYXR8cmV0dXJufHRoZW58dHJ1ZXx1bnRpbHx3aGlsZSlcYi8sbnVsbF0sWyJsaXQiLC9eWystXT8oPzoweFtcZGEtZl0rfCg/OlwuXGQrfFxkKyg/OlwuXGQqKT8pKD86ZVsrLV0/XGQrKT8pL2ldLAorWyJwbG4iLC9eW19hLXpdXHcqL2ldLFsicHVuIiwvXlteXHdcdFxuXHIgXHhhMF1bXlx3XHRcblxyICInKz1ceGEwLV0qL11dKSxbImx1YSJdKTsKZGlmZiAtLWdpdCBhL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctbWwuanMgYi9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLW1sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkZjAyZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLW1sLmpzCkBAIC0wLDAgKzEsMiBAQAorUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbWyJwbG4iLC9eW1x0XG5cciBceGEwXSsvLG51bGwsIlx0XG5cciDCXHhhMCJdLFsiY29tIiwvXiMoPzppZltcdFxuXHIgXHhhMF0rKD86WyRfYS16XVtcdyddKnxgYFteXHRcblxyYF0qKD86YGB8JCkpfGVsc2V8ZW5kaWZ8bGlnaHQpL2ksbnVsbCwiIyJdLFsic3RyIiwvXig/OiIoPzpbXiJcXF18XFxbXFNcc10pKig/OiJ8JCl8Jyg/OlteJ1xcXXxcXFtcU1xzXSkoPzonfCQpKS8sbnVsbCwiXCInIl1dLFtbImNvbSIsL14oPzpcL1wvW15cblxyXSp8XChcKltcU1xzXSo/XCpcKSkvXSxbImt3ZCIsL14oPzphYnN0cmFjdHxhbmR8YXN8YXNzZXJ0fGJlZ2lufGNsYXNzfGRlZmF1bHR8ZGVsZWdhdGV8ZG98ZG9uZXxkb3duY2FzdHxkb3dudG98ZWxpZnxlbHNlfGVuZHxleGNlcHRpb258ZXh0ZXJufGZhbHNlfGZpbmFsbHl8Zm9yfGZ1bnxmdW5jdGlvbnxpZnxpbnxpbmhlcml0fGlubGluZXxpbnRlcmZhY2V8aW50ZXJuYWx8bGF6eXxsZXR8bWF0Y2h8bWVtYmVyfG1vZHVsZXxtdXRhYmxlfG5hbWVzcGFjZXxuZXd8bnVsbHxvZnxvcGVufG9yfG92ZXJyaWRlfHByaXZhdGV8cHVibGljfHJlY3xyZXR1cm58c3RhdGljfHN0cnVjdHx0aGVufHRvfHRydWV8dHJ5fHR5cGV8dXBjYXN0fHVzZXx2YWx8dm9pZHx3aGVufHdoaWxlfHdpdGh8eWllbGR8YXNyfGxhbmR8bG9yfGxzbHxsc3J8bHhvcnxtb2R8c2lnfGF0b21pY3xicmVha3xjaGVja2VkfGNvbXBvbmVudHxjb25zdHxjb25zdHJhaW50fGNvbnN0cnVjdG9yfGNvbnRpbnVlfGVhZ2VyfGV2ZW50fGV4dGVybmFsfGZpeGVkfGZ1bmN0b3J8Z2xvYmFsfGluY2x1ZGV8bWV0aG9kfG1peGlufG9iamVjdHxwYXJhbGxlbHxwcm9jZXNzfHByb3RlY3RlZHxwdXJlfHNlYWxlZHx0cmFpdHx2aXJ0dWFsfHZvbGF0aWxlKVxiL10sCitbImxpdCIsL15bKy1dPyg/OjB4W1xkYS1mXSt8KD86XC5cZCt8XGQrKD86XC5cZCopPykoPzplWystXT9cZCspPykvaV0sWyJwbG4iLC9eKD86W19hLXpdW1x3J10qWyEjP10/fGBgW15cdFxuXHJgXSooPzpgYHwkKSkvaV0sWyJwdW4iLC9eW15cd1x0XG5cciAiJ1x4YTBdKy9dXSksWyJmcyIsIm1sIl0pOwpkaWZmIC0tZ2l0IGEvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1uLmpzIGIvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMmU4NWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLW4uanMKQEAgLTAsMCArMSw0IEBACit2YXIgYT1udWxsOworUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbWyJzdHIiLC9eKD86Jyg/OlteXG5ccidcXF18XFwuKSonfCIoPzpbXlxuXHIiXFxdfFxcLikqKD86InwkKSkvLGEsJyInXSxbImNvbSIsL14jKD86KD86ZGVmaW5lfGVsaWZ8ZWxzZXxlbmRpZnxlcnJvcnxpZmRlZnxpbmNsdWRlfGlmbmRlZnxsaW5lfHByYWdtYXx1bmRlZnx3YXJuaW5nKVxifFteXG5ccl0qKS8sYSwiIyJdLFsicGxuIiwvXlxzKy8sYSwiIFxyXG5cdFx4YTAiXV0sW1sic3RyIiwvXkAiKD86W14iXXwiIikqKD86InwkKS8sYV0sWyJzdHIiLC9ePCNbXiM+XSooPzojPnwkKS8sYV0sWyJzdHIiLC9ePCg/Oig/Oig/OlwuXC5cLykqfFwvPykoPzpbXHctXSsoPzpcL1tcdy1dKykrKT9bXHctXStcLmh8W2Etel1cdyopPi8sYV0sWyJjb20iLC9eXC9cL1teXG5ccl0qLyxhXSxbImNvbSIsL15cL1wqW1xTXHNdKj8oPzpcKlwvfCQpLywKK2FdLFsia3dkIiwvXig/OmFic3RyYWN0fGFuZHxhc3xiYXNlfGNhdGNofGNsYXNzfGRlZnxkZWxlZ2F0ZXxlbnVtfGV2ZW50fGV4dGVybnxmYWxzZXxmaW5hbGx5fGZ1bnxpbXBsZW1lbnRzfGludGVyZmFjZXxpbnRlcm5hbHxpc3xtYWNyb3xtYXRjaHxtYXRjaGVzfG1vZHVsZXxtdXRhYmxlfG5hbWVzcGFjZXxuZXd8bnVsbHxvdXR8b3ZlcnJpZGV8cGFyYW1zfHBhcnRpYWx8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJlZnxzZWFsZWR8c3RhdGljfHN0cnVjdHxzeW50YXh8dGhpc3x0aHJvd3x0cnVlfHRyeXx0eXBlfHR5cGVvZnx1c2luZ3x2YXJpYW50fHZpcnR1YWx8dm9sYXRpbGV8d2hlbnx3aGVyZXx3aXRofGFzc2VydHxhc3NlcnQyfGFzeW5jfGJyZWFrfGNoZWNrZWR8Y29udGludWV8ZG98ZWxzZXxlbnN1cmVzfGZvcnxmb3JlYWNofGlmfGxhdGV8bG9ja3xuZXd8bm9sYXRlfG90aGVyd2lzZXxyZWdleHB8cmVwZWF0fHJlcXVpcmVzfHJldHVybnxzdXJyb3VuZHdpdGh8dW5jaGVja2VkfHVubGVzc3x1c2luZ3x3aGlsZXx5aWVsZClcYi8sCithXSxbInR5cCIsL14oPzphcnJheXxib29sfGJ5dGV8Y2hhcnxkZWNpbWFsfGRvdWJsZXxmbG9hdHxpbnR8bGlzdHxsb25nfG9iamVjdHxzYnl0ZXxzaG9ydHxzdHJpbmd8dWxvbmd8dWludHx1ZmxvYXR8dWxvbmd8dXNob3J0fHZvaWQpXGIvLGFdLFsibGl0IiwvXkBbJF9hLXpdW1x3JEBdKi9pLGFdLFsidHlwIiwvXkBbQS1aXStbYS16XVtcdyRAXSovLGFdLFsicGxuIiwvXic/WyRfYS16XVtcdyRAXSovaSxhXSxbImxpdCIsL14oPzoweFtcZGEtZl0rfCg/OlxkKD86X1xkKykqXGQqKD86XC5cZCopP3xcLlxkXCspKD86ZVsrLV0/XGQrKT8pW2Etel0qL2ksYSwiMDEyMzQ1Njc4OSJdLFsicHVuIiwvXi5bXlxzXHciLSQnLi9AYF0qLyxhXV0pLFsibiIsIm5lbWVybGUiXSk7CmRpZmYgLS1naXQgYS9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXByb3RvLmpzIGIvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1wcm90by5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDA2YWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1wcm90by5qcwpAQCAtMCwwICsxIEBACitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLnNvdXJjZURlY29yYXRvcih7a2V5d29yZHM6ImJ5dGVzLGRlZmF1bHQsZG91YmxlLGVudW0sZXh0ZW5kLGV4dGVuc2lvbnMsZmFsc2UsZ3JvdXAsaW1wb3J0LG1heCxtZXNzYWdlLG9wdGlvbixvcHRpb25hbCxwYWNrYWdlLHJlcGVhdGVkLHJlcXVpcmVkLHJldHVybnMscnBjLHNlcnZpY2Usc3ludGF4LHRvLHRydWUiLHR5cGVzOi9eKGJvb2x8KGRvdWJsZXxzP2ZpeGVkfFtzdV0/aW50KSgzMnw2NCl8ZmxvYXR8c3RyaW5nKVxiLyxjU3R5bGVDb21tZW50czohMH0pLFsicHJvdG8iXSk7CmRpZmYgLS1naXQgYS9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXNjYWxhLmpzIGIvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1zY2FsYS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGQwMzRkCi0tLSAvZGV2L251bGwKKysrIGIvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1zY2FsYS5qcwpAQCAtMCwwICsxLDIgQEAKK1BSLnJlZ2lzdGVyTGFuZ0hhbmRsZXIoUFIuY3JlYXRlU2ltcGxlTGV4ZXIoW1sicGxuIiwvXltcdFxuXHIgXHhhMF0rLyxudWxsLCJcdFxuXHIgwlx4YTAiXSxbInN0ciIsL14iKD86IiIoPzoiIj8oPyEiKXxbXiJcXF18XFwuKSoiezAsM318KD86W15cblxyIlxcXXxcXC4pKiI/KS8sbnVsbCwnIiddLFsibGl0IiwvXmAoPzpbXlxuXHJcXGBdfFxcLikqYD8vLG51bGwsImAiXSxbInB1biIsL15bISMlJigtLTotQFstXnstfl0rLyxudWxsLCIhIyUmKCkqKywtOjs8PT4/QFtcXF1ee3x9fiJdXSxbWyJzdHIiLC9eJyg/OlteXG5ccidcXF18XFwoPzonfFteXG5cciddKykpJy9dLFsibGl0IiwvXidbJEEtWl9hLXpdW1x3JF0qKD8hW1x3JCddKS9dLFsia3dkIiwvXig/OmFic3RyYWN0fGNhc2V8Y2F0Y2h8Y2xhc3N8ZGVmfGRvfGVsc2V8ZXh0ZW5kc3xmaW5hbHxmaW5hbGx5fGZvcnxmb3JTb21lfGlmfGltcGxpY2l0fGltcG9ydHxsYXp5fG1hdGNofG5ld3xvYmplY3R8b3ZlcnJpZGV8cGFja2FnZXxwcml2YXRlfHByb3RlY3RlZHxyZXF1aXJlc3xyZXR1cm58c2VhbGVkfHN1cGVyfHRocm93fHRyYWl0fHRyeXx0eXBlfHZhbHx2YXJ8d2hpbGV8d2l0aHx5aWVsZClcYi9dLAorWyJsaXQiLC9eKD86dHJ1ZXxmYWxzZXxudWxsfHRoaXMpXGIvXSxbImxpdCIsL14oPzowKD86WzAtN10rfHhbXGRhLWZdKylsP3woPzowfFsxLTldXGQqKSg/Oig/OlwuXGQrKT8oPzplWystXT9cZCspP2Y/fGw/KXxcXC5cZCsoPzplWystXT9cZCspP2Y/KS9pXSxbInR5cCIsL15bJF9dKltBLVpdW1xkJEEtWl9dKlthLXpdW1x3JF0qL10sWyJwbG4iLC9eWyRBLVpfYS16XVtcdyRdKi9dLFsiY29tIiwvXlwvKD86XC8uKnxcKig/OlwvfFwqKlteKi9dKSooPzpcKitcLz8pPykvXSxbInB1biIsL14oPzpcLit8XC8pL11dKSxbInNjYWxhIl0pOwpkaWZmIC0tZ2l0IGEvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1zcWwuanMgYi9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXNxbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTcwNWIwCi0tLSAvZGV2L251bGwKKysrIGIvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy1zcWwuanMKQEAgLTAsMCArMSwyIEBACitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbInBsbiIsL15bXHRcblxyIFx4YTBdKy8sbnVsbCwiXHRcblxyIMJceGEwIl0sWyJzdHIiLC9eKD86Iig/OlteIlxcXXxcXC4pKiJ8Jyg/OlteJ1xcXXxcXC4pKicpLyxudWxsLCJcIiciXV0sW1siY29tIiwvXig/Oi0tW15cblxyXSp8XC9cKltcU1xzXSo/KD86XCpcL3wkKSkvXSxbImt3ZCIsL14oPzphZGR8YWxsfGFsdGVyfGFuZHxhbnl8YXN8YXNjfGF1dGhvcml6YXRpb258YmFja3VwfGJlZ2lufGJldHdlZW58YnJlYWt8YnJvd3NlfGJ1bGt8Ynl8Y2FzY2FkZXxjYXNlfGNoZWNrfGNoZWNrcG9pbnR8Y2xvc2V8Y2x1c3RlcmVkfGNvYWxlc2NlfGNvbGxhdGV8Y29sdW1ufGNvbW1pdHxjb21wdXRlfGNvbnN0cmFpbnR8Y29udGFpbnN8Y29udGFpbnN0YWJsZXxjb250aW51ZXxjb252ZXJ0fGNyZWF0ZXxjcm9zc3xjdXJyZW50fGN1cnJlbnRfZGF0ZXxjdXJyZW50X3RpbWV8Y3VycmVudF90aW1lc3RhbXB8Y3VycmVudF91c2VyfGN1cnNvcnxkYXRhYmFzZXxkYmNjfGRlYWxsb2NhdGV8ZGVjbGFyZXxkZWZhdWx0fGRlbGV0ZXxkZW55fGRlc2N8ZGlza3xkaXN0aW5jdHxkaXN0cmlidXRlZHxkb3VibGV8ZHJvcHxkdW1teXxkdW1wfGVsc2V8ZW5kfGVycmx2bHxlc2NhcGV8ZXhjZXB0fGV4ZWN8ZXhlY3V0ZXxleGlzdHN8ZXhpdHxmZXRjaHxmaWxlfGZpbGxmYWN0b3J8Zm9yfGZvcmVpZ258ZnJlZXRleHR8ZnJlZXRleHR0YWJsZXxmcm9tfGZ1bGx8ZnVuY3Rpb258Z290b3xncmFudHxncm91cHxoYXZpbmd8aG9sZGxvY2t8aWRlbnRpdHl8aWRlbnRpdHljb2x8aWRlbnRpdHlfaW5zZXJ0fGlmfGlufGluZGV4fGlubmVyfGluc2VydHxpbnRlcnNlY3R8aW50b3xpc3xqb2lufGtleXxraWxsfGxlZnR8bGlrZXxsaW5lbm98bG9hZHxtYXRjaHxtZXJnZXxuYXRpb25hbHxub2NoZWNrfG5vbmNsdXN0ZXJlZHxub3R8bnVsbHxudWxsaWZ8b2Z8b2ZmfG9mZnNldHN8b258b3BlbnxvcGVuZGF0YXNvdXJjZXxvcGVucXVlcnl8b3BlbnJvd3NldHxvcGVueG1sfG9wdGlvbnxvcnxvcmRlcnxvdXRlcnxvdmVyfHBlcmNlbnR8cGxhbnxwcmVjaXNpb258cHJpbWFyeXxwcmludHxwcm9jfHByb2NlZHVyZXxwdWJsaWN8cmFpc2Vycm9yfHJlYWR8cmVhZHRleHR8cmVjb25maWd1cmV8cmVmZXJlbmNlc3xyZXBsaWNhdGlvbnxyZXN0b3JlfHJlc3RyaWN0fHJldHVybnxyZXZva2V8cmlnaHR8cm9sbGJhY2t8cm93Y291bnR8cm93Z3VpZGNvbHxydWxlfHNhdmV8c2NoZW1hfHNlbGVjdHxzZXNzaW9uX3VzZXJ8c2V0fHNldHVzZXJ8c2h1dGRvd258c29tZXxzdGF0aXN0aWNzfHN5c3RlbV91c2VyfHRhYmxlfHRleHRzaXplfHRoZW58dG98dG9wfHRyYW58dHJhbnNhY3Rpb258dHJpZ2dlcnx0cnVuY2F0ZXx0c2VxdWFsfHVuaW9ufHVuaXF1ZXx1cGRhdGV8dXBkYXRldGV4dHx1c2V8dXNlcnx1c2luZ3x2YWx1ZXN8dmFyeWluZ3x2aWV3fHdhaXRmb3J8d2hlbnx3aGVyZXx3aGlsZXx3aXRofHdyaXRldGV4dCkoPz1bXlx3LV18JCkvaSwKK251bGxdLFsibGl0IiwvXlsrLV0/KD86MHhbXGRhLWZdK3woPzpcLlxkK3xcZCsoPzpcLlxkKik/KSg/OmVbKy1dP1xkKyk/KS9pXSxbInBsbiIsL15bX2Etel1bXHctXSovaV0sWyJwdW4iLC9eW15cd1x0XG5cciAiJ1x4YTBdW15cd1x0XG5cciAiJytceGEwLV0qL11dKSxbInNxbCJdKTsKZGlmZiAtLWdpdCBhL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctdGV4LmpzIGIvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy10ZXguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U5NmZiYgotLS0gL2Rldi9udWxsCisrKyBiL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctdGV4LmpzCkBAIC0wLDAgKzEgQEAKK1BSLnJlZ2lzdGVyTGFuZ0hhbmRsZXIoUFIuY3JlYXRlU2ltcGxlTGV4ZXIoW1sicGxuIiwvXltcdFxuXHIgXHhhMF0rLyxudWxsLCJcdFxuXHIgwlx4YTAiXSxbImNvbSIsL14lW15cblxyXSovLG51bGwsIiUiXV0sW1sia3dkIiwvXlxcW0AtWmEtel0rL10sWyJrd2QiLC9eXFwuL10sWyJ0eXAiLC9eWyQmXS9dLFsibGl0IiwvWystXT8oPzpcLlxkK3xcZCsoPzpcLlxkKik/KShjbXxlbXxleHxpbnxwY3xwdHxicHxtbSkvaV0sWyJwdW4iLC9eWygpPVtcXXt9XSsvXV0pLFsibGF0ZXgiLCJ0ZXgiXSk7CmRpZmYgLS1naXQgYS9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXZiLmpzIGIvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy12Yi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzUwNmIwCi0tLSAvZGV2L251bGwKKysrIGIvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy12Yi5qcwpAQCAtMCwwICsxLDIgQEAKK1BSLnJlZ2lzdGVyTGFuZ0hhbmRsZXIoUFIuY3JlYXRlU2ltcGxlTGV4ZXIoW1sicGxuIiwvXltcdFxuXHIgXHhhMFx1MjAyOFx1MjAyOV0rLyxudWxsLCJcdFxuXHIgwlx4YTDigKjigKkiXSxbInN0ciIsL14oPzpbIlx1MjAxY1x1MjAxZF0oPzpbXiJcdTIwMWNcdTIwMWRdfFsiXHUyMDFjXHUyMDFkXXsyfSkoPzpbIlx1MjAxY1x1MjAxZF1jfCQpfFsiXHUyMDFjXHUyMDFkXSg/OlteIlx1MjAxY1x1MjAxZF18WyJcdTIwMWNcdTIwMWRdezJ9KSooPzpbIlx1MjAxY1x1MjAxZF18JCkpL2ksbnVsbCwnIuKAnOKAnSddLFsiY29tIiwvXlsnXHUyMDE4XHUyMDE5XS4qLyxudWxsLCIn4oCY4oCZIl1dLFtbImt3ZCIsL14oPzphZGRoYW5kbGVyfGFkZHJlc3NvZnxhbGlhc3xhbmR8YW5kYWxzb3xhbnNpfGFzfGFzc2VtYmx5fGF1dG98Ym9vbGVhbnxieXJlZnxieXRlfGJ5dmFsfGNhbGx8Y2FzZXxjYXRjaHxjYm9vbHxjYnl0ZXxjY2hhcnxjZGF0ZXxjZGJsfGNkZWN8Y2hhcnxjaW50fGNsYXNzfGNsbmd8Y29ianxjb25zdHxjc2hvcnR8Y3NuZ3xjc3RyfGN0eXBlfGRhdGV8ZGVjaW1hbHxkZWNsYXJlfGRlZmF1bHR8ZGVsZWdhdGV8ZGltfGRpcmVjdGNhc3R8ZG98ZG91YmxlfGVhY2h8ZWxzZXxlbHNlaWZ8ZW5kfGVuZGlmfGVudW18ZXJhc2V8ZXJyb3J8ZXZlbnR8ZXhpdHxmaW5hbGx5fGZvcnxmcmllbmR8ZnVuY3Rpb258Z2V0fGdldHR5cGV8Z29zdWJ8Z290b3xoYW5kbGVzfGlmfGltcGxlbWVudHN8aW1wb3J0c3xpbnxpbmhlcml0c3xpbnRlZ2VyfGludGVyZmFjZXxpc3xsZXR8bGlifGxpa2V8bG9uZ3xsb29wfG1lfG1vZHxtb2R1bGV8bXVzdGluaGVyaXR8bXVzdG92ZXJyaWRlfG15YmFzZXxteWNsYXNzfG5hbWVzcGFjZXxuZXd8bmV4dHxub3R8bm90aW5oZXJpdGFibGV8bm90b3ZlcnJpZGFibGV8b2JqZWN0fG9ufG9wdGlvbnxvcHRpb25hbHxvcnxvcmVsc2V8b3ZlcmxvYWRzfG92ZXJyaWRhYmxlfG92ZXJyaWRlc3xwYXJhbWFycmF5fHByZXNlcnZlfHByaXZhdGV8cHJvcGVydHl8cHJvdGVjdGVkfHB1YmxpY3xyYWlzZWV2ZW50fHJlYWRvbmx5fHJlZGltfHJlbW92ZWhhbmRsZXJ8cmVzdW1lfHJldHVybnxzZWxlY3R8c2V0fHNoYWRvd3N8c2hhcmVkfHNob3J0fHNpbmdsZXxzdGF0aWN8c3RlcHxzdG9wfHN0cmluZ3xzdHJ1Y3R1cmV8c3VifHN5bmNsb2NrfHRoZW58dGhyb3d8dG98dHJ5fHR5cGVvZnx1bmljb2RlfHVudGlsfHZhcmlhbnR8d2VuZHx3aGVufHdoaWxlfHdpdGh8d2l0aGV2ZW50c3x3cml0ZW9ubHl8eG9yfGVuZGlmfGdvc3VifGxldHx2YXJpYW50fHdlbmQpXGIvaSwKK251bGxdLFsiY29tIiwvXnJlbS4qL2ldLFsibGl0IiwvXig/OnRydWVcYnxmYWxzZVxifG5vdGhpbmdcYnxcZCsoPzplWystXT9cZCtbZGZyXT98W2RmaWxyc10pP3woPzomaFtcZGEtZl0rfCZvWzAtN10rKVtpbHNdP3xcZCpcLlxkKyg/OmVbKy1dP1xkKyk/W2Rmcl0/fCNccysoPzpcZCtbLy1dXGQrWy8tXVxkKyg/OlxzK1xkKzpcZCsoPzo6XGQrKT8oXHMqKD86YW18cG0pKT8pP3xcZCs6XGQrKD86OlxkKyk/KFxzKig/OmFtfHBtKSk/KVxzKyMpL2ldLFsicGxuIiwvXig/Oig/OlthLXpdfF9cdylcdyp8XFsoPzpbYS16XXxfXHcpXHcqXSkvaV0sWyJwdW4iLC9eW15cd1x0XG5cciAiJ1tcXVx4YTBcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjhcdTIwMjldKy9dLFsicHVuIiwvXig/OlxbfF0pL11dKSxbInZiIiwidmJzIl0pOwpkaWZmIC0tZ2l0IGEvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy12aGRsLmpzIGIvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy12aGRsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyOGI1YjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXZoZGwuanMKQEAgLTAsMCArMSwzIEBACitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbInBsbiIsL15bXHRcblxyIFx4YTBdKy8sbnVsbCwiXHRcblxyIMJceGEwIl1dLFtbInN0ciIsL14oPzpbYm94XT8iKD86W14iXXwiIikqInwnLicpL2ldLFsiY29tIiwvXi0tW15cblxyXSovXSxbImt3ZCIsL14oPzphYnN8YWNjZXNzfGFmdGVyfGFsaWFzfGFsbHxhbmR8YXJjaGl0ZWN0dXJlfGFycmF5fGFzc2VydHxhdHRyaWJ1dGV8YmVnaW58YmxvY2t8Ym9keXxidWZmZXJ8YnVzfGNhc2V8Y29tcG9uZW50fGNvbmZpZ3VyYXRpb258Y29uc3RhbnR8ZGlzY29ubmVjdHxkb3dudG98ZWxzZXxlbHNpZnxlbmR8ZW50aXR5fGV4aXR8ZmlsZXxmb3J8ZnVuY3Rpb258Z2VuZXJhdGV8Z2VuZXJpY3xncm91cHxndWFyZGVkfGlmfGltcHVyZXxpbnxpbmVydGlhbHxpbm91dHxpc3xsYWJlbHxsaWJyYXJ5fGxpbmthZ2V8bGl0ZXJhbHxsb29wfG1hcHxtb2R8bmFuZHxuZXd8bmV4dHxub3J8bm90fG51bGx8b2Z8b258b3BlbnxvcnxvdGhlcnN8b3V0fHBhY2thZ2V8cG9ydHxwb3N0cG9uZWR8cHJvY2VkdXJlfHByb2Nlc3N8cHVyZXxyYW5nZXxyZWNvcmR8cmVnaXN0ZXJ8cmVqZWN0fHJlbXxyZXBvcnR8cmV0dXJufHJvbHxyb3J8c2VsZWN0fHNldmVyaXR5fHNoYXJlZHxzaWduYWx8c2xhfHNsbHxzcmF8c3JsfHN1YnR5cGV8dGhlbnx0b3x0cmFuc3BvcnR8dHlwZXx1bmFmZmVjdGVkfHVuaXRzfHVudGlsfHVzZXx2YXJpYWJsZXx3YWl0fHdoZW58d2hpbGV8d2l0aHx4bm9yfHhvcikoPz1bXlx3LV18JCkvaSwKK251bGxdLFsidHlwIiwvXig/OmJpdHxiaXRfdmVjdG9yfGNoYXJhY3Rlcnxib29sZWFufGludGVnZXJ8cmVhbHx0aW1lfHN0cmluZ3xzZXZlcml0eV9sZXZlbHxwb3NpdGl2ZXxuYXR1cmFsfHNpZ25lZHx1bnNpZ25lZHxsaW5lfHRleHR8c3RkX3U/bG9naWMoPzpfdmVjdG9yKT8pKD89W15cdy1dfCQpL2ksbnVsbF0sWyJ0eXAiLC9eJyg/OmFjdGl2ZXxhc2NlbmRpbmd8YmFzZXxkZWxheWVkfGRyaXZpbmd8ZHJpdmluZ192YWx1ZXxldmVudHxoaWdofGltYWdlfGluc3RhbmNlX25hbWV8bGFzdF9hY3RpdmV8bGFzdF9ldmVudHxsYXN0X3ZhbHVlfGxlZnR8bGVmdG9mfGxlbmd0aHxsb3d8cGF0aF9uYW1lfHBvc3xwcmVkfHF1aWV0fHJhbmdlfHJldmVyc2VfcmFuZ2V8cmlnaHR8cmlnaHRvZnxzaW1wbGVfbmFtZXxzdGFibGV8c3VjY3x0cmFuc2FjdGlvbnx2YWx8dmFsdWUpKD89W15cdy1dfCQpL2ksbnVsbF0sWyJsaXQiLC9eXGQrKD86X1xkKykqKD86I1tcdy5cXF0rIyg/OlsrLV0/XGQrKD86X1xkKykqKT98KD86XC5cZCsoPzpfXGQrKSopPyg/OmVbKy1dP1xkKyg/Ol9cZCspKik/KS9pXSwKK1sicGxuIiwvXig/OlthLXpdXHcqfFxcW15cXF0qXFwpL2ldLFsicHVuIiwvXlteXHdcdFxuXHIgIidceGEwXVteXHdcdFxuXHIgIidceGEwLV0qL11dKSxbInZoZGwiLCJ2aGQiXSk7CmRpZmYgLS1naXQgYS9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXdpa2kuanMgYi9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXdpa2kuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIwYjQ0OAotLS0gL2Rldi9udWxsCisrKyBiL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmctd2lraS5qcwpAQCAtMCwwICsxLDIgQEAKK1BSLnJlZ2lzdGVyTGFuZ0hhbmRsZXIoUFIuY3JlYXRlU2ltcGxlTGV4ZXIoW1sicGxuIiwvXltcZFx0IGEtZ2ktelx4YTBdKy8sbnVsbCwiXHQgwlx4YTBhYmNkZWZnaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSJdLFsicHVuIiwvXlsqPVtcXV5+XSsvLG51bGwsIj0qfl5bXSJdXSxbWyJsYW5nLXdpa2kubWV0YSIsLyg/Ol5efFxyXG4/fFxuKSgjW2Etel0rKVxiL10sWyJsaXQiLC9eW0EtWl1bYS16XVtcZGEtel0rW0EtWl1bYS16XVteXFdfXStcYi9dLFsibGFuZy0iLC9ee3t7KFtcU1xzXSs/KX19fS9dLFsibGFuZy0iLC9eYChbXlxuXHJgXSspYC9dLFsic3RyIiwvXmh0dHBzPzpcL1wvW15ccyMvP10qKD86XC9bXlxzIz9dKik/KD86XD9bXlxzI10qKT8oPzojXFMqKT8vaV0sWyJwbG4iLC9eKD86XHJcbnxbXFNcc10pW15cblxyIyo9QS1bXmBoe35dKi9dXSksWyJ3aWtpIl0pOworUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbWyJrd2QiLC9eI1thLXpdKy9pLG51bGwsIiMiXV0sW10pLFsid2lraS5tZXRhIl0pOwpkaWZmIC0tZ2l0IGEvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy14cS5qcyBiL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmcteHEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMyM2FlMwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS9qcy9saWJzL3ByZXR0aWZ5L2xhbmcteHEuanMKQEAgLTAsMCArMSwzIEBACitQUi5yZWdpc3RlckxhbmdIYW5kbGVyKFBSLmNyZWF0ZVNpbXBsZUxleGVyKFtbInZhciBwbG4iLC9eXCRbXHctXSsvLG51bGwsIiQiXV0sW1sicGxuIiwvXltccz1dWzw+XVtccz1dL10sWyJsaXQiLC9eQFtcdy1dKy9dLFsidGFnIiwvXjxcLz9bYS16XSg/Oltcdy0uOl0qXHcpP3xcLz8+JC9pXSxbImNvbSIsL15cKDpbXFNcc10qPzpcKS9dLFsicGxuIiwvXlsoKSwvO1tcXXt9XSQvXSxbInN0ciIsL14oPzoiKD86W14iXFx7XXxcXFtcU1xzXSkqKD86InwkKXwnKD86W14nXFx7XXxcXFtcU1xzXSkqKD86J3wkKSkvLG51bGwsIlwiJyJdLFsia3dkIiwvXig/OnhxdWVyeXx3aGVyZXx2ZXJzaW9ufHZhcmlhYmxlfHVuaW9ufHR5cGVzd2l0Y2h8dHJlYXR8dG98dGhlbnx0ZXh0fHN0YWJsZXxzb3J0Ynl8c29tZXxzZWxmfHNjaGVtYXxzYXRpc2ZpZXN8cmV0dXJuc3xyZXR1cm58cmVmfHByb2Nlc3NpbmctaW5zdHJ1Y3Rpb258cHJlY2VkaW5nLXNpYmxpbmd8cHJlY2VkaW5nfHByZWNlZGVzfHBhcmVudHxvbmx5fG9mfG5vZGV8bmFtZXNwYWNlfG1vZHVsZXxsZXR8aXRlbXxpbnRlcnNlY3R8aW5zdGFuY2V8aW58aW1wb3J0fGlmfGZ1bmN0aW9ufGZvcnxmb2xsb3dzfGZvbGxvd2luZy1zaWJsaW5nfGZvbGxvd2luZ3xleHRlcm5hbHxleGNlcHR8ZXZlcnl8ZWxzZXxlbGVtZW50fGRlc2NlbmRpbmd8ZGVzY2VuZGFudC1vci1zZWxmfGRlc2NlbmRhbnR8ZGVmaW5lfGRlZmF1bHR8ZGVjbGFyZXxjb21tZW50fGNoaWxkfGNhc3R8Y2FzZXxiZWZvcmV8YXR0cmlidXRlfGFzc2VydHxhc2NlbmRpbmd8YXN8YW5jZXN0b3Itb3Itc2VsZnxhbmNlc3RvcnxhZnRlcnxlcXxvcmRlcnxieXxvcnxhbmR8c2NoZW1hLWVsZW1lbnR8ZG9jdW1lbnQtbm9kZXxub2RlfGF0KVxiL10sCitbInR5cCIsL14oPzp4czp5ZWFyTW9udGhEdXJhdGlvbnx4czp1bnNpZ25lZExvbmd8eHM6dGltZXx4czpzdHJpbmd8eHM6c2hvcnR8eHM6UU5hbWV8eHM6TmFtZXx4czpsb25nfHhzOmludGVnZXJ8eHM6aW50fHhzOmdZZWFyTW9udGh8eHM6Z1llYXJ8eHM6Z01vbnRoRGF5fHhzOmdEYXl8eHM6ZmxvYXR8eHM6ZHVyYXRpb258eHM6ZG91YmxlfHhzOmRlY2ltYWx8eHM6ZGF5VGltZUR1cmF0aW9ufHhzOmRhdGVUaW1lfHhzOmRhdGV8eHM6Ynl0ZXx4czpib29sZWFufHhzOmFueVVSSXx4Zjp5ZWFyTW9udGhEdXJhdGlvbilcYi8sbnVsbF0sWyJmdW4gcGxuIiwvXig/OnhwOmRlcmVmZXJlbmNlfHhpbmM6bm9kZS1leHBhbmR8eGluYzpsaW5rLXJlZmVyZW5jZXN8eGluYzpsaW5rLWV4cGFuZHx4aHRtbDpyZXN0cnVjdHVyZXx4aHRtbDpjbGVhbnx4aHRtbDphZGQtbGlzdHN8eGRtcDp6aXAtbWFuaWZlc3R8eGRtcDp6aXAtZ2V0fHhkbXA6emlwLWNyZWF0ZXx4ZG1wOnhxdWVyeS12ZXJzaW9ufHhkbXA6d29yZC1jb252ZXJ0fHhkbXA6d2l0aC1uYW1lc3BhY2VzfHhkbXA6dmVyc2lvbnx4ZG1wOnZhbHVlfHhkbXA6dXNlci1yb2xlc3x4ZG1wOnVzZXItbGFzdC1sb2dpbnx4ZG1wOnVzZXJ8eGRtcDp1cmwtZW5jb2RlfHhkbXA6dXJsLWRlY29kZXx4ZG1wOnVyaS1pcy1maWxlfHhkbXA6dXJpLWZvcm1hdHx4ZG1wOnVyaS1jb250ZW50LXR5cGV8eGRtcDp1bnF1b3RlfHhkbXA6dW5wYXRofHhkbXA6dHJpZ2dlcnMtZGF0YWJhc2V8eGRtcDp0cmFjZXx4ZG1wOnRvLWpzb258eGRtcDp0aWR5fHhkbXA6c3ViYmluYXJ5fHhkbXA6c3RyZnRpbWV8eGRtcDpzcGF3bi1pbnx4ZG1wOnNwYXdufHhkbXA6c2xlZXB8eGRtcDpzaHV0ZG93bnx4ZG1wOnNldC1zZXNzaW9uLWZpZWxkfHhkbXA6c2V0LXJlc3BvbnNlLWVuY29kaW5nfHhkbXA6c2V0LXJlc3BvbnNlLWNvbnRlbnQtdHlwZXx4ZG1wOnNldC1yZXNwb25zZS1jb2RlfHhkbXA6c2V0LXJlcXVlc3QtdGltZS1saW1pdHx4ZG1wOnNldHx4ZG1wOnNlcnZlcnN8eGRtcDpzZXJ2ZXItc3RhdHVzfHhkbXA6c2VydmVyLW5hbWV8eGRtcDpzZXJ2ZXJ8eGRtcDpzZWN1cml0eS1kYXRhYmFzZXx4ZG1wOnNlY3VyaXR5LWFzc2VydHx4ZG1wOnNjaGVtYS1kYXRhYmFzZXx4ZG1wOnNhdmV8eGRtcDpyb2xlLXJvbGVzfHhkbXA6cm9sZXx4ZG1wOnJldGhyb3d8eGRtcDpyZXN0YXJ0fHhkbXA6cmVxdWVzdC10aW1lc3RhbXB8eGRtcDpyZXF1ZXN0LXN0YXR1c3x4ZG1wOnJlcXVlc3QtY2FuY2VsfHhkbXA6cmVxdWVzdHx4ZG1wOnJlZGlyZWN0LXJlc3BvbnNlfHhkbXA6cmFuZG9tfHhkbXA6cXVvdGV8eGRtcDpxdWVyeS10cmFjZXx4ZG1wOnF1ZXJ5LW1ldGVyc3x4ZG1wOnByb2R1Y3QtZWRpdGlvbnx4ZG1wOnByaXZpbGVnZS1yb2xlc3x4ZG1wOnByaXZpbGVnZXx4ZG1wOnByZXR0eS1wcmludHx4ZG1wOnBvd2VycG9pbnQtY29udmVydHx4ZG1wOnBsYXRmb3JtfHhkbXA6cGVybWlzc2lvbnx4ZG1wOnBkZi1jb252ZXJ0fHhkbXA6cGF0aHx4ZG1wOm9jdGFsLXRvLWludGVnZXJ8eGRtcDpub2RlLXVyaXx4ZG1wOm5vZGUtcmVwbGFjZXx4ZG1wOm5vZGUta2luZHx4ZG1wOm5vZGUtaW5zZXJ0LWNoaWxkfHhkbXA6bm9kZS1pbnNlcnQtYmVmb3JlfHhkbXA6bm9kZS1pbnNlcnQtYWZ0ZXJ8eGRtcDpub2RlLWRlbGV0ZXx4ZG1wOm5vZGUtZGF0YWJhc2V8eGRtcDptdWw2NHx4ZG1wOm1vZHVsZXMtcm9vdHx4ZG1wOm1vZHVsZXMtZGF0YWJhc2V8eGRtcDptZXJnaW5nfHhkbXA6bWVyZ2UtY2FuY2VsfHhkbXA6bWVyZ2V8eGRtcDptZDV8eGRtcDpsb2dvdXR8eGRtcDpsb2dpbnx4ZG1wOmxvZy1sZXZlbHx4ZG1wOmxvZ3x4ZG1wOmxvY2stcmVsZWFzZXx4ZG1wOmxvY2stYWNxdWlyZXx4ZG1wOmxvYWR8eGRtcDppbnZva2UtaW58eGRtcDppbnZva2V8eGRtcDppbnRlZ2VyLXRvLW9jdGFsfHhkbXA6aW50ZWdlci10by1oZXh8eGRtcDpodHRwLXB1dHx4ZG1wOmh0dHAtcG9zdHx4ZG1wOmh0dHAtb3B0aW9uc3x4ZG1wOmh0dHAtaGVhZHx4ZG1wOmh0dHAtZ2V0fHhkbXA6aHR0cC1kZWxldGV8eGRtcDpob3N0c3x4ZG1wOmhvc3Qtc3RhdHVzfHhkbXA6aG9zdC1uYW1lfHhkbXA6aG9zdHx4ZG1wOmhleC10by1pbnRlZ2VyfHhkbXA6aGFzaDY0fHhkbXA6aGFzaDMyfHhkbXA6aGFzLXByaXZpbGVnZXx4ZG1wOmdyb3Vwc3x4ZG1wOmdyb3VwLXNlcnZlc3x4ZG1wOmdyb3VwLXNlcnZlcnN8eGRtcDpncm91cC1uYW1lfHhkbXA6Z3JvdXAtaG9zdHN8eGRtcDpncm91cHx4ZG1wOmdldC1zZXNzaW9uLWZpZWxkLW5hbWVzfHhkbXA6Z2V0LXNlc3Npb24tZmllbGR8eGRtcDpnZXQtcmVzcG9uc2UtZW5jb2Rpbmd8eGRtcDpnZXQtcmVzcG9uc2UtY29kZXx4ZG1wOmdldC1yZXF1ZXN0LXVzZXJuYW1lfHhkbXA6Z2V0LXJlcXVlc3QtdXNlcnx4ZG1wOmdldC1yZXF1ZXN0LXVybHx4ZG1wOmdldC1yZXF1ZXN0LXByb3RvY29sfHhkbXA6Z2V0LXJlcXVlc3QtcGF0aHx4ZG1wOmdldC1yZXF1ZXN0LW1ldGhvZHx4ZG1wOmdldC1yZXF1ZXN0LWhlYWRlci1uYW1lc3x4ZG1wOmdldC1yZXF1ZXN0LWhlYWRlcnx4ZG1wOmdldC1yZXF1ZXN0LWZpZWxkLW5hbWVzfHhkbXA6Z2V0LXJlcXVlc3QtZmllbGQtZmlsZW5hbWV8eGRtcDpnZXQtcmVxdWVzdC1maWVsZC1jb250ZW50LXR5cGV8eGRtcDpnZXQtcmVxdWVzdC1maWVsZHx4ZG1wOmdldC1yZXF1ZXN0LWNsaWVudC1jZXJ0aWZpY2F0ZXx4ZG1wOmdldC1yZXF1ZXN0LWNsaWVudC1hZGRyZXNzfHhkbXA6Z2V0LXJlcXVlc3QtYm9keXx4ZG1wOmdldC1jdXJyZW50LXVzZXJ8eGRtcDpnZXQtY3VycmVudC1yb2xlc3x4ZG1wOmdldHx4ZG1wOmZ1bmN0aW9uLW5hbWV8eGRtcDpmdW5jdGlvbi1tb2R1bGV8eGRtcDpmdW5jdGlvbnx4ZG1wOmZyb20tanNvbnx4ZG1wOmZvcmVzdHN8eGRtcDpmb3Jlc3Qtc3RhdHVzfHhkbXA6Zm9yZXN0LXJlc3RvcmV8eGRtcDpmb3Jlc3QtcmVzdGFydHx4ZG1wOmZvcmVzdC1uYW1lfHhkbXA6Zm9yZXN0LWRlbGV0ZXx4ZG1wOmZvcmVzdC1kYXRhYmFzZXN8eGRtcDpmb3Jlc3QtY291bnRzfHhkbXA6Zm9yZXN0LWNsZWFyfHhkbXA6Zm9yZXN0LWJhY2t1cHx4ZG1wOmZvcmVzdHx4ZG1wOmZpbGVzeXN0ZW0tZmlsZXx4ZG1wOmZpbGVzeXN0ZW0tZGlyZWN0b3J5fHhkbXA6ZXhpc3RzfHhkbXA6ZXhjZWwtY29udmVydHx4ZG1wOmV2YWwtaW58eGRtcDpldmFsfHhkbXA6ZXN0aW1hdGV8eGRtcDplbWFpbHx4ZG1wOmVsZW1lbnQtY29udGVudC10eXBlfHhkbXA6ZWxhcHNlZC10aW1lfHhkbXA6ZG9jdW1lbnQtc2V0LXF1YWxpdHl8eGRtcDpkb2N1bWVudC1zZXQtcHJvcGVydHl8eGRtcDpkb2N1bWVudC1zZXQtcHJvcGVydGllc3x4ZG1wOmRvY3VtZW50LXNldC1wZXJtaXNzaW9uc3x4ZG1wOmRvY3VtZW50LXNldC1jb2xsZWN0aW9uc3x4ZG1wOmRvY3VtZW50LXJlbW92ZS1wcm9wZXJ0aWVzfHhkbXA6ZG9jdW1lbnQtcmVtb3ZlLXBlcm1pc3Npb25zfHhkbXA6ZG9jdW1lbnQtcmVtb3ZlLWNvbGxlY3Rpb25zfHhkbXA6ZG9jdW1lbnQtcHJvcGVydGllc3x4ZG1wOmRvY3VtZW50LWxvY2tzfHhkbXA6ZG9jdW1lbnQtbG9hZHx4ZG1wOmRvY3VtZW50LWluc2VydHx4ZG1wOmRvY3VtZW50LWdldC1xdWFsaXR5fHhkbXA6ZG9jdW1lbnQtZ2V0LXByb3BlcnRpZXN8eGRtcDpkb2N1bWVudC1nZXQtcGVybWlzc2lvbnN8eGRtcDpkb2N1bWVudC1nZXQtY29sbGVjdGlvbnN8eGRtcDpkb2N1bWVudC1nZXR8eGRtcDpkb2N1bWVudC1mb3Jlc3R8eGRtcDpkb2N1bWVudC1kZWxldGV8eGRtcDpkb2N1bWVudC1hZGQtcHJvcGVydGllc3x4ZG1wOmRvY3VtZW50LWFkZC1wZXJtaXNzaW9uc3x4ZG1wOmRvY3VtZW50LWFkZC1jb2xsZWN0aW9uc3x4ZG1wOmRpcmVjdG9yeS1wcm9wZXJ0aWVzfHhkbXA6ZGlyZWN0b3J5LWxvY2tzfHhkbXA6ZGlyZWN0b3J5LWRlbGV0ZXx4ZG1wOmRpcmVjdG9yeS1jcmVhdGV8eGRtcDpkaXJlY3Rvcnl8eGRtcDpkaWFjcml0aWMtbGVzc3x4ZG1wOmRlc2NyaWJlfHhkbXA6ZGVmYXVsdC1wZXJtaXNzaW9uc3x4ZG1wOmRlZmF1bHQtY29sbGVjdGlvbnN8eGRtcDpkYXRhYmFzZXN8eGRtcDpkYXRhYmFzZS1yZXN0b3JlLXZhbGlkYXRlfHhkbXA6ZGF0YWJhc2UtcmVzdG9yZS1zdGF0dXN8eGRtcDpkYXRhYmFzZS1yZXN0b3JlLWNhbmNlbHx4ZG1wOmRhdGFiYXNlLXJlc3RvcmV8eGRtcDpkYXRhYmFzZS1uYW1lfHhkbXA6ZGF0YWJhc2UtZm9yZXN0c3x4ZG1wOmRhdGFiYXNlLWJhY2t1cC12YWxpZGF0ZXx4ZG1wOmRhdGFiYXNlLWJhY2t1cC1zdGF0dXN8eGRtcDpkYXRhYmFzZS1iYWNrdXAtcHVyZ2V8eGRtcDpkYXRhYmFzZS1iYWNrdXAtY2FuY2VsfHhkbXA6ZGF0YWJhc2UtYmFja3VwfHhkbXA6ZGF0YWJhc2V8eGRtcDpjb2xsZWN0aW9uLXByb3BlcnRpZXN8eGRtcDpjb2xsZWN0aW9uLWxvY2tzfHhkbXA6Y29sbGVjdGlvbi1kZWxldGV8eGRtcDpjb2xsYXRpb24tY2Fub25pY2FsLXVyaXx4ZG1wOmNhc3RhYmxlLWFzfHhkbXA6Y2FuLWdyYW50LXJvbGVzfHhkbXA6YmFzZTY0LWVuY29kZXx4ZG1wOmJhc2U2NC1kZWNvZGV8eGRtcDphcmNoaXRlY3R1cmV8eGRtcDphcHBseXx4ZG1wOmFtcC1yb2xlc3x4ZG1wOmFtcHx4ZG1wOmFkZDY0fHhkbXA6YWRkLXJlc3BvbnNlLWhlYWRlcnx4ZG1wOmFjY2Vzc3x0cmdyOnRyaWdnZXItc2V0LXJlY3Vyc2l2ZXx0cmdyOnRyaWdnZXItc2V0LXBlcm1pc3Npb25zfHRyZ3I6dHJpZ2dlci1zZXQtbmFtZXx0cmdyOnRyaWdnZXItc2V0LW1vZHVsZXx0cmdyOnRyaWdnZXItc2V0LWV2ZW50fHRyZ3I6dHJpZ2dlci1zZXQtZGVzY3JpcHRpb258dHJncjp0cmlnZ2VyLXJlbW92ZS1wZXJtaXNzaW9uc3x0cmdyOnRyaWdnZXItbW9kdWxlfHRyZ3I6dHJpZ2dlci1nZXQtcGVybWlzc2lvbnN8dHJncjp0cmlnZ2VyLWVuYWJsZXx0cmdyOnRyaWdnZXItZGlzYWJsZXx0cmdyOnRyaWdnZXItZGF0YWJhc2Utb25saW5lLWV2ZW50fHRyZ3I6dHJpZ2dlci1kYXRhLWV2ZW50fHRyZ3I6dHJpZ2dlci1hZGQtcGVybWlzc2lvbnN8dHJncjpyZW1vdmUtdHJpZ2dlcnx0cmdyOnByb3BlcnR5LWNvbnRlbnR8dHJncjpwcmUtY29tbWl0fHRyZ3I6cG9zdC1jb21taXR8dHJncjpnZXQtdHJpZ2dlci1ieS1pZHx0cmdyOmdldC10cmlnZ2VyfHRyZ3I6ZG9jdW1lbnQtc2NvcGV8dHJncjpkb2N1bWVudC1jb250ZW50fHRyZ3I6ZGlyZWN0b3J5LXNjb3BlfHRyZ3I6Y3JlYXRlLXRyaWdnZXJ8dHJncjpjb2xsZWN0aW9uLXNjb3BlfHRyZ3I6YW55LXByb3BlcnR5LWNvbnRlbnR8dGhzcjpzZXQtZW50cnl8dGhzcjpyZW1vdmUtdGVybXx0aHNyOnJlbW92ZS1zeW5vbnltfHRoc3I6cmVtb3ZlLWVudHJ5fHRoc3I6cXVlcnktbG9va3VwfHRoc3I6bG9va3VwfHRoc3I6bG9hZHx0aHNyOmluc2VydHx0aHNyOmV4cGFuZHx0aHNyOmFkZC1zeW5vbnltfHNwZWxsOnN1Z2dlc3QtZGV0YWlsZWR8c3BlbGw6c3VnZ2VzdHxzcGVsbDpyZW1vdmUtd29yZHxzcGVsbDptYWtlLWRpY3Rpb25hcnl8c3BlbGw6bG9hZHxzcGVsbDpsZXZlbnNodGVpbi1kaXN0YW5jZXxzcGVsbDppcy1jb3JyZWN0fHNwZWxsOmluc2VydHxzcGVsbDpkb3VibGUtbWV0YXBob25lfHNwZWxsOmFkZC13b3JkfHNlYzp1c2Vycy1jb2xsZWN0aW9ufHNlYzp1c2VyLXNldC1yb2xlc3xzZWM6dXNlci1zZXQtcGFzc3dvcmR8c2VjOnVzZXItc2V0LW5hbWV8c2VjOnVzZXItc2V0LWRlc2NyaXB0aW9ufHNlYzp1c2VyLXNldC1kZWZhdWx0LXBlcm1pc3Npb25zfHNlYzp1c2VyLXNldC1kZWZhdWx0LWNvbGxlY3Rpb25zfHNlYzp1c2VyLXJlbW92ZS1yb2xlc3xzZWM6dXNlci1wcml2aWxlZ2VzfHNlYzp1c2VyLWdldC1yb2xlc3xzZWM6dXNlci1nZXQtZGVzY3JpcHRpb258c2VjOnVzZXItZ2V0LWRlZmF1bHQtcGVybWlzc2lvbnN8c2VjOnVzZXItZ2V0LWRlZmF1bHQtY29sbGVjdGlvbnN8c2VjOnVzZXItZG9jLXBlcm1pc3Npb25zfHNlYzp1c2VyLWRvYy1jb2xsZWN0aW9uc3xzZWM6dXNlci1hZGQtcm9sZXN8c2VjOnVucHJvdGVjdC1jb2xsZWN0aW9ufHNlYzp1aWQtZm9yLW5hbWV8c2VjOnNldC1yZWFsbXxzZWM6c2VjdXJpdHktdmVyc2lvbnxzZWM6c2VjdXJpdHktbmFtZXNwYWNlfHNlYzpzZWN1cml0eS1pbnN0YWxsZWR8c2VjOnNlY3VyaXR5LWNvbGxlY3Rpb258c2VjOnJvbGVzLWNvbGxlY3Rpb258c2VjOnJvbGUtc2V0LXJvbGVzfHNlYzpyb2xlLXNldC1uYW1lfHNlYzpyb2xlLXNldC1kZXNjcmlwdGlvbnxzZWM6cm9sZS1zZXQtZGVmYXVsdC1wZXJtaXNzaW9uc3xzZWM6cm9sZS1zZXQtZGVmYXVsdC1jb2xsZWN0aW9uc3xzZWM6cm9sZS1yZW1vdmUtcm9sZXN8c2VjOnJvbGUtcHJpdmlsZWdlc3xzZWM6cm9sZS1nZXQtcm9sZXN8c2VjOnJvbGUtZ2V0LWRlc2NyaXB0aW9ufHNlYzpyb2xlLWdldC1kZWZhdWx0LXBlcm1pc3Npb25zfHNlYzpyb2xlLWdldC1kZWZhdWx0LWNvbGxlY3Rpb25zfHNlYzpyb2xlLWRvYy1wZXJtaXNzaW9uc3xzZWM6cm9sZS1kb2MtY29sbGVjdGlvbnN8c2VjOnJvbGUtYWRkLXJvbGVzfHNlYzpyZW1vdmUtdXNlcnxzZWM6cmVtb3ZlLXJvbGUtZnJvbS11c2Vyc3xzZWM6cmVtb3ZlLXJvbGUtZnJvbS1yb2xlfHNlYzpyZW1vdmUtcm9sZS1mcm9tLXByaXZpbGVnZXN8c2VjOnJlbW92ZS1yb2xlLWZyb20tYW1wc3xzZWM6cmVtb3ZlLXJvbGV8c2VjOnJlbW92ZS1wcml2aWxlZ2V8c2VjOnJlbW92ZS1hbXB8c2VjOnByb3RlY3QtY29sbGVjdGlvbnxzZWM6cHJpdmlsZWdlcy1jb2xsZWN0aW9ufHNlYzpwcml2aWxlZ2Utc2V0LXJvbGVzfHNlYzpwcml2aWxlZ2Utc2V0LW5hbWV8c2VjOnByaXZpbGVnZS1yZW1vdmUtcm9sZXN8c2VjOnByaXZpbGVnZS1nZXQtcm9sZXN8c2VjOnByaXZpbGVnZS1hZGQtcm9sZXN8c2VjOnByaXYtZG9jLXBlcm1pc3Npb25zfHNlYzpwcml2LWRvYy1jb2xsZWN0aW9uc3xzZWM6Z2V0LXVzZXItbmFtZXN8c2VjOmdldC11bmlxdWUtZWxlbS1pZHxzZWM6Z2V0LXJvbGUtbmFtZXN8c2VjOmdldC1yb2xlLWlkc3xzZWM6Z2V0LXByaXZpbGVnZXxzZWM6Z2V0LWRpc3RpbmN0LXBlcm1pc3Npb25zfHNlYzpnZXQtY29sbGVjdGlvbnxzZWM6Z2V0LWFtcHxzZWM6Y3JlYXRlLXVzZXItd2l0aC1yb2xlfHNlYzpjcmVhdGUtdXNlcnxzZWM6Y3JlYXRlLXJvbGV8c2VjOmNyZWF0ZS1wcml2aWxlZ2V8c2VjOmNyZWF0ZS1hbXB8c2VjOmNvbGxlY3Rpb25zLWNvbGxlY3Rpb258c2VjOmNvbGxlY3Rpb24tc2V0LXBlcm1pc3Npb25zfHNlYzpjb2xsZWN0aW9uLXJlbW92ZS1wZXJtaXNzaW9uc3xzZWM6Y29sbGVjdGlvbi1nZXQtcGVybWlzc2lvbnN8c2VjOmNvbGxlY3Rpb24tYWRkLXBlcm1pc3Npb25zfHNlYzpjaGVjay1hZG1pbnxzZWM6YW1wcy1jb2xsZWN0aW9ufHNlYzphbXAtc2V0LXJvbGVzfHNlYzphbXAtcmVtb3ZlLXJvbGVzfHNlYzphbXAtZ2V0LXJvbGVzfHNlYzphbXAtZG9jLXBlcm1pc3Npb25zfHNlYzphbXAtZG9jLWNvbGxlY3Rpb25zfHNlYzphbXAtYWRkLXJvbGVzfHNlYXJjaDp1bnBhcnNlfHNlYXJjaDpzdWdnZXN0fHNlYXJjaDpzbmlwcGV0fHNlYXJjaDpzZWFyY2h8c2VhcmNoOnJlc29sdmUtbm9kZXN8c2VhcmNoOnJlc29sdmV8c2VhcmNoOnJlbW92ZS1jb25zdHJhaW50fHNlYXJjaDpwYXJzZXxzZWFyY2g6Z2V0LWRlZmF1bHQtb3B0aW9uc3xzZWFyY2g6ZXN0aW1hdGV8c2VhcmNoOmNoZWNrLW9wdGlvbnN8cHJvZjp2YWx1ZXxwcm9mOnJlc2V0fHByb2Y6cmVwb3J0fHByb2Y6aW52b2tlfHByb2Y6ZXZhbHxwcm9mOmVuYWJsZXxwcm9mOmRpc2FibGV8cHJvZjphbGxvd2VkfHBwdDpjbGVhbnxwa2k6dGVtcGxhdGUtc2V0LXJlcXVlc3R8cGtpOnRlbXBsYXRlLXNldC1uYW1lfHBraTp0ZW1wbGF0ZS1zZXQta2V5LXR5cGV8cGtpOnRlbXBsYXRlLXNldC1rZXktb3B0aW9uc3xwa2k6dGVtcGxhdGUtc2V0LWRlc2NyaXB0aW9ufHBraTp0ZW1wbGF0ZS1pbi11c2V8cGtpOnRlbXBsYXRlLWdldC12ZXJzaW9ufHBraTp0ZW1wbGF0ZS1nZXQtcmVxdWVzdHxwa2k6dGVtcGxhdGUtZ2V0LW5hbWV8cGtpOnRlbXBsYXRlLWdldC1rZXktdHlwZXxwa2k6dGVtcGxhdGUtZ2V0LWtleS1vcHRpb25zfHBraTp0ZW1wbGF0ZS1nZXQtaWR8cGtpOnRlbXBsYXRlLWdldC1kZXNjcmlwdGlvbnxwa2k6bmVlZC1jZXJ0aWZpY2F0ZXxwa2k6aXMtdGVtcG9yYXJ5fHBraTppbnNlcnQtdHJ1c3RlZC1jZXJ0aWZpY2F0ZXN8cGtpOmluc2VydC10ZW1wbGF0ZXxwa2k6aW5zZXJ0LXNpZ25lZC1jZXJ0aWZpY2F0ZXN8cGtpOmluc2VydC1jZXJ0aWZpY2F0ZS1yZXZvY2F0aW9uLWxpc3R8cGtpOmdldC10cnVzdGVkLWNlcnRpZmljYXRlLWlkc3xwa2k6Z2V0LXRlbXBsYXRlLWlkc3xwa2k6Z2V0LXRlbXBsYXRlLWNlcnRpZmljYXRlLWF1dGhvcml0eXxwa2k6Z2V0LXRlbXBsYXRlLWJ5LW5hbWV8cGtpOmdldC10ZW1wbGF0ZXxwa2k6Z2V0LXBlbmRpbmctY2VydGlmaWNhdGUtcmVxdWVzdHMteG1sfHBraTpnZXQtcGVuZGluZy1jZXJ0aWZpY2F0ZS1yZXF1ZXN0cy1wZW18cGtpOmdldC1wZW5kaW5nLWNlcnRpZmljYXRlLXJlcXVlc3R8cGtpOmdldC1jZXJ0aWZpY2F0ZXMtZm9yLXRlbXBsYXRlLXhtbHxwa2k6Z2V0LWNlcnRpZmljYXRlcy1mb3ItdGVtcGxhdGV8cGtpOmdldC1jZXJ0aWZpY2F0ZXN8cGtpOmdldC1jZXJ0aWZpY2F0ZS14bWx8cGtpOmdldC1jZXJ0aWZpY2F0ZS1wZW18cGtpOmdldC1jZXJ0aWZpY2F0ZXxwa2k6Z2VuZXJhdGUtdGVtcG9yYXJ5LWNlcnRpZmljYXRlLWlmLW5lY2Vzc2FyeXxwa2k6Z2VuZXJhdGUtdGVtcG9yYXJ5LWNlcnRpZmljYXRlfHBraTpnZW5lcmF0ZS10ZW1wbGF0ZS1jZXJ0aWZpY2F0ZS1hdXRob3JpdHl8cGtpOmdlbmVyYXRlLWNlcnRpZmljYXRlLXJlcXVlc3R8cGtpOmRlbGV0ZS10ZW1wbGF0ZXxwa2k6ZGVsZXRlLWNlcnRpZmljYXRlfHBraTpjcmVhdGUtdGVtcGxhdGV8cGRmOm1ha2UtdG9jfHBkZjppbnNlcnQtdG9jLWhlYWRlcnN8cGRmOmdldC10b2N8cGRmOmNsZWFufHA6c3RhdHVzLXRyYW5zaXRpb258cDpzdGF0ZS10cmFuc2l0aW9ufHA6cmVtb3ZlfHA6cGlwZWxpbmVzfHA6aW5zZXJ0fHA6Z2V0LWJ5LWlkfHA6Z2V0fHA6ZXhlY3V0ZXxwOmNyZWF0ZXxwOmNvbmRpdGlvbnxwOmNvbGxlY3Rpb258cDphY3Rpb258b294bWw6cnVucy1tZXJnZXxvb3htbDpwYWNrYWdlLXVyaXN8b294bWw6cGFja2FnZS1wYXJ0cy1pbnNlcnR8b294bWw6cGFja2FnZS1wYXJ0c3xtc3dvcmQ6Y2xlYW58bWNnbTpwb2x5Z29ufG1jZ206cG9pbnR8bWNnbTpnZW9zcGF0aWFsLXF1ZXJ5LWZyb20tZWxlbWVudHN8bWNnbTpnZW9zcGF0aWFsLXF1ZXJ5fG1jZ206Y2lyY2xlfG1hdGg6dGFuaHxtYXRoOnRhbnxtYXRoOnNxcnR8bWF0aDpzaW5ofG1hdGg6c2lufG1hdGg6cG93fG1hdGg6bW9kZnxtYXRoOmxvZzEwfG1hdGg6bG9nfG1hdGg6bGRleHB8bWF0aDpmcmV4cHxtYXRoOmZtb2R8bWF0aDpmbG9vcnxtYXRoOmZhYnN8bWF0aDpleHB8bWF0aDpjb3NofG1hdGg6Y29zfG1hdGg6Y2VpbHxtYXRoOmF0YW4yfG1hdGg6YXRhbnxtYXRoOmFzaW58bWF0aDphY29zfG1hcDpwdXR8bWFwOm1hcHxtYXA6a2V5c3xtYXA6Z2V0fG1hcDpkZWxldGV8bWFwOmNvdW50fG1hcDpjbGVhcnxsbms6dG98bG5rOnJlbW92ZXxsbms6aW5zZXJ0fGxuazpnZXR8bG5rOmZyb218bG5rOmNyZWF0ZXxrbWw6cG9seWdvbnxrbWw6cG9pbnR8a21sOmludGVyaW9yLXBvbHlnb258a21sOmdlb3NwYXRpYWwtcXVlcnktZnJvbS1lbGVtZW50c3xrbWw6Z2Vvc3BhdGlhbC1xdWVyeXxrbWw6Y2lyY2xlfGttbDpib3h8Z21sOnBvbHlnb258Z21sOnBvaW50fGdtbDppbnRlcmlvci1wb2x5Z29ufGdtbDpnZW9zcGF0aWFsLXF1ZXJ5LWZyb20tZWxlbWVudHN8Z21sOmdlb3NwYXRpYWwtcXVlcnl8Z21sOmNpcmNsZXxnbWw6Ym94fGdlb3Jzczpwb2ludHxnZW9yc3M6Z2Vvc3BhdGlhbC1xdWVyeXxnZW9yc3M6Y2lyY2xlfGdlbzpwb2x5Z29ufGdlbzpwb2ludHxnZW86aW50ZXJpb3ItcG9seWdvbnxnZW86Z2Vvc3BhdGlhbC1xdWVyeS1mcm9tLWVsZW1lbnRzfGdlbzpnZW9zcGF0aWFsLXF1ZXJ5fGdlbzpjaXJjbGV8Z2VvOmJveHxmbjp6ZXJvLW9yLW9uZXxmbjp5ZWFycy1mcm9tLWR1cmF0aW9ufGZuOnllYXItZnJvbS1kYXRlVGltZXxmbjp5ZWFyLWZyb20tZGF0ZXxmbjp1cHBlci1jYXNlfGZuOnVub3JkZXJlZHxmbjp0cnVlfGZuOnRyYW5zbGF0ZXxmbjp0cmFjZXxmbjp0b2tlbml6ZXxmbjp0aW1lem9uZS1mcm9tLXRpbWV8Zm46dGltZXpvbmUtZnJvbS1kYXRlVGltZXxmbjp0aW1lem9uZS1mcm9tLWRhdGV8Zm46c3VtfGZuOnN1YnRyYWN0LWRhdGVUaW1lcy15aWVsZGluZy15ZWFyTW9udGhEdXJhdGlvbnxmbjpzdWJ0cmFjdC1kYXRlVGltZXMteWllbGRpbmctZGF5VGltZUR1cmF0aW9ufGZuOnN1YnN0cmluZy1iZWZvcmV8Zm46c3Vic3RyaW5nLWFmdGVyfGZuOnN1YnN0cmluZ3xmbjpzdWJzZXF1ZW5jZXxmbjpzdHJpbmctdG8tY29kZXBvaW50c3xmbjpzdHJpbmctcGFkfGZuOnN0cmluZy1sZW5ndGh8Zm46c3RyaW5nLWpvaW58Zm46c3RyaW5nfGZuOnN0YXRpYy1iYXNlLXVyaXxmbjpzdGFydHMtd2l0aHxmbjpzZWNvbmRzLWZyb20tdGltZXxmbjpzZWNvbmRzLWZyb20tZHVyYXRpb258Zm46c2Vjb25kcy1mcm9tLWRhdGVUaW1lfGZuOnJvdW5kLWhhbGYtdG8tZXZlbnxmbjpyb3VuZHxmbjpyb290fGZuOnJldmVyc2V8Zm46cmVzb2x2ZS11cml8Zm46cmVzb2x2ZS1RTmFtZXxmbjpyZXBsYWNlfGZuOnJlbW92ZXxmbjpRTmFtZXxmbjpwcmVmaXgtZnJvbS1RTmFtZXxmbjpwb3NpdGlvbnxmbjpvbmUtb3ItbW9yZXxmbjpudW1iZXJ8Zm46bm90fGZuOm5vcm1hbGl6ZS11bmljb2RlfGZuOm5vcm1hbGl6ZS1zcGFjZXxmbjpub2RlLW5hbWV8Zm46bm9kZS1raW5kfGZuOm5pbGxlZHxmbjpuYW1lc3BhY2UtdXJpLWZyb20tUU5hbWV8Zm46bmFtZXNwYWNlLXVyaS1mb3ItcHJlZml4fGZuOm5hbWVzcGFjZS11cml8Zm46bmFtZXxmbjptb250aHMtZnJvbS1kdXJhdGlvbnxmbjptb250aC1mcm9tLWRhdGVUaW1lfGZuOm1vbnRoLWZyb20tZGF0ZXxmbjptaW51dGVzLWZyb20tdGltZXxmbjptaW51dGVzLWZyb20tZHVyYXRpb258Zm46bWludXRlcy1mcm9tLWRhdGVUaW1lfGZuOm1pbnxmbjptYXh8Zm46bWF0Y2hlc3xmbjpsb3dlci1jYXNlfGZuOmxvY2FsLW5hbWUtZnJvbS1RTmFtZXxmbjpsb2NhbC1uYW1lfGZuOmxhc3R8Zm46bGFuZ3xmbjppcmktdG8tdXJpfGZuOmluc2VydC1iZWZvcmV8Zm46aW5kZXgtb2Z8Zm46aW4tc2NvcGUtcHJlZml4ZXN8Zm46aW1wbGljaXQtdGltZXpvbmV8Zm46aWRyZWZ8Zm46aWR8Zm46aG91cnMtZnJvbS10aW1lfGZuOmhvdXJzLWZyb20tZHVyYXRpb258Zm46aG91cnMtZnJvbS1kYXRlVGltZXxmbjpmbG9vcnxmbjpmYWxzZXxmbjpleHBhbmRlZC1RTmFtZXxmbjpleGlzdHN8Zm46ZXhhY3RseS1vbmV8Zm46ZXNjYXBlLXVyaXxmbjplc2NhcGUtaHRtbC11cml8Zm46ZXJyb3J8Zm46ZW5kcy13aXRofGZuOmVuY29kZS1mb3ItdXJpfGZuOmVtcHR5fGZuOmRvY3VtZW50LXVyaXxmbjpkb2MtYXZhaWxhYmxlfGZuOmRvY3xmbjpkaXN0aW5jdC12YWx1ZXN8Zm46ZGlzdGluY3Qtbm9kZXN8Zm46ZGVmYXVsdC1jb2xsYXRpb258Zm46ZGVlcC1lcXVhbHxmbjpkYXlzLWZyb20tZHVyYXRpb258Zm46ZGF5LWZyb20tZGF0ZVRpbWV8Zm46ZGF5LWZyb20tZGF0ZXxmbjpkYXRhfGZuOmN1cnJlbnQtdGltZXxmbjpjdXJyZW50LWRhdGVUaW1lfGZuOmN1cnJlbnQtZGF0ZXxmbjpjb3VudHxmbjpjb250YWluc3xmbjpjb25jYXR8Zm46Y29tcGFyZXxmbjpjb2xsZWN0aW9ufGZuOmNvZGVwb2ludHMtdG8tc3RyaW5nfGZuOmNvZGVwb2ludC1lcXVhbHxmbjpjZWlsaW5nfGZuOmJvb2xlYW58Zm46YmFzZS11cml8Zm46YXZnfGZuOmFkanVzdC10aW1lLXRvLXRpbWV6b25lfGZuOmFkanVzdC1kYXRlVGltZS10by10aW1lem9uZXxmbjphZGp1c3QtZGF0ZS10by10aW1lem9uZXxmbjphYnN8ZmVlZDp1bnN1YnNjcmliZXxmZWVkOnN1YnNjcmlwdGlvbnxmZWVkOnN1YnNjcmliZXxmZWVkOnJlcXVlc3R8ZmVlZDppdGVtfGZlZWQ6ZGVzY3JpcHRpb258ZXhjZWw6Y2xlYW58ZW50aXR5OmVucmljaHxkb206c2V0LXBpcGVsaW5lc3xkb206c2V0LXBlcm1pc3Npb25zfGRvbTpzZXQtbmFtZXxkb206c2V0LWV2YWx1YXRpb24tY29udGV4dHxkb206c2V0LWRvbWFpbi1zY29wZXxkb206c2V0LWRlc2NyaXB0aW9ufGRvbTpyZW1vdmUtcGlwZWxpbmV8ZG9tOnJlbW92ZS1wZXJtaXNzaW9uc3xkb206cmVtb3ZlfGRvbTpnZXR8ZG9tOmV2YWx1YXRpb24tY29udGV4dHxkb206ZG9tYWluc3xkb206ZG9tYWluLXNjb3BlfGRvbTpjcmVhdGV8ZG9tOmNvbmZpZ3VyYXRpb24tc2V0LXJlc3RhcnQtdXNlcnxkb206Y29uZmlndXJhdGlvbi1zZXQtcGVybWlzc2lvbnN8ZG9tOmNvbmZpZ3VyYXRpb24tc2V0LWV2YWx1YXRpb24tY29udGV4dHxkb206Y29uZmlndXJhdGlvbi1zZXQtZGVmYXVsdC1kb21haW58ZG9tOmNvbmZpZ3VyYXRpb24tZ2V0fGRvbTpjb25maWd1cmF0aW9uLWNyZWF0ZXxkb206Y29sbGVjdGlvbnxkb206YWRkLXBpcGVsaW5lfGRvbTphZGQtcGVybWlzc2lvbnN8ZGxzOnJldGVudGlvbi1ydWxlc3xkbHM6cmV0ZW50aW9uLXJ1bGUtcmVtb3ZlfGRsczpyZXRlbnRpb24tcnVsZS1pbnNlcnR8ZGxzOnJldGVudGlvbi1ydWxlfGRsczpwdXJnZXxkbHM6bm9kZS1leHBhbmR8ZGxzOmxpbmstcmVmZXJlbmNlc3xkbHM6bGluay1leHBhbmR8ZGxzOmRvY3VtZW50cy1xdWVyeXxkbHM6ZG9jdW1lbnQtdmVyc2lvbnMtcXVlcnl8ZGxzOmRvY3VtZW50LXZlcnNpb24tdXJpfGRsczpkb2N1bWVudC12ZXJzaW9uLXF1ZXJ5fGRsczpkb2N1bWVudC12ZXJzaW9uLWRlbGV0ZXxkbHM6ZG9jdW1lbnQtdmVyc2lvbi1hcy1vZnxkbHM6ZG9jdW1lbnQtdmVyc2lvbnxkbHM6ZG9jdW1lbnQtdXBkYXRlfGRsczpkb2N1bWVudC11bm1hbmFnZXxkbHM6ZG9jdW1lbnQtc2V0LXF1YWxpdHl8ZGxzOmRvY3VtZW50LXNldC1wcm9wZXJ0eXxkbHM6ZG9jdW1lbnQtc2V0LXByb3BlcnRpZXN8ZGxzOmRvY3VtZW50LXNldC1wZXJtaXNzaW9uc3xkbHM6ZG9jdW1lbnQtc2V0LWNvbGxlY3Rpb25zfGRsczpkb2N1bWVudC1yZXRlbnRpb24tcnVsZXN8ZGxzOmRvY3VtZW50LXJlbW92ZS1wcm9wZXJ0aWVzfGRsczpkb2N1bWVudC1yZW1vdmUtcGVybWlzc2lvbnN8ZGxzOmRvY3VtZW50LXJlbW92ZS1jb2xsZWN0aW9uc3xkbHM6ZG9jdW1lbnQtcHVyZ2V8ZGxzOmRvY3VtZW50LW1hbmFnZXxkbHM6ZG9jdW1lbnQtaXMtbWFuYWdlZHxkbHM6ZG9jdW1lbnQtaW5zZXJ0LWFuZC1tYW5hZ2V8ZGxzOmRvY3VtZW50LWluY2x1ZGUtcXVlcnl8ZGxzOmRvY3VtZW50LWhpc3Rvcnl8ZGxzOmRvY3VtZW50LWdldC1wZXJtaXNzaW9uc3xkbHM6ZG9jdW1lbnQtZXh0cmFjdC1wYXJ0fGRsczpkb2N1bWVudC1kZWxldGV8ZGxzOmRvY3VtZW50LWNoZWNrb3V0LXN0YXR1c3xkbHM6ZG9jdW1lbnQtY2hlY2tvdXR8ZGxzOmRvY3VtZW50LWNoZWNraW58ZGxzOmRvY3VtZW50LWFkZC1wcm9wZXJ0aWVzfGRsczpkb2N1bWVudC1hZGQtcGVybWlzc2lvbnN8ZGxzOmRvY3VtZW50LWFkZC1jb2xsZWN0aW9uc3xkbHM6YnJlYWstY2hlY2tvdXR8ZGxzOmF1dGhvci1xdWVyeXxkbHM6YXMtb2YtcXVlcnl8ZGJrOmNvbnZlcnR8ZGJnOndhaXR8ZGJnOnZhbHVlfGRiZzpzdG9wcGVkfGRiZzpzdG9wfGRiZzpzdGVwfGRiZzpzdGF0dXN8ZGJnOnN0YWNrfGRiZzpvdXR8ZGJnOm5leHR8ZGJnOmxpbmV8ZGJnOmludm9rZXxkYmc6ZnVuY3Rpb258ZGJnOmZpbmlzaHxkYmc6ZXhwcnxkYmc6ZXZhbHxkYmc6ZGlzY29ubmVjdHxkYmc6ZGV0YWNofGRiZzpjb250aW51ZXxkYmc6Y29ubmVjdHxkYmc6Y2xlYXJ8ZGJnOmJyZWFrcG9pbnRzfGRiZzpicmVha3xkYmc6YXR0YWNoZWR8ZGJnOmF0dGFjaHxjdnQ6c2F2ZS1jb252ZXJ0ZWQtZG9jdW1lbnRzfGN2dDpwYXJ0LXVyaXxjdnQ6ZGVzdGluYXRpb24tdXJpfGN2dDpiYXNlcGF0aHxjdnQ6YmFzZW5hbWV8Y3RzOndvcmRzfGN0czp3b3JkLXF1ZXJ5LXdlaWdodHxjdHM6d29yZC1xdWVyeS10ZXh0fGN0czp3b3JkLXF1ZXJ5LW9wdGlvbnN8Y3RzOndvcmQtcXVlcnl8Y3RzOndvcmQtbWF0Y2h8Y3RzOndhbGt8Y3RzOnVyaXN8Y3RzOnVyaS1tYXRjaHxjdHM6dHJhaW58Y3RzOnRva2VuaXplfGN0czp0aHJlc2hvbGRzfGN0czpzdGVtfGN0czpzaW1pbGFyLXF1ZXJ5LXdlaWdodHxjdHM6c2ltaWxhci1xdWVyeS1ub2Rlc3xjdHM6c2ltaWxhci1xdWVyeXxjdHM6c2hvcnRlc3QtZGlzdGFuY2V8Y3RzOnNlYXJjaHxjdHM6c2NvcmV8Y3RzOnJldmVyc2UtcXVlcnktd2VpZ2h0fGN0czpyZXZlcnNlLXF1ZXJ5LW5vZGVzfGN0czpyZXZlcnNlLXF1ZXJ5fGN0czpyZW1haW5kZXJ8Y3RzOnJlZ2lzdGVyZWQtcXVlcnktd2VpZ2h0fGN0czpyZWdpc3RlcmVkLXF1ZXJ5LW9wdGlvbnN8Y3RzOnJlZ2lzdGVyZWQtcXVlcnktaWRzfGN0czpyZWdpc3RlcmVkLXF1ZXJ5fGN0czpyZWdpc3RlcnxjdHM6cXVlcnl8Y3RzOnF1YWxpdHl8Y3RzOnByb3BlcnRpZXMtcXVlcnktcXVlcnl8Y3RzOnByb3BlcnRpZXMtcXVlcnl8Y3RzOnBvbHlnb24tdmVydGljZXN8Y3RzOnBvbHlnb258Y3RzOnBvaW50LWxvbmdpdHVkZXxjdHM6cG9pbnQtbGF0aXR1ZGV8Y3RzOnBvaW50fGN0czpvci1xdWVyeS1xdWVyaWVzfGN0czpvci1xdWVyeXxjdHM6bm90LXF1ZXJ5LXdlaWdodHxjdHM6bm90LXF1ZXJ5LXF1ZXJ5fGN0czpub3QtcXVlcnl8Y3RzOm5lYXItcXVlcnktd2VpZ2h0fGN0czpuZWFyLXF1ZXJ5LXF1ZXJpZXN8Y3RzOm5lYXItcXVlcnktb3B0aW9uc3xjdHM6bmVhci1xdWVyeS1kaXN0YW5jZXxjdHM6bmVhci1xdWVyeXxjdHM6aGlnaGxpZ2h0fGN0czpnZW9zcGF0aWFsLWNvLW9jY3VycmVuY2VzfGN0czpmcmVxdWVuY3l8Y3RzOmZpdG5lc3N8Y3RzOmZpZWxkLXdvcmRzfGN0czpmaWVsZC13b3JkLXF1ZXJ5LXdlaWdodHxjdHM6ZmllbGQtd29yZC1xdWVyeS10ZXh0fGN0czpmaWVsZC13b3JkLXF1ZXJ5LW9wdGlvbnN8Y3RzOmZpZWxkLXdvcmQtcXVlcnktZmllbGQtbmFtZXxjdHM6ZmllbGQtd29yZC1xdWVyeXxjdHM6ZmllbGQtd29yZC1tYXRjaHxjdHM6ZW50aXR5LWhpZ2hsaWdodHxjdHM6ZWxlbWVudC13b3Jkc3xjdHM6ZWxlbWVudC13b3JkLXF1ZXJ5LXdlaWdodHxjdHM6ZWxlbWVudC13b3JkLXF1ZXJ5LXRleHR8Y3RzOmVsZW1lbnQtd29yZC1xdWVyeS1vcHRpb25zfGN0czplbGVtZW50LXdvcmQtcXVlcnktZWxlbWVudC1uYW1lfGN0czplbGVtZW50LXdvcmQtcXVlcnl8Y3RzOmVsZW1lbnQtd29yZC1tYXRjaHxjdHM6ZWxlbWVudC12YWx1ZXN8Y3RzOmVsZW1lbnQtdmFsdWUtcmFuZ2VzfGN0czplbGVtZW50LXZhbHVlLXF1ZXJ5LXdlaWdodHxjdHM6ZWxlbWVudC12YWx1ZS1xdWVyeS10ZXh0fGN0czplbGVtZW50LXZhbHVlLXF1ZXJ5LW9wdGlvbnN8Y3RzOmVsZW1lbnQtdmFsdWUtcXVlcnktZWxlbWVudC1uYW1lfGN0czplbGVtZW50LXZhbHVlLXF1ZXJ5fGN0czplbGVtZW50LXZhbHVlLW1hdGNofGN0czplbGVtZW50LXZhbHVlLWdlb3NwYXRpYWwtY28tb2NjdXJyZW5jZXN8Y3RzOmVsZW1lbnQtdmFsdWUtY28tb2NjdXJyZW5jZXN8Y3RzOmVsZW1lbnQtcmFuZ2UtcXVlcnktd2VpZ2h0fGN0czplbGVtZW50LXJhbmdlLXF1ZXJ5LXZhbHVlfGN0czplbGVtZW50LXJhbmdlLXF1ZXJ5LW9wdGlvbnN8Y3RzOmVsZW1lbnQtcmFuZ2UtcXVlcnktb3BlcmF0b3J8Y3RzOmVsZW1lbnQtcmFuZ2UtcXVlcnktZWxlbWVudC1uYW1lfGN0czplbGVtZW50LXJhbmdlLXF1ZXJ5fGN0czplbGVtZW50LXF1ZXJ5LXF1ZXJ5fGN0czplbGVtZW50LXF1ZXJ5LWVsZW1lbnQtbmFtZXxjdHM6ZWxlbWVudC1xdWVyeXxjdHM6ZWxlbWVudC1wYWlyLWdlb3NwYXRpYWwtdmFsdWVzfGN0czplbGVtZW50LXBhaXItZ2Vvc3BhdGlhbC12YWx1ZS1tYXRjaHxjdHM6ZWxlbWVudC1wYWlyLWdlb3NwYXRpYWwtcXVlcnktd2VpZ2h0fGN0czplbGVtZW50LXBhaXItZ2Vvc3BhdGlhbC1xdWVyeS1yZWdpb258Y3RzOmVsZW1lbnQtcGFpci1nZW9zcGF0aWFsLXF1ZXJ5LW9wdGlvbnN8Y3RzOmVsZW1lbnQtcGFpci1nZW9zcGF0aWFsLXF1ZXJ5LWxvbmdpdHVkZS1uYW1lfGN0czplbGVtZW50LXBhaXItZ2Vvc3BhdGlhbC1xdWVyeS1sYXRpdHVkZS1uYW1lfGN0czplbGVtZW50LXBhaXItZ2Vvc3BhdGlhbC1xdWVyeS1lbGVtZW50LW5hbWV8Y3RzOmVsZW1lbnQtcGFpci1nZW9zcGF0aWFsLXF1ZXJ5fGN0czplbGVtZW50LXBhaXItZ2Vvc3BhdGlhbC1ib3hlc3xjdHM6ZWxlbWVudC1nZW9zcGF0aWFsLXZhbHVlc3xjdHM6ZWxlbWVudC1nZW9zcGF0aWFsLXZhbHVlLW1hdGNofGN0czplbGVtZW50LWdlb3NwYXRpYWwtcXVlcnktd2VpZ2h0fGN0czplbGVtZW50LWdlb3NwYXRpYWwtcXVlcnktcmVnaW9ufGN0czplbGVtZW50LWdlb3NwYXRpYWwtcXVlcnktb3B0aW9uc3xjdHM6ZWxlbWVudC1nZW9zcGF0aWFsLXF1ZXJ5LWVsZW1lbnQtbmFtZXxjdHM6ZWxlbWVudC1nZW9zcGF0aWFsLXF1ZXJ5fGN0czplbGVtZW50LWdlb3NwYXRpYWwtYm94ZXN8Y3RzOmVsZW1lbnQtY2hpbGQtZ2Vvc3BhdGlhbC12YWx1ZXN8Y3RzOmVsZW1lbnQtY2hpbGQtZ2Vvc3BhdGlhbC12YWx1ZS1tYXRjaHxjdHM6ZWxlbWVudC1jaGlsZC1nZW9zcGF0aWFsLXF1ZXJ5LXdlaWdodHxjdHM6ZWxlbWVudC1jaGlsZC1nZW9zcGF0aWFsLXF1ZXJ5LXJlZ2lvbnxjdHM6ZWxlbWVudC1jaGlsZC1nZW9zcGF0aWFsLXF1ZXJ5LW9wdGlvbnN8Y3RzOmVsZW1lbnQtY2hpbGQtZ2Vvc3BhdGlhbC1xdWVyeS1lbGVtZW50LW5hbWV8Y3RzOmVsZW1lbnQtY2hpbGQtZ2Vvc3BhdGlhbC1xdWVyeS1jaGlsZC1uYW1lfGN0czplbGVtZW50LWNoaWxkLWdlb3NwYXRpYWwtcXVlcnl8Y3RzOmVsZW1lbnQtY2hpbGQtZ2Vvc3BhdGlhbC1ib3hlc3xjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtd29yZHN8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXdvcmQtcXVlcnktd2VpZ2h0fGN0czplbGVtZW50LWF0dHJpYnV0ZS13b3JkLXF1ZXJ5LXRleHR8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXdvcmQtcXVlcnktb3B0aW9uc3xjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtd29yZC1xdWVyeS1lbGVtZW50LW5hbWV8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXdvcmQtcXVlcnktYXR0cmlidXRlLW5hbWV8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXdvcmQtcXVlcnl8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXdvcmQtbWF0Y2h8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXZhbHVlc3xjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtdmFsdWUtcmFuZ2VzfGN0czplbGVtZW50LWF0dHJpYnV0ZS12YWx1ZS1xdWVyeS13ZWlnaHR8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXZhbHVlLXF1ZXJ5LXRleHR8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXZhbHVlLXF1ZXJ5LW9wdGlvbnN8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXZhbHVlLXF1ZXJ5LWVsZW1lbnQtbmFtZXxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtdmFsdWUtcXVlcnktYXR0cmlidXRlLW5hbWV8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXZhbHVlLXF1ZXJ5fGN0czplbGVtZW50LWF0dHJpYnV0ZS12YWx1ZS1tYXRjaHxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtdmFsdWUtZ2Vvc3BhdGlhbC1jby1vY2N1cnJlbmNlc3xjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtdmFsdWUtY28tb2NjdXJyZW5jZXN8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXJhbmdlLXF1ZXJ5LXdlaWdodHxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcmFuZ2UtcXVlcnktdmFsdWV8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXJhbmdlLXF1ZXJ5LW9wdGlvbnN8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXJhbmdlLXF1ZXJ5LW9wZXJhdG9yfGN0czplbGVtZW50LWF0dHJpYnV0ZS1yYW5nZS1xdWVyeS1lbGVtZW50LW5hbWV8Y3RzOmVsZW1lbnQtYXR0cmlidXRlLXJhbmdlLXF1ZXJ5LWF0dHJpYnV0ZS1uYW1lfGN0czplbGVtZW50LWF0dHJpYnV0ZS1yYW5nZS1xdWVyeXxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcGFpci1nZW9zcGF0aWFsLXZhbHVlc3xjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcGFpci1nZW9zcGF0aWFsLXZhbHVlLW1hdGNofGN0czplbGVtZW50LWF0dHJpYnV0ZS1wYWlyLWdlb3NwYXRpYWwtcXVlcnktd2VpZ2h0fGN0czplbGVtZW50LWF0dHJpYnV0ZS1wYWlyLWdlb3NwYXRpYWwtcXVlcnktcmVnaW9ufGN0czplbGVtZW50LWF0dHJpYnV0ZS1wYWlyLWdlb3NwYXRpYWwtcXVlcnktb3B0aW9uc3xjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcGFpci1nZW9zcGF0aWFsLXF1ZXJ5LWxvbmdpdHVkZS1uYW1lfGN0czplbGVtZW50LWF0dHJpYnV0ZS1wYWlyLWdlb3NwYXRpYWwtcXVlcnktbGF0aXR1ZGUtbmFtZXxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcGFpci1nZW9zcGF0aWFsLXF1ZXJ5LWVsZW1lbnQtbmFtZXxjdHM6ZWxlbWVudC1hdHRyaWJ1dGUtcGFpci1nZW9zcGF0aWFsLXF1ZXJ5fGN0czplbGVtZW50LWF0dHJpYnV0ZS1wYWlyLWdlb3NwYXRpYWwtYm94ZXN8Y3RzOmRvY3VtZW50LXF1ZXJ5LXVyaXN8Y3RzOmRvY3VtZW50LXF1ZXJ5fGN0czpkaXN0YW5jZXxjdHM6ZGlyZWN0b3J5LXF1ZXJ5LXVyaXN8Y3RzOmRpcmVjdG9yeS1xdWVyeS1kZXB0aHxjdHM6ZGlyZWN0b3J5LXF1ZXJ5fGN0czpkZXN0aW5hdGlvbnxjdHM6ZGVyZWdpc3RlcnxjdHM6Y29udGFpbnN8Y3RzOmNvbmZpZGVuY2V8Y3RzOmNvbGxlY3Rpb25zfGN0czpjb2xsZWN0aW9uLXF1ZXJ5LXVyaXN8Y3RzOmNvbGxlY3Rpb24tcXVlcnl8Y3RzOmNvbGxlY3Rpb24tbWF0Y2h8Y3RzOmNsYXNzaWZ5fGN0czpjaXJjbGUtcmFkaXVzfGN0czpjaXJjbGUtY2VudGVyfGN0czpjaXJjbGV8Y3RzOmJveC13ZXN0fGN0czpib3gtc291dGh8Y3RzOmJveC1ub3J0aHxjdHM6Ym94LWVhc3R8Y3RzOmJveHxjdHM6YmVhcmluZ3xjdHM6YXJjLWludGVyc2VjdGlvbnxjdHM6YW5kLXF1ZXJ5LXF1ZXJpZXN8Y3RzOmFuZC1xdWVyeS1vcHRpb25zfGN0czphbmQtcXVlcnl8Y3RzOmFuZC1ub3QtcXVlcnktcG9zaXRpdmUtcXVlcnl8Y3RzOmFuZC1ub3QtcXVlcnktbmVnYXRpdmUtcXVlcnl8Y3RzOmFuZC1ub3QtcXVlcnl8Y3NzOmdldHxjc3M6Y29udmVydHxjcGY6c3VjY2Vzc3xjcGY6ZmFpbHVyZXxjcGY6ZG9jdW1lbnQtc2V0LXN0YXRlfGNwZjpkb2N1bWVudC1zZXQtcHJvY2Vzc2luZy1zdGF0dXN8Y3BmOmRvY3VtZW50LXNldC1sYXN0LXVwZGF0ZWR8Y3BmOmRvY3VtZW50LXNldC1lcnJvcnxjcGY6ZG9jdW1lbnQtZ2V0LXN0YXRlfGNwZjpkb2N1bWVudC1nZXQtcHJvY2Vzc2luZy1zdGF0dXN8Y3BmOmRvY3VtZW50LWdldC1sYXN0LXVwZGF0ZWR8Y3BmOmRvY3VtZW50LWdldC1lcnJvcnxjcGY6Y2hlY2stdHJhbnNpdGlvbnxhbGVydDpzcGF3bi1tYXRjaGluZy1hY3Rpb25zfGFsZXJ0OnJ1bGUtdXNlci1pZC1xdWVyeXxhbGVydDpydWxlLXNldC11c2VyLWlkfGFsZXJ0OnJ1bGUtc2V0LXF1ZXJ5fGFsZXJ0OnJ1bGUtc2V0LW9wdGlvbnN8YWxlcnQ6cnVsZS1zZXQtbmFtZXxhbGVydDpydWxlLXNldC1kZXNjcmlwdGlvbnxhbGVydDpydWxlLXNldC1hY3Rpb258YWxlcnQ6cnVsZS1yZW1vdmV8YWxlcnQ6cnVsZS1uYW1lLXF1ZXJ5fGFsZXJ0OnJ1bGUtaW5zZXJ0fGFsZXJ0OnJ1bGUtaWQtcXVlcnl8YWxlcnQ6cnVsZS1nZXQtdXNlci1pZHxhbGVydDpydWxlLWdldC1xdWVyeXxhbGVydDpydWxlLWdldC1vcHRpb25zfGFsZXJ0OnJ1bGUtZ2V0LW5hbWV8YWxlcnQ6cnVsZS1nZXQtaWR8YWxlcnQ6cnVsZS1nZXQtZGVzY3JpcHRpb258YWxlcnQ6cnVsZS1nZXQtYWN0aW9ufGFsZXJ0OnJ1bGUtYWN0aW9uLXF1ZXJ5fGFsZXJ0OnJlbW92ZS10cmlnZ2Vyc3xhbGVydDptYWtlLXJ1bGV8YWxlcnQ6bWFrZS1sb2ctYWN0aW9ufGFsZXJ0Om1ha2UtY29uZmlnfGFsZXJ0Om1ha2UtYWN0aW9ufGFsZXJ0Omludm9rZS1tYXRjaGluZy1hY3Rpb25zfGFsZXJ0OmdldC1teS1ydWxlc3xhbGVydDpnZXQtYWxsLXJ1bGVzfGFsZXJ0OmdldC1hY3Rpb25zfGFsZXJ0OmZpbmQtbWF0Y2hpbmctcnVsZXN8YWxlcnQ6Y3JlYXRlLXRyaWdnZXJzfGFsZXJ0OmNvbmZpZy1zZXQtdXJpfGFsZXJ0OmNvbmZpZy1zZXQtdHJpZ2dlci1pZHN8YWxlcnQ6Y29uZmlnLXNldC1vcHRpb25zfGFsZXJ0OmNvbmZpZy1zZXQtbmFtZXxhbGVydDpjb25maWctc2V0LWRlc2NyaXB0aW9ufGFsZXJ0OmNvbmZpZy1zZXQtY3BmLWRvbWFpbi1uYW1lc3xhbGVydDpjb25maWctc2V0LWNwZi1kb21haW4taWRzfGFsZXJ0OmNvbmZpZy1pbnNlcnR8YWxlcnQ6Y29uZmlnLWdldC11cml8YWxlcnQ6Y29uZmlnLWdldC10cmlnZ2VyLWlkc3xhbGVydDpjb25maWctZ2V0LW9wdGlvbnN8YWxlcnQ6Y29uZmlnLWdldC1uYW1lfGFsZXJ0OmNvbmZpZy1nZXQtaWR8YWxlcnQ6Y29uZmlnLWdldC1kZXNjcmlwdGlvbnxhbGVydDpjb25maWctZ2V0LWNwZi1kb21haW4tbmFtZXN8YWxlcnQ6Y29uZmlnLWdldC1jcGYtZG9tYWluLWlkc3xhbGVydDpjb25maWctZ2V0fGFsZXJ0OmNvbmZpZy1kZWxldGV8YWxlcnQ6YWN0aW9uLXNldC1vcHRpb25zfGFsZXJ0OmFjdGlvbi1zZXQtbmFtZXxhbGVydDphY3Rpb24tc2V0LW1vZHVsZS1yb290fGFsZXJ0OmFjdGlvbi1zZXQtbW9kdWxlLWRifGFsZXJ0OmFjdGlvbi1zZXQtbW9kdWxlfGFsZXJ0OmFjdGlvbi1zZXQtZGVzY3JpcHRpb258YWxlcnQ6YWN0aW9uLXJlbW92ZXxhbGVydDphY3Rpb24taW5zZXJ0fGFsZXJ0OmFjdGlvbi1nZXQtb3B0aW9uc3xhbGVydDphY3Rpb24tZ2V0LW5hbWV8YWxlcnQ6YWN0aW9uLWdldC1tb2R1bGUtcm9vdHxhbGVydDphY3Rpb24tZ2V0LW1vZHVsZS1kYnxhbGVydDphY3Rpb24tZ2V0LW1vZHVsZXxhbGVydDphY3Rpb24tZ2V0LWRlc2NyaXB0aW9ufHplcm8tb3Itb25lfHllYXJzLWZyb20tZHVyYXRpb258eWVhci1mcm9tLWRhdGVUaW1lfHllYXItZnJvbS1kYXRlfHVwcGVyLWNhc2V8dW5vcmRlcmVkfHRydWV8dHJhbnNsYXRlfHRyYWNlfHRva2VuaXplfHRpbWV6b25lLWZyb20tdGltZXx0aW1lem9uZS1mcm9tLWRhdGVUaW1lfHRpbWV6b25lLWZyb20tZGF0ZXxzdW18c3VidHJhY3QtZGF0ZVRpbWVzLXlpZWxkaW5nLXllYXJNb250aER1cmF0aW9ufHN1YnRyYWN0LWRhdGVUaW1lcy15aWVsZGluZy1kYXlUaW1lRHVyYXRpb258c3Vic3RyaW5nLWJlZm9yZXxzdWJzdHJpbmctYWZ0ZXJ8c3Vic3RyaW5nfHN1YnNlcXVlbmNlfHN0cmluZy10by1jb2RlcG9pbnRzfHN0cmluZy1wYWR8c3RyaW5nLWxlbmd0aHxzdHJpbmctam9pbnxzdHJpbmd8c3RhdGljLWJhc2UtdXJpfHN0YXJ0cy13aXRofHNlY29uZHMtZnJvbS10aW1lfHNlY29uZHMtZnJvbS1kdXJhdGlvbnxzZWNvbmRzLWZyb20tZGF0ZVRpbWV8cm91bmQtaGFsZi10by1ldmVufHJvdW5kfHJvb3R8cmV2ZXJzZXxyZXNvbHZlLXVyaXxyZXNvbHZlLVFOYW1lfHJlcGxhY2V8cmVtb3ZlfFFOYW1lfHByZWZpeC1mcm9tLVFOYW1lfHBvc2l0aW9ufG9uZS1vci1tb3JlfG51bWJlcnxub3R8bm9ybWFsaXplLXVuaWNvZGV8bm9ybWFsaXplLXNwYWNlfG5vZGUtbmFtZXxub2RlLWtpbmR8bmlsbGVkfG5hbWVzcGFjZS11cmktZnJvbS1RTmFtZXxuYW1lc3BhY2UtdXJpLWZvci1wcmVmaXh8bmFtZXNwYWNlLXVyaXxuYW1lfG1vbnRocy1mcm9tLWR1cmF0aW9ufG1vbnRoLWZyb20tZGF0ZVRpbWV8bW9udGgtZnJvbS1kYXRlfG1pbnV0ZXMtZnJvbS10aW1lfG1pbnV0ZXMtZnJvbS1kdXJhdGlvbnxtaW51dGVzLWZyb20tZGF0ZVRpbWV8bWlufG1heHxtYXRjaGVzfGxvd2VyLWNhc2V8bG9jYWwtbmFtZS1mcm9tLVFOYW1lfGxvY2FsLW5hbWV8bGFzdHxsYW5nfGlyaS10by11cml8aW5zZXJ0LWJlZm9yZXxpbmRleC1vZnxpbi1zY29wZS1wcmVmaXhlc3xpbXBsaWNpdC10aW1lem9uZXxpZHJlZnxpZHxob3Vycy1mcm9tLXRpbWV8aG91cnMtZnJvbS1kdXJhdGlvbnxob3Vycy1mcm9tLWRhdGVUaW1lfGZsb29yfGZhbHNlfGV4cGFuZGVkLVFOYW1lfGV4aXN0c3xleGFjdGx5LW9uZXxlc2NhcGUtdXJpfGVzY2FwZS1odG1sLXVyaXxlcnJvcnxlbmRzLXdpdGh8ZW5jb2RlLWZvci11cml8ZW1wdHl8ZG9jdW1lbnQtdXJpfGRvYy1hdmFpbGFibGV8ZG9jfGRpc3RpbmN0LXZhbHVlc3xkaXN0aW5jdC1ub2Rlc3xkZWZhdWx0LWNvbGxhdGlvbnxkZWVwLWVxdWFsfGRheXMtZnJvbS1kdXJhdGlvbnxkYXktZnJvbS1kYXRlVGltZXxkYXktZnJvbS1kYXRlfGRhdGF8Y3VycmVudC10aW1lfGN1cnJlbnQtZGF0ZVRpbWV8Y3VycmVudC1kYXRlfGNvdW50fGNvbnRhaW5zfGNvbmNhdHxjb21wYXJlfGNvbGxlY3Rpb258Y29kZXBvaW50cy10by1zdHJpbmd8Y29kZXBvaW50LWVxdWFsfGNlaWxpbmd8Ym9vbGVhbnxiYXNlLXVyaXxhdmd8YWRqdXN0LXRpbWUtdG8tdGltZXpvbmV8YWRqdXN0LWRhdGVUaW1lLXRvLXRpbWV6b25lfGFkanVzdC1kYXRlLXRvLXRpbWV6b25lfGFicylcYi9dLAorWyJwbG4iLC9eW1x3Oi1dKy9dLFsicGxuIiwvXltcdFxuXHIgXHhhMF0rL11dKSxbInhxIiwieHF1ZXJ5Il0pOwpkaWZmIC0tZ2l0IGEvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy15YW1sLmpzIGIvYXBpL2pzL2xpYnMvcHJldHRpZnkvbGFuZy15YW1sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzODcyOWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGkvanMvbGlicy9wcmV0dGlmeS9sYW5nLXlhbWwuanMKQEAgLTAsMCArMSwyIEBACit2YXIgYT1udWxsOworUFIucmVnaXN0ZXJMYW5nSGFuZGxlcihQUi5jcmVhdGVTaW1wbGVMZXhlcihbWyJwdW4iLC9eWzo+P3xdKy8sYSwiOnw+PyJdLFsiZGVjIiwvXiUoPzpZQU1MfFRBRylbXlxuXHIjXSsvLGEsIiUiXSxbInR5cCIsL14mXFMrLyxhLCImIl0sWyJ0eXAiLC9eIVxTKi8sYSwiISJdLFsic3RyIiwvXiIoPzpbXiJcXF18XFwuKSooPzoifCQpLyxhLCciJ10sWyJzdHIiLC9eJyg/OlteJ118JycpKig/Oid8JCkvLGEsIiciXSxbImNvbSIsL14jW15cblxyXSovLGEsIiMiXSxbInBsbiIsL15ccysvLGEsIiBcdFxyXG4iXV0sW1siZGVjIiwvXig/Oi0tLXxcLlwuXC4pKD86W1xuXHJdfCQpL10sWyJwdW4iLC9eLS9dLFsia3dkIiwvXlx3KzpbXG5cciBdL10sWyJwbG4iLC9eXHcrL11dKSxbInlhbWwiLCJ5bWwiXSk7CmRpZmYgLS1naXQgYS9hcGkvanMvbGlicy9wcmV0dGlmeS9wcmV0dGlmeS5qcyBiL2FwaS9qcy9saWJzL3ByZXR0aWZ5L3ByZXR0aWZ5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlZjVhZDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcGkvanMvbGlicy9wcmV0dGlmeS9wcmV0dGlmeS5qcwpAQCAtMCwwICsxLDI4IEBACit2YXIgcT1udWxsO3dpbmRvdy5QUl9TSE9VTERfVVNFX0NPTlRJTlVBVElPTj0hMDsKKyhmdW5jdGlvbigpe2Z1bmN0aW9uIEwoYSl7ZnVuY3Rpb24gbShhKXt2YXIgZj1hLmNoYXJDb2RlQXQoMCk7aWYoZiE9PTkyKXJldHVybiBmO3ZhciBiPWEuY2hhckF0KDEpO3JldHVybihmPXJbYl0pP2Y6IjAiPD1iJiZiPD0iNyI/cGFyc2VJbnQoYS5zdWJzdHJpbmcoMSksOCk6Yj09PSJ1Inx8Yj09PSJ4Ij9wYXJzZUludChhLnN1YnN0cmluZygyKSwxNik6YS5jaGFyQ29kZUF0KDEpfWZ1bmN0aW9uIGUoYSl7aWYoYTwzMilyZXR1cm4oYTwxNj8iXFx4MCI6IlxceCIpK2EudG9TdHJpbmcoMTYpO2E9U3RyaW5nLmZyb21DaGFyQ29kZShhKTtpZihhPT09IlxcInx8YT09PSItInx8YT09PSJbInx8YT09PSJdIilhPSJcXCIrYTtyZXR1cm4gYX1mdW5jdGlvbiBoKGEpe2Zvcih2YXIgZj1hLnN1YnN0cmluZygxLGEubGVuZ3RoLTEpLm1hdGNoKC9cXHVbXGRBLUZhLWZdezR9fFxceFtcZEEtRmEtZl17Mn18XFxbMC0zXVswLTddezAsMn18XFxbMC03XXsxLDJ9fFxcW1xTXHNdfFteXFxdL2cpLGE9CitbXSxiPVtdLG89ZlswXT09PSJeIixjPW8/MTowLGk9Zi5sZW5ndGg7YzxpOysrYyl7dmFyIGo9ZltjXTtpZigvXFxbYmRzd10vaS50ZXN0KGopKWEucHVzaChqKTtlbHNle3ZhciBqPW0oaiksZDtjKzI8aSYmIi0iPT09ZltjKzFdPyhkPW0oZltjKzJdKSxjKz0yKTpkPWo7Yi5wdXNoKFtqLGRdKTtkPDY1fHxqPjEyMnx8KGQ8NjV8fGo+OTB8fGIucHVzaChbTWF0aC5tYXgoNjUsail8MzIsTWF0aC5taW4oZCw5MCl8MzJdKSxkPDk3fHxqPjEyMnx8Yi5wdXNoKFtNYXRoLm1heCg5NyxqKSYtMzMsTWF0aC5taW4oZCwxMjIpJi0zM10pKX19Yi5zb3J0KGZ1bmN0aW9uKGEsZil7cmV0dXJuIGFbMF0tZlswXXx8ZlsxXS1hWzFdfSk7Zj1bXTtqPVtOYU4sTmFOXTtmb3IoYz0wO2M8Yi5sZW5ndGg7KytjKWk9YltjXSxpWzBdPD1qWzFdKzE/alsxXT1NYXRoLm1heChqWzFdLGlbMV0pOmYucHVzaChqPWkpO2I9WyJbIl07byYmYi5wdXNoKCJeIik7Yi5wdXNoLmFwcGx5KGIsYSk7Zm9yKGM9MDtjPAorZi5sZW5ndGg7KytjKWk9ZltjXSxiLnB1c2goZShpWzBdKSksaVsxXT5pWzBdJiYoaVsxXSsxPmlbMF0mJmIucHVzaCgiLSIpLGIucHVzaChlKGlbMV0pKSk7Yi5wdXNoKCJdIik7cmV0dXJuIGIuam9pbigiIil9ZnVuY3Rpb24geShhKXtmb3IodmFyIGY9YS5zb3VyY2UubWF0Y2goL1xbKD86W15cXFxdXXxcXFtcU1xzXSkqXXxcXHVbXGRBLUZhLWZdezR9fFxceFtcZEEtRmEtZl17Mn18XFxcZCt8XFxbXlxkdXhdfFwoXD9bITo9XXxbKCleXXxbXigpW1xcXl0rL2cpLGI9Zi5sZW5ndGgsZD1bXSxjPTAsaT0wO2M8YjsrK2Mpe3ZhciBqPWZbY107aj09PSIoIj8rK2k6IlxcIj09PWouY2hhckF0KDApJiYoaj0rai5zdWJzdHJpbmcoMSkpJiZqPD1pJiYoZFtqXT0tMSl9Zm9yKGM9MTtjPGQubGVuZ3RoOysrYyktMT09PWRbY10mJihkW2NdPSsrdCk7Zm9yKGk9Yz0wO2M8YjsrK2Mpaj1mW2NdLGo9PT0iKCI/KCsraSxkW2ldPT09dm9pZCAwJiYoZltjXT0iKD86IikpOiJcXCI9PT1qLmNoYXJBdCgwKSYmCisoaj0rai5zdWJzdHJpbmcoMSkpJiZqPD1pJiYoZltjXT0iXFwiK2RbaV0pO2ZvcihpPWM9MDtjPGI7KytjKSJeIj09PWZbY10mJiJeIiE9PWZbYysxXSYmKGZbY109IiIpO2lmKGEuaWdub3JlQ2FzZSYmcylmb3IoYz0wO2M8YjsrK2Mpaj1mW2NdLGE9ai5jaGFyQXQoMCksai5sZW5ndGg+PTImJmE9PT0iWyI/ZltjXT1oKGopOmEhPT0iXFwiJiYoZltjXT1qLnJlcGxhY2UoL1tBLVphLXpdL2csZnVuY3Rpb24oYSl7YT1hLmNoYXJDb2RlQXQoMCk7cmV0dXJuIlsiK1N0cmluZy5mcm9tQ2hhckNvZGUoYSYtMzMsYXwzMikrIl0ifSkpO3JldHVybiBmLmpvaW4oIiIpfWZvcih2YXIgdD0wLHM9ITEsbD0hMSxwPTAsZD1hLmxlbmd0aDtwPGQ7KytwKXt2YXIgZz1hW3BdO2lmKGcuaWdub3JlQ2FzZSlsPSEwO2Vsc2UgaWYoL1thLXpdL2kudGVzdChnLnNvdXJjZS5yZXBsYWNlKC9cXHVbXGRhLWZdezR9fFxceFtcZGEtZl17Mn18XFxbXlVYdXhdL2dpLCIiKSkpe3M9ITA7bD0hMTticmVha319Zm9yKHZhciByPQore2I6OCx0OjksbjoxMCx2OjExLGY6MTIscjoxM30sbj1bXSxwPTAsZD1hLmxlbmd0aDtwPGQ7KytwKXtnPWFbcF07aWYoZy5nbG9iYWx8fGcubXVsdGlsaW5lKXRocm93IEVycm9yKCIiK2cpO24ucHVzaCgiKD86Iit5KGcpKyIpIil9cmV0dXJuIFJlZ0V4cChuLmpvaW4oInwiKSxsPyJnaSI6ImciKX1mdW5jdGlvbiBNKGEpe2Z1bmN0aW9uIG0oYSl7c3dpdGNoKGEubm9kZVR5cGUpe2Nhc2UgMTppZihlLnRlc3QoYS5jbGFzc05hbWUpKWJyZWFrO2Zvcih2YXIgZz1hLmZpcnN0Q2hpbGQ7ZztnPWcubmV4dFNpYmxpbmcpbShnKTtnPWEubm9kZU5hbWU7aWYoIkJSIj09PWd8fCJMSSI9PT1nKWhbc109IlxuIix0W3M8PDFdPXkrKyx0W3MrKzw8MXwxXT1hO2JyZWFrO2Nhc2UgMzpjYXNlIDQ6Zz1hLm5vZGVWYWx1ZSxnLmxlbmd0aCYmKGc9cD9nLnJlcGxhY2UoL1xyXG4/L2csIlxuIik6Zy5yZXBsYWNlKC9bXHRcblxyIF0rL2csIiAiKSxoW3NdPWcsdFtzPDwxXT15LHkrPWcubGVuZ3RoLAordFtzKys8PDF8MV09YSl9fXZhciBlPS8oPzpefFxzKW5vY29kZSg/OlxzfCQpLyxoPVtdLHk9MCx0PVtdLHM9MCxsO2EuY3VycmVudFN0eWxlP2w9YS5jdXJyZW50U3R5bGUud2hpdGVTcGFjZTp3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSYmKGw9ZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShhLHEpLmdldFByb3BlcnR5VmFsdWUoIndoaXRlLXNwYWNlIikpO3ZhciBwPWwmJiJwcmUiPT09bC5zdWJzdHJpbmcoMCwzKTttKGEpO3JldHVybnthOmguam9pbigiIikucmVwbGFjZSgvXG4kLywiIiksYzp0fX1mdW5jdGlvbiBCKGEsbSxlLGgpe20mJihhPXthOm0sZDphfSxlKGEpLGgucHVzaC5hcHBseShoLGEuZSkpfWZ1bmN0aW9uIHgoYSxtKXtmdW5jdGlvbiBlKGEpe2Zvcih2YXIgbD1hLmQscD1bbCwicGxuIl0sZD0wLGc9YS5hLm1hdGNoKHkpfHxbXSxyPXt9LG49MCx6PWcubGVuZ3RoO248ejsrK24pe3ZhciBmPWdbbl0sYj1yW2ZdLG89dm9pZCAwLGM7aWYodHlwZW9mIGI9PT0KKyJzdHJpbmciKWM9ITE7ZWxzZXt2YXIgaT1oW2YuY2hhckF0KDApXTtpZihpKW89Zi5tYXRjaChpWzFdKSxiPWlbMF07ZWxzZXtmb3IoYz0wO2M8dDsrK2MpaWYoaT1tW2NdLG89Zi5tYXRjaChpWzFdKSl7Yj1pWzBdO2JyZWFrfW98fChiPSJwbG4iKX1pZigoYz1iLmxlbmd0aD49NSYmImxhbmctIj09PWIuc3Vic3RyaW5nKDAsNSkpJiYhKG8mJnR5cGVvZiBvWzFdPT09InN0cmluZyIpKWM9ITEsYj0ic3JjIjtjfHwocltmXT1iKX1pPWQ7ZCs9Zi5sZW5ndGg7aWYoYyl7Yz1vWzFdO3ZhciBqPWYuaW5kZXhPZihjKSxrPWorYy5sZW5ndGg7b1syXSYmKGs9Zi5sZW5ndGgtb1syXS5sZW5ndGgsaj1rLWMubGVuZ3RoKTtiPWIuc3Vic3RyaW5nKDUpO0IobCtpLGYuc3Vic3RyaW5nKDAsaiksZSxwKTtCKGwraStqLGMsQyhiLGMpLHApO0IobCtpK2ssZi5zdWJzdHJpbmcoayksZSxwKX1lbHNlIHAucHVzaChsK2ksYil9YS5lPXB9dmFyIGg9e30seTsoZnVuY3Rpb24oKXtmb3IodmFyIGU9YS5jb25jYXQobSksCitsPVtdLHA9e30sZD0wLGc9ZS5sZW5ndGg7ZDxnOysrZCl7dmFyIHI9ZVtkXSxuPXJbM107aWYobilmb3IodmFyIGs9bi5sZW5ndGg7LS1rPj0wOyloW24uY2hhckF0KGspXT1yO3I9clsxXTtuPSIiK3I7cC5oYXNPd25Qcm9wZXJ0eShuKXx8KGwucHVzaChyKSxwW25dPXEpfWwucHVzaCgvW1xTXHNdLyk7eT1MKGwpfSkoKTt2YXIgdD1tLmxlbmd0aDtyZXR1cm4gZX1mdW5jdGlvbiB1KGEpe3ZhciBtPVtdLGU9W107YS50cmlwbGVRdW90ZWRTdHJpbmdzP20ucHVzaChbInN0ciIsL14oPzonJycoPzpbXidcXF18XFxbXFNcc118Jyc/KD89W14nXSkpKig/OicnJ3wkKXwiIiIoPzpbXiJcXF18XFxbXFNcc118IiI/KD89W14iXSkpKig/OiIiInwkKXwnKD86W14nXFxdfFxcW1xTXHNdKSooPzonfCQpfCIoPzpbXiJcXF18XFxbXFNcc10pKig/OiJ8JCkpLyxxLCInXCIiXSk6YS5tdWx0aUxpbmVTdHJpbmdzP20ucHVzaChbInN0ciIsL14oPzonKD86W14nXFxdfFxcW1xTXHNdKSooPzonfCQpfCIoPzpbXiJcXF18XFxbXFNcc10pKig/OiJ8JCl8YCg/OlteXFxgXXxcXFtcU1xzXSkqKD86YHwkKSkvLAorcSwiJ1wiYCJdKTptLnB1c2goWyJzdHIiLC9eKD86Jyg/OlteXG5ccidcXF18XFwuKSooPzonfCQpfCIoPzpbXlxuXHIiXFxdfFxcLikqKD86InwkKSkvLHEsIlwiJyJdKTthLnZlcmJhdGltU3RyaW5ncyYmZS5wdXNoKFsic3RyIiwvXkAiKD86W14iXXwiIikqKD86InwkKS8scV0pO3ZhciBoPWEuaGFzaENvbW1lbnRzO2gmJihhLmNTdHlsZUNvbW1lbnRzPyhoPjE/bS5wdXNoKFsiY29tIiwvXiMoPzojIyg/OlteI118Iyg/ISMjKSkqKD86IyMjfCQpfC4qKS8scSwiIyJdKTptLnB1c2goWyJjb20iLC9eIyg/Oig/OmRlZmluZXxlbGlmfGVsc2V8ZW5kaWZ8ZXJyb3J8aWZkZWZ8aW5jbHVkZXxpZm5kZWZ8bGluZXxwcmFnbWF8dW5kZWZ8d2FybmluZylcYnxbXlxuXHJdKikvLHEsIiMiXSksZS5wdXNoKFsic3RyIiwvXjwoPzooPzooPzpcLlwuXC8pKnxcLz8pKD86W1x3LV0rKD86XC9bXHctXSspKyk/W1x3LV0rXC5ofFthLXpdXHcqKT4vLHFdKSk6bS5wdXNoKFsiY29tIiwvXiNbXlxuXHJdKi8sCitxLCIjIl0pKTthLmNTdHlsZUNvbW1lbnRzJiYoZS5wdXNoKFsiY29tIiwvXlwvXC9bXlxuXHJdKi8scV0pLGUucHVzaChbImNvbSIsL15cL1wqW1xTXHNdKj8oPzpcKlwvfCQpLyxxXSkpO2EucmVnZXhMaXRlcmFscyYmZS5wdXNoKFsibGFuZy1yZWdleCIsL14oPzpeXlwuP3xbISstXXwhPXwhPT18I3wlfCU9fCZ8JiZ8JiY9fCY9fFwofFwqfFwqPXxcKz18LHwtPXwtPnxcL3xcLz18Onw6Onw7fDx8PDx8PDw9fDw9fD18PT18PT09fD58Pj18Pj58Pj49fD4+Pnw+Pj49fFs/QFteXXxcXj18XF5cXnxcXlxePXx7fFx8fFx8PXxcfFx8fFx8XHw9fH58YnJlYWt8Y2FzZXxjb250aW51ZXxkZWxldGV8ZG98ZWxzZXxmaW5hbGx5fGluc3RhbmNlb2Z8cmV0dXJufHRocm93fHRyeXx0eXBlb2YpXHMqKFwvKD89W14qL10pKD86W14vW1xcXXxcXFtcU1xzXXxcWyg/OlteXFxcXV18XFxbXFNcc10pKig/Ol18JCkpK1wvKS9dKTsoaD1hLnR5cGVzKSYmZS5wdXNoKFsidHlwIixoXSk7YT0oIiIrYS5rZXl3b3JkcykucmVwbGFjZSgvXiB8ICQvZywKKyIiKTthLmxlbmd0aCYmZS5wdXNoKFsia3dkIixSZWdFeHAoIl4oPzoiK2EucmVwbGFjZSgvW1xzLF0rL2csInwiKSsiKVxcYiIpLHFdKTttLnB1c2goWyJwbG4iLC9eXHMrLyxxLCIgXHJcblx0XHhhMCJdKTtlLnB1c2goWyJsaXQiLC9eQFskX2Etel1bXHckQF0qL2kscV0sWyJ0eXAiLC9eKD86W0BfXT9bQS1aXStbYS16XVtcdyRAXSp8XHcrX3RcYikvLHFdLFsicGxuIiwvXlskX2Etel1bXHckQF0qL2kscV0sWyJsaXQiLC9eKD86MHhbXGRhLWZdK3woPzpcZCg/Ol9cZCspKlxkKig/OlwuXGQqKT98XC5cZFwrKSg/OmVbKy1dP1xkKyk/KVthLXpdKi9pLHEsIjAxMjM0NTY3ODkiXSxbInBsbiIsL15cXFtcU1xzXT8vLHFdLFsicHVuIiwvXi5bXlxzXHciLSQnLi9AXFxgXSovLHFdKTtyZXR1cm4geChtLGUpfWZ1bmN0aW9uIEQoYSxtKXtmdW5jdGlvbiBlKGEpe3N3aXRjaChhLm5vZGVUeXBlKXtjYXNlIDE6aWYoay50ZXN0KGEuY2xhc3NOYW1lKSlicmVhaztpZigiQlIiPT09YS5ub2RlTmFtZSloKGEpLAorYS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSk7ZWxzZSBmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpZShhKTticmVhaztjYXNlIDM6Y2FzZSA0OmlmKHApe3ZhciBiPWEubm9kZVZhbHVlLGQ9Yi5tYXRjaCh0KTtpZihkKXt2YXIgYz1iLnN1YnN0cmluZygwLGQuaW5kZXgpO2Eubm9kZVZhbHVlPWM7KGI9Yi5zdWJzdHJpbmcoZC5pbmRleCtkWzBdLmxlbmd0aCkpJiZhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHMuY3JlYXRlVGV4dE5vZGUoYiksYS5uZXh0U2libGluZyk7aChhKTtjfHxhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSl9fX19ZnVuY3Rpb24gaChhKXtmdW5jdGlvbiBiKGEsZCl7dmFyIGU9ZD9hLmNsb25lTm9kZSghMSk6YSxmPWEucGFyZW50Tm9kZTtpZihmKXt2YXIgZj1iKGYsMSksZz1hLm5leHRTaWJsaW5nO2YuYXBwZW5kQ2hpbGQoZSk7Zm9yKHZhciBoPWc7aDtoPWcpZz1oLm5leHRTaWJsaW5nLGYuYXBwZW5kQ2hpbGQoaCl9cmV0dXJuIGV9Citmb3IoOyFhLm5leHRTaWJsaW5nOylpZihhPWEucGFyZW50Tm9kZSwhYSlyZXR1cm47Zm9yKHZhciBhPWIoYS5uZXh0U2libGluZywwKSxlOyhlPWEucGFyZW50Tm9kZSkmJmUubm9kZVR5cGU9PT0xOylhPWU7ZC5wdXNoKGEpfXZhciBrPS8oPzpefFxzKW5vY29kZSg/OlxzfCQpLyx0PS9cclxuP3xcbi8scz1hLm93bmVyRG9jdW1lbnQsbDthLmN1cnJlbnRTdHlsZT9sPWEuY3VycmVudFN0eWxlLndoaXRlU3BhY2U6d2luZG93LmdldENvbXB1dGVkU3R5bGUmJihsPXMuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShhLHEpLmdldFByb3BlcnR5VmFsdWUoIndoaXRlLXNwYWNlIikpO3ZhciBwPWwmJiJwcmUiPT09bC5zdWJzdHJpbmcoMCwzKTtmb3IobD1zLmNyZWF0ZUVsZW1lbnQoIkxJIik7YS5maXJzdENoaWxkOylsLmFwcGVuZENoaWxkKGEuZmlyc3RDaGlsZCk7Zm9yKHZhciBkPVtsXSxnPTA7ZzxkLmxlbmd0aDsrK2cpZShkW2ddKTttPT09KG18MCkmJmRbMF0uc2V0QXR0cmlidXRlKCJ2YWx1ZSIsCittKTt2YXIgcj1zLmNyZWF0ZUVsZW1lbnQoIk9MIik7ci5jbGFzc05hbWU9ImxpbmVudW1zIjtmb3IodmFyIG49TWF0aC5tYXgoMCxtLTF8MCl8fDAsZz0wLHo9ZC5sZW5ndGg7Zzx6OysrZylsPWRbZ10sbC5jbGFzc05hbWU9IkwiKyhnK24pJTEwLGwuZmlyc3RDaGlsZHx8bC5hcHBlbmRDaGlsZChzLmNyZWF0ZVRleHROb2RlKCJceGEwIikpLHIuYXBwZW5kQ2hpbGQobCk7YS5hcHBlbmRDaGlsZChyKX1mdW5jdGlvbiBrKGEsbSl7Zm9yKHZhciBlPW0ubGVuZ3RoOy0tZT49MDspe3ZhciBoPW1bZV07QS5oYXNPd25Qcm9wZXJ0eShoKT93aW5kb3cuY29uc29sZSYmY29uc29sZS53YXJuKCJjYW5ub3Qgb3ZlcnJpZGUgbGFuZ3VhZ2UgaGFuZGxlciAlcyIsaCk6QVtoXT1hfX1mdW5jdGlvbiBDKGEsbSl7aWYoIWF8fCFBLmhhc093blByb3BlcnR5KGEpKWE9L15ccyo8Ly50ZXN0KG0pPyJkZWZhdWx0LW1hcmt1cCI6ImRlZmF1bHQtY29kZSI7cmV0dXJuIEFbYV19ZnVuY3Rpb24gRShhKXt2YXIgbT0KK2EuZzt0cnl7dmFyIGU9TShhLmgpLGg9ZS5hO2EuYT1oO2EuYz1lLmM7YS5kPTA7QyhtLGgpKGEpO3ZhciBrPS9cYk1TSUVcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxtPS9cbi9nLHQ9YS5hLHM9dC5sZW5ndGgsZT0wLGw9YS5jLHA9bC5sZW5ndGgsaD0wLGQ9YS5lLGc9ZC5sZW5ndGgsYT0wO2RbZ109czt2YXIgcixuO2ZvcihuPXI9MDtuPGc7KWRbbl0hPT1kW24rMl0/KGRbcisrXT1kW24rK10sZFtyKytdPWRbbisrXSk6bis9MjtnPXI7Zm9yKG49cj0wO248Zzspe2Zvcih2YXIgej1kW25dLGY9ZFtuKzFdLGI9bisyO2IrMjw9ZyYmZFtiKzFdPT09ZjspYis9MjtkW3IrK109ejtkW3IrK109ZjtuPWJ9Zm9yKGQubGVuZ3RoPXI7aDxwOyl7dmFyIG89bFtoKzJdfHxzLGM9ZFthKzJdfHxzLGI9TWF0aC5taW4obyxjKSxpPWxbaCsxXSxqO2lmKGkubm9kZVR5cGUhPT0xJiYoaj10LnN1YnN0cmluZyhlLGIpKSl7ayYmKGo9ai5yZXBsYWNlKG0sIlxyIikpO2kubm9kZVZhbHVlPQorajt2YXIgdT1pLm93bmVyRG9jdW1lbnQsdj11LmNyZWF0ZUVsZW1lbnQoIlNQQU4iKTt2LmNsYXNzTmFtZT1kW2ErMV07dmFyIHg9aS5wYXJlbnROb2RlO3gucmVwbGFjZUNoaWxkKHYsaSk7di5hcHBlbmRDaGlsZChpKTtlPG8mJihsW2grMV09aT11LmNyZWF0ZVRleHROb2RlKHQuc3Vic3RyaW5nKGIsbykpLHguaW5zZXJ0QmVmb3JlKGksdi5uZXh0U2libGluZykpfWU9YjtlPj1vJiYoaCs9Mik7ZT49YyYmKGErPTIpfX1jYXRjaCh3KXsiY29uc29sZSJpbiB3aW5kb3cmJmNvbnNvbGUubG9nKHcmJncuc3RhY2s/dy5zdGFjazp3KX19dmFyIHY9WyJicmVhayxjb250aW51ZSxkbyxlbHNlLGZvcixpZixyZXR1cm4sd2hpbGUiXSx3PVtbdiwiYXV0byxjYXNlLGNoYXIsY29uc3QsZGVmYXVsdCxkb3VibGUsZW51bSxleHRlcm4sZmxvYXQsZ290byxpbnQsbG9uZyxyZWdpc3RlcixzaG9ydCxzaWduZWQsc2l6ZW9mLHN0YXRpYyxzdHJ1Y3Qsc3dpdGNoLHR5cGVkZWYsdW5pb24sdW5zaWduZWQsdm9pZCx2b2xhdGlsZSJdLAorImNhdGNoLGNsYXNzLGRlbGV0ZSxmYWxzZSxpbXBvcnQsbmV3LG9wZXJhdG9yLHByaXZhdGUscHJvdGVjdGVkLHB1YmxpYyx0aGlzLHRocm93LHRydWUsdHJ5LHR5cGVvZiJdLEY9W3csImFsaWdub2YsYWxpZ25fdW5pb24sYXNtLGF4aW9tLGJvb2wsY29uY2VwdCxjb25jZXB0X21hcCxjb25zdF9jYXN0LGNvbnN0ZXhwcixkZWNsdHlwZSxkeW5hbWljX2Nhc3QsZXhwbGljaXQsZXhwb3J0LGZyaWVuZCxpbmxpbmUsbGF0ZV9jaGVjayxtdXRhYmxlLG5hbWVzcGFjZSxudWxscHRyLHJlaW50ZXJwcmV0X2Nhc3Qsc3RhdGljX2Fzc2VydCxzdGF0aWNfY2FzdCx0ZW1wbGF0ZSx0eXBlaWQsdHlwZW5hbWUsdXNpbmcsdmlydHVhbCx3aGVyZSJdLEc9W3csImFic3RyYWN0LGJvb2xlYW4sYnl0ZSxleHRlbmRzLGZpbmFsLGZpbmFsbHksaW1wbGVtZW50cyxpbXBvcnQsaW5zdGFuY2VvZixudWxsLG5hdGl2ZSxwYWNrYWdlLHN0cmljdGZwLHN1cGVyLHN5bmNocm9uaXplZCx0aHJvd3MsdHJhbnNpZW50Il0sCitIPVtHLCJhcyxiYXNlLGJ5LGNoZWNrZWQsZGVjaW1hbCxkZWxlZ2F0ZSxkZXNjZW5kaW5nLGR5bmFtaWMsZXZlbnQsZml4ZWQsZm9yZWFjaCxmcm9tLGdyb3VwLGltcGxpY2l0LGluLGludGVyZmFjZSxpbnRlcm5hbCxpbnRvLGlzLGxvY2ssb2JqZWN0LG91dCxvdmVycmlkZSxvcmRlcmJ5LHBhcmFtcyxwYXJ0aWFsLHJlYWRvbmx5LHJlZixzYnl0ZSxzZWFsZWQsc3RhY2thbGxvYyxzdHJpbmcsc2VsZWN0LHVpbnQsdWxvbmcsdW5jaGVja2VkLHVuc2FmZSx1c2hvcnQsdmFyIl0sdz1bdywiZGVidWdnZXIsZXZhbCxleHBvcnQsZnVuY3Rpb24sZ2V0LG51bGwsc2V0LHVuZGVmaW5lZCx2YXIsd2l0aCxJbmZpbml0eSxOYU4iXSxJPVt2LCJhbmQsYXMsYXNzZXJ0LGNsYXNzLGRlZixkZWwsZWxpZixleGNlcHQsZXhlYyxmaW5hbGx5LGZyb20sZ2xvYmFsLGltcG9ydCxpbixpcyxsYW1iZGEsbm9ubG9jYWwsbm90LG9yLHBhc3MscHJpbnQscmFpc2UsdHJ5LHdpdGgseWllbGQsRmFsc2UsVHJ1ZSxOb25lIl0sCitKPVt2LCJhbGlhcyxhbmQsYmVnaW4sY2FzZSxjbGFzcyxkZWYsZGVmaW5lZCxlbHNpZixlbmQsZW5zdXJlLGZhbHNlLGluLG1vZHVsZSxuZXh0LG5pbCxub3Qsb3IscmVkbyxyZXNjdWUscmV0cnksc2VsZixzdXBlcix0aGVuLHRydWUsdW5kZWYsdW5sZXNzLHVudGlsLHdoZW4seWllbGQsQkVHSU4sRU5EIl0sdj1bdiwiY2FzZSxkb25lLGVsaWYsZXNhYyxldmFsLGZpLGZ1bmN0aW9uLGluLGxvY2FsLHNldCx0aGVuLHVudGlsIl0sSz0vXihESVJ8RklMRXx2ZWN0b3J8KGRlfHByaW9yaXR5Xyk/cXVldWV8bGlzdHxzdGFja3woY29uc3RfKT9pdGVyYXRvcnwobXVsdGkpPyhzZXR8bWFwKXxiaXRzZXR8dT8oaW50fGZsb2F0KVxkKikvLE49L1xTLyxPPXUoe2tleXdvcmRzOltGLEgsdywiY2FsbGVyLGRlbGV0ZSxkaWUsZG8sZHVtcCxlbHNpZixldmFsLGV4aXQsZm9yZWFjaCxmb3IsZ290byxpZixpbXBvcnQsbGFzdCxsb2NhbCxteSxuZXh0LG5vLG91cixwcmludCxwYWNrYWdlLHJlZG8scmVxdWlyZSxzdWIsdW5kZWYsdW5sZXNzLHVudGlsLHVzZSx3YW50YXJyYXksd2hpbGUsQkVHSU4sRU5EIisKK0ksSix2XSxoYXNoQ29tbWVudHM6ITAsY1N0eWxlQ29tbWVudHM6ITAsbXVsdGlMaW5lU3RyaW5nczohMCxyZWdleExpdGVyYWxzOiEwfSksQT17fTtrKE8sWyJkZWZhdWx0LWNvZGUiXSk7ayh4KFtdLFtbInBsbiIsL15bXjw/XSsvXSxbImRlYyIsL148IVx3W14+XSooPzo+fCQpL10sWyJjb20iLC9ePFwhLS1bXFNcc10qPyg/Oi0tXD58JCkvXSxbImxhbmctIiwvXjxcPyhbXFNcc10rPykoPzpcPz58JCkvXSxbImxhbmctIiwvXjwlKFtcU1xzXSs/KSg/OiU+fCQpL10sWyJwdW4iLC9eKD86PFslP118WyU/XT4pL10sWyJsYW5nLSIsL148eG1wXGJbXj5dKj4oW1xTXHNdKz8pPFwveG1wXGJbXj5dKj4vaV0sWyJsYW5nLWpzIiwvXjxzY3JpcHRcYltePl0qPihbXFNcc10qPykoPFwvc2NyaXB0XGJbXj5dKj4pL2ldLFsibGFuZy1jc3MiLC9ePHN0eWxlXGJbXj5dKj4oW1xTXHNdKj8pKDxcL3N0eWxlXGJbXj5dKj4pL2ldLFsibGFuZy1pbi50YWciLC9eKDxcLz9bYS16XVtePD5dKj4pL2ldXSksCitbImRlZmF1bHQtbWFya3VwIiwiaHRtIiwiaHRtbCIsIm14bWwiLCJ4aHRtbCIsInhtbCIsInhzbCJdKTtrKHgoW1sicGxuIiwvXlxzKy8scSwiIFx0XHJcbiJdLFsiYXR2IiwvXig/OiJbXiJdKiI/fCdbXiddKic/KS8scSwiXCInIl1dLFtbInRhZyIsL15ePFwvP1thLXpdKD86W1x3LS46XSpcdyk/fFwvPz4kL2ldLFsiYXRuIiwvXig/IXN0eWxlW1xzPV18b24pW2Etel0oPzpbXHc6LV0qXHcpPy9pXSxbImxhbmctdXEudmFsIiwvXj1ccyooW15ccyInPl0qKD86W15ccyInLz5dfFwvKD89XHMpKSkvXSxbInB1biIsL15bLzwtPl0rL10sWyJsYW5nLWpzIiwvXm9uXHcrXHMqPVxzKiIoW14iXSspIi9pXSxbImxhbmctanMiLC9eb25cdytccyo9XHMqJyhbXiddKyknL2ldLFsibGFuZy1qcyIsL15vblx3K1xzKj1ccyooW15ccyInPl0rKS9pXSxbImxhbmctY3NzIiwvXnN0eWxlXHMqPVxzKiIoW14iXSspIi9pXSxbImxhbmctY3NzIiwvXnN0eWxlXHMqPVxzKicoW14nXSspJy9pXSxbImxhbmctY3NzIiwKKy9ec3R5bGVccyo9XHMqKFteXHMiJz5dKykvaV1dKSxbImluLnRhZyJdKTtrKHgoW10sW1siYXR2IiwvXltcU1xzXSsvXV0pLFsidXEudmFsIl0pO2sodSh7a2V5d29yZHM6RixoYXNoQ29tbWVudHM6ITAsY1N0eWxlQ29tbWVudHM6ITAsdHlwZXM6S30pLFsiYyIsImNjIiwiY3BwIiwiY3h4IiwiY3ljIiwibSJdKTtrKHUoe2tleXdvcmRzOiJudWxsLHRydWUsZmFsc2UifSksWyJqc29uIl0pO2sodSh7a2V5d29yZHM6SCxoYXNoQ29tbWVudHM6ITAsY1N0eWxlQ29tbWVudHM6ITAsdmVyYmF0aW1TdHJpbmdzOiEwLHR5cGVzOkt9KSxbImNzIl0pO2sodSh7a2V5d29yZHM6RyxjU3R5bGVDb21tZW50czohMH0pLFsiamF2YSJdKTtrKHUoe2tleXdvcmRzOnYsaGFzaENvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITB9KSxbImJzaCIsImNzaCIsInNoIl0pO2sodSh7a2V5d29yZHM6SSxoYXNoQ29tbWVudHM6ITAsbXVsdGlMaW5lU3RyaW5nczohMCx0cmlwbGVRdW90ZWRTdHJpbmdzOiEwfSksCitbImN2IiwicHkiXSk7ayh1KHtrZXl3b3JkczoiY2FsbGVyLGRlbGV0ZSxkaWUsZG8sZHVtcCxlbHNpZixldmFsLGV4aXQsZm9yZWFjaCxmb3IsZ290byxpZixpbXBvcnQsbGFzdCxsb2NhbCxteSxuZXh0LG5vLG91cixwcmludCxwYWNrYWdlLHJlZG8scmVxdWlyZSxzdWIsdW5kZWYsdW5sZXNzLHVudGlsLHVzZSx3YW50YXJyYXksd2hpbGUsQkVHSU4sRU5EIixoYXNoQ29tbWVudHM6ITAsbXVsdGlMaW5lU3RyaW5nczohMCxyZWdleExpdGVyYWxzOiEwfSksWyJwZXJsIiwicGwiLCJwbSJdKTtrKHUoe2tleXdvcmRzOkosaGFzaENvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITAscmVnZXhMaXRlcmFsczohMH0pLFsicmIiXSk7ayh1KHtrZXl3b3Jkczp3LGNTdHlsZUNvbW1lbnRzOiEwLHJlZ2V4TGl0ZXJhbHM6ITB9KSxbImpzIl0pO2sodSh7a2V5d29yZHM6ImFsbCxhbmQsYnksY2F0Y2gsY2xhc3MsZWxzZSxleHRlbmRzLGZhbHNlLGZpbmFsbHksZm9yLGlmLGluLGlzLGlzbnQsbG9vcCxuZXcsbm8sbm90LG51bGwsb2Ysb2ZmLG9uLG9yLHJldHVybixzdXBlcix0aGVuLHRydWUsdHJ5LHVubGVzcyx1bnRpbCx3aGVuLHdoaWxlLHllcyIsCitoYXNoQ29tbWVudHM6MyxjU3R5bGVDb21tZW50czohMCxtdWx0aWxpbmVTdHJpbmdzOiEwLHRyaXBsZVF1b3RlZFN0cmluZ3M6ITAscmVnZXhMaXRlcmFsczohMH0pLFsiY29mZmVlIl0pO2soeChbXSxbWyJzdHIiLC9eW1xTXHNdKy9dXSksWyJyZWdleCJdKTt3aW5kb3cucHJldHR5UHJpbnRPbmU9ZnVuY3Rpb24oYSxtLGUpe3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlBSRSIpO2guaW5uZXJIVE1MPWE7ZSYmRChoLGUpO0Uoe2c6bSxpOmUsaDpofSk7cmV0dXJuIGguaW5uZXJIVE1MfTt3aW5kb3cucHJldHR5UHJpbnQ9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gbSgpe2Zvcih2YXIgZT13aW5kb3cuUFJfU0hPVUxEX1VTRV9DT05USU5VQVRJT04/bC5ub3coKSsyNTA6SW5maW5pdHk7cDxoLmxlbmd0aCYmbC5ub3coKTxlO3ArKyl7dmFyIG49aFtwXSxrPW4uY2xhc3NOYW1lO2lmKGsuaW5kZXhPZigicHJldHR5cHJpbnQiKT49MCl7dmFyIGs9ay5tYXRjaChnKSxmLGI7aWYoYj0KKyFrKXtiPW47Zm9yKHZhciBvPXZvaWQgMCxjPWIuZmlyc3RDaGlsZDtjO2M9Yy5uZXh0U2libGluZyl2YXIgaT1jLm5vZGVUeXBlLG89aT09PTE/bz9iOmM6aT09PTM/Ti50ZXN0KGMubm9kZVZhbHVlKT9iOm86bztiPShmPW89PT1iP3ZvaWQgMDpvKSYmIkNPREUiPT09Zi50YWdOYW1lfWImJihrPWYuY2xhc3NOYW1lLm1hdGNoKGcpKTtrJiYoaz1rWzFdKTtiPSExO2ZvcihvPW4ucGFyZW50Tm9kZTtvO289by5wYXJlbnROb2RlKWlmKChvLnRhZ05hbWU9PT0icHJlInx8by50YWdOYW1lPT09ImNvZGUifHxvLnRhZ05hbWU9PT0ieG1wIikmJm8uY2xhc3NOYW1lJiZvLmNsYXNzTmFtZS5pbmRleE9mKCJwcmV0dHlwcmludCIpPj0wKXtiPSEwO2JyZWFrfWJ8fCgoYj0oYj1uLmNsYXNzTmFtZS5tYXRjaCgvXGJsaW5lbnVtc1xiKD86OihcZCspKT8vKSk/YlsxXSYmYlsxXS5sZW5ndGg/K2JbMV06ITA6ITEpJiZEKG4sYiksZD17ZzprLGg6bixpOmJ9LEUoZCkpfX1wPGgubGVuZ3RoP3NldFRpbWVvdXQobSwKKzI1MCk6YSYmYSgpfWZvcih2YXIgZT1bZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInByZSIpLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJjb2RlIiksZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInhtcCIpXSxoPVtdLGs9MDtrPGUubGVuZ3RoOysraylmb3IodmFyIHQ9MCxzPWVba10ubGVuZ3RoO3Q8czsrK3QpaC5wdXNoKGVba11bdF0pO3ZhciBlPXEsbD1EYXRlO2wubm93fHwobD17bm93OmZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfX0pO3ZhciBwPTAsZCxnPS9cYmxhbmcoPzp1YWdlKT8tKFtcdy5dKykoPyFcUykvO20oKX07d2luZG93LlBSPXtjcmVhdGVTaW1wbGVMZXhlcjp4LHJlZ2lzdGVyTGFuZ0hhbmRsZXI6ayxzb3VyY2VEZWNvcmF0b3I6dSxQUl9BVFRSSUJfTkFNRToiYXRuIixQUl9BVFRSSUJfVkFMVUU6ImF0diIsUFJfQ09NTUVOVDoiY29tIixQUl9ERUNMQVJBVElPTjoiZGVjIixQUl9LRVlXT1JEOiJrd2QiLFBSX0xJVEVSQUw6ImxpdCIsCitQUl9OT0NPREU6Im5vY29kZSIsUFJfUExBSU46InBsbiIsUFJfUFVOQ1RVQVRJT046InB1biIsUFJfU09VUkNFOiJzcmMiLFBSX1NUUklORzoic3RyIixQUl9UQUc6InRhZyIsUFJfVFlQRToidHlwIn19KSgpOwpkaWZmIC0tZ2l0IGEvYXBpL2pzL2xpYnMveGJyZWFkY3J1bWJzLmpzIGIvYXBpL2pzL2xpYnMveGJyZWFkY3J1bWJzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYjZlMjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcGkvanMvbGlicy94YnJlYWRjcnVtYnMuanMKQEAgLTAsMCArMSw5MyBAQAorLyoKKwl4QnJlYWRjcnVtYnMgKEV4dGVuZGVkIEJyZWFkY3J1bXMpIGpRdWVyeSBQbHVnaW4KKwmpIDIwMDkgYWpheEJsZW5kZXIuY29tCisJRm9yIGFueSBxdWVzdGlvbnMgcGxlYXNlIHZpc2l0IHd3dy5hamF4YmxlbmRlci5jb20gCisJb3IgZW1haWwgdXMgYXQgc3VwcG9ydEBhamF4YmxlbmRlci5jb20KKyovCisKKzsoZnVuY3Rpb24oJCl7CisJLyogIFZhcmlhYmxlcyAgKi8KKwkkLmZuLnhCcmVhZGNydW1icyA9IGZ1bmN0aW9uKHNldHRpbmdzKXsKKwkJdmFyIGVsZW1lbnQgPSAkKHRoaXMpOworCQl2YXIgCisJCQorCQlzZXR0aW5ncyA9ICQuZXh0ZW5kKHt9LCAkLmZuLnhCcmVhZGNydW1icy5kZWZhdWx0cywgc2V0dGluZ3MpOworCisJCWZ1bmN0aW9uIF9idWlsZCgpeworCQkJaWYoc2V0dGluZ3MuY29sbGFwc2libGUpeworCQkJCXZhciBzeiA9IGVsZW1lbnQuY2hpbGRyZW4oJ0xJJykubGVuZ3RoOworCQkJCWVsZW1lbnQuY2hpbGRyZW4oJ0xJJykuY2hpbGRyZW4oJ0EnKS5jc3MoJ3doaXRlLXNwYWNlJywgJ25vd3JhcCcpLmNzcygnZmxvYXQnLCAnbGVmdCcpOworCQkJCWVsZW1lbnQuY2hpbGRyZW4oJ0xJJykuY2hpbGRyZW4oJ0EnKS5lYWNoKGZ1bmN0aW9uKGksIGVsKXsKKwkJCQkJaWYoaSAhPSBzeiAtIDEpeworCQkJCQkJJCh0aGlzKS5jc3MoJ292ZXJmbG93JywgJ2hpZGRlbicpOworCQkJCQkJJCh0aGlzKS5hdHRyKCdpbml0LXdpZHRoJywgJCh0aGlzKS53aWR0aCgpKTsKKwkJCQkJCSQodGhpcykud2lkdGgoc2V0dGluZ3MuY29sbGFwc2VkV2lkdGgpOworCQkJCQl9CisJCQkJfSk7CisJCQl9CisJCQkKKyAgICAgICAgICAgIGVsZW1lbnQuY2hpbGRyZW4oJ0xJJykubW91c2VlbnRlcihmdW5jdGlvbigpeworICAgICAgICAgICAgICAgIGlmKCQodGhpcykuaGFzQ2xhc3MoJ2hvdmVyJykpeyByZXR1cm47IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIAlfaGlkZUFsbFN1YkxldmVscygpOworICAgICAgICAgICAgCWlmKCFfc3ViTGV2ZWxFeGlzdHMoJCh0aGlzKSkpeyByZXR1cm47IH0KKworICAgICAgICAgICAgCS8vIFNob3cgc3ViLWxldmVsCisgICAgICAgICAgICAJdmFyIHN1YkxldmVsID0gJCh0aGlzKS5jaGlsZHJlbignVUwnKTsKKyAgICAgICAgICAgIAlfc2hvd0hpZGVTdWJMZXZlbChzdWJMZXZlbCwgdHJ1ZSk7CisgICAgICAgICAgICAJCisgICAgICAgICAgICAJaWYoc2V0dGluZ3MuY29sbGFwc2libGUgJiYgISQodGhpcykuaGFzQ2xhc3MoJ2N1cnJlbnQnKSl7CisgICAgICAgICAgICAJCXZhciBpbml0V2lkdGggPSAkKHRoaXMpLmNoaWxkcmVuKCdBJykuYXR0cignaW5pdC13aWR0aCcpOworICAgICAgICAgICAgCQkkKHRoaXMpLmNoaWxkcmVuKCdBJykuYW5pbWF0ZSh7d2lkdGg6IGluaXRXaWR0aH0sICdub3JtYWwnKTsKKyAgICAgICAgICAgIAl9CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZWxlbWVudC5jaGlsZHJlbignTEknKS5tb3VzZWxlYXZlKGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgdmFyIHN1YkxldmVsID0gJCh0aGlzKS5jaGlsZHJlbignVUwnKTsKKyAgICAgICAgICAgICAgICBfc2hvd0hpZGVTdWJMZXZlbChzdWJMZXZlbCwgZmFsc2UpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmKHNldHRpbmdzLmNvbGxhcHNpYmxlICYmICEkKHRoaXMpLmhhc0NsYXNzKCdjdXJyZW50JykpeworICAgICAgICAgICAgICAgIAkkKHRoaXMpLmNoaWxkcmVuKCdBJykuYW5pbWF0ZSh7d2lkdGg6IHNldHRpbmdzLmNvbGxhcHNlZFdpZHRofSwgJ2Zhc3QnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsKKwkJfTsKKwkJCisJCWZ1bmN0aW9uIF9oaWRlQWxsU3ViTGV2ZWxzKCl7CisJCQllbGVtZW50LmNoaWxkcmVuKCdMSScpLmNoaWxkcmVuKCdVTCcpLmVhY2goZnVuY3Rpb24oKXsKKyAgICAgICAgICAgICAgICAkKHRoaXMpLmhpZGUoKTsKKyAgICAgICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdob3ZlcicpOworCQkJfSk7CisJCX07CisJCQorCQlmdW5jdGlvbiBfc2hvd0hpZGVTdWJMZXZlbChzdWJMZXZlbCwgaXNTaG93KXsKKwkJCWlmKGlzU2hvdyl7CisgICAgICAgICAgICAgICAgc3ViTGV2ZWwucGFyZW50KCkuYWRkQ2xhc3MoJ2hvdmVyJyk7CisgICAgICAgICAgICAgICAgaWYoJC5icm93c2VyLm1zaWUpeworICAgICAgICAgICAgICAgIAl2YXIgcG9zID0gc3ViTGV2ZWwucGFyZW50KCkucG9zaXRpb24oKTsKKyAgICAgICAgICAgICAgICAJc3ViTGV2ZWwuY3NzKCdsZWZ0JywgcGFyc2VJbnQocG9zWydsZWZ0J10pKTsKKyAgICAgICAgICAgICAgICB9CisJCQkJaWYoc2V0dGluZ3Muc2hvd1NwZWVkICE9ICcnKXsgc3ViTGV2ZWwuZmFkZUluKCBzZXR0aW5ncy5zaG93U3BlZWQgKTsgfSAKKwkJCQllbHNlIHsgc3ViTGV2ZWwuc2hvdygpOyB9CisJCQl9IGVsc2UgeworICAgICAgICAgICAgICAgIHN1YkxldmVsLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdob3ZlcicpOworICAgICAgICAgICAgICAgIGlmKHNldHRpbmdzLmhpZGVTcGVlZCAhPSAnJyl7IHN1YkxldmVsLmZhZGVPdXQoIHNldHRpbmdzLmhpZGVTcGVlZCApOyB9IAorICAgICAgICAgICAgICAgIGVsc2UgeyBzdWJMZXZlbC5oaWRlKCk7IH0KKwkJCX0KKwkJfTsKKwkJCisJCWZ1bmN0aW9uIF9zdWJMZXZlbEV4aXN0cyhvYmopeworCQkJcmV0dXJuIG9iai5jaGlsZHJlbignVUwnKS5sZW5ndGggPiAwOworCQl9OworCQkKKwkJLy8gICAgRW50cnkgcG9pbnQKKwkJX2J1aWxkKCk7CisJfTsKKwkKKwkvKiAgRGVmYXVsdCBTZXR0aW5ncyAgKi8KKwkkLmZuLnhCcmVhZGNydW1icy5kZWZhdWx0cyA9IHsKKwkJc2hvd1NwZWVkOiAgICAgICAgJ2Zhc3QnLAorCQloaWRlU3BlZWQ6ICAgICAgICAnJywKKwkJY29sbGFwc2libGU6ICAgICAgZmFsc2UsCisJCWNvbGxhcHNlZFdpZHRoOiAgIDEwCisJfTsKK30pKGpRdWVyeSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBpL21vZGVsLmh0bWwgYi9hcGkvbW9kZWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTBiZmRhCi0tLSAvZGV2L251bGwKKysrIGIvYXBpL21vZGVsLmh0bWwKQEAgLTAsMCArMSwxMTEgQEAKKzwhZG9jdHlwZSBodG1sPgorPCEtLSBwYXVsaXJpc2guY29tLzIwMDgvY29uZGl0aW9uYWwtc3R5bGVzaGVldHMtdnMtY3NzLWhhY2tzLWFuc3dlci1uZWl0aGVyLyAtLT4KKzwhLS1baWYgbHQgSUUgNyBdPiA8aHRtbCBjbGFzcz0ibm8tanMgaWU2IiBsYW5nPSJlbiI+IDwhW2VuZGlmXS0tPgorPCEtLVtpZiBJRSA3IF0+ICAgIDxodG1sIGNsYXNzPSJuby1qcyBpZTciIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cis8IS0tW2lmIElFIDggXT4gICAgPGh0bWwgY2xhc3M9Im5vLWpzIGllOCIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4KKzwhLS1baWYgKGd0ZSBJRSA5KXwhKElFKV0+PCEtLT4gPGh0bWwgY2xhc3M9Im5vLWpzIiBsYW5nPSJlbiI+IDwhLS08IVtlbmRpZl0tLT4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisKKyAgPCEtLSBBbHdheXMgZm9yY2UgbGF0ZXN0IElFIHJlbmRlcmluZyBlbmdpbmUgKGV2ZW4gaW4gaW50cmFuZXQpICYgQ2hyb21lIEZyYW1lCisgICAgICAgUmVtb3ZlIHRoaXMgaWYgeW91IHVzZSB0aGUgLmh0YWNjZXNzIC0tPgorICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiPgorCisgIDx0aXRsZT5EYXRhIE1vZGVsPC90aXRsZT4KKworICA8IS0tIE1vYmlsZSB2aWV3cG9ydCBvcHRpbWl6ZWQ6IGoubXAvYnBsYXRldmlld3BvcnQgLS0+CisgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KKworICA8IS0tIENTUzogaW1wbGllZCBtZWRpYT0iYWxsIiAtLT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3Mvc3R5bGUuY3NzP3Y9MiI+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3ByZXR0aWZ5LmNzcyI+CisKKyAgPCEtLSBBbGwgSmF2YVNjcmlwdCBhdCB0aGUgYm90dG9tLCBleGNlcHQgZm9yIE1vZGVybml6ciB3aGljaCBlbmFibGVzIEhUTUw1IGVsZW1lbnRzICYgZmVhdHVyZSBkZXRlY3RzIC0tPgorICA8c2NyaXB0IHNyYz0ianMvbGlicy9tb2Rlcm5penItMS43Lm1pbi5qcyI+PC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgY2xhc3M9ImhvbWUiPgorCisgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgPGhlYWRlcj4KKyAgICAgIDxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImNvbHVtbiBmaXJzdCBsYXN0IHNwYW4tMjAiPgorICAgICAgICA8ZGl2IGlkPSJzaXRlLW5hbWUiIGNsYXNzPSJjb2x1bW4gc3Bhbi0xOCBhcHBlbmQtMSBwcmVwZW5kLTEgZmlyc3QgbGFzdCI+PGEgaHJlZj0iaW5kZXguaHRtbCI+RGF0YSBNb2RlbDwvYT48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0icHJpbWFyeSIgY2xhc3M9ImNvbHVtbiBzcGFuLTE4IGFwcGVuZC0xIHByZXBlbmQtMSBmaXJzdCBsYXN0Ij4KKyAgICAgICAgICA8dWwgY2xhc3M9Im5hdmlnYXRpb24iPgorICAgICAgICAgICAgPGxpIGlkPSJuYXYtcmVzdCI+PGEgaHJlZj0icmVzdC5odG1sIj5SRVNUPC9hPjwvbGk+CisgICAgICAgICAgICA8bGkgaWQ9Im5hdi1kYXRhIj48YSBocmVmPSJtb2RlbC5odG1sIj5EYXRhIE1vZGVsPC9hPjwvbGk+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXY+CisgICAgICAgICAgPHVsIGNsYXNzPSJ4YnJlYWRjcnVtYnMiIGlkPSJicmVhZGNydW1icyI+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIGNsYXNzPSJob21lIj5Ib21lPC9hPiAmZ3Q7CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPGxpIGNsYXNzPSJjdXJyZW50Ij4KKyAgICAgICAgICAgICAgPGEgaHJlZj0ibW9kZWwuaHRtbCI+RGF0YSBNb2RlbDwvYT4KKyAgICAgICAgICAgICAgPHVsPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJtb2RlbC5odG1sIj5EYXRhIE1vZGVsPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc3QuaHRtbCI+UkVTVDwvYT48L2xpPgorICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICA8L3VsPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvaGVhZGVyPgorICAgIDxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb2x1bW4gZmlyc3QgbGFzdCBzcGFuLTIwIj4KKyAgICA8aDE+RGF0YSBNb2RlbDwvaDE+CisKKyAgICA8cD4KKyAgICAgIEFsbCBlbmRwb2ludHMgYWN0IG9uIGEgY29tbW9uIHNldCBvZiBkYXRhLiBUaGUgZGF0YSBjYW4gYmUgcmVwcmVzZW50ZWQgd2l0aCBkaWZmZXJlbmNlIG1lZGlhIChpLmUuICJNSU1FIikgdHlwZXMsIGRlcGVuZGluZyBvbiB0aGUgZW5kcG9pbnQKKyAgICAgIHRoYXQgY29uc3VtZXMgYW5kL29yIHByb2R1Y2VzIHRoZSBkYXRhLiBUaGUgZGF0YSBjYW4gZGVzY3JpYmVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1hNTC9TY2hlbWEiPlhNTCBTY2hlbWE8L2E+LCB3aGljaCBkZWZpbml0aXZlbHkKKyAgICAgIGRlc2NyaWJlcyB0aGUgWE1MIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXRhLCBidXQgaXMgYWxzbyB1c2VmdWwgZm9yIGRlc2NyaWJpbmcgdGhlIG90aGVyIGZvcm1hdHMgb2YgdGhlIGRhdGEsIHN1Y2ggYXMgPGEgaHJlZj0iaHR0cDovL2pzb24ub3JnIj5KU09OPC9hPi4KKyAgICA8L3A+CisKKyAgICA8cD4KKyAgICAgIFRoaXMgZG9jdW1lbnQgd2lsbCBkZXNjcmliZSB0aGUgZGF0YSB1c2luZyB0ZXJtcyBiYXNlZCBvbiA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvU2NoZW1hIj5YTUwgU2NoZW1hPC9hPi4KKyAgICAgIERhdGEgY2FuIGJlIGdyb3VwZWQgYnkgbmFtZXNwYWNlLCB3aXRoIGEgc2NoZW1hIGRvY3VtZW50IGRlc2NyaWJpbmcgdGhlIDxpPmVsZW1lbnRzPC9pPiBhbmQgPGk+dHlwZXM8L2k+IG9mIHRoZSBuYW1lc3BhY2UuCisgICAgICBHZW5lcmFsbHkgc3BlYWtpbmcsIDxpPnR5cGVzPC9pPiBkZWZpbmUgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZGF0YSBhbmQgPGk+ZWxlbWVudHM8L2k+IGFyZSA8aT5pbnN0YW5jZXM8L2k+IG9mIGEgdHlwZS4gRm9yIGV4YW1wbGUsCisgICAgICA8aT5lbGVtZW50czwvaT4gYXJlIHVzdWFsbHkgcHJvZHVjZWQgYnkgKG9yIGNvbnN1bWVkIGJ5KSBhIFJFU1QgZW5kcG9pbnQsIGFuZCB0aGUgc3RydWN0dXJlIG9mIGVhY2ggZWxlbWVudCBpcyBkZXNjcmliZWQgYnkKKyAgICAgIGl0cyA8aT50eXBlPC9pPi4KKyAgICA8L3A+CisKKyAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIiAvPgorICAgIDwvZGl2PgorICAgIDxmb290ZXI+CisgICAgICA8ZGl2IGlkPSJmb290ZXIiPgorICAgICAgICBHZW5lcmF0ZWQgYnkgPGEgaHJlZj0iaHR0cDovL2VudW5jaWF0ZS5jb2RlaGF1cy5vcmciPkVudW5jaWF0ZTwvYT4uCisgICAgICA8L2Rpdj4KKyAgICA8L2Zvb3Rlcj4KKyAgPC9kaXY+IDwhLS0hIGVuZCBvZiAjY29udGFpbmVyIC0tPgorCisgIDwhLS0gSmF2YVNjcmlwdCBhdCB0aGUgYm90dG9tIGZvciBmYXN0IHBhZ2UgbG9hZGluZyAtLT4KKworICA8IS0tIEdyYWIgR29vZ2xlIENETidzIGpRdWVyeSwgd2l0aCBhIHByb3RvY29sIHJlbGF0aXZlIFVSTDsgZmFsbCBiYWNrIHRvIGxvY2FsIGlmIG5lY2Vzc2FyeSAtLT4KKyAgPHNjcmlwdCBzcmM9Ii8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuNS4xL2pxdWVyeS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+d2luZG93LmpRdWVyeSB8fCBkb2N1bWVudC53cml0ZSgiPHNjcmlwdCBzcmM9J2pzL2xpYnMvanF1ZXJ5LTEuNS4xLm1pbi5qcyc+XHgzQy9zY3JpcHQ+Iik8L3NjcmlwdD4KKworICA8IS0tbWFuYWdlIHRoZSBuYXZpZ2F0aW9uIG1lbnUtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMveGJyZWFkY3J1bWJzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD4KKyAgICAkKGZ1bmN0aW9uKCkgeworICAgICAgJCgnI2JyZWFkY3J1bWJzJykueEJyZWFkY3J1bWJzKCk7CisgICAgfSk7CisgIDwvc2NyaXB0PgorCisKKyAgPCEtLSBwcmV0dGlmeSBjb2RlIGJsb2Nrcy4gc2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nb29nbGUtY29kZS1wcmV0dGlmeS8gLS0+CisgIDxzY3JpcHQgc3JjPSJqcy9saWJzL3ByZXR0aWZ5L3ByZXR0aWZ5LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD4KKyAgICAkKGZ1bmN0aW9uKCkgeworICAgICAgcHJldHR5UHJpbnQoKTsKKyAgICB9KTsKKyAgPC9zY3JpcHQ+CisKKyAgPCEtLVtpZiBsdCBJRSA3IF0+CisgICAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvZGRfYmVsYXRlZHBuZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD5ERF9iZWxhdGVkUE5HLmZpeCgiaW1nLCAucG5nX2JnIik7IC8vIEZpeCBhbnkgPGltZz4gb3IgLnBuZ19iZyBiZy1pbWFnZXMuIEFsc28sIHBsZWFzZSByZWFkIGdvby5nbC9tWml5YiA8L3NjcmlwdD4KKyAgPCFbZW5kaWZdLS0+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2FwaS9yZXNvdXJjZV9BZG1pblJlc291cmNlLmh0bWwgYi9hcGkvcmVzb3VyY2VfQWRtaW5SZXNvdXJjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YWIxMGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcGkvcmVzb3VyY2VfQWRtaW5SZXNvdXJjZS5odG1sCkBAIC0wLDAgKzEsMTU3IEBACis8IWRvY3R5cGUgaHRtbD4KKzwhLS0gcGF1bGlyaXNoLmNvbS8yMDA4L2NvbmRpdGlvbmFsLXN0eWxlc2hlZXRzLXZzLWNzcy1oYWNrcy1hbnN3ZXItbmVpdGhlci8gLS0+Cis8IS0tW2lmIGx0IElFIDcgXT4gPGh0bWwgY2xhc3M9Im5vLWpzIGllNiIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4KKzwhLS1baWYgSUUgNyBdPiAgICA8aHRtbCBjbGFzcz0ibm8tanMgaWU3IiBsYW5nPSJlbiI+IDwhW2VuZGlmXS0tPgorPCEtLVtpZiBJRSA4IF0+ICAgIDxodG1sIGNsYXNzPSJuby1qcyBpZTgiIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cis8IS0tW2lmIChndGUgSUUgOSl8IShJRSldPjwhLS0+IDxodG1sIGNsYXNzPSJuby1qcyIgbGFuZz0iZW4iPiA8IS0tPCFbZW5kaWZdLS0+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorCisgIDwhLS0gQWx3YXlzIGZvcmNlIGxhdGVzdCBJRSByZW5kZXJpbmcgZW5naW5lIChldmVuIGluIGludHJhbmV0KSAmIENocm9tZSBGcmFtZQorICAgICAgIFJlbW92ZSB0aGlzIGlmIHlvdSB1c2UgdGhlIC5odGFjY2VzcyAtLT4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlLGNocm9tZT0xIj4KKworICA8dGl0bGU+QWRtaW5SZXNvdXJjZTwvdGl0bGU+CisKKyAgPCEtLSBNb2JpbGUgdmlld3BvcnQgb3B0aW1pemVkOiBqLm1wL2JwbGF0ZXZpZXdwb3J0IC0tPgorICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CisKKyAgPCEtLSBDU1M6IGltcGxpZWQgbWVkaWE9ImFsbCIgLS0+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3N0eWxlLmNzcz92PTIiPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9wcmV0dGlmeS5jc3MiPgorCisgIDwhLS0gQWxsIEphdmFTY3JpcHQgYXQgdGhlIGJvdHRvbSwgZXhjZXB0IGZvciBNb2Rlcm5penIgd2hpY2ggZW5hYmxlcyBIVE1MNSBlbGVtZW50cyAmIGZlYXR1cmUgZGV0ZWN0cyAtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvbW9kZXJuaXpyLTEuNy5taW4uanMiPjwvc2NyaXB0PgorCis8L2hlYWQ+CisKKzxib2R5IGNsYXNzPSJob21lIj4KKworICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgIDxoZWFkZXI+CisgICAgICA8ZGl2IGlkPSJoZWFkZXIiIGNsYXNzPSJjb2x1bW4gZmlyc3QgbGFzdCBzcGFuLTIwIj4KKyAgICAgICAgPGRpdiBpZD0ic2l0ZS1uYW1lIiBjbGFzcz0iY29sdW1uIHNwYW4tMTggYXBwZW5kLTEgcHJlcGVuZC0xIGZpcnN0IGxhc3QiPjxhIGhyZWY9ImluZGV4Lmh0bWwiPkFkbWluUmVzb3VyY2U8L2E+PC9kaXY+CisgICAgICAgIDxkaXYgaWQ9InByaW1hcnkiIGNsYXNzPSJjb2x1bW4gc3Bhbi0xOCBhcHBlbmQtMSBwcmVwZW5kLTEgZmlyc3QgbGFzdCI+CisgICAgICAgICAgPHVsIGNsYXNzPSJuYXZpZ2F0aW9uIj4KKyAgICAgICAgICAgIDxsaSBpZD0ibmF2LXJlc3QiPjxhIGhyZWY9InJlc3QuaHRtbCI+UkVTVDwvYT48L2xpPgorICAgICAgICAgICAgPGxpIGlkPSJuYXYtZGF0YSI+PGEgaHJlZj0ibW9kZWwuaHRtbCI+RGF0YSBNb2RlbDwvYT48L2xpPgorICAgICAgICAgIDwvdWw+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2PgorICAgICAgICAgIDx1bCBjbGFzcz0ieGJyZWFkY3J1bWJzIiBpZD0iYnJlYWRjcnVtYnMiPgorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICA8YSBocmVmPSJpbmRleC5odG1sIiBjbGFzcz0iaG9tZSI+SG9tZTwvYT4gJmd0OworICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgPGEgaHJlZj0icmVzdC5odG1sIj5SRVNUPC9hPiAmZ3Q7CisgICAgICAgICAgICAgIDx1bD4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ibW9kZWwuaHRtbCI+RGF0YSBNb2RlbDwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXN0Lmh0bWwiPlJFU1Q8L2E+PC9saT4KKyAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8bGkgY2xhc3M9ImN1cnJlbnQiPgorICAgICAgICAgICAgICA8YSBocmVmPSJyZXNvdXJjZV9BZG1pblJlc291cmNlLmh0bWwiPkFkbWluUmVzb3VyY2U8L2E+CisgICAgICAgICAgICAgIDx1bD4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfQWRtaW5SZXNvdXJjZS5odG1sIj5BZG1pblJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX0VudGl0eVJlc291cmNlLmh0bWwiPkVudGl0eVJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX0hpdmVMaW5lYWdlUmVzb3VyY2UuaHRtbCI+SGl2ZUxpbmVhZ2VSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9NZXRhZGF0YURpc2NvdmVyeVJlc291cmNlLmh0bWwiPk1ldGFkYXRhRGlzY292ZXJ5UmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfUmV4c3RlckdyYXBoUmVzb3VyY2UuaHRtbCI+UmV4c3RlckdyYXBoUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfVHlwZXNSZXNvdXJjZS5odG1sIj5UeXBlc1Jlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgIDwvdWw+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9oZWFkZXI+CisgICAgPGRpdiBpZD0ibWFpbiIgY2xhc3M9ImNvbHVtbiBmaXJzdCBsYXN0IHNwYW4tMjAiPgorICAgICAgPGgxPkFkbWluUmVzb3VyY2U8L2gxPgorCisgICAgICA8cD5KZXJzZXkgUmVzb3VyY2UgZm9yIGFkbWluIG9wZXJhdGlvbnMuPC9wPgorICAgICAgPHA+VGhlIGZvbGxvd2luZyByZXNvdXJjZXMgYXJlIGFwcGxpY2FibGU6PC9wPgorICAgICAgPHVsPgorICAgICAgICA8bGk+CisgICAgICAgIDxhIGhyZWY9IiNwYXRoX19hZG1pbl9zdGFjay5odG1sIj4vYWRtaW4vc3RhY2s8L2E+CisgICAgICAgIDwvbGk+CisgICAgICAgIDxsaT4KKyAgICAgICAgPGEgaHJlZj0iI3BhdGhfX2FkbWluX3ZlcnNpb24uaHRtbCI+L2FkbWluL3ZlcnNpb248L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8L3VsPgorICAgICAgICA8YSBuYW1lPSJwYXRoX19hZG1pbl9zdGFjay5odG1sIj48L2E+CisgICAgICA8aDE+L2FkbWluL3N0YWNrPC9oMT4KKyAgICAgIDxhIG5hbWU9IkdFVCI+PC9hPgorICAgICAgPGgyPkdFVDwvaDI+CisgICAgICA8cD4KKyAgICAgICAgICAgIEZldGNoZXMgdGhlIHRocmVhZCBzdGFjayBkdW1wIGZvciB0aGlzIGFwcGxpY2F0aW9uLgorICAgICAgICAgIDwvcD4KKyAgICAgIDxoMz5SZXNwb25zZSBCb2R5PC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPmVsZW1lbnQ6PC90ZD4KKyAgICAgICAgICA8dGQ+KGN1c3RvbSk8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+bWVkaWEgdHlwZXM6PC90ZD4KKyAgICAgICAgICA8dGQ+dGV4dC9wbGFpbjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPHA+anNvbiByZXByZXNlbnRpbmcgdGhlIHRocmVhZCBzdGFjayBkdW1wLjwvcD4KKyAgICAgICAgPGEgbmFtZT0icGF0aF9fYWRtaW5fdmVyc2lvbi5odG1sIj48L2E+CisgICAgICA8aDE+L2FkbWluL3ZlcnNpb248L2gxPgorICAgICAgPGEgbmFtZT0iR0VUIj48L2E+CisgICAgICA8aDI+R0VUPC9oMj4KKyAgICAgIDxwPgorICAgICAgICAgICAgRmV0Y2hlcyB0aGUgdmVyc2lvbiBmb3IgdGhpcyBhcHBsaWNhdGlvbi4KKyAgICAgICAgICA8L3A+CisgICAgICA8aDM+UmVzcG9uc2UgQm9keTwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5lbGVtZW50OjwvdGQ+CisgICAgICAgICAgPHRkPihjdXN0b20pPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPm1lZGlhIHR5cGVzOjwvdGQ+CisgICAgICAgICAgPHRkPmFwcGxpY2F0aW9uL2pzb248L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxwPmpzb24gcmVwcmVzZW50aW5nIHRoZSB2ZXJzaW9uLjwvcD4KKworICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiIC8+CisgICAgPC9kaXY+CisgICAgPGZvb3Rlcj4KKyAgICAgIDxkaXYgaWQ9ImZvb3RlciI+CisgICAgICAgIEdlbmVyYXRlZCBieSA8YSBocmVmPSJodHRwOi8vZW51bmNpYXRlLmNvZGVoYXVzLm9yZyI+RW51bmNpYXRlPC9hPi4KKyAgICAgIDwvZGl2PgorICAgIDwvZm9vdGVyPgorICA8L2Rpdj4gPCEtLSEgZW5kIG9mICNjb250YWluZXIgLS0+CisKKyAgPCEtLSBKYXZhU2NyaXB0IGF0IHRoZSBib3R0b20gZm9yIGZhc3QgcGFnZSBsb2FkaW5nIC0tPgorCisgIDwhLS0gR3JhYiBHb29nbGUgQ0ROJ3MgalF1ZXJ5LCB3aXRoIGEgcHJvdG9jb2wgcmVsYXRpdmUgVVJMOyBmYWxsIGJhY2sgdG8gbG9jYWwgaWYgbmVjZXNzYXJ5IC0tPgorICA8c2NyaXB0IHNyYz0iLy9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS41LjEvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD53aW5kb3cualF1ZXJ5IHx8IGRvY3VtZW50LndyaXRlKCI8c2NyaXB0IHNyYz0nanMvbGlicy9qcXVlcnktMS41LjEubWluLmpzJz5ceDNDL3NjcmlwdD4iKTwvc2NyaXB0PgorCisgIDwhLS1tYW5hZ2UgdGhlIG5hdmlnYXRpb24gbWVudS0tPgorICA8c2NyaXB0IHNyYz0ianMvbGlicy94YnJlYWRjcnVtYnMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PgorICAgICQoZnVuY3Rpb24oKSB7CisgICAgICAkKCcjYnJlYWRjcnVtYnMnKS54QnJlYWRjcnVtYnMoKTsKKyAgICB9KTsKKyAgPC9zY3JpcHQ+CisKKworICA8IS0tIHByZXR0aWZ5IGNvZGUgYmxvY2tzLiBzZWUgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2dvb2dsZS1jb2RlLXByZXR0aWZ5LyAtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvcHJldHRpZnkvcHJldHRpZnkuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PgorICAgICQoZnVuY3Rpb24oKSB7CisgICAgICBwcmV0dHlQcmludCgpOworICAgIH0pOworICA8L3NjcmlwdD4KKworICA8IS0tW2lmIGx0IElFIDcgXT4KKyAgICA8c2NyaXB0IHNyYz0ianMvbGlicy9kZF9iZWxhdGVkcG5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PkREX2JlbGF0ZWRQTkcuZml4KCJpbWcsIC5wbmdfYmciKTsgLy8gRml4IGFueSA8aW1nPiBvciAucG5nX2JnIGJnLWltYWdlcy4gQWxzbywgcGxlYXNlIHJlYWQgZ29vLmdsL21aaXliIDwvc2NyaXB0PgorICA8IVtlbmRpZl0tLT4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvYXBpL3Jlc291cmNlX0VudGl0eVJlc291cmNlLmh0bWwgYi9hcGkvcmVzb3VyY2VfRW50aXR5UmVzb3VyY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjliNzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpL3Jlc291cmNlX0VudGl0eVJlc291cmNlLmh0bWwKQEAgLTAsMCArMSwzODEgQEAKKzwhZG9jdHlwZSBodG1sPgorPCEtLSBwYXVsaXJpc2guY29tLzIwMDgvY29uZGl0aW9uYWwtc3R5bGVzaGVldHMtdnMtY3NzLWhhY2tzLWFuc3dlci1uZWl0aGVyLyAtLT4KKzwhLS1baWYgbHQgSUUgNyBdPiA8aHRtbCBjbGFzcz0ibm8tanMgaWU2IiBsYW5nPSJlbiI+IDwhW2VuZGlmXS0tPgorPCEtLVtpZiBJRSA3IF0+ICAgIDxodG1sIGNsYXNzPSJuby1qcyBpZTciIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cis8IS0tW2lmIElFIDggXT4gICAgPGh0bWwgY2xhc3M9Im5vLWpzIGllOCIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4KKzwhLS1baWYgKGd0ZSBJRSA5KXwhKElFKV0+PCEtLT4gPGh0bWwgY2xhc3M9Im5vLWpzIiBsYW5nPSJlbiI+IDwhLS08IVtlbmRpZl0tLT4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisKKyAgPCEtLSBBbHdheXMgZm9yY2UgbGF0ZXN0IElFIHJlbmRlcmluZyBlbmdpbmUgKGV2ZW4gaW4gaW50cmFuZXQpICYgQ2hyb21lIEZyYW1lCisgICAgICAgUmVtb3ZlIHRoaXMgaWYgeW91IHVzZSB0aGUgLmh0YWNjZXNzIC0tPgorICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiPgorCisgIDx0aXRsZT5FbnRpdHlSZXNvdXJjZTwvdGl0bGU+CisKKyAgPCEtLSBNb2JpbGUgdmlld3BvcnQgb3B0aW1pemVkOiBqLm1wL2JwbGF0ZXZpZXdwb3J0IC0tPgorICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CisKKyAgPCEtLSBDU1M6IGltcGxpZWQgbWVkaWE9ImFsbCIgLS0+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3N0eWxlLmNzcz92PTIiPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9wcmV0dGlmeS5jc3MiPgorCisgIDwhLS0gQWxsIEphdmFTY3JpcHQgYXQgdGhlIGJvdHRvbSwgZXhjZXB0IGZvciBNb2Rlcm5penIgd2hpY2ggZW5hYmxlcyBIVE1MNSBlbGVtZW50cyAmIGZlYXR1cmUgZGV0ZWN0cyAtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvbW9kZXJuaXpyLTEuNy5taW4uanMiPjwvc2NyaXB0PgorCis8L2hlYWQ+CisKKzxib2R5IGNsYXNzPSJob21lIj4KKworICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgIDxoZWFkZXI+CisgICAgICA8ZGl2IGlkPSJoZWFkZXIiIGNsYXNzPSJjb2x1bW4gZmlyc3QgbGFzdCBzcGFuLTIwIj4KKyAgICAgICAgPGRpdiBpZD0ic2l0ZS1uYW1lIiBjbGFzcz0iY29sdW1uIHNwYW4tMTggYXBwZW5kLTEgcHJlcGVuZC0xIGZpcnN0IGxhc3QiPjxhIGhyZWY9ImluZGV4Lmh0bWwiPkVudGl0eVJlc291cmNlPC9hPjwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJwcmltYXJ5IiBjbGFzcz0iY29sdW1uIHNwYW4tMTggYXBwZW5kLTEgcHJlcGVuZC0xIGZpcnN0IGxhc3QiPgorICAgICAgICAgIDx1bCBjbGFzcz0ibmF2aWdhdGlvbiI+CisgICAgICAgICAgICA8bGkgaWQ9Im5hdi1yZXN0Ij48YSBocmVmPSJyZXN0Lmh0bWwiPlJFU1Q8L2E+PC9saT4KKyAgICAgICAgICAgIDxsaSBpZD0ibmF2LWRhdGEiPjxhIGhyZWY9Im1vZGVsLmh0bWwiPkRhdGEgTW9kZWw8L2E+PC9saT4KKyAgICAgICAgICA8L3VsPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdj4KKyAgICAgICAgICA8dWwgY2xhc3M9InhicmVhZGNydW1icyIgaWQ9ImJyZWFkY3J1bWJzIj4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgY2xhc3M9ImhvbWUiPkhvbWU8L2E+ICZndDsKKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgIDxhIGhyZWY9InJlc3QuaHRtbCI+UkVTVDwvYT4gJmd0OworICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Im1vZGVsLmh0bWwiPkRhdGEgTW9kZWw8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzdC5odG1sIj5SRVNUPC9hPjwvbGk+CisgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPGxpIGNsYXNzPSJjdXJyZW50Ij4KKyAgICAgICAgICAgICAgPGEgaHJlZj0icmVzb3VyY2VfRW50aXR5UmVzb3VyY2UuaHRtbCI+RW50aXR5UmVzb3VyY2U8L2E+CisgICAgICAgICAgICAgIDx1bD4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfQWRtaW5SZXNvdXJjZS5odG1sIj5BZG1pblJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX0VudGl0eVJlc291cmNlLmh0bWwiPkVudGl0eVJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX0hpdmVMaW5lYWdlUmVzb3VyY2UuaHRtbCI+SGl2ZUxpbmVhZ2VSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9NZXRhZGF0YURpc2NvdmVyeVJlc291cmNlLmh0bWwiPk1ldGFkYXRhRGlzY292ZXJ5UmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfUmV4c3RlckdyYXBoUmVzb3VyY2UuaHRtbCI+UmV4c3RlckdyYXBoUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfVHlwZXNSZXNvdXJjZS5odG1sIj5UeXBlc1Jlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgIDwvdWw+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9oZWFkZXI+CisgICAgPGRpdiBpZD0ibWFpbiIgY2xhc3M9ImNvbHVtbiBmaXJzdCBsYXN0IHNwYW4tMjAiPgorICAgICAgPGgxPkVudGl0eVJlc291cmNlPC9oMT4KKworICAgICAgPHA+RW50aXR5IG1hbmFnZW1lbnQgb3BlcmF0aW9ucyBhcyBSRVNUIEFQSS4KKworQW4gZW50aXR5IGlzIGFuICJpbnN0YW5jZSIgb2YgYSBUeXBlLiAgRW50aXRpZXMgY29uZm9ybSB0byB0aGUgZGVmaW5pdGlvbgorb2YgdGhlIFR5cGUgdGhleSBjb3JyZXNwb25kIHdpdGguPC9wPgorICAgICAgPHA+VGhlIGZvbGxvd2luZyByZXNvdXJjZXMgYXJlIGFwcGxpY2FibGU6PC9wPgorICAgICAgPHVsPgorICAgICAgICA8bGk+CisgICAgICAgIDxhIGhyZWY9IiNwYXRoX19lbnRpdGllcy5odG1sIj4vZW50aXRpZXM8L2E+CisgICAgICAgIDwvbGk+CisgICAgICAgIDxsaT4KKyAgICAgICAgPGEgaHJlZj0iI3BhdGhfX2VudGl0aWVzXy1ndWlkLS5odG1sIj4vZW50aXRpZXMve2d1aWR9PC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGk+CisgICAgICAgIDxhIGhyZWY9IiNwYXRoX19lbnRpdGllc18tZ3VpZC1fdHJhaXRzLmh0bWwiPi9lbnRpdGllcy97Z3VpZH0vdHJhaXRzPC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGk+CisgICAgICAgIDxhIGhyZWY9IiNwYXRoX19lbnRpdGllc18tZ3VpZC1fdHJhaXRzXy10cmFpdE5hbWUtLmh0bWwiPi9lbnRpdGllcy97Z3VpZH0vdHJhaXRzL3t0cmFpdE5hbWV9PC9hPgorICAgICAgICA8L2xpPgorICAgICAgPC91bD4KKyAgICAgICAgPGEgbmFtZT0icGF0aF9fZW50aXRpZXMuaHRtbCI+PC9hPgorICAgICAgPGgxPi9lbnRpdGllczwvaDE+CisgICAgICA8YSBuYW1lPSJQT1NUIj48L2E+CisgICAgICA8aDI+UE9TVDwvaDI+CisgICAgICA8cD4KKyAgICAgICAgICAgIFN1Ym1pdHMgYW4gZW50aXR5IGRlZmluaXRpb24gKGluc3RhbmNlKSBjb3JyZXNwb25kaW5nIHRvIGEgZ2l2ZW4gdHlwZS4KKyAgICAgICAgICA8L3A+CisgICAgICA8aDM+UmVzcG9uc2UgQm9keTwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5lbGVtZW50OjwvdGQ+CisgICAgICAgICAgPHRkPihjdXN0b20pPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPm1lZGlhIHR5cGVzOjwvdGQ+CisgICAgICAgICAgPHRkPmFwcGxpY2F0aW9uL2pzb248L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxwPihubyBkb2N1bWVudGF0aW9uIHByb3ZpZGVkKTwvcD4KKyAgICAgIDxhIG5hbWU9IkdFVCI+PC9hPgorICAgICAgPGgyPkdFVDwvaDI+CisgICAgICA8cD4KKyAgICAgICAgICAgIEdldHMgdGhlIGxpc3Qgb2YgZW50aXRpZXMgZm9yIGEgZ2l2ZW4gZW50aXR5IHR5cGUuCisgICAgICAgICAgPC9wPgorICAgICAgPGgzPlBhcmFtZXRlcnM8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPm5hbWU8L3RoPgorICAgICAgICAgIDx0aD5kZXNjcmlwdGlvbjwvdGg+CisgICAgICAgICAgPHRoPnR5cGU8L3RoPgorICAgICAgICAgIDx0aD5kZWZhdWx0PC90aD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD50eXBlPC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICBuYW1lIG9mIGEgdHlwZSB3aGljaCBpcyB1bmlxdWUKKyAgICAgICAgICA8L3RkPgorICAgICAgICAgIDx0ZD5xdWVyeTwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD4obm8gZG9jdW1lbnRhdGlvbiBwcm92aWRlZCk8L3A+CisgICAgICAgIDxhIG5hbWU9InBhdGhfX2VudGl0aWVzXy1ndWlkLS5odG1sIj48L2E+CisgICAgICA8aDE+L2VudGl0aWVzL3tndWlkfTwvaDE+CisgICAgICA8YSBuYW1lPSJHRVQiPjwvYT4KKyAgICAgIDxoMj5HRVQ8L2gyPgorICAgICAgPHA+CisgICAgICAgICAgICBGZXRjaCB0aGUgY29tcGxldGUgZGVmaW5pdGlvbiBvZiBhbiBlbnRpdHkgZ2l2ZW4gaXRzIEdVSUQuCisgICAgICAgICAgPC9wPgorICAgICAgPGgzPlBhcmFtZXRlcnM8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPm5hbWU8L3RoPgorICAgICAgICAgIDx0aD5kZXNjcmlwdGlvbjwvdGg+CisgICAgICAgICAgPHRoPnR5cGU8L3RoPgorICAgICAgICAgIDx0aD5kZWZhdWx0PC90aD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5ndWlkPC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICBHVUlEIGZvciB0aGUgZW50aXR5CisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cGF0aDwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD4obm8gZG9jdW1lbnRhdGlvbiBwcm92aWRlZCk8L3A+CisgICAgICA8YSBuYW1lPSJQVVQiPjwvYT4KKyAgICAgIDxoMj5QVVQ8L2gyPgorICAgICAgPHA+CisgICAgICAgICAgICBBZGRzIHByb3BlcnR5IHRvIHRoZSBnaXZlbiBlbnRpdHkgaWQKKyAgICAgICAgICA8L3A+CisgICAgICA8aDM+UGFyYW1ldGVyczwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGg+bmFtZTwvdGg+CisgICAgICAgICAgPHRoPmRlc2NyaXB0aW9uPC90aD4KKyAgICAgICAgICA8dGg+dHlwZTwvdGg+CisgICAgICAgICAgPHRoPmRlZmF1bHQ8L3RoPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPmd1aWQ8L3RkPgorICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgIGVudGl0eSBpZAorICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPHRkPnBhdGg8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPnByb3BlcnR5PC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICBwcm9wZXJ0eSB0byBhZGQKKyAgICAgICAgICA8L3RkPgorICAgICAgICAgIDx0ZD5xdWVyeTwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+dmFsdWU8L3RkPgorICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgIHByb3BlcnR5J3MgdmFsdWUKKyAgICAgICAgICA8L3RkPgorICAgICAgICAgIDx0ZD5xdWVyeTwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD5yZXNwb25zZSBwYXlsb2FkIGFzIGpzb248L3A+CisgICAgICAgIDxhIG5hbWU9InBhdGhfX2VudGl0aWVzXy1ndWlkLV90cmFpdHMuaHRtbCI+PC9hPgorICAgICAgPGgxPi9lbnRpdGllcy97Z3VpZH0vdHJhaXRzPC9oMT4KKyAgICAgIDxhIG5hbWU9IkdFVCI+PC9hPgorICAgICAgPGgyPkdFVDwvaDI+CisgICAgICA8cD4KKyAgICAgICAgICAgIEdldHMgdGhlIGxpc3Qgb2YgdHJhaXQgbmFtZXMgZm9yIGEgZ2l2ZW4gZW50aXR5IHJlcHJlc2VudGVkIGJ5IGEgZ3VpZC4KKyAgICAgICAgICA8L3A+CisgICAgICA8aDM+UGFyYW1ldGVyczwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGg+bmFtZTwvdGg+CisgICAgICAgICAgPHRoPmRlc2NyaXB0aW9uPC90aD4KKyAgICAgICAgICA8dGg+dHlwZTwvdGg+CisgICAgICAgICAgPHRoPmRlZmF1bHQ8L3RoPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPmd1aWQ8L3RkPgorICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgIGdsb2JhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZW50aXR5CisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cGF0aDwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD5hIGxpc3Qgb2YgdHJhaXQgbmFtZXMgZm9yIHRoZSBnaXZlbiBlbnRpdHkgZ3VpZDwvcD4KKyAgICAgIDxhIG5hbWU9IlBPU1QiPjwvYT4KKyAgICAgIDxoMj5QT1NUPC9oMj4KKyAgICAgIDxwPgorICAgICAgICAgICAgQWRkcyBhIG5ldyB0cmFpdCB0byBhbiBleGlzdGluZyBlbnRpdHkgcmVwcmVzZW50ZWQgYnkgYSBndWlkLgorICAgICAgICAgIDwvcD4KKyAgICAgIDxoMz5QYXJhbWV0ZXJzPC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aD5uYW1lPC90aD4KKyAgICAgICAgICA8dGg+ZGVzY3JpcHRpb248L3RoPgorICAgICAgICAgIDx0aD50eXBlPC90aD4KKyAgICAgICAgICA8dGg+ZGVmYXVsdDwvdGg+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+Z3VpZDwvdGQ+CisgICAgICAgICAgPHRkPgorICAgICAgICAgICAgZ2xvYmFsbHkgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBlbnRpdHkKKyAgICAgICAgICA8L3RkPgorICAgICAgICAgIDx0ZD5wYXRoPC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8aDM+UmVzcG9uc2UgQm9keTwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5lbGVtZW50OjwvdGQ+CisgICAgICAgICAgPHRkPihjdXN0b20pPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPm1lZGlhIHR5cGVzOjwvdGQ+CisgICAgICAgICAgPHRkPmFwcGxpY2F0aW9uL2pzb248L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxwPihubyBkb2N1bWVudGF0aW9uIHByb3ZpZGVkKTwvcD4KKyAgICAgICAgPGEgbmFtZT0icGF0aF9fZW50aXRpZXNfLWd1aWQtX3RyYWl0c18tdHJhaXROYW1lLS5odG1sIj48L2E+CisgICAgICA8aDE+L2VudGl0aWVzL3tndWlkfS90cmFpdHMve3RyYWl0TmFtZX08L2gxPgorICAgICAgPGEgbmFtZT0iREVMRVRFIj48L2E+CisgICAgICA8aDI+REVMRVRFPC9oMj4KKyAgICAgIDxwPgorICAgICAgICAgICAgRGVsZXRlcyBhIGdpdmVuIHRyYWl0IGZyb20gYW4gZXhpc3RpbmcgZW50aXR5IHJlcHJlc2VudGVkIGJ5IGEgZ3VpZC4KKyAgICAgICAgICA8L3A+CisgICAgICA8aDM+UGFyYW1ldGVyczwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGg+bmFtZTwvdGg+CisgICAgICAgICAgPHRoPmRlc2NyaXB0aW9uPC90aD4KKyAgICAgICAgICA8dGg+dHlwZTwvdGg+CisgICAgICAgICAgPHRoPmRlZmF1bHQ8L3RoPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPmd1aWQ8L3RkPgorICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgIGdsb2JhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgZW50aXR5CisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cGF0aDwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+dHJhaXROYW1lPC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICBuYW1lIG9mIHRoZSB0cmFpdAorICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPHRkPnBhdGg8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxoMz5SZXNwb25zZSBCb2R5PC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPmVsZW1lbnQ6PC90ZD4KKyAgICAgICAgICA8dGQ+KGN1c3RvbSk8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+bWVkaWEgdHlwZXM6PC90ZD4KKyAgICAgICAgICA8dGQ+YXBwbGljYXRpb24vanNvbjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPHA+KG5vIGRvY3VtZW50YXRpb24gcHJvdmlkZWQpPC9wPgorCisgICAgICA8ZGl2IGNsYXNzPSJjbGVhciIgLz4KKyAgICA8L2Rpdj4KKyAgICA8Zm9vdGVyPgorICAgICAgPGRpdiBpZD0iZm9vdGVyIj4KKyAgICAgICAgR2VuZXJhdGVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly9lbnVuY2lhdGUuY29kZWhhdXMub3JnIj5FbnVuY2lhdGU8L2E+LgorICAgICAgPC9kaXY+CisgICAgPC9mb290ZXI+CisgIDwvZGl2PiA8IS0tISBlbmQgb2YgI2NvbnRhaW5lciAtLT4KKworICA8IS0tIEphdmFTY3JpcHQgYXQgdGhlIGJvdHRvbSBmb3IgZmFzdCBwYWdlIGxvYWRpbmcgLS0+CisKKyAgPCEtLSBHcmFiIEdvb2dsZSBDRE4ncyBqUXVlcnksIHdpdGggYSBwcm90b2NvbCByZWxhdGl2ZSBVUkw7IGZhbGwgYmFjayB0byBsb2NhbCBpZiBuZWNlc3NhcnkgLS0+CisgIDxzY3JpcHQgc3JjPSIvL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjUuMS9qcXVlcnkuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PndpbmRvdy5qUXVlcnkgfHwgZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgc3JjPSdqcy9saWJzL2pxdWVyeS0xLjUuMS5taW4uanMnPlx4M0Mvc2NyaXB0PiIpPC9zY3JpcHQ+CisKKyAgPCEtLW1hbmFnZSB0aGUgbmF2aWdhdGlvbiBtZW51LS0+CisgIDxzY3JpcHQgc3JjPSJqcy9saWJzL3hicmVhZGNydW1icy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+CisgICAgJChmdW5jdGlvbigpIHsKKyAgICAgICQoJyNicmVhZGNydW1icycpLnhCcmVhZGNydW1icygpOworICAgIH0pOworICA8L3NjcmlwdD4KKworCisgIDwhLS0gcHJldHRpZnkgY29kZSBibG9ja3MuIHNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ29vZ2xlLWNvZGUtcHJldHRpZnkvIC0tPgorICA8c2NyaXB0IHNyYz0ianMvbGlicy9wcmV0dGlmeS9wcmV0dGlmeS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+CisgICAgJChmdW5jdGlvbigpIHsKKyAgICAgIHByZXR0eVByaW50KCk7CisgICAgfSk7CisgIDwvc2NyaXB0PgorCisgIDwhLS1baWYgbHQgSUUgNyBdPgorICAgIDxzY3JpcHQgc3JjPSJqcy9saWJzL2RkX2JlbGF0ZWRwbmcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+RERfYmVsYXRlZFBORy5maXgoImltZywgLnBuZ19iZyIpOyAvLyBGaXggYW55IDxpbWc+IG9yIC5wbmdfYmcgYmctaW1hZ2VzLiBBbHNvLCBwbGVhc2UgcmVhZCBnb28uZ2wvbVppeWIgPC9zY3JpcHQ+CisgIDwhW2VuZGlmXS0tPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9hcGkvcmVzb3VyY2VfSGl2ZUxpbmVhZ2VSZXNvdXJjZS5odG1sIGIvYXBpL3Jlc291cmNlX0hpdmVMaW5lYWdlUmVzb3VyY2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTEyMDRiCi0tLSAvZGV2L251bGwKKysrIGIvYXBpL3Jlc291cmNlX0hpdmVMaW5lYWdlUmVzb3VyY2UuaHRtbApAQCAtMCwwICsxLDIzMCBAQAorPCFkb2N0eXBlIGh0bWw+Cis8IS0tIHBhdWxpcmlzaC5jb20vMjAwOC9jb25kaXRpb25hbC1zdHlsZXNoZWV0cy12cy1jc3MtaGFja3MtYW5zd2VyLW5laXRoZXIvIC0tPgorPCEtLVtpZiBsdCBJRSA3IF0+IDxodG1sIGNsYXNzPSJuby1qcyBpZTYiIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cis8IS0tW2lmIElFIDcgXT4gICAgPGh0bWwgY2xhc3M9Im5vLWpzIGllNyIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4KKzwhLS1baWYgSUUgOCBdPiAgICA8aHRtbCBjbGFzcz0ibm8tanMgaWU4IiBsYW5nPSJlbiI+IDwhW2VuZGlmXS0tPgorPCEtLVtpZiAoZ3RlIElFIDkpfCEoSUUpXT48IS0tPiA8aHRtbCBjbGFzcz0ibm8tanMiIGxhbmc9ImVuIj4gPCEtLTwhW2VuZGlmXS0tPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKworICA8IS0tIEFsd2F5cyBmb3JjZSBsYXRlc3QgSUUgcmVuZGVyaW5nIGVuZ2luZSAoZXZlbiBpbiBpbnRyYW5ldCkgJiBDaHJvbWUgRnJhbWUKKyAgICAgICBSZW1vdmUgdGhpcyBpZiB5b3UgdXNlIHRoZSAuaHRhY2Nlc3MgLS0+CisgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+CisKKyAgPHRpdGxlPkhpdmVMaW5lYWdlUmVzb3VyY2U8L3RpdGxlPgorCisgIDwhLS0gTW9iaWxlIHZpZXdwb3J0IG9wdGltaXplZDogai5tcC9icGxhdGV2aWV3cG9ydCAtLT4KKyAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgorCisgIDwhLS0gQ1NTOiBpbXBsaWVkIG1lZGlhPSJhbGwiIC0tPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9zdHlsZS5jc3M/dj0yIj4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvcHJldHRpZnkuY3NzIj4KKworICA8IS0tIEFsbCBKYXZhU2NyaXB0IGF0IHRoZSBib3R0b20sIGV4Y2VwdCBmb3IgTW9kZXJuaXpyIHdoaWNoIGVuYWJsZXMgSFRNTDUgZWxlbWVudHMgJiBmZWF0dXJlIGRldGVjdHMgLS0+CisgIDxzY3JpcHQgc3JjPSJqcy9saWJzL21vZGVybml6ci0xLjcubWluLmpzIj48L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBjbGFzcz0iaG9tZSI+CisKKyAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICA8aGVhZGVyPgorICAgICAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iY29sdW1uIGZpcnN0IGxhc3Qgc3Bhbi0yMCI+CisgICAgICAgIDxkaXYgaWQ9InNpdGUtbmFtZSIgY2xhc3M9ImNvbHVtbiBzcGFuLTE4IGFwcGVuZC0xIHByZXBlbmQtMSBmaXJzdCBsYXN0Ij48YSBocmVmPSJpbmRleC5odG1sIj5IaXZlTGluZWFnZVJlc291cmNlPC9hPjwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJwcmltYXJ5IiBjbGFzcz0iY29sdW1uIHNwYW4tMTggYXBwZW5kLTEgcHJlcGVuZC0xIGZpcnN0IGxhc3QiPgorICAgICAgICAgIDx1bCBjbGFzcz0ibmF2aWdhdGlvbiI+CisgICAgICAgICAgICA8bGkgaWQ9Im5hdi1yZXN0Ij48YSBocmVmPSJyZXN0Lmh0bWwiPlJFU1Q8L2E+PC9saT4KKyAgICAgICAgICAgIDxsaSBpZD0ibmF2LWRhdGEiPjxhIGhyZWY9Im1vZGVsLmh0bWwiPkRhdGEgTW9kZWw8L2E+PC9saT4KKyAgICAgICAgICA8L3VsPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdj4KKyAgICAgICAgICA8dWwgY2xhc3M9InhicmVhZGNydW1icyIgaWQ9ImJyZWFkY3J1bWJzIj4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgY2xhc3M9ImhvbWUiPkhvbWU8L2E+ICZndDsKKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgIDxhIGhyZWY9InJlc3QuaHRtbCI+UkVTVDwvYT4gJmd0OworICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Im1vZGVsLmh0bWwiPkRhdGEgTW9kZWw8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzdC5odG1sIj5SRVNUPC9hPjwvbGk+CisgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPGxpIGNsYXNzPSJjdXJyZW50Ij4KKyAgICAgICAgICAgICAgPGEgaHJlZj0icmVzb3VyY2VfSGl2ZUxpbmVhZ2VSZXNvdXJjZS5odG1sIj5IaXZlTGluZWFnZVJlc291cmNlPC9hPgorICAgICAgICAgICAgICA8dWw+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX0FkbWluUmVzb3VyY2UuaHRtbCI+QWRtaW5SZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9FbnRpdHlSZXNvdXJjZS5odG1sIj5FbnRpdHlSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9IaXZlTGluZWFnZVJlc291cmNlLmh0bWwiPkhpdmVMaW5lYWdlUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfTWV0YWRhdGFEaXNjb3ZlcnlSZXNvdXJjZS5odG1sIj5NZXRhZGF0YURpc2NvdmVyeVJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX1JleHN0ZXJHcmFwaFJlc291cmNlLmh0bWwiPlJleHN0ZXJHcmFwaFJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX1R5cGVzUmVzb3VyY2UuaHRtbCI+VHlwZXNSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICA8L3VsPgorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvaGVhZGVyPgorICAgIDxkaXYgaWQ9Im1haW4iIGNsYXNzPSJjb2x1bW4gZmlyc3QgbGFzdCBzcGFuLTIwIj4KKyAgICAgIDxoMT5IaXZlTGluZWFnZVJlc291cmNlPC9oMT4KKworICAgICAgPHA+SmVyc2V5IFJlc291cmNlIGZvciBIaXZlIFRhYmxlIExpbmVhZ2UuPC9wPgorICAgICAgPHA+VGhlIGZvbGxvd2luZyByZXNvdXJjZXMgYXJlIGFwcGxpY2FibGU6PC9wPgorICAgICAgPHVsPgorICAgICAgICA8bGk+CisgICAgICAgIDxhIGhyZWY9IiNwYXRoX19saW5lYWdlX2hpdmVfdGFibGVfLXRhYmxlTmFtZS1faW5wdXRzX2dyYXBoLmh0bWwiPi9saW5lYWdlL2hpdmUvdGFibGUve3RhYmxlTmFtZX0vaW5wdXRzL2dyYXBoPC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGk+CisgICAgICAgIDxhIGhyZWY9IiNwYXRoX19saW5lYWdlX2hpdmVfdGFibGVfLXRhYmxlTmFtZS1fb3V0cHV0c19ncmFwaC5odG1sIj4vbGluZWFnZS9oaXZlL3RhYmxlL3t0YWJsZU5hbWV9L291dHB1dHMvZ3JhcGg8L2E+CisgICAgICAgIDwvbGk+CisgICAgICAgIDxsaT4KKyAgICAgICAgPGEgaHJlZj0iI3BhdGhfX2xpbmVhZ2VfaGl2ZV90YWJsZV8tdGFibGVOYW1lLV9zY2hlbWEuaHRtbCI+L2xpbmVhZ2UvaGl2ZS90YWJsZS97dGFibGVOYW1lfS9zY2hlbWE8L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8L3VsPgorICAgICAgICA8YSBuYW1lPSJwYXRoX19saW5lYWdlX2hpdmVfdGFibGVfLXRhYmxlTmFtZS1faW5wdXRzX2dyYXBoLmh0bWwiPjwvYT4KKyAgICAgIDxoMT4vbGluZWFnZS9oaXZlL3RhYmxlL3t0YWJsZU5hbWV9L2lucHV0cy9ncmFwaDwvaDE+CisgICAgICA8YSBuYW1lPSJHRVQiPjwvYT4KKyAgICAgIDxoMj5HRVQ8L2gyPgorICAgICAgPHA+CisgICAgICAgICAgICBSZXR1cm5zIHRoZSBpbnB1dHMgZ3JhcGggZm9yIGEgZ2l2ZW4gZW50aXR5LgorICAgICAgICAgIDwvcD4KKyAgICAgIDxoMz5QYXJhbWV0ZXJzPC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aD5uYW1lPC90aD4KKyAgICAgICAgICA8dGg+ZGVzY3JpcHRpb248L3RoPgorICAgICAgICAgIDx0aD50eXBlPC90aD4KKyAgICAgICAgICA8dGg+ZGVmYXVsdDwvdGg+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+dGFibGVOYW1lPC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICB0YWJsZSBuYW1lCisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cGF0aDwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD4obm8gZG9jdW1lbnRhdGlvbiBwcm92aWRlZCk8L3A+CisgICAgICAgIDxhIG5hbWU9InBhdGhfX2xpbmVhZ2VfaGl2ZV90YWJsZV8tdGFibGVOYW1lLV9vdXRwdXRzX2dyYXBoLmh0bWwiPjwvYT4KKyAgICAgIDxoMT4vbGluZWFnZS9oaXZlL3RhYmxlL3t0YWJsZU5hbWV9L291dHB1dHMvZ3JhcGg8L2gxPgorICAgICAgPGEgbmFtZT0iR0VUIj48L2E+CisgICAgICA8aDI+R0VUPC9oMj4KKyAgICAgIDxwPgorICAgICAgICAgICAgUmV0dXJucyB0aGUgb3V0cHV0cyBncmFwaCBmb3IgYSBnaXZlbiBlbnRpdHkuCisgICAgICAgICAgPC9wPgorICAgICAgPGgzPlBhcmFtZXRlcnM8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPm5hbWU8L3RoPgorICAgICAgICAgIDx0aD5kZXNjcmlwdGlvbjwvdGg+CisgICAgICAgICAgPHRoPnR5cGU8L3RoPgorICAgICAgICAgIDx0aD5kZWZhdWx0PC90aD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD50YWJsZU5hbWU8L3RkPgorICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgIHRhYmxlIG5hbWUKKyAgICAgICAgICA8L3RkPgorICAgICAgICAgIDx0ZD5wYXRoPC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8aDM+UmVzcG9uc2UgQm9keTwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5lbGVtZW50OjwvdGQ+CisgICAgICAgICAgPHRkPihjdXN0b20pPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPm1lZGlhIHR5cGVzOjwvdGQ+CisgICAgICAgICAgPHRkPmFwcGxpY2F0aW9uL2pzb248L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxwPihubyBkb2N1bWVudGF0aW9uIHByb3ZpZGVkKTwvcD4KKyAgICAgICAgPGEgbmFtZT0icGF0aF9fbGluZWFnZV9oaXZlX3RhYmxlXy10YWJsZU5hbWUtX3NjaGVtYS5odG1sIj48L2E+CisgICAgICA8aDE+L2xpbmVhZ2UvaGl2ZS90YWJsZS97dGFibGVOYW1lfS9zY2hlbWE8L2gxPgorICAgICAgPGEgbmFtZT0iR0VUIj48L2E+CisgICAgICA8aDI+R0VUPC9oMj4KKyAgICAgIDxwPgorICAgICAgICAgICAgUmV0dXJuIHRoZSBzY2hlbWEgZm9yIHRoZSBnaXZlbiB0YWJsZU5hbWUuCisgICAgICAgICAgPC9wPgorICAgICAgPGgzPlBhcmFtZXRlcnM8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPm5hbWU8L3RoPgorICAgICAgICAgIDx0aD5kZXNjcmlwdGlvbjwvdGg+CisgICAgICAgICAgPHRoPnR5cGU8L3RoPgorICAgICAgICAgIDx0aD5kZWZhdWx0PC90aD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD50YWJsZU5hbWU8L3RkPgorICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgIHRhYmxlIG5hbWUKKyAgICAgICAgICA8L3RkPgorICAgICAgICAgIDx0ZD5wYXRoPC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8aDM+UmVzcG9uc2UgQm9keTwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5lbGVtZW50OjwvdGQ+CisgICAgICAgICAgPHRkPihjdXN0b20pPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPm1lZGlhIHR5cGVzOjwvdGQ+CisgICAgICAgICAgPHRkPmFwcGxpY2F0aW9uL2pzb248L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxwPihubyBkb2N1bWVudGF0aW9uIHByb3ZpZGVkKTwvcD4KKworICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiIC8+CisgICAgPC9kaXY+CisgICAgPGZvb3Rlcj4KKyAgICAgIDxkaXYgaWQ9ImZvb3RlciI+CisgICAgICAgIEdlbmVyYXRlZCBieSA8YSBocmVmPSJodHRwOi8vZW51bmNpYXRlLmNvZGVoYXVzLm9yZyI+RW51bmNpYXRlPC9hPi4KKyAgICAgIDwvZGl2PgorICAgIDwvZm9vdGVyPgorICA8L2Rpdj4gPCEtLSEgZW5kIG9mICNjb250YWluZXIgLS0+CisKKyAgPCEtLSBKYXZhU2NyaXB0IGF0IHRoZSBib3R0b20gZm9yIGZhc3QgcGFnZSBsb2FkaW5nIC0tPgorCisgIDwhLS0gR3JhYiBHb29nbGUgQ0ROJ3MgalF1ZXJ5LCB3aXRoIGEgcHJvdG9jb2wgcmVsYXRpdmUgVVJMOyBmYWxsIGJhY2sgdG8gbG9jYWwgaWYgbmVjZXNzYXJ5IC0tPgorICA8c2NyaXB0IHNyYz0iLy9hamF4Lmdvb2dsZWFwaXMuY29tL2FqYXgvbGlicy9qcXVlcnkvMS41LjEvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD53aW5kb3cualF1ZXJ5IHx8IGRvY3VtZW50LndyaXRlKCI8c2NyaXB0IHNyYz0nanMvbGlicy9qcXVlcnktMS41LjEubWluLmpzJz5ceDNDL3NjcmlwdD4iKTwvc2NyaXB0PgorCisgIDwhLS1tYW5hZ2UgdGhlIG5hdmlnYXRpb24gbWVudS0tPgorICA8c2NyaXB0IHNyYz0ianMvbGlicy94YnJlYWRjcnVtYnMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PgorICAgICQoZnVuY3Rpb24oKSB7CisgICAgICAkKCcjYnJlYWRjcnVtYnMnKS54QnJlYWRjcnVtYnMoKTsKKyAgICB9KTsKKyAgPC9zY3JpcHQ+CisKKworICA8IS0tIHByZXR0aWZ5IGNvZGUgYmxvY2tzLiBzZWUgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2dvb2dsZS1jb2RlLXByZXR0aWZ5LyAtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvcHJldHRpZnkvcHJldHRpZnkuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PgorICAgICQoZnVuY3Rpb24oKSB7CisgICAgICBwcmV0dHlQcmludCgpOworICAgIH0pOworICA8L3NjcmlwdD4KKworICA8IS0tW2lmIGx0IElFIDcgXT4KKyAgICA8c2NyaXB0IHNyYz0ianMvbGlicy9kZF9iZWxhdGVkcG5nLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PkREX2JlbGF0ZWRQTkcuZml4KCJpbWcsIC5wbmdfYmciKTsgLy8gRml4IGFueSA8aW1nPiBvciAucG5nX2JnIGJnLWltYWdlcy4gQWxzbywgcGxlYXNlIHJlYWQgZ29vLmdsL21aaXliIDwvc2NyaXB0PgorICA8IVtlbmRpZl0tLT4KKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvYXBpL3Jlc291cmNlX01ldGFkYXRhRGlzY292ZXJ5UmVzb3VyY2UuaHRtbCBiL2FwaS9yZXNvdXJjZV9NZXRhZGF0YURpc2NvdmVyeVJlc291cmNlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEwY2ZjOQotLS0gL2Rldi9udWxsCisrKyBiL2FwaS9yZXNvdXJjZV9NZXRhZGF0YURpc2NvdmVyeVJlc291cmNlLmh0bWwKQEAgLTAsMCArMSwyNjkgQEAKKzwhZG9jdHlwZSBodG1sPgorPCEtLSBwYXVsaXJpc2guY29tLzIwMDgvY29uZGl0aW9uYWwtc3R5bGVzaGVldHMtdnMtY3NzLWhhY2tzLWFuc3dlci1uZWl0aGVyLyAtLT4KKzwhLS1baWYgbHQgSUUgNyBdPiA8aHRtbCBjbGFzcz0ibm8tanMgaWU2IiBsYW5nPSJlbiI+IDwhW2VuZGlmXS0tPgorPCEtLVtpZiBJRSA3IF0+ICAgIDxodG1sIGNsYXNzPSJuby1qcyBpZTciIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cis8IS0tW2lmIElFIDggXT4gICAgPGh0bWwgY2xhc3M9Im5vLWpzIGllOCIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4KKzwhLS1baWYgKGd0ZSBJRSA5KXwhKElFKV0+PCEtLT4gPGh0bWwgY2xhc3M9Im5vLWpzIiBsYW5nPSJlbiI+IDwhLS08IVtlbmRpZl0tLT4KKzxoZWFkPgorICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisKKyAgPCEtLSBBbHdheXMgZm9yY2UgbGF0ZXN0IElFIHJlbmRlcmluZyBlbmdpbmUgKGV2ZW4gaW4gaW50cmFuZXQpICYgQ2hyb21lIEZyYW1lCisgICAgICAgUmVtb3ZlIHRoaXMgaWYgeW91IHVzZSB0aGUgLmh0YWNjZXNzIC0tPgorICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UsY2hyb21lPTEiPgorCisgIDx0aXRsZT5NZXRhZGF0YURpc2NvdmVyeVJlc291cmNlPC90aXRsZT4KKworICA8IS0tIE1vYmlsZSB2aWV3cG9ydCBvcHRpbWl6ZWQ6IGoubXAvYnBsYXRldmlld3BvcnQgLS0+CisgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KKworICA8IS0tIENTUzogaW1wbGllZCBtZWRpYT0iYWxsIiAtLT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3Mvc3R5bGUuY3NzP3Y9MiI+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3ByZXR0aWZ5LmNzcyI+CisKKyAgPCEtLSBBbGwgSmF2YVNjcmlwdCBhdCB0aGUgYm90dG9tLCBleGNlcHQgZm9yIE1vZGVybml6ciB3aGljaCBlbmFibGVzIEhUTUw1IGVsZW1lbnRzICYgZmVhdHVyZSBkZXRlY3RzIC0tPgorICA8c2NyaXB0IHNyYz0ianMvbGlicy9tb2Rlcm5penItMS43Lm1pbi5qcyI+PC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgY2xhc3M9ImhvbWUiPgorCisgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgPGhlYWRlcj4KKyAgICAgIDxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImNvbHVtbiBmaXJzdCBsYXN0IHNwYW4tMjAiPgorICAgICAgICA8ZGl2IGlkPSJzaXRlLW5hbWUiIGNsYXNzPSJjb2x1bW4gc3Bhbi0xOCBhcHBlbmQtMSBwcmVwZW5kLTEgZmlyc3QgbGFzdCI+PGEgaHJlZj0iaW5kZXguaHRtbCI+TWV0YWRhdGFEaXNjb3ZlcnlSZXNvdXJjZTwvYT48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0icHJpbWFyeSIgY2xhc3M9ImNvbHVtbiBzcGFuLTE4IGFwcGVuZC0xIHByZXBlbmQtMSBmaXJzdCBsYXN0Ij4KKyAgICAgICAgICA8dWwgY2xhc3M9Im5hdmlnYXRpb24iPgorICAgICAgICAgICAgPGxpIGlkPSJuYXYtcmVzdCI+PGEgaHJlZj0icmVzdC5odG1sIj5SRVNUPC9hPjwvbGk+CisgICAgICAgICAgICA8bGkgaWQ9Im5hdi1kYXRhIj48YSBocmVmPSJtb2RlbC5odG1sIj5EYXRhIE1vZGVsPC9hPjwvbGk+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXY+CisgICAgICAgICAgPHVsIGNsYXNzPSJ4YnJlYWRjcnVtYnMiIGlkPSJicmVhZGNydW1icyI+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIGNsYXNzPSJob21lIj5Ib21lPC9hPiAmZ3Q7CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICA8YSBocmVmPSJyZXN0Lmh0bWwiPlJFU1Q8L2E+ICZndDsKKyAgICAgICAgICAgICAgPHVsPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJtb2RlbC5odG1sIj5EYXRhIE1vZGVsPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc3QuaHRtbCI+UkVTVDwvYT48L2xpPgorICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0iY3VycmVudCI+CisgICAgICAgICAgICAgIDxhIGhyZWY9InJlc291cmNlX01ldGFkYXRhRGlzY292ZXJ5UmVzb3VyY2UuaHRtbCI+TWV0YWRhdGFEaXNjb3ZlcnlSZXNvdXJjZTwvYT4KKyAgICAgICAgICAgICAgPHVsPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9BZG1pblJlc291cmNlLmh0bWwiPkFkbWluUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfRW50aXR5UmVzb3VyY2UuaHRtbCI+RW50aXR5UmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfSGl2ZUxpbmVhZ2VSZXNvdXJjZS5odG1sIj5IaXZlTGluZWFnZVJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX01ldGFkYXRhRGlzY292ZXJ5UmVzb3VyY2UuaHRtbCI+TWV0YWRhdGFEaXNjb3ZlcnlSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9SZXhzdGVyR3JhcGhSZXNvdXJjZS5odG1sIj5SZXhzdGVyR3JhcGhSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9UeXBlc1Jlc291cmNlLmh0bWwiPlR5cGVzUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2hlYWRlcj4KKyAgICA8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29sdW1uIGZpcnN0IGxhc3Qgc3Bhbi0yMCI+CisgICAgICA8aDE+TWV0YWRhdGFEaXNjb3ZlcnlSZXNvdXJjZTwvaDE+CisKKyAgICAgIDxwPkplcnNleSBSZXNvdXJjZSBmb3IgbWV0YWRhdGEgb3BlcmF0aW9ucy48L3A+CisgICAgICA8cD5UaGUgZm9sbG93aW5nIHJlc291cmNlcyBhcmUgYXBwbGljYWJsZTo8L3A+CisgICAgICA8dWw+CisgICAgICAgIDxsaT4KKyAgICAgICAgPGEgaHJlZj0iI3BhdGhfX2Rpc2NvdmVyeV9zZWFyY2guaHRtbCI+L2Rpc2NvdmVyeS9zZWFyY2g8L2E+CisgICAgICAgIDwvbGk+CisgICAgICAgIDxsaT4KKyAgICAgICAgPGEgaHJlZj0iI3BhdGhfX2Rpc2NvdmVyeV9zZWFyY2hfZHNsLmh0bWwiPi9kaXNjb3Zlcnkvc2VhcmNoL2RzbDwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPgorICAgICAgICA8YSBocmVmPSIjcGF0aF9fZGlzY292ZXJ5X3NlYXJjaF9mdWxsdGV4dC5odG1sIj4vZGlzY292ZXJ5L3NlYXJjaC9mdWxsdGV4dDwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPgorICAgICAgICA8YSBocmVmPSIjcGF0aF9fZGlzY292ZXJ5X3NlYXJjaF9ncmVtbGluLmh0bWwiPi9kaXNjb3Zlcnkvc2VhcmNoL2dyZW1saW48L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8L3VsPgorICAgICAgICA8YSBuYW1lPSJwYXRoX19kaXNjb3Zlcnlfc2VhcmNoLmh0bWwiPjwvYT4KKyAgICAgIDxoMT4vZGlzY292ZXJ5L3NlYXJjaDwvaDE+CisgICAgICA8YSBuYW1lPSJHRVQiPjwvYT4KKyAgICAgIDxoMj5HRVQ8L2gyPgorICAgICAgPHA+CisgICAgICAgICAgICBTZWFyY2ggdXNpbmcgYSBnaXZlbiBxdWVyeS4KKyAgICAgICAgICA8L3A+CisgICAgICA8aDM+UGFyYW1ldGVyczwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGg+bmFtZTwvdGg+CisgICAgICAgICAgPHRoPmRlc2NyaXB0aW9uPC90aD4KKyAgICAgICAgICA8dGg+dHlwZTwvdGg+CisgICAgICAgICAgPHRoPmRlZmF1bHQ8L3RoPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPnF1ZXJ5PC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICBzZWFyY2ggcXVlcnkgaW4gcmF3IGdyZW1saW4gb3IgRFNMIGZvcm1hdCBmYWxsaW5nIGJhY2sgdG8gZnVsbCB0ZXh0LgorICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPHRkPnF1ZXJ5PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8aDM+UmVzcG9uc2UgQm9keTwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5lbGVtZW50OjwvdGQ+CisgICAgICAgICAgPHRkPihjdXN0b20pPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPm1lZGlhIHR5cGVzOjwvdGQ+CisgICAgICAgICAgPHRkPmFwcGxpY2F0aW9uL2pzb248L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxwPkpTT04gcmVwcmVzZW50aW5nIHRoZSB0eXBlIGFuZCByZXN1bHRzLjwvcD4KKyAgICAgICAgPGEgbmFtZT0icGF0aF9fZGlzY292ZXJ5X3NlYXJjaF9kc2wuaHRtbCI+PC9hPgorICAgICAgPGgxPi9kaXNjb3Zlcnkvc2VhcmNoL2RzbDwvaDE+CisgICAgICA8YSBuYW1lPSJHRVQiPjwvYT4KKyAgICAgIDxoMj5HRVQ8L2gyPgorICAgICAgPHA+CisgICAgICAgICAgICBTZWFyY2ggdXNpbmcgcXVlcnkgRFNMIGZvcm1hdC4KKyAgICAgICAgICA8L3A+CisgICAgICA8aDM+UGFyYW1ldGVyczwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGg+bmFtZTwvdGg+CisgICAgICAgICAgPHRoPmRlc2NyaXB0aW9uPC90aD4KKyAgICAgICAgICA8dGg+dHlwZTwvdGg+CisgICAgICAgICAgPHRoPmRlZmF1bHQ8L3RoPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPnF1ZXJ5PC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICBzZWFyY2ggcXVlcnkgaW4gRFNMIGZvcm1hdC4KKyAgICAgICAgICA8L3RkPgorICAgICAgICAgIDx0ZD5xdWVyeTwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD5KU09OIHJlcHJlc2VudGluZyB0aGUgdHlwZSBhbmQgcmVzdWx0cy48L3A+CisgICAgICAgIDxhIG5hbWU9InBhdGhfX2Rpc2NvdmVyeV9zZWFyY2hfZnVsbHRleHQuaHRtbCI+PC9hPgorICAgICAgPGgxPi9kaXNjb3Zlcnkvc2VhcmNoL2Z1bGx0ZXh0PC9oMT4KKyAgICAgIDxhIG5hbWU9IkdFVCI+PC9hPgorICAgICAgPGgyPkdFVDwvaDI+CisgICAgICA8cD4KKyAgICAgICAgICAgIFNlYXJjaCB1c2luZyBmdWxsIHRleHQgc2VhcmNoLgorICAgICAgICAgIDwvcD4KKyAgICAgIDxoMz5QYXJhbWV0ZXJzPC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aD5uYW1lPC90aD4KKyAgICAgICAgICA8dGg+ZGVzY3JpcHRpb248L3RoPgorICAgICAgICAgIDx0aD50eXBlPC90aD4KKyAgICAgICAgICA8dGg+ZGVmYXVsdDwvdGg+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+cXVlcnk8L3RkPgorICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgIHNlYXJjaCBxdWVyeS4KKyAgICAgICAgICA8L3RkPgorICAgICAgICAgIDx0ZD5xdWVyeTwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD5KU09OIHJlcHJlc2VudGluZyB0aGUgdHlwZSBhbmQgcmVzdWx0cy48L3A+CisgICAgICAgIDxhIG5hbWU9InBhdGhfX2Rpc2NvdmVyeV9zZWFyY2hfZ3JlbWxpbi5odG1sIj48L2E+CisgICAgICA8aDE+L2Rpc2NvdmVyeS9zZWFyY2gvZ3JlbWxpbjwvaDE+CisgICAgICA8YSBuYW1lPSJHRVQiPjwvYT4KKyAgICAgIDxoMj5HRVQ8L2gyPgorICAgICAgPHA+CisgICAgICAgICAgICBTZWFyY2ggdXNpbmcgcmF3IGdyZW1saW4gcXVlcnkgZm9ybWF0LgorICAgICAgICAgIDwvcD4KKyAgICAgIDxoMz5QYXJhbWV0ZXJzPC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aD5uYW1lPC90aD4KKyAgICAgICAgICA8dGg+ZGVzY3JpcHRpb248L3RoPgorICAgICAgICAgIDx0aD50eXBlPC90aD4KKyAgICAgICAgICA8dGg+ZGVmYXVsdDwvdGg+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+cXVlcnk8L3RkPgorICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgIHNlYXJjaCBxdWVyeSBpbiByYXcgZ3JlbWxpbiBmb3JtYXQuCisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cXVlcnk8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxoMz5SZXNwb25zZSBCb2R5PC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPmVsZW1lbnQ6PC90ZD4KKyAgICAgICAgICA8dGQ+KGN1c3RvbSk8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+bWVkaWEgdHlwZXM6PC90ZD4KKyAgICAgICAgICA8dGQ+YXBwbGljYXRpb24vanNvbjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPHA+SlNPTiByZXByZXNlbnRpbmcgdGhlIHR5cGUgYW5kIHJlc3VsdHMuPC9wPgorCisgICAgICA8ZGl2IGNsYXNzPSJjbGVhciIgLz4KKyAgICA8L2Rpdj4KKyAgICA8Zm9vdGVyPgorICAgICAgPGRpdiBpZD0iZm9vdGVyIj4KKyAgICAgICAgR2VuZXJhdGVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly9lbnVuY2lhdGUuY29kZWhhdXMub3JnIj5FbnVuY2lhdGU8L2E+LgorICAgICAgPC9kaXY+CisgICAgPC9mb290ZXI+CisgIDwvZGl2PiA8IS0tISBlbmQgb2YgI2NvbnRhaW5lciAtLT4KKworICA8IS0tIEphdmFTY3JpcHQgYXQgdGhlIGJvdHRvbSBmb3IgZmFzdCBwYWdlIGxvYWRpbmcgLS0+CisKKyAgPCEtLSBHcmFiIEdvb2dsZSBDRE4ncyBqUXVlcnksIHdpdGggYSBwcm90b2NvbCByZWxhdGl2ZSBVUkw7IGZhbGwgYmFjayB0byBsb2NhbCBpZiBuZWNlc3NhcnkgLS0+CisgIDxzY3JpcHQgc3JjPSIvL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjUuMS9qcXVlcnkuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PndpbmRvdy5qUXVlcnkgfHwgZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgc3JjPSdqcy9saWJzL2pxdWVyeS0xLjUuMS5taW4uanMnPlx4M0Mvc2NyaXB0PiIpPC9zY3JpcHQ+CisKKyAgPCEtLW1hbmFnZSB0aGUgbmF2aWdhdGlvbiBtZW51LS0+CisgIDxzY3JpcHQgc3JjPSJqcy9saWJzL3hicmVhZGNydW1icy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+CisgICAgJChmdW5jdGlvbigpIHsKKyAgICAgICQoJyNicmVhZGNydW1icycpLnhCcmVhZGNydW1icygpOworICAgIH0pOworICA8L3NjcmlwdD4KKworCisgIDwhLS0gcHJldHRpZnkgY29kZSBibG9ja3MuIHNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ29vZ2xlLWNvZGUtcHJldHRpZnkvIC0tPgorICA8c2NyaXB0IHNyYz0ianMvbGlicy9wcmV0dGlmeS9wcmV0dGlmeS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+CisgICAgJChmdW5jdGlvbigpIHsKKyAgICAgIHByZXR0eVByaW50KCk7CisgICAgfSk7CisgIDwvc2NyaXB0PgorCisgIDwhLS1baWYgbHQgSUUgNyBdPgorICAgIDxzY3JpcHQgc3JjPSJqcy9saWJzL2RkX2JlbGF0ZWRwbmcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+RERfYmVsYXRlZFBORy5maXgoImltZywgLnBuZ19iZyIpOyAvLyBGaXggYW55IDxpbWc+IG9yIC5wbmdfYmcgYmctaW1hZ2VzLiBBbHNvLCBwbGVhc2UgcmVhZCBnb28uZ2wvbVppeWIgPC9zY3JpcHQ+CisgIDwhW2VuZGlmXS0tPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9hcGkvcmVzb3VyY2VfUmV4c3RlckdyYXBoUmVzb3VyY2UuaHRtbCBiL2FwaS9yZXNvdXJjZV9SZXhzdGVyR3JhcGhSZXNvdXJjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZWZkMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcGkvcmVzb3VyY2VfUmV4c3RlckdyYXBoUmVzb3VyY2UuaHRtbApAQCAtMCwwICsxLDM1MyBAQAorPCFkb2N0eXBlIGh0bWw+Cis8IS0tIHBhdWxpcmlzaC5jb20vMjAwOC9jb25kaXRpb25hbC1zdHlsZXNoZWV0cy12cy1jc3MtaGFja3MtYW5zd2VyLW5laXRoZXIvIC0tPgorPCEtLVtpZiBsdCBJRSA3IF0+IDxodG1sIGNsYXNzPSJuby1qcyBpZTYiIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cis8IS0tW2lmIElFIDcgXT4gICAgPGh0bWwgY2xhc3M9Im5vLWpzIGllNyIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4KKzwhLS1baWYgSUUgOCBdPiAgICA8aHRtbCBjbGFzcz0ibm8tanMgaWU4IiBsYW5nPSJlbiI+IDwhW2VuZGlmXS0tPgorPCEtLVtpZiAoZ3RlIElFIDkpfCEoSUUpXT48IS0tPiA8aHRtbCBjbGFzcz0ibm8tanMiIGxhbmc9ImVuIj4gPCEtLTwhW2VuZGlmXS0tPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKworICA8IS0tIEFsd2F5cyBmb3JjZSBsYXRlc3QgSUUgcmVuZGVyaW5nIGVuZ2luZSAoZXZlbiBpbiBpbnRyYW5ldCkgJiBDaHJvbWUgRnJhbWUKKyAgICAgICBSZW1vdmUgdGhpcyBpZiB5b3UgdXNlIHRoZSAuaHRhY2Nlc3MgLS0+CisgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+CisKKyAgPHRpdGxlPlJleHN0ZXJHcmFwaFJlc291cmNlPC90aXRsZT4KKworICA8IS0tIE1vYmlsZSB2aWV3cG9ydCBvcHRpbWl6ZWQ6IGoubXAvYnBsYXRldmlld3BvcnQgLS0+CisgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KKworICA8IS0tIENTUzogaW1wbGllZCBtZWRpYT0iYWxsIiAtLT4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3Mvc3R5bGUuY3NzP3Y9MiI+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3ByZXR0aWZ5LmNzcyI+CisKKyAgPCEtLSBBbGwgSmF2YVNjcmlwdCBhdCB0aGUgYm90dG9tLCBleGNlcHQgZm9yIE1vZGVybml6ciB3aGljaCBlbmFibGVzIEhUTUw1IGVsZW1lbnRzICYgZmVhdHVyZSBkZXRlY3RzIC0tPgorICA8c2NyaXB0IHNyYz0ianMvbGlicy9tb2Rlcm5penItMS43Lm1pbi5qcyI+PC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgY2xhc3M9ImhvbWUiPgorCisgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgPGhlYWRlcj4KKyAgICAgIDxkaXYgaWQ9ImhlYWRlciIgY2xhc3M9ImNvbHVtbiBmaXJzdCBsYXN0IHNwYW4tMjAiPgorICAgICAgICA8ZGl2IGlkPSJzaXRlLW5hbWUiIGNsYXNzPSJjb2x1bW4gc3Bhbi0xOCBhcHBlbmQtMSBwcmVwZW5kLTEgZmlyc3QgbGFzdCI+PGEgaHJlZj0iaW5kZXguaHRtbCI+UmV4c3RlckdyYXBoUmVzb3VyY2U8L2E+PC9kaXY+CisgICAgICAgIDxkaXYgaWQ9InByaW1hcnkiIGNsYXNzPSJjb2x1bW4gc3Bhbi0xOCBhcHBlbmQtMSBwcmVwZW5kLTEgZmlyc3QgbGFzdCI+CisgICAgICAgICAgPHVsIGNsYXNzPSJuYXZpZ2F0aW9uIj4KKyAgICAgICAgICAgIDxsaSBpZD0ibmF2LXJlc3QiPjxhIGhyZWY9InJlc3QuaHRtbCI+UkVTVDwvYT48L2xpPgorICAgICAgICAgICAgPGxpIGlkPSJuYXYtZGF0YSI+PGEgaHJlZj0ibW9kZWwuaHRtbCI+RGF0YSBNb2RlbDwvYT48L2xpPgorICAgICAgICAgIDwvdWw+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2PgorICAgICAgICAgIDx1bCBjbGFzcz0ieGJyZWFkY3J1bWJzIiBpZD0iYnJlYWRjcnVtYnMiPgorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICA8YSBocmVmPSJpbmRleC5odG1sIiBjbGFzcz0iaG9tZSI+SG9tZTwvYT4gJmd0OworICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgPGEgaHJlZj0icmVzdC5odG1sIj5SRVNUPC9hPiAmZ3Q7CisgICAgICAgICAgICAgIDx1bD4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ibW9kZWwuaHRtbCI+RGF0YSBNb2RlbDwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXN0Lmh0bWwiPlJFU1Q8L2E+PC9saT4KKyAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8bGkgY2xhc3M9ImN1cnJlbnQiPgorICAgICAgICAgICAgICA8YSBocmVmPSJyZXNvdXJjZV9SZXhzdGVyR3JhcGhSZXNvdXJjZS5odG1sIj5SZXhzdGVyR3JhcGhSZXNvdXJjZTwvYT4KKyAgICAgICAgICAgICAgPHVsPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9BZG1pblJlc291cmNlLmh0bWwiPkFkbWluUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfRW50aXR5UmVzb3VyY2UuaHRtbCI+RW50aXR5UmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfSGl2ZUxpbmVhZ2VSZXNvdXJjZS5odG1sIj5IaXZlTGluZWFnZVJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX01ldGFkYXRhRGlzY292ZXJ5UmVzb3VyY2UuaHRtbCI+TWV0YWRhdGFEaXNjb3ZlcnlSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9SZXhzdGVyR3JhcGhSZXNvdXJjZS5odG1sIj5SZXhzdGVyR3JhcGhSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9UeXBlc1Jlc291cmNlLmh0bWwiPlR5cGVzUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2hlYWRlcj4KKyAgICA8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29sdW1uIGZpcnN0IGxhc3Qgc3Bhbi0yMCI+CisgICAgICA8aDE+UmV4c3RlckdyYXBoUmVzb3VyY2U8L2gxPgorCisgICAgICA8cD5KZXJzZXkgUmVzb3VyY2UgZm9yIGxpbmVhZ2UgbWV0YWRhdGEgb3BlcmF0aW9ucy4KK0ltcGxlbWVudHMgbW9zdCBvZiB0aGUgR0VUIG9wZXJhdGlvbnMgb2YgUmV4c3RlciBBUEkgd2l0aCBvdXQgdGhlIGluZGV4ZXMuCitodHRwczovL2dpdGh1Yi5jb20vdGlua2VycG9wL3JleHN0ZXIvd2lraS9CYXNpYy1SRVNULUFQSQorCitUaGlzIGlzIGEgc3Vic2V0IG9mIFJleHN0ZXIncyBSRVNUIEFQSSwgZGVzaWduZWQgdG8gcHJvdmlkZSBvbmx5IHJlYWQtb25seSBtZXRob2RzCitmb3IgYWNjZXNzaW5nIHRoZSBiYWNrZW5kIGdyYXBoLjwvcD4KKyAgICAgIDxwPlRoZSBmb2xsb3dpbmcgcmVzb3VyY2VzIGFyZSBhcHBsaWNhYmxlOjwvcD4KKyAgICAgIDx1bD4KKyAgICAgICAgPGxpPgorICAgICAgICA8YSBocmVmPSIjcGF0aF9fZ3JhcGhfZWRnZXNfLWlkLS5odG1sIj4vZ3JhcGgvZWRnZXMve2lkfTwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPgorICAgICAgICA8YSBocmVmPSIjcGF0aF9fZ3JhcGhfdmVydGljZXMuaHRtbCI+L2dyYXBoL3ZlcnRpY2VzPC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGk+CisgICAgICAgIDxhIGhyZWY9IiNwYXRoX19ncmFwaF92ZXJ0aWNlc18taWQtLmh0bWwiPi9ncmFwaC92ZXJ0aWNlcy97aWR9PC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGk+CisgICAgICAgIDxhIGhyZWY9IiNwYXRoX19ncmFwaF92ZXJ0aWNlc18taWQtXy1kaXJlY3Rpb24tLmh0bWwiPi9ncmFwaC92ZXJ0aWNlcy97aWR9L3tkaXJlY3Rpb259PC9hPgorICAgICAgICA8L2xpPgorICAgICAgICA8bGk+CisgICAgICAgIDxhIGhyZWY9IiNwYXRoX19ncmFwaF92ZXJ0aWNlc19wcm9wZXJ0aWVzXy1pZC0uaHRtbCI+L2dyYXBoL3ZlcnRpY2VzL3Byb3BlcnRpZXMve2lkfTwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDwvdWw+CisgICAgICAgIDxhIG5hbWU9InBhdGhfX2dyYXBoX2VkZ2VzXy1pZC0uaHRtbCI+PC9hPgorICAgICAgPGgxPi9ncmFwaC9lZGdlcy97aWR9PC9oMT4KKyAgICAgIDxhIG5hbWU9IkdFVCI+PC9hPgorICAgICAgPGgyPkdFVDwvaDI+CisgICAgICA8cD4KKyAgICAgICAgICAgIEdldCBhIHNpbmdsZSBlZGdlIHdpdGggYSB1bmlxdWUgaWQuCisKK0dFVCBodHRwOi8vaG9zdC9tZXRhZGF0YS9saW5lYWdlL2VkZ2VzL2lkCitncmFwaC5nZXRFZGdlKGlkKTsKKyAgICAgICAgICA8L3A+CisgICAgICA8aDM+UGFyYW1ldGVyczwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGg+bmFtZTwvdGg+CisgICAgICAgICAgPHRoPmRlc2NyaXB0aW9uPC90aD4KKyAgICAgICAgICA8dGg+dHlwZTwvdGg+CisgICAgICAgICAgPHRoPmRlZmF1bHQ8L3RoPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPmlkPC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAobm8gZG9jdW1lbnRhdGlvbiBwcm92aWRlZCkKKyAgICAgICAgICA8L3RkPgorICAgICAgICAgIDx0ZD5wYXRoPC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8aDM+UmVzcG9uc2UgQm9keTwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5lbGVtZW50OjwvdGQ+CisgICAgICAgICAgPHRkPihjdXN0b20pPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPm1lZGlhIHR5cGVzOjwvdGQ+CisgICAgICAgICAgPHRkPmFwcGxpY2F0aW9uL2pzb248L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxwPihubyBkb2N1bWVudGF0aW9uIHByb3ZpZGVkKTwvcD4KKyAgICAgICAgPGEgbmFtZT0icGF0aF9fZ3JhcGhfdmVydGljZXMuaHRtbCI+PC9hPgorICAgICAgPGgxPi9ncmFwaC92ZXJ0aWNlczwvaDE+CisgICAgICA8YSBuYW1lPSJHRVQiPjwvYT4KKyAgICAgIDxoMj5HRVQ8L2gyPgorICAgICAgPHA+CisgICAgICAgICAgICBHZXQgYSBsaXN0IG9mIHZlcnRpY2VzIG1hdGNoaW5nIGEgcHJvcGVydHkga2V5IGFuZCBhIHZhbHVlLgorPHAvPgorR0VUIGh0dHA6Ly9ob3N0L21ldGFkYXRhL2xpbmVhZ2UvdmVydGljZXM/a2V5PTxrZXk+JnZhbHVlPTx2YWx1ZT4KK2dyYXBoLmdldFZlcnRpY2VzKGtleSwgdmFsdWUpOworICAgICAgICAgIDwvcD4KKyAgICAgIDxoMz5QYXJhbWV0ZXJzPC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aD5uYW1lPC90aD4KKyAgICAgICAgICA8dGg+ZGVzY3JpcHRpb248L3RoPgorICAgICAgICAgIDx0aD50eXBlPC90aD4KKyAgICAgICAgICA8dGg+ZGVmYXVsdDwvdGg+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+a2V5PC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAobm8gZG9jdW1lbnRhdGlvbiBwcm92aWRlZCkKKyAgICAgICAgICA8L3RkPgorICAgICAgICAgIDx0ZD5xdWVyeTwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+dmFsdWU8L3RkPgorICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgIChubyBkb2N1bWVudGF0aW9uIHByb3ZpZGVkKQorICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPHRkPnF1ZXJ5PC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8aDM+UmVzcG9uc2UgQm9keTwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5lbGVtZW50OjwvdGQ+CisgICAgICAgICAgPHRkPihjdXN0b20pPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPm1lZGlhIHR5cGVzOjwvdGQ+CisgICAgICAgICAgPHRkPmFwcGxpY2F0aW9uL2pzb248L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxwPihubyBkb2N1bWVudGF0aW9uIHByb3ZpZGVkKTwvcD4KKyAgICAgICAgPGEgbmFtZT0icGF0aF9fZ3JhcGhfdmVydGljZXNfLWlkLS5odG1sIj48L2E+CisgICAgICA8aDE+L2dyYXBoL3ZlcnRpY2VzL3tpZH08L2gxPgorICAgICAgPGEgbmFtZT0iR0VUIj48L2E+CisgICAgICA8aDI+R0VUPC9oMj4KKyAgICAgIDxwPgorICAgICAgICAgICAgR2V0IGEgc2luZ2xlIHZlcnRleCB3aXRoIGEgdW5pcXVlIGlkLgorCitHRVQgaHR0cDovL2hvc3QvbWV0YWRhdGEvbGluZWFnZS92ZXJ0aWNlcy9pZAorZ3JhcGguZ2V0VmVydGV4KGlkKTsKKyAgICAgICAgICA8L3A+CisgICAgICA8aDM+UGFyYW1ldGVyczwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGg+bmFtZTwvdGg+CisgICAgICAgICAgPHRoPmRlc2NyaXB0aW9uPC90aD4KKyAgICAgICAgICA8dGg+dHlwZTwvdGg+CisgICAgICAgICAgPHRoPmRlZmF1bHQ8L3RoPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkPmlkPC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAobm8gZG9jdW1lbnRhdGlvbiBwcm92aWRlZCkKKyAgICAgICAgICA8L3RkPgorICAgICAgICAgIDx0ZD5wYXRoPC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8aDM+UmVzcG9uc2UgQm9keTwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5lbGVtZW50OjwvdGQ+CisgICAgICAgICAgPHRkPihjdXN0b20pPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPm1lZGlhIHR5cGVzOjwvdGQ+CisgICAgICAgICAgPHRkPmFwcGxpY2F0aW9uL2pzb248L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxwPihubyBkb2N1bWVudGF0aW9uIHByb3ZpZGVkKTwvcD4KKyAgICAgICAgPGEgbmFtZT0icGF0aF9fZ3JhcGhfdmVydGljZXNfLWlkLV8tZGlyZWN0aW9uLS5odG1sIj48L2E+CisgICAgICA8aDE+L2dyYXBoL3ZlcnRpY2VzL3tpZH0ve2RpcmVjdGlvbn08L2gxPgorICAgICAgPGEgbmFtZT0iR0VUIj48L2E+CisgICAgICA8aDI+R0VUPC9oMj4KKyAgICAgIDxwPgorICAgICAgICAgICAgR2V0IGEgbGlzdCBvZiBhZGphY2VudCBlZGdlcyB3aXRoIGEgZGlyZWN0aW9uLgorCitHRVQgaHR0cDovL2hvc3QvbWV0YWRhdGEvbGluZWFnZS92ZXJ0aWNlcy9pZC9kaXJlY3Rpb24KK2dyYXBoLmdldFZlcnRleChpZCkuZ2V0e0RpcmVjdGlvbn1FZGdlcygpOworZGlyZWN0aW9uOiB7KD8hb3V0RSkoPyFib3RoRSkoPyFpbkUpKD8hb3V0KSg/IWJvdGgpKD8haW4pKD8hcXVlcnkpLit9CisgICAgICAgICAgPC9wPgorICAgICAgPGgzPlBhcmFtZXRlcnM8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPm5hbWU8L3RoPgorICAgICAgICAgIDx0aD5kZXNjcmlwdGlvbjwvdGg+CisgICAgICAgICAgPHRoPnR5cGU8L3RoPgorICAgICAgICAgIDx0aD5kZWZhdWx0PC90aD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5pZDwvdGQ+CisgICAgICAgICAgPHRkPgorICAgICAgICAgICAgKG5vIGRvY3VtZW50YXRpb24gcHJvdmlkZWQpCisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cGF0aDwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+ZGlyZWN0aW9uPC90ZD4KKyAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAobm8gZG9jdW1lbnRhdGlvbiBwcm92aWRlZCkKKyAgICAgICAgICA8L3RkPgorICAgICAgICAgIDx0ZD5wYXRoPC90ZD4KKyAgICAgICAgICA8dGQ+PC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8aDM+UmVzcG9uc2UgQm9keTwvaDM+CisgICAgICA8dGFibGU+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5lbGVtZW50OjwvdGQ+CisgICAgICAgICAgPHRkPihjdXN0b20pPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPm1lZGlhIHR5cGVzOjwvdGQ+CisgICAgICAgICAgPHRkPmFwcGxpY2F0aW9uL2pzb248L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxwPihubyBkb2N1bWVudGF0aW9uIHByb3ZpZGVkKTwvcD4KKyAgICAgICAgPGEgbmFtZT0icGF0aF9fZ3JhcGhfdmVydGljZXNfcHJvcGVydGllc18taWQtLmh0bWwiPjwvYT4KKyAgICAgIDxoMT4vZ3JhcGgvdmVydGljZXMvcHJvcGVydGllcy97aWR9PC9oMT4KKyAgICAgIDxhIG5hbWU9IkdFVCI+PC9hPgorICAgICAgPGgyPkdFVDwvaDI+CisgICAgICA8cD4KKyAgICAgICAgICAgIEdldCBwcm9wZXJ0aWVzIGZvciBhIHNpbmdsZSB2ZXJ0ZXggd2l0aCBhIHVuaXF1ZSBpZC4KK1RoaXMgaXMgTk9UIGEgcmV4c3RlciBBUEkuCis8cC8+CitHRVQgaHR0cDovL2hvc3QvbWV0YWRhdGEvbGluZWFnZS92ZXJ0aWNlcy9wcm9wZXJ0aWVzL2lkCisgICAgICAgICAgPC9wPgorICAgICAgPGgzPlBhcmFtZXRlcnM8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPm5hbWU8L3RoPgorICAgICAgICAgIDx0aD5kZXNjcmlwdGlvbjwvdGg+CisgICAgICAgICAgPHRoPnR5cGU8L3RoPgorICAgICAgICAgIDx0aD5kZWZhdWx0PC90aD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD5pZDwvdGQ+CisgICAgICAgICAgPHRkPgorICAgICAgICAgICAgKG5vIGRvY3VtZW50YXRpb24gcHJvdmlkZWQpCisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cGF0aDwvdGQ+CisgICAgICAgICAgPHRkPjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+cmVsYXRpb25zaGlwczwvdGQ+CisgICAgICAgICAgPHRkPgorICAgICAgICAgICAgKG5vIGRvY3VtZW50YXRpb24gcHJvdmlkZWQpCisgICAgICAgICAgPC90ZD4KKyAgICAgICAgICA8dGQ+cXVlcnk8L3RkPgorICAgICAgICAgIDx0ZD5mYWxzZTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD4obm8gZG9jdW1lbnRhdGlvbiBwcm92aWRlZCk8L3A+CisKKyAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIiAvPgorICAgIDwvZGl2PgorICAgIDxmb290ZXI+CisgICAgICA8ZGl2IGlkPSJmb290ZXIiPgorICAgICAgICBHZW5lcmF0ZWQgYnkgPGEgaHJlZj0iaHR0cDovL2VudW5jaWF0ZS5jb2RlaGF1cy5vcmciPkVudW5jaWF0ZTwvYT4uCisgICAgICA8L2Rpdj4KKyAgICA8L2Zvb3Rlcj4KKyAgPC9kaXY+IDwhLS0hIGVuZCBvZiAjY29udGFpbmVyIC0tPgorCisgIDwhLS0gSmF2YVNjcmlwdCBhdCB0aGUgYm90dG9tIGZvciBmYXN0IHBhZ2UgbG9hZGluZyAtLT4KKworICA8IS0tIEdyYWIgR29vZ2xlIENETidzIGpRdWVyeSwgd2l0aCBhIHByb3RvY29sIHJlbGF0aXZlIFVSTDsgZmFsbCBiYWNrIHRvIGxvY2FsIGlmIG5lY2Vzc2FyeSAtLT4KKyAgPHNjcmlwdCBzcmM9Ii8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuNS4xL2pxdWVyeS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+d2luZG93LmpRdWVyeSB8fCBkb2N1bWVudC53cml0ZSgiPHNjcmlwdCBzcmM9J2pzL2xpYnMvanF1ZXJ5LTEuNS4xLm1pbi5qcyc+XHgzQy9zY3JpcHQ+Iik8L3NjcmlwdD4KKworICA8IS0tbWFuYWdlIHRoZSBuYXZpZ2F0aW9uIG1lbnUtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMveGJyZWFkY3J1bWJzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD4KKyAgICAkKGZ1bmN0aW9uKCkgeworICAgICAgJCgnI2JyZWFkY3J1bWJzJykueEJyZWFkY3J1bWJzKCk7CisgICAgfSk7CisgIDwvc2NyaXB0PgorCisKKyAgPCEtLSBwcmV0dGlmeSBjb2RlIGJsb2Nrcy4gc2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nb29nbGUtY29kZS1wcmV0dGlmeS8gLS0+CisgIDxzY3JpcHQgc3JjPSJqcy9saWJzL3ByZXR0aWZ5L3ByZXR0aWZ5LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD4KKyAgICAkKGZ1bmN0aW9uKCkgeworICAgICAgcHJldHR5UHJpbnQoKTsKKyAgICB9KTsKKyAgPC9zY3JpcHQ+CisKKyAgPCEtLVtpZiBsdCBJRSA3IF0+CisgICAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvZGRfYmVsYXRlZHBuZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD5ERF9iZWxhdGVkUE5HLmZpeCgiaW1nLCAucG5nX2JnIik7IC8vIEZpeCBhbnkgPGltZz4gb3IgLnBuZ19iZyBiZy1pbWFnZXMuIEFsc28sIHBsZWFzZSByZWFkIGdvby5nbC9tWml5YiA8L3NjcmlwdD4KKyAgPCFbZW5kaWZdLS0+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2FwaS9yZXNvdXJjZV9UeXBlc1Jlc291cmNlLmh0bWwgYi9hcGkvcmVzb3VyY2VfVHlwZXNSZXNvdXJjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhODg2MWIKLS0tIC9kZXYvbnVsbAorKysgYi9hcGkvcmVzb3VyY2VfVHlwZXNSZXNvdXJjZS5odG1sCkBAIC0wLDAgKzEsMjE2IEBACis8IWRvY3R5cGUgaHRtbD4KKzwhLS0gcGF1bGlyaXNoLmNvbS8yMDA4L2NvbmRpdGlvbmFsLXN0eWxlc2hlZXRzLXZzLWNzcy1oYWNrcy1hbnN3ZXItbmVpdGhlci8gLS0+Cis8IS0tW2lmIGx0IElFIDcgXT4gPGh0bWwgY2xhc3M9Im5vLWpzIGllNiIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4KKzwhLS1baWYgSUUgNyBdPiAgICA8aHRtbCBjbGFzcz0ibm8tanMgaWU3IiBsYW5nPSJlbiI+IDwhW2VuZGlmXS0tPgorPCEtLVtpZiBJRSA4IF0+ICAgIDxodG1sIGNsYXNzPSJuby1qcyBpZTgiIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cis8IS0tW2lmIChndGUgSUUgOSl8IShJRSldPjwhLS0+IDxodG1sIGNsYXNzPSJuby1qcyIgbGFuZz0iZW4iPiA8IS0tPCFbZW5kaWZdLS0+Cis8aGVhZD4KKyAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorCisgIDwhLS0gQWx3YXlzIGZvcmNlIGxhdGVzdCBJRSByZW5kZXJpbmcgZW5naW5lIChldmVuIGluIGludHJhbmV0KSAmIENocm9tZSBGcmFtZQorICAgICAgIFJlbW92ZSB0aGlzIGlmIHlvdSB1c2UgdGhlIC5odGFjY2VzcyAtLT4KKyAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlLGNocm9tZT0xIj4KKworICA8dGl0bGU+VHlwZXNSZXNvdXJjZTwvdGl0bGU+CisKKyAgPCEtLSBNb2JpbGUgdmlld3BvcnQgb3B0aW1pemVkOiBqLm1wL2JwbGF0ZXZpZXdwb3J0IC0tPgorICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CisKKyAgPCEtLSBDU1M6IGltcGxpZWQgbWVkaWE9ImFsbCIgLS0+CisgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iY3NzL3N0eWxlLmNzcz92PTIiPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9wcmV0dGlmeS5jc3MiPgorCisgIDwhLS0gQWxsIEphdmFTY3JpcHQgYXQgdGhlIGJvdHRvbSwgZXhjZXB0IGZvciBNb2Rlcm5penIgd2hpY2ggZW5hYmxlcyBIVE1MNSBlbGVtZW50cyAmIGZlYXR1cmUgZGV0ZWN0cyAtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvbW9kZXJuaXpyLTEuNy5taW4uanMiPjwvc2NyaXB0PgorCis8L2hlYWQ+CisKKzxib2R5IGNsYXNzPSJob21lIj4KKworICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgIDxoZWFkZXI+CisgICAgICA8ZGl2IGlkPSJoZWFkZXIiIGNsYXNzPSJjb2x1bW4gZmlyc3QgbGFzdCBzcGFuLTIwIj4KKyAgICAgICAgPGRpdiBpZD0ic2l0ZS1uYW1lIiBjbGFzcz0iY29sdW1uIHNwYW4tMTggYXBwZW5kLTEgcHJlcGVuZC0xIGZpcnN0IGxhc3QiPjxhIGhyZWY9ImluZGV4Lmh0bWwiPlR5cGVzUmVzb3VyY2U8L2E+PC9kaXY+CisgICAgICAgIDxkaXYgaWQ9InByaW1hcnkiIGNsYXNzPSJjb2x1bW4gc3Bhbi0xOCBhcHBlbmQtMSBwcmVwZW5kLTEgZmlyc3QgbGFzdCI+CisgICAgICAgICAgPHVsIGNsYXNzPSJuYXZpZ2F0aW9uIj4KKyAgICAgICAgICAgIDxsaSBpZD0ibmF2LXJlc3QiPjxhIGhyZWY9InJlc3QuaHRtbCI+UkVTVDwvYT48L2xpPgorICAgICAgICAgICAgPGxpIGlkPSJuYXYtZGF0YSI+PGEgaHJlZj0ibW9kZWwuaHRtbCI+RGF0YSBNb2RlbDwvYT48L2xpPgorICAgICAgICAgIDwvdWw+CisgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2PgorICAgICAgICAgIDx1bCBjbGFzcz0ieGJyZWFkY3J1bWJzIiBpZD0iYnJlYWRjcnVtYnMiPgorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICA8YSBocmVmPSJpbmRleC5odG1sIiBjbGFzcz0iaG9tZSI+SG9tZTwvYT4gJmd0OworICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgPGEgaHJlZj0icmVzdC5odG1sIj5SRVNUPC9hPiAmZ3Q7CisgICAgICAgICAgICAgIDx1bD4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ibW9kZWwuaHRtbCI+RGF0YSBNb2RlbDwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXN0Lmh0bWwiPlJFU1Q8L2E+PC9saT4KKyAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8bGkgY2xhc3M9ImN1cnJlbnQiPgorICAgICAgICAgICAgICA8YSBocmVmPSJyZXNvdXJjZV9UeXBlc1Jlc291cmNlLmh0bWwiPlR5cGVzUmVzb3VyY2U8L2E+CisgICAgICAgICAgICAgIDx1bD4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfQWRtaW5SZXNvdXJjZS5odG1sIj5BZG1pblJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX0VudGl0eVJlc291cmNlLmh0bWwiPkVudGl0eVJlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX0hpdmVMaW5lYWdlUmVzb3VyY2UuaHRtbCI+SGl2ZUxpbmVhZ2VSZXNvdXJjZTwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9NZXRhZGF0YURpc2NvdmVyeVJlc291cmNlLmh0bWwiPk1ldGFkYXRhRGlzY292ZXJ5UmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfUmV4c3RlckdyYXBoUmVzb3VyY2UuaHRtbCI+UmV4c3RlckdyYXBoUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfVHlwZXNSZXNvdXJjZS5odG1sIj5UeXBlc1Jlc291cmNlPC9hPjwvbGk+CisgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICAgIDwvdWw+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9oZWFkZXI+CisgICAgPGRpdiBpZD0ibWFpbiIgY2xhc3M9ImNvbHVtbiBmaXJzdCBsYXN0IHNwYW4tMjAiPgorICAgICAgPGgxPlR5cGVzUmVzb3VyY2U8L2gxPgorCisgICAgICA8cD5UaGlzIGNsYXNzIHByb3ZpZGVzIFJFU1RmdWwgQVBJIGZvciBUeXBlcy4KKworQSB0eXBlIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiBhbnkgcmVwcmVzZW50YWJsZSBpdGVtOworZS5nLiBhIEhpdmUgdGFibGUKKworWW91IGNvdWxkIHJlcHJlc2VudCBhbnkgbWV0YSBtb2RlbCByZXByZXNlbnRpbmcgYW55IGRvbWFpbiB1c2luZyB0aGVzZSB0eXBlcy48L3A+CisgICAgICA8cD5UaGUgZm9sbG93aW5nIHJlc291cmNlcyBhcmUgYXBwbGljYWJsZTo8L3A+CisgICAgICA8dWw+CisgICAgICAgIDxsaT4KKyAgICAgICAgPGEgaHJlZj0iI3BhdGhfX3R5cGVzLmh0bWwiPi90eXBlczwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgICAgPGxpPgorICAgICAgICA8YSBocmVmPSIjcGF0aF9fdHlwZXNfLXR5cGVOYW1lLS5odG1sIj4vdHlwZXMve3R5cGVOYW1lfTwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDwvdWw+CisgICAgICAgIDxhIG5hbWU9InBhdGhfX3R5cGVzLmh0bWwiPjwvYT4KKyAgICAgIDxoMT4vdHlwZXM8L2gxPgorICAgICAgPGEgbmFtZT0iUE9TVCI+PC9hPgorICAgICAgPGgyPlBPU1Q8L2gyPgorICAgICAgPHA+CisgICAgICAgICAgICBTdWJtaXRzIGEgdHlwZSBkZWZpbml0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYSBnaXZlbiB0eXBlIHJlcHJlc2VudGluZyBhIG1ldGEgbW9kZWwgb2YgYQorZG9tYWluLiBDb3VsZCByZXByZXNlbnQgdGhpbmdzIGxpa2UgSGl2ZSBEYXRhYmFzZSwgSGl2ZSBUYWJsZSwgZXRjLgorICAgICAgICAgIDwvcD4KKyAgICAgIDxoMz5SZXNwb25zZSBCb2R5PC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPmVsZW1lbnQ6PC90ZD4KKyAgICAgICAgICA8dGQ+KGN1c3RvbSk8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+bWVkaWEgdHlwZXM6PC90ZD4KKyAgICAgICAgICA8dGQ+YXBwbGljYXRpb24vanNvbjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPHA+KG5vIGRvY3VtZW50YXRpb24gcHJvdmlkZWQpPC9wPgorICAgICAgPGEgbmFtZT0iR0VUIj48L2E+CisgICAgICA8aDI+R0VUPC9oMj4KKyAgICAgIDxwPgorICAgICAgICAgICAgR2V0cyB0aGUgbGlzdCBvZiB0cmFpdCB0eXBlIG5hbWVzIHJlZ2lzdGVyZWQgaW4gdGhlIHR5cGUgc3lzdGVtLgorICAgICAgICAgIDwvcD4KKyAgICAgIDxoMz5QYXJhbWV0ZXJzPC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0aD5uYW1lPC90aD4KKyAgICAgICAgICA8dGg+ZGVzY3JpcHRpb248L3RoPgorICAgICAgICAgIDx0aD50eXBlPC90aD4KKyAgICAgICAgICA8dGg+ZGVmYXVsdDwvdGg+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQ+dHlwZTwvdGQ+CisgICAgICAgICAgPHRkPgorICAgICAgICAgICAgdHlwZSBzaG91bGQgYmUgdGhlIG5hbWUgb2YgZW51bQorb3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLnR5cGVzLkRhdGFUeXBlcy5UeXBlQ2F0ZWdvcnkKK1R5cGljYWxseSwgd291bGQgYmUgb25lIG9mIGFsbCwgVFJBSVQsIENMQVNTLCBFTlVNLCBTVFJVQ1QKKyAgICAgICAgICA8L3RkPgorICAgICAgICAgIDx0ZD5xdWVyeTwvdGQ+CisgICAgICAgICAgPHRkPmFsbDwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPGgzPlJlc3BvbnNlIEJvZHk8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+ZWxlbWVudDo8L3RkPgorICAgICAgICAgIDx0ZD4oY3VzdG9tKTwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICA8dGQgYWxpZ249InJpZ2h0Ij5tZWRpYSB0eXBlczo8L3RkPgorICAgICAgICAgIDx0ZD5hcHBsaWNhdGlvbi9qc29uPC90ZD4KKyAgICAgICAgPC90cj4KKyAgICAgIDwvdGFibGU+CisgICAgICA8cD5lbnRpdHkgbmFtZXMgcmVzcG9uc2UgcGF5bG9hZCBhcyBqc29uPC9wPgorICAgICAgICA8YSBuYW1lPSJwYXRoX190eXBlc18tdHlwZU5hbWUtLmh0bWwiPjwvYT4KKyAgICAgIDxoMT4vdHlwZXMve3R5cGVOYW1lfTwvaDE+CisgICAgICA8YSBuYW1lPSJHRVQiPjwvYT4KKyAgICAgIDxoMj5HRVQ8L2gyPgorICAgICAgPHA+CisgICAgICAgICAgICBGZXRjaCB0aGUgY29tcGxldGUgZGVmaW5pdGlvbiBvZiBhIGdpdmVuIHR5cGUgbmFtZSB3aGljaCBpcyB1bmlxdWUuCisgICAgICAgICAgPC9wPgorICAgICAgPGgzPlBhcmFtZXRlcnM8L2gzPgorICAgICAgPHRhYmxlPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRoPm5hbWU8L3RoPgorICAgICAgICAgIDx0aD5kZXNjcmlwdGlvbjwvdGg+CisgICAgICAgICAgPHRoPnR5cGU8L3RoPgorICAgICAgICAgIDx0aD5kZWZhdWx0PC90aD4KKyAgICAgICAgPC90cj4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZD50eXBlTmFtZTwvdGQ+CisgICAgICAgICAgPHRkPgorICAgICAgICAgICAgbmFtZSBvZiBhIHR5cGUgd2hpY2ggaXMgdW5pcXVlLgorICAgICAgICAgIDwvdGQ+CisgICAgICAgICAgPHRkPnBhdGg8L3RkPgorICAgICAgICAgIDx0ZD48L3RkPgorICAgICAgICA8L3RyPgorICAgICAgPC90YWJsZT4KKyAgICAgIDxoMz5SZXNwb25zZSBCb2R5PC9oMz4KKyAgICAgIDx0YWJsZT4KKyAgICAgICAgPHRyPgorICAgICAgICAgIDx0ZCBhbGlnbj0icmlnaHQiPmVsZW1lbnQ6PC90ZD4KKyAgICAgICAgICA8dGQ+KGN1c3RvbSk8L3RkPgorICAgICAgICA8L3RyPgorICAgICAgICA8dHI+CisgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+bWVkaWEgdHlwZXM6PC90ZD4KKyAgICAgICAgICA8dGQ+YXBwbGljYXRpb24vanNvbjwvdGQ+CisgICAgICAgIDwvdHI+CisgICAgICA8L3RhYmxlPgorICAgICAgPHA+KG5vIGRvY3VtZW50YXRpb24gcHJvdmlkZWQpPC9wPgorCisgICAgICA8ZGl2IGNsYXNzPSJjbGVhciIgLz4KKyAgICA8L2Rpdj4KKyAgICA8Zm9vdGVyPgorICAgICAgPGRpdiBpZD0iZm9vdGVyIj4KKyAgICAgICAgR2VuZXJhdGVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly9lbnVuY2lhdGUuY29kZWhhdXMub3JnIj5FbnVuY2lhdGU8L2E+LgorICAgICAgPC9kaXY+CisgICAgPC9mb290ZXI+CisgIDwvZGl2PiA8IS0tISBlbmQgb2YgI2NvbnRhaW5lciAtLT4KKworICA8IS0tIEphdmFTY3JpcHQgYXQgdGhlIGJvdHRvbSBmb3IgZmFzdCBwYWdlIGxvYWRpbmcgLS0+CisKKyAgPCEtLSBHcmFiIEdvb2dsZSBDRE4ncyBqUXVlcnksIHdpdGggYSBwcm90b2NvbCByZWxhdGl2ZSBVUkw7IGZhbGwgYmFjayB0byBsb2NhbCBpZiBuZWNlc3NhcnkgLS0+CisgIDxzY3JpcHQgc3JjPSIvL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjUuMS9qcXVlcnkuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0PndpbmRvdy5qUXVlcnkgfHwgZG9jdW1lbnQud3JpdGUoIjxzY3JpcHQgc3JjPSdqcy9saWJzL2pxdWVyeS0xLjUuMS5taW4uanMnPlx4M0Mvc2NyaXB0PiIpPC9zY3JpcHQ+CisKKyAgPCEtLW1hbmFnZSB0aGUgbmF2aWdhdGlvbiBtZW51LS0+CisgIDxzY3JpcHQgc3JjPSJqcy9saWJzL3hicmVhZGNydW1icy5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+CisgICAgJChmdW5jdGlvbigpIHsKKyAgICAgICQoJyNicmVhZGNydW1icycpLnhCcmVhZGNydW1icygpOworICAgIH0pOworICA8L3NjcmlwdD4KKworCisgIDwhLS0gcHJldHRpZnkgY29kZSBibG9ja3MuIHNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ29vZ2xlLWNvZGUtcHJldHRpZnkvIC0tPgorICA8c2NyaXB0IHNyYz0ianMvbGlicy9wcmV0dGlmeS9wcmV0dGlmeS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+CisgICAgJChmdW5jdGlvbigpIHsKKyAgICAgIHByZXR0eVByaW50KCk7CisgICAgfSk7CisgIDwvc2NyaXB0PgorCisgIDwhLS1baWYgbHQgSUUgNyBdPgorICAgIDxzY3JpcHQgc3JjPSJqcy9saWJzL2RkX2JlbGF0ZWRwbmcuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+RERfYmVsYXRlZFBORy5maXgoImltZywgLnBuZ19iZyIpOyAvLyBGaXggYW55IDxpbWc+IG9yIC5wbmdfYmcgYmctaW1hZ2VzLiBBbHNvLCBwbGVhc2UgcmVhZCBnb28uZ2wvbVppeWIgPC9zY3JpcHQ+CisgIDwhW2VuZGlmXS0tPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9hcGkvcmVzdC5odG1sIGIvYXBpL3Jlc3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDdkMDk5Ci0tLSAvZGV2L251bGwKKysrIGIvYXBpL3Jlc3QuaHRtbApAQCAtMCwwICsxLDExMiBAQAorPCFkb2N0eXBlIGh0bWw+Cis8IS0tIHBhdWxpcmlzaC5jb20vMjAwOC9jb25kaXRpb25hbC1zdHlsZXNoZWV0cy12cy1jc3MtaGFja3MtYW5zd2VyLW5laXRoZXIvIC0tPgorPCEtLVtpZiBsdCBJRSA3IF0+IDxodG1sIGNsYXNzPSJuby1qcyBpZTYiIGxhbmc9ImVuIj4gPCFbZW5kaWZdLS0+Cis8IS0tW2lmIElFIDcgXT4gICAgPGh0bWwgY2xhc3M9Im5vLWpzIGllNyIgbGFuZz0iZW4iPiA8IVtlbmRpZl0tLT4KKzwhLS1baWYgSUUgOCBdPiAgICA8aHRtbCBjbGFzcz0ibm8tanMgaWU4IiBsYW5nPSJlbiI+IDwhW2VuZGlmXS0tPgorPCEtLVtpZiAoZ3RlIElFIDkpfCEoSUUpXT48IS0tPiA8aHRtbCBjbGFzcz0ibm8tanMiIGxhbmc9ImVuIj4gPCEtLTwhW2VuZGlmXS0tPgorPGhlYWQ+CisgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKworICA8IS0tIEFsd2F5cyBmb3JjZSBsYXRlc3QgSUUgcmVuZGVyaW5nIGVuZ2luZSAoZXZlbiBpbiBpbnRyYW5ldCkgJiBDaHJvbWUgRnJhbWUKKyAgICAgICBSZW1vdmUgdGhpcyBpZiB5b3UgdXNlIHRoZSAuaHRhY2Nlc3MgLS0+CisgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSxjaHJvbWU9MSI+CisKKyAgPHRpdGxlPlJFU1Q8L3RpdGxlPgorCisgIDwhLS0gTW9iaWxlIHZpZXdwb3J0IG9wdGltaXplZDogai5tcC9icGxhdGV2aWV3cG9ydCAtLT4KKyAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPgorCisgIDwhLS0gQ1NTOiBpbXBsaWVkIG1lZGlhPSJhbGwiIC0tPgorICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNzcy9zdHlsZS5jc3M/dj0yIj4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MvcHJldHRpZnkuY3NzIj4KKworICA8IS0tIEFsbCBKYXZhU2NyaXB0IGF0IHRoZSBib3R0b20sIGV4Y2VwdCBmb3IgTW9kZXJuaXpyIHdoaWNoIGVuYWJsZXMgSFRNTDUgZWxlbWVudHMgJiBmZWF0dXJlIGRldGVjdHMgLS0+CisgIDxzY3JpcHQgc3JjPSJqcy9saWJzL21vZGVybml6ci0xLjcubWluLmpzIj48L3NjcmlwdD4KKworPC9oZWFkPgorCis8Ym9keSBjbGFzcz0iaG9tZSI+CisKKyAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICA8aGVhZGVyPgorICAgICAgPGRpdiBpZD0iaGVhZGVyIiBjbGFzcz0iY29sdW1uIGZpcnN0IGxhc3Qgc3Bhbi0yMCI+CisgICAgICAgIDxkaXYgaWQ9InNpdGUtbmFtZSIgY2xhc3M9ImNvbHVtbiBzcGFuLTE4IGFwcGVuZC0xIHByZXBlbmQtMSBmaXJzdCBsYXN0Ij48YSBocmVmPSJpbmRleC5odG1sIj5SRVNUPC9hPjwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJwcmltYXJ5IiBjbGFzcz0iY29sdW1uIHNwYW4tMTggYXBwZW5kLTEgcHJlcGVuZC0xIGZpcnN0IGxhc3QiPgorICAgICAgICAgIDx1bCBjbGFzcz0ibmF2aWdhdGlvbiI+CisgICAgICAgICAgICA8bGkgaWQ9Im5hdi1yZXN0Ij48YSBocmVmPSJyZXN0Lmh0bWwiPlJFU1Q8L2E+PC9saT4KKyAgICAgICAgICAgIDxsaSBpZD0ibmF2LWRhdGEiPjxhIGhyZWY9Im1vZGVsLmh0bWwiPkRhdGEgTW9kZWw8L2E+PC9saT4KKyAgICAgICAgICA8L3VsPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdj4KKyAgICAgICAgICA8dWwgY2xhc3M9InhicmVhZGNydW1icyIgaWQ9ImJyZWFkY3J1bWJzIj4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgY2xhc3M9ImhvbWUiPkhvbWU8L2E+ICZndDsKKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICA8bGkgY2xhc3M9ImN1cnJlbnQiPgorICAgICAgICAgICAgICA8YSBocmVmPSJyZXN0Lmh0bWwiPlJFU1Q8L2E+CisgICAgICAgICAgICAgIDx1bD4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0ibW9kZWwuaHRtbCI+RGF0YSBNb2RlbDwvYT48L2xpPgorICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJyZXN0Lmh0bWwiPlJFU1Q8L2E+PC9saT4KKyAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgPC91bD4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2hlYWRlcj4KKyAgICA8ZGl2IGlkPSJtYWluIiBjbGFzcz0iY29sdW1uIGZpcnN0IGxhc3Qgc3Bhbi0yMCI+CisgIDxoMT5SRVNUIFJlc291cmNlczwvaDE+CisgIDxwPgorICAgIFRoaXMgQVBJIHN1cHBvcnRzIGEgPGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SZXByZXNlbnRhdGlvbmFsX1N0YXRlX1RyYW5zZmVyIj5SZXByZXNlbnRhdGlvbmFsIFN0YXRlIFRyYW5zZmVyIChSRVNUKTwvYT4KKyAgICBtb2RlbCBmb3IgYWNjZXNzaW5nIGEgc2V0IG9mIHJlc291cmNlcyB0aHJvdWdoIGEgZml4ZWQgc2V0IG9mIG9wZXJhdGlvbnMuIFRoZSBmb2xsb3dpbmcgcmVzb3VyY2VzIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIFJFU1RmdWwgbW9kZWw6CisgIDwvcD4KKyAgPHVsPgorICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX0FkbWluUmVzb3VyY2UuaHRtbCI+QWRtaW5SZXNvdXJjZTwvYT48L2xpPgorICAgICAgPGxpPjxhIGhyZWY9InJlc291cmNlX0VudGl0eVJlc291cmNlLmh0bWwiPkVudGl0eVJlc291cmNlPC9hPjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfSGl2ZUxpbmVhZ2VSZXNvdXJjZS5odG1sIj5IaXZlTGluZWFnZVJlc291cmNlPC9hPjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfTWV0YWRhdGFEaXNjb3ZlcnlSZXNvdXJjZS5odG1sIj5NZXRhZGF0YURpc2NvdmVyeVJlc291cmNlPC9hPjwvbGk+CisgICAgICA8bGk+PGEgaHJlZj0icmVzb3VyY2VfUmV4c3RlckdyYXBoUmVzb3VyY2UuaHRtbCI+UmV4c3RlckdyYXBoUmVzb3VyY2U8L2E+PC9saT4KKyAgICAgIDxsaT48YSBocmVmPSJyZXNvdXJjZV9UeXBlc1Jlc291cmNlLmh0bWwiPlR5cGVzUmVzb3VyY2U8L2E+PC9saT4KKyAgPC91bD4KKyAgPHA+CisgICAgVGhlcmUgaXMgYWxzbyBhIDxhIGhyZWY9ImFwcGxpY2F0aW9uLndhZGwiPldBREwgZG9jdW1lbnQ8L2E+IGRlc2NyaWJpbmcgdGhlIFJFU1QgQVBJLgorICA8L3A+CisKKyAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIiAvPgorICAgIDwvZGl2PgorICAgIDxmb290ZXI+CisgICAgICA8ZGl2IGlkPSJmb290ZXIiPgorICAgICAgICBHZW5lcmF0ZWQgYnkgPGEgaHJlZj0iaHR0cDovL2VudW5jaWF0ZS5jb2RlaGF1cy5vcmciPkVudW5jaWF0ZTwvYT4uCisgICAgICA8L2Rpdj4KKyAgICA8L2Zvb3Rlcj4KKyAgPC9kaXY+IDwhLS0hIGVuZCBvZiAjY29udGFpbmVyIC0tPgorCisgIDwhLS0gSmF2YVNjcmlwdCBhdCB0aGUgYm90dG9tIGZvciBmYXN0IHBhZ2UgbG9hZGluZyAtLT4KKworICA8IS0tIEdyYWIgR29vZ2xlIENETidzIGpRdWVyeSwgd2l0aCBhIHByb3RvY29sIHJlbGF0aXZlIFVSTDsgZmFsbCBiYWNrIHRvIGxvY2FsIGlmIG5lY2Vzc2FyeSAtLT4KKyAgPHNjcmlwdCBzcmM9Ii8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuNS4xL2pxdWVyeS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+d2luZG93LmpRdWVyeSB8fCBkb2N1bWVudC53cml0ZSgiPHNjcmlwdCBzcmM9J2pzL2xpYnMvanF1ZXJ5LTEuNS4xLm1pbi5qcyc+XHgzQy9zY3JpcHQ+Iik8L3NjcmlwdD4KKworICA8IS0tbWFuYWdlIHRoZSBuYXZpZ2F0aW9uIG1lbnUtLT4KKyAgPHNjcmlwdCBzcmM9ImpzL2xpYnMveGJyZWFkY3J1bWJzLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD4KKyAgICAkKGZ1bmN0aW9uKCkgeworICAgICAgJCgnI2JyZWFkY3J1bWJzJykueEJyZWFkY3J1bWJzKCk7CisgICAgfSk7CisgIDwvc2NyaXB0PgorCisKKyAgPCEtLSBwcmV0dGlmeSBjb2RlIGJsb2Nrcy4gc2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9nb29nbGUtY29kZS1wcmV0dGlmeS8gLS0+CisgIDxzY3JpcHQgc3JjPSJqcy9saWJzL3ByZXR0aWZ5L3ByZXR0aWZ5LmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD4KKyAgICAkKGZ1bmN0aW9uKCkgeworICAgICAgcHJldHR5UHJpbnQoKTsKKyAgICB9KTsKKyAgPC9zY3JpcHQ+CisKKyAgPCEtLVtpZiBsdCBJRSA3IF0+CisgICAgPHNjcmlwdCBzcmM9ImpzL2xpYnMvZGRfYmVsYXRlZHBuZy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD5ERF9iZWxhdGVkUE5HLmZpeCgiaW1nLCAucG5nX2JnIik7IC8vIEZpeCBhbnkgPGltZz4gb3IgLnBuZ19iZyBiZy1pbWFnZXMuIEFsc28sIHBsZWFzZSByZWFkIGdvby5nbC9tWml5YiA8L3NjcmlwdD4KKyAgPCFbZW5kaWZdLS0+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2FwaS9yb2JvdHMudHh0IGIvYXBpL3JvYm90cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMxMGQwNwotLS0gL2Rldi9udWxsCisrKyBiL2FwaS9yb2JvdHMudHh0CkBAIC0wLDAgKzEsNSBAQAorIyB3d3cucm9ib3RzdHh0Lm9yZy8KKyMgd3d3Lmdvb2dsZS5jb20vc3VwcG9ydC93ZWJtYXN0ZXJzL2Jpbi9hbnN3ZXIucHk/aGw9ZW4mYW5zd2VyPTE1NjQ0OQorCitVc2VyLWFnZW50OiAqCisKZGlmZiAtLWdpdCBhL2FyY2hpdGVjdHVyZS5wbmcgYi9hcmNoaXRlY3R1cmUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyNmRmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoaXRlY3R1cmUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Nzcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5jc3MgYi9jc3MvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYjQxMzMKLS0tIC9kZXYvbnVsbAorKysgYi9jc3MvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uY3NzCkBAIC0wLDAgKzEsOSBAQAorLyohCisgKiBCb290c3RyYXAgdjIuMS4wCisgKgorICogQ29weXJpZ2h0IDIwMTIgVHdpdHRlciwgSW5jCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgdjIuMAorICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogRGVzaWduZWQgYW5kIGJ1aWx0IHdpdGggYWxsIHRoZSBsb3ZlIGluIHRoZSB3b3JsZCBAdHdpdHRlciBieSBAbWRvIGFuZCBAZmF0LgorICovYXJ0aWNsZSxhc2lkZSxkZXRhaWxzLGZpZ2NhcHRpb24sZmlndXJlLGZvb3RlcixoZWFkZXIsaGdyb3VwLG5hdixzZWN0aW9ue2Rpc3BsYXk6YmxvY2t9YXVkaW8sY2FudmFzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTsqem9vbToxfWF1ZGlvOm5vdChbY29udHJvbHNdKXtkaXNwbGF5Om5vbmV9aHRtbHtmb250LXNpemU6MTAwJTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbXMtdGV4dC1zaXplLWFkanVzdDoxMDAlfWE6Zm9jdXN7b3V0bGluZTp0aGluIGRvdHRlZCAjMzMzO291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0Oi0ycHh9YTpob3ZlcixhOmFjdGl2ZXtvdXRsaW5lOjB9c3ViLHN1cHtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6NzUlO2xpbmUtaGVpZ2h0OjA7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3Vwe3RvcDotMC41ZW19c3Vie2JvdHRvbTotMC4yNWVtfWltZ3toZWlnaHQ6YXV0bzttYXgtd2lkdGg6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyOjA7LW1zLWludGVycG9sYXRpb24tbW9kZTpiaWN1YmljfSNtYXBfY2FudmFzIGltZ3ttYXgtd2lkdGg6bm9uZX1idXR0b24saW5wdXQsc2VsZWN0LHRleHRhcmVhe21hcmdpbjowO2ZvbnQtc2l6ZToxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1idXR0b24saW5wdXR7Km92ZXJmbG93OnZpc2libGU7bGluZS1oZWlnaHQ6bm9ybWFsfWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixpbnB1dDo6LW1vei1mb2N1cy1pbm5lcntwYWRkaW5nOjA7Ym9yZGVyOjB9YnV0dG9uLGlucHV0W3R5cGU9ImJ1dHRvbiJdLGlucHV0W3R5cGU9InJlc2V0Il0saW5wdXRbdHlwZT0ic3VibWl0Il17Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn1pbnB1dFt0eXBlPSJzZWFyY2giXXstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZH1pbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbixpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX10ZXh0YXJlYXtvdmVyZmxvdzphdXRvO3ZlcnRpY2FsLWFsaWduOnRvcH0uY2xlYXJmaXh7Knpvb206MX0uY2xlYXJmaXg6YmVmb3JlLC5jbGVhcmZpeDphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0uY2xlYXJmaXg6YWZ0ZXJ7Y2xlYXI6Ym90aH0uaGlkZS10ZXh0e2ZvbnQ6MC8wIGE7Y29sb3I6dHJhbnNwYXJlbnQ7dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjowfS5pbnB1dC1ibG9jay1sZXZlbHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7bWluLWhlaWdodDozMHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH1ib2R5e21hcmdpbjowO2ZvbnQtZmFtaWx5OiJIZWx2ZXRpY2EgTmV1ZSIsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZmZn1he2NvbG9yOiMwOGM7dGV4dC1kZWNvcmF0aW9uOm5vbmV9YTpob3Zlcntjb2xvcjojMDA1NTgwO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmltZy1yb3VuZGVkey13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0uaW1nLXBvbGFyb2lke3BhZGRpbmc6NHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMik7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMSk7Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwwLjEpfS5pbWctY2lyY2xley13ZWJraXQtYm9yZGVyLXJhZGl1czo1MDBweDstbW96LWJvcmRlci1yYWRpdXM6NTAwcHg7Ym9yZGVyLXJhZGl1czo1MDBweH0ucm93e21hcmdpbi1sZWZ0Oi0yMHB4Oyp6b29tOjF9LnJvdzpiZWZvcmUsLnJvdzphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ucm93OmFmdGVye2NsZWFyOmJvdGh9W2NsYXNzKj0ic3BhbiJde2Zsb2F0OmxlZnQ7bWFyZ2luLWxlZnQ6MjBweH0uY29udGFpbmVyLC5uYXZiYXItc3RhdGljLXRvcCAuY29udGFpbmVyLC5uYXZiYXItZml4ZWQtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC1ib3R0b20gLmNvbnRhaW5lcnt3aWR0aDo5NDBweH0uc3BhbjEye3dpZHRoOjk0MHB4fS5zcGFuMTF7d2lkdGg6ODYwcHh9LnNwYW4xMHt3aWR0aDo3ODBweH0uc3Bhbjl7d2lkdGg6NzAwcHh9LnNwYW44e3dpZHRoOjYyMHB4fS5zcGFuN3t3aWR0aDo1NDBweH0uc3BhbjZ7d2lkdGg6NDYwcHh9LnNwYW41e3dpZHRoOjM4MHB4fS5zcGFuNHt3aWR0aDozMDBweH0uc3BhbjN7d2lkdGg6MjIwcHh9LnNwYW4ye3dpZHRoOjE0MHB4fS5zcGFuMXt3aWR0aDo2MHB4fS5vZmZzZXQxMnttYXJnaW4tbGVmdDo5ODBweH0ub2Zmc2V0MTF7bWFyZ2luLWxlZnQ6OTAwcHh9Lm9mZnNldDEwe21hcmdpbi1sZWZ0OjgyMHB4fS5vZmZzZXQ5e21hcmdpbi1sZWZ0Ojc0MHB4fS5vZmZzZXQ4e21hcmdpbi1sZWZ0OjY2MHB4fS5vZmZzZXQ3e21hcmdpbi1sZWZ0OjU4MHB4fS5vZmZzZXQ2e21hcmdpbi1sZWZ0OjUwMHB4fS5vZmZzZXQ1e21hcmdpbi1sZWZ0OjQyMHB4fS5vZmZzZXQ0e21hcmdpbi1sZWZ0OjM0MHB4fS5vZmZzZXQze21hcmdpbi1sZWZ0OjI2MHB4fS5vZmZzZXQye21hcmdpbi1sZWZ0OjE4MHB4fS5vZmZzZXQxe21hcmdpbi1sZWZ0OjEwMHB4fS5yb3ctZmx1aWR7d2lkdGg6MTAwJTsqem9vbToxfS5yb3ctZmx1aWQ6YmVmb3JlLC5yb3ctZmx1aWQ6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LnJvdy1mbHVpZDphZnRlcntjbGVhcjpib3RofS5yb3ctZmx1aWQgW2NsYXNzKj0ic3BhbiJde2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bGVmdDt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MzBweDttYXJnaW4tbGVmdDoyLjEyNzY1OTU3NDQ2ODA4NSU7Km1hcmdpbi1sZWZ0OjIuMDc0NDY4MDg1MTA2MzgzJTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0ucm93LWZsdWlkIC5zcGFuMTJ7d2lkdGg6MTAwJTsqd2lkdGg6OTkuOTQ2ODA4NTEwNjM4MjklfS5yb3ctZmx1aWQgLnNwYW4xMXt3aWR0aDo5MS40ODkzNjE3MDIxMjc2NSU7KndpZHRoOjkxLjQzNjE3MDIxMjc2NTk0JX0ucm93LWZsdWlkIC5zcGFuMTB7d2lkdGg6ODIuOTc4NzIzNDA0MjU1MzIlOyp3aWR0aDo4Mi45MjU1MzE5MTQ4OTM2MSV9LnJvdy1mbHVpZCAuc3Bhbjl7d2lkdGg6NzQuNDY4MDg1MTA2MzgyOTclOyp3aWR0aDo3NC40MTQ4OTM2MTcwMjEyNiV9LnJvdy1mbHVpZCAuc3Bhbjh7d2lkdGg6NjUuOTU3NDQ2ODA4NTEwNjQlOyp3aWR0aDo2NS45MDQyNTUzMTkxNDg5MyV9LnJvdy1mbHVpZCAuc3Bhbjd7d2lkdGg6NTcuNDQ2ODA4NTEwNjM4MjklOyp3aWR0aDo1Ny4zOTM2MTcwMjEyNzY1OSV9LnJvdy1mbHVpZCAuc3BhbjZ7d2lkdGg6NDguOTM2MTcwMjEyNzY1OTUlOyp3aWR0aDo0OC44ODI5Nzg3MjM0MDQyNSV9LnJvdy1mbHVpZCAuc3BhbjV7d2lkdGg6NDAuNDI1NTMxOTE0ODkzNjIlOyp3aWR0aDo0MC4zNzIzNDA0MjU1MzE5MiV9LnJvdy1mbHVpZCAuc3BhbjR7d2lkdGg6MzEuOTE0ODkzNjE3MDIxMjc4JTsqd2lkdGg6MzEuODYxNzAyMTI3NjU5NTc2JX0ucm93LWZsdWlkIC5zcGFuM3t3aWR0aDoyMy40MDQyNTUzMTkxNDg5MzQlOyp3aWR0aDoyMy4zNTEwNjM4Mjk3ODcyMzMlfS5yb3ctZmx1aWQgLnNwYW4ye3dpZHRoOjE0Ljg5MzYxNzAyMTI3NjU5NSU7KndpZHRoOjE0Ljg0MDQyNTUzMTkxNDg5NCV9LnJvdy1mbHVpZCAuc3BhbjF7d2lkdGg6Ni4zODI5Nzg3MjM0MDQyNTUlOyp3aWR0aDo2LjMyOTc4NzIzNDA0MjU1MyV9LnJvdy1mbHVpZCAub2Zmc2V0MTJ7bWFyZ2luLWxlZnQ6MTA0LjI1NTMxOTE0ODkzNjE3JTsqbWFyZ2luLWxlZnQ6MTA0LjE0ODkzNjE3MDIxMjc1JX0ucm93LWZsdWlkIC5vZmZzZXQxMjpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDoxMDIuMTI3NjU5NTc0NDY4MDglOyptYXJnaW4tbGVmdDoxMDIuMDIxMjc2NTk1NzQ0NjclfS5yb3ctZmx1aWQgLm9mZnNldDExe21hcmdpbi1sZWZ0Ojk1Ljc0NDY4MDg1MTA2MzgyJTsqbWFyZ2luLWxlZnQ6OTUuNjM4Mjk3ODcyMzQwNCV9LnJvdy1mbHVpZCAub2Zmc2V0MTE6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6OTMuNjE3MDIxMjc2NTk1NzQlOyptYXJnaW4tbGVmdDo5My41MTA2MzgyOTc4NzIzMiV9LnJvdy1mbHVpZCAub2Zmc2V0MTB7bWFyZ2luLWxlZnQ6ODcuMjM0MDQyNTUzMTkxNDklOyptYXJnaW4tbGVmdDo4Ny4xMjc2NTk1NzQ0NjgwNyV9LnJvdy1mbHVpZCAub2Zmc2V0MTA6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6ODUuMTA2MzgyOTc4NzIzNCU7Km1hcmdpbi1sZWZ0Ojg0Ljk5OTk5OTk5OTk5OTk5JX0ucm93LWZsdWlkIC5vZmZzZXQ5e21hcmdpbi1sZWZ0Ojc4LjcyMzQwNDI1NTMxOTE0JTsqbWFyZ2luLWxlZnQ6NzguNjE3MDIxMjc2NTk1NzIlfS5yb3ctZmx1aWQgLm9mZnNldDk6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NzYuNTk1NzQ0NjgwODUxMDYlOyptYXJnaW4tbGVmdDo3Ni40ODkzNjE3MDIxMjc2NCV9LnJvdy1mbHVpZCAub2Zmc2V0OHttYXJnaW4tbGVmdDo3MC4yMTI3NjU5NTc0NDY4JTsqbWFyZ2luLWxlZnQ6NzAuMTA2MzgyOTc4NzIzMzklfS5yb3ctZmx1aWQgLm9mZnNldDg6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NjguMDg1MTA2MzgyOTc4NzIlOyptYXJnaW4tbGVmdDo2Ny45Nzg3MjM0MDQyNTUzJX0ucm93LWZsdWlkIC5vZmZzZXQ3e21hcmdpbi1sZWZ0OjYxLjcwMjEyNzY1OTU3NDQ2JTsqbWFyZ2luLWxlZnQ6NjEuNTk1NzQ0NjgwODUxMDYlfS5yb3ctZmx1aWQgLm9mZnNldDc6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NTkuNTc0NDY4MDg1MTA2Mzc1JTsqbWFyZ2luLWxlZnQ6NTkuNDY4MDg1MTA2MzgyOTclfS5yb3ctZmx1aWQgLm9mZnNldDZ7bWFyZ2luLWxlZnQ6NTMuMTkxNDg5MzYxNzAyMTI1JTsqbWFyZ2luLWxlZnQ6NTMuMDg1MTA2MzgyOTc4NzE1JX0ucm93LWZsdWlkIC5vZmZzZXQ2OmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjUxLjA2MzgyOTc4NzIzNDAzNSU7Km1hcmdpbi1sZWZ0OjUwLjk1NzQ0NjgwODUxMDYzJX0ucm93LWZsdWlkIC5vZmZzZXQ1e21hcmdpbi1sZWZ0OjQ0LjY4MDg1MTA2MzgyOTc5JTsqbWFyZ2luLWxlZnQ6NDQuNTc0NDY4MDg1MTA2MzglfS5yb3ctZmx1aWQgLm9mZnNldDU6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6NDIuNTUzMTkxNDg5MzYxNyU7Km1hcmdpbi1sZWZ0OjQyLjQ0NjgwODUxMDYzODMlfS5yb3ctZmx1aWQgLm9mZnNldDR7bWFyZ2luLWxlZnQ6MzYuMTcwMjEyNzY1OTU3NDQ0JTsqbWFyZ2luLWxlZnQ6MzYuMDYzODI5Nzg3MjM0MDUlfS5yb3ctZmx1aWQgLm9mZnNldDQ6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MzQuMDQyNTUzMTkxNDg5MzYlOyptYXJnaW4tbGVmdDozMy45MzYxNzAyMTI3NjU5NiV9LnJvdy1mbHVpZCAub2Zmc2V0M3ttYXJnaW4tbGVmdDoyNy42NTk1NzQ0NjgwODUxMDQlOyptYXJnaW4tbGVmdDoyNy41NTMxOTE0ODkzNjE3JX0ucm93LWZsdWlkIC5vZmZzZXQzOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjI1LjUzMTkxNDg5MzYxNzAyJTsqbWFyZ2luLWxlZnQ6MjUuNDI1NTMxOTE0ODkzNjE4JX0ucm93LWZsdWlkIC5vZmZzZXQye21hcmdpbi1sZWZ0OjE5LjE0ODkzNjE3MDIxMjc2NCU7Km1hcmdpbi1sZWZ0OjE5LjA0MjU1MzE5MTQ4OTM2JX0ucm93LWZsdWlkIC5vZmZzZXQyOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjE3LjAyMTI3NjU5NTc0NDY4JTsqbWFyZ2luLWxlZnQ6MTYuOTE0ODkzNjE3MDIxMjc4JX0ucm93LWZsdWlkIC5vZmZzZXQxe21hcmdpbi1sZWZ0OjEwLjYzODI5Nzg3MjM0MDQyNSU7Km1hcmdpbi1sZWZ0OjEwLjUzMTkxNDg5MzYxNzAyJX0ucm93LWZsdWlkIC5vZmZzZXQxOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjguNTEwNjM4Mjk3ODcyMzQlOyptYXJnaW4tbGVmdDo4LjQwNDI1NTMxOTE0ODkzOCV9W2NsYXNzKj0ic3BhbiJdLmhpZGUsLnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl0uaGlkZXtkaXNwbGF5Om5vbmV9W2NsYXNzKj0ic3BhbiJdLnB1bGwtcmlnaHQsLnJvdy1mbHVpZCBbY2xhc3MqPSJzcGFuIl0ucHVsbC1yaWdodHtmbG9hdDpyaWdodH0uY29udGFpbmVye21hcmdpbi1yaWdodDphdXRvO21hcmdpbi1sZWZ0OmF1dG87Knpvb206MX0uY29udGFpbmVyOmJlZm9yZSwuY29udGFpbmVyOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jb250YWluZXI6YWZ0ZXJ7Y2xlYXI6Ym90aH0uY29udGFpbmVyLWZsdWlke3BhZGRpbmctcmlnaHQ6MjBweDtwYWRkaW5nLWxlZnQ6MjBweDsqem9vbToxfS5jb250YWluZXItZmx1aWQ6YmVmb3JlLC5jb250YWluZXItZmx1aWQ6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmNvbnRhaW5lci1mbHVpZDphZnRlcntjbGVhcjpib3RofXB7bWFyZ2luOjAgMCAxMHB4fS5sZWFke21hcmdpbi1ib3R0b206MjBweDtmb250LXNpemU6MjBweDtmb250LXdlaWdodDoyMDA7bGluZS1oZWlnaHQ6MzBweH1zbWFsbHtmb250LXNpemU6ODUlfXN0cm9uZ3tmb250LXdlaWdodDpib2xkfWVte2ZvbnQtc3R5bGU6aXRhbGljfWNpdGV7Zm9udC1zdHlsZTpub3JtYWx9Lm11dGVke2NvbG9yOiM5OTl9aDEsaDIsaDMsaDQsaDUsaDZ7bWFyZ2luOjEwcHggMDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtd2VpZ2h0OmJvbGQ7bGluZS1oZWlnaHQ6MTtjb2xvcjppbmhlcml0O3RleHQtcmVuZGVyaW5nOm9wdGltaXplbGVnaWJpbGl0eX1oMSBzbWFsbCxoMiBzbWFsbCxoMyBzbWFsbCxoNCBzbWFsbCxoNSBzbWFsbCxoNiBzbWFsbHtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MTtjb2xvcjojOTk5fWgxe2ZvbnQtc2l6ZTozNnB4O2xpbmUtaGVpZ2h0OjQwcHh9aDJ7Zm9udC1zaXplOjMwcHg7bGluZS1oZWlnaHQ6NDBweH1oM3tmb250LXNpemU6MjRweDtsaW5lLWhlaWdodDo0MHB4fWg0e2ZvbnQtc2l6ZToxOHB4O2xpbmUtaGVpZ2h0OjIwcHh9aDV7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjBweH1oNntmb250LXNpemU6MTJweDtsaW5lLWhlaWdodDoyMHB4fWgxIHNtYWxse2ZvbnQtc2l6ZToyNHB4fWgyIHNtYWxse2ZvbnQtc2l6ZToxOHB4fWgzIHNtYWxse2ZvbnQtc2l6ZToxNHB4fWg0IHNtYWxse2ZvbnQtc2l6ZToxNHB4fS5wYWdlLWhlYWRlcntwYWRkaW5nLWJvdHRvbTo5cHg7bWFyZ2luOjIwcHggMCAzMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlZWV9dWwsb2x7cGFkZGluZzowO21hcmdpbjowIDAgMTBweCAyNXB4fXVsIHVsLHVsIG9sLG9sIG9sLG9sIHVse21hcmdpbi1ib3R0b206MH1saXtsaW5lLWhlaWdodDoyMHB4fXVsLnVuc3R5bGVkLG9sLnVuc3R5bGVke21hcmdpbi1sZWZ0OjA7bGlzdC1zdHlsZTpub25lfWRse21hcmdpbi1ib3R0b206MjBweH1kdCxkZHtsaW5lLWhlaWdodDoyMHB4fWR0e2ZvbnQtd2VpZ2h0OmJvbGR9ZGR7bWFyZ2luLWxlZnQ6MTBweH0uZGwtaG9yaXpvbnRhbCBkdHtmbG9hdDpsZWZ0O3dpZHRoOjEyMHB4O292ZXJmbG93OmhpZGRlbjtjbGVhcjpsZWZ0O3RleHQtYWxpZ246cmlnaHQ7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LmRsLWhvcml6b250YWwgZGR7bWFyZ2luLWxlZnQ6MTMwcHh9aHJ7bWFyZ2luOjIwcHggMDtib3JkZXI6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjZWVlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmZ9YWJiclt0aXRsZV17Y3Vyc29yOmhlbHA7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICM5OTl9YWJici5pbml0aWFsaXNte2ZvbnQtc2l6ZTo5MCU7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfWJsb2NrcXVvdGV7cGFkZGluZzowIDAgMCAxNXB4O21hcmdpbjowIDAgMjBweDtib3JkZXItbGVmdDo1cHggc29saWQgI2VlZX1ibG9ja3F1b3RlIHB7bWFyZ2luLWJvdHRvbTowO2ZvbnQtc2l6ZToxNnB4O2ZvbnQtd2VpZ2h0OjMwMDtsaW5lLWhlaWdodDoyNXB4fWJsb2NrcXVvdGUgc21hbGx7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiM5OTl9YmxvY2txdW90ZSBzbWFsbDpiZWZvcmV7Y29udGVudDonXDIwMTQgXDAwQTAnfWJsb2NrcXVvdGUucHVsbC1yaWdodHtmbG9hdDpyaWdodDtwYWRkaW5nLXJpZ2h0OjE1cHg7cGFkZGluZy1sZWZ0OjA7Ym9yZGVyLXJpZ2h0OjVweCBzb2xpZCAjZWVlO2JvcmRlci1sZWZ0OjB9YmxvY2txdW90ZS5wdWxsLXJpZ2h0IHAsYmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxse3RleHQtYWxpZ246cmlnaHR9YmxvY2txdW90ZS5wdWxsLXJpZ2h0IHNtYWxsOmJlZm9yZXtjb250ZW50OicnfWJsb2NrcXVvdGUucHVsbC1yaWdodCBzbWFsbDphZnRlcntjb250ZW50OidcMDBBMCBcMjAxNCd9cTpiZWZvcmUscTphZnRlcixibG9ja3F1b3RlOmJlZm9yZSxibG9ja3F1b3RlOmFmdGVye2NvbnRlbnQ6IiJ9YWRkcmVzc3tkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206MjBweDtmb250LXN0eWxlOm5vcm1hbDtsaW5lLWhlaWdodDoyMHB4fWNvZGUscHJle3BhZGRpbmc6MCAzcHggMnB4O2ZvbnQtZmFtaWx5Ok1vbmFjbyxNZW5sbyxDb25zb2xhcywiQ291cmllciBOZXciLG1vbm9zcGFjZTtmb250LXNpemU6MTJweDtjb2xvcjojMzMzOy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweH1jb2Rle3BhZGRpbmc6MnB4IDRweDtjb2xvcjojZDE0O2JhY2tncm91bmQtY29sb3I6I2Y3ZjdmOTtib3JkZXI6MXB4IHNvbGlkICNlMWUxZTh9cHJle2Rpc3BsYXk6YmxvY2s7cGFkZGluZzo5LjVweDttYXJnaW46MCAwIDEwcHg7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MjBweDt3b3JkLWJyZWFrOmJyZWFrLWFsbDt3b3JkLXdyYXA6YnJlYWstd29yZDt3aGl0ZS1zcGFjZTpwcmU7d2hpdGUtc3BhY2U6cHJlLXdyYXA7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4xNSk7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fXByZS5wcmV0dHlwcmludHttYXJnaW4tYm90dG9tOjIwcHh9cHJlIGNvZGV7cGFkZGluZzowO2NvbG9yOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXI6MH0ucHJlLXNjcm9sbGFibGV7bWF4LWhlaWdodDozNDBweDtvdmVyZmxvdy15OnNjcm9sbH1mb3Jte21hcmdpbjowIDAgMjBweH1maWVsZHNldHtwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjB9bGVnZW5ke2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtwYWRkaW5nOjA7bWFyZ2luLWJvdHRvbToyMHB4O2ZvbnQtc2l6ZToyMXB4O2xpbmUtaGVpZ2h0OjQwcHg7Y29sb3I6IzMzMztib3JkZXI6MDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTVlNWU1fWxlZ2VuZCBzbWFsbHtmb250LXNpemU6MTVweDtjb2xvcjojOTk5fWxhYmVsLGlucHV0LGJ1dHRvbixzZWxlY3QsdGV4dGFyZWF7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjIwcHh9aW5wdXQsYnV0dG9uLHNlbGVjdCx0ZXh0YXJlYXtmb250LWZhbWlseToiSGVsdmV0aWNhIE5ldWUiLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmfWxhYmVse2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTo1cHh9c2VsZWN0LHRleHRhcmVhLGlucHV0W3R5cGU9InRleHQiXSxpbnB1dFt0eXBlPSJwYXNzd29yZCJdLGlucHV0W3R5cGU9ImRhdGV0aW1lIl0saW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXSxpbnB1dFt0eXBlPSJkYXRlIl0saW5wdXRbdHlwZT0ibW9udGgiXSxpbnB1dFt0eXBlPSJ0aW1lIl0saW5wdXRbdHlwZT0id2VlayJdLGlucHV0W3R5cGU9Im51bWJlciJdLGlucHV0W3R5cGU9ImVtYWlsIl0saW5wdXRbdHlwZT0idXJsIl0saW5wdXRbdHlwZT0ic2VhcmNoIl0saW5wdXRbdHlwZT0idGVsIl0saW5wdXRbdHlwZT0iY29sb3IiXSwudW5lZGl0YWJsZS1pbnB1dHtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MjBweDtwYWRkaW5nOjRweCA2cHg7bWFyZ2luLWJvdHRvbTo5cHg7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjBweDtjb2xvcjojNTU1Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweH1pbnB1dCx0ZXh0YXJlYXt3aWR0aDoyMTBweH10ZXh0YXJlYXtoZWlnaHQ6YXV0b310ZXh0YXJlYSxpbnB1dFt0eXBlPSJ0ZXh0Il0saW5wdXRbdHlwZT0icGFzc3dvcmQiXSxpbnB1dFt0eXBlPSJkYXRldGltZSJdLGlucHV0W3R5cGU9ImRhdGV0aW1lLWxvY2FsIl0saW5wdXRbdHlwZT0iZGF0ZSJdLGlucHV0W3R5cGU9Im1vbnRoIl0saW5wdXRbdHlwZT0idGltZSJdLGlucHV0W3R5cGU9IndlZWsiXSxpbnB1dFt0eXBlPSJudW1iZXIiXSxpbnB1dFt0eXBlPSJlbWFpbCJdLGlucHV0W3R5cGU9InVybCJdLGlucHV0W3R5cGU9InNlYXJjaCJdLGlucHV0W3R5cGU9InRlbCJdLGlucHV0W3R5cGU9ImNvbG9yIl0sLnVuZWRpdGFibGUtaW5wdXR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYzstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7LXdlYmtpdC10cmFuc2l0aW9uOmJvcmRlciBsaW5lYXIgLjJzLGJveC1zaGFkb3cgbGluZWFyIC4yczstbW96LXRyYW5zaXRpb246Ym9yZGVyIGxpbmVhciAuMnMsYm94LXNoYWRvdyBsaW5lYXIgLjJzOy1vLXRyYW5zaXRpb246Ym9yZGVyIGxpbmVhciAuMnMsYm94LXNoYWRvdyBsaW5lYXIgLjJzO3RyYW5zaXRpb246Ym9yZGVyIGxpbmVhciAuMnMsYm94LXNoYWRvdyBsaW5lYXIgLjJzfXRleHRhcmVhOmZvY3VzLGlucHV0W3R5cGU9InRleHQiXTpmb2N1cyxpbnB1dFt0eXBlPSJwYXNzd29yZCJdOmZvY3VzLGlucHV0W3R5cGU9ImRhdGV0aW1lIl06Zm9jdXMsaW5wdXRbdHlwZT0iZGF0ZXRpbWUtbG9jYWwiXTpmb2N1cyxpbnB1dFt0eXBlPSJkYXRlIl06Zm9jdXMsaW5wdXRbdHlwZT0ibW9udGgiXTpmb2N1cyxpbnB1dFt0eXBlPSJ0aW1lIl06Zm9jdXMsaW5wdXRbdHlwZT0id2VlayJdOmZvY3VzLGlucHV0W3R5cGU9Im51bWJlciJdOmZvY3VzLGlucHV0W3R5cGU9ImVtYWlsIl06Zm9jdXMsaW5wdXRbdHlwZT0idXJsIl06Zm9jdXMsaW5wdXRbdHlwZT0ic2VhcmNoIl06Zm9jdXMsaW5wdXRbdHlwZT0idGVsIl06Zm9jdXMsaW5wdXRbdHlwZT0iY29sb3IiXTpmb2N1cywudW5lZGl0YWJsZS1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6cmdiYSg4MiwxNjgsMjM2LDAuOCk7b3V0bGluZTowO291dGxpbmU6dGhpbiBkb3R0ZWQgXDk7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgOHB4IHJnYmEoODIsMTY4LDIzNiwwLjYpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDhweCByZ2JhKDgyLDE2OCwyMzYsMC42KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgOHB4IHJnYmEoODIsMTY4LDIzNiwwLjYpfWlucHV0W3R5cGU9InJhZGlvIl0saW5wdXRbdHlwZT0iY2hlY2tib3giXXttYXJnaW46NHB4IDAgMDttYXJnaW4tdG9wOjFweCBcOTsqbWFyZ2luLXRvcDowO2xpbmUtaGVpZ2h0Om5vcm1hbDtjdXJzb3I6cG9pbnRlcn1pbnB1dFt0eXBlPSJmaWxlIl0saW5wdXRbdHlwZT0iaW1hZ2UiXSxpbnB1dFt0eXBlPSJzdWJtaXQiXSxpbnB1dFt0eXBlPSJyZXNldCJdLGlucHV0W3R5cGU9ImJ1dHRvbiJdLGlucHV0W3R5cGU9InJhZGlvIl0saW5wdXRbdHlwZT0iY2hlY2tib3giXXt3aWR0aDphdXRvfXNlbGVjdCxpbnB1dFt0eXBlPSJmaWxlIl17aGVpZ2h0OjMwcHg7Km1hcmdpbi10b3A6NHB4O2xpbmUtaGVpZ2h0OjMwcHh9c2VsZWN0e3dpZHRoOjIyMHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNiYmJ9c2VsZWN0W211bHRpcGxlXSxzZWxlY3Rbc2l6ZV17aGVpZ2h0OmF1dG99c2VsZWN0OmZvY3VzLGlucHV0W3R5cGU9ImZpbGUiXTpmb2N1cyxpbnB1dFt0eXBlPSJyYWRpbyJdOmZvY3VzLGlucHV0W3R5cGU9ImNoZWNrYm94Il06Zm9jdXN7b3V0bGluZTp0aGluIGRvdHRlZCAjMzMzO291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0Oi0ycHh9LnVuZWRpdGFibGUtaW5wdXQsLnVuZWRpdGFibGUtdGV4dGFyZWF7Y29sb3I6Izk5OTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjojZmNmY2ZjO2JvcmRlci1jb2xvcjojY2NjOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjAyNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDI1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDI1KX0udW5lZGl0YWJsZS1pbnB1dHtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfS51bmVkaXRhYmxlLXRleHRhcmVhe3dpZHRoOmF1dG87aGVpZ2h0OmF1dG99aW5wdXQ6LW1vei1wbGFjZWhvbGRlcix0ZXh0YXJlYTotbW96LXBsYWNlaG9sZGVye2NvbG9yOiM5OTl9aW5wdXQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyLHRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojOTk5fWlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyLHRleHRhcmVhOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiM5OTl9LnJhZGlvLC5jaGVja2JveHttaW4taGVpZ2h0OjE4cHg7cGFkZGluZy1sZWZ0OjE4cHh9LnJhZGlvIGlucHV0W3R5cGU9InJhZGlvIl0sLmNoZWNrYm94IGlucHV0W3R5cGU9ImNoZWNrYm94Il17ZmxvYXQ6bGVmdDttYXJnaW4tbGVmdDotMThweH0uY29udHJvbHM+LnJhZGlvOmZpcnN0LWNoaWxkLC5jb250cm9scz4uY2hlY2tib3g6Zmlyc3QtY2hpbGR7cGFkZGluZy10b3A6NXB4fS5yYWRpby5pbmxpbmUsLmNoZWNrYm94LmlubGluZXtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nLXRvcDo1cHg7bWFyZ2luLWJvdHRvbTowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ucmFkaW8uaW5saW5lKy5yYWRpby5pbmxpbmUsLmNoZWNrYm94LmlubGluZSsuY2hlY2tib3guaW5saW5le21hcmdpbi1sZWZ0OjEwcHh9LmlucHV0LW1pbml7d2lkdGg6NjBweH0uaW5wdXQtc21hbGx7d2lkdGg6OTBweH0uaW5wdXQtbWVkaXVte3dpZHRoOjE1MHB4fS5pbnB1dC1sYXJnZXt3aWR0aDoyMTBweH0uaW5wdXQteGxhcmdle3dpZHRoOjI3MHB4fS5pbnB1dC14eGxhcmdle3dpZHRoOjUzMHB4fWlucHV0W2NsYXNzKj0ic3BhbiJdLHNlbGVjdFtjbGFzcyo9InNwYW4iXSx0ZXh0YXJlYVtjbGFzcyo9InNwYW4iXSwudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIGlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgc2VsZWN0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgdGV4dGFyZWFbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCAudW5lZGl0YWJsZS1pbnB1dFtjbGFzcyo9InNwYW4iXXtmbG9hdDpub25lO21hcmdpbi1sZWZ0OjB9LmlucHV0LWFwcGVuZCBpbnB1dFtjbGFzcyo9InNwYW4iXSwuaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5pbnB1dC1wcmVwZW5kIGlucHV0W2NsYXNzKj0ic3BhbiJdLC5pbnB1dC1wcmVwZW5kIC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgaW5wdXRbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCBzZWxlY3RbY2xhc3MqPSJzcGFuIl0sLnJvdy1mbHVpZCB0ZXh0YXJlYVtjbGFzcyo9InNwYW4iXSwucm93LWZsdWlkIC51bmVkaXRhYmxlLWlucHV0W2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgLmlucHV0LXByZXBlbmQgW2NsYXNzKj0ic3BhbiJdLC5yb3ctZmx1aWQgLmlucHV0LWFwcGVuZCBbY2xhc3MqPSJzcGFuIl17ZGlzcGxheTppbmxpbmUtYmxvY2t9aW5wdXQsdGV4dGFyZWEsLnVuZWRpdGFibGUtaW5wdXR7bWFyZ2luLWxlZnQ6MH0uY29udHJvbHMtcm93IFtjbGFzcyo9InNwYW4iXStbY2xhc3MqPSJzcGFuIl17bWFyZ2luLWxlZnQ6MjBweH1pbnB1dC5zcGFuMTIsdGV4dGFyZWEuc3BhbjEyLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMnt3aWR0aDo5MjZweH1pbnB1dC5zcGFuMTEsdGV4dGFyZWEuc3BhbjExLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMXt3aWR0aDo4NDZweH1pbnB1dC5zcGFuMTAsdGV4dGFyZWEuc3BhbjEwLC51bmVkaXRhYmxlLWlucHV0LnNwYW4xMHt3aWR0aDo3NjZweH1pbnB1dC5zcGFuOSx0ZXh0YXJlYS5zcGFuOSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuOXt3aWR0aDo2ODZweH1pbnB1dC5zcGFuOCx0ZXh0YXJlYS5zcGFuOCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuOHt3aWR0aDo2MDZweH1pbnB1dC5zcGFuNyx0ZXh0YXJlYS5zcGFuNywudW5lZGl0YWJsZS1pbnB1dC5zcGFuN3t3aWR0aDo1MjZweH1pbnB1dC5zcGFuNix0ZXh0YXJlYS5zcGFuNiwudW5lZGl0YWJsZS1pbnB1dC5zcGFuNnt3aWR0aDo0NDZweH1pbnB1dC5zcGFuNSx0ZXh0YXJlYS5zcGFuNSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuNXt3aWR0aDozNjZweH1pbnB1dC5zcGFuNCx0ZXh0YXJlYS5zcGFuNCwudW5lZGl0YWJsZS1pbnB1dC5zcGFuNHt3aWR0aDoyODZweH1pbnB1dC5zcGFuMyx0ZXh0YXJlYS5zcGFuMywudW5lZGl0YWJsZS1pbnB1dC5zcGFuM3t3aWR0aDoyMDZweH1pbnB1dC5zcGFuMix0ZXh0YXJlYS5zcGFuMiwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMnt3aWR0aDoxMjZweH1pbnB1dC5zcGFuMSx0ZXh0YXJlYS5zcGFuMSwudW5lZGl0YWJsZS1pbnB1dC5zcGFuMXt3aWR0aDo0NnB4fS5jb250cm9scy1yb3d7Knpvb206MX0uY29udHJvbHMtcm93OmJlZm9yZSwuY29udHJvbHMtcm93OmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5jb250cm9scy1yb3c6YWZ0ZXJ7Y2xlYXI6Ym90aH0uY29udHJvbHMtcm93IFtjbGFzcyo9InNwYW4iXXtmbG9hdDpsZWZ0fWlucHV0W2Rpc2FibGVkXSxzZWxlY3RbZGlzYWJsZWRdLHRleHRhcmVhW2Rpc2FibGVkXSxpbnB1dFtyZWFkb25seV0sc2VsZWN0W3JlYWRvbmx5XSx0ZXh0YXJlYVtyZWFkb25seV17Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6I2VlZX1pbnB1dFt0eXBlPSJyYWRpbyJdW2Rpc2FibGVkXSxpbnB1dFt0eXBlPSJjaGVja2JveCJdW2Rpc2FibGVkXSxpbnB1dFt0eXBlPSJyYWRpbyJdW3JlYWRvbmx5XSxpbnB1dFt0eXBlPSJjaGVja2JveCJdW3JlYWRvbmx5XXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5jb250cm9sLWdyb3VwLndhcm5pbmc+bGFiZWwsLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuaGVscC1ibG9jaywuY29udHJvbC1ncm91cC53YXJuaW5nIC5oZWxwLWlubGluZXtjb2xvcjojYzA5ODUzfS5jb250cm9sLWdyb3VwLndhcm5pbmcgLmNoZWNrYm94LC5jb250cm9sLWdyb3VwLndhcm5pbmcgLnJhZGlvLC5jb250cm9sLWdyb3VwLndhcm5pbmcgaW5wdXQsLmNvbnRyb2wtZ3JvdXAud2FybmluZyBzZWxlY3QsLmNvbnRyb2wtZ3JvdXAud2FybmluZyB0ZXh0YXJlYXtjb2xvcjojYzA5ODUzO2JvcmRlci1jb2xvcjojYzA5ODUzOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KX0uY29udHJvbC1ncm91cC53YXJuaW5nIC5jaGVja2JveDpmb2N1cywuY29udHJvbC1ncm91cC53YXJuaW5nIC5yYWRpbzpmb2N1cywuY29udHJvbC1ncm91cC53YXJuaW5nIGlucHV0OmZvY3VzLC5jb250cm9sLWdyb3VwLndhcm5pbmcgc2VsZWN0OmZvY3VzLC5jb250cm9sLWdyb3VwLndhcm5pbmcgdGV4dGFyZWE6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNhNDdlM2M7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICNkYmM1OWU7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICNkYmM1OWU7Ym94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSksMCAwIDZweCAjZGJjNTllfS5jb250cm9sLWdyb3VwLndhcm5pbmcgLmlucHV0LXByZXBlbmQgLmFkZC1vbiwuY29udHJvbC1ncm91cC53YXJuaW5nIC5pbnB1dC1hcHBlbmQgLmFkZC1vbntjb2xvcjojYzA5ODUzO2JhY2tncm91bmQtY29sb3I6I2ZjZjhlMztib3JkZXItY29sb3I6I2MwOTg1M30uY29udHJvbC1ncm91cC5lcnJvcj5sYWJlbCwuY29udHJvbC1ncm91cC5lcnJvciAuaGVscC1ibG9jaywuY29udHJvbC1ncm91cC5lcnJvciAuaGVscC1pbmxpbmV7Y29sb3I6I2I5NGE0OH0uY29udHJvbC1ncm91cC5lcnJvciAuY2hlY2tib3gsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLnJhZGlvLC5jb250cm9sLWdyb3VwLmVycm9yIGlucHV0LC5jb250cm9sLWdyb3VwLmVycm9yIHNlbGVjdCwuY29udHJvbC1ncm91cC5lcnJvciB0ZXh0YXJlYXtjb2xvcjojYjk0YTQ4O2JvcmRlci1jb2xvcjojYjk0YTQ4Oy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA3NSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KX0uY29udHJvbC1ncm91cC5lcnJvciAuY2hlY2tib3g6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLnJhZGlvOmZvY3VzLC5jb250cm9sLWdyb3VwLmVycm9yIGlucHV0OmZvY3VzLC5jb250cm9sLWdyb3VwLmVycm9yIHNlbGVjdDpmb2N1cywuY29udHJvbC1ncm91cC5lcnJvciB0ZXh0YXJlYTpmb2N1c3tib3JkZXItY29sb3I6Izk1M2IzOTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggI2Q1OTM5MjstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggI2Q1OTM5Mjtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICNkNTkzOTJ9LmNvbnRyb2wtZ3JvdXAuZXJyb3IgLmlucHV0LXByZXBlbmQgLmFkZC1vbiwuY29udHJvbC1ncm91cC5lcnJvciAuaW5wdXQtYXBwZW5kIC5hZGQtb257Y29sb3I6I2I5NGE0ODtiYWNrZ3JvdW5kLWNvbG9yOiNmMmRlZGU7Ym9yZGVyLWNvbG9yOiNiOTRhNDh9LmNvbnRyb2wtZ3JvdXAuc3VjY2Vzcz5sYWJlbCwuY29udHJvbC1ncm91cC5zdWNjZXNzIC5oZWxwLWJsb2NrLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmhlbHAtaW5saW5le2NvbG9yOiM0Njg4NDd9LmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuY2hlY2tib3gsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAucmFkaW8sLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBpbnB1dCwuY29udHJvbC1ncm91cC5zdWNjZXNzIHNlbGVjdCwuY29udHJvbC1ncm91cC5zdWNjZXNzIHRleHRhcmVhe2NvbG9yOiM0Njg4NDc7Ym9yZGVyLWNvbG9yOiM0Njg4NDc7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpfS5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmNoZWNrYm94OmZvY3VzLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLnJhZGlvOmZvY3VzLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgaW5wdXQ6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyBzZWxlY3Q6Zm9jdXMsLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyB0ZXh0YXJlYTpmb2N1c3tib3JkZXItY29sb3I6IzM1NjYzNTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggIzdhYmE3YjstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsMC4wNzUpLDAgMCA2cHggIzdhYmE3Yjtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDc1KSwwIDAgNnB4ICM3YWJhN2J9LmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuaW5wdXQtcHJlcGVuZCAuYWRkLW9uLC5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLmlucHV0LWFwcGVuZCAuYWRkLW9ue2NvbG9yOiM0Njg4NDc7YmFja2dyb3VuZC1jb2xvcjojZGZmMGQ4O2JvcmRlci1jb2xvcjojNDY4ODQ3fWlucHV0OmZvY3VzOnJlcXVpcmVkOmludmFsaWQsdGV4dGFyZWE6Zm9jdXM6cmVxdWlyZWQ6aW52YWxpZCxzZWxlY3Q6Zm9jdXM6cmVxdWlyZWQ6aW52YWxpZHtjb2xvcjojYjk0YTQ4O2JvcmRlci1jb2xvcjojZWU1ZjVifWlucHV0OmZvY3VzOnJlcXVpcmVkOmludmFsaWQ6Zm9jdXMsdGV4dGFyZWE6Zm9jdXM6cmVxdWlyZWQ6aW52YWxpZDpmb2N1cyxzZWxlY3Q6Zm9jdXM6cmVxdWlyZWQ6aW52YWxpZDpmb2N1c3tib3JkZXItY29sb3I6I2U5MzIyZDstd2Via2l0LWJveC1zaGFkb3c6MCAwIDZweCAjZjhiOWI3Oy1tb3otYm94LXNoYWRvdzowIDAgNnB4ICNmOGI5Yjc7Ym94LXNoYWRvdzowIDAgNnB4ICNmOGI5Yjd9LmZvcm0tYWN0aW9uc3twYWRkaW5nOjE5cHggMjBweCAyMHB4O21hcmdpbi10b3A6MjBweDttYXJnaW4tYm90dG9tOjIwcHg7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTU7Knpvb206MX0uZm9ybS1hY3Rpb25zOmJlZm9yZSwuZm9ybS1hY3Rpb25zOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5mb3JtLWFjdGlvbnM6YWZ0ZXJ7Y2xlYXI6Ym90aH0uaGVscC1ibG9jaywuaGVscC1pbmxpbmV7Y29sb3I6IzU5NTk1OX0uaGVscC1ibG9ja3tkaXNwbGF5OmJsb2NrO21hcmdpbi1ib3R0b206MTBweH0uaGVscC1pbmxpbmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO3BhZGRpbmctbGVmdDo1cHg7dmVydGljYWwtYWxpZ246bWlkZGxlOyp6b29tOjF9LmlucHV0LWFwcGVuZCwuaW5wdXQtcHJlcGVuZHttYXJnaW4tYm90dG9tOjVweDtmb250LXNpemU6MDt3aGl0ZS1zcGFjZTpub3dyYXB9LmlucHV0LWFwcGVuZCBpbnB1dCwuaW5wdXQtcHJlcGVuZCBpbnB1dCwuaW5wdXQtYXBwZW5kIHNlbGVjdCwuaW5wdXQtcHJlcGVuZCBzZWxlY3QsLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dCwuaW5wdXQtcHJlcGVuZCAudW5lZGl0YWJsZS1pbnB1dHtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW4tYm90dG9tOjA7Km1hcmdpbi1sZWZ0OjA7Zm9udC1zaXplOjE0cHg7dmVydGljYWwtYWxpZ246dG9wOy13ZWJraXQtYm9yZGVyLXJhZGl1czowIDNweCAzcHggMDstbW96LWJvcmRlci1yYWRpdXM6MCAzcHggM3B4IDA7Ym9yZGVyLXJhZGl1czowIDNweCAzcHggMH0uaW5wdXQtYXBwZW5kIGlucHV0OmZvY3VzLC5pbnB1dC1wcmVwZW5kIGlucHV0OmZvY3VzLC5pbnB1dC1hcHBlbmQgc2VsZWN0OmZvY3VzLC5pbnB1dC1wcmVwZW5kIHNlbGVjdDpmb2N1cywuaW5wdXQtYXBwZW5kIC51bmVkaXRhYmxlLWlucHV0OmZvY3VzLC5pbnB1dC1wcmVwZW5kIC51bmVkaXRhYmxlLWlucHV0OmZvY3Vze3otaW5kZXg6Mn0uaW5wdXQtYXBwZW5kIC5hZGQtb24sLmlucHV0LXByZXBlbmQgLmFkZC1vbntkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDphdXRvO2hlaWdodDoyMHB4O21pbi13aWR0aDoxNnB4O3BhZGRpbmc6NHB4IDVweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDpub3JtYWw7bGluZS1oZWlnaHQ6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXNoYWRvdzowIDFweCAwICNmZmY7YmFja2dyb3VuZC1jb2xvcjojZWVlO2JvcmRlcjoxcHggc29saWQgI2NjY30uaW5wdXQtYXBwZW5kIC5hZGQtb24sLmlucHV0LXByZXBlbmQgLmFkZC1vbiwuaW5wdXQtYXBwZW5kIC5idG4sLmlucHV0LXByZXBlbmQgLmJ0bnttYXJnaW4tbGVmdDotMXB4O3ZlcnRpY2FsLWFsaWduOnRvcDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmlucHV0LWFwcGVuZCAuYWN0aXZlLC5pbnB1dC1wcmVwZW5kIC5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojYTlkYmE5O2JvcmRlci1jb2xvcjojNDZhNTQ2fS5pbnB1dC1wcmVwZW5kIC5hZGQtb24sLmlucHV0LXByZXBlbmQgLmJ0bnttYXJnaW4tcmlnaHQ6LTFweH0uaW5wdXQtcHJlcGVuZCAuYWRkLW9uOmZpcnN0LWNoaWxkLC5pbnB1dC1wcmVwZW5kIC5idG46Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweCAwIDAgM3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHggMCAwIDNweDtib3JkZXItcmFkaXVzOjNweCAwIDAgM3B4fS5pbnB1dC1hcHBlbmQgaW5wdXQsLmlucHV0LWFwcGVuZCBzZWxlY3QsLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dHstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4IDAgMCAzcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweCAwIDAgM3B4O2JvcmRlci1yYWRpdXM6M3B4IDAgMCAzcHh9LmlucHV0LWFwcGVuZCAuYWRkLW9uOmxhc3QtY2hpbGQsLmlucHV0LWFwcGVuZCAuYnRuOmxhc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgM3B4IDNweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDNweCAzcHggMDtib3JkZXItcmFkaXVzOjAgM3B4IDNweCAwfS5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCBpbnB1dCwuaW5wdXQtcHJlcGVuZC5pbnB1dC1hcHBlbmQgc2VsZWN0LC5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAudW5lZGl0YWJsZS1pbnB1dHstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9LmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC5hZGQtb246Zmlyc3QtY2hpbGQsLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC5idG46Zmlyc3QtY2hpbGR7bWFyZ2luLXJpZ2h0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweCAwIDAgM3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHggMCAwIDNweDtib3JkZXItcmFkaXVzOjNweCAwIDAgM3B4fS5pbnB1dC1wcmVwZW5kLmlucHV0LWFwcGVuZCAuYWRkLW9uOmxhc3QtY2hpbGQsLmlucHV0LXByZXBlbmQuaW5wdXQtYXBwZW5kIC5idG46bGFzdC1jaGlsZHttYXJnaW4tbGVmdDotMXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowIDNweCAzcHggMDstbW96LWJvcmRlci1yYWRpdXM6MCAzcHggM3B4IDA7Ym9yZGVyLXJhZGl1czowIDNweCAzcHggMH1pbnB1dC5zZWFyY2gtcXVlcnl7cGFkZGluZy1yaWdodDoxNHB4O3BhZGRpbmctcmlnaHQ6NHB4IFw5O3BhZGRpbmctbGVmdDoxNHB4O3BhZGRpbmctbGVmdDo0cHggXDk7bWFyZ2luLWJvdHRvbTowOy13ZWJraXQtYm9yZGVyLXJhZGl1czoxNXB4Oy1tb3otYm9yZGVyLXJhZGl1czoxNXB4O2JvcmRlci1yYWRpdXM6MTVweH0uZm9ybS1zZWFyY2ggLmlucHV0LWFwcGVuZCAuc2VhcmNoLXF1ZXJ5LC5mb3JtLXNlYXJjaCAuaW5wdXQtcHJlcGVuZCAuc2VhcmNoLXF1ZXJ5ey13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0uZm9ybS1zZWFyY2ggLmlucHV0LWFwcGVuZCAuc2VhcmNoLXF1ZXJ5ey13ZWJraXQtYm9yZGVyLXJhZGl1czoxNHB4IDAgMCAxNHB4Oy1tb3otYm9yZGVyLXJhZGl1czoxNHB4IDAgMCAxNHB4O2JvcmRlci1yYWRpdXM6MTRweCAwIDAgMTRweH0uZm9ybS1zZWFyY2ggLmlucHV0LWFwcGVuZCAuYnRuey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDE0cHggMTRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDE0cHggMTRweCAwO2JvcmRlci1yYWRpdXM6MCAxNHB4IDE0cHggMH0uZm9ybS1zZWFyY2ggLmlucHV0LXByZXBlbmQgLnNlYXJjaC1xdWVyeXstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAxNHB4IDE0cHggMDstbW96LWJvcmRlci1yYWRpdXM6MCAxNHB4IDE0cHggMDtib3JkZXItcmFkaXVzOjAgMTRweCAxNHB4IDB9LmZvcm0tc2VhcmNoIC5pbnB1dC1wcmVwZW5kIC5idG57LXdlYmtpdC1ib3JkZXItcmFkaXVzOjE0cHggMCAwIDE0cHg7LW1vei1ib3JkZXItcmFkaXVzOjE0cHggMCAwIDE0cHg7Ym9yZGVyLXJhZGl1czoxNHB4IDAgMCAxNHB4fS5mb3JtLXNlYXJjaCBpbnB1dCwuZm9ybS1pbmxpbmUgaW5wdXQsLmZvcm0taG9yaXpvbnRhbCBpbnB1dCwuZm9ybS1zZWFyY2ggdGV4dGFyZWEsLmZvcm0taW5saW5lIHRleHRhcmVhLC5mb3JtLWhvcml6b250YWwgdGV4dGFyZWEsLmZvcm0tc2VhcmNoIHNlbGVjdCwuZm9ybS1pbmxpbmUgc2VsZWN0LC5mb3JtLWhvcml6b250YWwgc2VsZWN0LC5mb3JtLXNlYXJjaCAuaGVscC1pbmxpbmUsLmZvcm0taW5saW5lIC5oZWxwLWlubGluZSwuZm9ybS1ob3Jpem9udGFsIC5oZWxwLWlubGluZSwuZm9ybS1zZWFyY2ggLnVuZWRpdGFibGUtaW5wdXQsLmZvcm0taW5saW5lIC51bmVkaXRhYmxlLWlucHV0LC5mb3JtLWhvcml6b250YWwgLnVuZWRpdGFibGUtaW5wdXQsLmZvcm0tc2VhcmNoIC5pbnB1dC1wcmVwZW5kLC5mb3JtLWlubGluZSAuaW5wdXQtcHJlcGVuZCwuZm9ybS1ob3Jpem9udGFsIC5pbnB1dC1wcmVwZW5kLC5mb3JtLXNlYXJjaCAuaW5wdXQtYXBwZW5kLC5mb3JtLWlubGluZSAuaW5wdXQtYXBwZW5kLC5mb3JtLWhvcml6b250YWwgLmlucHV0LWFwcGVuZHtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7bWFyZ2luLWJvdHRvbTowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTsqem9vbToxfS5mb3JtLXNlYXJjaCAuaGlkZSwuZm9ybS1pbmxpbmUgLmhpZGUsLmZvcm0taG9yaXpvbnRhbCAuaGlkZXtkaXNwbGF5Om5vbmV9LmZvcm0tc2VhcmNoIGxhYmVsLC5mb3JtLWlubGluZSBsYWJlbCwuZm9ybS1zZWFyY2ggLmJ0bi1ncm91cCwuZm9ybS1pbmxpbmUgLmJ0bi1ncm91cHtkaXNwbGF5OmlubGluZS1ibG9ja30uZm9ybS1zZWFyY2ggLmlucHV0LWFwcGVuZCwuZm9ybS1pbmxpbmUgLmlucHV0LWFwcGVuZCwuZm9ybS1zZWFyY2ggLmlucHV0LXByZXBlbmQsLmZvcm0taW5saW5lIC5pbnB1dC1wcmVwZW5ke21hcmdpbi1ib3R0b206MH0uZm9ybS1zZWFyY2ggLnJhZGlvLC5mb3JtLXNlYXJjaCAuY2hlY2tib3gsLmZvcm0taW5saW5lIC5yYWRpbywuZm9ybS1pbmxpbmUgLmNoZWNrYm94e3BhZGRpbmctbGVmdDowO21hcmdpbi1ib3R0b206MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmZvcm0tc2VhcmNoIC5yYWRpbyBpbnB1dFt0eXBlPSJyYWRpbyJdLC5mb3JtLXNlYXJjaCAuY2hlY2tib3ggaW5wdXRbdHlwZT0iY2hlY2tib3giXSwuZm9ybS1pbmxpbmUgLnJhZGlvIGlucHV0W3R5cGU9InJhZGlvIl0sLmZvcm0taW5saW5lIC5jaGVja2JveCBpbnB1dFt0eXBlPSJjaGVja2JveCJde2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0OjNweDttYXJnaW4tbGVmdDowfS5jb250cm9sLWdyb3Vwe21hcmdpbi1ib3R0b206MTBweH1sZWdlbmQrLmNvbnRyb2wtZ3JvdXB7bWFyZ2luLXRvcDoyMHB4Oy13ZWJraXQtbWFyZ2luLXRvcC1jb2xsYXBzZTpzZXBhcmF0ZX0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sLWdyb3Vwe21hcmdpbi1ib3R0b206MjBweDsqem9vbToxfS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtZ3JvdXA6YmVmb3JlLC5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtZ3JvdXA6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtsaW5lLWhlaWdodDowO2NvbnRlbnQ6IiJ9LmZvcm0taG9yaXpvbnRhbCAuY29udHJvbC1ncm91cDphZnRlcntjbGVhcjpib3RofS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2wtbGFiZWx7ZmxvYXQ6bGVmdDt3aWR0aDoxNDBweDtwYWRkaW5nLXRvcDo1cHg7dGV4dC1hbGlnbjpyaWdodH0uZm9ybS1ob3Jpem9udGFsIC5jb250cm9sc3sqZGlzcGxheTppbmxpbmUtYmxvY2s7KnBhZGRpbmctbGVmdDoyMHB4O21hcmdpbi1sZWZ0OjE2MHB4OyptYXJnaW4tbGVmdDowfS5mb3JtLWhvcml6b250YWwgLmNvbnRyb2xzOmZpcnN0LWNoaWxkeypwYWRkaW5nLWxlZnQ6MTYwcHh9LmZvcm0taG9yaXpvbnRhbCAuaGVscC1ibG9ja3ttYXJnaW4tdG9wOjEwcHg7bWFyZ2luLWJvdHRvbTowfS5mb3JtLWhvcml6b250YWwgLmZvcm0tYWN0aW9uc3twYWRkaW5nLWxlZnQ6MTYwcHh9dGFibGV7bWF4LXdpZHRoOjEwMCU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH0udGFibGV7d2lkdGg6MTAwJTttYXJnaW4tYm90dG9tOjIwcHh9LnRhYmxlIHRoLC50YWJsZSB0ZHtwYWRkaW5nOjhweDtsaW5lLWhlaWdodDoyMHB4O3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbjp0b3A7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZH0udGFibGUgdGh7Zm9udC13ZWlnaHQ6Ym9sZH0udGFibGUgdGhlYWQgdGh7dmVydGljYWwtYWxpZ246Ym90dG9tfS50YWJsZSBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZSBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRkLC50YWJsZSBjb2xncm91cCt0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUgY29sZ3JvdXArdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGQsLnRhYmxlIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZSB0aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0ZHtib3JkZXItdG9wOjB9LnRhYmxlIHRib2R5K3Rib2R5e2JvcmRlci10b3A6MnB4IHNvbGlkICNkZGR9LnRhYmxlLWNvbmRlbnNlZCB0aCwudGFibGUtY29uZGVuc2VkIHRke3BhZGRpbmc6NHB4IDVweH0udGFibGUtYm9yZGVyZWR7Ym9yZGVyOjFweCBzb2xpZCAjZGRkO2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTsqYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS50YWJsZS1ib3JkZXJlZCB0aCwudGFibGUtYm9yZGVyZWQgdGR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNkZGR9LnRhYmxlLWJvcmRlcmVkIGNhcHRpb24rdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLWJvcmRlcmVkIGNhcHRpb24rdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLWJvcmRlcmVkIGNhcHRpb24rdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQsLnRhYmxlLWJvcmRlcmVkIGNvbGdyb3VwK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCBjb2xncm91cCt0Ym9keSB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQsLnRhYmxlLWJvcmRlcmVkIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRoLC50YWJsZS1ib3JkZXJlZCB0Ym9keTpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0aCwudGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDowfS50YWJsZS1ib3JkZXJlZCB0aGVhZDpmaXJzdC1jaGlsZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6Zmlyc3QtY2hpbGQgdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo0cHh9LnRhYmxlLWJvcmRlcmVkIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRib2R5OmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRkOmxhc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDo0cHh9LnRhYmxlLWJvcmRlcmVkIHRoZWFkOmxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCB0Zm9vdDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMCAwIDRweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDAgNHB4O2JvcmRlci1yYWRpdXM6MCAwIDAgNHB4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NHB4fS50YWJsZS1ib3JkZXJlZCB0aGVhZDpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgdGJvZHk6bGFzdC1jaGlsZCB0cjpsYXN0LWNoaWxkIHRkOmxhc3QtY2hpbGQsLnRhYmxlLWJvcmRlcmVkIHRmb290Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NHB4fS50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCBjYXB0aW9uK3Rib2R5IHRyOmZpcnN0LWNoaWxkIHRkOmZpcnN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCBjb2xncm91cCt0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY29sZ3JvdXArdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo0cHh9LnRhYmxlLWJvcmRlcmVkIGNhcHRpb24rdGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6bGFzdC1jaGlsZCwudGFibGUtYm9yZGVyZWQgY2FwdGlvbit0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCBjb2xncm91cCt0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLC50YWJsZS1ib3JkZXJlZCBjb2xncm91cCt0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZDpsYXN0LWNoaWxkey13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yaWdodC10b3BsZWZ0OjRweH0udGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtY2hpbGQob2RkKSB0ZCwudGFibGUtc3RyaXBlZCB0Ym9keSB0cjpudGgtY2hpbGQob2RkKSB0aHtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjl9LnRhYmxlLWhvdmVyIHRib2R5IHRyOmhvdmVyIHRkLC50YWJsZS1ob3ZlciB0Ym9keSB0cjpob3ZlciB0aHtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjV9dGFibGUgW2NsYXNzKj1zcGFuXSwucm93LWZsdWlkIHRhYmxlIFtjbGFzcyo9c3Bhbl17ZGlzcGxheTp0YWJsZS1jZWxsO2Zsb2F0Om5vbmU7bWFyZ2luLWxlZnQ6MH10YWJsZSAuc3BhbjF7ZmxvYXQ6bm9uZTt3aWR0aDo0NHB4O21hcmdpbi1sZWZ0OjB9dGFibGUgLnNwYW4ye2Zsb2F0Om5vbmU7d2lkdGg6MTI0cHg7bWFyZ2luLWxlZnQ6MH10YWJsZSAuc3BhbjN7ZmxvYXQ6bm9uZTt3aWR0aDoyMDRweDttYXJnaW4tbGVmdDowfXRhYmxlIC5zcGFuNHtmbG9hdDpub25lO3dpZHRoOjI4NHB4O21hcmdpbi1sZWZ0OjB9dGFibGUgLnNwYW41e2Zsb2F0Om5vbmU7d2lkdGg6MzY0cHg7bWFyZ2luLWxlZnQ6MH10YWJsZSAuc3BhbjZ7ZmxvYXQ6bm9uZTt3aWR0aDo0NDRweDttYXJnaW4tbGVmdDowfXRhYmxlIC5zcGFuN3tmbG9hdDpub25lO3dpZHRoOjUyNHB4O21hcmdpbi1sZWZ0OjB9dGFibGUgLnNwYW44e2Zsb2F0Om5vbmU7d2lkdGg6NjA0cHg7bWFyZ2luLWxlZnQ6MH10YWJsZSAuc3Bhbjl7ZmxvYXQ6bm9uZTt3aWR0aDo2ODRweDttYXJnaW4tbGVmdDowfXRhYmxlIC5zcGFuMTB7ZmxvYXQ6bm9uZTt3aWR0aDo3NjRweDttYXJnaW4tbGVmdDowfXRhYmxlIC5zcGFuMTF7ZmxvYXQ6bm9uZTt3aWR0aDo4NDRweDttYXJnaW4tbGVmdDowfXRhYmxlIC5zcGFuMTJ7ZmxvYXQ6bm9uZTt3aWR0aDo5MjRweDttYXJnaW4tbGVmdDowfXRhYmxlIC5zcGFuMTN7ZmxvYXQ6bm9uZTt3aWR0aDoxMDA0cHg7bWFyZ2luLWxlZnQ6MH10YWJsZSAuc3BhbjE0e2Zsb2F0Om5vbmU7d2lkdGg6MTA4NHB4O21hcmdpbi1sZWZ0OjB9dGFibGUgLnNwYW4xNXtmbG9hdDpub25lO3dpZHRoOjExNjRweDttYXJnaW4tbGVmdDowfXRhYmxlIC5zcGFuMTZ7ZmxvYXQ6bm9uZTt3aWR0aDoxMjQ0cHg7bWFyZ2luLWxlZnQ6MH10YWJsZSAuc3BhbjE3e2Zsb2F0Om5vbmU7d2lkdGg6MTMyNHB4O21hcmdpbi1sZWZ0OjB9dGFibGUgLnNwYW4xOHtmbG9hdDpub25lO3dpZHRoOjE0MDRweDttYXJnaW4tbGVmdDowfXRhYmxlIC5zcGFuMTl7ZmxvYXQ6bm9uZTt3aWR0aDoxNDg0cHg7bWFyZ2luLWxlZnQ6MH10YWJsZSAuc3BhbjIwe2Zsb2F0Om5vbmU7d2lkdGg6MTU2NHB4O21hcmdpbi1sZWZ0OjB9dGFibGUgLnNwYW4yMXtmbG9hdDpub25lO3dpZHRoOjE2NDRweDttYXJnaW4tbGVmdDowfXRhYmxlIC5zcGFuMjJ7ZmxvYXQ6bm9uZTt3aWR0aDoxNzI0cHg7bWFyZ2luLWxlZnQ6MH10YWJsZSAuc3BhbjIze2Zsb2F0Om5vbmU7d2lkdGg6MTgwNHB4O21hcmdpbi1sZWZ0OjB9dGFibGUgLnNwYW4yNHtmbG9hdDpub25lO3dpZHRoOjE4ODRweDttYXJnaW4tbGVmdDowfS50YWJsZSB0Ym9keSB0ci5zdWNjZXNzIHRke2JhY2tncm91bmQtY29sb3I6I2RmZjBkOH0udGFibGUgdGJvZHkgdHIuZXJyb3IgdGR7YmFja2dyb3VuZC1jb2xvcjojZjJkZWRlfS50YWJsZSB0Ym9keSB0ci5pbmZvIHRke2JhY2tncm91bmQtY29sb3I6I2Q5ZWRmN31bY2xhc3NePSJpY29uLSJdLFtjbGFzcyo9IiBpY29uLSJde2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjE0cHg7aGVpZ2h0OjE0cHg7bWFyZ2luLXRvcDoxcHg7Km1hcmdpbi1yaWdodDouM2VtO2xpbmUtaGVpZ2h0OjE0cHg7dmVydGljYWwtYWxpZ246dGV4dC10b3A7YmFja2dyb3VuZC1pbWFnZTp1cmwoIi4uL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy5wbmciKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjE0cHggMTRweDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9Lmljb24td2hpdGUsLm5hdj4uYWN0aXZlPmE+W2NsYXNzXj0iaWNvbi0iXSwubmF2Pi5hY3RpdmU+YT5bY2xhc3MqPSIgaWNvbi0iXSwuZHJvcGRvd24tbWVudT5saT5hOmhvdmVyPltjbGFzc149Imljb24tIl0sLmRyb3Bkb3duLW1lbnU+bGk+YTpob3Zlcj5bY2xhc3MqPSIgaWNvbi0iXSwuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE+W2NsYXNzXj0iaWNvbi0iXSwuZHJvcGRvd24tbWVudT4uYWN0aXZlPmE+W2NsYXNzKj0iIGljb24tIl17YmFja2dyb3VuZC1pbWFnZTp1cmwoIi4uL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy13aGl0ZS5wbmciKX0uaWNvbi1nbGFzc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH0uaWNvbi1tdXNpY3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IDB9Lmljb24tc2VhcmNoe2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggMH0uaWNvbi1lbnZlbG9wZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi03MnB4IDB9Lmljb24taGVhcnR7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAwfS5pY29uLXN0YXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggMH0uaWNvbi1zdGFyLWVtcHR5e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IDB9Lmljb24tdXNlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjhweCAwfS5pY29uLWZpbG17YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggMH0uaWNvbi10aC1sYXJnZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMTZweCAwfS5pY29uLXRoe2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IDB9Lmljb24tdGgtbGlzdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAwfS5pY29uLW9re2JhY2tncm91bmQtcG9zaXRpb246LTI4OHB4IDB9Lmljb24tcmVtb3Zle2JhY2tncm91bmQtcG9zaXRpb246LTMxMnB4IDB9Lmljb24tem9vbS1pbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAwfS5pY29uLXpvb20tb3V0e2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IDB9Lmljb24tb2Zme2JhY2tncm91bmQtcG9zaXRpb246LTM4NHB4IDB9Lmljb24tc2lnbmFse2JhY2tncm91bmQtcG9zaXRpb246LTQwOHB4IDB9Lmljb24tY29ne2JhY2tncm91bmQtcG9zaXRpb246LTQzMnB4IDB9Lmljb24tdHJhc2h7YmFja2dyb3VuZC1wb3NpdGlvbjotNDU2cHggMH0uaWNvbi1ob21le2JhY2tncm91bmQtcG9zaXRpb246MCAtMjRweH0uaWNvbi1maWxle2JhY2tncm91bmQtcG9zaXRpb246LTI0cHggLTI0cHh9Lmljb24tdGltZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0yNHB4fS5pY29uLXJvYWR7YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAtMjRweH0uaWNvbi1kb3dubG9hZC1hbHR7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMjRweH0uaWNvbi1kb3dubG9hZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtMjRweH0uaWNvbi11cGxvYWR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTI0cHh9Lmljb24taW5ib3h7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY4cHggLTI0cHh9Lmljb24tcGxheS1jaXJjbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTI0cHh9Lmljb24tcmVwZWF0e2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IC0yNHB4fS5pY29uLXJlZnJlc2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTI0cHh9Lmljb24tbGlzdC1hbHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0cHggLTI0cHh9Lmljb24tbG9ja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODdweCAtMjRweH0uaWNvbi1mbGFne2JhY2tncm91bmQtcG9zaXRpb246LTMxMnB4IC0yNHB4fS5pY29uLWhlYWRwaG9uZXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggLTI0cHh9Lmljb24tdm9sdW1lLW9mZntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNjBweCAtMjRweH0uaWNvbi12b2x1bWUtZG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRweCAtMjRweH0uaWNvbi12b2x1bWUtdXB7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggLTI0cHh9Lmljb24tcXJjb2Rle2JhY2tncm91bmQtcG9zaXRpb246LTQzMnB4IC0yNHB4fS5pY29uLWJhcmNvZGV7YmFja2dyb3VuZC1wb3NpdGlvbjotNDU2cHggLTI0cHh9Lmljb24tdGFne2JhY2tncm91bmQtcG9zaXRpb246MCAtNDhweH0uaWNvbi10YWdze2JhY2tncm91bmQtcG9zaXRpb246LTI1cHggLTQ4cHh9Lmljb24tYm9va3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC00OHB4fS5pY29uLWJvb2ttYXJre2JhY2tncm91bmQtcG9zaXRpb246LTcycHggLTQ4cHh9Lmljb24tcHJpbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtNDhweH0uaWNvbi1jYW1lcmF7YmFja2dyb3VuZC1wb3NpdGlvbjotMTIwcHggLTQ4cHh9Lmljb24tZm9udHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtNDhweH0uaWNvbi1ib2xke2JhY2tncm91bmQtcG9zaXRpb246LTE2N3B4IC00OHB4fS5pY29uLWl0YWxpY3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtNDhweH0uaWNvbi10ZXh0LWhlaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMTZweCAtNDhweH0uaWNvbi10ZXh0LXdpZHRoe2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC00OHB4fS5pY29uLWFsaWduLWxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0cHggLTQ4cHh9Lmljb24tYWxpZ24tY2VudGVye2JhY2tncm91bmQtcG9zaXRpb246LTI4OHB4IC00OHB4fS5pY29uLWFsaWduLXJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTMxMnB4IC00OHB4fS5pY29uLWFsaWduLWp1c3RpZnl7YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggLTQ4cHh9Lmljb24tbGlzdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNjBweCAtNDhweH0uaWNvbi1pbmRlbnQtbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zODRweCAtNDhweH0uaWNvbi1pbmRlbnQtcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggLTQ4cHh9Lmljb24tZmFjZXRpbWUtdmlkZW97YmFja2dyb3VuZC1wb3NpdGlvbjotNDMycHggLTQ4cHh9Lmljb24tcGljdHVyZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtNDhweH0uaWNvbi1wZW5jaWx7YmFja2dyb3VuZC1wb3NpdGlvbjowIC03MnB4fS5pY29uLW1hcC1tYXJrZXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMjRweCAtNzJweH0uaWNvbi1hZGp1c3R7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtNzJweH0uaWNvbi10aW50e2JhY2tncm91bmQtcG9zaXRpb246LTcycHggLTcycHh9Lmljb24tZWRpdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC03MnB4fS5pY29uLXNoYXJle2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC03MnB4fS5pY29uLWNoZWNre2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC03MnB4fS5pY29uLW1vdmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY4cHggLTcycHh9Lmljb24tc3RlcC1iYWNrd2FyZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtNzJweH0uaWNvbi1mYXN0LWJhY2t3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTIxNnB4IC03MnB4fS5pY29uLWJhY2t3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC03MnB4fS5pY29uLXBsYXl7YmFja2dyb3VuZC1wb3NpdGlvbjotMjY0cHggLTcycHh9Lmljb24tcGF1c2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMjg4cHggLTcycHh9Lmljb24tc3RvcHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMTJweCAtNzJweH0uaWNvbi1mb3J3YXJke2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IC03MnB4fS5pY29uLWZhc3QtZm9yd2FyZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNjBweCAtNzJweH0uaWNvbi1zdGVwLWZvcndhcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzg0cHggLTcycHh9Lmljb24tZWplY3R7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggLTcycHh9Lmljb24tY2hldnJvbi1sZWZ0e2JhY2tncm91bmQtcG9zaXRpb246LTQzMnB4IC03MnB4fS5pY29uLWNoZXZyb24tcmlnaHR7YmFja2dyb3VuZC1wb3NpdGlvbjotNDU2cHggLTcycHh9Lmljb24tcGx1cy1zaWdue2JhY2tncm91bmQtcG9zaXRpb246MCAtOTZweH0uaWNvbi1taW51cy1zaWdue2JhY2tncm91bmQtcG9zaXRpb246LTI0cHggLTk2cHh9Lmljb24tcmVtb3ZlLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtOTZweH0uaWNvbi1vay1zaWdue2JhY2tncm91bmQtcG9zaXRpb246LTcycHggLTk2cHh9Lmljb24tcXVlc3Rpb24tc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC05NnB4fS5pY29uLWluZm8tc2lnbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjBweCAtOTZweH0uaWNvbi1zY3JlZW5zaG90e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC05NnB4fS5pY29uLXJlbW92ZS1jaXJjbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY4cHggLTk2cHh9Lmljb24tb2stY2lyY2xle2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC05NnB4fS5pY29uLWJhbi1jaXJjbGV7YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTk2cHh9Lmljb24tYXJyb3ctbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtOTZweH0uaWNvbi1hcnJvdy1yaWdodHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtOTZweH0uaWNvbi1hcnJvdy11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODlweCAtOTZweH0uaWNvbi1hcnJvdy1kb3due2JhY2tncm91bmQtcG9zaXRpb246LTMxMnB4IC05NnB4fS5pY29uLXNoYXJlLWFsdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMzZweCAtOTZweH0uaWNvbi1yZXNpemUtZnVsbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNjBweCAtOTZweH0uaWNvbi1yZXNpemUtc21hbGx7YmFja2dyb3VuZC1wb3NpdGlvbjotMzg0cHggLTk2cHh9Lmljb24tcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAtOTZweH0uaWNvbi1taW51c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzNweCAtOTZweH0uaWNvbi1hc3Rlcmlza3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00NTZweCAtOTZweH0uaWNvbi1leGNsYW1hdGlvbi1zaWdue2JhY2tncm91bmQtcG9zaXRpb246MCAtMTIwcHh9Lmljb24tZ2lmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNHB4IC0xMjBweH0uaWNvbi1sZWFme2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTEyMHB4fS5pY29uLWZpcmV7YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAtMTIwcHh9Lmljb24tZXllLW9wZW57YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTIwcHh9Lmljb24tZXllLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC0xMjBweH0uaWNvbi13YXJuaW5nLXNpZ257YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTEyMHB4fS5pY29uLXBsYW5le2JhY2tncm91bmQtcG9zaXRpb246LTE2OHB4IC0xMjBweH0uaWNvbi1jYWxlbmRhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMTIwcHh9Lmljb24tcmFuZG9te3dpZHRoOjE2cHg7YmFja2dyb3VuZC1wb3NpdGlvbjotMjE2cHggLTEyMHB4fS5pY29uLWNvbW1lbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTEyMHB4fS5pY29uLW1hZ25ldHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtMTIwcHh9Lmljb24tY2hldnJvbi11cHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yODhweCAtMTIwcHh9Lmljb24tY2hldnJvbi1kb3due2JhY2tncm91bmQtcG9zaXRpb246LTMxM3B4IC0xMTlweH0uaWNvbi1yZXR3ZWV0e2JhY2tncm91bmQtcG9zaXRpb246LTMzNnB4IC0xMjBweH0uaWNvbi1zaG9wcGluZy1jYXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTM2MHB4IC0xMjBweH0uaWNvbi1mb2xkZXItY2xvc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMzg0cHggLTEyMHB4fS5pY29uLWZvbGRlci1vcGVue3dpZHRoOjE2cHg7YmFja2dyb3VuZC1wb3NpdGlvbjotNDA4cHggLTEyMHB4fS5pY29uLXJlc2l6ZS12ZXJ0aWNhbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MzJweCAtMTE5cHh9Lmljb24tcmVzaXplLWhvcml6b250YWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNDU2cHggLTExOHB4fS5pY29uLWhkZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE0NHB4fS5pY29uLWJ1bGxob3Jue2JhY2tncm91bmQtcG9zaXRpb246LTI0cHggLTE0NHB4fS5pY29uLWJlbGx7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTQ0cHh9Lmljb24tY2VydGlmaWNhdGV7YmFja2dyb3VuZC1wb3NpdGlvbjotNzJweCAtMTQ0cHh9Lmljb24tdGh1bWJzLXVwe2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE0NHB4fS5pY29uLXRodW1icy1kb3due2JhY2tncm91bmQtcG9zaXRpb246LTEyMHB4IC0xNDRweH0uaWNvbi1oYW5kLXJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xNDRweH0uaWNvbi1oYW5kLWxlZnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTY4cHggLTE0NHB4fS5pY29uLWhhbmQtdXB7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTE0NHB4fS5pY29uLWhhbmQtZG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMTZweCAtMTQ0cHh9Lmljb24tY2lyY2xlLWFycm93LXJpZ2h0e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0xNDRweH0uaWNvbi1jaXJjbGUtYXJyb3ctbGVmdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNjRweCAtMTQ0cHh9Lmljb24tY2lyY2xlLWFycm93LXVwe2JhY2tncm91bmQtcG9zaXRpb246LTI4OHB4IC0xNDRweH0uaWNvbi1jaXJjbGUtYXJyb3ctZG93bntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMTJweCAtMTQ0cHh9Lmljb24tZ2xvYmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzM2cHggLTE0NHB4fS5pY29uLXdyZW5jaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zNjBweCAtMTQ0cHh9Lmljb24tdGFza3N7YmFja2dyb3VuZC1wb3NpdGlvbjotMzg0cHggLTE0NHB4fS5pY29uLWZpbHRlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00MDhweCAtMTQ0cHh9Lmljb24tYnJpZWZjYXNle2JhY2tncm91bmQtcG9zaXRpb246LTQzMnB4IC0xNDRweH0uaWNvbi1mdWxsc2NyZWVue2JhY2tncm91bmQtcG9zaXRpb246LTQ1NnB4IC0xNDRweH0uZHJvcHVwLC5kcm9wZG93bntwb3NpdGlvbjpyZWxhdGl2ZX0uZHJvcGRvd24tdG9nZ2xleyptYXJnaW4tYm90dG9tOi0zcHh9LmRyb3Bkb3duLXRvZ2dsZTphY3RpdmUsLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZXtvdXRsaW5lOjB9LmNhcmV0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjA7aGVpZ2h0OjA7dmVydGljYWwtYWxpZ246dG9wO2JvcmRlci10b3A6NHB4IHNvbGlkICMwMDA7Ym9yZGVyLXJpZ2h0OjRweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDo0cHggc29saWQgdHJhbnNwYXJlbnQ7Y29udGVudDoiIn0uZHJvcGRvd24gLmNhcmV0e21hcmdpbi10b3A6OHB4O21hcmdpbi1sZWZ0OjJweH0uZHJvcGRvd24tbWVudXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTAwJTtsZWZ0OjA7ei1pbmRleDoxMDAwO2Rpc3BsYXk6bm9uZTtmbG9hdDpsZWZ0O21pbi13aWR0aDoxNjBweDtwYWRkaW5nOjVweCAwO21hcmdpbjoycHggMCAwO2xpc3Qtc3R5bGU6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwLjIpOypib3JkZXItcmlnaHQtd2lkdGg6MnB4Oypib3JkZXItYm90dG9tLXdpZHRoOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgNXB4IDEwcHggcmdiYSgwLDAsMCwwLjIpOy1tb3otYm94LXNoYWRvdzowIDVweCAxMHB4IHJnYmEoMCwwLDAsMC4yKTtib3gtc2hhZG93OjAgNXB4IDEwcHggcmdiYSgwLDAsMCwwLjIpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94Oy1tb3otYmFja2dyb3VuZC1jbGlwOnBhZGRpbmc7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94fS5kcm9wZG93bi1tZW51LnB1bGwtcmlnaHR7cmlnaHQ6MDtsZWZ0OmF1dG99LmRyb3Bkb3duLW1lbnUgLmRpdmlkZXJ7KndpZHRoOjEwMCU7aGVpZ2h0OjFweDttYXJnaW46OXB4IDFweDsqbWFyZ2luOi01cHggMCA1cHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6I2U1ZTVlNTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZmZmfS5kcm9wZG93bi1tZW51IGF7ZGlzcGxheTpibG9jaztwYWRkaW5nOjNweCAyMHB4O2NsZWFyOmJvdGg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6IzMzMzt3aGl0ZS1zcGFjZTpub3dyYXB9LmRyb3Bkb3duLW1lbnUgbGk+YTpob3ZlciwuZHJvcGRvd24tbWVudSBsaT5hOmZvY3VzLC5kcm9wZG93bi1zdWJtZW51OmhvdmVyPmF7Y29sb3I6I2ZmZjt0ZXh0LWRlY29yYXRpb246bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiMwOGM7YmFja2dyb3VuZC1jb2xvcjojMDA4MWMyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzA4YyksdG8oIzAwNzdiMykpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMwOGMsIzAwNzdiMyk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpkeGltYWdldHJhbnNmb3JtLm1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYwMDg4Y2MnLGVuZENvbG9yc3RyPScjZmYwMDc3YjMnLEdyYWRpZW50VHlwZT0wKX0uZHJvcGRvd24tbWVudSAuYWN0aXZlPmEsLmRyb3Bkb3duLW1lbnUgLmFjdGl2ZT5hOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojMDhjO2JhY2tncm91bmQtY29sb3I6IzAwODFjMjtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzA4YywjMDA3N2IzKTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCMwOGMpLHRvKCMwMDc3YjMpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjMDhjLCMwMDc3YjMpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O291dGxpbmU6MDtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjAwODhjYycsZW5kQ29sb3JzdHI9JyNmZjAwNzdiMycsR3JhZGllbnRUeXBlPTApfS5kcm9wZG93bi1tZW51IC5kaXNhYmxlZD5hLC5kcm9wZG93bi1tZW51IC5kaXNhYmxlZD5hOmhvdmVye2NvbG9yOiM5OTl9LmRyb3Bkb3duLW1lbnUgLmRpc2FibGVkPmE6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ub3Blbnsqei1pbmRleDoxMDAwfS5vcGVuPi5kcm9wZG93bi1tZW51e2Rpc3BsYXk6YmxvY2t9LnB1bGwtcmlnaHQ+LmRyb3Bkb3duLW1lbnV7cmlnaHQ6MDtsZWZ0OmF1dG99LmRyb3B1cCAuY2FyZXQsLm5hdmJhci1maXhlZC1ib3R0b20gLmRyb3Bkb3duIC5jYXJldHtib3JkZXItdG9wOjA7Ym9yZGVyLWJvdHRvbTo0cHggc29saWQgIzAwMDtjb250ZW50OiJcMjE5MSJ9LmRyb3B1cCAuZHJvcGRvd24tbWVudSwubmF2YmFyLWZpeGVkLWJvdHRvbSAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnV7dG9wOmF1dG87Ym90dG9tOjEwMCU7bWFyZ2luLWJvdHRvbToxcHh9LmRyb3Bkb3duLXN1Ym1lbnV7cG9zaXRpb246cmVsYXRpdmV9LmRyb3Bkb3duLXN1Ym1lbnU+LmRyb3Bkb3duLW1lbnV7dG9wOjA7bGVmdDoxMDAlO21hcmdpbi10b3A6LTZweDttYXJnaW4tbGVmdDotMXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowIDZweCA2cHggNnB4Oy1tb3otYm9yZGVyLXJhZGl1czowIDZweCA2cHggNnB4O2JvcmRlci1yYWRpdXM6MCA2cHggNnB4IDZweH0uZHJvcGRvd24tc3VibWVudTpob3ZlciAuZHJvcGRvd24tbWVudXtkaXNwbGF5OmJsb2NrfS5kcm9wZG93bi1zdWJtZW51PmE6YWZ0ZXJ7ZGlzcGxheTpibG9jaztmbG9hdDpyaWdodDt3aWR0aDowO2hlaWdodDowO21hcmdpbi10b3A6NXB4O21hcmdpbi1yaWdodDotMTBweDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQtY29sb3I6I2NjYztib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjVweCAwIDVweCA1cHg7Y29udGVudDoiICJ9LmRyb3Bkb3duLXN1Ym1lbnU6aG92ZXI+YTphZnRlcntib3JkZXItbGVmdC1jb2xvcjojZmZmfS5kcm9wZG93biAuZHJvcGRvd24tbWVudSAubmF2LWhlYWRlcntwYWRkaW5nLXJpZ2h0OjIwcHg7cGFkZGluZy1sZWZ0OjIwcHh9LnR5cGVhaGVhZHttYXJnaW4tdG9wOjJweDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LndlbGx7bWluLWhlaWdodDoyMHB4O3BhZGRpbmc6MTlweDttYXJnaW4tYm90dG9tOjIwcHg7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O2JvcmRlcjoxcHggc29saWQgI2UzZTNlMzstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLDAuMDUpfS53ZWxsIGJsb2NrcXVvdGV7Ym9yZGVyLWNvbG9yOiNkZGQ7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xNSl9LndlbGwtbGFyZ2V7cGFkZGluZzoyNHB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweH0ud2VsbC1zbWFsbHtwYWRkaW5nOjlweDstd2Via2l0LWJvcmRlci1yYWRpdXM6M3B4Oy1tb3otYm9yZGVyLXJhZGl1czozcHg7Ym9yZGVyLXJhZGl1czozcHh9LmZhZGV7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyOy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IC4xNXMgbGluZWFyOy1vLXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXJ9LmZhZGUuaW57b3BhY2l0eToxfS5jb2xsYXBzZXtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MDtvdmVyZmxvdzpoaWRkZW47b3ZlcmZsb3c6dmlzaWJsZSBcOTstd2Via2l0LXRyYW5zaXRpb246aGVpZ2h0IC4zNXMgZWFzZTstbW96LXRyYW5zaXRpb246aGVpZ2h0IC4zNXMgZWFzZTstby10cmFuc2l0aW9uOmhlaWdodCAuMzVzIGVhc2U7dHJhbnNpdGlvbjpoZWlnaHQgLjM1cyBlYXNlfS5jb2xsYXBzZS5pbntoZWlnaHQ6YXV0b30uY2xvc2V7ZmxvYXQ6cmlnaHQ7Zm9udC1zaXplOjIwcHg7Zm9udC13ZWlnaHQ6Ym9sZDtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiMwMDA7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmO29wYWNpdHk6LjI7ZmlsdGVyOmFscGhhKG9wYWNpdHk9MjApfS5jbG9zZTpob3Zlcntjb2xvcjojMDAwO3RleHQtZGVjb3JhdGlvbjpub25lO2N1cnNvcjpwb2ludGVyO29wYWNpdHk6LjQ7ZmlsdGVyOmFscGhhKG9wYWNpdHk9NDApfWJ1dHRvbi5jbG9zZXtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6MDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0uYnRue2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTtwYWRkaW5nOjRweCAxNHB4O21hcmdpbi1ib3R0b206MDsqbWFyZ2luLWxlZnQ6LjNlbTtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMHB4OypsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiMzMzM7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1zaGFkb3c6MCAxcHggMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC43NSk7dmVydGljYWwtYWxpZ246bWlkZGxlO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTsqYmFja2dyb3VuZC1jb2xvcjojZTZlNmU2O2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmZmYpLHRvKCNlNmU2ZTYpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNlNmU2ZTYpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNlNmU2ZTYpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZmZmLCNlNmU2ZTYpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmZmYsI2U2ZTZlNik7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyOjFweCBzb2xpZCAjYmJiOypib3JkZXI6MDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2JvcmRlci1jb2xvcjojZTZlNmU2ICNlNmU2ZTYgI2JmYmZiZjtib3JkZXItYm90dG9tLWNvbG9yOiNhMmEyYTI7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4O2ZpbHRlcjpwcm9naWQ6ZHhpbWFnZXRyYW5zZm9ybS5taWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZmZmZmZmJyxlbmRDb2xvcnN0cj0nI2ZmZTZlNmU2JyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpkeGltYWdldHJhbnNmb3JtLm1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKTsqem9vbToxOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KX0uYnRuOmhvdmVyLC5idG46YWN0aXZlLC5idG4uYWN0aXZlLC5idG4uZGlzYWJsZWQsLmJ0bltkaXNhYmxlZF17Y29sb3I6IzMzMztiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTY7KmJhY2tncm91bmQtY29sb3I6I2Q5ZDlkOX0uYnRuOmFjdGl2ZSwuYnRuLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNjY2MgXDl9LmJ0bjpmaXJzdC1jaGlsZHsqbWFyZ2luLWxlZnQ6MH0uYnRuOmhvdmVye2NvbG9yOiMzMzM7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2OypiYWNrZ3JvdW5kLWNvbG9yOiNkOWQ5ZDk7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNXB4Oy13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXBvc2l0aW9uIC4xcyBsaW5lYXI7LW1vei10cmFuc2l0aW9uOmJhY2tncm91bmQtcG9zaXRpb24gLjFzIGxpbmVhcjstby10cmFuc2l0aW9uOmJhY2tncm91bmQtcG9zaXRpb24gLjFzIGxpbmVhcjt0cmFuc2l0aW9uOmJhY2tncm91bmQtcG9zaXRpb24gLjFzIGxpbmVhcn0uYnRuOmZvY3Vze291dGxpbmU6dGhpbiBkb3R0ZWQgIzMzMztvdXRsaW5lOjVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDotMnB4fS5idG4uYWN0aXZlLC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNjtiYWNrZ3JvdW5kLWNvbG9yOiNkOWQ5ZDkgXDk7YmFja2dyb3VuZC1pbWFnZTpub25lO291dGxpbmU6MDstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAycHggNHB4IHJnYmEoMCwwLDAsMC4xNSksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpO2JveC1zaGFkb3c6aW5zZXQgMCAycHggNHB4IHJnYmEoMCwwLDAsMC4xNSksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSl9LmJ0bi5kaXNhYmxlZCwuYnRuW2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdDtiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTY7YmFja2dyb3VuZC1pbWFnZTpub25lO29wYWNpdHk6LjY1O2ZpbHRlcjphbHBoYShvcGFjaXR5PTY1KTstd2Via2l0LWJveC1zaGFkb3c6bm9uZTstbW96LWJveC1zaGFkb3c6bm9uZTtib3gtc2hhZG93Om5vbmV9LmJ0bi1sYXJnZXtwYWRkaW5nOjlweCAxNHB4O2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0Om5vcm1hbDstd2Via2l0LWJvcmRlci1yYWRpdXM6NXB4Oy1tb3otYm9yZGVyLXJhZGl1czo1cHg7Ym9yZGVyLXJhZGl1czo1cHh9LmJ0bi1sYXJnZSBbY2xhc3NePSJpY29uLSJde21hcmdpbi10b3A6MnB4fS5idG4tc21hbGx7cGFkZGluZzozcHggOXB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE4cHh9LmJ0bi1zbWFsbCBbY2xhc3NePSJpY29uLSJde21hcmdpbi10b3A6MH0uYnRuLW1pbml7cGFkZGluZzoycHggNnB4O2ZvbnQtc2l6ZToxMXB4O2xpbmUtaGVpZ2h0OjE2cHh9LmJ0bi1ibG9ja3tkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDowO3BhZGRpbmctbGVmdDowOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uYnRuLWJsb2NrKy5idG4tYmxvY2t7bWFyZ2luLXRvcDo1cHh9LmJ0bi1wcmltYXJ5LmFjdGl2ZSwuYnRuLXdhcm5pbmcuYWN0aXZlLC5idG4tZGFuZ2VyLmFjdGl2ZSwuYnRuLXN1Y2Nlc3MuYWN0aXZlLC5idG4taW5mby5hY3RpdmUsLmJ0bi1pbnZlcnNlLmFjdGl2ZXtjb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LDAuNzUpfS5idG57Ym9yZGVyLWNvbG9yOiNjNWM1YzU7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xNSkgcmdiYSgwLDAsMCwwLjE1KSByZ2JhKDAsMCwwLDAuMjUpfS5idG4tcHJpbWFyeXtjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojMDA2ZGNjOypiYWNrZ3JvdW5kLWNvbG9yOiMwNGM7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzA4YyksdG8oIzA0YykpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzA0Yyk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMwOGMsIzA0Yyk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMwOGMsIzA0Yyk7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzA4YywjMDRjKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6IzA0YyAjMDA0NGNjICMwMDJhODA7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjAwODhjYycsZW5kQ29sb3JzdHI9JyNmZjAwNDRjYycsR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6ZHhpbWFnZXRyYW5zZm9ybS5taWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSl9LmJ0bi1wcmltYXJ5OmhvdmVyLC5idG4tcHJpbWFyeTphY3RpdmUsLmJ0bi1wcmltYXJ5LmFjdGl2ZSwuYnRuLXByaW1hcnkuZGlzYWJsZWQsLmJ0bi1wcmltYXJ5W2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzA0YzsqYmFja2dyb3VuZC1jb2xvcjojMDAzYmIzfS5idG4tcHJpbWFyeTphY3RpdmUsLmJ0bi1wcmltYXJ5LmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMzkgXDl9LmJ0bi13YXJuaW5ne2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiNmYWE3MzI7KmJhY2tncm91bmQtY29sb3I6I2Y4OTQwNjtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZmJiNDUwKSx0bygjZjg5NDA2KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZiYjQ1MCwjZjg5NDA2KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2ZiYjQ1MCwjZjg5NDA2KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2ZiYjQ1MCwjZjg5NDA2KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZmJiNDUwLCNmODk0MDYpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojZjg5NDA2ICNmODk0MDYgI2FkNjcwNDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6ZHhpbWFnZXRyYW5zZm9ybS5taWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZmJiNDUwJyxlbmRDb2xvcnN0cj0nI2ZmZjg5NDA2JyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpkeGltYWdldHJhbnNmb3JtLm1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0uYnRuLXdhcm5pbmc6aG92ZXIsLmJ0bi13YXJuaW5nOmFjdGl2ZSwuYnRuLXdhcm5pbmcuYWN0aXZlLC5idG4td2FybmluZy5kaXNhYmxlZCwuYnRuLXdhcm5pbmdbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojZjg5NDA2OypiYWNrZ3JvdW5kLWNvbG9yOiNkZjg1MDV9LmJ0bi13YXJuaW5nOmFjdGl2ZSwuYnRuLXdhcm5pbmcuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2M2NzYwNSBcOX0uYnRuLWRhbmdlcntjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojZGE0ZjQ5OypiYWNrZ3JvdW5kLWNvbG9yOiNiZDM2MmY7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2VlNWY1YiksdG8oI2JkMzYyZikpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2JkMzYyZik7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNlZTVmNWIsI2JkMzYyZik7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNlZTVmNWIsI2JkMzYyZik7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2VlNWY1YiwjYmQzNjJmKTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6I2JkMzYyZiAjYmQzNjJmICM4MDI0MjA7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmVlNWY1YicsZW5kQ29sb3JzdHI9JyNmZmJkMzYyZicsR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6ZHhpbWFnZXRyYW5zZm9ybS5taWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSl9LmJ0bi1kYW5nZXI6aG92ZXIsLmJ0bi1kYW5nZXI6YWN0aXZlLC5idG4tZGFuZ2VyLmFjdGl2ZSwuYnRuLWRhbmdlci5kaXNhYmxlZCwuYnRuLWRhbmdlcltkaXNhYmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNiZDM2MmY7KmJhY2tncm91bmQtY29sb3I6I2E5MzAyYX0uYnRuLWRhbmdlcjphY3RpdmUsLmJ0bi1kYW5nZXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6Izk0MmEyNSBcOX0uYnRuLXN1Y2Nlc3N7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO2JhY2tncm91bmQtY29sb3I6IzViYjc1YjsqYmFja2dyb3VuZC1jb2xvcjojNTFhMzUxO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCM2MmM0NjIpLHRvKCM1MWEzNTEpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1MWEzNTEpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjNjJjNDYyLCM1MWEzNTEpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjNjJjNDYyLCM1MWEzNTEpO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCM2MmM0NjIsIzUxYTM1MSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiM1MWEzNTEgIzUxYTM1MSAjMzg3MDM4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4yNSk7ZmlsdGVyOnByb2dpZDpkeGltYWdldHJhbnNmb3JtLm1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmY2MmM0NjInLGVuZENvbG9yc3RyPScjZmY1MWEzNTEnLEdyYWRpZW50VHlwZT0wKTtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQ9ZmFsc2UpfS5idG4tc3VjY2Vzczpob3ZlciwuYnRuLXN1Y2Nlc3M6YWN0aXZlLC5idG4tc3VjY2Vzcy5hY3RpdmUsLmJ0bi1zdWNjZXNzLmRpc2FibGVkLC5idG4tc3VjY2Vzc1tkaXNhYmxlZF17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM1MWEzNTE7KmJhY2tncm91bmQtY29sb3I6IzQ5OTI0OX0uYnRuLXN1Y2Nlc3M6YWN0aXZlLC5idG4tc3VjY2Vzcy5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjojNDA4MTQwIFw5fS5idG4taW5mb3tjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojNDlhZmNkOypiYWNrZ3JvdW5kLWNvbG9yOiMyZjk2YjQ7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzViYzBkZSksdG8oIzJmOTZiNCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzJmOTZiNCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCM1YmMwZGUsIzJmOTZiNCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCM1YmMwZGUsIzJmOTZiNCk7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzViYzBkZSwjMmY5NmI0KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6IzJmOTZiNCAjMmY5NmI0ICMxZjYzNzc7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjViYzBkZScsZW5kQ29sb3JzdHI9JyNmZjJmOTZiNCcsR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6ZHhpbWFnZXRyYW5zZm9ybS5taWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSl9LmJ0bi1pbmZvOmhvdmVyLC5idG4taW5mbzphY3RpdmUsLmJ0bi1pbmZvLmFjdGl2ZSwuYnRuLWluZm8uZGlzYWJsZWQsLmJ0bi1pbmZvW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzJmOTZiNDsqYmFja2dyb3VuZC1jb2xvcjojMmE4NWEwfS5idG4taW5mbzphY3RpdmUsLmJ0bi1pbmZvLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMyNDc0OGMgXDl9LmJ0bi1pbnZlcnNle2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtiYWNrZ3JvdW5kLWNvbG9yOiMzNjM2MzY7KmJhY2tncm91bmQtY29sb3I6IzIyMjtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjNDQ0KSx0bygjMjIyKSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzQ0NCwjMjIyKTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzQ0NCwjMjIyKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzQ0NCwjMjIyKTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjNDQ0LCMyMjIpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlci1jb2xvcjojMjIyICMyMjIyMjIgIzAwMDtib3JkZXItY29sb3I6cmdiYSgwLDAsMCwwLjEpIHJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMjUpO2ZpbHRlcjpwcm9naWQ6ZHhpbWFnZXRyYW5zZm9ybS5taWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmNDQ0NDQ0JyxlbmRDb2xvcnN0cj0nI2ZmMjIyMjIyJyxHcmFkaWVudFR5cGU9MCk7ZmlsdGVyOnByb2dpZDpkeGltYWdldHJhbnNmb3JtLm1pY3Jvc29mdC5ncmFkaWVudChlbmFibGVkPWZhbHNlKX0uYnRuLWludmVyc2U6aG92ZXIsLmJ0bi1pbnZlcnNlOmFjdGl2ZSwuYnRuLWludmVyc2UuYWN0aXZlLC5idG4taW52ZXJzZS5kaXNhYmxlZCwuYnRuLWludmVyc2VbZGlzYWJsZWRde2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMjIyOypiYWNrZ3JvdW5kLWNvbG9yOiMxNTE1MTV9LmJ0bi1pbnZlcnNlOmFjdGl2ZSwuYnRuLWludmVyc2UuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzA4MDgwOCBcOX1idXR0b24uYnRuLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bnsqcGFkZGluZy10b3A6M3B4OypwYWRkaW5nLWJvdHRvbTozcHh9YnV0dG9uLmJ0bjo6LW1vei1mb2N1cy1pbm5lcixpbnB1dFt0eXBlPSJzdWJtaXQiXS5idG46Oi1tb3otZm9jdXMtaW5uZXJ7cGFkZGluZzowO2JvcmRlcjowfWJ1dHRvbi5idG4uYnRuLWxhcmdlLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi5idG4tbGFyZ2V7KnBhZGRpbmctdG9wOjdweDsqcGFkZGluZy1ib3R0b206N3B4fWJ1dHRvbi5idG4uYnRuLXNtYWxsLGlucHV0W3R5cGU9InN1Ym1pdCJdLmJ0bi5idG4tc21hbGx7KnBhZGRpbmctdG9wOjNweDsqcGFkZGluZy1ib3R0b206M3B4fWJ1dHRvbi5idG4uYnRuLW1pbmksaW5wdXRbdHlwZT0ic3VibWl0Il0uYnRuLmJ0bi1taW5peypwYWRkaW5nLXRvcDoxcHg7KnBhZGRpbmctYm90dG9tOjFweH0uYnRuLWxpbmssLmJ0bi1saW5rOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtaW1hZ2U6bm9uZTstd2Via2l0LWJveC1zaGFkb3c6bm9uZTstbW96LWJveC1zaGFkb3c6bm9uZTtib3gtc2hhZG93Om5vbmV9LmJ0bi1saW5re2NvbG9yOiMwOGM7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtYm9yZGVyLXJhZGl1czowOy1tb3otYm9yZGVyLXJhZGl1czowO2JvcmRlci1yYWRpdXM6MH0uYnRuLWxpbms6aG92ZXJ7Y29sb3I6IzAwNTU4MDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmJ0bi1ncm91cHtwb3NpdGlvbjpyZWxhdGl2ZTsqbWFyZ2luLWxlZnQ6LjNlbTtmb250LXNpemU6MDt3aGl0ZS1zcGFjZTpub3dyYXB9LmJ0bi1ncm91cDpmaXJzdC1jaGlsZHsqbWFyZ2luLWxlZnQ6MH0uYnRuLWdyb3VwKy5idG4tZ3JvdXB7bWFyZ2luLWxlZnQ6NXB4fS5idG4tdG9vbGJhcnttYXJnaW4tdG9wOjEwcHg7bWFyZ2luLWJvdHRvbToxMHB4O2ZvbnQtc2l6ZTowfS5idG4tdG9vbGJhciAuYnRuLWdyb3Vwe2Rpc3BsYXk6aW5saW5lLWJsb2NrOypkaXNwbGF5OmlubGluZTsqem9vbToxfS5idG4tdG9vbGJhciAuYnRuKy5idG4sLmJ0bi10b29sYmFyIC5idG4tZ3JvdXArLmJ0biwuYnRuLXRvb2xiYXIgLmJ0bisuYnRuLWdyb3Vwe21hcmdpbi1sZWZ0OjVweH0uYnRuLWdyb3VwPi5idG57cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5idG4tZ3JvdXA+LmJ0bisuYnRue21hcmdpbi1sZWZ0Oi0xcHh9LmJ0bi1ncm91cD4uYnRuLC5idG4tZ3JvdXA+LmRyb3Bkb3duLW1lbnV7Zm9udC1zaXplOjE0cHh9LmJ0bi1ncm91cD4uYnRuLW1pbml7Zm9udC1zaXplOjExcHh9LmJ0bi1ncm91cD4uYnRuLXNtYWxse2ZvbnQtc2l6ZToxMnB4fS5idG4tZ3JvdXA+LmJ0bi1sYXJnZXtmb250LXNpemU6MTZweH0uYnRuLWdyb3VwPi5idG46Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MDstd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLWJvdHRvbWxlZnQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OjRweH0uYnRuLWdyb3VwPi5idG46bGFzdC1jaGlsZCwuYnRuLWdyb3VwPi5kcm9wZG93bi10b2dnbGV7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDo0cHh9LmJ0bi1ncm91cD4uYnRuLmxhcmdlOmZpcnN0LWNoaWxke21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjZweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjZweDstd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6NnB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjZweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo2cHh9LmJ0bi1ncm91cD4uYnRuLmxhcmdlOmxhc3QtY2hpbGQsLmJ0bi1ncm91cD4ubGFyZ2UuZHJvcGRvd24tdG9nZ2xley13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NnB4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjZweDstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjZweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjZweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NnB4fS5idG4tZ3JvdXA+LmJ0bjpob3ZlciwuYnRuLWdyb3VwPi5idG46Zm9jdXMsLmJ0bi1ncm91cD4uYnRuOmFjdGl2ZSwuYnRuLWdyb3VwPi5idG4uYWN0aXZle3otaW5kZXg6Mn0uYnRuLWdyb3VwIC5kcm9wZG93bi10b2dnbGU6YWN0aXZlLC5idG4tZ3JvdXAub3BlbiAuZHJvcGRvd24tdG9nZ2xle291dGxpbmU6MH0uYnRuLWdyb3VwPi5idG4rLmRyb3Bkb3duLXRvZ2dsZXsqcGFkZGluZy10b3A6NXB4O3BhZGRpbmctcmlnaHQ6OHB4OypwYWRkaW5nLWJvdHRvbTo1cHg7cGFkZGluZy1sZWZ0OjhweDstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTI1KSxpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMXB4IDAgMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTI1KSxpbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEyNSksaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMiksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4wNSl9LmJ0bi1ncm91cD4uYnRuLW1pbmkrLmRyb3Bkb3duLXRvZ2dsZXsqcGFkZGluZy10b3A6MnB4O3BhZGRpbmctcmlnaHQ6NXB4OypwYWRkaW5nLWJvdHRvbToycHg7cGFkZGluZy1sZWZ0OjVweH0uYnRuLWdyb3VwPi5idG4tc21hbGwrLmRyb3Bkb3duLXRvZ2dsZXsqcGFkZGluZy10b3A6NXB4OypwYWRkaW5nLWJvdHRvbTo0cHh9LmJ0bi1ncm91cD4uYnRuLWxhcmdlKy5kcm9wZG93bi10b2dnbGV7KnBhZGRpbmctdG9wOjdweDtwYWRkaW5nLXJpZ2h0OjEycHg7KnBhZGRpbmctYm90dG9tOjdweDtwYWRkaW5nLWxlZnQ6MTJweH0uYnRuLWdyb3VwLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjE1KSwwIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93Omluc2V0IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMTUpLDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5idG4tZ3JvdXAub3BlbiAuYnRuLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTZ9LmJ0bi1ncm91cC5vcGVuIC5idG4tcHJpbWFyeS5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojMDRjfS5idG4tZ3JvdXAub3BlbiAuYnRuLXdhcm5pbmcuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6I2Y4OTQwNn0uYnRuLWdyb3VwLm9wZW4gLmJ0bi1kYW5nZXIuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6I2JkMzYyZn0uYnRuLWdyb3VwLm9wZW4gLmJ0bi1zdWNjZXNzLmRyb3Bkb3duLXRvZ2dsZXtiYWNrZ3JvdW5kLWNvbG9yOiM1MWEzNTF9LmJ0bi1ncm91cC5vcGVuIC5idG4taW5mby5kcm9wZG93bi10b2dnbGV7YmFja2dyb3VuZC1jb2xvcjojMmY5NmI0fS5idG4tZ3JvdXAub3BlbiAuYnRuLWludmVyc2UuZHJvcGRvd24tdG9nZ2xle2JhY2tncm91bmQtY29sb3I6IzIyMn0uYnRuIC5jYXJldHttYXJnaW4tdG9wOjhweDttYXJnaW4tbGVmdDowfS5idG4tbWluaSAuY2FyZXQsLmJ0bi1zbWFsbCAuY2FyZXQsLmJ0bi1sYXJnZSAuY2FyZXR7bWFyZ2luLXRvcDo2cHh9LmJ0bi1sYXJnZSAuY2FyZXR7Ym9yZGVyLXRvcC13aWR0aDo1cHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjVweDtib3JkZXItbGVmdC13aWR0aDo1cHh9LmRyb3B1cCAuYnRuLWxhcmdlIC5jYXJldHtib3JkZXItdG9wOjA7Ym9yZGVyLWJvdHRvbTo1cHggc29saWQgIzAwMH0uYnRuLXByaW1hcnkgLmNhcmV0LC5idG4td2FybmluZyAuY2FyZXQsLmJ0bi1kYW5nZXIgLmNhcmV0LC5idG4taW5mbyAuY2FyZXQsLmJ0bi1zdWNjZXNzIC5jYXJldCwuYnRuLWludmVyc2UgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLWNvbG9yOiNmZmZ9LmJ0bi1ncm91cC12ZXJ0aWNhbHtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7Knpvb206MX0uYnRuLWdyb3VwLXZlcnRpY2FsIC5idG57ZGlzcGxheTpibG9jaztmbG9hdDpub25lO3dpZHRoOjEwMCU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5idG4tZ3JvdXAtdmVydGljYWwgLmJ0bisuYnRue21hcmdpbi10b3A6LTFweDttYXJnaW4tbGVmdDowfS5idG4tZ3JvdXAtdmVydGljYWwgLmJ0bjpmaXJzdC1jaGlsZHstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7LW1vei1ib3JkZXItcmFkaXVzOjRweCA0cHggMCAwO2JvcmRlci1yYWRpdXM6NHB4IDRweCAwIDB9LmJ0bi1ncm91cC12ZXJ0aWNhbCAuYnRuOmxhc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMCA0cHggNHB4Oy1tb3otYm9yZGVyLXJhZGl1czowIDAgNHB4IDRweDtib3JkZXItcmFkaXVzOjAgMCA0cHggNHB4fS5idG4tZ3JvdXAtdmVydGljYWwgLmJ0bi1sYXJnZTpmaXJzdC1jaGlsZHstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4IDZweCAwIDA7LW1vei1ib3JkZXItcmFkaXVzOjZweCA2cHggMCAwO2JvcmRlci1yYWRpdXM6NnB4IDZweCAwIDB9LmJ0bi1ncm91cC12ZXJ0aWNhbCAuYnRuLWxhcmdlOmxhc3QtY2hpbGR7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgMCA2cHggNnB4Oy1tb3otYm9yZGVyLXJhZGl1czowIDAgNnB4IDZweDtib3JkZXItcmFkaXVzOjAgMCA2cHggNnB4fS5hbGVydHtwYWRkaW5nOjhweCAzNXB4IDhweCAxNHB4O21hcmdpbi1ib3R0b206MjBweDtjb2xvcjojYzA5ODUzO3RleHQtc2hhZG93OjAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjUpO2JhY2tncm91bmQtY29sb3I6I2ZjZjhlMztib3JkZXI6MXB4IHNvbGlkICNmYmVlZDU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4fS5hbGVydCBoNHttYXJnaW46MH0uYWxlcnQgLmNsb3Nle3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDotMnB4O3JpZ2h0Oi0yMXB4O2xpbmUtaGVpZ2h0OjIwcHh9LmFsZXJ0LXN1Y2Nlc3N7Y29sb3I6IzQ2ODg0NztiYWNrZ3JvdW5kLWNvbG9yOiNkZmYwZDg7Ym9yZGVyLWNvbG9yOiNkNmU5YzZ9LmFsZXJ0LWRhbmdlciwuYWxlcnQtZXJyb3J7Y29sb3I6I2I5NGE0ODtiYWNrZ3JvdW5kLWNvbG9yOiNmMmRlZGU7Ym9yZGVyLWNvbG9yOiNlZWQzZDd9LmFsZXJ0LWluZm97Y29sb3I6IzNhODdhZDtiYWNrZ3JvdW5kLWNvbG9yOiNkOWVkZjc7Ym9yZGVyLWNvbG9yOiNiY2U4ZjF9LmFsZXJ0LWJsb2Nre3BhZGRpbmctdG9wOjE0cHg7cGFkZGluZy1ib3R0b206MTRweH0uYWxlcnQtYmxvY2s+cCwuYWxlcnQtYmxvY2s+dWx7bWFyZ2luLWJvdHRvbTowfS5hbGVydC1ibG9jayBwK3B7bWFyZ2luLXRvcDo1cHh9Lm5hdnttYXJnaW4tYm90dG9tOjIwcHg7bWFyZ2luLWxlZnQ6MDtsaXN0LXN0eWxlOm5vbmV9Lm5hdj5saT5he2Rpc3BsYXk6YmxvY2t9Lm5hdj5saT5hOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6I2VlZX0ubmF2Pi5wdWxsLXJpZ2h0e2Zsb2F0OnJpZ2h0fS5uYXYtaGVhZGVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZzozcHggMTVweDtmb250LXNpemU6MTFweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjIwcHg7Y29sb3I6Izk5OTt0ZXh0LXNoYWRvdzowIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC41KTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9Lm5hdiBsaSsubmF2LWhlYWRlcnttYXJnaW4tdG9wOjlweH0ubmF2LWxpc3R7cGFkZGluZy1yaWdodDoxNXB4O3BhZGRpbmctbGVmdDoxNXB4O21hcmdpbi1ib3R0b206MH0ubmF2LWxpc3Q+bGk+YSwubmF2LWxpc3QgLm5hdi1oZWFkZXJ7bWFyZ2luLXJpZ2h0Oi0xNXB4O21hcmdpbi1sZWZ0Oi0xNXB4O3RleHQtc2hhZG93OjAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjUpfS5uYXYtbGlzdD5saT5he3BhZGRpbmc6M3B4IDE1cHh9Lm5hdi1saXN0Pi5hY3RpdmU+YSwubmF2LWxpc3Q+LmFjdGl2ZT5hOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAtMXB4IDAgcmdiYSgwLDAsMCwwLjIpO2JhY2tncm91bmQtY29sb3I6IzA4Y30ubmF2LWxpc3QgW2NsYXNzXj0iaWNvbi0iXXttYXJnaW4tcmlnaHQ6MnB4fS5uYXYtbGlzdCAuZGl2aWRlcnsqd2lkdGg6MTAwJTtoZWlnaHQ6MXB4O21hcmdpbjo5cHggMXB4OyptYXJnaW46LTVweCAwIDVweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjojZTVlNWU1O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmZmZ9Lm5hdi10YWJzLC5uYXYtcGlsbHN7Knpvb206MX0ubmF2LXRhYnM6YmVmb3JlLC5uYXYtcGlsbHM6YmVmb3JlLC5uYXYtdGFiczphZnRlciwubmF2LXBpbGxzOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5uYXYtdGFiczphZnRlciwubmF2LXBpbGxzOmFmdGVye2NsZWFyOmJvdGh9Lm5hdi10YWJzPmxpLC5uYXYtcGlsbHM+bGl7ZmxvYXQ6bGVmdH0ubmF2LXRhYnM+bGk+YSwubmF2LXBpbGxzPmxpPmF7cGFkZGluZy1yaWdodDoxMnB4O3BhZGRpbmctbGVmdDoxMnB4O21hcmdpbi1yaWdodDoycHg7bGluZS1oZWlnaHQ6MTRweH0ubmF2LXRhYnN7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RkZH0ubmF2LXRhYnM+bGl7bWFyZ2luLWJvdHRvbTotMXB4fS5uYXYtdGFicz5saT5he3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo4cHg7bGluZS1oZWlnaHQ6MjBweDtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHggNHB4IDAgMDstbW96LWJvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7Ym9yZGVyLXJhZGl1czo0cHggNHB4IDAgMH0ubmF2LXRhYnM+bGk+YTpob3Zlcntib3JkZXItY29sb3I6I2VlZSAjZWVlZWVlICNkZGR9Lm5hdi10YWJzPi5hY3RpdmU+YSwubmF2LXRhYnM+LmFjdGl2ZT5hOmhvdmVye2NvbG9yOiM1NTU7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50fS5uYXYtcGlsbHM+bGk+YXtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206OHB4O21hcmdpbi10b3A6MnB4O21hcmdpbi1ib3R0b206MnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo1cHg7LW1vei1ib3JkZXItcmFkaXVzOjVweDtib3JkZXItcmFkaXVzOjVweH0ubmF2LXBpbGxzPi5hY3RpdmU+YSwubmF2LXBpbGxzPi5hY3RpdmU+YTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzA4Y30ubmF2LXN0YWNrZWQ+bGl7ZmxvYXQ6bm9uZX0ubmF2LXN0YWNrZWQ+bGk+YXttYXJnaW4tcmlnaHQ6MH0ubmF2LXRhYnMubmF2LXN0YWNrZWR7Ym9yZGVyLWJvdHRvbTowfS5uYXYtdGFicy5uYXYtc3RhY2tlZD5saT5he2JvcmRlcjoxcHggc29saWQgI2RkZDstd2Via2l0LWJvcmRlci1yYWRpdXM6MDstbW96LWJvcmRlci1yYWRpdXM6MDtib3JkZXItcmFkaXVzOjB9Lm5hdi10YWJzLm5hdi1zdGFja2VkPmxpOmZpcnN0LWNoaWxkPmF7LXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4Oy13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OjRweDstbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDo0cHh9Lm5hdi10YWJzLm5hdi1zdGFja2VkPmxpOmxhc3QtY2hpbGQ+YXstd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHg7LXdlYmtpdC1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6NHB4Oy1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OjRweH0ubmF2LXRhYnMubmF2LXN0YWNrZWQ+bGk+YTpob3Zlcnt6LWluZGV4OjI7Ym9yZGVyLWNvbG9yOiNkZGR9Lm5hdi1waWxscy5uYXYtc3RhY2tlZD5saT5he21hcmdpbi1ib3R0b206M3B4fS5uYXYtcGlsbHMubmF2LXN0YWNrZWQ+bGk6bGFzdC1jaGlsZD5he21hcmdpbi1ib3R0b206MXB4fS5uYXYtdGFicyAuZHJvcGRvd24tbWVudXstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7LW1vei1ib3JkZXItcmFkaXVzOjAgMCA2cHggNnB4O2JvcmRlci1yYWRpdXM6MCAwIDZweCA2cHh9Lm5hdi1waWxscyAuZHJvcGRvd24tbWVudXstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHh9Lm5hdiAuZHJvcGRvd24tdG9nZ2xlIC5jYXJldHttYXJnaW4tdG9wOjZweDtib3JkZXItdG9wLWNvbG9yOiMwOGM7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDhjfS5uYXYgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojMDA1NTgwO2JvcmRlci1ib3R0b20tY29sb3I6IzAwNTU4MH0ubmF2LXRhYnMgLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7bWFyZ2luLXRvcDo4cHh9Lm5hdiAuYWN0aXZlIC5kcm9wZG93bi10b2dnbGUgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLWNvbG9yOiNmZmZ9Lm5hdi10YWJzIC5hY3RpdmUgLmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojNTU1O2JvcmRlci1ib3R0b20tY29sb3I6IzU1NX0ubmF2Pi5kcm9wZG93bi5hY3RpdmU+YTpob3ZlcntjdXJzb3I6cG9pbnRlcn0ubmF2LXRhYnMgLm9wZW4gLmRyb3Bkb3duLXRvZ2dsZSwubmF2LXBpbGxzIC5vcGVuIC5kcm9wZG93bi10b2dnbGUsLm5hdj5saS5kcm9wZG93bi5vcGVuLmFjdGl2ZT5hOmhvdmVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojOTk5O2JvcmRlci1jb2xvcjojOTk5fS5uYXYgbGkuZHJvcGRvd24ub3BlbiAuY2FyZXQsLm5hdiBsaS5kcm9wZG93bi5vcGVuLmFjdGl2ZSAuY2FyZXQsLm5hdiBsaS5kcm9wZG93bi5vcGVuIGE6aG92ZXIgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLWNvbG9yOiNmZmY7b3BhY2l0eToxO2ZpbHRlcjphbHBoYShvcGFjaXR5PTEwMCl9LnRhYnMtc3RhY2tlZCAub3Blbj5hOmhvdmVye2JvcmRlci1jb2xvcjojOTk5fS50YWJiYWJsZXsqem9vbToxfS50YWJiYWJsZTpiZWZvcmUsLnRhYmJhYmxlOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS50YWJiYWJsZTphZnRlcntjbGVhcjpib3RofS50YWItY29udGVudHtvdmVyZmxvdzphdXRvfS50YWJzLWJlbG93Pi5uYXYtdGFicywudGFicy1yaWdodD4ubmF2LXRhYnMsLnRhYnMtbGVmdD4ubmF2LXRhYnN7Ym9yZGVyLWJvdHRvbTowfS50YWItY29udGVudD4udGFiLXBhbmUsLnBpbGwtY29udGVudD4ucGlsbC1wYW5le2Rpc3BsYXk6bm9uZX0udGFiLWNvbnRlbnQ+LmFjdGl2ZSwucGlsbC1jb250ZW50Pi5hY3RpdmV7ZGlzcGxheTpibG9ja30udGFicy1iZWxvdz4ubmF2LXRhYnN7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RkZH0udGFicy1iZWxvdz4ubmF2LXRhYnM+bGl7bWFyZ2luLXRvcDotMXB4O21hcmdpbi1ib3R0b206MH0udGFicy1iZWxvdz4ubmF2LXRhYnM+bGk+YXstd2Via2l0LWJvcmRlci1yYWRpdXM6MCAwIDRweCA0cHg7LW1vei1ib3JkZXItcmFkaXVzOjAgMCA0cHggNHB4O2JvcmRlci1yYWRpdXM6MCAwIDRweCA0cHh9LnRhYnMtYmVsb3c+Lm5hdi10YWJzPmxpPmE6aG92ZXJ7Ym9yZGVyLXRvcC1jb2xvcjojZGRkO2JvcmRlci1ib3R0b20tY29sb3I6dHJhbnNwYXJlbnR9LnRhYnMtYmVsb3c+Lm5hdi10YWJzPi5hY3RpdmU+YSwudGFicy1iZWxvdz4ubmF2LXRhYnM+LmFjdGl2ZT5hOmhvdmVye2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudCAjZGRkICNkZGQgI2RkZH0udGFicy1sZWZ0Pi5uYXYtdGFicz5saSwudGFicy1yaWdodD4ubmF2LXRhYnM+bGl7ZmxvYXQ6bm9uZX0udGFicy1sZWZ0Pi5uYXYtdGFicz5saT5hLC50YWJzLXJpZ2h0Pi5uYXYtdGFicz5saT5he21pbi13aWR0aDo3NHB4O21hcmdpbi1yaWdodDowO21hcmdpbi1ib3R0b206M3B4fS50YWJzLWxlZnQ+Lm5hdi10YWJze2Zsb2F0OmxlZnQ7bWFyZ2luLXJpZ2h0OjE5cHg7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZGRkfS50YWJzLWxlZnQ+Lm5hdi10YWJzPmxpPmF7bWFyZ2luLXJpZ2h0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHggMCAwIDRweDtib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4fS50YWJzLWxlZnQ+Lm5hdi10YWJzPmxpPmE6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNlZWUgI2RkZGRkZCAjZWVlICNlZWVlZWV9LnRhYnMtbGVmdD4ubmF2LXRhYnMgLmFjdGl2ZT5hLC50YWJzLWxlZnQ+Lm5hdi10YWJzIC5hY3RpdmU+YTpob3Zlcntib3JkZXItY29sb3I6I2RkZCB0cmFuc3BhcmVudCAjZGRkICNkZGQ7KmJvcmRlci1yaWdodC1jb2xvcjojZmZmfS50YWJzLXJpZ2h0Pi5uYXYtdGFic3tmbG9hdDpyaWdodDttYXJnaW4tbGVmdDoxOXB4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGRkfS50YWJzLXJpZ2h0Pi5uYXYtdGFicz5saT5he21hcmdpbi1sZWZ0Oi0xcHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwOy1tb3otYm9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwfS50YWJzLXJpZ2h0Pi5uYXYtdGFicz5saT5hOmhvdmVye2JvcmRlci1jb2xvcjojZWVlICNlZWVlZWUgI2VlZSAjZGRkZGRkfS50YWJzLXJpZ2h0Pi5uYXYtdGFicyAuYWN0aXZlPmEsLnRhYnMtcmlnaHQ+Lm5hdi10YWJzIC5hY3RpdmU+YTpob3Zlcntib3JkZXItY29sb3I6I2RkZCAjZGRkICNkZGQgdHJhbnNwYXJlbnQ7KmJvcmRlci1sZWZ0LWNvbG9yOiNmZmZ9Lm5hdj4uZGlzYWJsZWQ+YXtjb2xvcjojOTk5fS5uYXY+LmRpc2FibGVkPmE6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubmF2YmFyeypwb3NpdGlvbjpyZWxhdGl2ZTsqei1pbmRleDoyO21hcmdpbi1ib3R0b206MjBweDtvdmVyZmxvdzp2aXNpYmxlO2NvbG9yOiM1NTV9Lm5hdmJhci1pbm5lcnttaW4taGVpZ2h0OjQwcHg7cGFkZGluZy1yaWdodDoyMHB4O3BhZGRpbmctbGVmdDoyMHB4O2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNmZmYpLHRvKCNmMmYyZjIpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZmZmLCNmMmYyZjIpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2JvcmRlcjoxcHggc29saWQgI2Q0ZDRkNDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHg7ZmlsdGVyOnByb2dpZDpkeGltYWdldHJhbnNmb3JtLm1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmZmZmZmZmYnLGVuZENvbG9yc3RyPScjZmZmMmYyZjInLEdyYWRpZW50VHlwZT0wKTstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwwLDAsMC4wNjUpOy1tb3otYm94LXNoYWRvdzowIDFweCA0cHggcmdiYSgwLDAsMCwwLjA2NSk7Ym94LXNoYWRvdzowIDFweCA0cHggcmdiYSgwLDAsMCwwLjA2NSl9Lm5hdmJhciAuY29udGFpbmVye3dpZHRoOmF1dG99Lm5hdi1jb2xsYXBzZS5jb2xsYXBzZXtoZWlnaHQ6YXV0b30ubmF2YmFyIC5icmFuZHtkaXNwbGF5OmJsb2NrO2Zsb2F0OmxlZnQ7cGFkZGluZzoxMHB4IDIwcHggMTBweDttYXJnaW4tbGVmdDotMjBweDtmb250LXNpemU6MjBweDtmb250LXdlaWdodDoyMDA7Y29sb3I6IzU1NTt0ZXh0LXNoYWRvdzowIDFweCAwICNmZmZ9Lm5hdmJhciAuYnJhbmQ6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lm5hdmJhci10ZXh0e21hcmdpbi1ib3R0b206MDtsaW5lLWhlaWdodDo0MHB4fS5uYXZiYXItbGlua3tjb2xvcjojNTU1fS5uYXZiYXItbGluazpob3Zlcntjb2xvcjojMzMzfS5uYXZiYXIgLmRpdmlkZXItdmVydGljYWx7aGVpZ2h0OjQwcHg7bWFyZ2luOjAgOXB4O2JvcmRlci1yaWdodDoxcHggc29saWQgI2ZmZjtib3JkZXItbGVmdDoxcHggc29saWQgI2YyZjJmMn0ubmF2YmFyIC5idG4sLm5hdmJhciAuYnRuLWdyb3Vwe21hcmdpbi10b3A6NnB4fS5uYXZiYXIgLmJ0bi1ncm91cCAuYnRue21hcmdpbjowfS5uYXZiYXItZm9ybXttYXJnaW4tYm90dG9tOjA7Knpvb206MX0ubmF2YmFyLWZvcm06YmVmb3JlLC5uYXZiYXItZm9ybTphZnRlcntkaXNwbGF5OnRhYmxlO2xpbmUtaGVpZ2h0OjA7Y29udGVudDoiIn0ubmF2YmFyLWZvcm06YWZ0ZXJ7Y2xlYXI6Ym90aH0ubmF2YmFyLWZvcm0gaW5wdXQsLm5hdmJhci1mb3JtIHNlbGVjdCwubmF2YmFyLWZvcm0gLnJhZGlvLC5uYXZiYXItZm9ybSAuY2hlY2tib3h7bWFyZ2luLXRvcDo1cHh9Lm5hdmJhci1mb3JtIGlucHV0LC5uYXZiYXItZm9ybSBzZWxlY3QsLm5hdmJhci1mb3JtIC5idG57ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLWJvdHRvbTowfS5uYXZiYXItZm9ybSBpbnB1dFt0eXBlPSJpbWFnZSJdLC5uYXZiYXItZm9ybSBpbnB1dFt0eXBlPSJjaGVja2JveCJdLC5uYXZiYXItZm9ybSBpbnB1dFt0eXBlPSJyYWRpbyJde21hcmdpbi10b3A6M3B4fS5uYXZiYXItZm9ybSAuaW5wdXQtYXBwZW5kLC5uYXZiYXItZm9ybSAuaW5wdXQtcHJlcGVuZHttYXJnaW4tdG9wOjZweDt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5hdmJhci1mb3JtIC5pbnB1dC1hcHBlbmQgaW5wdXQsLm5hdmJhci1mb3JtIC5pbnB1dC1wcmVwZW5kIGlucHV0e21hcmdpbi10b3A6MH0ubmF2YmFyLXNlYXJjaHtwb3NpdGlvbjpyZWxhdGl2ZTtmbG9hdDpsZWZ0O21hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MH0ubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5e3BhZGRpbmc6NHB4IDE0cHg7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OiJIZWx2ZXRpY2EgTmV1ZSIsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6bm9ybWFsO2xpbmUtaGVpZ2h0OjE7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjE1cHg7LW1vei1ib3JkZXItcmFkaXVzOjE1cHg7Ym9yZGVyLXJhZGl1czoxNXB4fS5uYXZiYXItc3RhdGljLXRvcHtwb3NpdGlvbjpzdGF0aWM7d2lkdGg6MTAwJTttYXJnaW4tYm90dG9tOjB9Lm5hdmJhci1zdGF0aWMtdG9wIC5uYXZiYXItaW5uZXJ7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5uYXZiYXItZml4ZWQtdG9wLC5uYXZiYXItZml4ZWQtYm90dG9te3Bvc2l0aW9uOmZpeGVkO3JpZ2h0OjA7bGVmdDowO3otaW5kZXg6MTAzMDttYXJnaW4tYm90dG9tOjB9Lm5hdmJhci1maXhlZC10b3AgLm5hdmJhci1pbm5lciwubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWlubmVyLC5uYXZiYXItc3RhdGljLXRvcCAubmF2YmFyLWlubmVye2JvcmRlcjowfS5uYXZiYXItZml4ZWQtdG9wIC5uYXZiYXItaW5uZXIsLm5hdmJhci1maXhlZC1ib3R0b20gLm5hdmJhci1pbm5lcntwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7LW1vei1ib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJhZGl1czowfS5uYXZiYXItc3RhdGljLXRvcCAuY29udGFpbmVyLC5uYXZiYXItZml4ZWQtdG9wIC5jb250YWluZXIsLm5hdmJhci1maXhlZC1ib3R0b20gLmNvbnRhaW5lcnt3aWR0aDo5NDBweH0ubmF2YmFyLWZpeGVkLXRvcHt0b3A6MH0ubmF2YmFyLWZpeGVkLXRvcCAubmF2YmFyLWlubmVyLC5uYXZiYXItc3RhdGljLXRvcCAubmF2YmFyLWlubmVyey13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMSksMCAxcHggMTBweCByZ2JhKDAsMCwwLDAuMSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsMC4xKSwwIDFweCAxMHB4IHJnYmEoMCwwLDAsMC4xKTtib3gtc2hhZG93Omluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsMC4xKSwwIDFweCAxMHB4IHJnYmEoMCwwLDAsMC4xKX0ubmF2YmFyLWZpeGVkLWJvdHRvbXtib3R0b206MH0ubmF2YmFyLWZpeGVkLWJvdHRvbSAubmF2YmFyLWlubmVyey13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMCwwLDAsMC4xKSwwIC0xcHggMTBweCByZ2JhKDAsMCwwLDAuMSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgwLDAsMCwwLjEpLDAgLTFweCAxMHB4IHJnYmEoMCwwLDAsMC4xKTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgwLDAsMCwwLjEpLDAgLTFweCAxMHB4IHJnYmEoMCwwLDAsMC4xKX0ubmF2YmFyIC5uYXZ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDowO2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bGVmdDttYXJnaW46MCAxMHB4IDAgMH0ubmF2YmFyIC5uYXYucHVsbC1yaWdodHtmbG9hdDpyaWdodH0ubmF2YmFyIC5uYXY+bGl7ZmxvYXQ6bGVmdH0ubmF2YmFyIC5uYXY+bGk+YXtmbG9hdDpub25lO3BhZGRpbmc6MTBweCAxNXB4IDEwcHg7Y29sb3I6IzU1NTt0ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LXNoYWRvdzowIDFweCAwICNmZmZ9Lm5hdmJhciAubmF2IC5kcm9wZG93bi10b2dnbGUgLmNhcmV0e21hcmdpbi10b3A6OHB4fS5uYXZiYXIgLm5hdj5saT5hOmZvY3VzLC5uYXZiYXIgLm5hdj5saT5hOmhvdmVye2NvbG9yOiMzMzM7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ubmF2YmFyIC5uYXY+LmFjdGl2ZT5hLC5uYXZiYXIgLm5hdj4uYWN0aXZlPmE6aG92ZXIsLm5hdmJhciAubmF2Pi5hY3RpdmU+YTpmb2N1c3tjb2xvcjojNTU1O3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6I2U1ZTVlNTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAzcHggOHB4IHJnYmEoMCwwLDAsMC4xMjUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDNweCA4cHggcmdiYSgwLDAsMCwwLjEyNSk7Ym94LXNoYWRvdzppbnNldCAwIDNweCA4cHggcmdiYSgwLDAsMCwwLjEyNSl9Lm5hdmJhciAuYnRuLW5hdmJhcntkaXNwbGF5Om5vbmU7ZmxvYXQ6cmlnaHQ7cGFkZGluZzo3cHggMTBweDttYXJnaW4tcmlnaHQ6NXB4O21hcmdpbi1sZWZ0OjVweDtjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojZWRlZGVkOypiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1ZTU7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2YyZjJmMiksdG8oI2U1ZTVlNSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmMmYyZjIsI2U1ZTVlNSk7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2YyZjJmMiwjZTVlNWU1KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6I2U1ZTVlNSAjZTVlNWU1ICNiZmJmYmY7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmYyZjJmMicsZW5kQ29sb3JzdHI9JyNmZmU1ZTVlNScsR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6ZHhpbWFnZXRyYW5zZm9ybS5taWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSk7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA3NSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjA3NSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSwwIDFweCAwIHJnYmEoMjU1LDI1NSwyNTUsMC4wNzUpfS5uYXZiYXIgLmJ0bi1uYXZiYXI6aG92ZXIsLm5hdmJhciAuYnRuLW5hdmJhcjphY3RpdmUsLm5hdmJhciAuYnRuLW5hdmJhci5hY3RpdmUsLm5hdmJhciAuYnRuLW5hdmJhci5kaXNhYmxlZCwubmF2YmFyIC5idG4tbmF2YmFyW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2U1ZTVlNTsqYmFja2dyb3VuZC1jb2xvcjojZDlkOWQ5fS5uYXZiYXIgLmJ0bi1uYXZiYXI6YWN0aXZlLC5uYXZiYXIgLmJ0bi1uYXZiYXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2NjYyBcOX0ubmF2YmFyIC5idG4tbmF2YmFyIC5pY29uLWJhcntkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjJweDtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjFweDstbW96LWJvcmRlci1yYWRpdXM6MXB4O2JvcmRlci1yYWRpdXM6MXB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDFweCAwIHJnYmEoMCwwLDAsMC4yNSk7LW1vei1ib3gtc2hhZG93OjAgMXB4IDAgcmdiYSgwLDAsMCwwLjI1KTtib3gtc2hhZG93OjAgMXB4IDAgcmdiYSgwLDAsMCwwLjI1KX0uYnRuLW5hdmJhciAuaWNvbi1iYXIrLmljb24tYmFye21hcmdpbi10b3A6M3B4fS5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudTpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7dG9wOi03cHg7bGVmdDo5cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJpZ2h0OjdweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjdweCBzb2xpZCAjY2NjO2JvcmRlci1sZWZ0OjdweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsMC4yKTtjb250ZW50OicnfS5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudTphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTZweDtsZWZ0OjEwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyLXJpZ2h0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOjZweCBzb2xpZCAjZmZmO2JvcmRlci1sZWZ0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtjb250ZW50OicnfS5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YmVmb3Jle3RvcDphdXRvO2JvdHRvbTotN3B4O2JvcmRlci10b3A6N3B4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbTowO2JvcmRlci10b3AtY29sb3I6cmdiYSgwLDAsMCwwLjIpfS5uYXZiYXItZml4ZWQtYm90dG9tIC5uYXY+bGk+LmRyb3Bkb3duLW1lbnU6YWZ0ZXJ7dG9wOmF1dG87Ym90dG9tOi02cHg7Ym9yZGVyLXRvcDo2cHggc29saWQgI2ZmZjtib3JkZXItYm90dG9tOjB9Lm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZSwubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUsLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPi5kcm9wZG93bi10b2dnbGV7Y29sb3I6IzU1NTtiYWNrZ3JvdW5kLWNvbG9yOiNlNWU1ZTV9Lm5hdmJhciAubmF2IGxpLmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6IzU1NTtib3JkZXItYm90dG9tLWNvbG9yOiM1NTV9Lm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQsLm5hdmJhciAubmF2IGxpLmRyb3Bkb3duLmFjdGl2ZT4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldCwubmF2YmFyIC5uYXYgbGkuZHJvcGRvd24ub3Blbi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXR7Ym9yZGVyLXRvcC1jb2xvcjojNTU1O2JvcmRlci1ib3R0b20tY29sb3I6IzU1NX0ubmF2YmFyIC5wdWxsLXJpZ2h0PmxpPi5kcm9wZG93bi1tZW51LC5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0e3JpZ2h0OjA7bGVmdDphdXRvfS5uYXZiYXIgLnB1bGwtcmlnaHQ+bGk+LmRyb3Bkb3duLW1lbnU6YmVmb3JlLC5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0OmJlZm9yZXtyaWdodDoxMnB4O2xlZnQ6YXV0b30ubmF2YmFyIC5wdWxsLXJpZ2h0PmxpPi5kcm9wZG93bi1tZW51OmFmdGVyLC5uYXZiYXIgLm5hdj5saT4uZHJvcGRvd24tbWVudS5wdWxsLXJpZ2h0OmFmdGVye3JpZ2h0OjEzcHg7bGVmdDphdXRvfS5uYXZiYXIgLnB1bGwtcmlnaHQ+bGk+LmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLW1lbnUsLm5hdmJhciAubmF2PmxpPi5kcm9wZG93bi1tZW51LnB1bGwtcmlnaHQgLmRyb3Bkb3duLW1lbnV7cmlnaHQ6MTAwJTtsZWZ0OmF1dG87bWFyZ2luLXJpZ2h0Oi0xcHg7bWFyZ2luLWxlZnQ6MDstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4IDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6NnB4IDAgNnB4IDZweDtib3JkZXItcmFkaXVzOjZweCAwIDZweCA2cHh9Lm5hdmJhci1pbnZlcnNle2NvbG9yOiM5OTl9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItaW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojMWIxYjFiO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMyMjIsIzExMSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzIyMiksdG8oIzExMSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMyMjIsIzExMSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMyMjIsIzExMSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMyMjIsIzExMSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ym9yZGVyLWNvbG9yOiMyNTI1MjU7ZmlsdGVyOnByb2dpZDpkeGltYWdldHJhbnNmb3JtLm1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYyMjIyMjInLGVuZENvbG9yc3RyPScjZmYxMTExMTEnLEdyYWRpZW50VHlwZT0wKX0ubmF2YmFyLWludmVyc2UgLmJyYW5kLC5uYXZiYXItaW52ZXJzZSAubmF2PmxpPmF7Y29sb3I6Izk5OTt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpfS5uYXZiYXItaW52ZXJzZSAuYnJhbmQ6aG92ZXIsLm5hdmJhci1pbnZlcnNlIC5uYXY+bGk+YTpob3Zlcntjb2xvcjojZmZmfS5uYXZiYXItaW52ZXJzZSAubmF2PmxpPmE6Zm9jdXMsLm5hdmJhci1pbnZlcnNlIC5uYXY+bGk+YTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9Lm5hdmJhci1pbnZlcnNlIC5uYXYgLmFjdGl2ZT5hLC5uYXZiYXItaW52ZXJzZSAubmF2IC5hY3RpdmU+YTpob3ZlciwubmF2YmFyLWludmVyc2UgLm5hdiAuYWN0aXZlPmE6Zm9jdXN7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMxMTF9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItbGlua3tjb2xvcjojOTk5fS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLWxpbms6aG92ZXJ7Y29sb3I6I2ZmZn0ubmF2YmFyLWludmVyc2UgLmRpdmlkZXItdmVydGljYWx7Ym9yZGVyLXJpZ2h0LWNvbG9yOiMyMjI7Ym9yZGVyLWxlZnQtY29sb3I6IzExMX0ubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bi5vcGVuPi5kcm9wZG93bi10b2dnbGUsLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUsLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24ub3Blbi5hY3RpdmU+LmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzExMX0ubmF2YmFyLWludmVyc2UgLm5hdiBsaS5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlIC5jYXJldHtib3JkZXItdG9wLWNvbG9yOiM5OTk7Ym9yZGVyLWJvdHRvbS1jb2xvcjojOTk5fS5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLm9wZW4+LmRyb3Bkb3duLXRvZ2dsZSAuY2FyZXQsLm5hdmJhci1pbnZlcnNlIC5uYXYgbGkuZHJvcGRvd24uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0LC5uYXZiYXItaW52ZXJzZSAubmF2IGxpLmRyb3Bkb3duLm9wZW4uYWN0aXZlPi5kcm9wZG93bi10b2dnbGUgLmNhcmV0e2JvcmRlci10b3AtY29sb3I6I2ZmZjtib3JkZXItYm90dG9tLWNvbG9yOiNmZmZ9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnl7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM1MTUxNTE7Ym9yZGVyLWNvbG9yOiMxMTE7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpOy1tb3otYm94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjEpLDAgMXB4IDAgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KTtib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSksMCAxcHggMCByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpOy13ZWJraXQtdHJhbnNpdGlvbjpub25lOy1tb3otdHJhbnNpdGlvbjpub25lOy1vLXRyYW5zaXRpb246bm9uZTt0cmFuc2l0aW9uOm5vbmV9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnk6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojY2NjfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojY2NjfS5uYXZiYXItaW52ZXJzZSAubmF2YmFyLXNlYXJjaCAuc2VhcmNoLXF1ZXJ5Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNjY2N9Lm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnk6Zm9jdXMsLm5hdmJhci1pbnZlcnNlIC5uYXZiYXItc2VhcmNoIC5zZWFyY2gtcXVlcnkuZm9jdXNlZHtwYWRkaW5nOjVweCAxNXB4O2NvbG9yOiMzMzM7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MDtvdXRsaW5lOjA7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAzcHggcmdiYSgwLDAsMCwwLjE1KTstbW96LWJveC1zaGFkb3c6MCAwIDNweCByZ2JhKDAsMCwwLDAuMTUpO2JveC1zaGFkb3c6MCAwIDNweCByZ2JhKDAsMCwwLDAuMTUpfS5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcntjb2xvcjojZmZmO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojMGUwZTBlOypiYWNrZ3JvdW5kLWNvbG9yOiMwNDA0MDQ7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzE1MTUxNSksdG8oIzA0MDQwNCkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMxNTE1MTUsIzA0MDQwNCk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMxNTE1MTUsIzA0MDQwNCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMxNTE1MTUsIzA0MDQwNCk7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzE1MTUxNSwjMDQwNDA0KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtib3JkZXItY29sb3I6IzA0MDQwNCAjMDQwNDA0ICMwMDA7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4xKSByZ2JhKDAsMCwwLDAuMSkgcmdiYSgwLDAsMCwwLjI1KTtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjE1MTUxNScsZW5kQ29sb3JzdHI9JyNmZjA0MDQwNCcsR3JhZGllbnRUeXBlPTApO2ZpbHRlcjpwcm9naWQ6ZHhpbWFnZXRyYW5zZm9ybS5taWNyb3NvZnQuZ3JhZGllbnQoZW5hYmxlZD1mYWxzZSl9Lm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyOmhvdmVyLC5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcjphY3RpdmUsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyLmFjdGl2ZSwubmF2YmFyLWludmVyc2UgLmJ0bi1uYXZiYXIuZGlzYWJsZWQsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyW2Rpc2FibGVkXXtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzA0MDQwNDsqYmFja2dyb3VuZC1jb2xvcjojMDAwfS5uYXZiYXItaW52ZXJzZSAuYnRuLW5hdmJhcjphY3RpdmUsLm5hdmJhci1pbnZlcnNlIC5idG4tbmF2YmFyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAgXDl9LmJyZWFkY3J1bWJ7cGFkZGluZzo4cHggMTVweDttYXJnaW46MCAwIDIwcHg7bGlzdC1zdHlsZTpub25lO2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LmJyZWFkY3J1bWIgbGl7ZGlzcGxheTppbmxpbmUtYmxvY2s7KmRpc3BsYXk6aW5saW5lO3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZjsqem9vbToxfS5icmVhZGNydW1iIC5kaXZpZGVye3BhZGRpbmc6MCA1cHg7Y29sb3I6I2NjY30uYnJlYWRjcnVtYiAuYWN0aXZle2NvbG9yOiM5OTl9LnBhZ2luYXRpb257aGVpZ2h0OjQwcHg7bWFyZ2luOjIwcHggMH0ucGFnaW5hdGlvbiB1bHtkaXNwbGF5OmlubGluZS1ibG9jazsqZGlzcGxheTppbmxpbmU7bWFyZ2luLWJvdHRvbTowO21hcmdpbi1sZWZ0OjA7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRpdXM6M3B4Oyp6b29tOjE7LXdlYmtpdC1ib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpOy1tb3otYm94LXNoYWRvdzowIDFweCAycHggcmdiYSgwLDAsMCwwLjA1KTtib3gtc2hhZG93OjAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMDUpfS5wYWdpbmF0aW9uIGxpe2Rpc3BsYXk6aW5saW5lfS5wYWdpbmF0aW9uIGEsLnBhZ2luYXRpb24gc3BhbntmbG9hdDpsZWZ0O3BhZGRpbmc6MCAxNHB4O2xpbmUtaGVpZ2h0OjM4cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgI2RkZDtib3JkZXItbGVmdC13aWR0aDowfS5wYWdpbmF0aW9uIGE6aG92ZXIsLnBhZ2luYXRpb24gLmFjdGl2ZSBhLC5wYWdpbmF0aW9uIC5hY3RpdmUgc3BhbntiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjV9LnBhZ2luYXRpb24gLmFjdGl2ZSBhLC5wYWdpbmF0aW9uIC5hY3RpdmUgc3Bhbntjb2xvcjojOTk5O2N1cnNvcjpkZWZhdWx0fS5wYWdpbmF0aW9uIC5kaXNhYmxlZCBzcGFuLC5wYWdpbmF0aW9uIC5kaXNhYmxlZCBhLC5wYWdpbmF0aW9uIC5kaXNhYmxlZCBhOmhvdmVye2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0ucGFnaW5hdGlvbiBsaTpmaXJzdC1jaGlsZCBhLC5wYWdpbmF0aW9uIGxpOmZpcnN0LWNoaWxkIHNwYW57Ym9yZGVyLWxlZnQtd2lkdGg6MXB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHggMCAwIDNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4IDAgMCAzcHg7Ym9yZGVyLXJhZGl1czozcHggMCAwIDNweH0ucGFnaW5hdGlvbiBsaTpsYXN0LWNoaWxkIGEsLnBhZ2luYXRpb24gbGk6bGFzdC1jaGlsZCBzcGFuey13ZWJraXQtYm9yZGVyLXJhZGl1czowIDNweCAzcHggMDstbW96LWJvcmRlci1yYWRpdXM6MCAzcHggM3B4IDA7Ym9yZGVyLXJhZGl1czowIDNweCAzcHggMH0ucGFnaW5hdGlvbi1jZW50ZXJlZHt0ZXh0LWFsaWduOmNlbnRlcn0ucGFnaW5hdGlvbi1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS5wYWdlcnttYXJnaW46MjBweCAwO3RleHQtYWxpZ246Y2VudGVyO2xpc3Qtc3R5bGU6bm9uZTsqem9vbToxfS5wYWdlcjpiZWZvcmUsLnBhZ2VyOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5wYWdlcjphZnRlcntjbGVhcjpib3RofS5wYWdlciBsaXtkaXNwbGF5OmlubGluZX0ucGFnZXIgYXtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOjVweCAxNHB4O2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNkZGQ7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjE1cHg7LW1vei1ib3JkZXItcmFkaXVzOjE1cHg7Ym9yZGVyLXJhZGl1czoxNXB4fS5wYWdlciBhOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNX0ucGFnZXIgLm5leHQgYXtmbG9hdDpyaWdodH0ucGFnZXIgLnByZXZpb3VzIGF7ZmxvYXQ6bGVmdH0ucGFnZXIgLmRpc2FibGVkIGEsLnBhZ2VyIC5kaXNhYmxlZCBhOmhvdmVye2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5tb2RhbC1vcGVuIC5kcm9wZG93bi1tZW51e3otaW5kZXg6MjA1MH0ubW9kYWwtb3BlbiAuZHJvcGRvd24ub3Blbnsqei1pbmRleDoyMDUwfS5tb2RhbC1vcGVuIC5wb3BvdmVye3otaW5kZXg6MjA2MH0ubW9kYWwtb3BlbiAudG9vbHRpcHt6LWluZGV4OjIwODB9Lm1vZGFsLWJhY2tkcm9we3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO3otaW5kZXg6MTA0MDtiYWNrZ3JvdW5kLWNvbG9yOiMwMDB9Lm1vZGFsLWJhY2tkcm9wLmZhZGV7b3BhY2l0eTowfS5tb2RhbC1iYWNrZHJvcCwubW9kYWwtYmFja2Ryb3AuZmFkZS5pbntvcGFjaXR5Oi44O2ZpbHRlcjphbHBoYShvcGFjaXR5PTgwKX0ubW9kYWx7cG9zaXRpb246Zml4ZWQ7dG9wOjUwJTtsZWZ0OjUwJTt6LWluZGV4OjEwNTA7d2lkdGg6NTYwcHg7bWFyZ2luOi0yNTBweCAwIDAgLTI4MHB4O292ZXJmbG93OmF1dG87YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggc29saWQgIzk5OTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC4zKTsqYm9yZGVyOjFweCBzb2xpZCAjOTk5Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweDstd2Via2l0LWJveC1zaGFkb3c6MCAzcHggN3B4IHJnYmEoMCwwLDAsMC4zKTstbW96LWJveC1zaGFkb3c6MCAzcHggN3B4IHJnYmEoMCwwLDAsMC4zKTtib3gtc2hhZG93OjAgM3B4IDdweCByZ2JhKDAsMCwwLDAuMyk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7LW1vei1iYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7YmFja2dyb3VuZC1jbGlwOnBhZGRpbmctYm94fS5tb2RhbC5mYWRle3RvcDotMjUlOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXIsdG9wIC4zcyBlYXNlLW91dDstbW96LXRyYW5zaXRpb246b3BhY2l0eSAuM3MgbGluZWFyLHRvcCAuM3MgZWFzZS1vdXQ7LW8tdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXIsdG9wIC4zcyBlYXNlLW91dDt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGxpbmVhcix0b3AgLjNzIGVhc2Utb3V0fS5tb2RhbC5mYWRlLmlue3RvcDo1MCV9Lm1vZGFsLWhlYWRlcntwYWRkaW5nOjlweCAxNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlZWV9Lm1vZGFsLWhlYWRlciAuY2xvc2V7bWFyZ2luLXRvcDoycHh9Lm1vZGFsLWhlYWRlciBoM3ttYXJnaW46MDtsaW5lLWhlaWdodDozMHB4fS5tb2RhbC1ib2R5e21heC1oZWlnaHQ6NDAwcHg7cGFkZGluZzoxNXB4O292ZXJmbG93LXk6YXV0b30ubW9kYWwtZm9ybXttYXJnaW4tYm90dG9tOjB9Lm1vZGFsLWZvb3RlcntwYWRkaW5nOjE0cHggMTVweCAxNXB4O21hcmdpbi1ib3R0b206MDt0ZXh0LWFsaWduOnJpZ2h0O2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtib3JkZXItdG9wOjFweCBzb2xpZCAjZGRkOy13ZWJraXQtYm9yZGVyLXJhZGl1czowIDAgNnB4IDZweDstbW96LWJvcmRlci1yYWRpdXM6MCAwIDZweCA2cHg7Ym9yZGVyLXJhZGl1czowIDAgNnB4IDZweDsqem9vbToxOy13ZWJraXQtYm94LXNoYWRvdzppbnNldCAwIDFweCAwICNmZmY7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgI2ZmZjtib3gtc2hhZG93Omluc2V0IDAgMXB4IDAgI2ZmZn0ubW9kYWwtZm9vdGVyOmJlZm9yZSwubW9kYWwtZm9vdGVyOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS5tb2RhbC1mb290ZXI6YWZ0ZXJ7Y2xlYXI6Ym90aH0ubW9kYWwtZm9vdGVyIC5idG4rLmJ0bnttYXJnaW4tYm90dG9tOjA7bWFyZ2luLWxlZnQ6NXB4fS5tb2RhbC1mb290ZXIgLmJ0bi1ncm91cCAuYnRuKy5idG57bWFyZ2luLWxlZnQ6LTFweH0udG9vbHRpcHtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMzA7ZGlzcGxheTpibG9jaztwYWRkaW5nOjVweDtmb250LXNpemU6MTFweDtvcGFjaXR5OjA7ZmlsdGVyOmFscGhhKG9wYWNpdHk9MCk7dmlzaWJpbGl0eTp2aXNpYmxlfS50b29sdGlwLmlue29wYWNpdHk6Ljg7ZmlsdGVyOmFscGhhKG9wYWNpdHk9ODApfS50b29sdGlwLnRvcHttYXJnaW4tdG9wOi0zcHh9LnRvb2x0aXAucmlnaHR7bWFyZ2luLWxlZnQ6M3B4fS50b29sdGlwLmJvdHRvbXttYXJnaW4tdG9wOjNweH0udG9vbHRpcC5sZWZ0e21hcmdpbi1sZWZ0Oi0zcHh9LnRvb2x0aXAtaW5uZXJ7bWF4LXdpZHRoOjIwMHB4O3BhZGRpbmc6M3B4IDhweDtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO2JhY2tncm91bmQtY29sb3I6IzAwMDstd2Via2l0LWJvcmRlci1yYWRpdXM6NHB4Oy1tb3otYm9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LnRvb2x0aXAtYXJyb3d7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXN0eWxlOnNvbGlkfS50b29sdGlwLnRvcCAudG9vbHRpcC1hcnJvd3tib3R0b206MDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotNXB4O2JvcmRlci10b3AtY29sb3I6IzAwMDtib3JkZXItd2lkdGg6NXB4IDVweCAwfS50b29sdGlwLnJpZ2h0IC50b29sdGlwLWFycm93e3RvcDo1MCU7bGVmdDowO21hcmdpbi10b3A6LTVweDtib3JkZXItcmlnaHQtY29sb3I6IzAwMDtib3JkZXItd2lkdGg6NXB4IDVweCA1cHggMH0udG9vbHRpcC5sZWZ0IC50b29sdGlwLWFycm93e3RvcDo1MCU7cmlnaHQ6MDttYXJnaW4tdG9wOi01cHg7Ym9yZGVyLWxlZnQtY29sb3I6IzAwMDtib3JkZXItd2lkdGg6NXB4IDAgNXB4IDVweH0udG9vbHRpcC5ib3R0b20gLnRvb2x0aXAtYXJyb3d7dG9wOjA7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTVweDtib3JkZXItYm90dG9tLWNvbG9yOiMwMDA7Ym9yZGVyLXdpZHRoOjAgNXB4IDVweH0ucG9wb3Zlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7ei1pbmRleDoxMDEwO2Rpc3BsYXk6bm9uZTt3aWR0aDoyMzZweDtwYWRkaW5nOjFweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlcjoxcHggc29saWQgcmdiYSgwLDAsMCwwLjIpOy13ZWJraXQtYm9yZGVyLXJhZGl1czo2cHg7LW1vei1ib3JkZXItcmFkaXVzOjZweDtib3JkZXItcmFkaXVzOjZweDstd2Via2l0LWJveC1zaGFkb3c6MCA1cHggMTBweCByZ2JhKDAsMCwwLDAuMik7LW1vei1ib3gtc2hhZG93OjAgNXB4IDEwcHggcmdiYSgwLDAsMCwwLjIpO2JveC1zaGFkb3c6MCA1cHggMTBweCByZ2JhKDAsMCwwLDAuMik7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3g7LW1vei1iYWNrZ3JvdW5kLWNsaXA6cGFkZGluZztiYWNrZ3JvdW5kLWNsaXA6cGFkZGluZy1ib3h9LnBvcG92ZXIudG9we21hcmdpbi1ib3R0b206MTBweH0ucG9wb3Zlci5yaWdodHttYXJnaW4tbGVmdDoxMHB4fS5wb3BvdmVyLmJvdHRvbXttYXJnaW4tdG9wOjEwcHh9LnBvcG92ZXIubGVmdHttYXJnaW4tcmlnaHQ6MTBweH0ucG9wb3Zlci10aXRsZXtwYWRkaW5nOjhweCAxNHB4O21hcmdpbjowO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtd2VpZ2h0Om5vcm1hbDtsaW5lLWhlaWdodDoxOHB4O2JhY2tncm91bmQtY29sb3I6I2Y3ZjdmNztib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZWJlYmViOy13ZWJraXQtYm9yZGVyLXJhZGl1czo1cHggNXB4IDAgMDstbW96LWJvcmRlci1yYWRpdXM6NXB4IDVweCAwIDA7Ym9yZGVyLXJhZGl1czo1cHggNXB4IDAgMH0ucG9wb3Zlci1jb250ZW50e3BhZGRpbmc6OXB4IDE0cHh9LnBvcG92ZXItY29udGVudCBwLC5wb3BvdmVyLWNvbnRlbnQgdWwsLnBvcG92ZXItY29udGVudCBvbHttYXJnaW4tYm90dG9tOjB9LnBvcG92ZXIgLmFycm93LC5wb3BvdmVyIC5hcnJvdzphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDowO2hlaWdodDowO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWR9LnBvcG92ZXIgLmFycm93OmFmdGVye3otaW5kZXg6LTE7Y29udGVudDoiIn0ucG9wb3Zlci50b3AgLmFycm93e2JvdHRvbTotMTBweDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotMTBweDtib3JkZXItdG9wLWNvbG9yOiNmZmY7Ym9yZGVyLXdpZHRoOjEwcHggMTBweCAwfS5wb3BvdmVyLnRvcCAuYXJyb3c6YWZ0ZXJ7Ym90dG9tOi0xcHg7bGVmdDotMTFweDtib3JkZXItdG9wLWNvbG9yOnJnYmEoMCwwLDAsMC4yNSk7Ym9yZGVyLXdpZHRoOjExcHggMTFweCAwfS5wb3BvdmVyLnJpZ2h0IC5hcnJvd3t0b3A6NTAlO2xlZnQ6LTEwcHg7bWFyZ2luLXRvcDotMTBweDtib3JkZXItcmlnaHQtY29sb3I6I2ZmZjtib3JkZXItd2lkdGg6MTBweCAxMHB4IDEwcHggMH0ucG9wb3Zlci5yaWdodCAuYXJyb3c6YWZ0ZXJ7Ym90dG9tOi0xMXB4O2xlZnQ6LTFweDtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgwLDAsMCwwLjI1KTtib3JkZXItd2lkdGg6MTFweCAxMXB4IDExcHggMH0ucG9wb3Zlci5ib3R0b20gLmFycm93e3RvcDotMTBweDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotMTBweDtib3JkZXItYm90dG9tLWNvbG9yOiNmZmY7Ym9yZGVyLXdpZHRoOjAgMTBweCAxMHB4fS5wb3BvdmVyLmJvdHRvbSAuYXJyb3c6YWZ0ZXJ7dG9wOi0xcHg7bGVmdDotMTFweDtib3JkZXItYm90dG9tLWNvbG9yOnJnYmEoMCwwLDAsMC4yNSk7Ym9yZGVyLXdpZHRoOjAgMTFweCAxMXB4fS5wb3BvdmVyLmxlZnQgLmFycm93e3RvcDo1MCU7cmlnaHQ6LTEwcHg7bWFyZ2luLXRvcDotMTBweDtib3JkZXItbGVmdC1jb2xvcjojZmZmO2JvcmRlci13aWR0aDoxMHB4IDAgMTBweCAxMHB4fS5wb3BvdmVyLmxlZnQgLmFycm93OmFmdGVye3JpZ2h0Oi0xcHg7Ym90dG9tOi0xMXB4O2JvcmRlci1sZWZ0LWNvbG9yOnJnYmEoMCwwLDAsMC4yNSk7Ym9yZGVyLXdpZHRoOjExcHggMCAxMXB4IDExcHh9LnRodW1ibmFpbHN7bWFyZ2luLWxlZnQ6LTIwcHg7bGlzdC1zdHlsZTpub25lOyp6b29tOjF9LnRodW1ibmFpbHM6YmVmb3JlLC50aHVtYm5haWxzOmFmdGVye2Rpc3BsYXk6dGFibGU7bGluZS1oZWlnaHQ6MDtjb250ZW50OiIifS50aHVtYm5haWxzOmFmdGVye2NsZWFyOmJvdGh9LnJvdy1mbHVpZCAudGh1bWJuYWlsc3ttYXJnaW4tbGVmdDowfS50aHVtYm5haWxzPmxpe2Zsb2F0OmxlZnQ7bWFyZ2luLWJvdHRvbToyMHB4O21hcmdpbi1sZWZ0OjIwcHh9LnRodW1ibmFpbHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6NHB4O2xpbmUtaGVpZ2h0OjIwcHg7Ym9yZGVyOjFweCBzb2xpZCAjZGRkOy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4wNTUpOy1tb3otYm94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwwLjA1NSk7Ym94LXNoYWRvdzowIDFweCAzcHggcmdiYSgwLDAsMCwwLjA1NSk7LXdlYmtpdC10cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXQ7LW1vei10cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXQ7LW8tdHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246YWxsIC4ycyBlYXNlLWluLW91dH1hLnRodW1ibmFpbDpob3Zlcntib3JkZXItY29sb3I6IzA4Yzstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggNHB4IHJnYmEoMCwxMDUsMjE0LDAuMjUpOy1tb3otYm94LXNoYWRvdzowIDFweCA0cHggcmdiYSgwLDEwNSwyMTQsMC4yNSk7Ym94LXNoYWRvdzowIDFweCA0cHggcmdiYSgwLDEwNSwyMTQsMC4yNSl9LnRodW1ibmFpbD5pbWd7ZGlzcGxheTpibG9jazttYXgtd2lkdGg6MTAwJTttYXJnaW4tcmlnaHQ6YXV0bzttYXJnaW4tbGVmdDphdXRvfS50aHVtYm5haWwgLmNhcHRpb257cGFkZGluZzo5cHg7Y29sb3I6IzU1NX0ubGFiZWwsLmJhZGdle2ZvbnQtc2l6ZToxMS44NDRweDtmb250LXdlaWdodDpib2xkO2xpbmUtaGVpZ2h0OjE0cHg7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIC0xcHggMCByZ2JhKDAsMCwwLDAuMjUpO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtiYWNrZ3JvdW5kLWNvbG9yOiM5OTl9LmxhYmVse3BhZGRpbmc6MXB4IDRweCAycHg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjNweDstbW96LWJvcmRlci1yYWRpdXM6M3B4O2JvcmRlci1yYWRpdXM6M3B4fS5iYWRnZXtwYWRkaW5nOjFweCA5cHggMnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo5cHg7LW1vei1ib3JkZXItcmFkaXVzOjlweDtib3JkZXItcmFkaXVzOjlweH1hLmxhYmVsOmhvdmVyLGEuYmFkZ2U6aG92ZXJ7Y29sb3I6I2ZmZjt0ZXh0LWRlY29yYXRpb246bm9uZTtjdXJzb3I6cG9pbnRlcn0ubGFiZWwtaW1wb3J0YW50LC5iYWRnZS1pbXBvcnRhbnR7YmFja2dyb3VuZC1jb2xvcjojYjk0YTQ4fS5sYWJlbC1pbXBvcnRhbnRbaHJlZl0sLmJhZGdlLWltcG9ydGFudFtocmVmXXtiYWNrZ3JvdW5kLWNvbG9yOiM5NTNiMzl9LmxhYmVsLXdhcm5pbmcsLmJhZGdlLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojZjg5NDA2fS5sYWJlbC13YXJuaW5nW2hyZWZdLC5iYWRnZS13YXJuaW5nW2hyZWZde2JhY2tncm91bmQtY29sb3I6I2M2NzYwNX0ubGFiZWwtc3VjY2VzcywuYmFkZ2Utc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiM0Njg4NDd9LmxhYmVsLXN1Y2Nlc3NbaHJlZl0sLmJhZGdlLXN1Y2Nlc3NbaHJlZl17YmFja2dyb3VuZC1jb2xvcjojMzU2NjM1fS5sYWJlbC1pbmZvLC5iYWRnZS1pbmZve2JhY2tncm91bmQtY29sb3I6IzNhODdhZH0ubGFiZWwtaW5mb1tocmVmXSwuYmFkZ2UtaW5mb1tocmVmXXtiYWNrZ3JvdW5kLWNvbG9yOiMyZDY5ODd9LmxhYmVsLWludmVyc2UsLmJhZGdlLWludmVyc2V7YmFja2dyb3VuZC1jb2xvcjojMzMzfS5sYWJlbC1pbnZlcnNlW2hyZWZdLC5iYWRnZS1pbnZlcnNlW2hyZWZde2JhY2tncm91bmQtY29sb3I6IzFhMWExYX0uYnRuIC5sYWJlbCwuYnRuIC5iYWRnZXtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LTFweH0uYnRuLW1pbmkgLmxhYmVsLC5idG4tbWluaSAuYmFkZ2V7dG9wOjB9QC13ZWJraXQta2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVze2Zyb217YmFja2dyb3VuZC1wb3NpdGlvbjo0MHB4IDB9dG97YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9fUAtbW96LWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlc3tmcm9te2JhY2tncm91bmQtcG9zaXRpb246NDBweCAwfXRve2JhY2tncm91bmQtcG9zaXRpb246MCAwfX1ALW1zLWtleWZyYW1lcyBwcm9ncmVzcy1iYXItc3RyaXBlc3tmcm9te2JhY2tncm91bmQtcG9zaXRpb246NDBweCAwfXRve2JhY2tncm91bmQtcG9zaXRpb246MCAwfX1ALW8ta2V5ZnJhbWVzIHByb2dyZXNzLWJhci1zdHJpcGVze2Zyb217YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9dG97YmFja2dyb3VuZC1wb3NpdGlvbjo0MHB4IDB9fUBrZXlmcmFtZXMgcHJvZ3Jlc3MtYmFyLXN0cmlwZXN7ZnJvbXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjQwcHggMH10b3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH19LnByb2dyZXNze2hlaWdodDoyMHB4O21hcmdpbi1ib3R0b206MjBweDtvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjojZjdmN2Y3O2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCNmNWY1ZjUsI2Y5ZjlmOSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oI2Y1ZjVmNSksdG8oI2Y5ZjlmOSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCNmNWY1ZjUsI2Y5ZjlmOSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCNmNWY1ZjUsI2Y5ZjlmOSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCNmNWY1ZjUsI2Y5ZjlmOSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjRweDstbW96LWJvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1yYWRpdXM6NHB4O2ZpbHRlcjpwcm9naWQ6ZHhpbWFnZXRyYW5zZm9ybS5taWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZjVmNWY1JyxlbmRDb2xvcnN0cj0nI2ZmZjlmOWY5JyxHcmFkaWVudFR5cGU9MCk7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSk7LW1vei1ib3gtc2hhZG93Omluc2V0IDAgMXB4IDJweCByZ2JhKDAsMCwwLDAuMSk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAycHggcmdiYSgwLDAsMCwwLjEpfS5wcm9ncmVzcyAuYmFye2Zsb2F0OmxlZnQ7d2lkdGg6MDtoZWlnaHQ6MTAwJTtmb250LXNpemU6MTJweDtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3RleHQtc2hhZG93OjAgLTFweCAwIHJnYmEoMCwwLDAsMC4yNSk7YmFja2dyb3VuZC1jb2xvcjojMGU5MGQyO2JhY2tncm91bmQtaW1hZ2U6LW1vei1saW5lYXItZ3JhZGllbnQodG9wLCMxNDliZGYsIzA0ODBiZSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWdyYWRpZW50KGxpbmVhciwwIDAsMCAxMDAlLGZyb20oIzE0OWJkZiksdG8oIzA0ODBiZSkpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1saW5lYXItZ3JhZGllbnQodG9wLCMxNDliZGYsIzA0ODBiZSk7YmFja2dyb3VuZC1pbWFnZTotby1saW5lYXItZ3JhZGllbnQodG9wLCMxNDliZGYsIzA0ODBiZSk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCMxNDliZGYsIzA0ODBiZSk7YmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7ZmlsdGVyOnByb2dpZDpkeGltYWdldHJhbnNmb3JtLm1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZmYxNDliZGYnLGVuZENvbG9yc3RyPScjZmYwNDgwYmUnLEdyYWRpZW50VHlwZT0wKTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwwLjE1KTstbW96LWJveC1zaGFkb3c6aW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwwLjE1KTtib3gtc2hhZG93Omluc2V0IDAgLTFweCAwIHJnYmEoMCwwLDAsMC4xNSk7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtdHJhbnNpdGlvbjp3aWR0aCAuNnMgZWFzZTstbW96LXRyYW5zaXRpb246d2lkdGggLjZzIGVhc2U7LW8tdHJhbnNpdGlvbjp3aWR0aCAuNnMgZWFzZTt0cmFuc2l0aW9uOndpZHRoIC42cyBlYXNlfS5wcm9ncmVzcyAuYmFyKy5iYXJ7LXdlYmtpdC1ib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgwLDAsMCwwLjE1KSxpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpOy1tb3otYm94LXNoYWRvdzppbnNldCAxcHggMCAwIHJnYmEoMCwwLDAsMC4xNSksaW5zZXQgMCAtMXB4IDAgcmdiYSgwLDAsMCwwLjE1KTtib3gtc2hhZG93Omluc2V0IDFweCAwIDAgcmdiYSgwLDAsMCwwLjE1KSxpbnNldCAwIC0xcHggMCByZ2JhKDAsMCwwLDAuMTUpfS5wcm9ncmVzcy1zdHJpcGVkIC5iYXJ7YmFja2dyb3VuZC1jb2xvcjojMTQ5YmRmO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAxMDAlLDEwMCUgMCxjb2xvci1zdG9wKDAuMjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjI1LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSx0cmFuc3BhcmVudCksdG8odHJhbnNwYXJlbnQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpOy13ZWJraXQtYmFja2dyb3VuZC1zaXplOjQwcHggNDBweDstbW96LWJhY2tncm91bmQtc2l6ZTo0MHB4IDQwcHg7LW8tYmFja2dyb3VuZC1zaXplOjQwcHggNDBweDtiYWNrZ3JvdW5kLXNpemU6NDBweCA0MHB4fS5wcm9ncmVzcy5hY3RpdmUgLmJhcnstd2Via2l0LWFuaW1hdGlvbjpwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7LW1vei1hbmltYXRpb246cHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlOy1tcy1hbmltYXRpb246cHJvZ3Jlc3MtYmFyLXN0cmlwZXMgMnMgbGluZWFyIGluZmluaXRlOy1vLWFuaW1hdGlvbjpwcm9ncmVzcy1iYXItc3RyaXBlcyAycyBsaW5lYXIgaW5maW5pdGU7YW5pbWF0aW9uOnByb2dyZXNzLWJhci1zdHJpcGVzIDJzIGxpbmVhciBpbmZpbml0ZX0ucHJvZ3Jlc3MtZGFuZ2VyIC5iYXIsLnByb2dyZXNzIC5iYXItZGFuZ2Vye2JhY2tncm91bmQtY29sb3I6I2RkNTE0YztiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KHRvcCwjZWU1ZjViLCNjNDNjMzUpO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAwLDAgMTAwJSxmcm9tKCNlZTVmNWIpLHRvKCNjNDNjMzUpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwjZWU1ZjViLCNjNDNjMzUpO2JhY2tncm91bmQtaW1hZ2U6LW8tbGluZWFyLWdyYWRpZW50KHRvcCwjZWU1ZjViLCNjNDNjMzUpO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjZWU1ZjViLCNjNDNjMzUpO2JhY2tncm91bmQtcmVwZWF0OnJlcGVhdC14O2ZpbHRlcjpwcm9naWQ6ZHhpbWFnZXRyYW5zZm9ybS5taWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZWU1ZjViJyxlbmRDb2xvcnN0cj0nI2ZmYzQzYzM1JyxHcmFkaWVudFR5cGU9MCl9LnByb2dyZXNzLWRhbmdlci5wcm9ncmVzcy1zdHJpcGVkIC5iYXIsLnByb2dyZXNzLXN0cmlwZWQgLmJhci1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojZWU1ZjViO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAxMDAlLDEwMCUgMCxjb2xvci1zdG9wKDAuMjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjI1LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSx0cmFuc3BhcmVudCksdG8odHJhbnNwYXJlbnQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpfS5wcm9ncmVzcy1zdWNjZXNzIC5iYXIsLnByb2dyZXNzIC5iYXItc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiM1ZWI5NWU7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzYyYzQ2MiwjNTdhOTU3KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjNjJjNDYyKSx0bygjNTdhOTU3KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzYyYzQ2MiwjNTdhOTU3KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzYyYzQ2MiwjNTdhOTU3KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzYyYzQ2MiwjNTdhOTU3KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjYyYzQ2MicsZW5kQ29sb3JzdHI9JyNmZjU3YTk1NycsR3JhZGllbnRUeXBlPTApfS5wcm9ncmVzcy1zdWNjZXNzLnByb2dyZXNzLXN0cmlwZWQgLmJhciwucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojNjJjNDYyO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAxMDAlLDEwMCUgMCxjb2xvci1zdG9wKDAuMjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjI1LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSx0cmFuc3BhcmVudCksdG8odHJhbnNwYXJlbnQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpfS5wcm9ncmVzcy1pbmZvIC5iYXIsLnByb2dyZXNzIC5iYXItaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiM0YmIxY2Y7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIzViYzBkZSwjMzM5YmI5KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjNWJjMGRlKSx0bygjMzM5YmI5KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIzViYzBkZSwjMzM5YmI5KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsIzViYzBkZSwjMzM5YmI5KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIzViYzBkZSwjMzM5YmI5KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZjViYzBkZScsZW5kQ29sb3JzdHI9JyNmZjMzOWJiOScsR3JhZGllbnRUeXBlPTApfS5wcm9ncmVzcy1pbmZvLnByb2dyZXNzLXN0cmlwZWQgLmJhciwucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLWluZm97YmFja2dyb3VuZC1jb2xvcjojNWJjMGRlO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAxMDAlLDEwMCUgMCxjb2xvci1zdG9wKDAuMjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjI1LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSx0cmFuc3BhcmVudCksdG8odHJhbnNwYXJlbnQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpfS5wcm9ncmVzcy13YXJuaW5nIC5iYXIsLnByb2dyZXNzIC5iYXItd2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNmYWE3MzI7YmFja2dyb3VuZC1pbWFnZTotbW96LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZiYjQ1MCwjZjg5NDA2KTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwwIDEwMCUsZnJvbSgjZmJiNDUwKSx0bygjZjg5NDA2KSk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsI2ZiYjQ1MCwjZjg5NDA2KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCh0b3AsI2ZiYjQ1MCwjZjg5NDA2KTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sI2ZiYjQ1MCwjZjg5NDA2KTtiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDtmaWx0ZXI6cHJvZ2lkOmR4aW1hZ2V0cmFuc2Zvcm0ubWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNmZmZiYjQ1MCcsZW5kQ29sb3JzdHI9JyNmZmY4OTQwNicsR3JhZGllbnRUeXBlPTApfS5wcm9ncmVzcy13YXJuaW5nLnByb2dyZXNzLXN0cmlwZWQgLmJhciwucHJvZ3Jlc3Mtc3RyaXBlZCAuYmFyLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojZmJiNDUwO2JhY2tncm91bmQtaW1hZ2U6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsMCAxMDAlLDEwMCUgMCxjb2xvci1zdG9wKDAuMjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjI1LHRyYW5zcGFyZW50KSxjb2xvci1zdG9wKDAuNSx0cmFuc3BhcmVudCksY29sb3Itc3RvcCgwLjUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSksY29sb3Itc3RvcCgwLjc1LHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkpLGNvbG9yLXN0b3AoMC43NSx0cmFuc3BhcmVudCksdG8odHJhbnNwYXJlbnQpKTtiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1tb3otbGluZWFyLWdyYWRpZW50KDQ1ZGVnLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgMjUlLHRyYW5zcGFyZW50IDI1JSx0cmFuc3BhcmVudCA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA1MCUscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSA3NSUsdHJhbnNwYXJlbnQgNzUlLHRyYW5zcGFyZW50KTtiYWNrZ3JvdW5kLWltYWdlOi1vLWxpbmVhci1ncmFkaWVudCg0NWRlZyxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDI1JSx0cmFuc3BhcmVudCAyNSUsdHJhbnNwYXJlbnQgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNTAlLHJnYmEoMjU1LDI1NSwyNTUsMC4xNSkgNzUlLHRyYW5zcGFyZW50IDc1JSx0cmFuc3BhcmVudCk7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoNDVkZWcscmdiYSgyNTUsMjU1LDI1NSwwLjE1KSAyNSUsdHJhbnNwYXJlbnQgMjUlLHRyYW5zcGFyZW50IDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDUwJSxyZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIDc1JSx0cmFuc3BhcmVudCA3NSUsdHJhbnNwYXJlbnQpfS5hY2NvcmRpb257bWFyZ2luLWJvdHRvbToyMHB4fS5hY2NvcmRpb24tZ3JvdXB7bWFyZ2luLWJvdHRvbToycHg7Ym9yZGVyOjFweCBzb2xpZCAjZTVlNWU1Oy13ZWJraXQtYm9yZGVyLXJhZGl1czo0cHg7LW1vei1ib3JkZXItcmFkaXVzOjRweDtib3JkZXItcmFkaXVzOjRweH0uYWNjb3JkaW9uLWhlYWRpbmd7Ym9yZGVyLWJvdHRvbTowfS5hY2NvcmRpb24taGVhZGluZyAuYWNjb3JkaW9uLXRvZ2dsZXtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6OHB4IDE1cHh9LmFjY29yZGlvbi10b2dnbGV7Y3Vyc29yOnBvaW50ZXJ9LmFjY29yZGlvbi1pbm5lcntwYWRkaW5nOjlweCAxNXB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNlNWU1ZTV9LmNhcm91c2Vse3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi1ib3R0b206MjBweDtsaW5lLWhlaWdodDoxfS5jYXJvdXNlbC1pbm5lcntwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbn0uY2Fyb3VzZWwgLml0ZW17cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpub25lOy13ZWJraXQtdHJhbnNpdGlvbjouNnMgZWFzZS1pbi1vdXQgbGVmdDstbW96LXRyYW5zaXRpb246LjZzIGVhc2UtaW4tb3V0IGxlZnQ7LW8tdHJhbnNpdGlvbjouNnMgZWFzZS1pbi1vdXQgbGVmdDt0cmFuc2l0aW9uOi42cyBlYXNlLWluLW91dCBsZWZ0fS5jYXJvdXNlbCAuaXRlbT5pbWd7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDoxfS5jYXJvdXNlbCAuYWN0aXZlLC5jYXJvdXNlbCAubmV4dCwuY2Fyb3VzZWwgLnByZXZ7ZGlzcGxheTpibG9ja30uY2Fyb3VzZWwgLmFjdGl2ZXtsZWZ0OjB9LmNhcm91c2VsIC5uZXh0LC5jYXJvdXNlbCAucHJldntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlfS5jYXJvdXNlbCAubmV4dHtsZWZ0OjEwMCV9LmNhcm91c2VsIC5wcmV2e2xlZnQ6LTEwMCV9LmNhcm91c2VsIC5uZXh0LmxlZnQsLmNhcm91c2VsIC5wcmV2LnJpZ2h0e2xlZnQ6MH0uY2Fyb3VzZWwgLmFjdGl2ZS5sZWZ0e2xlZnQ6LTEwMCV9LmNhcm91c2VsIC5hY3RpdmUucmlnaHR7bGVmdDoxMDAlfS5jYXJvdXNlbC1jb250cm9se3Bvc2l0aW9uOmFic29sdXRlO3RvcDo0MCU7bGVmdDoxNXB4O3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLXRvcDotMjBweDtmb250LXNpemU6NjBweDtmb250LXdlaWdodDoxMDA7bGluZS1oZWlnaHQ6MzBweDtjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO2JhY2tncm91bmQ6IzIyMjtib3JkZXI6M3B4IHNvbGlkICNmZmY7LXdlYmtpdC1ib3JkZXItcmFkaXVzOjIzcHg7LW1vei1ib3JkZXItcmFkaXVzOjIzcHg7Ym9yZGVyLXJhZGl1czoyM3B4O29wYWNpdHk6LjU7ZmlsdGVyOmFscGhhKG9wYWNpdHk9NTApfS5jYXJvdXNlbC1jb250cm9sLnJpZ2h0e3JpZ2h0OjE1cHg7bGVmdDphdXRvfS5jYXJvdXNlbC1jb250cm9sOmhvdmVye2NvbG9yOiNmZmY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7b3BhY2l0eTouOTtmaWx0ZXI6YWxwaGEob3BhY2l0eT05MCl9LmNhcm91c2VsLWNhcHRpb257cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7cGFkZGluZzoxNXB4O2JhY2tncm91bmQ6IzMzMztiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsMC43NSl9LmNhcm91c2VsLWNhcHRpb24gaDQsLmNhcm91c2VsLWNhcHRpb24gcHtsaW5lLWhlaWdodDoyMHB4O2NvbG9yOiNmZmZ9LmNhcm91c2VsLWNhcHRpb24gaDR7bWFyZ2luOjAgMCA1cHh9LmNhcm91c2VsLWNhcHRpb24gcHttYXJnaW4tYm90dG9tOjB9Lmhlcm8tdW5pdHtwYWRkaW5nOjYwcHg7bWFyZ2luLWJvdHRvbTozMHB4O2JhY2tncm91bmQtY29sb3I6I2VlZTstd2Via2l0LWJvcmRlci1yYWRpdXM6NnB4Oy1tb3otYm9yZGVyLXJhZGl1czo2cHg7Ym9yZGVyLXJhZGl1czo2cHh9Lmhlcm8tdW5pdCBoMXttYXJnaW4tYm90dG9tOjA7Zm9udC1zaXplOjYwcHg7bGluZS1oZWlnaHQ6MTtsZXR0ZXItc3BhY2luZzotMXB4O2NvbG9yOmluaGVyaXR9Lmhlcm8tdW5pdCBwe2ZvbnQtc2l6ZToxOHB4O2ZvbnQtd2VpZ2h0OjIwMDtsaW5lLWhlaWdodDozMHB4O2NvbG9yOmluaGVyaXR9LnB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHR9LnB1bGwtbGVmdHtmbG9hdDpsZWZ0fS5oaWRle2Rpc3BsYXk6bm9uZX0uc2hvd3tkaXNwbGF5OmJsb2NrfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59LmFmZml4e3Bvc2l0aW9uOmZpeGVkfS5jbGVhcntjbGVhcjpib3RoO3Zpc2liaWxpdHk6aGlkZGVufS5jbGVhciBocntkaXNwbGF5Om5vbmV9LnNlY3Rpb24gcCwuc2VjdGlvbiBwLC5zZWN0aW9uIGR0LC5zZWN0aW9uIGR0e21hcmdpbi1yaWdodDo3cHg7bWFyZ2luLWxlZnQ6N3B4fSNvaGxvaHttYXJnaW4tYm90dG9tOjEwcHh9I3Bvd2VyZWRCeXt0ZXh0LWFsaWduOmNlbnRlcn1hLmV4dGVybmFsTGlua3tiYWNrZ3JvdW5kOnVybCgnLi4vaW1hZ2VzL2V4dGVybmFsLnBuZycpIHJpZ2h0IGNlbnRlciBuby1yZXBlYXQ7cGFkZGluZy1yaWdodDoxOHB4fWEubmV3V2luZG93e2JhY2tncm91bmQ6dXJsKCcuLi9pbWFnZXMvd2luZG93LW5ldy5wbmcnKSByaWdodCBjZW50ZXIgbm8tcmVwZWF0O3BhZGRpbmctcmlnaHQ6MThweH1hLmV4dGVybmFsTGlua1tocmVmXj1odHRwXXtiYWNrZ3JvdW5kOnVybCgnLi4vaW1hZ2VzL2ludGVybmV0LXdlYi1icm93c2VyLnBuZycpIHJpZ2h0IGNlbnRlciBuby1yZXBlYXQ7cGFkZGluZy1yaWdodDoxOHB4fWEuZXh0ZXJuYWxMaW5rW2hyZWYkPSIuYXNjIl17YmFja2dyb3VuZDp1cmwoJy4uL2ltYWdlcy9hY2Nlc3Nvcmllcy10ZXh0LWVkaXRvci5wbmcnKSByaWdodCBjZW50ZXIgbm8tcmVwZWF0O3BhZGRpbmctcmlnaHQ6MThweH1hLmV4dGVybmFsTGlua1tocmVmJD0iLmpwZyJdLGEuZXh0ZXJuYWxMaW5rW2hyZWYkPSIuanBlZyJdLGEuZXh0ZXJuYWxMaW5rW2hyZWYkPSIuZ2lmIl0sYS5leHRlcm5hbExpbmtbaHJlZiQ9Ii5wbmciXXtiYWNrZ3JvdW5kOnVybCgnLi4vaW1hZ2VzL2ltYWdlLXgtZ2VuZXJpYy5wbmcnKSByaWdodCBjZW50ZXIgbm8tcmVwZWF0O3BhZGRpbmctcmlnaHQ6MThweH1hLmV4dGVybmFsTGlua1tocmVmJD0iLnRhci5neiJdLGEuZXh0ZXJuYWxMaW5rW2hyZWYkPSIuemlwIl17YmFja2dyb3VuZDp1cmwoJy4uL2ltYWdlcy9wYWNrYWdlLXgtZ2VuZXJpYy5wbmcnKSByaWdodCBjZW50ZXIgbm8tcmVwZWF0O3BhZGRpbmctcmlnaHQ6MThweH1hLmV4dGVybmFsTGlua1tocmVmJD0iLm1kNSJdLGEuZXh0ZXJuYWxMaW5rW2hyZWYkPSIuc2hhMSJde2JhY2tncm91bmQ6dXJsKCcuLi9pbWFnZXMvZG9jdW1lbnQtcHJvcGVydGllcy5wbmcnKSByaWdodCBjZW50ZXIgbm8tcmVwZWF0O3BhZGRpbmctcmlnaHQ6MThweH1hLmV4dGVybmFsTGlua1tocmVmXj1odHRwc117YmFja2dyb3VuZDp1cmwoJy4uL2ltYWdlcy9hcHBsaWNhdGlvbi1jZXJ0aWZpY2F0ZS5wbmcnKSByaWdodCBjZW50ZXIgbm8tcmVwZWF0O3BhZGRpbmctcmlnaHQ6MThweH1hLmV4dGVybmFsTGlua1tocmVmXj1maWxlXXtiYWNrZ3JvdW5kOnVybCgnLi4vaW1hZ2VzL2RyaXZlLWhhcmRkaXNrLnBuZycpIHJpZ2h0IGNlbnRlciBuby1yZXBlYXQ7cGFkZGluZy1yaWdodDoxOHB4fWEuZXh0ZXJuYWxMaW5rW2hyZWZePWZ0cF17YmFja2dyb3VuZDp1cmwoJy4uL2ltYWdlcy9uZXR3b3JrLXNlcnZlci5wbmcnKSByaWdodCBjZW50ZXIgbm8tcmVwZWF0O3BhZGRpbmctcmlnaHQ6MThweH1hLmV4dGVybmFsTGlua1tocmVmXj1tYWlsdG9de2JhY2tncm91bmQ6dXJsKCcuLi9pbWFnZXMvY29udGFjdC1uZXcucG5nJykgcmlnaHQgY2VudGVyIG5vLXJlcGVhdDtwYWRkaW5nLXJpZ2h0OjE4cHh9bGkubm9uZXtsaXN0LXN0eWxlOm5vbmV9LnNlYXJjaC1xdWVyeXtiYWNrZ3JvdW5kLWltYWdlOnVybChodHRwOi8vd3d3Lmdvb2dsZS5jb20vY3NlL2ludGwvZW4vaW1hZ2VzL2dvb2dsZV9jdXN0b21fc2VhcmNoX3dhdGVybWFyay5naWYpO2JhY2tncm91bmQtYXR0YWNobWVudDppbml0aWFsO2JhY2tncm91bmQtb3JpZ2luOmluaXRpYWw7YmFja2dyb3VuZC1jbGlwOmluaXRpYWw7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtcG9zaXRpb246MCA1MCU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0IG5vLXJlcGVhdDt3aWR0aDo5NSV9Ym9keS50b3BCYXJFbmFibGVke3BhZGRpbmctdG9wOjYwcHh9Ym9keS50b3BCYXJEaXNhYmxlZHtwYWRkaW5nLXRvcDoyMHB4fS5idWlsdEJ5e2Rpc3BsYXk6YmxvY2t9aW1nLmJ1aWx0Qnl7bWFyZ2luOjEwcHggYXV0b30jc2VhcmNoLWZvcm17bWFyZ2luLWxlZnQ6OXB4O21hcmdpbi1yaWdodDo5cHh9Lmhlcm8tdW5pdCBoMntmb250LXNpemU6NjBweH10dHtwYWRkaW5nOjAgM3B4IDJweDtmb250LWZhbWlseTpNb25hY28sQW5kYWxlIE1vbm8sQ291cmllciBOZXcsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxMnB4Oy13ZWJraXQtYm9yZGVyLXJhZGl1czozcHg7LW1vei1ib3JkZXItcmFkaXVzOjNweDtib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kLWNvbG9yOiNmZWU5Y2M7Y29sb3I6cmdiYSgwLDAsMCwwLjc1KTtwYWRkaW5nOjFweCAzcHh9bGl7Y29sb3I6IzQwNDA0MH10YWJsZS56ZWJyYS1zdHJpcGVke2JhY2tncm91bmQtY29sb3I6I0ZGRn0uZm9vdGVye2JhY2tncm91bmQtY29sb3I6I0VFRX0uc2lkZWJhci1uYXZ7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDowfS5zaWRlYmFyLW5hdiAuaWNvbi1jaGV2cm9uLXJpZ2h0LC5zaWRlYmFyLW5hdiAuaWNvbi1jaGV2cm9uLWRvd257bWFyZ2luLXRvcDoycHg7bWFyZ2luLXJpZ2h0Oi02cHg7ZmxvYXQ6cmlnaHQ7b3BhY2l0eTouMjV9LnBsbntjb2xvcjojMDAwfUBtZWRpYSBzY3JlZW57LnN0cntjb2xvcjojMDgwfS5rd2R7Y29sb3I6IzAwOH0uY29te2NvbG9yOiM4MDB9LnR5cHtjb2xvcjojNjA2fS5saXR7Y29sb3I6IzA2Nn0ucHVuLC5vcG4sLmNsb3tjb2xvcjojNjYwfS50YWd7Y29sb3I6IzAwOH0uYXRue2NvbG9yOiM2MDZ9LmF0dntjb2xvcjojMDgwfS5kZWMsLnZhcntjb2xvcjojNjA2fS5mdW57Y29sb3I6cmVkfX1AbWVkaWEgcHJpbnQscHJvamVjdGlvbnsuc3Rye2NvbG9yOiMwNjB9Lmt3ZHtjb2xvcjojMDA2O2ZvbnQtd2VpZ2h0OmJvbGR9LmNvbXtjb2xvcjojNjAwO2ZvbnQtc3R5bGU6aXRhbGljfS50eXB7Y29sb3I6IzQwNDtmb250LXdlaWdodDpib2xkfS5saXR7Y29sb3I6IzA0NH0ucHVuLC5vcG4sLmNsb3tjb2xvcjojNDQwfS50YWd7Y29sb3I6IzAwNjtmb250LXdlaWdodDpib2xkfS5hdG57Y29sb3I6IzQwNH0uYXR2e2NvbG9yOiMwNjB9fXByZS5wcmV0dHlwcmludHtwYWRkaW5nOjJweDtib3JkZXI6MXB4IHNvbGlkICM4ODh9b2wubGluZW51bXN7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MDtwYWRkaW5nLWxlZnQ6MTVweH1saS5MMSxsaS5MMyxsaS5MNSxsaS5MNyxsaS5MOXtiYWNrZ3JvdW5kOiNlZWV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvY3NzL3ByaW50LmNzcyBiL2Nzcy9wcmludC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNkMDJkOQotLS0gL2Rldi9udWxsCisrKyBiL2Nzcy9wcmludC5jc3MKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLyogJElkOiBwcmludC5jc3MgMTIwMTg3MSAyMDExLTExLTE0IDIwOjE4OjI0WiBzaW1vbmV0cmlwb2RpICQgKi8KKworI2Jhbm5lciwgI2Zvb3RlciwgI2xlZnRjb2wsICNicmVhZGNydW1icywgLmRvY3MgI3RvYywgLmRvY3MgLmNvdXJ0ZXN5bGlua3MsICNsZWZ0Q29sdW1uLCAjbmF2Q29sdW1uIHtkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7fQorI2JvZHlDb2x1bW4sIGJvZHkuZG9jcyBkaXYuZG9jcyB7bWFyZ2luOiAwICFpbXBvcnRhbnQ7Ym9yZGVyOiBub25lICFpbXBvcnRhbnR9CmRpZmYgLS1naXQgYS9jc3Mvc2l0ZS5jc3MgYi9jc3Mvc2l0ZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1ZTdlMgotLS0gL2Rldi9udWxsCisrKyBiL2Nzcy9zaXRlLmNzcwpAQCAtMCwwICsxIEBACisvKiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgZmlsZSB3aXRoIHlvdXIgb3duIHN0eWxlcyAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RhdGEtdHlwZXMucG5nIGIvZGF0YS10eXBlcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhMTkwNAotLS0gL2Rldi9udWxsCisrKyBiL2RhdGEtdHlwZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2d1aWRlLWNsYXNzLWRpYWdyYW0ucG5nIGIvZ3VpZGUtY2xhc3MtZGlhZ3JhbS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E1MTIzOQotLS0gL2Rldi9udWxsCisrKyBiL2d1aWRlLWNsYXNzLWRpYWdyYW0ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2d1aWRlLWluc3RhbmNlLWdyYXBoLnBuZyBiL2d1aWRlLWluc3RhbmNlLWdyYXBoLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmM4ZjgyCi0tLSAvZGV2L251bGwKKysrIGIvZ3VpZGUtaW5zdGFuY2UtZ3JhcGgucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvQnJpZGdlLUhpdmUuaHRtbCBiL2hpdmUvQnJpZGdlLUhpdmUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yOWYwMmEyCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9CcmlkZ2UtSGl2ZS5odG1sCkBAIC0wLDAgKzEsMTA0IEBACis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+Cis8IS0tIEdlbmVyYXRlZCBieSBBcGFjaGUgTWF2ZW4gRG94aWEgU2l0ZSBSZW5kZXJlciAxLjMgYXQgSnVsIDksIDIwMTUgLS0+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+CisgIDxoZWFkPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgorICAgIDx0aXRsZT5BcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgLSBIaXZlIEF0bGFzIEJyaWRnZTwvdGl0bGU+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0iYWxsIj4KKyAgICAgIEBpbXBvcnQgdXJsKCIuL2Nzcy9tYXZlbi1iYXNlLmNzcyIpOworICAgICAgQGltcG9ydCB1cmwoIi4vY3NzL21hdmVuLXRoZW1lLmNzcyIpOworICAgICAgQGltcG9ydCB1cmwoIi4vY3NzL3NpdGUuY3NzIik7CisgICAgPC9zdHlsZT4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3ByaW50LmNzcyIgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJwcmludCIgLz4KKyAgICA8bWV0YSBuYW1lPSJEYXRlLVJldmlzaW9uLXl5eXltbWRkIiBjb250ZW50PSIyMDE1MDcwOSIgLz4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbiIgLz4KKyAgICAgICAgCisgICAgICAgIDwvaGVhZD4KKyAgPGJvZHkgY2xhc3M9ImNvbXBvc2l0ZSI+CisgICAgPGRpdiBpZD0iYmFubmVyIj4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iYmFubmVyTGVmdCI+CisgICAgICAgICAgICAgICAgQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIj4KKyAgICAgICAgPGhyLz4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9ImJyZWFkY3J1bWJzIj4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ieGxlZnQiPgorICAgICAgICA8c3BhbiBpZD0icHVibGlzaERhdGUiPkxhc3QgUHVibGlzaGVkOiAyMDE1LTA3LTA5PC9zcGFuPgorICAgICAgICAgICAgICAgICAgJm5ic3A7fCA8c3BhbiBpZD0icHJvamVjdFZlcnNpb24iPlZlcnNpb246IDAuNi1pbmN1YmF0aW5nLVNOQVBTSE9UPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPGRpdiBjbGFzcz0ieHJpZ2h0Ij4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4vIiB0aXRsZT0iQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIj5BcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2U8L2E+CisgICAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIj4KKyAgICAgICAgPGhyLz4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9ImxlZnRDb2x1bW4iPgorICAgICAgPGRpdiBpZD0ibmF2Y29sdW1uIj4KKyAgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDU+UGFyZW50IFByb2plY3Q8L2g1PgorICAgICAgICAgICAgICAgICAgPHVsPgorICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJub25lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4vLi4vaW5kZXguaHRtbCIgdGl0bGU9ImFwYWNoZS1hdGxhcyI+YXBhY2hlLWF0bGFzPC9hPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy8iIHRpdGxlPSJCdWlsdCBieSBNYXZlbiIgY2xhc3M9InBvd2VyZWRCeSI+CisgICAgICAgIDxpbWcgY2xhc3M9InBvd2VyZWRCeSIgYWx0PSJCdWlsdCBieSBNYXZlbiIgc3JjPSIuL2ltYWdlcy9sb2dvcy9tYXZlbi1mZWF0aGVyLnBuZyIgLz4KKyAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgICAgPGRpdiBpZD0iYm9keUNvbHVtbiI+CisgICAgICA8ZGl2IGlkPSJjb250ZW50Qm94Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+PGgyPkhpdmUgQXRsYXMgQnJpZGdlPGEgbmFtZT0iSGl2ZV9BdGxhc19CcmlkZ2UiPjwvYT48L2gyPjxwPkhpdmUgbWV0YWRhdGEgY2FuIGJlIG1vZGVsbGVkIGluIEF0bGFzIHVzaW5nIGl0cyBUeXBlIFN5c3RlbS4gVGhlIGRlZmF1bHQgbW9kZWxsaW5nIGlzIGF2YWlsYWJsZSBpbiBvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvci4gSXQgZGVmaW5lcyB0aGUgZm9sbG93aW5nIHR5cGVzOjwvcD48dWw+PGxpPmhpdmVfcmVzb3VyY2VfdHlwZShFbnVtVHlwZSkgLSBbSkFSLCBGSUxFLCBBUkNISVZFXTwvbGk+PGxpPmhpdmVfcHJpbmNpcGFsX3R5cGUoRW51bVR5cGUpIC0gW1VTRVIsIFJPTEUsIEdST1VQXTwvbGk+PGxpPmhpdmVfZnVuY3Rpb25fdHlwZShFbnVtVHlwZSkgLSBbSkFWQV08L2xpPjxsaT5oaXZlX29yZGVyKFN0cnVjdFR5cGUpIC0gW2NvbCwgb3JkZXJdPC9saT48bGk+aGl2ZV9yZXNvdXJjZXVyaShTdHJ1Y3RUeXBlKSAtIFtyZXNvdXJjZVR5cGUsIHVyaV08L2xpPjxsaT5oaXZlX3NlcmRlKFN0cnVjdFR5cGUpIC0gW25hbWUsIHNlcmlhbGl6YXRpb25MaWIsIHBhcmFtZXRlcnNdPC9saT48bGk+aGl2ZV9wcm9jZXNzKENsYXNzVHlwZSkgLSBbbmFtZSwgc3RhcnRUaW1lLCBlbmRUaW1lLCB1c2VyTmFtZSwgc291cmNlVGFibGVOYW1lcywgdGFyZ2V0VGFibGVOYW1lcywgcXVlcnlUZXh0LCBxdWVyeVBsYW4sIHF1ZXJ5SWQsIHF1ZXJ5R3JhcGhdPC9saT48bGk+aGl2ZV9mdW5jdGlvbihDbGFzc1R5cGUpIC0gW2Z1bmN0aW9uTmFtZSwgZGJOYW1lLCBjbGFzc05hbWUsIG93bmVyTmFtZSwgb3duZXJUeXBlLCBjcmVhdGVUaW1lLCBmdW5jdGlvblR5cGUsIHJlc291cmNlVXJpc108L2xpPjxsaT5oaXZlX3R5cGUoQ2xhc3NUeXBlKSAtIFtuYW1lLCB0eXBlMSwgdHlwZTIsIGZpZWxkc108L2xpPjxsaT5oaXZlX3BhcnRpdGlvbihDbGFzc1R5cGUpIC0gW3ZhbHVlcywgZGJOYW1lLCB0YWJsZU5hbWUsIGNyZWF0ZVRpbWUsIGxhc3RBY2Nlc3NUaW1lLCBzZCwgcGFyYW1ldGVyc108L2xpPjxsaT5oaXZlX3N0b3JhZ2VkZXNjKENsYXNzVHlwZSkgLSBbY29scywgbG9jYXRpb24sIGlucHV0Rm9ybWF0LCBvdXRwdXRGb3JtYXQsIGNvbXByZXNzZWQsIG51bUJ1Y2tldHMsIHNlcmRlSW5mbywgYnVja2V0Q29scywgc29ydENvbHMsIHBhcmFtZXRlcnMsIHN0b3JlZEFzU3ViRGlyZWN0b3JpZXNdPC9saT48bGk+aGl2ZV9pbmRleChDbGFzc1R5cGUpIC0gW2luZGV4TmFtZSwgaW5kZXhIYW5kbGVyQ2xhc3MsIGRiTmFtZSwgY3JlYXRlVGltZSwgbGFzdEFjY2Vzc1RpbWUsIG9yaWdUYWJsZU5hbWUsIGluZGV4VGFibGVOYW1lLCBzZCwgcGFyYW1ldGVycywgZGVmZXJyZWRSZWJ1aWxkXTwvbGk+PGxpPmhpdmVfcm9sZShDbGFzc1R5cGUpIC0gW3JvbGVOYW1lLCBjcmVhdGVUaW1lLCBvd25lck5hbWVdPC9saT48bGk+aGl2ZV9jb2x1bW4oQ2xhc3NUeXBlKSAtIFtuYW1lLCB0eXBlLCBjb21tZW50XTwvbGk+PGxpPmhpdmVfZGIoQ2xhc3NUeXBlKSAtIFtuYW1lLCBkZXNjcmlwdGlvbiwgbG9jYXRpb25VcmksIHBhcmFtZXRlcnMsIG93bmVyTmFtZSwgb3duZXJUeXBlXTwvbGk+PGxpPmhpdmVfdGFibGUoQ2xhc3NUeXBlKSAtIFtuYW1lLCBkYk5hbWUsIG93bmVyLCBjcmVhdGVUaW1lLCBsYXN0QWNjZXNzVGltZSwgcmV0ZW50aW9uLCBzZCwgcGFydGl0aW9uS2V5cywgY29sdW1ucywgcGFyYW1ldGVycywgdmlld09yaWdpbmFsVGV4dCwgdmlld0V4cGFuZGVkVGV4dCwgdGFibGVUeXBlLCB0ZW1wb3JhcnldPC9saT48L3VsPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iPjxoMz5JbXBvcnRpbmcgSGl2ZSBNZXRhZGF0YTxhIG5hbWU9IkltcG9ydGluZ19IaXZlX01ldGFkYXRhIj48L2E+PC9oMz48cD5vcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UgaW1wb3J0cyB0aGUgaGl2ZSBtZXRhZGF0YSBpbnRvIEF0bGFzIHVzaW5nIHRoZSB0eXBlc3lzdGVtIGRlZmluZWQgaW4gb3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IuIGltcG9ydC1oaXZlLnNoIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZmFjaWxpdGF0ZSB0aGlzLiBTZXQtdXAgdGhlIGZvbGxvd2luZyBjb25maWdzIGluIGhpdmUtc2l0ZS54bWwgb2YgeW91ciBoaXZlIHNldC11cCBhbmQgc2V0IGVudmlyb25tZW50IHZhcmlhYmxlIEhJVkVfQ09ORklHIHRvIHRoZSBoaXZlIGNvbmYgZGlyZWN0b3J5OjwvcD48dWw+PGxpPkF0bGFzIGVuZHBvaW50IC0gQWRkIHRoZSBmb2xsb3dpbmcgcHJvcGVydHkgd2l0aCB0aGUgQXRsYXMgZW5kcG9pbnQgZm9yIHlvdXIgc2V0LXVwPC9saT48L3VsPjxkaXYgY2xhc3M9InNvdXJjZSI+PHByZT4KKyZsdDtwcm9wZXJ0eSZndDsKKyAgJmx0O25hbWUmZ3Q7YXRsYXMucmVzdC5hZGRyZXNzJmx0Oy9uYW1lJmd0OworICAmbHQ7dmFsdWUmZ3Q7aHR0cDovL2xvY2FsaG9zdDoyMTAwMC8mbHQ7L3ZhbHVlJmd0OworJmx0Oy9wcm9wZXJ0eSZndDsKKyZsdDtwcm9wZXJ0eSZndDsKKyAgJmx0O25hbWUmZ3Q7YXRsYXMuY2x1c3Rlci5uYW1lJmx0Oy9uYW1lJmd0OworICAmbHQ7dmFsdWUmZ3Q7cHJpbWFyeSZsdDsvdmFsdWUmZ3Q7CismbHQ7L3Byb3BlcnR5Jmd0OworCis8L3ByZT48L2Rpdj48cD5Vc2FnZTogJmx0O2RnaSBwYWNrYWdlJmd0Oy9iaW4vaW1wb3J0LWhpdmUuc2guIFRoZSBsb2dzIGFyZSBpbiAmbHQ7ZGdpIHBhY2thZ2UmZ3Q7L2xvZ3MvaW1wb3J0LWhpdmUubG9nPC9wPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iPjxoMz5IaXZlIEhvb2s8YSBuYW1lPSJIaXZlX0hvb2siPjwvYT48L2gzPjxwPkhpdmUgc3VwcG9ydHMgbGlzdGVuZXJzIG9uIGhpdmUgY29tbWFuZCBleGVjdXRpb24gdXNpbmcgaGl2ZSBob29rcy4gVGhpcyBpcyB1c2VkIHRvIGFkZC91cGRhdGUvcmVtb3ZlIGVudGl0aWVzIGluIEF0bGFzIHVzaW5nIHRoZSBtb2RlbCBkZWZpbmVkIGluIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yLiBUaGUgaG9vayBzdWJtaXRzIHRoZSByZXF1ZXN0IHRvIGEgdGhyZWFkIHBvb2wgZXhlY3V0b3IgdG8gYXZvaWQgYmxvY2tpbmcgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLiBGb2xsb3cgdGhlIHRoZXNlIGluc3RydWN0aW9ucyBpbiB5b3VyIGhpdmUgc2V0LXVwIHRvIGFkZCBoaXZlIGhvb2sgZm9yIEF0bGFzOjwvcD48dWw+PGxpPkFkZCBvcmcuYXBhY2hlLmF0bGFzLmhpdmUuaG9vay5IaXZlSG9vayBhcyBwb3N0IGV4ZWN1dGlvbiBob29rIGluIGhpdmUtc2l0ZS54bWw8L2xpPjwvdWw+PGRpdiBjbGFzcz0ic291cmNlIj48cHJlPgorJmx0O3Byb3BlcnR5Jmd0OworICAmbHQ7bmFtZSZndDtoaXZlLmV4ZWMucG9zdC5ob29rcyZsdDsvbmFtZSZndDsKKyAgJmx0O3ZhbHVlJmd0O29yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rLkhpdmVIb29rJmx0Oy92YWx1ZSZndDsKKyZsdDsvcHJvcGVydHkmZ3Q7CisKKzwvcHJlPjwvZGl2PjxwPjwvcD48dWw+PGxpPkFkZCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgaW4gaGl2ZS1zdGUueG1sIHdpdGggdGhlIEF0bGFzIGVuZHBvaW50IGZvciB5b3VyIHNldC11cDwvbGk+PC91bD48ZGl2IGNsYXNzPSJzb3VyY2UiPjxwcmU+CismbHQ7cHJvcGVydHkmZ3Q7CisgICZsdDtuYW1lJmd0O2F0bGFzLnJlc3QuYWRkcmVzcyZsdDsvbmFtZSZndDsKKyAgJmx0O3ZhbHVlJmd0O2h0dHA6Ly9sb2NhbGhvc3Q6MjEwMDAvJmx0Oy92YWx1ZSZndDsKKyZsdDsvcHJvcGVydHkmZ3Q7CismbHQ7cHJvcGVydHkmZ3Q7CisgICZsdDtuYW1lJmd0O2F0bGFzLmNsdXN0ZXIubmFtZSZsdDsvbmFtZSZndDsKKyAgJmx0O3ZhbHVlJmd0O3ByaW1hcnkmbHQ7L3ZhbHVlJmd0OworJmx0Oy9wcm9wZXJ0eSZndDsKKworPC9wcmU+PC9kaXY+PHA+PC9wPjx1bD48bGk+QWRkICdleHBvcnQgSElWRV9BVVhfSkFSU19QQVRIPSZsdDtkZ2kgcGFja2FnZSZndDsvaG9vay9oaXZlJyBpbiBoaXZlLWVudi5zaDwvbGk+PC91bD48cD5UaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgaW4gaGl2ZS1zaXRlLnhtbCBjb250cm9sIHRoZSB0aHJlYWQgcG9vbCBkZXRhaWxzOjwvcD48dWw+PGxpPmF0bGFzLmhvb2suaGl2ZS5taW5UaHJlYWRzIC0gY29yZSBudW1iZXIgb2YgdGhyZWFkcy4gZGVmYXVsdCA1PC9saT48bGk+YXRsYXMuaG9vay5oaXZlLm1heFRocmVhZHMgLSBtYXhpbXVtIG51bWJlciBvZiB0aHJlYWRzLiBkZWZhdWx0IDU8L2xpPjxsaT5hdGxhcy5ob29rLmhpdmUua2VlcEFsaXZlVGltZSAtIGtlZXAgYWxpdmUgdGltZSBpbiBtc2Vjcy4gZGVmYXVsdCAxMDwvbGk+PGxpPmF0bGFzLmhvb2suaGl2ZS5zeW5jaHJvbm91cyAtIGJvb2xlYW4sIHRydWUgdG8gcnVuIHRoZSBob29rIHN5bmNocm9ub3VzbHkuIGRlZmF1bHQgZmFsc2U8L2xpPjwvdWw+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiI+PGgzPkxpbWl0YXRpb25zPGEgbmFtZT0iTGltaXRhdGlvbnMiPjwvYT48L2gzPjxwPjwvcD48dWw+PGxpPlNpbmNlIGRhdGFiYXNlIG5hbWUsIHRhYmxlIG5hbWUgYW5kIGNvbHVtbiBuYW1lcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSBpbiBoaXZlLCB0aGUgY29ycmVzcG9uZGluZyBuYW1lcyBpbiBlbnRpdGllcyBhcmUgbG93ZXJjYXNlLiBTbywgYW55IHNlYXJjaCBBUElzIHNob3VsZCB1c2UgbG93ZXJjYXNlIHdoaWxlIHF1ZXJ5aW5nIG9uIHRoZSBlbnRpdHkgbmFtZXM8L2xpPjxsaT5Pbmx5IHRoZSBmb2xsb3dpbmcgaGl2ZSBvcGVyYXRpb25zIGFyZSBjYXB0dXJlZCBieSBoaXZlIGhvb2sgY3VycmVudGx5IC0gY3JlYXRlIGRhdGFiYXNlLCBjcmVhdGUgdGFibGUsIGNyZWF0ZSB2aWV3LCBDVEFTLCBsb2FkLCBpbXBvcnQsIGV4cG9ydCwgcXVlcnksIGFsdGVyIHRhYmxlIHJlbmFtZSBhbmQgYWx0ZXIgdmlldyByZW5hbWU8L2xpPjwvdWw+PC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJjbGVhciI+CisgICAgICA8aHIvPgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9ImZvb3RlciI+CisgICAgICA8ZGl2IGNsYXNzPSJ4cmlnaHQiPgorICAgICAgICAgICAgICBDb3B5cmlnaHQgJiMxNjk7ICAgICAgICAgICAgICAgICAgICAyMDE1CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciPkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9hPi4KKyAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiPgorICAgICAgICA8aHIvPgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2hpdmUvY3NzL21hdmVuLWJhc2UuY3NzIGIvaGl2ZS9jc3MvbWF2ZW4tYmFzZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTMxNTNlOQotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvY3NzL21hdmVuLWJhc2UuY3NzCkBAIC0wLDAgKzEsMTU1IEBACitib2R5IHsKKyAgbWFyZ2luOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKK30KK2ltZyB7CisgIGJvcmRlcjpub25lOworfQordGFibGUgeworICBwYWRkaW5nOjBweDsKKyAgd2lkdGg6IDEwMCU7CisgIG1hcmdpbi1sZWZ0OiAtMnB4OworICBtYXJnaW4tcmlnaHQ6IC0ycHg7Cit9CithY3JvbnltIHsKKyAgY3Vyc29yOiBoZWxwOworICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkICNmZWI7Cit9Cit0YWJsZS5ib2R5VGFibGUgdGgsIHRhYmxlLmJvZHlUYWJsZSB0ZCB7CisgIHBhZGRpbmc6IDJweCA0cHggMnB4IDRweDsKKyAgdmVydGljYWwtYWxpZ246IHRvcDsKK30KK2Rpdi5jbGVhcnsKKyAgY2xlYXI6Ym90aDsKKyAgdmlzaWJpbGl0eTogaGlkZGVuOworfQorZGl2LmNsZWFyIGhyeworICBkaXNwbGF5OiBub25lOworfQorI2Jhbm5lckxlZnQsICNiYW5uZXJSaWdodCB7CisgIGZvbnQtc2l6ZTogeHgtbGFyZ2U7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorI2Jhbm5lckxlZnQgaW1nLCAjYmFubmVyUmlnaHQgaW1nIHsKKyAgbWFyZ2luOiAwcHg7Cit9CisueGxlZnQsICNiYW5uZXJMZWZ0IGltZyB7CisgIGZsb2F0OmxlZnQ7Cit9CisueHJpZ2h0LCAjYmFubmVyUmlnaHQgeworICBmbG9hdDpyaWdodDsKK30KKyNiYW5uZXIgeworICBwYWRkaW5nOiAwcHg7Cit9CisjYmFubmVyIGltZyB7CisgIGJvcmRlcjogbm9uZTsKK30KKyNicmVhZGNydW1icyB7CisgIHBhZGRpbmc6IDNweCAxMHB4IDNweCAxMHB4OworfQorI2xlZnRDb2x1bW4geworIHdpZHRoOiAxNzBweDsKKyBmbG9hdDpsZWZ0OworIG92ZXJmbG93OiBhdXRvOworfQorI2JvZHlDb2x1bW4geworICBtYXJnaW4tcmlnaHQ6IDEuNWVtOworICBtYXJnaW4tbGVmdDogMTk3cHg7Cit9CisjbGVnZW5kIHsKKyAgcGFkZGluZzogOHB4IDAgOHB4IDA7Cit9CisjbmF2Y29sdW1uIHsKKyAgcGFkZGluZzogOHB4IDRweCAwIDhweDsKK30KKyNuYXZjb2x1bW4gaDUgeworICBtYXJnaW46IDA7CisgIHBhZGRpbmc6IDA7CisgIGZvbnQtc2l6ZTogc21hbGw7Cit9CisjbmF2Y29sdW1uIHVsIHsKKyAgbWFyZ2luOiAwOworICBwYWRkaW5nOiAwOworICBmb250LXNpemU6IHNtYWxsOworfQorI25hdmNvbHVtbiBsaSB7CisgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKKyAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAwLjRlbTsKKyAgcGFkZGluZy1sZWZ0OiAxNnB4OworICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBvdXRzaWRlOworICBsaW5lLWhlaWdodDogMS4yZW07CisgIGZvbnQtc2l6ZTogc21hbGxlcjsKK30KKyNuYXZjb2x1bW4gbGkuZXhwYW5kZWQgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2V4cGFuZGVkLmdpZik7Cit9CisjbmF2Y29sdW1uIGxpLmNvbGxhcHNlZCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvY29sbGFwc2VkLmdpZik7Cit9CisjbmF2Y29sdW1uIGxpLm5vbmUgeworICB0ZXh0LWluZGVudDogLTFlbTsKKyAgbWFyZ2luLWxlZnQ6IDFlbTsKK30KKyNwb3dlcmVkQnkgeworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisjbmF2Y29sdW1uIGltZyB7CisgIG1hcmdpbi10b3A6IDEwcHg7CisgIG1hcmdpbi1ib3R0b206IDNweDsKK30KKyNwb3dlcmVkQnkgaW1nIHsKKyAgZGlzcGxheTpibG9jazsKKyAgbWFyZ2luOiAyMHB4IDAgMjBweCAxN3B4OworfQorI3NlYXJjaCBpbWcgeworICAgIG1hcmdpbjogMHB4OworICAgIGRpc3BsYXk6IGJsb2NrOworfQorI3NlYXJjaCAjcSwgI3NlYXJjaCAjYnRuRyB7CisgICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKKyAgICBtYXJnaW4tYm90dG9tOjEwcHg7Cit9Cisjc2VhcmNoIGZvcm0geworICAgIG1hcmdpbjogMHB4OworfQorI2xhc3RQdWJsaXNoZWQgeworICBmb250LXNpemU6IHgtc21hbGw7Cit9CisubmF2U2VjdGlvbiB7CisgIG1hcmdpbi1ib3R0b206IDJweDsKKyAgcGFkZGluZzogOHB4OworfQorLm5hdlNlY3Rpb25IZWFkIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIGZvbnQtc2l6ZTogeC1zbWFsbDsKK30KKy5zZWN0aW9uIHsKKyAgcGFkZGluZzogNHB4OworfQorI2Zvb3RlciB7CisgIHBhZGRpbmc6IDNweCAxMHB4IDNweCAxMHB4OworICBmb250LXNpemU6IHgtc21hbGw7Cit9CisjYnJlYWRjcnVtYnMgeworICBmb250LXNpemU6IHgtc21hbGw7CisgIG1hcmdpbjogMHB0OworfQorLnNvdXJjZSB7CisgIHBhZGRpbmc6IDEycHg7CisgIG1hcmdpbjogMWVtIDdweCAxZW0gN3B4OworfQorLnNvdXJjZSBwcmUgeworICBtYXJnaW46IDBweDsKKyAgcGFkZGluZzogMHB4OworfQorI25hdmNvbHVtbiBpbWcuaW1hZ2VMaW5rLCAuaW1hZ2VMaW5rIHsKKyAgcGFkZGluZy1sZWZ0OiAwcHg7CisgIHBhZGRpbmctYm90dG9tOiAwcHg7CisgIHBhZGRpbmctdG9wOiAwcHg7CisgIHBhZGRpbmctcmlnaHQ6IDJweDsKKyAgYm9yZGVyOiAwcHg7CisgIG1hcmdpbjogMHB4OworfQpkaWZmIC0tZ2l0IGEvaGl2ZS9jc3MvbWF2ZW4tdGhlbWUuY3NzIGIvaGl2ZS9jc3MvbWF2ZW4tdGhlbWUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVjMjljODkKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL2Nzcy9tYXZlbi10aGVtZS5jc3MKQEAgLTAsMCArMSwxNDEgQEAKK2JvZHkgeworICBwYWRkaW5nOiAwcHggMHB4IDEwcHggMHB4OworfQorYm9keSwgdGQsIHNlbGVjdCwgaW5wdXQsIGxpeworICBmb250LWZhbWlseTogVmVyZGFuYSwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKKyAgZm9udC1zaXplOiAxM3B4OworfQorY29kZXsKKyAgZm9udC1mYW1pbHk6IENvdXJpZXIsIG1vbm9zcGFjZTsKKyAgZm9udC1zaXplOiAxM3B4OworfQorYSB7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KK2E6bGluayB7CisgIGNvbG9yOiMzNmE7Cit9CithOnZpc2l0ZWQgIHsKKyAgY29sb3I6IzQ3YTsKK30KK2E6YWN0aXZlLCBhOmhvdmVyIHsKKyAgY29sb3I6IzY5YzsKK30KKyNsZWdlbmQgbGkuZXh0ZXJuYWxMaW5rIHsKKyAgYmFja2dyb3VuZDogdXJsKC4uL2ltYWdlcy9leHRlcm5hbC5wbmcpIGxlZnQgdG9wIG5vLXJlcGVhdDsKKyAgcGFkZGluZy1sZWZ0OiAxOHB4OworfQorYS5leHRlcm5hbExpbmssIGEuZXh0ZXJuYWxMaW5rOmxpbmssIGEuZXh0ZXJuYWxMaW5rOnZpc2l0ZWQsIGEuZXh0ZXJuYWxMaW5rOmFjdGl2ZSwgYS5leHRlcm5hbExpbms6aG92ZXIgeworICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1hZ2VzL2V4dGVybmFsLnBuZykgcmlnaHQgY2VudGVyIG5vLXJlcGVhdDsKKyAgcGFkZGluZy1yaWdodDogMThweDsKK30KKyNsZWdlbmQgbGkubmV3V2luZG93IHsKKyAgYmFja2dyb3VuZDogdXJsKC4uL2ltYWdlcy9uZXd3aW5kb3cucG5nKSBsZWZ0IHRvcCBuby1yZXBlYXQ7CisgIHBhZGRpbmctbGVmdDogMThweDsKK30KK2EubmV3V2luZG93LCBhLm5ld1dpbmRvdzpsaW5rLCBhLm5ld1dpbmRvdzp2aXNpdGVkLCBhLm5ld1dpbmRvdzphY3RpdmUsIGEubmV3V2luZG93OmhvdmVyIHsKKyAgYmFja2dyb3VuZDogdXJsKC4uL2ltYWdlcy9uZXd3aW5kb3cucG5nKSByaWdodCBjZW50ZXIgbm8tcmVwZWF0OworICBwYWRkaW5nLXJpZ2h0OiAxOHB4OworfQoraDIgeworICBwYWRkaW5nOiA0cHggNHB4IDRweCA2cHg7CisgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7CisgIGNvbG9yOiAjOTAwOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkOworICBmb250LXdlaWdodDo5MDA7CisgIGZvbnQtc2l6ZTogeC1sYXJnZTsKK30KK2gzIHsKKyAgcGFkZGluZzogNHB4IDRweCA0cHggNnB4OworICBib3JkZXI6IDFweCBzb2xpZCAjYWFhOworICBjb2xvcjogIzkwMDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zaXplOiBsYXJnZTsKK30KK2g0IHsKKyAgcGFkZGluZzogNHB4IDRweCA0cHggNnB4OworICBib3JkZXI6IDFweCBzb2xpZCAjYmJiOworICBjb2xvcjogIzkwMDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZm9udC1zaXplOiBsYXJnZTsKK30KK2g1IHsKKyAgcGFkZGluZzogNHB4IDRweCA0cHggNnB4OworICBjb2xvcjogIzkwMDsKKyAgZm9udC1zaXplOiBub3JtYWw7Cit9CitwIHsKKyAgbGluZS1oZWlnaHQ6IDEuM2VtOworICBmb250LXNpemU6IHNtYWxsOworfQorI2JyZWFkY3J1bWJzIHsKKyAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNhYWE7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYWFhOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjOworfQorI2xlZnRDb2x1bW4geworICBtYXJnaW46IDEwcHggMCAwIDVweDsKKyAgYm9yZGVyOiAxcHggc29saWQgIzk5OTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKK30KKyNuYXZjb2x1bW4gaDUgeworICBmb250LXNpemU6IHNtYWxsZXI7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYWFhYWFhOworICBwYWRkaW5nLXRvcDogMnB4OworICBjb2xvcjogIzAwMDsKK30KKwordGFibGUuYm9keVRhYmxlIHRoIHsKKyAgY29sb3I6IHdoaXRlOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmJiOworICB0ZXh0LWFsaWduOiBsZWZ0OworICBmb250LXdlaWdodDogYm9sZDsKK30KKwordGFibGUuYm9keVRhYmxlIHRoLCB0YWJsZS5ib2R5VGFibGUgdGQgeworICBmb250LXNpemU6IDFlbTsKK30KKwordGFibGUuYm9keVRhYmxlIHRyLmEgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkOworfQorCit0YWJsZS5ib2R5VGFibGUgdHIuYiB7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Cit9CisKKy5zb3VyY2UgeworICBib3JkZXI6IDFweCBzb2xpZCAjOTk5OworfQorZGwgeworICBwYWRkaW5nOiA0cHggNHB4IDRweCA2cHg7CisgIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmM7Cit9CitkdCB7CisgIGNvbG9yOiAjOTAwOworfQorI29yZ2FuaXphdGlvbkxvZ28gaW1nLCAjcHJvamVjdExvZ28gaW1nLCAjcHJvamVjdExvZ28gc3BhbnsKKyAgbWFyZ2luOiA4cHg7Cit9CisjYmFubmVyIHsKKyAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmZmY7Cit9CisuZXJyb3JtYXJrLCAud2FybmluZ21hcmssIC5kb25lbWFyaywgLmluZm9tYXJrIHsKKyAgYmFja2dyb3VuZDogdXJsKC4uL2ltYWdlcy9pY29uX2Vycm9yX3NtbC5naWYpIG5vLXJlcGVhdDsKK30KKworLndhcm5pbmdtYXJrIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9pY29uX3dhcm5pbmdfc21sLmdpZik7Cit9CisKKy5kb25lbWFyayB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvaWNvbl9zdWNjZXNzX3NtbC5naWYpOworfQorCisuaW5mb21hcmsgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1hZ2VzL2ljb25faW5mb19zbWwuZ2lmKTsKK30KKwpkaWZmIC0tZ2l0IGEvaGl2ZS9jc3MvcHJpbnQuY3NzIGIvaGl2ZS9jc3MvcHJpbnQuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYwOWQ1NDYKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL2Nzcy9wcmludC5jc3MKQEAgLTAsMCArMSw3IEBACisjYmFubmVyLCAjZm9vdGVyLCAjbGVmdGNvbCwgI2JyZWFkY3J1bWJzLCAuZG9jcyAjdG9jLCAuZG9jcyAuY291cnRlc3lsaW5rcywgI2xlZnRDb2x1bW4sICNuYXZDb2x1bW4geworCWRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKK30KKyNib2R5Q29sdW1uLCBib2R5LmRvY3MgZGl2LmRvY3MgeworCW1hcmdpbjogMCAhaW1wb3J0YW50OworCWJvcmRlcjogbm9uZSAhaW1wb3J0YW50Cit9CmRpZmYgLS1naXQgYS9oaXZlL2Nzcy9zaXRlLmNzcyBiL2hpdmUvY3NzL3NpdGUuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA1NWU3ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL2Nzcy9zaXRlLmNzcwpAQCAtMCwwICsxIEBACisvKiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgZmlsZSB3aXRoIHlvdXIgb3duIHN0eWxlcyAqLwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2hpdmUvaW1hZ2VzL2NvbGxhcHNlZC5naWYgYi9oaXZlL2ltYWdlcy9jb2xsYXBzZWQuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZlNzEwODQKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL2ltYWdlcy9jb2xsYXBzZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvaW1hZ2VzL2V4cGFuZGVkLmdpZiBiL2hpdmUvaW1hZ2VzL2V4cGFuZGVkLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZmVmM2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9pbWFnZXMvZXhwYW5kZWQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvaW1hZ2VzL2V4dGVybmFsLnBuZyBiL2hpdmUvaW1hZ2VzL2V4dGVybmFsLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zZjk5OWZjCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9pbWFnZXMvZXh0ZXJuYWwucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvaW1hZ2VzL2ljb25fZXJyb3Jfc21sLmdpZiBiL2hpdmUvaW1hZ2VzL2ljb25fZXJyb3Jfc21sLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42MTEzMmVmCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9pbWFnZXMvaWNvbl9lcnJvcl9zbWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvaW1hZ2VzL2ljb25faW5mb19zbWwuZ2lmIGIvaGl2ZS9pbWFnZXMvaWNvbl9pbmZvX3NtbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzZjYjlhZAotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvaW1hZ2VzL2ljb25faW5mb19zbWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvaW1hZ2VzL2ljb25fc3VjY2Vzc19zbWwuZ2lmIGIvaGl2ZS9pbWFnZXMvaWNvbl9zdWNjZXNzX3NtbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTJlODVhNAotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvaW1hZ2VzL2ljb25fc3VjY2Vzc19zbWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvaW1hZ2VzL2ljb25fd2FybmluZ19zbWwuZ2lmIGIvaGl2ZS9pbWFnZXMvaWNvbl93YXJuaW5nX3NtbC5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODczYmJiNQotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvaW1hZ2VzL2ljb25fd2FybmluZ19zbWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvaW1hZ2VzL2xvZ29zL2J1aWxkLWJ5LW1hdmVuLWJsYWNrLnBuZyBiL2hpdmUvaW1hZ2VzL2xvZ29zL2J1aWxkLWJ5LW1hdmVuLWJsYWNrLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45MTlmZDBmCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9pbWFnZXMvbG9nb3MvYnVpbGQtYnktbWF2ZW4tYmxhY2sucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvaW1hZ2VzL2xvZ29zL2J1aWxkLWJ5LW1hdmVuLXdoaXRlLnBuZyBiL2hpdmUvaW1hZ2VzL2xvZ29zL2J1aWxkLWJ5LW1hdmVuLXdoaXRlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43ZDQ0YzljCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9pbWFnZXMvbG9nb3MvYnVpbGQtYnktbWF2ZW4td2hpdGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvaW1hZ2VzL2xvZ29zL21hdmVuLWZlYXRoZXIucG5nIGIvaGl2ZS9pbWFnZXMvbG9nb3MvbWF2ZW4tZmVhdGhlci5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjVhZGE4MwotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvaW1hZ2VzL2xvZ29zL21hdmVuLWZlYXRoZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvaW1hZ2VzL25ld3dpbmRvdy5wbmcgYi9oaXZlL2ltYWdlcy9uZXd3aW5kb3cucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYyODdmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL2ltYWdlcy9uZXd3aW5kb3cucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2luZGV4Lmh0bWwgYi9oaXZlL3NjYWxhZG9jcy9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjYyMjFkODAKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9pbmRleC5odG1sCkBAIC0wLDAgKzEsNjUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgPHRpdGxlPkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYtaW5jdWJhdGluZy1TTkFQU0hPVCBBUEk8L3RpdGxlPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IC0gaW5jdWJhdGluZyAtIFNOQVBTSE9UIEFQSSIgLz4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNiBpbmN1YmF0aW5nIFNOQVBTSE9UIEFQSSIgLz4KKyAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KKyAgICAgICAgICAKKyAgICAgIDxsaW5rIGhyZWY9ImxpYi9pbmRleC5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+CisgICAgCisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHk+CisgICAgICA8ZGl2IGlkPSJsaWJyYXJ5Ij4KKyAgICAgICAgPGltZyBjbGFzcz0iY2xhc3MgaWNvbiIgc3JjPSJsaWIvY2xhc3MucG5nIiAvPgorICAgICAgICA8aW1nIGNsYXNzPSJ0cmFpdCBpY29uIiBzcmM9ImxpYi90cmFpdC5wbmciIC8+CisgICAgICAgIDxpbWcgY2xhc3M9Im9iamVjdCBpY29uIiBzcmM9ImxpYi9vYmplY3QucG5nIiAvPgorICAgICAgICA8aW1nIGNsYXNzPSJwYWNrYWdlIGljb24iIHNyYz0ibGliL3BhY2thZ2UucG5nIiAvPgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGlkPSJicm93c2VyIiBjbGFzcz0idWktbGF5b3V0LXdlc3QiPgorICAgICAgPGRpdiBjbGFzcz0idWktd2VzdC1jZW50ZXIiPgorICAgICAgPGRpdiBpZD0iZmlsdGVyIj4KKyAgICAgICAgICA8ZGl2IGlkPSJ0ZXh0ZmlsdGVyIj48L2Rpdj4KKyAgICAgICAgICA8ZGl2IGlkPSJsZXR0ZXJzIj48c3Bhbj4jPC9zcGFuPjxhIHRhcmdldD0idGVtcGxhdGUiIGhyZWY9ImluZGV4L2luZGV4LWEuaHRtbCI+QTwvYT48YSB0YXJnZXQ9InRlbXBsYXRlIiBocmVmPSJpbmRleC9pbmRleC1iLmh0bWwiPkI8L2E+PGEgdGFyZ2V0PSJ0ZW1wbGF0ZSIgaHJlZj0iaW5kZXgvaW5kZXgtYy5odG1sIj5DPC9hPjxzcGFuPkQ8L3NwYW4+PHNwYW4+RTwvc3Bhbj48c3Bhbj5GPC9zcGFuPjxhIHRhcmdldD0idGVtcGxhdGUiIGhyZWY9ImluZGV4L2luZGV4LWcuaHRtbCI+RzwvYT48YSB0YXJnZXQ9InRlbXBsYXRlIiBocmVmPSJpbmRleC9pbmRleC1oLmh0bWwiPkg8L2E+PGEgdGFyZ2V0PSJ0ZW1wbGF0ZSIgaHJlZj0iaW5kZXgvaW5kZXgtaS5odG1sIj5JPC9hPjxzcGFuPko8L3NwYW4+PHNwYW4+Szwvc3Bhbj48c3Bhbj5MPC9zcGFuPjxhIHRhcmdldD0idGVtcGxhdGUiIGhyZWY9ImluZGV4L2luZGV4LW0uaHRtbCI+TTwvYT48c3Bhbj5OPC9zcGFuPjxhIHRhcmdldD0idGVtcGxhdGUiIGhyZWY9ImluZGV4L2luZGV4LW8uaHRtbCI+TzwvYT48c3Bhbj5QPC9zcGFuPjxzcGFuPlE8L3NwYW4+PGEgdGFyZ2V0PSJ0ZW1wbGF0ZSIgaHJlZj0iaW5kZXgvaW5kZXgtci5odG1sIj5SPC9hPjxzcGFuPlM8L3NwYW4+PHNwYW4+VDwvc3Bhbj48YSB0YXJnZXQ9InRlbXBsYXRlIiBocmVmPSJpbmRleC9pbmRleC11Lmh0bWwiPlU8L2E+PHNwYW4+Vjwvc3Bhbj48c3Bhbj5XPC9zcGFuPjxzcGFuPlg8L3NwYW4+PHNwYW4+WTwvc3Bhbj48c3Bhbj5aPC9zcGFuPjwvZGl2PgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJwYWNrIiBpZD0idHBsIj4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPG9sIGNsYXNzPSJ0ZW1wbGF0ZXMiPjwvb2w+CisgICAgICAgICAgICA8b2wgY2xhc3M9InBhY2thZ2VzIj4gPGxpIGNsYXNzPSJwYWNrIiB0aXRsZT0ib3JnIj4KKyAgICAgICAgICAgIDxhIGNsYXNzPSJ0cGxzaG93IiBocmVmPSJvcmcvcGFja2FnZS5odG1sIiB0YXJnZXQ9InRlbXBsYXRlIj5vcmc8L2E+CisgICAgICAgICAgICA8b2wgY2xhc3M9InRlbXBsYXRlcyI+PC9vbD4KKyAgICAgICAgICAgIDxvbCBjbGFzcz0icGFja2FnZXMiPiA8bGkgY2xhc3M9InBhY2siIHRpdGxlPSJvcmcuYXBhY2hlIj4KKyAgICAgICAgICAgIDxhIGNsYXNzPSJ0cGxzaG93IiBocmVmPSJvcmcvYXBhY2hlL3BhY2thZ2UuaHRtbCIgdGFyZ2V0PSJ0ZW1wbGF0ZSI+b3JnLmFwYWNoZTwvYT4KKyAgICAgICAgICAgIDxvbCBjbGFzcz0idGVtcGxhdGVzIj48L29sPgorICAgICAgICAgICAgPG9sIGNsYXNzPSJwYWNrYWdlcyI+IDxsaSBjbGFzcz0icGFjayIgdGl0bGU9Im9yZy5hcGFjaGUuYXRsYXMiPgorICAgICAgICAgICAgPGEgY2xhc3M9InRwbHNob3ciIGhyZWY9Im9yZy9hcGFjaGUvYXRsYXMvcGFja2FnZS5odG1sIiB0YXJnZXQ9InRlbXBsYXRlIj5vcmcuYXBhY2hlLmF0bGFzPC9hPgorICAgICAgICAgICAgPG9sIGNsYXNzPSJ0ZW1wbGF0ZXMiPjwvb2w+CisgICAgICAgICAgICA8b2wgY2xhc3M9InBhY2thZ2VzIj4gPGxpIGNsYXNzPSJwYWNrIiB0aXRsZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlIj4KKyAgICAgICAgICAgIDxhIGNsYXNzPSJ0cGxzaG93IiBocmVmPSJvcmcvYXBhY2hlL2F0bGFzL2hpdmUvcGFja2FnZS5odG1sIiB0YXJnZXQ9InRlbXBsYXRlIj5vcmcuYXBhY2hlLmF0bGFzLmhpdmU8L2E+CisgICAgICAgICAgICA8b2wgY2xhc3M9InRlbXBsYXRlcyI+PC9vbD4KKyAgICAgICAgICAgIDxvbCBjbGFzcz0icGFja2FnZXMiPiA8bGkgY2xhc3M9InBhY2siIHRpdGxlPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlIj4KKyAgICAgICAgICAgIDxhIGNsYXNzPSJ0cGxzaG93IiBocmVmPSJvcmcvYXBhY2hlL2F0bGFzL2hpdmUvYnJpZGdlL3BhY2thZ2UuaHRtbCIgdGFyZ2V0PSJ0ZW1wbGF0ZSI+b3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZTwvYT4KKyAgICAgICAgICAgIDxvbCBjbGFzcz0idGVtcGxhdGVzIj48bGkgdGl0bGU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UuSGl2ZU1ldGFTdG9yZUJyaWRnZSI+PGRpdiBjbGFzcz0icGxhY2Vob2xkZXIiPjwvZGl2PjxhIGNsYXNzPSJ0cGxzaG93IiBocmVmPSJvcmcvYXBhY2hlL2F0bGFzL2hpdmUvYnJpZGdlL0hpdmVNZXRhU3RvcmVCcmlkZ2UuaHRtbCIgdGFyZ2V0PSJ0ZW1wbGF0ZSI+PHNwYW4gY2xhc3M9ImNsYXNzIj4oY2xhc3MpPC9zcGFuPjxzcGFuIGNsYXNzPSJ0cGxMaW5rIj5IaXZlTWV0YVN0b3JlQnJpZGdlPC9zcGFuPjwvYT48L2xpPjwvb2w+CisgICAgICAgICAgICA8b2wgY2xhc3M9InBhY2thZ2VzIj4gPC9vbD4KKyAgICAgICAgICA8L2xpPjxsaSBjbGFzcz0icGFjayIgdGl0bGU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rIj4KKyAgICAgICAgICAgIDxhIGNsYXNzPSJ0cGxzaG93IiBocmVmPSJvcmcvYXBhY2hlL2F0bGFzL2hpdmUvaG9vay9wYWNrYWdlLmh0bWwiIHRhcmdldD0idGVtcGxhdGUiPm9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rPC9hPgorICAgICAgICAgICAgPG9sIGNsYXNzPSJ0ZW1wbGF0ZXMiPjxsaSB0aXRsZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmhvb2suSGl2ZUhvb2siPjxkaXYgY2xhc3M9InBsYWNlaG9sZGVyIj48L2Rpdj48YSBjbGFzcz0idHBsc2hvdyIgaHJlZj0ib3JnL2FwYWNoZS9hdGxhcy9oaXZlL2hvb2svSGl2ZUhvb2suaHRtbCIgdGFyZ2V0PSJ0ZW1wbGF0ZSI+PHNwYW4gY2xhc3M9ImNsYXNzIj4oY2xhc3MpPC9zcGFuPjxzcGFuIGNsYXNzPSJ0cGxMaW5rIj5IaXZlSG9vazwvc3Bhbj48L2E+PC9saT48L29sPgorICAgICAgICAgICAgPG9sIGNsYXNzPSJwYWNrYWdlcyI+IDwvb2w+CisgICAgICAgICAgPC9saT48bGkgY2xhc3M9InBhY2siIHRpdGxlPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwiPgorICAgICAgICAgICAgPGEgY2xhc3M9InRwbHNob3ciIGhyZWY9Im9yZy9hcGFjaGUvYXRsYXMvaGl2ZS9tb2RlbC9wYWNrYWdlLmh0bWwiIHRhcmdldD0idGVtcGxhdGUiPm9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbDwvYT4KKyAgICAgICAgICAgIDxvbCBjbGFzcz0idGVtcGxhdGVzIj48bGkgdGl0bGU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yIj48ZGl2IGNsYXNzPSJwbGFjZWhvbGRlciI+PC9kaXY+PGEgY2xhc3M9InRwbHNob3ciIGhyZWY9Im9yZy9hcGFjaGUvYXRsYXMvaGl2ZS9tb2RlbC9IaXZlRGF0YU1vZGVsR2VuZXJhdG9yLmh0bWwiIHRhcmdldD0idGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJjbGFzcyI+KGNsYXNzKTwvc3Bhbj48c3BhbiBjbGFzcz0idHBsTGluayI+SGl2ZURhdGFNb2RlbEdlbmVyYXRvcjwvc3Bhbj48L2E+PC9saT48bGkgdGl0bGU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzIj48ZGl2IGNsYXNzPSJwbGFjZWhvbGRlciI+PC9kaXY+PGEgY2xhc3M9InRwbHNob3ciIGhyZWY9Im9yZy9hcGFjaGUvYXRsYXMvaGl2ZS9tb2RlbC9IaXZlRGF0YVR5cGVzLmh0bWwiIHRhcmdldD0idGVtcGxhdGUiPjxzcGFuIGNsYXNzPSJjbGFzcyI+KGNsYXNzKTwvc3Bhbj48c3BhbiBjbGFzcz0idHBsTGluayI+SGl2ZURhdGFUeXBlczwvc3Bhbj48L2E+PC9saT48L29sPgorICAgICAgICAgICAgPG9sIGNsYXNzPSJwYWNrYWdlcyI+IDwvb2w+CisgICAgICAgICAgPC9saT48L29sPgorICAgICAgICAgIDwvbGk+PC9vbD4KKyAgICAgICAgICA8L2xpPjwvb2w+CisgICAgICAgICAgPC9saT48L29sPgorICAgICAgICAgIDwvbGk+PC9vbD4KKyAgICAgICAgICA8L2Rpdj48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICAgIDxkaXYgaWQ9ImNvbnRlbnQiIGNsYXNzPSJ1aS1sYXlvdXQtY2VudGVyIj4KKyAgICAgICAgPGlmcmFtZSBpZD0idGVtcGxhdGUiIG5hbWU9InRlbXBsYXRlIiBzcmM9InBhY2thZ2UuaHRtbCI+PC9pZnJhbWU+CisgICAgICA8L2Rpdj4KKyAgICAgIDxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ibGliL2pxdWVyeS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJsaWIvanF1ZXJ5LXVpLmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImxpYi9qcXVlcnkubGF5b3V0LmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImxpYi9zY2hlZHVsZXIuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0ibGliL2luZGV4LmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImluZGV4LmpzIj48L3NjcmlwdD4KKyAgICA8L2JvZHk+CisgICAgICA8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvaGl2ZS9zY2FsYWRvY3MvaW5kZXguanMgYi9oaXZlL3NjYWxhZG9jcy9pbmRleC5qcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kZGNiOWE4Ci0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvaW5kZXguanMKQEAgLTAsMCArMSBAQAorSW5kZXguUEFDS0FHRVMgPSB7Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbCIgOiBbeyJjbGFzcyIgOiAib3JnXC9hcGFjaGVcL2F0bGFzXC9oaXZlXC9tb2RlbFwvSGl2ZURhdGFNb2RlbEdlbmVyYXRvci5odG1sIiwgIm5hbWUiIDogIm9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yIn0sIHsiY2xhc3MiIDogIm9yZ1wvYXBhY2hlXC9hdGxhc1wvaGl2ZVwvbW9kZWxcL0hpdmVEYXRhVHlwZXMuaHRtbCIsICJuYW1lIiA6ICJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFUeXBlcyJ9XSwgIm9yZy5hcGFjaGUiIDogW10sICJvcmcuYXBhY2hlLmF0bGFzIiA6IFtdLCAib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmhvb2siIDogW3siY2xhc3MiIDogIm9yZ1wvYXBhY2hlXC9hdGxhc1wvaGl2ZVwvaG9va1wvSGl2ZUhvb2suaHRtbCIsICJuYW1lIiA6ICJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuaG9vay5IaXZlSG9vayJ9XSwgIm9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UiIDogW3siY2xhc3MiIDogIm9yZ1wvYXBhY2hlXC9hdGxhc1wvaGl2ZVwvYnJpZGdlXC9IaXZlTWV0YVN0b3JlQnJpZGdlLmh0bWwiLCAibmFtZSIgOiAib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlIn1dLCAib3JnLmFwYWNoZS5hdGxhcy5oaXZlIiA6IFtdLCAib3JnIiA6IFtdfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC1hLmh0bWwgYi9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC1hLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmMzMzVjMQotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LWEuaHRtbApAQCAtMCwwICsxLDIxIEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgIDx0aXRsZT5BcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42LWluY3ViYXRpbmctU05BUFNIT1QgQVBJPC90aXRsZT4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNiAtIGluY3ViYXRpbmcgLSBTTkFQU0hPVCBBUEkiIC8+CisgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9IkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYgaW5jdWJhdGluZyBTTkFQU0hPVCBBUEkiIC8+CisgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIC8+CisgICAgICAgICAgCisgICAgICA8bGluayBocmVmPSIuLi9saWIvcmVmLWluZGV4LmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PgorICAgIAorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5PjxkaXYgY2xhc3M9ImVudHJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPmFwYWNoZTwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZyI+b3JnPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5hdGxhczwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlIj5hcGFjaGU8L2E+IDwvZGl2PgorICAgIDwvZGl2PjwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC1iLmh0bWwgYi9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC1iLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjM0YTlkOAotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LWIuaHRtbApAQCAtMCwwICsxLDE4IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgIDx0aXRsZT5BcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42LWluY3ViYXRpbmctU05BUFNIT1QgQVBJPC90aXRsZT4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNiAtIGluY3ViYXRpbmcgLSBTTkFQU0hPVCBBUEkiIC8+CisgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9IkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYgaW5jdWJhdGluZyBTTkFQU0hPVCBBUEkiIC8+CisgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIC8+CisgICAgICAgICAgCisgICAgICA8bGluayBocmVmPSIuLi9saWIvcmVmLWluZGV4LmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PgorICAgIAorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5PjxkaXYgY2xhc3M9ImVudHJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPmJyaWRnZTwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZSI+aGl2ZTwvYT4gPC9kaXY+CisgICAgPC9kaXY+PC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LWMuaHRtbCBiL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LWMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40OTAzZGEyCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtYy5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgPHRpdGxlPkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYtaW5jdWJhdGluZy1TTkFQU0hPVCBBUEk8L3RpdGxlPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IC0gaW5jdWJhdGluZyAtIFNOQVBTSE9UIEFQSSIgLz4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNiBpbmN1YmF0aW5nIFNOQVBTSE9UIEFQSSIgLz4KKyAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KKyAgICAgICAgICAKKyAgICAgIDxsaW5rIGhyZWY9Ii4uL2xpYi9yZWYtaW5kZXguY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgorICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vbGliL2pxdWVyeS5qcyI+PC9zY3JpcHQ+CisgICAgCisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHk+PGRpdiBjbGFzcz0iZW50cnkiPgorICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+Y3JlYXRlRGF0YU1vZGVsPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJvY2N1cnJlbmNlcyI+PGEgaHJlZj0iLi4vb3JnL2FwYWNoZS9hdGxhcy9oaXZlL21vZGVsL0hpdmVEYXRhTW9kZWxHZW5lcmF0b3IuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IiPkhpdmVEYXRhTW9kZWxHZW5lcmF0b3I8L2E+IDwvZGl2PgorICAgIDwvZGl2PjxkaXYgY2xhc3M9ImVudHJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPmNyZWF0ZUluc3RhbmNlPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJvY2N1cnJlbmNlcyI+PGEgaHJlZj0iLi4vb3JnL2FwYWNoZS9hdGxhcy9oaXZlL2JyaWRnZS9IaXZlTWV0YVN0b3JlQnJpZGdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UuSGl2ZU1ldGFTdG9yZUJyaWRnZSI+SGl2ZU1ldGFTdG9yZUJyaWRnZTwvYT4gPC9kaXY+CisgICAgPC9kaXY+PC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LWcuaHRtbCBiL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LWcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNjYxMjdmCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtZy5odG1sCkBAIC0wLDAgKzEsNDUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgPHRpdGxlPkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYtaW5jdWJhdGluZy1TTkFQU0hPVCBBUEk8L3RpdGxlPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IC0gaW5jdWJhdGluZyAtIFNOQVBTSE9UIEFQSSIgLz4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNiBpbmN1YmF0aW5nIFNOQVBTSE9UIEFQSSIgLz4KKyAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KKyAgICAgICAgICAKKyAgICAgIDxsaW5rIGhyZWY9Ii4uL2xpYi9yZWYtaW5kZXguY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgorICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vbGliL2pxdWVyeS5qcyI+PC9zY3JpcHQ+CisgICAgCisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHk+PGRpdiBjbGFzcz0iZW50cnkiPgorICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+Z2V0QXRsYXNDbGllbnQ8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvYnJpZGdlL0hpdmVNZXRhU3RvcmVCcmlkZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlIj5IaXZlTWV0YVN0b3JlQnJpZGdlPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5nZXRDbGFzc1R5cGVEZWZpbml0aW9uczwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9tb2RlbC9IaXZlRGF0YU1vZGVsR2VuZXJhdG9yLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yIj5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5nZXREYXRhTW9kZWxBc0pTT048L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvbW9kZWwvSGl2ZURhdGFNb2RlbEdlbmVyYXRvci5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvciI+SGl2ZURhdGFNb2RlbEdlbmVyYXRvcjwvYT4gPC9kaXY+CisgICAgPC9kaXY+PGRpdiBjbGFzcz0iZW50cnkiPgorICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+Z2V0RW51bVR5cGVEZWZpbml0aW9uczwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9tb2RlbC9IaXZlRGF0YU1vZGVsR2VuZXJhdG9yLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yIj5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5nZXRNb2RlbEFzSnNvbjwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9tb2RlbC9IaXZlRGF0YU1vZGVsR2VuZXJhdG9yLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yIj5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5nZXROYW1lPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJvY2N1cnJlbmNlcyI+PGEgaHJlZj0iLi4vb3JnL2FwYWNoZS9hdGxhcy9oaXZlL21vZGVsL0hpdmVEYXRhVHlwZXMuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhVHlwZXMiPkhpdmVEYXRhVHlwZXM8L2E+IDwvZGl2PgorICAgIDwvZGl2PjxkaXYgY2xhc3M9ImVudHJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPmdldFByb2Nlc3NSZWZlcmVuY2U8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvYnJpZGdlL0hpdmVNZXRhU3RvcmVCcmlkZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlIj5IaXZlTWV0YVN0b3JlQnJpZGdlPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5nZXRTdHJ1Y3RUeXBlRGVmaW5pdGlvbnM8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvbW9kZWwvSGl2ZURhdGFNb2RlbEdlbmVyYXRvci5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvciI+SGl2ZURhdGFNb2RlbEdlbmVyYXRvcjwvYT4gPC9kaXY+CisgICAgPC9kaXY+PGRpdiBjbGFzcz0iZW50cnkiPgorICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+Z2V0VHJhaXRUeXBlRGVmaW5pdGlvbnM8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvbW9kZWwvSGl2ZURhdGFNb2RlbEdlbmVyYXRvci5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvciI+SGl2ZURhdGFNb2RlbEdlbmVyYXRvcjwvYT4gPC9kaXY+CisgICAgPC9kaXY+PGRpdiBjbGFzcz0iZW50cnkiPgorICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+Z2V0VHlwZXNEZWY8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvbW9kZWwvSGl2ZURhdGFNb2RlbEdlbmVyYXRvci5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvciI+SGl2ZURhdGFNb2RlbEdlbmVyYXRvcjwvYT4gPC9kaXY+CisgICAgPC9kaXY+PC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LWguaHRtbCBiL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LWguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hY2U2NGNhCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtaC5odG1sCkBAIC0wLDAgKzEsMzMgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgPHRpdGxlPkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYtaW5jdWJhdGluZy1TTkFQU0hPVCBBUEk8L3RpdGxlPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IC0gaW5jdWJhdGluZyAtIFNOQVBTSE9UIEFQSSIgLz4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNiBpbmN1YmF0aW5nIFNOQVBTSE9UIEFQSSIgLz4KKyAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KKyAgICAgICAgICAKKyAgICAgIDxsaW5rIGhyZWY9Ii4uL2xpYi9yZWYtaW5kZXguY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgorICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vbGliL2pxdWVyeS5qcyI+PC9zY3JpcHQ+CisgICAgCisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHk+PGRpdiBjbGFzcz0iZW50cnkiPgorICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+SGl2ZURhdGFNb2RlbEdlbmVyYXRvcjwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9tb2RlbC9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbCI+bW9kZWw8L2E+IDwvZGl2PgorICAgIDwvZGl2PjxkaXYgY2xhc3M9ImVudHJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPkhpdmVEYXRhVHlwZXM8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvbW9kZWwvcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwiPm1vZGVsPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5IaXZlSG9vazwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9ob29rL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmhvb2siPmhvb2s8L2E+IDwvZGl2PgorICAgIDwvZGl2PjxkaXYgY2xhc3M9ImVudHJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPkhpdmVNZXRhU3RvcmVCcmlkZ2U8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvYnJpZGdlL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZSI+YnJpZGdlPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5oaXZlPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJvY2N1cnJlbmNlcyI+PGEgaHJlZj0iLi4vb3JnL2FwYWNoZS9hdGxhcy9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMiPmF0bGFzPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5ob29rPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJvY2N1cnJlbmNlcyI+PGEgaHJlZj0iLi4vb3JnL2FwYWNoZS9hdGxhcy9oaXZlL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlIj5oaXZlPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48L2JvZHk+CisgICAgICA8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtaS5odG1sIGIvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtaS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMxN2NjZWUKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC1pLmh0bWwKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICA8dGl0bGU+QXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNi1pbmN1YmF0aW5nLVNOQVBTSE9UIEFQSTwvdGl0bGU+CisgICAgICAgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYgLSBpbmN1YmF0aW5nIC0gU05BUFNIT1QgQVBJIiAvPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IGluY3ViYXRpbmcgU05BUFNIT1QgQVBJIiAvPgorICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgorICAgICAgICAgIAorICAgICAgPGxpbmsgaHJlZj0iLi4vbGliL3JlZi1pbmRleC5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+CisgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9saWIvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKyAgICAKKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keT48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5pbXBvcnRIaXZlTWV0YWRhdGE8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvYnJpZGdlL0hpdmVNZXRhU3RvcmVCcmlkZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlIj5IaXZlTWV0YVN0b3JlQnJpZGdlPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48L2JvZHk+CisgICAgICA8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtbS5odG1sIGIvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtbS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5MGRlNWYKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC1tLmh0bWwKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICA8dGl0bGU+QXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNi1pbmN1YmF0aW5nLVNOQVBTSE9UIEFQSTwvdGl0bGU+CisgICAgICAgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYgLSBpbmN1YmF0aW5nIC0gU05BUFNIT1QgQVBJIiAvPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IGluY3ViYXRpbmcgU05BUFNIT1QgQVBJIiAvPgorICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgorICAgICAgICAgIAorICAgICAgPGxpbmsgaHJlZj0iLi4vbGliL3JlZi1pbmRleC5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+CisgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9saWIvanF1ZXJ5LmpzIj48L3NjcmlwdD4KKyAgICAKKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keT48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5tb2RlbDwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZSI+aGl2ZTwvYT4gPC9kaXY+CisgICAgPC9kaXY+PC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LW8uaHRtbCBiL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LW8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZDZjYTM2Ci0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvaW5kZXgvaW5kZXgtby5odG1sCkBAIC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgPHRpdGxlPkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYtaW5jdWJhdGluZy1TTkFQU0hPVCBBUEk8L3RpdGxlPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IC0gaW5jdWJhdGluZyAtIFNOQVBTSE9UIEFQSSIgLz4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNiBpbmN1YmF0aW5nIFNOQVBTSE9UIEFQSSIgLz4KKyAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KKyAgICAgICAgICAKKyAgICAgIDxsaW5rIGhyZWY9Ii4uL2xpYi9yZWYtaW5kZXguY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgorICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vbGliL2pxdWVyeS5qcyI+PC9zY3JpcHQ+CisgICAgCisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHk+PGRpdiBjbGFzcz0iZW50cnkiPgorICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+b3JnPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJvY2N1cnJlbmNlcyI+PGEgaHJlZj0iLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJfcm9vdF8iPnJvb3Q8L2E+IDwvZGl2PgorICAgIDwvZGl2PjwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC1yLmh0bWwgYi9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC1yLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmIwZDFmOAotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LXIuaHRtbApAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgIDx0aXRsZT5BcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42LWluY3ViYXRpbmctU05BUFNIT1QgQVBJPC90aXRsZT4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNiAtIGluY3ViYXRpbmcgLSBTTkFQU0hPVCBBUEkiIC8+CisgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9IkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYgaW5jdWJhdGluZyBTTkFQU0hPVCBBUEkiIC8+CisgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIC8+CisgICAgICAgICAgCisgICAgICA8bGluayBocmVmPSIuLi9saWIvcmVmLWluZGV4LmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PgorICAgIAorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5PjxkaXYgY2xhc3M9ImVudHJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPnJlZ2lzdGVyRGF0YWJhc2U8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvYnJpZGdlL0hpdmVNZXRhU3RvcmVCcmlkZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlIj5IaXZlTWV0YVN0b3JlQnJpZGdlPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5yZWdpc3RlckhpdmVEYXRhTW9kZWw8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvYnJpZGdlL0hpdmVNZXRhU3RvcmVCcmlkZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlIj5IaXZlTWV0YVN0b3JlQnJpZGdlPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5yZWdpc3RlclBhcnRpdGlvbjwvZGl2PgorICAgICAgPGRpdiBjbGFzcz0ib2NjdXJyZW5jZXMiPjxhIGhyZWY9Ii4uL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9icmlkZ2UvSGl2ZU1ldGFTdG9yZUJyaWRnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UiPkhpdmVNZXRhU3RvcmVCcmlkZ2U8L2E+IDwvZGl2PgorICAgIDwvZGl2PjxkaXYgY2xhc3M9ImVudHJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPnJlZ2lzdGVyVGFibGU8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvYnJpZGdlL0hpdmVNZXRhU3RvcmVCcmlkZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlIj5IaXZlTWV0YVN0b3JlQnJpZGdlPC9hPiA8L2Rpdj4KKyAgICA8L2Rpdj48ZGl2IGNsYXNzPSJlbnRyeSI+CisgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj5ydW48L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9Im9jY3VycmVuY2VzIj48YSBocmVmPSIuLi9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvaG9vay9IaXZlSG9vay5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuaG9vay5IaXZlSG9vayI+SGl2ZUhvb2s8L2E+IDwvZGl2PgorICAgIDwvZGl2PjwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC11Lmh0bWwgYi9oaXZlL3NjYWxhZG9jcy9pbmRleC9pbmRleC11Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGZlNjkwZAotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2luZGV4L2luZGV4LXUuaHRtbApAQCAtMCwwICsxLDE4IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgIDx0aXRsZT5BcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42LWluY3ViYXRpbmctU05BUFNIT1QgQVBJPC90aXRsZT4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNiAtIGluY3ViYXRpbmcgLSBTTkFQU0hPVCBBUEkiIC8+CisgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9IkFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYgaW5jdWJhdGluZyBTTkFQU0hPVCBBUEkiIC8+CisgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIC8+CisgICAgICAgICAgCisgICAgICA8bGluayBocmVmPSIuLi9saWIvcmVmLWluZGV4LmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PgorICAgIAorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5PjxkaXYgY2xhc3M9ImVudHJ5Ij4KKyAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPnVwZGF0ZVRhYmxlPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJvY2N1cnJlbmNlcyI+PGEgaHJlZj0iLi4vb3JnL2FwYWNoZS9hdGxhcy9oaXZlL2JyaWRnZS9IaXZlTWV0YVN0b3JlQnJpZGdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UuSGl2ZU1ldGFTdG9yZUJyaWRnZSI+SGl2ZU1ldGFTdG9yZUJyaWRnZTwvYT4gPC9kaXY+CisgICAgPC9kaXY+PC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi9hcnJvdy1kb3duLnBuZyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9hcnJvdy1kb3duLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MjI5NjAzCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL2Fycm93LWRvd24ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi9hcnJvdy1yaWdodC5wbmcgYi9oaXZlL3NjYWxhZG9jcy9saWIvYXJyb3ctcmlnaHQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIyZjI5MzUKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvYXJyb3ctcmlnaHQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi9jbGFzcy5wbmcgYi9oaXZlL3NjYWxhZG9jcy9saWIvY2xhc3MucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjk3ZWRiZDQKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvY2xhc3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi9jbGFzc19iaWcucG5nIGIvaGl2ZS9zY2FsYWRvY3MvbGliL2NsYXNzX2JpZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uY2IxZjYzOAotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9jbGFzc19iaWcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi9jbGFzc19kaWFncmFtLnBuZyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9jbGFzc19kaWFncmFtLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45ZDdhZWM3Ci0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL2NsYXNzX2RpYWdyYW0ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi9jbGFzc190b19vYmplY3RfYmlnLnBuZyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9jbGFzc190b19vYmplY3RfYmlnLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41ZGQ2ZTM4Ci0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL2NsYXNzX3RvX29iamVjdF9iaWcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi9jb25zdHJ1Y3RvcnNiZy5naWYgYi9oaXZlL3NjYWxhZG9jcy9saWIvY29uc3RydWN0b3JzYmcuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJlM2Y1ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvY29uc3RydWN0b3JzYmcuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi9jb252ZXJzaW9uYmcuZ2lmIGIvaGl2ZS9zY2FsYWRvY3MvbGliL2NvbnZlcnNpb25iZy5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGJlMTQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9jb252ZXJzaW9uYmcuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi9kZWZiZy1ibHVlLmdpZiBiL2hpdmUvc2NhbGFkb2NzL2xpYi9kZWZiZy1ibHVlLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42OTAzODMzCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL2RlZmJnLWJsdWUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi9kZWZiZy1ncmVlbi5naWYgYi9oaXZlL3NjYWxhZG9jcy9saWIvZGVmYmctZ3JlZW4uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM2YzQzYmUKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvZGVmYmctZ3JlZW4uZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi9kaWFncmFtcy5jc3MgYi9oaXZlL3NjYWxhZG9jcy9saWIvZGlhZ3JhbXMuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVmZTMzZjcKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvZGlhZ3JhbXMuY3NzCkBAIC0wLDAgKzEsMTQzIEBACisuZGlhZ3JhbS1jb250YWluZXIKK3sKKwlkaXNwbGF5OiBub25lOworfQorCisuZGlhZ3JhbQoreworCW92ZXJmbG93OiBoaWRkZW47CisJcGFkZGluZy10b3A6MTVweDsKK30KKworLmRpYWdyYW0gc3ZnCit7CisJZGlzcGxheTogYmxvY2s7CisJcG9zaXRpb246IGFic29sdXRlOworCXZpc2liaWxpdHk6IGhpZGRlbjsKKwltYXJnaW46IGF1dG87Cit9CisKKy5kaWFncmFtLWhlbHAKK3sKKwlmbG9hdDpyaWdodDsKKwlkaXNwbGF5Om5vbmU7Cit9CisKKy5tYWduaWZ5aW5nCit7CisJY3Vyc29yOiAtd2Via2l0LXpvb20taW4gISBpbXBvcnRhbnQ7CisJY3Vyc29yOiAtbW96LXpvb20taW4gISBpbXBvcnRhbnQ7CisJY3Vyc29yOiBwb2ludGVyOworfQorCisjY2xvc2UtbGluaworeworCXBvc2l0aW9uOiBhYnNvbHV0ZTsKKwl6LWluZGV4OiAxMDA7CisJZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOworCWZvbnQtc2l6ZTogMTBwdDsKKwl0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKwljb2xvcjogIzMxNTQ3OTsKK30KKworI2Nsb3NlOmhvdmVyCit7CisJdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCitzdmcgYQoreworCWN1cnNvcjpwb2ludGVyOworfQorCitzdmcgdGV4dAoreworCWZvbnQtc2l6ZTogMTBweDsKK30KKworLyogdHJ5IHRvIG1vdmUgdGhlIG5vZGUgdGV4dCAxcHggaW4gb3JkZXIgdG8gYmUgdmVydGljYWxseQorICAgY2VudGVyZWQgKGRvZXMgbm90IHdvcmsgaW4gYWxsIGJyb3dzZXJzKSAqLworc3ZnIC5ub2RlIHRleHQKK3sKKwl0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsMXB4KTsKKwktbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGUoMHB4LDFweCk7CisJLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsMXB4KTsKKwktby10cmFuc2Zvcm06IHRyYW5zbGF0ZSgwcHgsMXB4KTsKKwktbW96LXRyYW5zZm9ybTogdHJhbnNsYXRlKDBweCwxcHgpOworfQorCisvKiBob3ZlciBlZmZlY3QgZm9yIGVkZ2VzICovCisKK3N2ZyAuZWRnZS5vdmVyIHRleHQsCitzdmcgLmVkZ2UuaW1wbGljaXQtaW5jb21pbmcub3ZlciBwb2x5Z29uLAorc3ZnIC5lZGdlLmltcGxpY2l0LW91dGdvaW5nLm92ZXIgcG9seWdvbgoreworCWZpbGw6ICMyMDIwMjA7Cit9CisKK3N2ZyAuZWRnZS5vdmVyIHBhdGgsCitzdmcgLmVkZ2Uub3ZlciBwb2x5Z29uCit7CisJc3Ryb2tlOiAjMjAyMDIwOworfQorCisvKiBob3ZlciBlZmZlY3QgZm9yIG5vZGVzIGluIGNsYXNzIGRpYWdyYW1zICovCisKK3N2Zy5jbGFzcy1kaWFncmFtIC5ub2RlCit7CisJb3BhY2l0eTogMC43NTsKK30KKworc3ZnLmNsYXNzLWRpYWdyYW0gLm5vZGUudGhpcworeworCW9wYWNpdHk6IDEuMDsKK30KKworc3ZnLmNsYXNzLWRpYWdyYW0gLm5vZGUub3ZlcgoreworCW9wYWNpdHk6IDEuMDsKK30KKworc3ZnIC5ub2RlLm92ZXIgcG9seWdvbgoreworCXN0cm9rZTogIzIwMjAyMDsKK30KKworLyogaG92ZXIgZWZmZWN0IGZvciBub2RlcyBpbiBwYWNrYWdlIGRpYWdyYW1zICovCisKK3N2Zy5wYWNrYWdlLWRpYWdyYW0gLm5vZGUuY2xhc3Mub3ZlciBwb2x5Z29uLAorc3ZnLmNsYXNzLWRpYWdyYW0gLm5vZGUudGhpcy5jbGFzcy5vdmVyIHBvbHlnb24KK3sKKwlmaWxsOiAjMDk4NTUyOworCWZpbGw6ICMwNDY2M2U7Cit9CisKK3N2Zy5wYWNrYWdlLWRpYWdyYW0gLm5vZGUudHJhaXQub3ZlciBwb2x5Z29uLAorc3ZnLmNsYXNzLWRpYWdyYW0gLm5vZGUudGhpcy50cmFpdC5vdmVyIHBvbHlnb24KK3sKKwlmaWxsOiAjM2M3YjliOworCWZpbGw6ICMyMzVkN2I7Cit9CisKK3N2Zy5wYWNrYWdlLWRpYWdyYW0gLm5vZGUudHlwZS5vdmVyIHBvbHlnb24sCitzdmcuY2xhc3MtZGlhZ3JhbSAubm9kZS50aGlzLnR5cGUub3ZlciBwb2x5Z29uCit7CisJZmlsbDogIzA5ODU1MjsKKwlmaWxsOiAjMDQ2NjNlOworfQorCisKK3N2Zy5wYWNrYWdlLWRpYWdyYW0gLm5vZGUub2JqZWN0Lm92ZXIgcG9seWdvbgoreworCWZpbGw6ICMxODMzNzc7Cit9CisKK3N2Zy5wYWNrYWdlLWRpYWdyYW0gLm5vZGUub3V0c2lkZS5vdmVyIHBvbHlnb24KK3sKKwlmaWxsOiAjZDRkNGQ0OworfQorCitzdmcucGFja2FnZS1kaWFncmFtIC5ub2RlLmRlZmF1bHQub3ZlciBwb2x5Z29uCit7CisJZmlsbDogI2Q0ZDRkNDsKK30KZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi9kaWFncmFtcy5qcyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9kaWFncmFtcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NzhmMmUzCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL2RpYWdyYW1zLmpzCkBAIC0wLDAgKzEsMzI0IEBACisvKioKKyAqIEphdmFTY3JpcHQgZnVuY3Rpb25zIGVuaGFuY2luZyB0aGUgU1ZHIGRpYWdyYW1zLgorICogCisgKiBAYXV0aG9yIERhbWllbiBPYnJpc3QKKyAqLworCit2YXIgZGlhZ3JhbXMgPSB7fTsKKworLyoqCisgKiBJbml0aWFsaXplcyB0aGUgZGlhZ3JhbXMgaW4gdGhlIG1haW4gd2luZG93LgorICovCiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpCit7CisJLy8gaGlkZSBkaWFncmFtcyBpbiBicm93c2VycyBub3Qgc3VwcG9ydGluZyBTVkcKKwlpZihNb2Rlcm5penIgJiYgIU1vZGVybml6ci5pbmxpbmVzdmcpCisJCXJldHVybjsKKworCS8vIG9ubHkgZXhlY3V0ZSB0aGlzIGluIHRoZSBtYWluIHdpbmRvdworCWlmKGRpYWdyYW1zLmlzUG9wdXApCisJCXJldHVybjsKKworCWlmKCQoIiNjb250ZW50LWRpYWdyYW0iKS5sZW5ndGgpCisJCSQoIiNpbmhlcml0YW5jZS1kaWFncmFtIikuY3NzKCJwYWRkaW5nLWJvdHRvbSIsICIyMHB4Iik7CisKKwkkKCIuZGlhZ3JhbS1jb250YWluZXIiKS5jc3MoImRpc3BsYXkiLCAiYmxvY2siKTsKKworCSQoIi5kaWFncmFtIikuZWFjaChmdW5jdGlvbigpIHsKKwkJLy8gc3RvcmUgaW5pdGFsIGRpbWVuc2lvbnMKKwkJJCh0aGlzKS5kYXRhKCJ3aWR0aCIsICQoInN2ZyIsICQodGhpcykpLndpZHRoKCkpOworCQkkKHRoaXMpLmRhdGEoImhlaWdodCIsICQoInN2ZyIsICQodGhpcykpLmhlaWdodCgpKTsKKwkJLy8gc3RvcmUgdW5zY2FsZWQgY2xvbmUgb2YgU1ZHIGVsZW1lbnQKKwkJJCh0aGlzKS5kYXRhKCJzdmciLCAkKHRoaXMpLmdldCgwKS5jaGlsZE5vZGVzWzBdLmNsb25lTm9kZSh0cnVlKSk7CisJfSk7CisJCisJLy8gbWFrZSBkaWFncmFtIHZpc2libGUsIGhpZGUgY29udGFpbmVyCisJJCgiLmRpYWdyYW0iKS5jc3MoImRpc3BsYXkiLCAibm9uZSIpOworCSQoIi5kaWFncmFtIHN2ZyIpLmNzcyh7CisJCSJwb3NpdGlvbiI6ICJzdGF0aWMiLAorCQkidmlzaWJpbGl0eSI6ICJ2aXNpYmxlIiwKKwkJInotaW5kZXgiOiAiYXV0byIKKwl9KTsKKworCS8vIGVuYWJsZSBsaW5raW5nIHRvIGRpYWdyYW1zCisJaWYoJChsb2NhdGlvbikuYXR0cigiaGFzaCIpID09ICIjaW5oZXJpdGFuY2UtZGlhZ3JhbSIpIHsKKwkJZGlhZ3JhbXMudG9nZ2xlKCQoIiNpbmhlcml0YW5jZS1kaWFncmFtLWNvbnRhaW5lciIpLCB0cnVlKTsKKwl9IGVsc2UgaWYoJChsb2NhdGlvbikuYXR0cigiaGFzaCIpID09ICIjY29udGVudC1kaWFncmFtIikgeworCQlkaWFncmFtcy50b2dnbGUoJCgiI2NvbnRlbnQtZGlhZ3JhbS1jb250YWluZXIiKSwgdHJ1ZSk7CisJfQorCisJJCgiLmRpYWdyYW0tbGluayIpLmNsaWNrKGZ1bmN0aW9uKCkgeworCQlkaWFncmFtcy50b2dnbGUoJCh0aGlzKS5wYXJlbnQoKSk7CisJfSk7CisKKwkvLyByZWdpc3RlciByZXNpemUgZnVuY3Rpb24KKwkkKHdpbmRvdykucmVzaXplKGRpYWdyYW1zLnJlc2l6ZSk7CisKKwkvLyBkb24ndCBidWJibGUgZXZlbnQgdG8gcGFyZW50IGRpdgorCS8vIHdoZW4gY2xpY2tpbmcgb24gYSBub2RlIG9mIGEgcmVzaXplZAorCS8vIGRpYWdyYW0KKwkkKCJzdmcgYSIpLmNsaWNrKGZ1bmN0aW9uKGUpIHsKKwkJZS5zdG9wUHJvcGFnYXRpb24oKTsKKwl9KTsKKworCWRpYWdyYW1zLmluaXRIaWdobGlnaHRpbmcoKTsKK30pOworCisvKioKKyAqIEluaXRpYWxpemVzIHRoZSBkaWFncmFtcyBpbiB0aGUgcG9wdXAuCisgKi8KK2RpYWdyYW1zLmluaXRQb3B1cCA9IGZ1bmN0aW9uKGlkKQoreworCS8vIGNvcHkgZGlhZ3JhbSBmcm9tIG1haW4gd2luZG93CisJaWYoIWpRdWVyeS5icm93c2VyLm1zaWUpCisJCSQoImJvZHkiKS5hcHBlbmQob3BlbmVyLiQoIiMiICsgaWQpLmRhdGEoInN2ZyIpKTsKKworCS8vIHBvc2l0aW9uaW5nCisJJCgic3ZnIikuY3NzKCJwb3NpdGlvbiIsICJhYnNvbHV0ZSIpOworCSQod2luZG93KS5yZXNpemUoZnVuY3Rpb24oKQorCXsKKwkJdmFyIHN2Z193ID0gJCgic3ZnIikuY3NzKCJ3aWR0aCIpLnJlcGxhY2UoInB4IiwgIiIpOworCQl2YXIgc3ZnX2ggPSAkKCJzdmciKS5jc3MoImhlaWdodCIpLnJlcGxhY2UoInB4IiwgIiIpOworCQl2YXIgeCA9ICQod2luZG93KS53aWR0aCgpIC8gMiAtIHN2Z193IC8gMjsKKwkJaWYoeCA8IDApIHggPSAwOworCQl2YXIgeSA9ICQod2luZG93KS5oZWlnaHQoKSAvIDIgLSBzdmdfaCAvIDI7CisJCWlmKHkgPCAwKSB5ID0gMDsKKwkJJCgic3ZnIikuY3NzKCJsZWZ0IiwgeCArICJweCIpOworCQkkKCJzdmciKS5jc3MoInRvcCIsIHkgKyAicHgiKTsKKwl9KTsKKwkkKHdpbmRvdykucmVzaXplKCk7CisKKwlkaWFncmFtcy5pbml0SGlnaGxpZ2h0aW5nKCk7CisJJCgic3ZnIGEiKS5jbGljayhmdW5jdGlvbihlKSB7CisJCW9wZW5lci5kaWFncmFtcy5yZWRpcmVjdEZyb21Qb3B1cCh0aGlzLmhyZWYuYmFzZVZhbCk7CisJCXdpbmRvdy5jbG9zZSgpOworCX0pOworCSQoZG9jdW1lbnQpLmtleXVwKGZ1bmN0aW9uKGUpIHsKKwkJaWYgKGUua2V5Q29kZSA9PSAyNykgd2luZG93LmNsb3NlKCk7CisJfSk7Cit9CisKKy8qKgorICogSW5pdGlhbGl6ZXMgaGlnaGxpZ2h0aW5nIGZvciBub2RlcyBhbmQgZWRnZXMuCisgKi8KK2RpYWdyYW1zLmluaXRIaWdobGlnaHRpbmcgPSBmdW5jdGlvbigpCit7CisJLy8gaGVscGVyIGZ1bmN0aW9uIHNpbmNlICQuaG92ZXIgZG9lc24ndCB3b3JrIGluIElFCisKKwlmdW5jdGlvbiBob3ZlcihlbGVtZW50cywgZm4pCisJeworCQllbGVtZW50cy5tb3VzZW92ZXIoZm4pOworCQllbGVtZW50cy5tb3VzZW91dChmbik7CisJfQorCisJLy8gaW5oZXJpdGFuY2UgZWRnZXMKKworCWhvdmVyKCQoInN2ZyAuZWRnZS5pbmhlcml0YW5jZSIpLCBmdW5jdGlvbihldnQpeworCQl2YXIgdG9nZ2xlQ2xhc3MgPSBldnQudHlwZSA9PSAibW91c2VvdXQiID8gZGlhZ3JhbXMucmVtb3ZlQ2xhc3MgOiBkaWFncmFtcy5hZGRDbGFzczsKKwkJdmFyIHBhcnRzID0gJCh0aGlzKS5hdHRyKCJpZCIpLnNwbGl0KCJfIik7CisJCXRvZ2dsZUNsYXNzKCQoIiMiICsgcGFydHNbMF0gKyAiXyIgKyBwYXJ0c1sxXSkpOworCQl0b2dnbGVDbGFzcygkKCIjIiArIHBhcnRzWzBdICsgIl8iICsgcGFydHNbMl0pKTsKKwkJdG9nZ2xlQ2xhc3MoJCh0aGlzKSk7CisJfSk7CisKKwkvLyBub2RlcworCisJaG92ZXIoJCgic3ZnIC5ub2RlIiksIGZ1bmN0aW9uKGV2dCl7CisJCXZhciB0b2dnbGVDbGFzcyA9IGV2dC50eXBlID09ICJtb3VzZW91dCIgPyBkaWFncmFtcy5yZW1vdmVDbGFzcyA6IGRpYWdyYW1zLmFkZENsYXNzOworCQl0b2dnbGVDbGFzcygkKHRoaXMpKTsKKwkJdmFyIHBhcnRzID0gJCh0aGlzKS5hdHRyKCJpZCIpLnNwbGl0KCJfIik7CisJCXZhciBpbmRleCA9IHBhcnRzWzFdOworCQkkKCJzdmcjIiArIHBhcnRzWzBdICsgIiAuZWRnZS5pbmhlcml0YW5jZSIpLmVhY2goZnVuY3Rpb24oKXsKKwkJCXZhciBwYXJ0czIgPSAkKHRoaXMpLmF0dHIoImlkIikuc3BsaXQoIl8iKTsKKwkJCWlmKHBhcnRzMlsxXSA9PSBpbmRleCkKKwkJCXsKKwkJCQl0b2dnbGVDbGFzcygkKCIjIiArIHBhcnRzMlswXSArICJfIiArIHBhcnRzMlsyXSkpOworCQkJCXRvZ2dsZUNsYXNzKCQodGhpcykpOworCQkJfSBlbHNlIGlmKHBhcnRzMlsyXSA9PSBpbmRleCkKKwkJCXsKKwkJCQl0b2dnbGVDbGFzcygkKCIjIiArIHBhcnRzMlswXSArICJfIiArIHBhcnRzMlsxXSkpOworCQkJCXRvZ2dsZUNsYXNzKCQodGhpcykpOworCQkJfQorCQl9KTsKKwl9KTsKKworCS8vIGluY29taW5nIGltcGxpY2l0cworCisJaG92ZXIoJCgic3ZnIC5ub2RlLmltcGxpY2l0LWluY29taW5nIiksIGZ1bmN0aW9uKGV2dCl7CisJCXZhciB0b2dnbGVDbGFzcyA9IGV2dC50eXBlID09ICJtb3VzZW91dCIgPyBkaWFncmFtcy5yZW1vdmVDbGFzcyA6IGRpYWdyYW1zLmFkZENsYXNzOworCQl0b2dnbGVDbGFzcygkKHRoaXMpKTsKKwkJdG9nZ2xlQ2xhc3MoJCgic3ZnIC5lZGdlLmltcGxpY2l0LWluY29taW5nIikpOworCQl0b2dnbGVDbGFzcygkKCJzdmcgLm5vZGUudGhpcyIpKTsKKwl9KTsKKworCWhvdmVyKCQoInN2ZyAuZWRnZS5pbXBsaWNpdC1pbmNvbWluZyIpLCBmdW5jdGlvbihldnQpeworCQl2YXIgdG9nZ2xlQ2xhc3MgPSBldnQudHlwZSA9PSAibW91c2VvdXQiID8gZGlhZ3JhbXMucmVtb3ZlQ2xhc3MgOiBkaWFncmFtcy5hZGRDbGFzczsKKwkJdG9nZ2xlQ2xhc3MoJCh0aGlzKSk7CisJCXRvZ2dsZUNsYXNzKCQoInN2ZyAubm9kZS50aGlzIikpOworCQkkKCJzdmcgLm5vZGUuaW1wbGljaXQtaW5jb21pbmciKS5lYWNoKGZ1bmN0aW9uKCl7CisJCQl0b2dnbGVDbGFzcygkKHRoaXMpKTsKKwkJfSk7CisJfSk7CisJCisJLy8gaW1wbGljaXQgb3V0Z29pbmcgbm9kZXMKKworCWhvdmVyKCQoInN2ZyAubm9kZS5pbXBsaWNpdC1vdXRnb2luZyIpLCBmdW5jdGlvbihldnQpeworCQl2YXIgdG9nZ2xlQ2xhc3MgPSBldnQudHlwZSA9PSAibW91c2VvdXQiID8gZGlhZ3JhbXMucmVtb3ZlQ2xhc3MgOiBkaWFncmFtcy5hZGRDbGFzczsKKwkJdG9nZ2xlQ2xhc3MoJCh0aGlzKSk7CisJCXRvZ2dsZUNsYXNzKCQoInN2ZyAuZWRnZS5pbXBsaWNpdC1vdXRnb2luZyIpKTsKKwkJdG9nZ2xlQ2xhc3MoJCgic3ZnIC5ub2RlLnRoaXMiKSk7CisJfSk7CisKKwlob3ZlcigkKCJzdmcgLmVkZ2UuaW1wbGljaXQtb3V0Z29pbmciKSwgZnVuY3Rpb24oZXZ0KXsKKwkJdmFyIHRvZ2dsZUNsYXNzID0gZXZ0LnR5cGUgPT0gIm1vdXNlb3V0IiA/IGRpYWdyYW1zLnJlbW92ZUNsYXNzIDogZGlhZ3JhbXMuYWRkQ2xhc3M7CisJCXRvZ2dsZUNsYXNzKCQodGhpcykpOworCQl0b2dnbGVDbGFzcygkKCJzdmcgLm5vZGUudGhpcyIpKTsKKwkJJCgic3ZnIC5ub2RlLmltcGxpY2l0LW91dGdvaW5nIikuZWFjaChmdW5jdGlvbigpeworCQkJdG9nZ2xlQ2xhc3MoJCh0aGlzKSk7CisJCX0pOworCX0pOworfTsKKworLyoqCisgKiBSZXNpemVzIHRoZSBkaWFncmFtcyBhY2NvcmRpbmcgdG8gdGhlIGF2YWlsYWJsZSB3aWR0aC4KKyAqLworZGlhZ3JhbXMucmVzaXplID0gZnVuY3Rpb24oKQoreworCS8vIGF2YWlsYWJsZSB3aWR0aAorCXZhciBhdmFpbGFibGVXaWR0aCA9ICQoImJvZHkiKS53aWR0aCgpIC0gMjA7CisKKwkkKCIuZGlhZ3JhbS1jb250YWluZXIiKS5lYWNoKGZ1bmN0aW9uKCkgeworCQkvLyB1bnJlZ2lzdGVyIGNsaWNrIGV2ZW50IG9uIHdob2xlIGRpdgorCQkkKCIuZGlhZ3JhbSIsIHRoaXMpLnVuYmluZCgiY2xpY2siKTsKKwkJdmFyIGRpYWdyYW1XaWR0aCA9ICQoIi5kaWFncmFtIiwgdGhpcykuZGF0YSgid2lkdGgiKTsKKwkJdmFyIGRpYWdyYW1IZWlnaHQgPSAkKCIuZGlhZ3JhbSIsIHRoaXMpLmRhdGEoImhlaWdodCIpOworCisJCWlmKGRpYWdyYW1XaWR0aCA+IGF2YWlsYWJsZVdpZHRoKQorCQl7CisJCQkvLyByZXNpemUgZGlhZ3JhbQorCQkJdmFyIGhlaWdodCA9IGRpYWdyYW1IZWlnaHQgLyBkaWFncmFtV2lkdGggKiBhdmFpbGFibGVXaWR0aDsKKwkJCSQoIi5kaWFncmFtIHN2ZyIsIHRoaXMpLndpZHRoKGF2YWlsYWJsZVdpZHRoKTsKKwkJCSQoIi5kaWFncmFtIHN2ZyIsIHRoaXMpLmhlaWdodChoZWlnaHQpOworCisJCQkvLyByZWdpc3RlciBjbGljayBldmVudCBvbiB3aG9sZSBkaXYKKwkJCSQoIi5kaWFncmFtIiwgdGhpcykuY2xpY2soZnVuY3Rpb24oKSB7CisJCQkJZGlhZ3JhbXMucG9wdXAoJCh0aGlzKSk7CisJCQl9KTsKKwkJCSQoIi5kaWFncmFtIiwgdGhpcykuYWRkQ2xhc3MoIm1hZ25pZnlpbmciKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8vIHJlc3RvcmUgZnVsbCBzaXplIG9mIGRpYWdyYW0KKwkJCSQoIi5kaWFncmFtIHN2ZyIsIHRoaXMpLndpZHRoKGRpYWdyYW1XaWR0aCk7CisJCQkkKCIuZGlhZ3JhbSBzdmciLCB0aGlzKS5oZWlnaHQoZGlhZ3JhbUhlaWdodCk7CisJCQkvLyBkb24ndCBzaG93IGN1c3RvbSBjdXJzb3IgYW55IG1vcmUKKwkJCSQoIi5kaWFncmFtIiwgdGhpcykucmVtb3ZlQ2xhc3MoIm1hZ25pZnlpbmciKTsKKwkJfQorCX0pOworfTsKKworLyoqCisgKiBTaG93cyBvciBoaWRlcyBhIGRpYWdyYW0gZGVwZW5kaW5nIG9uIGl0cyBjdXJyZW50IHN0YXRlLgorICovCitkaWFncmFtcy50b2dnbGUgPSBmdW5jdGlvbihjb250YWluZXIsIGRvbnRBbmltYXRlKQoreworCS8vIGNoYW5nZSBjbGFzcyBvZiBsaW5rCisJJCgiLmRpYWdyYW0tbGluayIsIGNvbnRhaW5lcikudG9nZ2xlQ2xhc3MoIm9wZW4iKTsKKwkvLyBnZXQgZWxlbWVudCB0byBzaG93IC8gaGlkZQorCXZhciBkaXYgPSAkKCIuZGlhZ3JhbSIsIGNvbnRhaW5lcik7CisJaWYgKGRpdi5pcygnOnZpc2libGUnKSkKKwl7CisJCSQoIi5kaWFncmFtLWhlbHAiLCBjb250YWluZXIpLmhpZGUoKTsKKwkJZGl2LnVuYmluZCgiY2xpY2siKTsKKwkJZGl2LnJlbW92ZUNsYXNzKCJtYWduaWZ5aW5nIik7CisJCWRpdi5zbGlkZVVwKDEwMCk7CisJfQorCWVsc2UKKwl7CisJCWRpYWdyYW1zLnJlc2l6ZSgpOworCQlpZihkb250QW5pbWF0ZSkKKwkJCWRpdi5zaG93KCk7CisJCWVsc2UKKwkJCWRpdi5zbGlkZURvd24oMTAwKTsKKwkJJCgiLmRpYWdyYW0taGVscCIsIGNvbnRhaW5lcikuc2hvdygpOworCX0KK307CisKKy8qKgorICogT3BlbnMgYSBwb3B1cCBjb250YWluaW5nIGEgY29weSBvZiBhIGRpYWdyYW0uCisgKi8KK2RpYWdyYW1zLndpbmRvd3MgPSB7fTsKK2RpYWdyYW1zLnBvcHVwID0gZnVuY3Rpb24oZGlhZ3JhbSkKK3sKKwl2YXIgaWQgPSBkaWFncmFtLmF0dHIoImlkIik7CisJaWYoIWRpYWdyYW1zLndpbmRvd3NbaWRdIHx8IGRpYWdyYW1zLndpbmRvd3NbaWRdLmNsb3NlZCkgeworCQl2YXIgdGl0bGUgPSAkKCIuc3ltYm9sIC5uYW1lIiwgJCgiI3NpZ25hdHVyZSIpKS50ZXh0KCk7CisJCS8vIGNsb25pbmcgZnJvbSBwYXJlbnQgd2luZG93IHRvIHBvcHVwIHNvbWVob3cgZG9lc24ndCB3b3JrIGluIElFCisJCS8vIHRoZXJlZm9yZSBpbmNsdWRlIHRoZSBTVkcgYXMgYSBzdHJpbmcgaW50byB0aGUgSFRNTAorCQl2YXIgc3ZnSUUgPSBqUXVlcnkuYnJvd3Nlci5tc2llID8gJCgiPGRpdiAvPiIpLmFwcGVuZChkaWFncmFtLmRhdGEoInN2ZyIpKS5odG1sKCkgOiAiIjsKKwkJdmFyIGh0bWwgPSAnJyArCisJCSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PlxuJyArCisJCSc8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+XG4nICsgCisJCSc8aHRtbD5cbicgKworCQknCTxoZWFkPlxuJyArCisJCScJCTx0aXRsZT4nICsgdGl0bGUgKyAnPC90aXRsZT5cbicgKworCQknCQk8bGluayBocmVmPSInICsgJCgiI2RpYWdyYW1zLWNzcyIpLmF0dHIoImhyZWYiKSArICciIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+XG4nICsKKwkJJwkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJyArICQoIiNqcXVlcnktanMiKS5hdHRyKCJzcmMiKSArICciPjwvc2NyaXB0PlxuJyArCisJCScJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicgKyAkKCIjZGlhZ3JhbXMtanMiKS5hdHRyKCJzcmMiKSArICciPjwvc2NyaXB0PlxuJyArCisJCScJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5cbicgKworCQknCQkJZGlhZ3JhbXMuaXNQb3B1cCA9IHRydWU7XG4nICsKKwkJJwkJPC9zY3JpcHQ+XG4nICsKKwkJJwk8L2hlYWQ+XG4nICsKKwkJJwk8Ym9keSBvbmxvYWQ9ImRpYWdyYW1zLmluaXRQb3B1cChcJycgKyBpZCArICdcJyk7Ij5cbicgKworCQknCQk8YSBocmVmPSIjIiBvbmNsaWNrPSJ3aW5kb3cuY2xvc2UoKTsiIGlkPSJjbG9zZS1saW5rIj5DbG9zZSB0aGlzIHdpbmRvdzwvYT5cbicgKworCQknCQknICsgc3ZnSUUgKyAnXG4nICsKKwkJJwk8L2JvZHk+XG4nICsKKwkJJzwvaHRtbD4nOworCisJCXZhciBwYWRkaW5nID0gMzA7CisJCXZhciBzY3JlZW5IZWlnaHQgPSBzY3JlZW4uYXZhaWxIZWlnaHQ7CisJCXZhciBzY3JlZW5XaWR0aCA9IHNjcmVlbi5hdmFpbFdpZHRoOworCQl2YXIgdyA9IE1hdGgubWluKHNjcmVlbldpZHRoLCBkaWFncmFtLmRhdGEoIndpZHRoIikgKyAyICogcGFkZGluZyk7CisJCXZhciBoID0gTWF0aC5taW4oc2NyZWVuSGVpZ2h0LCBkaWFncmFtLmRhdGEoImhlaWdodCIpICsgMiAqIHBhZGRpbmcpOworCQl2YXIgbGVmdCA9IChzY3JlZW5XaWR0aCAtIHcpIC8gMjsKKwkJdmFyIHRvcCA9IChzY3JlZW5IZWlnaHQgLSBoKSAvIDI7CisJCXZhciBwYXJhbWV0ZXJzID0gImhlaWdodD0iICsgaCArICIsIHdpZHRoPSIgKyB3ICsgIiwgbGVmdD0iICsgbGVmdCArICIsIHRvcD0iICsgdG9wICsgIiwgc2Nyb2xsYmFycz15ZXMsIGxvY2F0aW9uPW5vLCByZXNpemFibGU9eWVzIjsKKwkJdmFyIHdpbiA9IHdpbmRvdy5vcGVuKCJhYm91dDpibGFuayIsICJfYmxhbmsiLCBwYXJhbWV0ZXJzKTsKKwkJd2luLmRvY3VtZW50Lm9wZW4oKTsKKwkJd2luLmRvY3VtZW50LndyaXRlKGh0bWwpOworCQl3aW4uZG9jdW1lbnQuY2xvc2UoKTsKKwkJZGlhZ3JhbXMud2luZG93c1tpZF0gPSB3aW47CisJfQorCXdpbi5mb2N1cygpOworfTsKKworLyoqCisgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIHBvcHVwIHdoZW4gYSBub2RlIGlzIGNsaWNrZWQuCisgKi8KK2RpYWdyYW1zLnJlZGlyZWN0RnJvbVBvcHVwID0gZnVuY3Rpb24odXJsKQoreworCXdpbmRvdy5sb2NhdGlvbiA9IHVybDsKK307CisKKy8qKgorICogSGVscGVyIG1ldGhvZCB0aGF0IGFkZHMgYSBjbGFzcyB0byBhIFNWRyBlbGVtZW50LgorICovCitkaWFncmFtcy5hZGRDbGFzcyA9IGZ1bmN0aW9uKHN2Z0VsZW0sIG5ld0NsYXNzKSB7CisJbmV3Q2xhc3MgPSBuZXdDbGFzcyB8fCAib3ZlciI7CisJdmFyIGNsYXNzZXMgPSBzdmdFbGVtLmF0dHIoImNsYXNzIik7CisJaWYgKCQuaW5BcnJheShuZXdDbGFzcywgY2xhc3Nlcy5zcGxpdCgvXHMrLykpID09IC0xKSB7CisJCWNsYXNzZXMgKz0gKGNsYXNzZXMgPyAnICcgOiAnJykgKyBuZXdDbGFzczsKKwkJc3ZnRWxlbS5hdHRyKCJjbGFzcyIsIGNsYXNzZXMpOworCX0KK307CisKKy8qKgorICogSGVscGVyIG1ldGhvZCB0aGF0IHJlbW92ZXMgYSBjbGFzcyBmcm9tIGEgU1ZHIGVsZW1lbnQuCisgKi8KK2RpYWdyYW1zLnJlbW92ZUNsYXNzID0gZnVuY3Rpb24oc3ZnRWxlbSwgb2xkQ2xhc3MpIHsKKwlvbGRDbGFzcyA9IG9sZENsYXNzIHx8ICJvdmVyIjsKKwl2YXIgY2xhc3NlcyA9IHN2Z0VsZW0uYXR0cigiY2xhc3MiKTsKKwljbGFzc2VzID0gJC5ncmVwKGNsYXNzZXMuc3BsaXQoL1xzKy8pLCBmdW5jdGlvbihuLCBpKSB7IHJldHVybiBuICE9IG9sZENsYXNzOyB9KS5qb2luKCcgJyk7CisJc3ZnRWxlbS5hdHRyKCJjbGFzcyIsIGNsYXNzZXMpOworfTsKKwpkaWZmIC0tZ2l0IGEvaGl2ZS9zY2FsYWRvY3MvbGliL2ZpbHRlcl9ib3hfbGVmdC5wbmcgYi9oaXZlL3NjYWxhZG9jcy9saWIvZmlsdGVyX2JveF9sZWZ0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZThjODkzCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL2ZpbHRlcl9ib3hfbGVmdC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaGl2ZS9zY2FsYWRvY3MvbGliL2ZpbHRlcl9ib3hfbGVmdDIuZ2lmIGIvaGl2ZS9zY2FsYWRvY3MvbGliL2ZpbHRlcl9ib3hfbGVmdDIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI5YjQ5MDcKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvZmlsdGVyX2JveF9sZWZ0Mi5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaGl2ZS9zY2FsYWRvY3MvbGliL2ZpbHRlcl9ib3hfcmlnaHQucG5nIGIvaGl2ZS9zY2FsYWRvY3MvbGliL2ZpbHRlcl9ib3hfcmlnaHQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmYxMjdlMzUKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvZmlsdGVyX2JveF9yaWdodC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaGl2ZS9zY2FsYWRvY3MvbGliL2ZpbHRlcmJnLmdpZiBiL2hpdmUvc2NhbGFkb2NzL2xpYi9maWx0ZXJiZy5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTQyYmE0YQotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9maWx0ZXJiZy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaGl2ZS9zY2FsYWRvY3MvbGliL2ZpbHRlcmJveGJhcmJnLmdpZiBiL2hpdmUvc2NhbGFkb2NzL2xpYi9maWx0ZXJib3hiYXJiZy5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjUwNzVjMQotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9maWx0ZXJib3hiYXJiZy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaGl2ZS9zY2FsYWRvY3MvbGliL2ZpbHRlcmJveGJhcmJnLnBuZyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9maWx0ZXJib3hiYXJiZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDYxM2NmNQotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9maWx0ZXJib3hiYXJiZy5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaGl2ZS9zY2FsYWRvY3MvbGliL2ZpbHRlcmJveGJnLmdpZiBiL2hpdmUvc2NhbGFkb2NzL2xpYi9maWx0ZXJib3hiZy5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWUyZjg1OAotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9maWx0ZXJib3hiZy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaGl2ZS9zY2FsYWRvY3MvbGliL2Z1bGxjb21tZW50dG9wYmcuZ2lmIGIvaGl2ZS9zY2FsYWRvY3MvbGliL2Z1bGxjb21tZW50dG9wYmcuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmEwZDkzZjQKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvZnVsbGNvbW1lbnR0b3BiZy5naWYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaGl2ZS9zY2FsYWRvY3MvbGliL2luZGV4LmNzcyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9pbmRleC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTVmYjM3MAotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9pbmRleC5jc3MKQEAgLTAsMCArMSwzMzggQEAKKyogeworICBjb2xvcjogaW5oZXJpdDsKKyAgZm9udC1zaXplOiAxMHB0OworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgICAgICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsKKyAgYm9yZGVyLXdpZHRoOiAwcHg7CisgIHBhZGRpbmc6IDBweDsKKyAgbWFyZ2luOiAwcHg7Cit9CisKK2EgeworICBjdXJzb3I6IHBvaW50ZXI7Cit9CisKK2E6aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworaDEgeworICBkaXNwbGF5OiBub25lOworfQorCisuc2VsZWN0ZWQgeworICAtbW96LWJveC1zaGFkb3c6IGluc2V0IDBweCA1cHggMTBweCByZ2JhKDU4LCA4OCwgOTcsIC4zNik7CisgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMHB4IDVweCAxMHB4IHJnYmEoNTgsIDg4LCA5NywgLjM2KTsKKyAgYm9yZGVyLXRvcDogc29saWQgMXB4IHJnYmEoMTE5LCAxMzgsIDE1MywgMC44KTsKKyAgYm9yZGVyLWJvdHRvbTogc29saWQgMXB4IHJnYmEoMTUxLCAxNzMsIDE5MSwgMC40KTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2NlZDJkOTsKKyAgbWFyZ2luOiAtMXB4IDBweDsKK30KKworLyoubGV0dGVycyB7CisgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogMnB0OworICBwYWRkaW5nOiA1cHg7CisgIGJhY2tncm91bmQtY29sb3I6ICNEQURBREE7CisgIHRleHQtc2hhZG93OiAjZmZmZmZmIDAgMXB4IDA7Cit9Ki8KKworI2xpYnJhcnkgeworICAgIGRpc3BsYXk6IG5vbmU7Cit9CisKKyNicm93c2VyIHsKKyAgdG9wOiAwcHg7CisgIGxlZnQ6IDBweDsKKyAgYm90dG9tOiAwcHg7CisgIHdpZHRoOiAxMDAlOworICBkaXNwbGF5OiBibG9jazsKKyAgcG9zaXRpb246IGZpeGVkOworfQorCisjZmlsdGVyIHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBkaXNwbGF5OiBibG9jazsKKy8qICBwYWRkaW5nOiA1cHg7Ki8KKyAgcmlnaHQ6IDA7CisgIGxlZnQ6IDA7CisgIHRvcDogMDsKKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2ZpbHRlcmJnLmdpZicpOworICBiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2VkZWRlZTsgLyogbGlnaHQgZ3JheSAqLworICAvKmJhY2tncm91bmQtY29sb3I6ICNEQURBREE7Ki8KKyAgYm9yZGVyOjFweCBzb2xpZCAjYmJiYmJiOworICBib3JkZXItdG9wOjA7CisgIGJvcmRlci1sZWZ0OjA7CisgIGJvcmRlci1yaWdodDowOworfQorCisjdGV4dGZpbHRlciB7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgZGlzcGxheTogYmxvY2s7CisgIGhlaWdodDogMjBweDsKKyAgbWFyZ2luLXRvcDogNXB4OworICBtYXJnaW4tYm90dG9tOiA1cHg7Cit9CisKKyN0ZXh0ZmlsdGVyID4gLnByZSB7CisgIGRpc3BsYXk6IGJsb2NrOworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIHRvcDogMDsKKyAgbGVmdDogMDsKKyAgaGVpZ2h0OiAyM3B4OworICB3aWR0aDogMjFweDsKKyAgYmFja2dyb3VuZDogdXJsKCJmaWx0ZXJfYm94X2xlZnQucG5nIik7Cit9CisKKyN0ZXh0ZmlsdGVyID4gLmlucHV0IHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgdG9wOiAwOworICByaWdodDogMjBweDsKKyAgbGVmdDogMjBweDsKK30KKworI3RleHRmaWx0ZXIgPiAuaW5wdXQgPiBpbnB1dCB7CisgIGhlaWdodDogMjBweDsKKyAgcGFkZGluZzogMXB4OworICBmb250LXdlaWdodDogYm9sZDsKKyAgY29sb3I6ICMwMDAwMDA7CisgIGJhY2tncm91bmQ6ICNmZmZmZmYgdXJsKCJmaWx0ZXJib3hiYXJiZy5wbmciKSByZXBlYXQteCBib3R0b20gbGVmdDsKKyAgd2lkdGg6IDEwMCU7Cit9CisKKyN0ZXh0ZmlsdGVyID4gLnBvc3QgeworICBkaXNwbGF5OiBibG9jazsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0b3A6IDA7CisgIHJpZ2h0OiAwOworICBoZWlnaHQ6IDIzcHg7CisgIHdpZHRoOiAyMXB4OworICBiYWNrZ3JvdW5kOiB1cmwoImZpbHRlcl9ib3hfcmlnaHQucG5nIik7Cit9CisKKy8qI3RleHRmaWx0ZXIgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGRpc3BsYXk6IGJsb2NrOworICAgIGhlaWdodDogMjBweDsKKyAgbWFyZ2luLWJvdHRvbTogNXB4OworfQorCisjdGV4dGZpbHRlciA+IC5wcmUgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgbGVmdDogMDsKKyAgICBoZWlnaHQ6IDIwcHg7CisgICAgd2lkdGg6IDIwcHg7CisgICAgYmFja2dyb3VuZDogdXJsKCJmaWx0ZXJfYm94X2xlZnQucG5nIik7Cit9CisKKyN0ZXh0ZmlsdGVyID4gLmlucHV0IHsKKyAgZGlzcGxheTogYmxvY2s7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMDsKKyAgICByaWdodDogMjBweDsKKyAgICBsZWZ0OiAyMHB4OworfQorCisjdGV4dGZpbHRlciA+IC5pbnB1dCA+IGlucHV0IHsKKyAgaGVpZ2h0OiAxNnB4OworICBwYWRkaW5nOiAycHg7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICBjb2xvcjogZGFya2JsdWU7CisgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworICAgIHdpZHRoOiAxMDAlOworfQorCisjdGV4dGZpbHRlciA+IC5wb3N0IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIHJpZ2h0OiAwOworICAgIGhlaWdodDogMjBweDsKKyAgICB3aWR0aDogMjBweDsKKyAgICBiYWNrZ3JvdW5kOiB1cmwoImZpbHRlcl9ib3hfcmlnaHQucG5nIik7Cit9Ki8KKworI2ZvY3VzZmlsdGVyIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGRpc3BsYXk6IGJsb2NrOworICBwYWRkaW5nOiA1cHg7CisgIGJhY2tncm91bmQtY29sb3I6ICNmZmZlYmQ7IC8qIGxpZ2h0IHllbGxvdyovCisgIHRleHQtc2hhZG93OiAjZmZmZmZmIDAgMXB4IDA7Cit9CisKKyNmb2N1c2ZpbHRlciAuZm9jdXNjb2xsIHsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIHRleHQtc2hhZG93OiAjZmZmZmZmIDAgMXB4IDA7Cit9CisKKyNmb2N1c2ZpbHRlciBpbWcgeworICBib3R0b206IC0ycHg7CisgIHBvc2l0aW9uOiByZWxhdGl2ZTsKK30KKworI2tpbmRmaWx0ZXIgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIGRpc3BsYXk6IGJsb2NrOworICBwYWRkaW5nOiA1cHg7CisvKiAgYmFja2dyb3VuZC1jb2xvcjogIzk5OTsqLworICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKyNraW5kZmlsdGVyID4gYSB7CisgY29sb3I6IGJsYWNrOyAKKy8qIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyovCisgdGV4dC1zaGFkb3c6ICNmZmZmZmYgMCAxcHggMDsKKworfQorCisja2luZGZpbHRlciA+IGE6aG92ZXIgeworICBjb2xvcjogIzRDNEM0QzsgCisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgdGV4dC1zaGFkb3c6ICNmZmZmZmYgMCAxcHggMDsKK30KKworI2xldHRlcnMgeworICBwb3NpdGlvbjogcmVsYXRpdmU7CisgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgcGFkZGluZy1ib3R0b206IDVweDsKKyAgYm9yZGVyOjFweCBzb2xpZCAjYmJiYmJiOworICBib3JkZXItdG9wOjA7CisgIGJvcmRlci1sZWZ0OjA7CisgIGJvcmRlci1yaWdodDowOworfQorCisjbGV0dGVycyA+IGEsICNsZXR0ZXJzID4gc3BhbiB7CisvKiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsqLworICBjb2xvcjogIzg1ODQ4NDsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIGZvbnQtc2l6ZTogOHB0OworICB0ZXh0LXNoYWRvdzogI2ZmZmZmZiAwIDFweCAwOworICBwYWRkaW5nLXJpZ2h0OiAycHg7Cit9CisKKyNsZXR0ZXJzID4gc3BhbiB7CisgIGNvbG9yOiAjYmJiOworfQorICAKKyN0cGwgeworICBkaXNwbGF5OiBibG9jazsKKyAgcG9zaXRpb246IGZpeGVkOworICBvdmVyZmxvdzogYXV0bzsKKyAgcmlnaHQ6IDA7CisgIGxlZnQ6IDA7CisgIGJvdHRvbTogMDsKKyAgdG9wOiA1cHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgZGlzcGxheTogYmxvY2s7Cit9CisKKyN0cGwgLnBhY2toaWRlIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIGZsb2F0OiByaWdodDsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgY29sb3I6IHdoaXRlOworfQorCisjdHBsIC5wYWNrZm9jdXMgeworICBkaXNwbGF5OiBibG9jazsKKyAgZmxvYXQ6IHJpZ2h0OworICBmb250LXdlaWdodDogbm9ybWFsOworICBjb2xvcjogd2hpdGU7Cit9CisKKyN0cGwgLnBhY2thZ2VzID4gb2wgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGFkZmU2OworICAvKm1hcmdpbi1ib3R0b206IDVweDsqLworfQorCisvKiN0cGwgLnBhY2thZ2VzID4gb2wgPiBsaSB7CisgIG1hcmdpbi1ib3R0b206IDFweDsKK30qLworCisjdHBsIC5wYWNrYWdlcyA+IGxpID4gYSB7CisgIHBhZGRpbmc6IDBweCA1cHg7Cit9CisKKyN0cGwgLnBhY2thZ2VzID4gbGkgPiBhLnRwbHNob3cgeworICBkaXNwbGF5OiBibG9jazsKKyAgY29sb3I6IHdoaXRlOworICBmb250LXdlaWdodDogYm9sZDsKKyAgZGlzcGxheTogYmxvY2s7CisgIHRleHQtc2hhZG93OiAjMDAwMDAwIDAgMXB4IDA7Cit9CisKKyN0cGwgb2wgPiBsaS5wYWNrIHsKKyAgcGFkZGluZzogM3B4IDVweDsKKyAgYmFja2dyb3VuZDogdXJsKCJwYWNrYWdlc2JnLmdpZiIpOworICBiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDsKKyAgbWluLWhlaWdodDogMTRweDsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzZlODA4ZTsKK30KKworI3RwbCBvbCA+IGxpIHsKKyAgZGlzcGxheTogYmxvY2s7Cit9CisKKyN0cGwgLnRlbXBsYXRlcyA+IGxpIHsKKyAgcGFkZGluZy1sZWZ0OiA1cHg7CisgIG1pbi1oZWlnaHQ6IDE4cHg7Cit9CisKKyN0cGwgb2wgPiBsaSAuaWNvbiB7CisgIHBhZGRpbmctcmlnaHQ6IDVweDsKKyAgYm90dG9tOiAtMnB4OworICBwb3NpdGlvbjogcmVsYXRpdmU7Cit9CisKKyN0cGwgLnRlbXBsYXRlcyBkaXYucGxhY2Vob2xkZXIgeworICBwYWRkaW5nLXJpZ2h0OiA1cHg7CisgIHdpZHRoOiAxM3B4OworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Cit9CisKKyN0cGwgLnRlbXBsYXRlcyBzcGFuLnRwbExpbmsgeworICBwYWRkaW5nLWxlZnQ6IDVweDsKK30KKworI2NvbnRlbnQgeworICBib3JkZXItbGVmdC13aWR0aDogMXB4OworICBib3JkZXItbGVmdC1jb2xvcjogYmxhY2s7CisgIGJvcmRlci1sZWZ0LXN0eWxlOiB3aGl0ZTsKKyAgcmlnaHQ6IDBweDsKKyAgbGVmdDogMHB4OworICBib3R0b206IDBweDsKKyAgdG9wOiAwcHg7CisgIHBvc2l0aW9uOiBmaXhlZDsKKyAgbWFyZ2luLWxlZnQ6IDMwMHB4OworICBkaXNwbGF5OiBibG9jazsKK30KKworI2NvbnRlbnQgPiBpZnJhbWUgeworICBkaXNwbGF5OiBibG9jazsKKyAgaGVpZ2h0OiAxMDAlOworICB3aWR0aDogMTAwJTsKK30KKworLnVpLWxheW91dC1wYW5lIHsKKyAgYmFja2dyb3VuZDogI0ZGRjsKKyAgb3ZlcmZsb3c6IGF1dG87Cit9CisKKy51aS1sYXlvdXQtcmVzaXplciB7CisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdmaWx0ZXJiZy5naWYnKTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7CisgIGJhY2tncm91bmQtY29sb3I6ICNlZGVkZWU7IC8qIGxpZ2h0IGdyYXkgKi8KKyAgYm9yZGVyOjFweCBzb2xpZCAjYmJiYmJiOworICBib3JkZXItdG9wOjA7CisgIGJvcmRlci1ib3R0b206MDsKKyAgYm9yZGVyLWxlZnQ6IDA7Cit9CisKKy51aS1sYXlvdXQtdG9nZ2xlciB7CisgICAgYmFja2dyb3VuZDogI0FBQTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvaW5kZXguanMgYi9oaXZlL3NjYWxhZG9jcy9saWIvaW5kZXguanMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOTY2ODlhZQotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9pbmRleC5qcwpAQCAtMCwwICsxLDUzNiBAQAorLy8gwqkgMjAwOeKAkzIwMTAgRVBGTC9MQU1QCisvLyBjb2RlIGJ5IEdpbGxlcyBEdWJvY2hldCB3aXRoIGNvbnRyaWJ1dGlvbnMgYnkgSm9oYW5uZXMgUnVkb2xwaCBhbmQgInNwaXJvcyIKKwordmFyIHRvcExldmVsVGVtcGxhdGVzID0gdW5kZWZpbmVkOwordmFyIHRvcExldmVsUGFja2FnZXMgPSB1bmRlZmluZWQ7CisKK3ZhciBzY2hlZHVsZXIgPSB1bmRlZmluZWQ7CisKK3ZhciBraW5kRmlsdGVyU3RhdGUgPSB1bmRlZmluZWQ7Cit2YXIgZm9jdXNGaWx0ZXJTdGF0ZSA9IHVuZGVmaW5lZDsKKwordmFyIHRpdGxlID0gJChkb2N1bWVudCkuYXR0cigndGl0bGUnKTsKKwordmFyIGxhc3RIYXNoID0gIiI7CisKKyQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgICQoJ2JvZHknKS5sYXlvdXQoeworICAgICAgICB3ZXN0X19zaXplOiAnMjAlJywKKyAgICAgICAgY2VudGVyX19tYXNrQ29udGVudHM6IHRydWUKKyAgICB9KTsKKyAgICAkKCcjYnJvd3NlcicpLmxheW91dCh7CisgICAgICAgIGNlbnRlcl9fcGFuZVNlbGVjdG9yOiAiLnVpLXdlc3QtY2VudGVyIgorICAgICAgICAvLyxjZW50ZXJfX2luaXRDbG9zZWQ6dHJ1ZQorICAgICAgICAsbm9ydGhfX3BhbmVTZWxlY3RvcjogIi51aS13ZXN0LW5vcnRoIgorICAgIH0pOworICAgICQoJ2lmcmFtZScpLmJpbmQoImxvYWQiLCBmdW5jdGlvbigpeworICAgICAgICB2YXIgc3VidGl0bGUgPSAkKHRoaXMpLmNvbnRlbnRzKCkuZmluZCgndGl0bGUnKS50ZXh0KCk7CisgICAgICAgICQoZG9jdW1lbnQpLmF0dHIoJ3RpdGxlJywgKHRpdGxlID8gdGl0bGUgKyAiIC0gIiA6ICIiKSArIHN1YnRpdGxlKTsKKworICAgICAgICBzZXRVcmxGcmFnbWVudEZyb21GcmFtZVNyYygpOworICAgIH0pOworCisgICAgLy8gd29ya2Fyb3VuZCBmb3IgSUUncyBpZnJhbWUgc2l6aW5nIGxhY2sgb2Ygc21hcnRuZXNzCisgICAgaWYoJC5icm93c2VyLm1zaWUpIHsKKyAgICAgICAgZnVuY3Rpb24gZml4SUZyYW1lKCkgeworICAgICAgICAgICAgJCgnaWZyYW1lJykuaGVpZ2h0KCQod2luZG93KS5oZWlnaHQoKSApCisgICAgICAgIH0KKyAgICAgICAgJCgnaWZyYW1lJykuYmluZCgibG9hZCIsZml4SUZyYW1lKQorICAgICAgICAkKCdpZnJhbWUnKS5iaW5kKCJyZXNpemUiLGZpeElGcmFtZSkKKyAgICB9CisKKyAgICBzY2hlZHVsZXIgPSBuZXcgU2NoZWR1bGVyKCk7CisgICAgc2NoZWR1bGVyLmFkZExhYmVsKCJpbml0IiwgMSk7CisgICAgc2NoZWR1bGVyLmFkZExhYmVsKCJmb2N1cyIsIDIpOworICAgIHNjaGVkdWxlci5hZGRMYWJlbCgiZmlsdGVyIiwgNCk7CisKKyAgICBwcmVwYXJlRW50aXR5TGlzdCgpOworCisgICAgY29uZmlndXJlVGV4dEZpbHRlcigpOworICAgIGNvbmZpZ3VyZUtpbmRGaWx0ZXIoKTsKKyAgICBjb25maWd1cmVFbnRpdHlMaXN0KCk7CisKKyAgICBzZXRGcmFtZVNyY0Zyb21VcmxGcmFnbWVudCgpOworCisgICAgLy8gSWYgdGhlIHVybCBmcmFnbWVudCBjaGFuZ2VzLCBhZGp1c3QgdGhlIHNyYyBvZiBpZnJhbWUgInRlbXBsYXRlIi4KKyAgICAkKHdpbmRvdykuYmluZCgnaGFzaGNoYW5nZScsIGZ1bmN0aW9uKCkgeworICAgICAgaWYobGFzdEZyYWdtZW50ICE9IHdpbmRvdy5sb2NhdGlvbi5oYXNoKSB7CisgICAgICAgIGxhc3RGcmFnbWVudCA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworICAgICAgICBzZXRGcmFtZVNyY0Zyb21VcmxGcmFnbWVudCgpOworICAgICAgfQorICAgIH0pOworfSk7CisKKy8vIFNldCB0aGUgaWZyYW1lJ3Mgc3JjIGFjY29yZGluZyB0byB0aGUgZnJhZ21lbnQgb2YgdGhlIGN1cnJlbnQgdXJsLgorLy8gZnJhZ21lbnQgPSAiI3NjYWxhLkVpdGhlciIgPT4gaWZyYW1lIHVybCA9ICJzY2FsYS9FaXRoZXIuaHRtbCIKKy8vIGZyYWdtZW50ID0gIiNzY2FsYS5FaXRoZXJAaXNSaWdodDpCb29sZWFuIiA9PiBpZnJhbWUgdXJsID0gInNjYWxhL0VpdGhlci5odG1sI2lzUmlnaHQ6Qm9vbGVhbiIKK2Z1bmN0aW9uIHNldEZyYW1lU3JjRnJvbVVybEZyYWdtZW50KCkgeworICB2YXIgZnJhZ21lbnQgPSBsb2NhdGlvbi5oYXNoLnNsaWNlKDEpOworICBpZihmcmFnbWVudCkgeworICAgIHZhciBsb2MgPSBmcmFnbWVudC5zcGxpdCgiQCIpWzBdLnJlcGxhY2UoL1wuL2csICIvIik7CisgICAgaWYobG9jLmluZGV4T2YoIi5odG1sIikgPCAwKSBsb2MgKz0gIi5odG1sIjsKKyAgICBpZihmcmFnbWVudC5pbmRleE9mKCdAJykgPiAwKSBsb2MgKz0gKCIjIiArIGZyYWdtZW50LnNwbGl0KCJAIiwgMilbMV0pOworICAgIGZyYW1lc1sidGVtcGxhdGUiXS5sb2NhdGlvbi5yZXBsYWNlKGxvYyk7CisgIH0KKyAgZWxzZQorICAgIGZyYW1lc1sidGVtcGxhdGUiXS5sb2NhdGlvbi5yZXBsYWNlKCJwYWNrYWdlLmh0bWwiKTsKK30KKworLy8gU2V0IHRoZSB1cmwgZnJhZ21lbnQgYWNjb3JkaW5nIHRvIHRoZSBzcmMgb2YgdGhlIGlmcmFtZSAidGVtcGxhdGUiLgorLy8gaWZyYW1lIHVybCA9ICJzY2FsYS9FaXRoZXIuaHRtbCIgID0+ICB1cmwgZnJhZ21lbnQgPSAiI3NjYWxhLkVpdGhlciIKKy8vIGlmcmFtZSB1cmwgPSAic2NhbGEvRWl0aGVyLmh0bWwjaXNSaWdodDpCb29sZWFuIiAgPT4gIHVybCBmcmFnbWVudCA9ICIjc2NhbGEuRWl0aGVyQGlzUmlnaHQ6Qm9vbGVhbiIKK2Z1bmN0aW9uIHNldFVybEZyYWdtZW50RnJvbUZyYW1lU3JjKCkgeworICB0cnkgeworICAgIHZhciBjb21tb25MZW5ndGggPSBsb2NhdGlvbi5wYXRobmFtZS5sYXN0SW5kZXhPZigiLyIpOworICAgIHZhciBmcmFtZUxvY2F0aW9uID0gZnJhbWVzWyJ0ZW1wbGF0ZSJdLmxvY2F0aW9uOworICAgIHZhciByZWxhdGl2ZVBhdGggPSBmcmFtZUxvY2F0aW9uLnBhdGhuYW1lLnNsaWNlKGNvbW1vbkxlbmd0aCArIDEpOworCisgICAgaWYoIXJlbGF0aXZlUGF0aCB8fCBmcmFtZUxvY2F0aW9uLnBhdGhuYW1lLmluZGV4T2YoIi8iKSA8IDApCisgICAgICByZXR1cm47CisKKyAgICAvLyBBZGQgIywgcmVtb3ZlICIuaHRtbCIgYW5kIHJlcGxhY2UgIi8iIHdpdGggIi4iCisgICAgZnJhZ21lbnQgPSAiIyIgKyByZWxhdGl2ZVBhdGgucmVwbGFjZSgvXC5odG1sJC8sICIiKS5yZXBsYWNlKC9cLy9nLCAiLiIpOworCisgICAgLy8gQWRkIHRoZSBmcmFtZSdzIGhhc2ggYWZ0ZXIgYW4gQAorICAgIGlmKGZyYW1lTG9jYXRpb24uaGFzaCkgZnJhZ21lbnQgKz0gKCJAIiArIGZyYW1lTG9jYXRpb24uaGFzaC5zbGljZSgxKSk7CisKKyAgICAvLyBVc2UgcmVwbGFjZSB0byBub3QgYWRkIGhpc3RvcnkgaXRlbXMKKyAgICBsYXN0RnJhZ21lbnQgPSBmcmFnbWVudDsKKyAgICBsb2NhdGlvbi5yZXBsYWNlKGZyYWdtZW50KTsKKyAgfQorICBjYXRjaChlKSB7CisgICAgLy8gQ2hyb21lIGRvZXNuJ3QgYWxsb3cgcmVhZGluZyB0aGUgaWZyYW1lJ3MgbG9jYXRpb24gd2hlbgorICAgIC8vIHVzZWQgb24gdGhlIGxvY2FsIGZpbGUgc3lzdGVtLgorICB9Cit9CisKK3ZhciBJbmRleCA9IHt9OworCisoZnVuY3Rpb24gKG5zKSB7CisgICAgZnVuY3Rpb24gb3BlbkxpbmsodCwgdHlwZSkgeworICAgICAgICB2YXIgaHJlZjsKKyAgICAgICAgaWYgKHR5cGUgPT0gJ29iamVjdCcpIHsKKyAgICAgICAgICAgIGhyZWYgPSB0WydvYmplY3QnXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGhyZWYgPSB0WydjbGFzcyddIHx8IHRbJ3RyYWl0J10gfHwgdFsnY2FzZSBjbGFzcyddIHx8IHRbJ3R5cGUnXTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgJzxhIGNsYXNzPSJ0cGxzaG93IiB0YXJnZXQ9InRlbXBsYXRlIiBocmVmPSInLAorICAgICAgICAgICAgaHJlZiwKKyAgICAgICAgICAgICciPjxpbWcgd2lkdGg9IjEzIiBoZWlnaHQ9IjEzIiBjbGFzcz0iJywKKyAgICAgICAgICAgIHR5cGUsCisgICAgICAgICAgICAnIGljb24iIHNyYz0ibGliLycsCisgICAgICAgICAgICB0eXBlLAorICAgICAgICAgICAgJy5wbmciIC8+JworICAgICAgICBdLmpvaW4oJycpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGNyZWF0ZVBhY2thZ2VIZWFkZXIocGFjaykgeworICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgJzxsaSBjbGFzcz0icGFjayI+JywKKyAgICAgICAgICAgICc8YSBjbGFzcz0icGFja2ZvY3VzIj5mb2N1czwvYT48YSBjbGFzcz0icGFja2hpZGUiPmhpZGU8L2E+JywKKyAgICAgICAgICAgICc8YSBjbGFzcz0idHBsc2hvdyIgdGFyZ2V0PSJ0ZW1wbGF0ZSIgaHJlZj0iJywKKyAgICAgICAgICAgIHBhY2sucmVwbGFjZSgvXC4vZywgJy8nKSwKKyAgICAgICAgICAgICcvcGFja2FnZS5odG1sIj4nLAorICAgICAgICAgICAgcGFjaywKKyAgICAgICAgICAgICc8L2E+PC9saT4nCisgICAgICAgIF0uam9pbignJyk7CisgICAgfTsKKworICAgIGZ1bmN0aW9uIGNyZWF0ZUxpc3RJdGVtKHRlbXBsYXRlKSB7CisgICAgICAgIHZhciBpbm5lciA9ICcnOworCisKKyAgICAgICAgaWYgKHRlbXBsYXRlLm9iamVjdCkgeworICAgICAgICAgICAgaW5uZXIgKz0gb3BlbkxpbmsodGVtcGxhdGUsICdvYmplY3QnKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0ZW1wbGF0ZVsnY2xhc3MnXSB8fCB0ZW1wbGF0ZVsndHJhaXQnXSB8fCB0ZW1wbGF0ZVsnY2FzZSBjbGFzcyddIHx8IHRlbXBsYXRlWyd0eXBlJ10pIHsKKyAgICAgICAgICAgIGlubmVyICs9IChpbm5lciA9PSAnJykgPworICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJwbGFjZWhvbGRlciIgLz4nIDogJzwvYT4nOworICAgICAgICAgICAgaW5uZXIgKz0gb3BlbkxpbmsodGVtcGxhdGUsIHRlbXBsYXRlWyd0cmFpdCddID8gJ3RyYWl0JyA6IHRlbXBsYXRlWyd0eXBlJ10gPyAndHlwZScgOiAnY2xhc3MnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlubmVyICs9ICc8ZGl2IGNsYXNzPSJwbGFjZWhvbGRlciIvPic7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgJzxsaT4nLAorICAgICAgICAgICAgaW5uZXIsCisgICAgICAgICAgICAnPHNwYW4gY2xhc3M9InRwbExpbmsiPicsCisgICAgICAgICAgICB0ZW1wbGF0ZS5uYW1lLnJlcGxhY2UoL14uKlwuLywgJycpLAorICAgICAgICAgICAgJzwvc3Bhbj48L2E+PC9saT4nCisgICAgICAgIF0uam9pbignJyk7CisgICAgfQorCisKKyAgICBucy5jcmVhdGVQYWNrYWdlVHJlZSA9IGZ1bmN0aW9uIChwYWNrLCBtYXRjaGVkLCBmb2N1c2VkKSB7CisgICAgICAgIHZhciBodG1sID0gJC5tYXAobWF0Y2hlZCwgZnVuY3Rpb24gKGNoaWxkLCBpKSB7CisgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGlzdEl0ZW0oY2hpbGQpOworICAgICAgICB9KS5qb2luKCcnKTsKKworICAgICAgICB2YXIgaGVhZGVyOworICAgICAgICBpZiAoZm9jdXNlZCAmJiBwYWNrID09IGZvY3VzZWQpIHsKKyAgICAgICAgICAgIGhlYWRlciA9ICcnOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaGVhZGVyID0gY3JlYXRlUGFja2FnZUhlYWRlcihwYWNrKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICAnPG9sIGNsYXNzPSJwYWNrYWdlcyI+JywKKyAgICAgICAgICAgIGhlYWRlciwKKyAgICAgICAgICAgICc8b2wgY2xhc3M9InRlbXBsYXRlcyI+JywKKyAgICAgICAgICAgIGh0bWwsCisgICAgICAgICAgICAnPC9vbD48L29sPicKKyAgICAgICAgXS5qb2luKCcnKTsKKyAgICB9CisKKyAgICBucy5rZXlzID0gZnVuY3Rpb24gKG9iaikgeworICAgICAgICB2YXIgcmVzdWx0ID0gW107CisgICAgICAgIHZhciBrZXk7CisgICAgICAgIGZvciAoa2V5IGluIG9iaikgeworICAgICAgICAgICAgcmVzdWx0LnB1c2goa2V5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZhciBoaWRkZW5QYWNrYWdlcyA9IHt9OworCisgICAgZnVuY3Rpb24gc3ViUGFja2FnZXMocGFjaykgeworICAgICAgICByZXR1cm4gJC5ncmVwKCQoJyN0cGwgb2wucGFja2FnZXMnKSwgZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4KSB7CisgICAgICAgICAgICB2YXIgcGFjayA9ICQoJ2xpLnBhY2sgPiAudHBsc2hvdycsIGVsZW1lbnQpLnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBwYWNrLmluZGV4T2YocGFjayArICcuJykgPT0gMDsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgbnMuaGlkZVBhY2thZ2UgPSBmdW5jdGlvbiAob2wpIHsKKyAgICAgICAgdmFyIHNlbGVjdGVkID0gJCgnbGkucGFjayA+IC50cGxzaG93Jywgb2wpLnRleHQoKTsKKyAgICAgICAgaGlkZGVuUGFja2FnZXNbc2VsZWN0ZWRdID0gdHJ1ZTsKKworICAgICAgICAkKCdvbC50ZW1wbGF0ZXMnLCBvbCkuaGlkZSgpOworCisgICAgICAgICQuZWFjaChzdWJQYWNrYWdlcyhzZWxlY3RlZCksIGZ1bmN0aW9uIChpbmRleCwgZWxlbWVudCkgeworICAgICAgICAgICAgJChlbGVtZW50KS5oaWRlKCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIG5zLnNob3dQYWNrYWdlID0gZnVuY3Rpb24gKG9sLCBzdGF0ZSkgeworICAgICAgICB2YXIgc2VsZWN0ZWQgPSAkKCdsaS5wYWNrID4gLnRwbHNob3cnLCBvbCkudGV4dCgpOworICAgICAgICBoaWRkZW5QYWNrYWdlc1tzZWxlY3RlZF0gPSBmYWxzZTsKKworICAgICAgICAkKCdvbC50ZW1wbGF0ZXMnLCBvbCkuc2hvdygpOworCisgICAgICAgICQuZWFjaChzdWJQYWNrYWdlcyhzZWxlY3RlZCksIGZ1bmN0aW9uIChpbmRleCwgZWxlbWVudCkgeworICAgICAgICAgICAgJChlbGVtZW50KS5zaG93KCk7CisKKyAgICAgICAgICAgIC8vIFdoZW4gdGhlIGZpbHRlciBpcyBpbiAicGFja3MiIHN0YXRlLAorICAgICAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBzaG93IHRoZSBgLnRlbXBsYXRlc2AKKyAgICAgICAgICAgIHZhciBrZXkgPSAkKCdsaS5wYWNrID4gLnRwbHNob3cnLCBlbGVtZW50KS50ZXh0KCk7CisgICAgICAgICAgICBpZiAoaGlkZGVuUGFja2FnZXNba2V5XSB8fCBzdGF0ZSA9PSAncGFja3MnKSB7CisgICAgICAgICAgICAgICAgJCgnb2wudGVtcGxhdGVzJywgZWxlbWVudCkuaGlkZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKK30pKEluZGV4KTsKKworZnVuY3Rpb24gY29uZmlndXJlRW50aXR5TGlzdCgpIHsKKyAgICBraW5kRmlsdGVyU3luYygpOworICAgIGNvbmZpZ3VyZUhpZGVGaWx0ZXIoKTsKKyAgICBjb25maWd1cmVGb2N1c0ZpbHRlcigpOworICAgIHRleHRGaWx0ZXIoKTsKK30KKworLyogVXBkYXRlcyB0aGUgbGlzdCBvZiBlbnRpdGllcyAoaS5lLiB0aGUgY29udGVudCBvZiB0aGUgI3RwbCBlbGVtZW50KSBmcm9tIHRoZSByYXcgZm9ybSBnZW5lcmF0ZWQgYnkgU2NhbGFkb2MgdG8gYQorICAgZm9ybSBzdWl0YWJsZSBmb3IgZGlzcGxheS4gSW4gcGFydGljdWxhciwgaXQgYWRkcyBjbGFzcyBhbmQgb2JqZWN0IGV0Yy4gaWNvbnMsIGFuZCBpdCBjb25maWd1cmVzIGxpbmtzIHRvIG9wZW4gaW4KKyAgIHRoZSByaWdodCBmcmFtZS4gRnVydGhlcm1vcmUsIGl0IHNldHMgdGhlIHR3byByZWZlcmVuY2UgdG9wLWxldmVsIGVudGl0aWVzIGxpc3RzICh0b3BMZXZlbFRlbXBsYXRlcyBhbmQKKyAgIHRvcExldmVsUGFja2FnZXMpIHRvIHNlcnZlIGFzIHJlZmVyZW5jZSBmb3IgcmVzZXR0aW5nIHRoZSBsaXN0IHdoZW4gbmVlZGVkLgorICAgQmUgYWR2aXNlZDogdGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSwgb24gcGFnZSBsb2FkLiAqLworZnVuY3Rpb24gcHJlcGFyZUVudGl0eUxpc3QoKSB7CisgICAgdmFyIGNsYXNzSWNvbiA9ICQoIiNsaWJyYXJ5ID4gaW1nLmNsYXNzIik7CisgICAgdmFyIHRyYWl0SWNvbiA9ICQoIiNsaWJyYXJ5ID4gaW1nLnRyYWl0Iik7CisgICAgdmFyIHR5cGVJY29uID0gJCgiI2xpYnJhcnkgPiBpbWcudHlwZSIpOworICAgIHZhciBvYmplY3RJY29uID0gJCgiI2xpYnJhcnkgPiBpbWcub2JqZWN0Iik7CisgICAgdmFyIHBhY2thZ2VJY29uID0gJCgiI2xpYnJhcnkgPiBpbWcucGFja2FnZSIpOworCisgICAgJCgnI3RwbCBsaS5wYWNrID4gYS50cGxzaG93JykuYXR0cigidGFyZ2V0IiwgInRlbXBsYXRlIik7CisgICAgJCgnI3RwbCBsaS5wYWNrJykuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgICQoInNwYW4uY2xhc3MiLCB0aGlzKS5lYWNoKGZ1bmN0aW9uKCkgeyAkKHRoaXMpLnJlcGxhY2VXaXRoKGNsYXNzSWNvbi5jbG9uZSgpKTsgfSk7CisgICAgICAgICQoInNwYW4udHJhaXQiLCB0aGlzKS5lYWNoKGZ1bmN0aW9uKCkgeyAkKHRoaXMpLnJlcGxhY2VXaXRoKHRyYWl0SWNvbi5jbG9uZSgpKTsgfSk7CisgICAgICAgICQoInNwYW4udHlwZSIsIHRoaXMpLmVhY2goZnVuY3Rpb24oKSB7ICQodGhpcykucmVwbGFjZVdpdGgodHlwZUljb24uY2xvbmUoKSk7IH0pOworICAgICAgICAkKCJzcGFuLm9iamVjdCIsIHRoaXMpLmVhY2goZnVuY3Rpb24oKSB7ICQodGhpcykucmVwbGFjZVdpdGgob2JqZWN0SWNvbi5jbG9uZSgpKTsgfSk7CisgICAgICAgICQoInNwYW4ucGFja2FnZSIsIHRoaXMpLmVhY2goZnVuY3Rpb24oKSB7ICQodGhpcykucmVwbGFjZVdpdGgocGFja2FnZUljb24uY2xvbmUoKSk7IH0pOworICAgIH0pOworICAgICQoJyN0cGwgbGkucGFjaycpCisgICAgICAgIC5wcmVwZW5kKCI8YSBjbGFzcz0ncGFja2hpZGUnPmhpZGU8L2E+IikKKyAgICAgICAgLnByZXBlbmQoIjxhIGNsYXNzPSdwYWNrZm9jdXMnPmZvY3VzPC9hPiIpOworfQorCisvKiBIYW5kbGVzIGFsbCBrZXkgcHJlc3NlcyB3aGlsZSBzY3JvbGxpbmcgYXJvdW5kIHdpdGgga2V5Ym9hcmQgc2hvcnRjdXRzIGluIGxlZnQgcGFuZWwgKi8KK2Z1bmN0aW9uIGtleWJvYXJkU2Nyb2xsZG93bkxlZnRQYW5lKCkgeworICAgIHNjaGVkdWxlci5hZGQoImluaXQiLCBmdW5jdGlvbigpIHsKKyAgICAgICAgJCgiI3RleHRmaWx0ZXIgaW5wdXQiKS5ibHVyKCk7CisgICAgICAgIHZhciAkaXRlbXMgPSAkKCIjdHBsIGxpIik7CisgICAgICAgICRpdGVtcy5maXJzdCgpLmFkZENsYXNzKCdzZWxlY3RlZCcpOworCisgICAgICAgICQod2luZG93KS5iaW5kKCJrZXlkb3duIiwgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgdmFyICRvbGQgPSAkaXRlbXMuZmlsdGVyKCcuc2VsZWN0ZWQnKSwKKyAgICAgICAgICAgICAgICAkbmV3OworCisgICAgICAgICAgICBzd2l0Y2ggKCBlLmtleUNvZGUgKSB7CisKKyAgICAgICAgICAgIGNhc2UgOTogLy8gdGFiCisgICAgICAgICAgICAgICAgJG9sZC5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAxMzogLy8gZW50ZXIKKyAgICAgICAgICAgICAgICAkb2xkLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpOworICAgICAgICAgICAgICAgIHZhciAkdXJsID0gJG9sZC5jaGlsZHJlbigpLmZpbHRlcignYTpsYXN0JykuYXR0cignaHJlZicpOworICAgICAgICAgICAgICAgICQoIiN0ZW1wbGF0ZSIpLmF0dHIoInNyYyIsJHVybCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgMjc6IC8vIGVzY2FwZQorICAgICAgICAgICAgICAgICRvbGQucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7CisgICAgICAgICAgICAgICAgJCh3aW5kb3cpLnVuYmluZChlKTsKKyAgICAgICAgICAgICAgICAkKCIjdGV4dGZpbHRlciBpbnB1dCIpLmZvY3VzKCk7CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAzODogLy8gdXAKKyAgICAgICAgICAgICAgICAkbmV3ID0gJG9sZC5wcmV2KCk7CisKKyAgICAgICAgICAgICAgICBpZiAoISRuZXcubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgICRuZXcgPSAkb2xkLnBhcmVudCgpLnByZXYoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoJG5ldy5pcygnb2wnKSAmJiAkbmV3LmNoaWxkcmVuKCc6bGFzdCcpLmlzKCdvbCcpKSB7CisgICAgICAgICAgICAgICAgICAgICRuZXcgPSAkbmV3LmNoaWxkcmVuKCkuY2hpbGRyZW4oJzpsYXN0Jyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgkbmV3LmlzKCdvbCcpKSB7CisgICAgICAgICAgICAgICAgICAgICRuZXcgPSAkbmV3LmNoaWxkcmVuKCc6bGFzdCcpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDQwOiAvLyBkb3duCisgICAgICAgICAgICAgICAgJG5ldyA9ICRvbGQubmV4dCgpOworICAgICAgICAgICAgICAgIGlmICghJG5ldy5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgJG5ldyA9ICRvbGQucGFyZW50KCkucGFyZW50KCkubmV4dCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoJG5ldy5pcygnb2wnKSkgeworICAgICAgICAgICAgICAgICAgICAkbmV3ID0gJG5ldy5jaGlsZHJlbignOmZpcnN0Jyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoJG5ldy5pcygnbGknKSkgeworICAgICAgICAgICAgICAgICRvbGQucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7CisgICAgICAgICAgICAgICAgJG5ldy5hZGRDbGFzcygnc2VsZWN0ZWQnKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09IDM4KSB7CisgICAgICAgICAgICAgICAgJCh3aW5kb3cpLnVuYmluZChlKTsKKyAgICAgICAgICAgICAgICAkKCIjdGV4dGZpbHRlciBpbnB1dCIpLmZvY3VzKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0pOworfQorCisvKiBDb25maWd1cmVzIHRoZSB0ZXh0IGZpbHRlciAgKi8KK2Z1bmN0aW9uIGNvbmZpZ3VyZVRleHRGaWx0ZXIoKSB7CisgICAgc2NoZWR1bGVyLmFkZCgiaW5pdCIsIGZ1bmN0aW9uKCkgeworICAgICAgICAkKCIjdGV4dGZpbHRlciIpLmFwcGVuZCgiPHNwYW4gY2xhc3M9J3ByZScvPjxzcGFuIGNsYXNzPSdpbnB1dCc+PGlucHV0IGlkPSdpbmRleC1pbnB1dCcgdHlwZT0ndGV4dCcgYWNjZXNza2V5PScvJy8+PC9zcGFuPjxzcGFuIGNsYXNzPSdwb3N0Jy8+Iik7CisgICAgICAgIHZhciBpbnB1dCA9ICQoIiN0ZXh0ZmlsdGVyIGlucHV0Iik7CisgICAgICAgIHJlc2l6ZUZpbHRlckJsb2NrKCk7CisgICAgICAgIGlucHV0LmJpbmQoJ2tleXVwJywgZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09IDI3KSB7IC8vIGVzY2FwZQorICAgICAgICAgICAgICAgIGlucHV0LmF0dHIoInZhbHVlIiwgIiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT0gNDApIHsgLy8gZG93biBhcnJvdworICAgICAgICAgICAgICAgICQod2luZG93KS51bmJpbmQoImtleWRvd24iKTsKKyAgICAgICAgICAgICAgICBrZXlib2FyZFNjcm9sbGRvd25MZWZ0UGFuZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRleHRGaWx0ZXIoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGlucHV0LmJpbmQoJ2tleWRvd24nLCBmdW5jdGlvbihldmVudCkgeworICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT0gOSkgeyAvLyB0YWIKKyAgICAgICAgICAgICAgICAkKCIjdGVtcGxhdGUiKS5jb250ZW50cygpLmZpbmQoIiNtYnJzZWwtaW5wdXQiKS5mb2N1cygpOworICAgICAgICAgICAgICAgIGlucHV0LmF0dHIoInZhbHVlIiwgIiIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRleHRGaWx0ZXIoKTsKKyAgICAgICAgfSk7CisgICAgICAgIGlucHV0LmZvY3VzKGZ1bmN0aW9uKGV2ZW50KSB7IGlucHV0LnNlbGVjdCgpOyB9KTsKKyAgICB9KTsKKyAgICBzY2hlZHVsZXIuYWRkKCJpbml0IiwgZnVuY3Rpb24oKSB7CisgICAgICAgICQoIiN0ZXh0ZmlsdGVyID4gLnBvc3QiKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICAgICAgJCgiI3RleHRmaWx0ZXIgaW5wdXQiKS5hdHRyKCJ2YWx1ZSIsICIiKTsKKyAgICAgICAgICAgIHRleHRGaWx0ZXIoKTsKKyAgICAgICAgfSk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIGNvbXBpbGVQYXR0ZXJuKHF1ZXJ5KSB7CisgICAgdmFyIGVzY2FwZWQgPSBxdWVyeS5yZXBsYWNlKC8oW1wuXCpcK1w/XHxcKFwpXFtcXVxcXSkvZywgJ1xcJDEnKTsKKworICAgIGlmIChxdWVyeS50b0xvd2VyQ2FzZSgpICE9IHF1ZXJ5KSB7CisgICAgICAgIC8vIFJlZ2V4cCB0aGF0IG1hdGNoZXMgQ2FtZWxDYXNlIHN1YmJpdHM6ICJCaVNlIiBpcworICAgICAgICAvLyAiW2Etel0qQmlbYS16XSpTZSIgYW5kIG1hdGNoZXMgIkJpdFNldCIsICJBQml0U2V0IiwgLi4uCisgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGVzY2FwZWQucmVwbGFjZSgvKFtBLVpdKS9nLCJbYS16XSokMSIpKTsKKyAgICB9CisgICAgZWxzZSB7IC8vIGlmIHF1ZXJ5IGlzIGFsbCBsb3dlciBjYXNlIG1ha2UgYSBub3JtYWwgY2FzZSBpbnNlbnNpdGl2ZSBzZWFyY2gKKyAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoZXNjYXBlZCwgImkiKTsKKyAgICB9Cit9CisKKy8vIEZpbHRlcnMgYWxsIGZvY3VzZWQgdGVtcGxhdGVzIGFuZCBwYWNrYWdlcy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgbWFkZSBsZXNzLWJsb2NraW5nLgorLy8gICBAcGFyYW0gcXVlcnkgVGhlIHN0cmluZyBvZiB0aGUgcXVlcnkKK2Z1bmN0aW9uIHRleHRGaWx0ZXIoKSB7CisgICAgc2NoZWR1bGVyLmNsZWFyKCJmaWx0ZXIiKTsKKworICAgICQoJyN0cGwnKS5odG1sKCcnKTsKKworICAgIHZhciBxdWVyeSA9ICQoIiN0ZXh0ZmlsdGVyIGlucHV0IikuYXR0cigidmFsdWUiKSB8fCAnJzsKKyAgICB2YXIgcXVlcnlSZWdFeHAgPSBjb21waWxlUGF0dGVybihxdWVyeSk7CisKKyAgICB2YXIgaW5kZXggPSAwOworCisgICAgdmFyIHNlYXJjaExvb3AgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBwYWNrYWdlcyA9IEluZGV4LmtleXMoSW5kZXguUEFDS0FHRVMpLnNvcnQoKTsKKworICAgICAgICB3aGlsZSAocGFja2FnZXNbaW5kZXhdKSB7CisgICAgICAgICAgICB2YXIgcGFjayA9IHBhY2thZ2VzW2luZGV4XTsKKyAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IEluZGV4LlBBQ0tBR0VTW3BhY2tdOworICAgICAgICAgICAgaW5kZXgrKzsKKworICAgICAgICAgICAgaWYgKGZvY3VzRmlsdGVyU3RhdGUpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFjayA9PSBmb2N1c0ZpbHRlclN0YXRlIHx8CisgICAgICAgICAgICAgICAgICAgIHBhY2suaW5kZXhPZihmb2N1c0ZpbHRlclN0YXRlICsgJy4nKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBtYXRjaGVkID0gJC5ncmVwKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQsIGkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcXVlcnlSZWdFeHAudGVzdChjaGlsZC5uYW1lKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpZiAobWF0Y2hlZC5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgJCgnI3RwbCcpLmFwcGVuZChJbmRleC5jcmVhdGVQYWNrYWdlVHJlZShwYWNrLCBtYXRjaGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNGaWx0ZXJTdGF0ZSkpOworICAgICAgICAgICAgICAgIHNjaGVkdWxlci5hZGQoJ2ZpbHRlcicsIHNlYXJjaExvb3ApOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgICQoJyN0cGwgYS5wYWNrZm9jdXMnKS5jbGljayhmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBmb2N1c0ZpbHRlcigkKHRoaXMpLnBhcmVudCgpLnBhcmVudCgpKTsKKyAgICAgICAgfSk7CisgICAgICAgIGNvbmZpZ3VyZUhpZGVGaWx0ZXIoKTsKKyAgICB9OworCisgICAgc2NoZWR1bGVyLmFkZCgnZmlsdGVyJywgc2VhcmNoTG9vcCk7Cit9CisKKy8qIENvbmZpZ3VyZXMgdGhlIGhpZGUgdG9vbCBieSBhZGRpbmcgdGhlIGhpZGUgbGluayB0byBhbGwgcGFja2FnZXMuICovCitmdW5jdGlvbiBjb25maWd1cmVIaWRlRmlsdGVyKCkgeworICAgICQoJyN0cGwgbGkucGFjayBhLnBhY2toaWRlJykuY2xpY2soZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgcGFja2hpZGUgPSAkKHRoaXMpCisgICAgICAgIHZhciBhY3Rpb24gPSBwYWNraGlkZS50ZXh0KCk7CisKKyAgICAgICAgdmFyIG9sID0gJCh0aGlzKS5wYXJlbnQoKS5wYXJlbnQoKTsKKworICAgICAgICBpZiAoYWN0aW9uID09ICJoaWRlIikgeworICAgICAgICAgICAgSW5kZXguaGlkZVBhY2thZ2Uob2wpOworICAgICAgICAgICAgcGFja2hpZGUudGV4dCgic2hvdyIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgSW5kZXguc2hvd1BhY2thZ2Uob2wsIGtpbmRGaWx0ZXJTdGF0ZSk7CisgICAgICAgICAgICBwYWNraGlkZS50ZXh0KCJoaWRlIik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0pOworfQorCisvKiBDb25maWd1cmVzIHRoZSBmb2N1cyB0b29sIGJ5IGFkZGluZyB0aGUgZm9jdXMgYmFyIGluIHRoZSBmaWx0ZXIgYm94IChpbml0aWFsbHkgaGlkZGVuKSwgYW5kIGJ5IGFkZGluZyB0aGUgZm9jdXMKKyAgIGxpbmsgdG8gYWxsIHBhY2thZ2VzLiAqLworZnVuY3Rpb24gY29uZmlndXJlRm9jdXNGaWx0ZXIoKSB7CisgICAgc2NoZWR1bGVyLmFkZCgiaW5pdCIsIGZ1bmN0aW9uKCkgeworICAgICAgICBmb2N1c0ZpbHRlclN0YXRlID0gbnVsbDsKKyAgICAgICAgaWYgKCQoIiNmb2N1c2ZpbHRlciIpLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICAkKCIjZmlsdGVyIikuYXBwZW5kKCI8ZGl2IGlkPSdmb2N1c2ZpbHRlcic+Zm9jdXNlZCBvbiA8c3BhbiBjbGFzcz0nZm9jdXNjb2xsJz48L3NwYW4+IDxhIGNsYXNzPSdmb2N1c3JlbW92ZSc+PGltZyBjbGFzcz0naWNvbicgc3JjPSdsaWIvcmVtb3ZlLnBuZycvPjwvYT48L2Rpdj4iKTsKKyAgICAgICAgICAgICQoIiNmb2N1c2ZpbHRlciA+IC5mb2N1c3JlbW92ZSIpLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgICAgICAgICAgdGV4dEZpbHRlcigpOworCisgICAgICAgICAgICAgICAgJCgiI2ZvY3VzZmlsdGVyIikuaGlkZSgpOworICAgICAgICAgICAgICAgICQoIiNraW5kZmlsdGVyIikuc2hvdygpOworICAgICAgICAgICAgICAgIHJlc2l6ZUZpbHRlckJsb2NrKCk7CisgICAgICAgICAgICAgICAgZm9jdXNGaWx0ZXJTdGF0ZSA9IG51bGw7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICQoIiNmb2N1c2ZpbHRlciIpLmhpZGUoKTsKKyAgICAgICAgICAgIHJlc2l6ZUZpbHRlckJsb2NrKCk7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICBzY2hlZHVsZXIuYWRkKCJpbml0IiwgZnVuY3Rpb24oKSB7CisgICAgICAgICQoJyN0cGwgbGkucGFjayBhLnBhY2tmb2N1cycpLmNsaWNrKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGZvY3VzRmlsdGVyKCQodGhpcykucGFyZW50KCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworLyogRm9jdXNlcyB0aGUgZW50aXR5IGluZGV4IG9uIGEgc3BlY2lmaWMgcGFja2FnZS4gVG8gZG8gc28sIGl0IHdpbGwgY29weSB0aGUgc3ViLXRlbXBsYXRlcyBhbmQgc3ViLXBhY2thZ2VzIG9mIHRoZQorICAgZm9jdXNlcyBwYWNrYWdlIGludG8gdGhlIHRvcC1sZXZlbCB0ZW1wbGF0ZXMgYW5kIHBhY2thZ2VzIHBvc2l0aW9uIG9mIHRoZSBpbmRleC4gVGhlIG9yaWdpbmFsIHRvcC1sZXZlbAorICAgICBAcGFyYW0gcGFja2FnZSBUaGUgPGxpPiBlbGVtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHBhY2thZ2UgaW4gdGhlIGVudGl0eSBpbmRleCAqLworZnVuY3Rpb24gZm9jdXNGaWx0ZXIocGFja2FnZSkgeworICAgIHNjaGVkdWxlci5jbGVhcigiZmlsdGVyIik7CisKKyAgICB2YXIgY3VycmVudEZvY3VzID0gJCgnbGkucGFjayA+IC50cGxzaG93JywgcGFja2FnZSkudGV4dCgpOworICAgICQoIiNmb2N1c2ZpbHRlciA+IC5mb2N1c2NvbGwiKS5lbXB0eSgpOworICAgICQoIiNmb2N1c2ZpbHRlciA+IC5mb2N1c2NvbGwiKS5hcHBlbmQoY3VycmVudEZvY3VzKTsKKworICAgICQoIiNmb2N1c2ZpbHRlciIpLnNob3coKTsKKyAgICAkKCIja2luZGZpbHRlciIpLmhpZGUoKTsKKyAgICByZXNpemVGaWx0ZXJCbG9jaygpOworICAgIGZvY3VzRmlsdGVyU3RhdGUgPSBjdXJyZW50Rm9jdXM7CisgICAga2luZEZpbHRlclN5bmMoKTsKKworICAgIHRleHRGaWx0ZXIoKTsKK30KKworZnVuY3Rpb24gY29uZmlndXJlS2luZEZpbHRlcigpIHsKKyAgICBzY2hlZHVsZXIuYWRkKCJpbml0IiwgZnVuY3Rpb24oKSB7CisgICAgICAgIGtpbmRGaWx0ZXJTdGF0ZSA9ICJhbGwiOworICAgICAgICAkKCIjZmlsdGVyIikuYXBwZW5kKCI8ZGl2IGlkPSdraW5kZmlsdGVyJz48YT5kaXNwbGF5IHBhY2thZ2VzIG9ubHk8L2E+PC9kaXY+Iik7CisgICAgICAgICQoIiNraW5kZmlsdGVyID4gYSIpLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7IGtpbmRGaWx0ZXIoInBhY2tzIik7IH0pOworICAgICAgICByZXNpemVGaWx0ZXJCbG9jaygpOworICAgIH0pOworfQorCitmdW5jdGlvbiBraW5kRmlsdGVyKGtpbmQpIHsKKyAgICBpZiAoa2luZCA9PSAicGFja3MiKSB7CisgICAgICAgIGtpbmRGaWx0ZXJTdGF0ZSA9ICJwYWNrcyI7CisgICAgICAgIGtpbmRGaWx0ZXJTeW5jKCk7CisgICAgICAgICQoIiNraW5kZmlsdGVyID4gYSIpLnJlcGxhY2VXaXRoKCI8YT5kaXNwbGF5IGFsbCBlbnRpdGllczwvYT4iKTsKKyAgICAgICAgJCgiI2tpbmRmaWx0ZXIgPiBhIikuY2xpY2soZnVuY3Rpb24oZXZlbnQpIHsga2luZEZpbHRlcigiYWxsIik7IH0pOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAga2luZEZpbHRlclN0YXRlID0gImFsbCI7CisgICAgICAgIGtpbmRGaWx0ZXJTeW5jKCk7CisgICAgICAgICQoIiNraW5kZmlsdGVyID4gYSIpLnJlcGxhY2VXaXRoKCI8YT5kaXNwbGF5IHBhY2thZ2VzIG9ubHk8L2E+Iik7CisgICAgICAgICQoIiNraW5kZmlsdGVyID4gYSIpLmNsaWNrKGZ1bmN0aW9uKGV2ZW50KSB7IGtpbmRGaWx0ZXIoInBhY2tzIik7IH0pOworICAgIH0KK30KKworLyogQXBwbGllcyB0aGUga2luZCBmaWx0ZXIuICovCitmdW5jdGlvbiBraW5kRmlsdGVyU3luYygpIHsKKyAgICBpZiAoa2luZEZpbHRlclN0YXRlID09ICJhbGwiIHx8IGZvY3VzRmlsdGVyU3RhdGUgIT0gbnVsbCkgeworICAgICAgICAkKCIjdHBsIGEucGFja2hpZGUiKS50ZXh0KCdoaWRlJyk7CisgICAgICAgICQoIiN0cGwgb2wudGVtcGxhdGVzIikuc2hvdygpOworICAgIH0gZWxzZSB7CisgICAgICAgICQoIiN0cGwgYS5wYWNraGlkZSIpLnRleHQoJ3Nob3cnKTsKKyAgICAgICAgJCgiI3RwbCBvbC50ZW1wbGF0ZXMiKS5oaWRlKCk7CisgICAgfQorfQorCitmdW5jdGlvbiByZXNpemVGaWx0ZXJCbG9jaygpIHsKKyAgICAkKCIjdHBsIikuY3NzKCJ0b3AiLCAkKCIjZmlsdGVyIikub3V0ZXJIZWlnaHQodHJ1ZSkpOworfQpkaWZmIC0tZ2l0IGEvaGl2ZS9zY2FsYWRvY3MvbGliL2pxdWVyeS11aS5qcyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9qcXVlcnktdWkuanMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmFhYjBjZgotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9qcXVlcnktdWkuanMKQEAgLTAsMCArMSw2IEBACisvKiEgalF1ZXJ5IFVJIC0gdjEuOS4wIC0gMjAxMi0xMC0wNQorKiBodHRwOi8vanF1ZXJ5dWkuY29tCisqIEluY2x1ZGVzOiBqcXVlcnkudWkuY29yZS5qcywganF1ZXJ5LnVpLndpZGdldC5qcywganF1ZXJ5LnVpLm1vdXNlLmpzLCBqcXVlcnkudWkucG9zaXRpb24uanMsIGpxdWVyeS51aS5hY2NvcmRpb24uanMsIGpxdWVyeS51aS5hdXRvY29tcGxldGUuanMsIGpxdWVyeS51aS5idXR0b24uanMsIGpxdWVyeS51aS5kYXRlcGlja2VyLmpzLCBqcXVlcnkudWkuZGlhbG9nLmpzLCBqcXVlcnkudWkuZHJhZ2dhYmxlLmpzLCBqcXVlcnkudWkuZHJvcHBhYmxlLmpzLCBqcXVlcnkudWkuZWZmZWN0LmpzLCBqcXVlcnkudWkuZWZmZWN0LWJsaW5kLmpzLCBqcXVlcnkudWkuZWZmZWN0LWJvdW5jZS5qcywganF1ZXJ5LnVpLmVmZmVjdC1jbGlwLmpzLCBqcXVlcnkudWkuZWZmZWN0LWRyb3AuanMsIGpxdWVyeS51aS5lZmZlY3QtZXhwbG9kZS5qcywganF1ZXJ5LnVpLmVmZmVjdC1mYWRlLmpzLCBqcXVlcnkudWkuZWZmZWN0LWZvbGQuanMsIGpxdWVyeS51aS5lZmZlY3QtaGlnaGxpZ2h0LmpzLCBqcXVlcnkudWkuZWZmZWN0LXB1bHNhdGUuanMsIGpxdWVyeS51aS5lZmZlY3Qtc2NhbGUuanMsIGpxdWVyeS51aS5lZmZlY3Qtc2hha2UuanMsIGpxdWVyeS51aS5lZmZlY3Qtc2xpZGUuanMsIGpxdWVyeS51aS5lZmZlY3QtdHJhbnNmZXIuanMsIGpxdWVyeS51aS5tZW51LmpzLCBqcXVlcnkudWkucHJvZ3Jlc3NiYXIuanMsIGpxdWVyeS51aS5yZXNpemFibGUuanMsIGpxdWVyeS51aS5zZWxlY3RhYmxlLmpzLCBqcXVlcnkudWkuc2xpZGVyLmpzLCBqcXVlcnkudWkuc29ydGFibGUuanMsIGpxdWVyeS51aS5zcGlubmVyLmpzLCBqcXVlcnkudWkudGFicy5qcywganF1ZXJ5LnVpLnRvb2x0aXAuanMKKyogQ29weXJpZ2h0IChjKSAyMDEyIGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMgTGljZW5zZWQgTUlUICovCisKKyhmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkodCxuKXt2YXIgcixpLG8sdT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImFyZWEiPT09dT8ocj10LnBhcmVudE5vZGUsaT1yLm5hbWUsIXQuaHJlZnx8IWl8fHIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJtYXAiPyExOihvPWUoImltZ1t1c2VtYXA9IyIraSsiXSIpWzBdLCEhbyYmcyhvKSkpOigvaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QvLnRlc3QodSk/IXQuZGlzYWJsZWQ6ImEiPT09dT90LmhyZWZ8fG46bikmJnModCl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4hZSh0KS5wYXJlbnRzKCkuYW5kU2VsZigpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBlLmNzcyh0aGlzLCJ2aXNpYmlsaXR5Iik9PT0iaGlkZGVuInx8ZS5leHByLmZpbHRlcnMuaGlkZGVuKHRoaXMpfSkubGVuZ3RofXZhciBuPTAscj0vXnVpLWlkLVxkKyQvO2UudWk9ZS51aXx8e307aWYoZS51aS52ZXJzaW9uKXJldHVybjtlLmV4dGVuZChlLnVpLHt2ZXJzaW9uOiIxLjkuMCIsa2V5Q29kZTp7QkFDS1NQQUNFOjgsQ09NTUE6MTg4LERFTEVURTo0NixET1dOOjQwLEVORDozNSxFTlRFUjoxMyxFU0NBUEU6MjcsSE9NRTozNixMRUZUOjM3LE5VTVBBRF9BREQ6MTA3LE5VTVBBRF9ERUNJTUFMOjExMCxOVU1QQURfRElWSURFOjExMSxOVU1QQURfRU5URVI6MTA4LE5VTVBBRF9NVUxUSVBMWToxMDYsTlVNUEFEX1NVQlRSQUNUOjEwOSxQQUdFX0RPV046MzQsUEFHRV9VUDozMyxQRVJJT0Q6MTkwLFJJR0hUOjM5LFNQQUNFOjMyLFRBQjo5LFVQOjM4fX0pLGUuZm4uZXh0ZW5kKHtfZm9jdXM6ZS5mbi5mb2N1cyxmb2N1czpmdW5jdGlvbih0LG4pe3JldHVybiB0eXBlb2YgdD09Im51bWJlciI/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZShyKS5mb2N1cygpLG4mJm4uY2FsbChyKX0sdCl9KTp0aGlzLl9mb2N1cy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHNjcm9sbFBhcmVudDpmdW5jdGlvbigpe3ZhciB0O3JldHVybiBlLmJyb3dzZXIubXNpZSYmLyhzdGF0aWN8cmVsYXRpdmUpLy50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKXx8L2Fic29sdXRlLy50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKT90PXRoaXMucGFyZW50cygpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybi8ocmVsYXRpdmV8YWJzb2x1dGV8Zml4ZWQpLy50ZXN0KGUuY3NzKHRoaXMsInBvc2l0aW9uIikpJiYvKGF1dG98c2Nyb2xsKS8udGVzdChlLmNzcyh0aGlzLCJvdmVyZmxvdyIpK2UuY3NzKHRoaXMsIm92ZXJmbG93LXkiKStlLmNzcyh0aGlzLCJvdmVyZmxvdy14IikpfSkuZXEoMCk6dD10aGlzLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4vKGF1dG98c2Nyb2xsKS8udGVzdChlLmNzcyh0aGlzLCJvdmVyZmxvdyIpK2UuY3NzKHRoaXMsIm92ZXJmbG93LXkiKStlLmNzcyh0aGlzLCJvdmVyZmxvdy14IikpfSkuZXEoMCksL2ZpeGVkLy50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKXx8IXQubGVuZ3RoP2UoZG9jdW1lbnQpOnR9LHpJbmRleDpmdW5jdGlvbihuKXtpZihuIT09dClyZXR1cm4gdGhpcy5jc3MoInpJbmRleCIsbik7aWYodGhpcy5sZW5ndGgpe3ZhciByPWUodGhpc1swXSksaSxzO3doaWxlKHIubGVuZ3RoJiZyWzBdIT09ZG9jdW1lbnQpe2k9ci5jc3MoInBvc2l0aW9uIik7aWYoaT09PSJhYnNvbHV0ZSJ8fGk9PT0icmVsYXRpdmUifHxpPT09ImZpeGVkIil7cz1wYXJzZUludChyLmNzcygiekluZGV4IiksMTApO2lmKCFpc05hTihzKSYmcyE9PTApcmV0dXJuIHN9cj1yLnBhcmVudCgpfX1yZXR1cm4gMH0sdW5pcXVlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5pZHx8KHRoaXMuaWQ9InVpLWlkLSIrICsrbil9KX0scmVtb3ZlVW5pcXVlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ci50ZXN0KHRoaXMuaWQpJiZlKHRoaXMpLnJlbW92ZUF0dHIoImlkIil9KX19KSxlKCI8YT4iKS5vdXRlcldpZHRoKDEpLmpxdWVyeXx8ZS5lYWNoKFsiV2lkdGgiLCJIZWlnaHQiXSxmdW5jdGlvbihuLHIpe2Z1bmN0aW9uIHUodCxuLHIscyl7cmV0dXJuIGUuZWFjaChpLGZ1bmN0aW9uKCl7bi09cGFyc2VGbG9hdChlLmNzcyh0LCJwYWRkaW5nIit0aGlzKSl8fDAsciYmKG4tPXBhcnNlRmxvYXQoZS5jc3ModCwiYm9yZGVyIit0aGlzKyJXaWR0aCIpKXx8MCkscyYmKG4tPXBhcnNlRmxvYXQoZS5jc3ModCwibWFyZ2luIit0aGlzKSl8fDApfSksbn12YXIgaT1yPT09IldpZHRoIj9bIkxlZnQiLCJSaWdodCJdOlsiVG9wIiwiQm90dG9tIl0scz1yLnRvTG93ZXJDYXNlKCksbz17aW5uZXJXaWR0aDplLmZuLmlubmVyV2lkdGgsaW5uZXJIZWlnaHQ6ZS5mbi5pbm5lckhlaWdodCxvdXRlcldpZHRoOmUuZm4ub3V0ZXJXaWR0aCxvdXRlckhlaWdodDplLmZuLm91dGVySGVpZ2h0fTtlLmZuWyJpbm5lciIrcl09ZnVuY3Rpb24obil7cmV0dXJuIG49PT10P29bImlubmVyIityXS5jYWxsKHRoaXMpOnRoaXMuZWFjaChmdW5jdGlvbigpe2UodGhpcykuY3NzKHMsdSh0aGlzLG4pKyJweCIpfSl9LGUuZm5bIm91dGVyIityXT1mdW5jdGlvbih0LG4pe3JldHVybiB0eXBlb2YgdCE9Im51bWJlciI/b1sib3V0ZXIiK3JdLmNhbGwodGhpcyx0KTp0aGlzLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmNzcyhzLHUodGhpcyx0LCEwLG4pKyJweCIpfSl9fSksZS5leHRlbmQoZS5leHByWyI6Il0se2RhdGE6ZS5leHByLmNyZWF0ZVBzZXVkbz9lLmV4cHIuY3JlYXRlUHNldWRvKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4hIWUuZGF0YShuLHQpfX0pOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4hIWUuZGF0YSh0LHJbM10pfSxmb2N1c2FibGU6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCwhaXNOYU4oZS5hdHRyKHQsInRhYmluZGV4IikpKX0sdGFiYmFibGU6ZnVuY3Rpb24odCl7dmFyIG49ZS5hdHRyKHQsInRhYmluZGV4Iikscj1pc05hTihuKTtyZXR1cm4ocnx8bj49MCkmJmkodCwhcil9fSksZShmdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmJvZHksbj10LmFwcGVuZENoaWxkKG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpO24ub2Zmc2V0SGVpZ2h0LGUuZXh0ZW5kKG4uc3R5bGUse21pbkhlaWdodDoiMTAwcHgiLGhlaWdodDoiYXV0byIscGFkZGluZzowLGJvcmRlcldpZHRoOjB9KSxlLnN1cHBvcnQubWluSGVpZ2h0PW4ub2Zmc2V0SGVpZ2h0PT09MTAwLGUuc3VwcG9ydC5zZWxlY3RzdGFydD0ib25zZWxlY3RzdGFydCJpbiBuLHQucmVtb3ZlQ2hpbGQobikuc3R5bGUuZGlzcGxheT0ibm9uZSJ9KSxlLmZuLmV4dGVuZCh7ZGlzYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJpbmQoKGUuc3VwcG9ydC5zZWxlY3RzdGFydD8ic2VsZWN0c3RhcnQiOiJtb3VzZWRvd24iKSsiLnVpLWRpc2FibGVTZWxlY3Rpb24iLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKX0pfSxlbmFibGVTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bmJpbmQoIi51aS1kaXNhYmxlU2VsZWN0aW9uIil9fSksZS5leHRlbmQoZS51aSx7cGx1Z2luOnthZGQ6ZnVuY3Rpb24odCxuLHIpe3ZhciBpLHM9ZS51aVt0XS5wcm90b3R5cGU7Zm9yKGkgaW4gcilzLnBsdWdpbnNbaV09cy5wbHVnaW5zW2ldfHxbXSxzLnBsdWdpbnNbaV0ucHVzaChbbixyW2ldXSl9LGNhbGw6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9ZS5wbHVnaW5zW3RdO2lmKCFpfHwhZS5lbGVtZW50WzBdLnBhcmVudE5vZGV8fGUuZWxlbWVudFswXS5wYXJlbnROb2RlLm5vZGVUeXBlPT09MTEpcmV0dXJuO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspZS5vcHRpb25zW2lbcl1bMF1dJiZpW3JdWzFdLmFwcGx5KGUuZWxlbWVudCxuKX19LGNvbnRhaW5zOmUuY29udGFpbnMsaGFzU2Nyb2xsOmZ1bmN0aW9uKHQsbil7aWYoZSh0KS5jc3MoIm92ZXJmbG93Iik9PT0iaGlkZGVuIilyZXR1cm4hMTt2YXIgcj1uJiZuPT09ImxlZnQiPyJzY3JvbGxMZWZ0Ijoic2Nyb2xsVG9wIixpPSExO3JldHVybiB0W3JdPjA/ITA6KHRbcl09MSxpPXRbcl0+MCx0W3JdPTAsaSl9LGlzT3ZlckF4aXM6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlPnQmJmU8dCtufSxpc092ZXI6ZnVuY3Rpb24odCxuLHIsaSxzLG8pe3JldHVybiBlLnVpLmlzT3ZlckF4aXModCxyLHMpJiZlLnVpLmlzT3ZlckF4aXMobixpLG8pfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXt2YXIgbj0wLHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLGk9ZS5jbGVhbkRhdGE7ZS5jbGVhbkRhdGE9ZnVuY3Rpb24odCl7Zm9yKHZhciBuPTAscjsocj10W25dKSE9bnVsbDtuKyspdHJ5e2UocikudHJpZ2dlckhhbmRsZXIoInJlbW92ZSIpfWNhdGNoKHMpe31pKHQpfSxlLndpZGdldD1mdW5jdGlvbih0LG4scil7dmFyIGkscyxvLHUsYT10LnNwbGl0KCIuIilbMF07dD10LnNwbGl0KCIuIilbMV0saT1hKyItIit0LHJ8fChyPW4sbj1lLldpZGdldCksZS5leHByWyI6Il1baS50b0xvd2VyQ2FzZSgpXT1mdW5jdGlvbih0KXtyZXR1cm4hIWUuZGF0YSh0LGkpfSxlW2FdPWVbYV18fHt9LHM9ZVthXVt0XSxvPWVbYV1bdF09ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5fY3JlYXRlV2lkZ2V0KXJldHVybiBuZXcgbyhlLHQpO2FyZ3VtZW50cy5sZW5ndGgmJnRoaXMuX2NyZWF0ZVdpZGdldChlLHQpfSxlLmV4dGVuZChvLHMse3ZlcnNpb246ci52ZXJzaW9uLF9wcm90bzplLmV4dGVuZCh7fSxyKSxfY2hpbGRDb25zdHJ1Y3RvcnM6W119KSx1PW5ldyBuLHUub3B0aW9ucz1lLndpZGdldC5leHRlbmQoe30sdS5vcHRpb25zKSxlLmVhY2gocixmdW5jdGlvbih0LGkpe2UuaXNGdW5jdGlvbihpKSYmKHJbdF09ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3JldHVybiBuLnByb3RvdHlwZVt0XS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHI9ZnVuY3Rpb24oZSl7cmV0dXJuIG4ucHJvdG90eXBlW3RdLmFwcGx5KHRoaXMsZSl9O3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N1cGVyLG49dGhpcy5fc3VwZXJBcHBseSxzO3JldHVybiB0aGlzLl9zdXBlcj1lLHRoaXMuX3N1cGVyQXBwbHk9cixzPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX3N1cGVyPXQsdGhpcy5fc3VwZXJBcHBseT1uLHN9fSgpKX0pLG8ucHJvdG90eXBlPWUud2lkZ2V0LmV4dGVuZCh1LHt3aWRnZXRFdmVudFByZWZpeDp0fSxyLHtjb25zdHJ1Y3RvcjpvLG5hbWVzcGFjZTphLHdpZGdldE5hbWU6dCx3aWRnZXRCYXNlQ2xhc3M6aSx3aWRnZXRGdWxsTmFtZTppfSkscz8oZS5lYWNoKHMuX2NoaWxkQ29uc3RydWN0b3JzLGZ1bmN0aW9uKHQsbil7dmFyIHI9bi5wcm90b3R5cGU7ZS53aWRnZXQoci5uYW1lc3BhY2UrIi4iK3Iud2lkZ2V0TmFtZSxvLG4uX3Byb3RvKX0pLGRlbGV0ZSBzLl9jaGlsZENvbnN0cnVjdG9ycyk6bi5fY2hpbGRDb25zdHJ1Y3RvcnMucHVzaChvKSxlLndpZGdldC5icmlkZ2UodCxvKX0sZS53aWRnZXQuZXh0ZW5kPWZ1bmN0aW9uKG4pe3ZhciBpPXIuY2FsbChhcmd1bWVudHMsMSkscz0wLG89aS5sZW5ndGgsdSxhO2Zvcig7czxvO3MrKylmb3IodSBpbiBpW3NdKWE9aVtzXVt1XSxpW3NdLmhhc093blByb3BlcnR5KHUpJiZhIT09dCYmKG5bdV09ZS5pc1BsYWluT2JqZWN0KGEpP2Uud2lkZ2V0LmV4dGVuZCh7fSxuW3VdLGEpOmEpO3JldHVybiBufSxlLndpZGdldC5icmlkZ2U9ZnVuY3Rpb24obixpKXt2YXIgcz1pLnByb3RvdHlwZS53aWRnZXRGdWxsTmFtZTtlLmZuW25dPWZ1bmN0aW9uKG8pe3ZhciB1PXR5cGVvZiBvPT0ic3RyaW5nIixhPXIuY2FsbChhcmd1bWVudHMsMSksZj10aGlzO3JldHVybiBvPSF1JiZhLmxlbmd0aD9lLndpZGdldC5leHRlbmQuYXBwbHkobnVsbCxbb10uY29uY2F0KGEpKTpvLHU/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHIsaT1lLmRhdGEodGhpcyxzKTtpZighaSlyZXR1cm4gZS5lcnJvcigiY2Fubm90IGNhbGwgbWV0aG9kcyBvbiAiK24rIiBwcmlvciB0byBpbml0aWFsaXphdGlvbjsgIisiYXR0ZW1wdGVkIHRvIGNhbGwgbWV0aG9kICciK28rIiciKTtpZighZS5pc0Z1bmN0aW9uKGlbb10pfHxvLmNoYXJBdCgwKT09PSJfIilyZXR1cm4gZS5lcnJvcigibm8gc3VjaCBtZXRob2QgJyIrbysiJyBmb3IgIituKyIgd2lkZ2V0IGluc3RhbmNlIik7cj1pW29dLmFwcGx5KGksYSk7aWYociE9PWkmJnIhPT10KXJldHVybiBmPXImJnIuanF1ZXJ5P2YucHVzaFN0YWNrKHIuZ2V0KCkpOnIsITF9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lLmRhdGEodGhpcyxzKTt0P3Qub3B0aW9uKG98fHt9KS5faW5pdCgpOm5ldyBpKG8sdGhpcyl9KSxmfX0sZS5XaWRnZXQ9ZnVuY3Rpb24oZSx0KXt9LGUuV2lkZ2V0Ll9jaGlsZENvbnN0cnVjdG9ycz1bXSxlLldpZGdldC5wcm90b3R5cGU9e3dpZGdldE5hbWU6IndpZGdldCIsd2lkZ2V0RXZlbnRQcmVmaXg6IiIsZGVmYXVsdEVsZW1lbnQ6IjxkaXY+IixvcHRpb25zOntkaXNhYmxlZDohMSxjcmVhdGU6bnVsbH0sX2NyZWF0ZVdpZGdldDpmdW5jdGlvbih0LHIpe3I9ZShyfHx0aGlzLmRlZmF1bHRFbGVtZW50fHx0aGlzKVswXSx0aGlzLmVsZW1lbnQ9ZShyKSx0aGlzLnV1aWQ9bisrLHRoaXMuZXZlbnROYW1lc3BhY2U9Ii4iK3RoaXMud2lkZ2V0TmFtZSt0aGlzLnV1aWQsdGhpcy5vcHRpb25zPWUud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMsdGhpcy5fZ2V0Q3JlYXRlT3B0aW9ucygpLHQpLHRoaXMuYmluZGluZ3M9ZSgpLHRoaXMuaG92ZXJhYmxlPWUoKSx0aGlzLmZvY3VzYWJsZT1lKCksciE9PXRoaXMmJihlLmRhdGEocix0aGlzLndpZGdldE5hbWUsdGhpcyksZS5kYXRhKHIsdGhpcy53aWRnZXRGdWxsTmFtZSx0aGlzKSx0aGlzLl9vbih7cmVtb3ZlOiJkZXN0cm95In0pLHRoaXMuZG9jdW1lbnQ9ZShyLnN0eWxlP3Iub3duZXJEb2N1bWVudDpyLmRvY3VtZW50fHxyKSx0aGlzLndpbmRvdz1lKHRoaXMuZG9jdW1lbnRbMF0uZGVmYXVsdFZpZXd8fHRoaXMuZG9jdW1lbnRbMF0ucGFyZW50V2luZG93KSksdGhpcy5fY3JlYXRlKCksdGhpcy5fdHJpZ2dlcigiY3JlYXRlIixudWxsLHRoaXMuX2dldENyZWF0ZUV2ZW50RGF0YSgpKSx0aGlzLl9pbml0KCl9LF9nZXRDcmVhdGVPcHRpb25zOmUubm9vcCxfZ2V0Q3JlYXRlRXZlbnREYXRhOmUubm9vcCxfY3JlYXRlOmUubm9vcCxfaW5pdDplLm5vb3AsZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3koKSx0aGlzLmVsZW1lbnQudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZURhdGEodGhpcy53aWRnZXROYW1lKS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0RnVsbE5hbWUpLnJlbW92ZURhdGEoZS5jYW1lbENhc2UodGhpcy53aWRnZXRGdWxsTmFtZSkpLHRoaXMud2lkZ2V0KCkudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKS5yZW1vdmVDbGFzcyh0aGlzLndpZGdldEZ1bGxOYW1lKyItZGlzYWJsZWQgIisidWktc3RhdGUtZGlzYWJsZWQiKSx0aGlzLmJpbmRpbmdzLnVuYmluZCh0aGlzLmV2ZW50TmFtZXNwYWNlKSx0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSx0aGlzLmZvY3VzYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKX0sX2Rlc3Ryb3k6ZS5ub29wLHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnR9LG9wdGlvbjpmdW5jdGlvbihuLHIpe3ZhciBpPW4scyxvLHU7aWYoYXJndW1lbnRzLmxlbmd0aD09PTApcmV0dXJuIGUud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMpO2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7aT17fSxzPW4uc3BsaXQoIi4iKSxuPXMuc2hpZnQoKTtpZihzLmxlbmd0aCl7bz1pW25dPWUud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnNbbl0pO2Zvcih1PTA7dTxzLmxlbmd0aC0xO3UrKylvW3NbdV1dPW9bc1t1XV18fHt9LG89b1tzW3VdXTtuPXMucG9wKCk7aWYocj09PXQpcmV0dXJuIG9bbl09PT10P251bGw6b1tuXTtvW25dPXJ9ZWxzZXtpZihyPT09dClyZXR1cm4gdGhpcy5vcHRpb25zW25dPT09dD9udWxsOnRoaXMub3B0aW9uc1tuXTtpW25dPXJ9fXJldHVybiB0aGlzLl9zZXRPcHRpb25zKGkpLHRoaXN9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpdGhpcy5fc2V0T3B0aW9uKHQsZVt0XSk7cmV0dXJuIHRoaXN9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vcHRpb25zW2VdPXQsZT09PSJkaXNhYmxlZCImJih0aGlzLndpZGdldCgpLnRvZ2dsZUNsYXNzKHRoaXMud2lkZ2V0RnVsbE5hbWUrIi1kaXNhYmxlZCB1aS1zdGF0ZS1kaXNhYmxlZCIsISF0KS5hdHRyKCJhcmlhLWRpc2FibGVkIix0KSx0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSx0aGlzLmZvY3VzYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKSksdGhpc30sZW5hYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLCExKX0sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIiwhMCl9LF9vbjpmdW5jdGlvbih0LG4pe24/KHQ9ZSh0KSx0aGlzLmJpbmRpbmdzPXRoaXMuYmluZGluZ3MuYWRkKHQpKToobj10LHQ9dGhpcy5lbGVtZW50KTt2YXIgcj10aGlzO2UuZWFjaChuLGZ1bmN0aW9uKG4saSl7ZnVuY3Rpb24gcygpe2lmKHIub3B0aW9ucy5kaXNhYmxlZD09PSEwfHxlKHRoaXMpLmhhc0NsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpKXJldHVybjtyZXR1cm4odHlwZW9mIGk9PSJzdHJpbmciP3JbaV06aSkuYXBwbHkocixhcmd1bWVudHMpfXR5cGVvZiBpIT0ic3RyaW5nIiYmKHMuZ3VpZD1pLmd1aWQ9aS5ndWlkfHxzLmd1aWR8fGUuZ3VpZCsrKTt2YXIgbz1uLm1hdGNoKC9eKFx3KylccyooLiopJC8pLHU9b1sxXStyLmV2ZW50TmFtZXNwYWNlLGE9b1syXTthP3Iud2lkZ2V0KCkuZGVsZWdhdGUoYSx1LHMpOnQuYmluZCh1LHMpfSl9LF9vZmY6ZnVuY3Rpb24oZSx0KXt0PSh0fHwiIikuc3BsaXQoIiAiKS5qb2luKHRoaXMuZXZlbnROYW1lc3BhY2UrIiAiKSt0aGlzLmV2ZW50TmFtZXNwYWNlLGUudW5iaW5kKHQpLnVuZGVsZWdhdGUodCl9LF9kZWxheTpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oKXtyZXR1cm4odHlwZW9mIGU9PSJzdHJpbmciP3JbZV06ZSkuYXBwbHkocixhcmd1bWVudHMpfXZhciByPXRoaXM7cmV0dXJuIHNldFRpbWVvdXQobix0fHwwKX0sX2hvdmVyYWJsZTpmdW5jdGlvbih0KXt0aGlzLmhvdmVyYWJsZT10aGlzLmhvdmVyYWJsZS5hZGQodCksdGhpcy5fb24odCx7bW91c2VlbnRlcjpmdW5jdGlvbih0KXtlKHQuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoInVpLXN0YXRlLWhvdmVyIil9LG1vdXNlbGVhdmU6ZnVuY3Rpb24odCl7ZSh0LmN1cnJlbnRUYXJnZXQpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfX0pfSxfZm9jdXNhYmxlOmZ1bmN0aW9uKHQpe3RoaXMuZm9jdXNhYmxlPXRoaXMuZm9jdXNhYmxlLmFkZCh0KSx0aGlzLl9vbih0LHtmb2N1c2luOmZ1bmN0aW9uKHQpe2UodC5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcygidWktc3RhdGUtZm9jdXMiKX0sZm9jdXNvdXQ6ZnVuY3Rpb24odCl7ZSh0LmN1cnJlbnRUYXJnZXQpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfX0pfSxfdHJpZ2dlcjpmdW5jdGlvbih0LG4scil7dmFyIGkscyxvPXRoaXMub3B0aW9uc1t0XTtyPXJ8fHt9LG49ZS5FdmVudChuKSxuLnR5cGU9KHQ9PT10aGlzLndpZGdldEV2ZW50UHJlZml4P3Q6dGhpcy53aWRnZXRFdmVudFByZWZpeCt0KS50b0xvd2VyQ2FzZSgpLG4udGFyZ2V0PXRoaXMuZWxlbWVudFswXSxzPW4ub3JpZ2luYWxFdmVudDtpZihzKWZvcihpIGluIHMpaSBpbiBufHwobltpXT1zW2ldKTtyZXR1cm4gdGhpcy5lbGVtZW50LnRyaWdnZXIobixyKSwhKGUuaXNGdW5jdGlvbihvKSYmby5hcHBseSh0aGlzLmVsZW1lbnRbMF0sW25dLmNvbmNhdChyKSk9PT0hMXx8bi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl9fSxlLmVhY2goe3Nob3c6ImZhZGVJbiIsaGlkZToiZmFkZU91dCJ9LGZ1bmN0aW9uKHQsbil7ZS5XaWRnZXQucHJvdG90eXBlWyJfIit0XT1mdW5jdGlvbihyLGkscyl7dHlwZW9mIGk9PSJzdHJpbmciJiYoaT17ZWZmZWN0Oml9KTt2YXIgbyx1PWk/aT09PSEwfHx0eXBlb2YgaT09Im51bWJlciI/bjppLmVmZmVjdHx8bjp0O2k9aXx8e30sdHlwZW9mIGk9PSJudW1iZXIiJiYoaT17ZHVyYXRpb246aX0pLG89IWUuaXNFbXB0eU9iamVjdChpKSxpLmNvbXBsZXRlPXMsaS5kZWxheSYmci5kZWxheShpLmRlbGF5KSxvJiZlLmVmZmVjdHMmJihlLmVmZmVjdHMuZWZmZWN0W3VdfHxlLnVpQmFja0NvbXBhdCE9PSExJiZlLmVmZmVjdHNbdV0pP3JbdF0oaSk6dSE9PXQmJnJbdV0/clt1XShpLmR1cmF0aW9uLGkuZWFzaW5nLHMpOnIucXVldWUoZnVuY3Rpb24obil7ZSh0aGlzKVt0XSgpLHMmJnMuY2FsbChyWzBdKSxuKCl9KX19KSxlLnVpQmFja0NvbXBhdCE9PSExJiYoZS5XaWRnZXQucHJvdG90eXBlLl9nZXRDcmVhdGVPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIGUubWV0YWRhdGEmJmUubWV0YWRhdGEuZ2V0KHRoaXMuZWxlbWVudFswXSlbdGhpcy53aWRnZXROYW1lXX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXt2YXIgbj0hMTtlKGRvY3VtZW50KS5tb3VzZXVwKGZ1bmN0aW9uKGUpe249ITF9KSxlLndpZGdldCgidWkubW91c2UiLHt2ZXJzaW9uOiIxLjkuMCIsb3B0aW9uczp7Y2FuY2VsOiJpbnB1dCx0ZXh0YXJlYSxidXR0b24sc2VsZWN0LG9wdGlvbiIsZGlzdGFuY2U6MSxkZWxheTowfSxfbW91c2VJbml0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmVsZW1lbnQuYmluZCgibW91c2Vkb3duLiIrdGhpcy53aWRnZXROYW1lLGZ1bmN0aW9uKGUpe3JldHVybiB0Ll9tb3VzZURvd24oZSl9KS5iaW5kKCJjbGljay4iK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbihuKXtpZighMD09PWUuZGF0YShuLnRhcmdldCx0LndpZGdldE5hbWUrIi5wcmV2ZW50Q2xpY2tFdmVudCIpKXJldHVybiBlLnJlbW92ZURhdGEobi50YXJnZXQsdC53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiKSxuLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLCExfSksdGhpcy5zdGFydGVkPSExfSxfbW91c2VEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnVuYmluZCgiLiIrdGhpcy53aWRnZXROYW1lKSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSYmZShkb2N1bWVudCkudW5iaW5kKCJtb3VzZW1vdmUuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLnVuYmluZCgibW91c2V1cC4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpfSxfbW91c2VEb3duOmZ1bmN0aW9uKHQpe2lmKG4pcmV0dXJuO3RoaXMuX21vdXNlU3RhcnRlZCYmdGhpcy5fbW91c2VVcCh0KSx0aGlzLl9tb3VzZURvd25FdmVudD10O3ZhciByPXRoaXMsaT10LndoaWNoPT09MSxzPXR5cGVvZiB0aGlzLm9wdGlvbnMuY2FuY2VsPT0ic3RyaW5nIiYmdC50YXJnZXQubm9kZU5hbWU/ZSh0LnRhcmdldCkuY2xvc2VzdCh0aGlzLm9wdGlvbnMuY2FuY2VsKS5sZW5ndGg6ITE7aWYoIWl8fHN8fCF0aGlzLl9tb3VzZUNhcHR1cmUodCkpcmV0dXJuITA7dGhpcy5tb3VzZURlbGF5TWV0PSF0aGlzLm9wdGlvbnMuZGVsYXksdGhpcy5tb3VzZURlbGF5TWV0fHwodGhpcy5fbW91c2VEZWxheVRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtyLm1vdXNlRGVsYXlNZXQ9ITB9LHRoaXMub3B0aW9ucy5kZWxheSkpO2lmKHRoaXMuX21vdXNlRGlzdGFuY2VNZXQodCkmJnRoaXMuX21vdXNlRGVsYXlNZXQodCkpe3RoaXMuX21vdXNlU3RhcnRlZD10aGlzLl9tb3VzZVN0YXJ0KHQpIT09ITE7aWYoIXRoaXMuX21vdXNlU3RhcnRlZClyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLCEwfXJldHVybiEwPT09ZS5kYXRhKHQudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IikmJmUucmVtb3ZlRGF0YSh0LnRhcmdldCx0aGlzLndpZGdldE5hbWUrIi5wcmV2ZW50Q2xpY2tFdmVudCIpLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlPWZ1bmN0aW9uKGUpe3JldHVybiByLl9tb3VzZU1vdmUoZSl9LHRoaXMuX21vdXNlVXBEZWxlZ2F0ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5fbW91c2VVcChlKX0sZShkb2N1bWVudCkuYmluZCgibW91c2Vtb3ZlLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS5iaW5kKCJtb3VzZXVwLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSksdC5wcmV2ZW50RGVmYXVsdCgpLG49ITAsITB9LF9tb3VzZU1vdmU6ZnVuY3Rpb24odCl7cmV0dXJuIWUuYnJvd3Nlci5tc2llfHxkb2N1bWVudC5kb2N1bWVudE1vZGU+PTl8fCEhdC5idXR0b24/dGhpcy5fbW91c2VTdGFydGVkPyh0aGlzLl9tb3VzZURyYWcodCksdC5wcmV2ZW50RGVmYXVsdCgpKToodGhpcy5fbW91c2VEaXN0YW5jZU1ldCh0KSYmdGhpcy5fbW91c2VEZWxheU1ldCh0KSYmKHRoaXMuX21vdXNlU3RhcnRlZD10aGlzLl9tb3VzZVN0YXJ0KHRoaXMuX21vdXNlRG93bkV2ZW50LHQpIT09ITEsdGhpcy5fbW91c2VTdGFydGVkP3RoaXMuX21vdXNlRHJhZyh0KTp0aGlzLl9tb3VzZVVwKHQpKSwhdGhpcy5fbW91c2VTdGFydGVkKTp0aGlzLl9tb3VzZVVwKHQpfSxfbW91c2VVcDpmdW5jdGlvbih0KXtyZXR1cm4gZShkb2N1bWVudCkudW5iaW5kKCJtb3VzZW1vdmUuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLnVuYmluZCgibW91c2V1cC4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpLHRoaXMuX21vdXNlU3RhcnRlZCYmKHRoaXMuX21vdXNlU3RhcnRlZD0hMSx0LnRhcmdldD09PXRoaXMuX21vdXNlRG93bkV2ZW50LnRhcmdldCYmZS5kYXRhKHQudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IiwhMCksdGhpcy5fbW91c2VTdG9wKHQpKSwhMX0sX21vdXNlRGlzdGFuY2VNZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VYLWUucGFnZVgpLE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VZLWUucGFnZVkpKT49dGhpcy5vcHRpb25zLmRpc3RhbmNlfSxfbW91c2VEZWxheU1ldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tb3VzZURlbGF5TWV0fSxfbW91c2VTdGFydDpmdW5jdGlvbihlKXt9LF9tb3VzZURyYWc6ZnVuY3Rpb24oZSl7fSxfbW91c2VTdG9wOmZ1bmN0aW9uKGUpe30sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaChlLHQsbil7cmV0dXJuW3BhcnNlSW50KGVbMF0sMTApKihsLnRlc3QoZVswXSk/dC8xMDA6MSkscGFyc2VJbnQoZVsxXSwxMCkqKGwudGVzdChlWzFdKT9uLzEwMDoxKV19ZnVuY3Rpb24gcCh0LG4pe3JldHVybiBwYXJzZUludChlLmNzcyh0LG4pLDEwKXx8MH1lLnVpPWUudWl8fHt9O3ZhciBuLHI9TWF0aC5tYXgsaT1NYXRoLmFicyxzPU1hdGgucm91bmQsbz0vbGVmdHxjZW50ZXJ8cmlnaHQvLHU9L3RvcHxjZW50ZXJ8Ym90dG9tLyxhPS9bXCtcLV1cZCslPy8sZj0vXlx3Ky8sbD0vJSQvLGM9ZS5mbi5wb3NpdGlvbjtlLnBvc2l0aW9uPXtzY3JvbGxiYXJXaWR0aDpmdW5jdGlvbigpe2lmKG4hPT10KXJldHVybiBuO3ZhciByLGkscz1lKCI8ZGl2IHN0eWxlPSdkaXNwbGF5OmJsb2NrO3dpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7b3ZlcmZsb3c6aGlkZGVuOyc+PGRpdiBzdHlsZT0naGVpZ2h0OjEwMHB4O3dpZHRoOmF1dG87Jz48L2Rpdj48L2Rpdj4iKSxvPXMuY2hpbGRyZW4oKVswXTtyZXR1cm4gZSgiYm9keSIpLmFwcGVuZChzKSxyPW8ub2Zmc2V0V2lkdGgscy5jc3MoIm92ZXJmbG93Iiwic2Nyb2xsIiksaT1vLm9mZnNldFdpZHRoLHI9PT1pJiYoaT1zWzBdLmNsaWVudFdpZHRoKSxzLnJlbW92ZSgpLG49ci1pfSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKHQpe3ZhciBuPXQuaXNXaW5kb3c/IiI6dC5lbGVtZW50LmNzcygib3ZlcmZsb3cteCIpLHI9dC5pc1dpbmRvdz8iIjp0LmVsZW1lbnQuY3NzKCJvdmVyZmxvdy15IiksaT1uPT09InNjcm9sbCJ8fG49PT0iYXV0byImJnQud2lkdGg8dC5lbGVtZW50WzBdLnNjcm9sbFdpZHRoLHM9cj09PSJzY3JvbGwifHxyPT09ImF1dG8iJiZ0LmhlaWdodDx0LmVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0O3JldHVybnt3aWR0aDppP2UucG9zaXRpb24uc2Nyb2xsYmFyV2lkdGgoKTowLGhlaWdodDpzP2UucG9zaXRpb24uc2Nyb2xsYmFyV2lkdGgoKTowfX0sZ2V0V2l0aGluSW5mbzpmdW5jdGlvbih0KXt2YXIgbj1lKHR8fHdpbmRvdykscj1lLmlzV2luZG93KG5bMF0pO3JldHVybntlbGVtZW50Om4saXNXaW5kb3c6cixvZmZzZXQ6bi5vZmZzZXQoKXx8e2xlZnQ6MCx0b3A6MH0sc2Nyb2xsTGVmdDpuLnNjcm9sbExlZnQoKSxzY3JvbGxUb3A6bi5zY3JvbGxUb3AoKSx3aWR0aDpyP24ud2lkdGgoKTpuLm91dGVyV2lkdGgoKSxoZWlnaHQ6cj9uLmhlaWdodCgpOm4ub3V0ZXJIZWlnaHQoKX19fSxlLmZuLnBvc2l0aW9uPWZ1bmN0aW9uKHQpe2lmKCF0fHwhdC5vZilyZXR1cm4gYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dD1lLmV4dGVuZCh7fSx0KTt2YXIgbixsLGQsdixtLGc9ZSh0Lm9mKSx5PWUucG9zaXRpb24uZ2V0V2l0aGluSW5mbyh0LndpdGhpbiksYj1lLnBvc2l0aW9uLmdldFNjcm9sbEluZm8oeSksdz1nWzBdLEU9KHQuY29sbGlzaW9ufHwiZmxpcCIpLnNwbGl0KCIgIiksUz17fTtyZXR1cm4gdy5ub2RlVHlwZT09PTk/KGw9Zy53aWR0aCgpLGQ9Zy5oZWlnaHQoKSx2PXt0b3A6MCxsZWZ0OjB9KTplLmlzV2luZG93KHcpPyhsPWcud2lkdGgoKSxkPWcuaGVpZ2h0KCksdj17dG9wOmcuc2Nyb2xsVG9wKCksbGVmdDpnLnNjcm9sbExlZnQoKX0pOncucHJldmVudERlZmF1bHQ/KHQuYXQ9ImxlZnQgdG9wIixsPWQ9MCx2PXt0b3A6dy5wYWdlWSxsZWZ0OncucGFnZVh9KToobD1nLm91dGVyV2lkdGgoKSxkPWcub3V0ZXJIZWlnaHQoKSx2PWcub2Zmc2V0KCkpLG09ZS5leHRlbmQoe30sdiksZS5lYWNoKFsibXkiLCJhdCJdLGZ1bmN0aW9uKCl7dmFyIGU9KHRbdGhpc118fCIiKS5zcGxpdCgiICIpLG4scjtlLmxlbmd0aD09PTEmJihlPW8udGVzdChlWzBdKT9lLmNvbmNhdChbImNlbnRlciJdKTp1LnRlc3QoZVswXSk/WyJjZW50ZXIiXS5jb25jYXQoZSk6WyJjZW50ZXIiLCJjZW50ZXIiXSksZVswXT1vLnRlc3QoZVswXSk/ZVswXToiY2VudGVyIixlWzFdPXUudGVzdChlWzFdKT9lWzFdOiJjZW50ZXIiLG49YS5leGVjKGVbMF0pLHI9YS5leGVjKGVbMV0pLFNbdGhpc109W24/blswXTowLHI/clswXTowXSx0W3RoaXNdPVtmLmV4ZWMoZVswXSlbMF0sZi5leGVjKGVbMV0pWzBdXX0pLEUubGVuZ3RoPT09MSYmKEVbMV09RVswXSksdC5hdFswXT09PSJyaWdodCI/bS5sZWZ0Kz1sOnQuYXRbMF09PT0iY2VudGVyIiYmKG0ubGVmdCs9bC8yKSx0LmF0WzFdPT09ImJvdHRvbSI/bS50b3ArPWQ6dC5hdFsxXT09PSJjZW50ZXIiJiYobS50b3ArPWQvMiksbj1oKFMuYXQsbCxkKSxtLmxlZnQrPW5bMF0sbS50b3ArPW5bMV0sdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG8sdSxhPWUodGhpcyksZj1hLm91dGVyV2lkdGgoKSxjPWEub3V0ZXJIZWlnaHQoKSx3PXAodGhpcywibWFyZ2luTGVmdCIpLHg9cCh0aGlzLCJtYXJnaW5Ub3AiKSxUPWYrdytwKHRoaXMsIm1hcmdpblJpZ2h0IikrYi53aWR0aCxOPWMreCtwKHRoaXMsIm1hcmdpbkJvdHRvbSIpK2IuaGVpZ2h0LEM9ZS5leHRlbmQoe30sbSksaz1oKFMubXksYS5vdXRlcldpZHRoKCksYS5vdXRlckhlaWdodCgpKTt0Lm15WzBdPT09InJpZ2h0Ij9DLmxlZnQtPWY6dC5teVswXT09PSJjZW50ZXIiJiYoQy5sZWZ0LT1mLzIpLHQubXlbMV09PT0iYm90dG9tIj9DLnRvcC09Yzp0Lm15WzFdPT09ImNlbnRlciImJihDLnRvcC09Yy8yKSxDLmxlZnQrPWtbMF0sQy50b3ArPWtbMV0sZS5zdXBwb3J0Lm9mZnNldEZyYWN0aW9uc3x8KEMubGVmdD1zKEMubGVmdCksQy50b3A9cyhDLnRvcCkpLG89e21hcmdpbkxlZnQ6dyxtYXJnaW5Ub3A6eH0sZS5lYWNoKFsibGVmdCIsInRvcCJdLGZ1bmN0aW9uKHIsaSl7ZS51aS5wb3NpdGlvbltFW3JdXSYmZS51aS5wb3NpdGlvbltFW3JdXVtpXShDLHt0YXJnZXRXaWR0aDpsLHRhcmdldEhlaWdodDpkLGVsZW1XaWR0aDpmLGVsZW1IZWlnaHQ6Yyxjb2xsaXNpb25Qb3NpdGlvbjpvLGNvbGxpc2lvbldpZHRoOlQsY29sbGlzaW9uSGVpZ2h0Ok4sb2Zmc2V0OltuWzBdK2tbMF0sblsxXStrWzFdXSxteTp0Lm15LGF0OnQuYXQsd2l0aGluOnksZWxlbTphfSl9KSxlLmZuLmJnaWZyYW1lJiZhLmJnaWZyYW1lKCksdC51c2luZyYmKHU9ZnVuY3Rpb24oZSl7dmFyIG49di5sZWZ0LUMubGVmdCxzPW4rbC1mLG89di50b3AtQy50b3AsdT1vK2QtYyxoPXt0YXJnZXQ6e2VsZW1lbnQ6ZyxsZWZ0OnYubGVmdCx0b3A6di50b3Asd2lkdGg6bCxoZWlnaHQ6ZH0sZWxlbWVudDp7ZWxlbWVudDphLGxlZnQ6Qy5sZWZ0LHRvcDpDLnRvcCx3aWR0aDpmLGhlaWdodDpjfSxob3Jpem9udGFsOnM8MD8ibGVmdCI6bj4wPyJyaWdodCI6ImNlbnRlciIsdmVydGljYWw6dTwwPyJ0b3AiOm8+MD8iYm90dG9tIjoibWlkZGxlIn07bDxmJiZpKG4rcyk8bCYmKGguaG9yaXpvbnRhbD0iY2VudGVyIiksZDxjJiZpKG8rdSk8ZCYmKGgudmVydGljYWw9Im1pZGRsZSIpLHIoaShuKSxpKHMpKT5yKGkobyksaSh1KSk/aC5pbXBvcnRhbnQ9Imhvcml6b250YWwiOmguaW1wb3J0YW50PSJ2ZXJ0aWNhbCIsdC51c2luZy5jYWxsKHRoaXMsZSxoKX0pLGEub2Zmc2V0KGUuZXh0ZW5kKEMse3VzaW5nOnV9KSl9KX0sZS51aS5wb3NpdGlvbj17Zml0OntsZWZ0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dC53aXRoaW4saT1uLmlzV2luZG93P24uc2Nyb2xsTGVmdDpuLm9mZnNldC5sZWZ0LHM9bi53aWR0aCxvPWUubGVmdC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQsdT1pLW8sYT1vK3QuY29sbGlzaW9uV2lkdGgtcy1pLGY7dC5jb2xsaXNpb25XaWR0aD5zP3U+MCYmYTw9MD8oZj1lLmxlZnQrdSt0LmNvbGxpc2lvbldpZHRoLXMtaSxlLmxlZnQrPXUtZik6YT4wJiZ1PD0wP2UubGVmdD1pOnU+YT9lLmxlZnQ9aStzLXQuY29sbGlzaW9uV2lkdGg6ZS5sZWZ0PWk6dT4wP2UubGVmdCs9dTphPjA/ZS5sZWZ0LT1hOmUubGVmdD1yKGUubGVmdC1vLGUubGVmdCl9LHRvcDpmdW5jdGlvbihlLHQpe3ZhciBuPXQud2l0aGluLGk9bi5pc1dpbmRvdz9uLnNjcm9sbFRvcDpuLm9mZnNldC50b3Ascz10LndpdGhpbi5oZWlnaHQsbz1lLnRvcC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCx1PWktbyxhPW8rdC5jb2xsaXNpb25IZWlnaHQtcy1pLGY7dC5jb2xsaXNpb25IZWlnaHQ+cz91PjAmJmE8PTA/KGY9ZS50b3ArdSt0LmNvbGxpc2lvbkhlaWdodC1zLWksZS50b3ArPXUtZik6YT4wJiZ1PD0wP2UudG9wPWk6dT5hP2UudG9wPWkrcy10LmNvbGxpc2lvbkhlaWdodDplLnRvcD1pOnU+MD9lLnRvcCs9dTphPjA/ZS50b3AtPWE6ZS50b3A9cihlLnRvcC1vLGUudG9wKX19LGZsaXA6e2xlZnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LndpdGhpbixyPW4ub2Zmc2V0LmxlZnQrbi5zY3JvbGxMZWZ0LHM9bi53aWR0aCxvPW4uaXNXaW5kb3c/bi5zY3JvbGxMZWZ0Om4ub2Zmc2V0LmxlZnQsdT1lLmxlZnQtdC5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5MZWZ0LGE9dS1vLGY9dSt0LmNvbGxpc2lvbldpZHRoLXMtbyxsPXQubXlbMF09PT0ibGVmdCI/LXQuZWxlbVdpZHRoOnQubXlbMF09PT0icmlnaHQiP3QuZWxlbVdpZHRoOjAsYz10LmF0WzBdPT09ImxlZnQiP3QudGFyZ2V0V2lkdGg6dC5hdFswXT09PSJyaWdodCI/LXQudGFyZ2V0V2lkdGg6MCxoPS0yKnQub2Zmc2V0WzBdLHAsZDtpZihhPDApe3A9ZS5sZWZ0K2wrYytoK3QuY29sbGlzaW9uV2lkdGgtcy1yO2lmKHA8MHx8cDxpKGEpKWUubGVmdCs9bCtjK2h9ZWxzZSBpZihmPjApe2Q9ZS5sZWZ0LXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCtsK2MraC1vO2lmKGQ+MHx8aShkKTxmKWUubGVmdCs9bCtjK2h9fSx0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LndpdGhpbixyPW4ub2Zmc2V0LnRvcCtuLnNjcm9sbFRvcCxzPW4uaGVpZ2h0LG89bi5pc1dpbmRvdz9uLnNjcm9sbFRvcDpuLm9mZnNldC50b3AsdT1lLnRvcC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCxhPXUtbyxmPXUrdC5jb2xsaXNpb25IZWlnaHQtcy1vLGw9dC5teVsxXT09PSJ0b3AiLGM9bD8tdC5lbGVtSGVpZ2h0OnQubXlbMV09PT0iYm90dG9tIj90LmVsZW1IZWlnaHQ6MCxoPXQuYXRbMV09PT0idG9wIj90LnRhcmdldEhlaWdodDp0LmF0WzFdPT09ImJvdHRvbSI/LXQudGFyZ2V0SGVpZ2h0OjAscD0tMip0Lm9mZnNldFsxXSxkLHY7YTwwPyh2PWUudG9wK2MraCtwK3QuY29sbGlzaW9uSGVpZ2h0LXMtcixlLnRvcCtjK2grcD5hJiYodjwwfHx2PGkoYSkpJiYoZS50b3ArPWMraCtwKSk6Zj4wJiYoZD1lLnRvcC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCtjK2grcC1vLGUudG9wK2MraCtwPmYmJihkPjB8fGkoZCk8ZikmJihlLnRvcCs9YytoK3ApKX19LGZsaXBmaXQ6e2xlZnQ6ZnVuY3Rpb24oKXtlLnVpLnBvc2l0aW9uLmZsaXAubGVmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS51aS5wb3NpdGlvbi5maXQubGVmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHRvcDpmdW5jdGlvbigpe2UudWkucG9zaXRpb24uZmxpcC50b3AuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudWkucG9zaXRpb24uZml0LnRvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24oKXt2YXIgdCxuLHIsaSxzLG89ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSx1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChvPyJkaXYiOiJib2R5Iikscj17dmlzaWJpbGl0eToiaGlkZGVuIix3aWR0aDowLGhlaWdodDowLGJvcmRlcjowLG1hcmdpbjowLGJhY2tncm91bmQ6Im5vbmUifSxvJiZlLmV4dGVuZChyLHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6Ii0xMDAwcHgiLHRvcDoiLTEwMDBweCJ9KTtmb3IocyBpbiByKXQuc3R5bGVbc109cltzXTt0LmFwcGVuZENoaWxkKHUpLG49b3x8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG4uaW5zZXJ0QmVmb3JlKHQsbi5maXJzdENoaWxkKSx1LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMTAuNzQzMjIyMnB4OyIsaT1lKHUpLm9mZnNldCgpLmxlZnQsZS5zdXBwb3J0Lm9mZnNldEZyYWN0aW9ucz1pPjEwJiZpPDExLHQuaW5uZXJIVE1MPSIiLG4ucmVtb3ZlQ2hpbGQodCl9KCksZS51aUJhY2tDb21wYXQhPT0hMSYmZnVuY3Rpb24oZSl7dmFyIG49ZS5mbi5wb3NpdGlvbjtlLmZuLnBvc2l0aW9uPWZ1bmN0aW9uKHIpe2lmKCFyfHwhci5vZmZzZXQpcmV0dXJuIG4uY2FsbCh0aGlzLHIpO3ZhciBpPXIub2Zmc2V0LnNwbGl0KCIgIikscz1yLmF0LnNwbGl0KCIgIik7cmV0dXJuIGkubGVuZ3RoPT09MSYmKGlbMV09aVswXSksL15cZC8udGVzdChpWzBdKSYmKGlbMF09IisiK2lbMF0pLC9eXGQvLnRlc3QoaVsxXSkmJihpWzFdPSIrIitpWzFdKSxzLmxlbmd0aD09PTEmJigvbGVmdHxjZW50ZXJ8cmlnaHQvLnRlc3Qoc1swXSk/c1sxXT0iY2VudGVyIjooc1sxXT1zWzBdLHNbMF09ImNlbnRlciIpKSxuLmNhbGwodGhpcyxlLmV4dGVuZChyLHthdDpzWzBdK2lbMF0rIiAiK3NbMV0raVsxXSxvZmZzZXQ6dH0pKX19KGpRdWVyeSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuPTAscj17fSxpPXt9O3IuaGVpZ2h0PXIucGFkZGluZ1RvcD1yLnBhZGRpbmdCb3R0b209ci5ib3JkZXJUb3BXaWR0aD1yLmJvcmRlckJvdHRvbVdpZHRoPSJoaWRlIixpLmhlaWdodD1pLnBhZGRpbmdUb3A9aS5wYWRkaW5nQm90dG9tPWkuYm9yZGVyVG9wV2lkdGg9aS5ib3JkZXJCb3R0b21XaWR0aD0ic2hvdyIsZS53aWRnZXQoInVpLmFjY29yZGlvbiIse3ZlcnNpb246IjEuOS4wIixvcHRpb25zOnthY3RpdmU6MCxhbmltYXRlOnt9LGNvbGxhcHNpYmxlOiExLGV2ZW50OiJjbGljayIsaGVhZGVyOiI+IGxpID4gOmZpcnN0LWNoaWxkLD4gOm5vdChsaSk6ZXZlbiIsaGVpZ2h0U3R5bGU6ImF1dG8iLGljb25zOnthY3RpdmVIZWFkZXI6InVpLWljb24tdHJpYW5nbGUtMS1zIixoZWFkZXI6InVpLWljb24tdHJpYW5nbGUtMS1lIn0sYWN0aXZhdGU6bnVsbCxiZWZvcmVBY3RpdmF0ZTpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hY2NvcmRpb25JZD0idWktYWNjb3JkaW9uLSIrKHRoaXMuZWxlbWVudC5hdHRyKCJpZCIpfHwrK24pLHI9dGhpcy5vcHRpb25zO3RoaXMucHJldlNob3c9dGhpcy5wcmV2SGlkZT1lKCksdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1hY2NvcmRpb24gdWktd2lkZ2V0IHVpLWhlbHBlci1yZXNldCIpLHRoaXMuaGVhZGVycz10aGlzLmVsZW1lbnQuZmluZChyLmhlYWRlcikuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXIgdWktaGVscGVyLXJlc2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIpLHRoaXMuX2hvdmVyYWJsZSh0aGlzLmhlYWRlcnMpLHRoaXMuX2ZvY3VzYWJsZSh0aGlzLmhlYWRlcnMpLHRoaXMuaGVhZGVycy5uZXh0KCkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50IHVpLWhlbHBlci1yZXNldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuaGlkZSgpLCFyLmNvbGxhcHNpYmxlJiZyLmFjdGl2ZT09PSExJiYoci5hY3RpdmU9MCksci5hY3RpdmU8MCYmKHIuYWN0aXZlKz10aGlzLmhlYWRlcnMubGVuZ3RoKSx0aGlzLmFjdGl2ZT10aGlzLl9maW5kQWN0aXZlKHIuYWN0aXZlKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIikudG9nZ2xlQ2xhc3MoInVpLWNvcm5lci1hbGwgdWktY29ybmVyLXRvcCIpLHRoaXMuYWN0aXZlLm5leHQoKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIikuc2hvdygpLHRoaXMuX2NyZWF0ZUljb25zKCksdGhpcy5vcmlnaW5hbEhlaWdodD10aGlzLmVsZW1lbnRbMF0uc3R5bGUuaGVpZ2h0LHRoaXMucmVmcmVzaCgpLHRoaXMuZWxlbWVudC5hdHRyKCJyb2xlIiwidGFibGlzdCIpLHRoaXMuaGVhZGVycy5hdHRyKCJyb2xlIiwidGFiIikuZWFjaChmdW5jdGlvbihuKXt2YXIgcj1lKHRoaXMpLGk9ci5hdHRyKCJpZCIpLHM9ci5uZXh0KCksbz1zLmF0dHIoImlkIik7aXx8KGk9dCsiLWhlYWRlci0iK24sci5hdHRyKCJpZCIsaSkpLG98fChvPXQrIi1wYW5lbC0iK24scy5hdHRyKCJpZCIsbykpLHIuYXR0cigiYXJpYS1jb250cm9scyIsbykscy5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLGkpfSkubmV4dCgpLmF0dHIoInJvbGUiLCJ0YWJwYW5lbCIpLHRoaXMuaGVhZGVycy5ub3QodGhpcy5hY3RpdmUpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLHRhYkluZGV4Oi0xfSkubmV4dCgpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLCJhcmlhLWhpZGRlbiI6InRydWUifSkuaGlkZSgpLHRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLmFjdGl2ZS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLHRhYkluZGV4OjB9KS5uZXh0KCkuYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJ0cnVlIiwiYXJpYS1oaWRkZW4iOiJmYWxzZSJ9KTp0aGlzLmhlYWRlcnMuZXEoMCkuYXR0cigidGFiSW5kZXgiLDApLHRoaXMuX29uKHRoaXMuaGVhZGVycyx7a2V5ZG93bjoiX2tleWRvd24ifSksdGhpcy5fb24odGhpcy5oZWFkZXJzLm5leHQoKSx7a2V5ZG93bjoiX3BhbmVsS2V5RG93biJ9KSx0aGlzLl9zZXR1cEV2ZW50cyhyLmV2ZW50KX0sX2dldENyZWF0ZUV2ZW50RGF0YTpmdW5jdGlvbigpe3JldHVybntoZWFkZXI6dGhpcy5hY3RpdmUsY29udGVudDp0aGlzLmFjdGl2ZS5sZW5ndGg/dGhpcy5hY3RpdmUubmV4dCgpOmUoKX19LF9jcmVhdGVJY29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5pY29uczt0JiYoZSgiPHNwYW4+IikuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiB1aS1pY29uICIrdC5oZWFkZXIpLnByZXBlbmRUbyh0aGlzLmhlYWRlcnMpLHRoaXMuYWN0aXZlLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlQ2xhc3ModC5oZWFkZXIpLmFkZENsYXNzKHQuYWN0aXZlSGVhZGVyKSx0aGlzLmhlYWRlcnMuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1pY29ucyIpKX0sX2Rlc3Ryb3lJY29uczpmdW5jdGlvbigpe3RoaXMuaGVhZGVycy5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWljb25zIikuY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmUoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZTt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbiB1aS13aWRnZXQgdWktaGVscGVyLXJlc2V0IikucmVtb3ZlQXR0cigicm9sZSIpLHRoaXMuaGVhZGVycy5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlciB1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB1aS1oZWxwZXItcmVzZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCB1aS1jb3JuZXItdG9wIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtc2VsZWN0ZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWNvbnRyb2xzIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5lYWNoKGZ1bmN0aW9uKCl7L151aS1hY2NvcmRpb24vLnRlc3QodGhpcy5pZCkmJnRoaXMucmVtb3ZlQXR0cmlidXRlKCJpZCIpfSksdGhpcy5fZGVzdHJveUljb25zKCksZT10aGlzLmhlYWRlcnMubmV4dCgpLmNzcygiZGlzcGxheSIsIiIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigiYXJpYS1oaWRkZW4iKS5yZW1vdmVBdHRyKCJhcmlhLWxhYmVsbGVkYnkiKS5yZW1vdmVDbGFzcygidWktaGVscGVyLXJlc2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20gdWktYWNjb3JkaW9uLWNvbnRlbnQgdWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIHVpLXN0YXRlLWRpc2FibGVkIikuZWFjaChmdW5jdGlvbigpey9edWktYWNjb3JkaW9uLy50ZXN0KHRoaXMuaWQpJiZ0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX0pLHRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSE9PSJjb250ZW50IiYmKHRoaXMuZWxlbWVudC5jc3MoImhlaWdodCIsdGhpcy5vcmlnaW5hbEhlaWdodCksZS5jc3MoImhlaWdodCIsIiIpKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe2lmKGU9PT0iYWN0aXZlIil7dGhpcy5fYWN0aXZhdGUodCk7cmV0dXJufWU9PT0iZXZlbnQiJiYodGhpcy5vcHRpb25zLmV2ZW50JiZ0aGlzLl9vZmYodGhpcy5oZWFkZXJzLHRoaXMub3B0aW9ucy5ldmVudCksdGhpcy5fc2V0dXBFdmVudHModCkpLHRoaXMuX3N1cGVyKGUsdCksZT09PSJjb2xsYXBzaWJsZSImJiF0JiZ0aGlzLm9wdGlvbnMuYWN0aXZlPT09ITEmJnRoaXMuX2FjdGl2YXRlKDApLGU9PT0iaWNvbnMiJiYodGhpcy5fZGVzdHJveUljb25zKCksdCYmdGhpcy5fY3JlYXRlSWNvbnMoKSksZT09PSJkaXNhYmxlZCImJnRoaXMuaGVhZGVycy5hZGQodGhpcy5oZWFkZXJzLm5leHQoKSkudG9nZ2xlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiwhIXQpfSxfa2V5ZG93bjpmdW5jdGlvbih0KXtpZih0LmFsdEtleXx8dC5jdHJsS2V5KXJldHVybjt2YXIgbj1lLnVpLmtleUNvZGUscj10aGlzLmhlYWRlcnMubGVuZ3RoLGk9dGhpcy5oZWFkZXJzLmluZGV4KHQudGFyZ2V0KSxzPSExO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2Ugbi5SSUdIVDpjYXNlIG4uRE9XTjpzPXRoaXMuaGVhZGVyc1soaSsxKSVyXTticmVhaztjYXNlIG4uTEVGVDpjYXNlIG4uVVA6cz10aGlzLmhlYWRlcnNbKGktMStyKSVyXTticmVhaztjYXNlIG4uU1BBQ0U6Y2FzZSBuLkVOVEVSOnRoaXMuX2V2ZW50SGFuZGxlcih0KTticmVhaztjYXNlIG4uSE9NRTpzPXRoaXMuaGVhZGVyc1swXTticmVhaztjYXNlIG4uRU5EOnM9dGhpcy5oZWFkZXJzW3ItMV19cyYmKGUodC50YXJnZXQpLmF0dHIoInRhYkluZGV4IiwtMSksZShzKS5hdHRyKCJ0YWJJbmRleCIsMCkscy5mb2N1cygpLHQucHJldmVudERlZmF1bHQoKSl9LF9wYW5lbEtleURvd246ZnVuY3Rpb24odCl7dC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlVQJiZ0LmN0cmxLZXkmJmUodC5jdXJyZW50VGFyZ2V0KS5wcmV2KCkuZm9jdXMoKX0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0LG4scj10aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUsaT10aGlzLmVsZW1lbnQucGFyZW50KCk7dGhpcy5lbGVtZW50LmNzcygiaGVpZ2h0Iix0aGlzLm9yaWdpbmFsSGVpZ2h0KSxyPT09ImZpbGwiPyhlLnN1cHBvcnQubWluSGVpZ2h0fHwobj1pLmNzcygib3ZlcmZsb3ciKSxpLmNzcygib3ZlcmZsb3ciLCJoaWRkZW4iKSksdD1pLmhlaWdodCgpLHRoaXMuZWxlbWVudC5zaWJsaW5ncygiOnZpc2libGUiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49ZSh0aGlzKSxyPW4uY3NzKCJwb3NpdGlvbiIpO2lmKHI9PT0iYWJzb2x1dGUifHxyPT09ImZpeGVkIilyZXR1cm47dC09bi5vdXRlckhlaWdodCghMCl9KSxuJiZpLmNzcygib3ZlcmZsb3ciLG4pLHRoaXMuaGVhZGVycy5lYWNoKGZ1bmN0aW9uKCl7dC09ZSh0aGlzKS5vdXRlckhlaWdodCghMCl9KSx0aGlzLmhlYWRlcnMubmV4dCgpLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmhlaWdodChNYXRoLm1heCgwLHQtZSh0aGlzKS5pbm5lckhlaWdodCgpK2UodGhpcykuaGVpZ2h0KCkpKX0pLmNzcygib3ZlcmZsb3ciLCJhdXRvIikpOnI9PT0iYXV0byImJih0PTAsdGhpcy5oZWFkZXJzLm5leHQoKS5lYWNoKGZ1bmN0aW9uKCl7dD1NYXRoLm1heCh0LGUodGhpcykuaGVpZ2h0KCIiKS5oZWlnaHQoKSl9KS5oZWlnaHQodCkpLHIhPT0iY29udGVudCImJnRoaXMuZWxlbWVudC5oZWlnaHQodGhpcy5lbGVtZW50LmhlaWdodCgpKX0sX2FjdGl2YXRlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuX2ZpbmRBY3RpdmUodClbMF07aWYobj09PXRoaXMuYWN0aXZlWzBdKXJldHVybjtuPW58fHRoaXMuYWN0aXZlWzBdLHRoaXMuX2V2ZW50SGFuZGxlcih7dGFyZ2V0Om4sY3VycmVudFRhcmdldDpuLHByZXZlbnREZWZhdWx0OmUubm9vcH0pfSxfZmluZEFjdGl2ZTpmdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHQ9PSJudW1iZXIiP3RoaXMuaGVhZGVycy5lcSh0KTplKCl9LF9zZXR1cEV2ZW50czpmdW5jdGlvbih0KXt2YXIgbj17fTtpZighdClyZXR1cm47ZS5lYWNoKHQuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe25bdF09Il9ldmVudEhhbmRsZXIifSksdGhpcy5fb24odGhpcy5oZWFkZXJzLG4pfSxfZXZlbnRIYW5kbGVyOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyPXRoaXMuYWN0aXZlLGk9ZSh0LmN1cnJlbnRUYXJnZXQpLHM9aVswXT09PXJbMF0sbz1zJiZuLmNvbGxhcHNpYmxlLHU9bz9lKCk6aS5uZXh0KCksYT1yLm5leHQoKSxmPXtvbGRIZWFkZXI6cixvbGRQYW5lbDphLG5ld0hlYWRlcjpvP2UoKTppLG5ld1BhbmVsOnV9O3QucHJldmVudERlZmF1bHQoKTtpZihzJiYhbi5jb2xsYXBzaWJsZXx8dGhpcy5fdHJpZ2dlcigiYmVmb3JlQWN0aXZhdGUiLHQsZik9PT0hMSlyZXR1cm47bi5hY3RpdmU9bz8hMTp0aGlzLmhlYWRlcnMuaW5kZXgoaSksdGhpcy5hY3RpdmU9cz9lKCk6aSx0aGlzLl90b2dnbGUoZiksci5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiksbi5pY29ucyYmci5jaGlsZHJlbigiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiIpLnJlbW92ZUNsYXNzKG4uaWNvbnMuYWN0aXZlSGVhZGVyKS5hZGRDbGFzcyhuLmljb25zLmhlYWRlciksc3x8KGkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwiKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIHVpLWNvcm5lci10b3AiKSxuLmljb25zJiZpLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlQ2xhc3Mobi5pY29ucy5oZWFkZXIpLmFkZENsYXNzKG4uaWNvbnMuYWN0aXZlSGVhZGVyKSxpLm5leHQoKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIikpfSxfdG9nZ2xlOmZ1bmN0aW9uKHQpe3ZhciBuPXQubmV3UGFuZWwscj10aGlzLnByZXZTaG93Lmxlbmd0aD90aGlzLnByZXZTaG93OnQub2xkUGFuZWw7dGhpcy5wcmV2U2hvdy5hZGQodGhpcy5wcmV2SGlkZSkuc3RvcCghMCwhMCksdGhpcy5wcmV2U2hvdz1uLHRoaXMucHJldkhpZGU9cix0aGlzLm9wdGlvbnMuYW5pbWF0ZT90aGlzLl9hbmltYXRlKG4scix0KTooci5oaWRlKCksbi5zaG93KCksdGhpcy5fdG9nZ2xlQ29tcGxldGUodCkpLHIuYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJmYWxzZSIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxyLnByZXYoKS5hdHRyKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSxuLmxlbmd0aCYmci5sZW5ndGg/ci5wcmV2KCkuYXR0cigidGFiSW5kZXgiLC0xKTpuLmxlbmd0aCYmdGhpcy5oZWFkZXJzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmF0dHIoInRhYkluZGV4Iik9PT0wfSkuYXR0cigidGFiSW5kZXgiLC0xKSxuLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsImFyaWEtaGlkZGVuIjoiZmFsc2UifSkucHJldigpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pfSxfYW5pbWF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHMsbyx1LGE9dGhpcyxmPTAsbD1lLmxlbmd0aCYmKCF0Lmxlbmd0aHx8ZS5pbmRleCgpPHQuaW5kZXgoKSksYz10aGlzLm9wdGlvbnMuYW5pbWF0ZXx8e30saD1sJiZjLmRvd258fGMscD1mdW5jdGlvbigpe2EuX3RvZ2dsZUNvbXBsZXRlKG4pfTt0eXBlb2YgaD09Im51bWJlciImJih1PWgpLHR5cGVvZiBoPT0ic3RyaW5nIiYmKG89aCksbz1vfHxoLmVhc2luZ3x8Yy5lYXNpbmcsdT11fHxoLmR1cmF0aW9ufHxjLmR1cmF0aW9uO2lmKCF0Lmxlbmd0aClyZXR1cm4gZS5hbmltYXRlKGksdSxvLHApO2lmKCFlLmxlbmd0aClyZXR1cm4gdC5hbmltYXRlKHIsdSxvLHApO3M9ZS5zaG93KCkub3V0ZXJIZWlnaHQoKSx0LmFuaW1hdGUocix7ZHVyYXRpb246dSxlYXNpbmc6byxzdGVwOmZ1bmN0aW9uKGUsdCl7dC5ub3c9TWF0aC5yb3VuZChlKX19KSxlLmhpZGUoKS5hbmltYXRlKGkse2R1cmF0aW9uOnUsZWFzaW5nOm8sY29tcGxldGU6cCxzdGVwOmZ1bmN0aW9uKGUsbil7bi5ub3c9TWF0aC5yb3VuZChlKSxuLnByb3AhPT0iaGVpZ2h0Ij9mKz1uLm5vdzphLm9wdGlvbnMuaGVpZ2h0U3R5bGUhPT0iY29udGVudCImJihuLm5vdz1NYXRoLnJvdW5kKHMtdC5vdXRlckhlaWdodCgpLWYpLGY9MCl9fSl9LF90b2dnbGVDb21wbGV0ZTpmdW5jdGlvbihlKXt2YXIgdD1lLm9sZFBhbmVsO3QucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSIpLnByZXYoKS5yZW1vdmVDbGFzcygidWktY29ybmVyLXRvcCIpLmFkZENsYXNzKCJ1aS1jb3JuZXItYWxsIiksdC5sZW5ndGgmJih0LnBhcmVudCgpWzBdLmNsYXNzTmFtZT10LnBhcmVudCgpWzBdLmNsYXNzTmFtZSksdGhpcy5fdHJpZ2dlcigiYWN0aXZhdGUiLG51bGwsZSl9fSksZS51aUJhY2tDb21wYXQhPT0hMSYmKGZ1bmN0aW9uKGUsdCl7ZS5leHRlbmQodC5vcHRpb25zLHtuYXZpZ2F0aW9uOiExLG5hdmlnYXRpb25GaWx0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ocmVmLnRvTG93ZXJDYXNlKCk9PT1sb2NhdGlvbi5ocmVmLnRvTG93ZXJDYXNlKCl9fSk7dmFyIG49dC5fY3JlYXRlO3QuX2NyZWF0ZT1mdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5uYXZpZ2F0aW9uKXt2YXIgdD10aGlzLHI9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLmhlYWRlciksaT1yLm5leHQoKSxzPXIuYWRkKGkpLmZpbmQoImEiKS5maWx0ZXIodGhpcy5vcHRpb25zLm5hdmlnYXRpb25GaWx0ZXIpWzBdO3MmJnIuYWRkKGkpLmVhY2goZnVuY3Rpb24obil7aWYoZS5jb250YWlucyh0aGlzLHMpKXJldHVybiB0Lm9wdGlvbnMuYWN0aXZlPU1hdGguZmxvb3Iobi8yKSwhMX0pfW4uY2FsbCh0aGlzKX19KGpRdWVyeSxqUXVlcnkudWkuYWNjb3JkaW9uLnByb3RvdHlwZSksZnVuY3Rpb24oZSx0KXtlLmV4dGVuZCh0Lm9wdGlvbnMse2hlaWdodFN0eWxlOm51bGwsYXV0b0hlaWdodDohMCxjbGVhclN0eWxlOiExLGZpbGxTcGFjZTohMX0pO3ZhciBuPXQuX2NyZWF0ZSxyPXQuX3NldE9wdGlvbjtlLmV4dGVuZCh0LHtfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmhlaWdodFN0eWxlPXRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZXx8dGhpcy5fbWVyZ2VIZWlnaHRTdHlsZSgpLG4uY2FsbCh0aGlzKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe2lmKGU9PT0iYXV0b0hlaWdodCJ8fGU9PT0iY2xlYXJTdHlsZSJ8fGU9PT0iZmlsbFNwYWNlIil0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGU9dGhpcy5fbWVyZ2VIZWlnaHRTdHlsZSgpO3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfbWVyZ2VIZWlnaHRTdHlsZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztpZihlLmZpbGxTcGFjZSlyZXR1cm4iZmlsbCI7aWYoZS5jbGVhclN0eWxlKXJldHVybiJjb250ZW50IjtpZihlLmF1dG9IZWlnaHQpcmV0dXJuImF1dG8ifX0pfShqUXVlcnksalF1ZXJ5LnVpLmFjY29yZGlvbi5wcm90b3R5cGUpLGZ1bmN0aW9uKGUsdCl7ZS5leHRlbmQodC5vcHRpb25zLmljb25zLHthY3RpdmVIZWFkZXI6bnVsbCxoZWFkZXJTZWxlY3RlZDoidWktaWNvbi10cmlhbmdsZS0xLXMifSk7dmFyIG49dC5fY3JlYXRlSWNvbnM7dC5fY3JlYXRlSWNvbnM9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuaWNvbnMmJih0aGlzLm9wdGlvbnMuaWNvbnMuYWN0aXZlSGVhZGVyPXRoaXMub3B0aW9ucy5pY29ucy5hY3RpdmVIZWFkZXJ8fHRoaXMub3B0aW9ucy5pY29ucy5oZWFkZXJTZWxlY3RlZCksbi5jYWxsKHRoaXMpfX0oalF1ZXJ5LGpRdWVyeS51aS5hY2NvcmRpb24ucHJvdG90eXBlKSxmdW5jdGlvbihlLHQpe3QuYWN0aXZhdGU9dC5fYWN0aXZhdGU7dmFyIG49dC5fZmluZEFjdGl2ZTt0Ll9maW5kQWN0aXZlPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09LTEmJihlPSExKSxlJiZ0eXBlb2YgZSE9Im51bWJlciImJihlPXRoaXMuaGVhZGVycy5pbmRleCh0aGlzLmhlYWRlcnMuZmlsdGVyKGUpKSxlPT09LTEmJihlPSExKSksbi5jYWxsKHRoaXMsZSl9fShqUXVlcnksalF1ZXJ5LnVpLmFjY29yZGlvbi5wcm90b3R5cGUpLGpRdWVyeS51aS5hY2NvcmRpb24ucHJvdG90eXBlLnJlc2l6ZT1qUXVlcnkudWkuYWNjb3JkaW9uLnByb3RvdHlwZS5yZWZyZXNoLGZ1bmN0aW9uKGUsdCl7ZS5leHRlbmQodC5vcHRpb25zLHtjaGFuZ2U6bnVsbCxjaGFuZ2VzdGFydDpudWxsfSk7dmFyIG49dC5fdHJpZ2dlcjt0Ll90cmlnZ2VyPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaT8oZT09PSJiZWZvcmVBY3RpdmF0ZSI/aT1uLmNhbGwodGhpcywiY2hhbmdlc3RhcnQiLHQse29sZEhlYWRlcjpyLm9sZEhlYWRlcixvbGRDb250ZW50OnIub2xkUGFuZWwsbmV3SGVhZGVyOnIubmV3SGVhZGVyLG5ld0NvbnRlbnQ6ci5uZXdQYW5lbH0pOmU9PT0iYWN0aXZhdGUiJiYoaT1uLmNhbGwodGhpcywiY2hhbmdlIix0LHtvbGRIZWFkZXI6ci5vbGRIZWFkZXIsb2xkQ29udGVudDpyLm9sZFBhbmVsLG5ld0hlYWRlcjpyLm5ld0hlYWRlcixuZXdDb250ZW50OnIubmV3UGFuZWx9KSksaSk6ITF9fShqUXVlcnksalF1ZXJ5LnVpLmFjY29yZGlvbi5wcm90b3R5cGUpLGZ1bmN0aW9uKGUsdCl7ZS5leHRlbmQodC5vcHRpb25zLHthbmltYXRlOm51bGwsYW5pbWF0ZWQ6InNsaWRlIn0pO3ZhciBuPXQuX2NyZWF0ZTt0Ll9jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnM7ZS5hbmltYXRlPT09bnVsbCYmKGUuYW5pbWF0ZWQ/ZS5hbmltYXRlZD09PSJzbGlkZSI/ZS5hbmltYXRlPTMwMDplLmFuaW1hdGVkPT09ImJvdW5jZXNsaWRlIj9lLmFuaW1hdGU9e2R1cmF0aW9uOjIwMCxkb3duOntlYXNpbmc6ImVhc2VPdXRCb3VuY2UiLGR1cmF0aW9uOjFlM319OmUuYW5pbWF0ZT1lLmFuaW1hdGVkOmUuYW5pbWF0ZT0hMSksbi5jYWxsKHRoaXMpfX0oalF1ZXJ5LGpRdWVyeS51aS5hY2NvcmRpb24ucHJvdG90eXBlKSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuPTA7ZS53aWRnZXQoInVpLmF1dG9jb21wbGV0ZSIse3ZlcnNpb246IjEuOS4wIixkZWZhdWx0RWxlbWVudDoiPGlucHV0PiIsb3B0aW9uczp7YXBwZW5kVG86ImJvZHkiLGF1dG9Gb2N1czohMSxkZWxheTozMDAsbWluTGVuZ3RoOjEscG9zaXRpb246e215OiJsZWZ0IHRvcCIsYXQ6ImxlZnQgYm90dG9tIixjb2xsaXNpb246Im5vbmUifSxzb3VyY2U6bnVsbCxjaGFuZ2U6bnVsbCxjbG9zZTpudWxsLGZvY3VzOm51bGwsb3BlbjpudWxsLHJlc3BvbnNlOm51bGwsc2VhcmNoOm51bGwsc2VsZWN0Om51bGx9LHBlbmRpbmc6MCxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQsbixyO3RoaXMuaXNNdWx0aUxpbmU9dGhpcy5faXNNdWx0aUxpbmUoKSx0aGlzLnZhbHVlTWV0aG9kPXRoaXMuZWxlbWVudFt0aGlzLmVsZW1lbnQuaXMoImlucHV0LHRleHRhcmVhIik/InZhbCI6InRleHQiXSx0aGlzLmlzTmV3TWVudT0hMCx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1pbnB1dCIpLmF0dHIoImF1dG9jb21wbGV0ZSIsIm9mZiIpLHRoaXMuX29uKHtrZXlkb3duOmZ1bmN0aW9uKGkpe2lmKHRoaXMuZWxlbWVudC5wcm9wKCJyZWFkT25seSIpKXt0PSEwLHI9ITAsbj0hMDtyZXR1cm59dD0hMSxyPSExLG49ITE7dmFyIHM9ZS51aS5rZXlDb2RlO3N3aXRjaChpLmtleUNvZGUpe2Nhc2Ugcy5QQUdFX1VQOnQ9ITAsdGhpcy5fbW92ZSgicHJldmlvdXNQYWdlIixpKTticmVhaztjYXNlIHMuUEFHRV9ET1dOOnQ9ITAsdGhpcy5fbW92ZSgibmV4dFBhZ2UiLGkpO2JyZWFrO2Nhc2Ugcy5VUDp0PSEwLHRoaXMuX2tleUV2ZW50KCJwcmV2aW91cyIsaSk7YnJlYWs7Y2FzZSBzLkRPV046dD0hMCx0aGlzLl9rZXlFdmVudCgibmV4dCIsaSk7YnJlYWs7Y2FzZSBzLkVOVEVSOmNhc2Ugcy5OVU1QQURfRU5URVI6dGhpcy5tZW51LmFjdGl2ZSYmKHQ9ITAsaS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubWVudS5zZWxlY3QoaSkpO2JyZWFrO2Nhc2Ugcy5UQUI6dGhpcy5tZW51LmFjdGl2ZSYmdGhpcy5tZW51LnNlbGVjdChpKTticmVhaztjYXNlIHMuRVNDQVBFOnRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpJiYodGhpcy5fdmFsdWUodGhpcy50ZXJtKSx0aGlzLmNsb3NlKGkpLGkucHJldmVudERlZmF1bHQoKSk7YnJlYWs7ZGVmYXVsdDpuPSEwLHRoaXMuX3NlYXJjaFRpbWVvdXQoaSl9fSxrZXlwcmVzczpmdW5jdGlvbihyKXtpZih0KXt0PSExLHIucHJldmVudERlZmF1bHQoKTtyZXR1cm59aWYobilyZXR1cm47dmFyIGk9ZS51aS5rZXlDb2RlO3N3aXRjaChyLmtleUNvZGUpe2Nhc2UgaS5QQUdFX1VQOnRoaXMuX21vdmUoInByZXZpb3VzUGFnZSIscik7YnJlYWs7Y2FzZSBpLlBBR0VfRE9XTjp0aGlzLl9tb3ZlKCJuZXh0UGFnZSIscik7YnJlYWs7Y2FzZSBpLlVQOnRoaXMuX2tleUV2ZW50KCJwcmV2aW91cyIscik7YnJlYWs7Y2FzZSBpLkRPV046dGhpcy5fa2V5RXZlbnQoIm5leHQiLHIpfX0saW5wdXQ6ZnVuY3Rpb24oZSl7aWYocil7cj0hMSxlLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufXRoaXMuX3NlYXJjaFRpbWVvdXQoZSl9LGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZEl0ZW09bnVsbCx0aGlzLnByZXZpb3VzPXRoaXMuX3ZhbHVlKCl9LGJsdXI6ZnVuY3Rpb24oZSl7aWYodGhpcy5jYW5jZWxCbHVyKXtkZWxldGUgdGhpcy5jYW5jZWxCbHVyO3JldHVybn1jbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuY2xvc2UoZSksdGhpcy5fY2hhbmdlKGUpfX0pLHRoaXMuX2luaXRTb3VyY2UoKSx0aGlzLm1lbnU9ZSgiPHVsPiIpLmFkZENsYXNzKCJ1aS1hdXRvY29tcGxldGUiKS5hcHBlbmRUbyh0aGlzLmRvY3VtZW50LmZpbmQodGhpcy5vcHRpb25zLmFwcGVuZFRvfHwiYm9keSIpWzBdKS5tZW51KHtpbnB1dDplKCkscm9sZTpudWxsfSkuekluZGV4KHRoaXMuZWxlbWVudC56SW5kZXgoKSsxKS5oaWRlKCkuZGF0YSgibWVudSIpLHRoaXMuX29uKHRoaXMubWVudS5lbGVtZW50LHttb3VzZWRvd246ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2FuY2VsQmx1cj0hMCx0aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXJ9KTt2YXIgbj10aGlzLm1lbnUuZWxlbWVudFswXTtlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktbWVudS1pdGVtIikubGVuZ3RofHx0aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5kb2N1bWVudC5vbmUoIm1vdXNlZG93biIsZnVuY3Rpb24ocil7ci50YXJnZXQhPT10LmVsZW1lbnRbMF0mJnIudGFyZ2V0IT09biYmIWUuY29udGFpbnMobixyLnRhcmdldCkmJnQuY2xvc2UoKX0pfSl9LG1lbnVmb2N1czpmdW5jdGlvbih0LG4pe2lmKHRoaXMuaXNOZXdNZW51KXt0aGlzLmlzTmV3TWVudT0hMTtpZih0Lm9yaWdpbmFsRXZlbnQmJi9ebW91c2UvLnRlc3QodC5vcmlnaW5hbEV2ZW50LnR5cGUpKXt0aGlzLm1lbnUuYmx1cigpLHRoaXMuZG9jdW1lbnQub25lKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKCl7ZSh0LnRhcmdldCkudHJpZ2dlcih0Lm9yaWdpbmFsRXZlbnQpfSk7cmV0dXJufX12YXIgcj1uLml0ZW0uZGF0YSgidWktYXV0b2NvbXBsZXRlLWl0ZW0iKXx8bi5pdGVtLmRhdGEoIml0ZW0uYXV0b2NvbXBsZXRlIik7ITEhPT10aGlzLl90cmlnZ2VyKCJmb2N1cyIsdCx7aXRlbTpyfSk/dC5vcmlnaW5hbEV2ZW50JiYvXmtleS8udGVzdCh0Lm9yaWdpbmFsRXZlbnQudHlwZSkmJnRoaXMuX3ZhbHVlKHIudmFsdWUpOnRoaXMubGl2ZVJlZ2lvbi50ZXh0KHIudmFsdWUpfSxtZW51c2VsZWN0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5pdGVtLmRhdGEoInVpLWF1dG9jb21wbGV0ZS1pdGVtIil8fHQuaXRlbS5kYXRhKCJpdGVtLmF1dG9jb21wbGV0ZSIpLHI9dGhpcy5wcmV2aW91czt0aGlzLmVsZW1lbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQmJih0aGlzLmVsZW1lbnQuZm9jdXMoKSx0aGlzLnByZXZpb3VzPXIsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXIsdGhpcy5zZWxlY3RlZEl0ZW09bn0pKSwhMSE9PXRoaXMuX3RyaWdnZXIoInNlbGVjdCIsZSx7aXRlbTpufSkmJnRoaXMuX3ZhbHVlKG4udmFsdWUpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLHRoaXMuY2xvc2UoZSksdGhpcy5zZWxlY3RlZEl0ZW09bn19KSx0aGlzLmxpdmVSZWdpb249ZSgiPHNwYW4+Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoicG9saXRlIn0pLmFkZENsYXNzKCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiKS5pbnNlcnRBZnRlcih0aGlzLmVsZW1lbnQpLGUuZm4uYmdpZnJhbWUmJnRoaXMubWVudS5lbGVtZW50LmJnaWZyYW1lKCksdGhpcy5fb24odGhpcy53aW5kb3cse2JlZm9yZXVubG9hZDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKX19KX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktYXV0b2NvbXBsZXRlLWlucHV0IikucmVtb3ZlQXR0cigiYXV0b2NvbXBsZXRlIiksdGhpcy5tZW51LmVsZW1lbnQucmVtb3ZlKCksdGhpcy5saXZlUmVnaW9uLnJlbW92ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5fc3VwZXIoZSx0KSxlPT09InNvdXJjZSImJnRoaXMuX2luaXRTb3VyY2UoKSxlPT09ImFwcGVuZFRvIiYmdGhpcy5tZW51LmVsZW1lbnQuYXBwZW5kVG8odGhpcy5kb2N1bWVudC5maW5kKHR8fCJib2R5IilbMF0pLGU9PT0iZGlzYWJsZWQiJiZ0JiZ0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKX0sX2lzTXVsdGlMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5pcygidGV4dGFyZWEiKT8hMDp0aGlzLmVsZW1lbnQuaXMoImlucHV0Iik/ITE6dGhpcy5lbGVtZW50LnByb3AoImlzQ29udGVudEVkaXRhYmxlIil9LF9pbml0U291cmNlOmZ1bmN0aW9uKCl7dmFyIHQsbixyPXRoaXM7ZS5pc0FycmF5KHRoaXMub3B0aW9ucy5zb3VyY2UpPyh0PXRoaXMub3B0aW9ucy5zb3VyY2UsdGhpcy5zb3VyY2U9ZnVuY3Rpb24obixyKXtyKGUudWkuYXV0b2NvbXBsZXRlLmZpbHRlcih0LG4udGVybSkpfSk6dHlwZW9mIHRoaXMub3B0aW9ucy5zb3VyY2U9PSJzdHJpbmciPyhuPXRoaXMub3B0aW9ucy5zb3VyY2UsdGhpcy5zb3VyY2U9ZnVuY3Rpb24odCxpKXtyLnhociYmci54aHIuYWJvcnQoKSxyLnhocj1lLmFqYXgoe3VybDpuLGRhdGE6dCxkYXRhVHlwZToianNvbiIsc3VjY2VzczpmdW5jdGlvbihlLHQpe2koZSl9LGVycm9yOmZ1bmN0aW9uKCl7aShbXSl9fSl9KTp0aGlzLnNvdXJjZT10aGlzLm9wdGlvbnMuc291cmNlfSxfc2VhcmNoVGltZW91dDpmdW5jdGlvbihlKXtjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuc2VhcmNoaW5nPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy50ZXJtIT09dGhpcy5fdmFsdWUoKSYmKHRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsdGhpcy5zZWFyY2gobnVsbCxlKSl9LHRoaXMub3B0aW9ucy5kZWxheSl9LHNlYXJjaDpmdW5jdGlvbihlLHQpe2U9ZSE9bnVsbD9lOnRoaXMuX3ZhbHVlKCksdGhpcy50ZXJtPXRoaXMuX3ZhbHVlKCk7aWYoZS5sZW5ndGg8dGhpcy5vcHRpb25zLm1pbkxlbmd0aClyZXR1cm4gdGhpcy5jbG9zZSh0KTtpZih0aGlzLl90cmlnZ2VyKCJzZWFyY2giLHQpPT09ITEpcmV0dXJuO3JldHVybiB0aGlzLl9zZWFyY2goZSl9LF9zZWFyY2g6ZnVuY3Rpb24oZSl7dGhpcy5wZW5kaW5nKyssdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1hdXRvY29tcGxldGUtbG9hZGluZyIpLHRoaXMuY2FuY2VsU2VhcmNoPSExLHRoaXMuc291cmNlKHt0ZXJtOmV9LHRoaXMuX3Jlc3BvbnNlKCkpfSxfcmVzcG9uc2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9KytuO3JldHVybiBmdW5jdGlvbihyKXt0PT09biYmZS5fX3Jlc3BvbnNlKHIpLGUucGVuZGluZy0tLGUucGVuZGluZ3x8ZS5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hdXRvY29tcGxldGUtbG9hZGluZyIpfX0sX19yZXNwb25zZTpmdW5jdGlvbihlKXtlJiYoZT10aGlzLl9ub3JtYWxpemUoZSkpLHRoaXMuX3RyaWdnZXIoInJlc3BvbnNlIixudWxsLHtjb250ZW50OmV9KSwhdGhpcy5vcHRpb25zLmRpc2FibGVkJiZlJiZlLmxlbmd0aCYmIXRoaXMuY2FuY2VsU2VhcmNoPyh0aGlzLl9zdWdnZXN0KGUpLHRoaXMuX3RyaWdnZXIoIm9wZW4iKSk6dGhpcy5fY2xvc2UoKX0sY2xvc2U6ZnVuY3Rpb24oZSl7dGhpcy5jYW5jZWxTZWFyY2g9ITAsdGhpcy5fY2xvc2UoZSl9LF9jbG9zZTpmdW5jdGlvbihlKXt0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSYmKHRoaXMubWVudS5lbGVtZW50LmhpZGUoKSx0aGlzLm1lbnUuYmx1cigpLHRoaXMuaXNOZXdNZW51PSEwLHRoaXMuX3RyaWdnZXIoImNsb3NlIixlKSl9LF9jaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5wcmV2aW91cyE9PXRoaXMuX3ZhbHVlKCkmJnRoaXMuX3RyaWdnZXIoImNoYW5nZSIsZSx7aXRlbTp0aGlzLnNlbGVjdGVkSXRlbX0pfSxfbm9ybWFsaXplOmZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aCYmdFswXS5sYWJlbCYmdFswXS52YWx1ZT90OmUubWFwKHQsZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bGFiZWw6dCx2YWx1ZTp0fTplLmV4dGVuZCh7bGFiZWw6dC5sYWJlbHx8dC52YWx1ZSx2YWx1ZTp0LnZhbHVlfHx0LmxhYmVsfSx0KX0pfSxfc3VnZ2VzdDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm1lbnUuZWxlbWVudC5lbXB0eSgpLnpJbmRleCh0aGlzLmVsZW1lbnQuekluZGV4KCkrMSk7dGhpcy5fcmVuZGVyTWVudShuLHQpLHRoaXMubWVudS5yZWZyZXNoKCksbi5zaG93KCksdGhpcy5fcmVzaXplTWVudSgpLG4ucG9zaXRpb24oZS5leHRlbmQoe29mOnRoaXMuZWxlbWVudH0sdGhpcy5vcHRpb25zLnBvc2l0aW9uKSksdGhpcy5vcHRpb25zLmF1dG9Gb2N1cyYmdGhpcy5tZW51Lm5leHQoKX0sX3Jlc2l6ZU1lbnU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1lbnUuZWxlbWVudDtlLm91dGVyV2lkdGgoTWF0aC5tYXgoZS53aWR0aCgiIikub3V0ZXJXaWR0aCgpKzEsdGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSkpfSxfcmVuZGVyTWVudTpmdW5jdGlvbih0LG4pe3ZhciByPXRoaXM7ZS5lYWNoKG4sZnVuY3Rpb24oZSxuKXtyLl9yZW5kZXJJdGVtRGF0YSh0LG4pfSl9LF9yZW5kZXJJdGVtRGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9yZW5kZXJJdGVtKGUsdCkuZGF0YSgidWktYXV0b2NvbXBsZXRlLWl0ZW0iLHQpfSxfcmVuZGVySXRlbTpmdW5jdGlvbih0LG4pe3JldHVybiBlKCI8bGk+IikuYXBwZW5kKGUoIjxhPiIpLnRleHQobi5sYWJlbCkpLmFwcGVuZFRvKHQpfSxfbW92ZTpmdW5jdGlvbihlLHQpe2lmKCF0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSl7dGhpcy5zZWFyY2gobnVsbCx0KTtyZXR1cm59aWYodGhpcy5tZW51LmlzRmlyc3RJdGVtKCkmJi9ecHJldmlvdXMvLnRlc3QoZSl8fHRoaXMubWVudS5pc0xhc3RJdGVtKCkmJi9ebmV4dC8udGVzdChlKSl7dGhpcy5fdmFsdWUodGhpcy50ZXJtKSx0aGlzLm1lbnUuYmx1cigpO3JldHVybn10aGlzLm1lbnVbZV0odCl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbnUuZWxlbWVudH0sX3ZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnZhbHVlTWV0aG9kLmFwcGx5KHRoaXMuZWxlbWVudCxhcmd1bWVudHMpfSxfa2V5RXZlbnQ6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5pc011bHRpTGluZXx8dGhpcy5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikpdGhpcy5fbW92ZShlLHQpLHQucHJldmVudERlZmF1bHQoKX19KSxlLmV4dGVuZChlLnVpLmF1dG9jb21wbGV0ZSx7ZXNjYXBlUmVnZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywiXFwkJiIpfSxmaWx0ZXI6ZnVuY3Rpb24odCxuKXt2YXIgcj1uZXcgUmVnRXhwKGUudWkuYXV0b2NvbXBsZXRlLmVzY2FwZVJlZ2V4KG4pLCJpIik7cmV0dXJuIGUuZ3JlcCh0LGZ1bmN0aW9uKGUpe3JldHVybiByLnRlc3QoZS5sYWJlbHx8ZS52YWx1ZXx8ZSl9KX19KSxlLndpZGdldCgidWkuYXV0b2NvbXBsZXRlIixlLnVpLmF1dG9jb21wbGV0ZSx7b3B0aW9uczp7bWVzc2FnZXM6e25vUmVzdWx0czoiTm8gc2VhcmNoIHJlc3VsdHMuIixyZXN1bHRzOmZ1bmN0aW9uKGUpe3JldHVybiBlKyhlPjE/IiByZXN1bHRzIGFyZSI6IiByZXN1bHQgaXMiKSsiIGF2YWlsYWJsZSwgdXNlIHVwIGFuZCBkb3duIGFycm93IGtleXMgdG8gbmF2aWdhdGUuIn19fSxfX3Jlc3BvbnNlOmZ1bmN0aW9uKGUpe3ZhciB0O3RoaXMuX3N1cGVyQXBwbHkoYXJndW1lbnRzKTtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fHRoaXMuY2FuY2VsU2VhcmNoKXJldHVybjtlJiZlLmxlbmd0aD90PXRoaXMub3B0aW9ucy5tZXNzYWdlcy5yZXN1bHRzKGUubGVuZ3RoKTp0PXRoaXMub3B0aW9ucy5tZXNzYWdlcy5ub1Jlc3VsdHMsdGhpcy5saXZlUmVnaW9uLnRleHQodCl9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxzLG89InVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIix1PSJ1aS1zdGF0ZS1ob3ZlciB1aS1zdGF0ZS1hY3RpdmUgIixhPSJ1aS1idXR0b24taWNvbnMtb25seSB1aS1idXR0b24taWNvbi1vbmx5IHVpLWJ1dHRvbi10ZXh0LWljb25zIHVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSB1aS1idXR0b24tdGV4dC1pY29uLXNlY29uZGFyeSB1aS1idXR0b24tdGV4dC1vbmx5IixmPWZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKS5maW5kKCI6dWktYnV0dG9uIik7c2V0VGltZW91dChmdW5jdGlvbigpe3QuYnV0dG9uKCJyZWZyZXNoIil9LDEpfSxsPWZ1bmN0aW9uKHQpe3ZhciBuPXQubmFtZSxyPXQuZm9ybSxpPWUoW10pO3JldHVybiBuJiYocj9pPWUocikuZmluZCgiW25hbWU9JyIrbisiJ10iKTppPWUoIltuYW1lPSciK24rIiddIix0Lm93bmVyRG9jdW1lbnQpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiF0aGlzLmZvcm19KSksaX07ZS53aWRnZXQoInVpLmJ1dHRvbiIse3ZlcnNpb246IjEuOS4wIixkZWZhdWx0RWxlbWVudDoiPGJ1dHRvbj4iLG9wdGlvbnM6e2Rpc2FibGVkOm51bGwsdGV4dDohMCxsYWJlbDpudWxsLGljb25zOntwcmltYXJ5Om51bGwsc2Vjb25kYXJ5Om51bGx9fSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmNsb3Nlc3QoImZvcm0iKS51bmJpbmQoInJlc2V0Iit0aGlzLmV2ZW50TmFtZXNwYWNlKS5iaW5kKCJyZXNldCIrdGhpcy5ldmVudE5hbWVzcGFjZSxmKSx0eXBlb2YgdGhpcy5vcHRpb25zLmRpc2FibGVkIT0iYm9vbGVhbiI/dGhpcy5vcHRpb25zLmRpc2FibGVkPSEhdGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIik6dGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIix0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLHRoaXMuX2RldGVybWluZUJ1dHRvblR5cGUoKSx0aGlzLmhhc1RpdGxlPSEhdGhpcy5idXR0b25FbGVtZW50LmF0dHIoInRpdGxlIik7dmFyIHQ9dGhpcyx1PXRoaXMub3B0aW9ucyxhPXRoaXMudHlwZT09PSJjaGVja2JveCJ8fHRoaXMudHlwZT09PSJyYWRpbyIsYz0idWktc3RhdGUtaG92ZXIiKyhhPyIiOiIgdWktc3RhdGUtYWN0aXZlIiksaD0idWktc3RhdGUtZm9jdXMiO3UubGFiZWw9PT1udWxsJiYodS5sYWJlbD10aGlzLnR5cGU9PT0iaW5wdXQiP3RoaXMuYnV0dG9uRWxlbWVudC52YWwoKTp0aGlzLmJ1dHRvbkVsZW1lbnQuaHRtbCgpKSx0aGlzLmJ1dHRvbkVsZW1lbnQuYWRkQ2xhc3MobykuYXR0cigicm9sZSIsImJ1dHRvbiIpLmJpbmQoIm1vdXNlZW50ZXIiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpZih1LmRpc2FibGVkKXJldHVybjtlKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLHRoaXM9PT1uJiZlKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKX0pLmJpbmQoIm1vdXNlbGVhdmUiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpZih1LmRpc2FibGVkKXJldHVybjtlKHRoaXMpLnJlbW92ZUNsYXNzKGMpfSkuYmluZCgiY2xpY2siK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oZSl7dS5kaXNhYmxlZCYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX0pLHRoaXMuZWxlbWVudC5iaW5kKCJmb2N1cyIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe3QuYnV0dG9uRWxlbWVudC5hZGRDbGFzcyhoKX0pLmJpbmQoImJsdXIiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXt0LmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoaCl9KSxhJiYodGhpcy5lbGVtZW50LmJpbmQoImNoYW5nZSIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2lmKHMpcmV0dXJuO3QucmVmcmVzaCgpfSksdGhpcy5idXR0b25FbGVtZW50LmJpbmQoIm1vdXNlZG93biIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbihlKXtpZih1LmRpc2FibGVkKXJldHVybjtzPSExLHI9ZS5wYWdlWCxpPWUucGFnZVl9KS5iaW5kKCJtb3VzZXVwIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKGUpe2lmKHUuZGlzYWJsZWQpcmV0dXJuO2lmKHIhPT1lLnBhZ2VYfHxpIT09ZS5wYWdlWSlzPSEwfSkpLHRoaXMudHlwZT09PSJjaGVja2JveCI/dGhpcy5idXR0b25FbGVtZW50LmJpbmQoImNsaWNrIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7aWYodS5kaXNhYmxlZHx8cylyZXR1cm4hMTtlKHRoaXMpLnRvZ2dsZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0LmJ1dHRvbkVsZW1lbnQuYXR0cigiYXJpYS1wcmVzc2VkIix0LmVsZW1lbnRbMF0uY2hlY2tlZCl9KTp0aGlzLnR5cGU9PT0icmFkaW8iP3RoaXMuYnV0dG9uRWxlbWVudC5iaW5kKCJjbGljayIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2lmKHUuZGlzYWJsZWR8fHMpcmV0dXJuITE7ZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdC5idXR0b25FbGVtZW50LmF0dHIoImFyaWEtcHJlc3NlZCIsInRydWUiKTt2YXIgbj10LmVsZW1lbnRbMF07bChuKS5ub3QobikubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcykuYnV0dG9uKCJ3aWRnZXQiKVswXX0pLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpfSk6KHRoaXMuYnV0dG9uRWxlbWVudC5iaW5kKCJtb3VzZWRvd24iK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpZih1LmRpc2FibGVkKXJldHVybiExO2UodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLG49dGhpcyx0LmRvY3VtZW50Lm9uZSgibW91c2V1cCIsZnVuY3Rpb24oKXtuPW51bGx9KX0pLmJpbmQoIm1vdXNldXAiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpZih1LmRpc2FibGVkKXJldHVybiExO2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSkuYmluZCgia2V5ZG93biIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbih0KXtpZih1LmRpc2FibGVkKXJldHVybiExOyh0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuU1BBQ0V8fHQua2V5Q29kZT09PWUudWkua2V5Q29kZS5FTlRFUikmJmUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSkuYmluZCgia2V5dXAiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKX0pLHRoaXMuYnV0dG9uRWxlbWVudC5pcygiYSIpJiZ0aGlzLmJ1dHRvbkVsZW1lbnQua2V5dXAoZnVuY3Rpb24odCl7dC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlNQQUNFJiZlKHRoaXMpLmNsaWNrKCl9KSksdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsdS5kaXNhYmxlZCksdGhpcy5fcmVzZXRCdXR0b24oKX0sX2RldGVybWluZUJ1dHRvblR5cGU6ZnVuY3Rpb24oKXt2YXIgZSx0LG47dGhpcy5lbGVtZW50LmlzKCJbdHlwZT1jaGVja2JveF0iKT90aGlzLnR5cGU9ImNoZWNrYm94Ijp0aGlzLmVsZW1lbnQuaXMoIlt0eXBlPXJhZGlvXSIpP3RoaXMudHlwZT0icmFkaW8iOnRoaXMuZWxlbWVudC5pcygiaW5wdXQiKT90aGlzLnR5cGU9ImlucHV0Ijp0aGlzLnR5cGU9ImJ1dHRvbiIsdGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlvIj8oZT10aGlzLmVsZW1lbnQucGFyZW50cygpLmxhc3QoKSx0PSJsYWJlbFtmb3I9JyIrdGhpcy5lbGVtZW50LmF0dHIoImlkIikrIiddIix0aGlzLmJ1dHRvbkVsZW1lbnQ9ZS5maW5kKHQpLHRoaXMuYnV0dG9uRWxlbWVudC5sZW5ndGh8fChlPWUubGVuZ3RoP2Uuc2libGluZ3MoKTp0aGlzLmVsZW1lbnQuc2libGluZ3MoKSx0aGlzLmJ1dHRvbkVsZW1lbnQ9ZS5maWx0ZXIodCksdGhpcy5idXR0b25FbGVtZW50Lmxlbmd0aHx8KHRoaXMuYnV0dG9uRWxlbWVudD1lLmZpbmQodCkpKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZSIpLG49dGhpcy5lbGVtZW50LmlzKCI6Y2hlY2tlZCIpLG4mJnRoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdGhpcy5idXR0b25FbGVtZW50LnByb3AoImFyaWEtcHJlc3NlZCIsbikpOnRoaXMuYnV0dG9uRWxlbWVudD10aGlzLmVsZW1lbnR9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1dHRvbkVsZW1lbnR9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiKSx0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MobysiICIrdSsiICIrYSkucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtcHJlc3NlZCIpLmh0bWwodGhpcy5idXR0b25FbGVtZW50LmZpbmQoIi51aS1idXR0b24tdGV4dCIpLmh0bWwoKSksdGhpcy5oYXNUaXRsZXx8dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUF0dHIoInRpdGxlIil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt0aGlzLl9zdXBlcihlLHQpO2lmKGU9PT0iZGlzYWJsZWQiKXt0P3RoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsITApOnRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsITEpO3JldHVybn10aGlzLl9yZXNldEJ1dHRvbigpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LmlzKCI6ZGlzYWJsZWQiKTt0IT09dGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIix0KSx0aGlzLnR5cGU9PT0icmFkaW8iP2wodGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5pcygiOmNoZWNrZWQiKT9lKHRoaXMpLmJ1dHRvbigid2lkZ2V0IikuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsInRydWUiKTplKHRoaXMpLmJ1dHRvbigid2lkZ2V0IikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsImZhbHNlIil9KTp0aGlzLnR5cGU9PT0iY2hlY2tib3giJiYodGhpcy5lbGVtZW50LmlzKCI6Y2hlY2tlZCIpP3RoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwidHJ1ZSIpOnRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKSl9LF9yZXNldEJ1dHRvbjpmdW5jdGlvbigpe2lmKHRoaXMudHlwZT09PSJpbnB1dCIpe3RoaXMub3B0aW9ucy5sYWJlbCYmdGhpcy5lbGVtZW50LnZhbCh0aGlzLm9wdGlvbnMubGFiZWwpO3JldHVybn12YXIgdD10aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoYSksbj1lKCI8c3Bhbj48L3NwYW4+Iix0aGlzLmRvY3VtZW50WzBdKS5hZGRDbGFzcygidWktYnV0dG9uLXRleHQiKS5odG1sKHRoaXMub3B0aW9ucy5sYWJlbCkuYXBwZW5kVG8odC5lbXB0eSgpKS50ZXh0KCkscj10aGlzLm9wdGlvbnMuaWNvbnMsaT1yLnByaW1hcnkmJnIuc2Vjb25kYXJ5LHM9W107ci5wcmltYXJ5fHxyLnNlY29uZGFyeT8odGhpcy5vcHRpb25zLnRleHQmJnMucHVzaCgidWktYnV0dG9uLXRleHQtaWNvbiIrKGk/InMiOnIucHJpbWFyeT8iLXByaW1hcnkiOiItc2Vjb25kYXJ5IikpLHIucHJpbWFyeSYmdC5wcmVwZW5kKCI8c3BhbiBjbGFzcz0ndWktYnV0dG9uLWljb24tcHJpbWFyeSB1aS1pY29uICIrci5wcmltYXJ5KyInPjwvc3Bhbj4iKSxyLnNlY29uZGFyeSYmdC5hcHBlbmQoIjxzcGFuIGNsYXNzPSd1aS1idXR0b24taWNvbi1zZWNvbmRhcnkgdWktaWNvbiAiK3Iuc2Vjb25kYXJ5KyInPjwvc3Bhbj4iKSx0aGlzLm9wdGlvbnMudGV4dHx8KHMucHVzaChpPyJ1aS1idXR0b24taWNvbnMtb25seSI6InVpLWJ1dHRvbi1pY29uLW9ubHkiKSx0aGlzLmhhc1RpdGxlfHx0LmF0dHIoInRpdGxlIixlLnRyaW0obikpKSk6cy5wdXNoKCJ1aS1idXR0b24tdGV4dC1vbmx5IiksdC5hZGRDbGFzcyhzLmpvaW4oIiAiKSl9fSksZS53aWRnZXQoInVpLmJ1dHRvbnNldCIse3ZlcnNpb246IjEuOS4wIixvcHRpb25zOntpdGVtczoiYnV0dG9uLCBpbnB1dFt0eXBlPWJ1dHRvbl0sIGlucHV0W3R5cGU9c3VibWl0XSwgaW5wdXRbdHlwZT1yZXNldF0sIGlucHV0W3R5cGU9Y2hlY2tib3hdLCBpbnB1dFt0eXBlPXJhZGlvXSwgYSwgOmRhdGEoYnV0dG9uKSJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWJ1dHRvbnNldCIpfSxfaW5pdDpmdW5jdGlvbigpe3RoaXMucmVmcmVzaCgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7ZT09PSJkaXNhYmxlZCImJnRoaXMuYnV0dG9ucy5idXR0b24oIm9wdGlvbiIsZSx0KSx0aGlzLl9zdXBlcihlLHQpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LmNzcygiZGlyZWN0aW9uIik9PT0icnRsIjt0aGlzLmJ1dHRvbnM9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maWx0ZXIoIjp1aS1idXR0b24iKS5idXR0b24oInJlZnJlc2giKS5lbmQoKS5ub3QoIjp1aS1idXR0b24iKS5idXR0b24oKS5lbmQoKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzKS5idXR0b24oIndpZGdldCIpWzBdfSkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwgdWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IikuZmlsdGVyKCI6Zmlyc3QiKS5hZGRDbGFzcyh0PyJ1aS1jb3JuZXItcmlnaHQiOiJ1aS1jb3JuZXItbGVmdCIpLmVuZCgpLmZpbHRlcigiOmxhc3QiKS5hZGRDbGFzcyh0PyJ1aS1jb3JuZXItbGVmdCI6InVpLWNvcm5lci1yaWdodCIpLmVuZCgpLmVuZCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktYnV0dG9uc2V0IiksdGhpcy5idXR0b25zLm1hcChmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF19KS5yZW1vdmVDbGFzcygidWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IikuZW5kKCkuYnV0dG9uKCJkZXN0cm95Iil9fSl9KShqUXVlcnkpOyhmdW5jdGlvbigkLHVuZGVmaW5lZCl7ZnVuY3Rpb24gRGF0ZXBpY2tlcigpe3RoaXMuZGVidWc9ITEsdGhpcy5fY3VySW5zdD1udWxsLHRoaXMuX2tleUV2ZW50PSExLHRoaXMuX2Rpc2FibGVkSW5wdXRzPVtdLHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nPSExLHRoaXMuX2luRGlhbG9nPSExLHRoaXMuX21haW5EaXZJZD0idWktZGF0ZXBpY2tlci1kaXYiLHRoaXMuX2lubGluZUNsYXNzPSJ1aS1kYXRlcGlja2VyLWlubGluZSIsdGhpcy5fYXBwZW5kQ2xhc3M9InVpLWRhdGVwaWNrZXItYXBwZW5kIix0aGlzLl90cmlnZ2VyQ2xhc3M9InVpLWRhdGVwaWNrZXItdHJpZ2dlciIsdGhpcy5fZGlhbG9nQ2xhc3M9InVpLWRhdGVwaWNrZXItZGlhbG9nIix0aGlzLl9kaXNhYmxlQ2xhc3M9InVpLWRhdGVwaWNrZXItZGlzYWJsZWQiLHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzPSJ1aS1kYXRlcGlja2VyLXVuc2VsZWN0YWJsZSIsdGhpcy5fY3VycmVudENsYXNzPSJ1aS1kYXRlcGlja2VyLWN1cnJlbnQtZGF5Iix0aGlzLl9kYXlPdmVyQ2xhc3M9InVpLWRhdGVwaWNrZXItZGF5cy1jZWxsLW92ZXIiLHRoaXMucmVnaW9uYWw9W10sdGhpcy5yZWdpb25hbFsiIl09e2Nsb3NlVGV4dDoiRG9uZSIscHJldlRleHQ6IlByZXYiLG5leHRUZXh0OiJOZXh0IixjdXJyZW50VGV4dDoiVG9kYXkiLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLHdlZWtIZWFkZXI6IldrIixkYXRlRm9ybWF0OiJtbS9kZC95eSIsZmlyc3REYXk6MCxpc1JUTDohMSxzaG93TW9udGhBZnRlclllYXI6ITEseWVhclN1ZmZpeDoiIn0sdGhpcy5fZGVmYXVsdHM9e3Nob3dPbjoiZm9jdXMiLHNob3dBbmltOiJmYWRlSW4iLHNob3dPcHRpb25zOnt9LGRlZmF1bHREYXRlOm51bGwsYXBwZW5kVGV4dDoiIixidXR0b25UZXh0OiIuLi4iLGJ1dHRvbkltYWdlOiIiLGJ1dHRvbkltYWdlT25seTohMSxoaWRlSWZOb1ByZXZOZXh0OiExLG5hdmlnYXRpb25Bc0RhdGVGb3JtYXQ6ITEsZ290b0N1cnJlbnQ6ITEsY2hhbmdlTW9udGg6ITEsY2hhbmdlWWVhcjohMSx5ZWFyUmFuZ2U6ImMtMTA6YysxMCIsc2hvd090aGVyTW9udGhzOiExLHNlbGVjdE90aGVyTW9udGhzOiExLHNob3dXZWVrOiExLGNhbGN1bGF0ZVdlZWs6dGhpcy5pc284NjAxV2VlayxzaG9ydFllYXJDdXRvZmY6IisxMCIsbWluRGF0ZTpudWxsLG1heERhdGU6bnVsbCxkdXJhdGlvbjoiZmFzdCIsYmVmb3JlU2hvd0RheTpudWxsLGJlZm9yZVNob3c6bnVsbCxvblNlbGVjdDpudWxsLG9uQ2hhbmdlTW9udGhZZWFyOm51bGwsb25DbG9zZTpudWxsLG51bWJlck9mTW9udGhzOjEsc2hvd0N1cnJlbnRBdFBvczowLHN0ZXBNb250aHM6MSxzdGVwQmlnTW9udGhzOjEyLGFsdEZpZWxkOiIiLGFsdEZvcm1hdDoiIixjb25zdHJhaW5JbnB1dDohMCxzaG93QnV0dG9uUGFuZWw6ITEsYXV0b1NpemU6ITEsZGlzYWJsZWQ6ITF9LCQuZXh0ZW5kKHRoaXMuX2RlZmF1bHRzLHRoaXMucmVnaW9uYWxbIiJdKSx0aGlzLmRwRGl2PWJpbmRIb3ZlcigkKCc8ZGl2IGlkPSInK3RoaXMuX21haW5EaXZJZCsnIiBjbGFzcz0idWktZGF0ZXBpY2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwiPjwvZGl2PicpKX1mdW5jdGlvbiBiaW5kSG92ZXIoZSl7dmFyIHQ9ImJ1dHRvbiwgLnVpLWRhdGVwaWNrZXItcHJldiwgLnVpLWRhdGVwaWNrZXItbmV4dCwgLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdGQgYSI7cmV0dXJuIGUuZGVsZWdhdGUodCwibW91c2VvdXQiLGZ1bmN0aW9uKCl7JCh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSx0aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJ1aS1kYXRlcGlja2VyLXByZXYiKSE9LTEmJiQodGhpcykucmVtb3ZlQ2xhc3MoInVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciIpLHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItbmV4dCIpIT0tMSYmJCh0aGlzKS5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIil9KS5kZWxlZ2F0ZSh0LCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7JC5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihpbnN0QWN0aXZlLmlubGluZT9lLnBhcmVudCgpWzBdOmluc3RBY3RpdmUuaW5wdXRbMF0pfHwoJCh0aGlzKS5wYXJlbnRzKCIudWktZGF0ZXBpY2tlci1jYWxlbmRhciIpLmZpbmQoImEiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSwkKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpIT0tMSYmJCh0aGlzKS5hZGRDbGFzcygidWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyIiksdGhpcy5jbGFzc05hbWUuaW5kZXhPZigidWktZGF0ZXBpY2tlci1uZXh0IikhPS0xJiYkKHRoaXMpLmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLW5leHQtaG92ZXIiKSl9KX1mdW5jdGlvbiBleHRlbmRSZW1vdmUoZSx0KXskLmV4dGVuZChlLHQpO2Zvcih2YXIgbiBpbiB0KWlmKHRbbl09PW51bGx8fHRbbl09PXVuZGVmaW5lZCllW25dPXRbbl07cmV0dXJuIGV9JC5leHRlbmQoJC51aSx7ZGF0ZXBpY2tlcjp7dmVyc2lvbjoiMS45LjAifX0pO3ZhciBQUk9QX05BTUU9ImRhdGVwaWNrZXIiLGRwdXVpZD0obmV3IERhdGUpLmdldFRpbWUoKSxpbnN0QWN0aXZlOyQuZXh0ZW5kKERhdGVwaWNrZXIucHJvdG90eXBlLHttYXJrZXJDbGFzc05hbWU6Imhhc0RhdGVwaWNrZXIiLG1heFJvd3M6NCxsb2c6ZnVuY3Rpb24oKXt0aGlzLmRlYnVnJiZjb25zb2xlLmxvZy5hcHBseSgiIixhcmd1bWVudHMpfSxfd2lkZ2V0RGF0ZXBpY2tlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRwRGl2fSxzZXREZWZhdWx0czpmdW5jdGlvbihlKXtyZXR1cm4gZXh0ZW5kUmVtb3ZlKHRoaXMuX2RlZmF1bHRzLGV8fHt9KSx0aGlzfSxfYXR0YWNoRGF0ZXBpY2tlcjpmdW5jdGlvbih0YXJnZXQsc2V0dGluZ3Mpe3ZhciBpbmxpbmVTZXR0aW5ncz1udWxsO2Zvcih2YXIgYXR0ck5hbWUgaW4gdGhpcy5fZGVmYXVsdHMpe3ZhciBhdHRyVmFsdWU9dGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0ZToiK2F0dHJOYW1lKTtpZihhdHRyVmFsdWUpe2lubGluZVNldHRpbmdzPWlubGluZVNldHRpbmdzfHx7fTt0cnl7aW5saW5lU2V0dGluZ3NbYXR0ck5hbWVdPWV2YWwoYXR0clZhbHVlKX1jYXRjaChlcnIpe2lubGluZVNldHRpbmdzW2F0dHJOYW1lXT1hdHRyVmFsdWV9fX12YXIgbm9kZU5hbWU9dGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksaW5saW5lPW5vZGVOYW1lPT0iZGl2Inx8bm9kZU5hbWU9PSJzcGFuIjt0YXJnZXQuaWR8fCh0aGlzLnV1aWQrPTEsdGFyZ2V0LmlkPSJkcCIrdGhpcy51dWlkKTt2YXIgaW5zdD10aGlzLl9uZXdJbnN0KCQodGFyZ2V0KSxpbmxpbmUpO2luc3Quc2V0dGluZ3M9JC5leHRlbmQoe30sc2V0dGluZ3N8fHt9LGlubGluZVNldHRpbmdzfHx7fSksbm9kZU5hbWU9PSJpbnB1dCI/dGhpcy5fY29ubmVjdERhdGVwaWNrZXIodGFyZ2V0LGluc3QpOmlubGluZSYmdGhpcy5faW5saW5lRGF0ZXBpY2tlcih0YXJnZXQsaW5zdCl9LF9uZXdJbnN0OmZ1bmN0aW9uKGUsdCl7dmFyIG49ZVswXS5pZC5yZXBsYWNlKC8oW15BLVphLXowLTlfLV0pL2csIlxcXFwkMSIpO3JldHVybntpZDpuLGlucHV0OmUsc2VsZWN0ZWREYXk6MCxzZWxlY3RlZE1vbnRoOjAsc2VsZWN0ZWRZZWFyOjAsZHJhd01vbnRoOjAsZHJhd1llYXI6MCxpbmxpbmU6dCxkcERpdjp0P2JpbmRIb3ZlcigkKCc8ZGl2IGNsYXNzPSInK3RoaXMuX2lubGluZUNsYXNzKycgdWktZGF0ZXBpY2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwiPjwvZGl2PicpKTp0aGlzLmRwRGl2fX0sX2Nvbm5lY3REYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7dmFyIG49JChlKTt0LmFwcGVuZD0kKFtdKSx0LnRyaWdnZXI9JChbXSk7aWYobi5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpcmV0dXJuO3RoaXMuX2F0dGFjaG1lbnRzKG4sdCksbi5hZGRDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkua2V5ZG93bih0aGlzLl9kb0tleURvd24pLmtleXByZXNzKHRoaXMuX2RvS2V5UHJlc3MpLmtleXVwKHRoaXMuX2RvS2V5VXApLmJpbmQoInNldERhdGEuZGF0ZXBpY2tlciIsZnVuY3Rpb24oZSxuLHIpe3Quc2V0dGluZ3Nbbl09cn0pLmJpbmQoImdldERhdGEuZGF0ZXBpY2tlciIsZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5fZ2V0KHQsbil9KSx0aGlzLl9hdXRvU2l6ZSh0KSwkLmRhdGEoZSxQUk9QX05BTUUsdCksdC5zZXR0aW5ncy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoZSl9LF9hdHRhY2htZW50czpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2dldCh0LCJhcHBlbmRUZXh0Iikscj10aGlzLl9nZXQodCwiaXNSVEwiKTt0LmFwcGVuZCYmdC5hcHBlbmQucmVtb3ZlKCksbiYmKHQuYXBwZW5kPSQoJzxzcGFuIGNsYXNzPSInK3RoaXMuX2FwcGVuZENsYXNzKyciPicrbisiPC9zcGFuPiIpLGVbcj8iYmVmb3JlIjoiYWZ0ZXIiXSh0LmFwcGVuZCkpLGUudW5iaW5kKCJmb2N1cyIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLHQudHJpZ2dlciYmdC50cmlnZ2VyLnJlbW92ZSgpO3ZhciBpPXRoaXMuX2dldCh0LCJzaG93T24iKTsoaT09ImZvY3VzInx8aT09ImJvdGgiKSYmZS5mb2N1cyh0aGlzLl9zaG93RGF0ZXBpY2tlcik7aWYoaT09ImJ1dHRvbiJ8fGk9PSJib3RoIil7dmFyIHM9dGhpcy5fZ2V0KHQsImJ1dHRvblRleHQiKSxvPXRoaXMuX2dldCh0LCJidXR0b25JbWFnZSIpO3QudHJpZ2dlcj0kKHRoaXMuX2dldCh0LCJidXR0b25JbWFnZU9ubHkiKT8kKCI8aW1nLz4iKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLmF0dHIoe3NyYzpvLGFsdDpzLHRpdGxlOnN9KTokKCc8YnV0dG9uIHR5cGU9ImJ1dHRvbiI+PC9idXR0b24+JykuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS5odG1sKG89PSIiP3M6JCgiPGltZy8+IikuYXR0cih7c3JjOm8sYWx0OnMsdGl0bGU6c30pKSksZVtyPyJiZWZvcmUiOiJhZnRlciJdKHQudHJpZ2dlciksdC50cmlnZ2VyLmNsaWNrKGZ1bmN0aW9uKCl7cmV0dXJuICQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJiQuZGF0ZXBpY2tlci5fbGFzdElucHV0PT1lWzBdPyQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTokLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiYkLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9ZVswXT8oJC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLCQuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIoZVswXSkpOiQuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIoZVswXSksITF9KX19LF9hdXRvU2l6ZTpmdW5jdGlvbihlKXtpZih0aGlzLl9nZXQoZSwiYXV0b1NpemUiKSYmIWUuaW5saW5lKXt2YXIgdD1uZXcgRGF0ZSgyMDA5LDExLDIwKSxuPXRoaXMuX2dldChlLCJkYXRlRm9ybWF0Iik7aWYobi5tYXRjaCgvW0RNXS8pKXt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdD0wLG49MDtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdLmxlbmd0aD50JiYodD1lW3JdLmxlbmd0aCxuPXIpO3JldHVybiBufTt0LnNldE1vbnRoKHIodGhpcy5fZ2V0KGUsbi5tYXRjaCgvTU0vKT8ibW9udGhOYW1lcyI6Im1vbnRoTmFtZXNTaG9ydCIpKSksdC5zZXREYXRlKHIodGhpcy5fZ2V0KGUsbi5tYXRjaCgvREQvKT8iZGF5TmFtZXMiOiJkYXlOYW1lc1Nob3J0IikpKzIwLXQuZ2V0RGF5KCkpfWUuaW5wdXQuYXR0cigic2l6ZSIsdGhpcy5fZm9ybWF0RGF0ZShlLHQpLmxlbmd0aCl9fSxfaW5saW5lRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQpe3ZhciBuPSQoZSk7aWYobi5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpcmV0dXJuO24uYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmFwcGVuZCh0LmRwRGl2KS5iaW5kKCJzZXREYXRhLmRhdGVwaWNrZXIiLGZ1bmN0aW9uKGUsbixyKXt0LnNldHRpbmdzW25dPXJ9KS5iaW5kKCJnZXREYXRhLmRhdGVwaWNrZXIiLGZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuX2dldCh0LG4pfSksJC5kYXRhKGUsUFJPUF9OQU1FLHQpLHRoaXMuX3NldERhdGUodCx0aGlzLl9nZXREZWZhdWx0RGF0ZSh0KSwhMCksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcih0KSx0aGlzLl91cGRhdGVBbHRlcm5hdGUodCksdC5zZXR0aW5ncy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoZSksdC5kcERpdi5jc3MoImRpc3BsYXkiLCJibG9jayIpfSxfZGlhbG9nRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBzPXRoaXMuX2RpYWxvZ0luc3Q7aWYoIXMpe3RoaXMudXVpZCs9MTt2YXIgbz0iZHAiK3RoaXMudXVpZDt0aGlzLl9kaWFsb2dJbnB1dD0kKCc8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IicrbysnIiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IC0xMDBweDsgd2lkdGg6IDBweDsiLz4nKSx0aGlzLl9kaWFsb2dJbnB1dC5rZXlkb3duKHRoaXMuX2RvS2V5RG93biksJCgiYm9keSIpLmFwcGVuZCh0aGlzLl9kaWFsb2dJbnB1dCkscz10aGlzLl9kaWFsb2dJbnN0PXRoaXMuX25ld0luc3QodGhpcy5fZGlhbG9nSW5wdXQsITEpLHMuc2V0dGluZ3M9e30sJC5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLFBST1BfTkFNRSxzKX1leHRlbmRSZW1vdmUocy5zZXR0aW5ncyxyfHx7fSksdD10JiZ0LmNvbnN0cnVjdG9yPT1EYXRlP3RoaXMuX2Zvcm1hdERhdGUocyx0KTp0LHRoaXMuX2RpYWxvZ0lucHV0LnZhbCh0KSx0aGlzLl9wb3M9aT9pLmxlbmd0aD9pOltpLnBhZ2VYLGkucGFnZVldOm51bGw7aWYoIXRoaXMuX3Bvcyl7dmFyIHU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxmPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsbD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDt0aGlzLl9wb3M9W3UvMi0xMDArZixhLzItMTUwK2xdfXJldHVybiB0aGlzLl9kaWFsb2dJbnB1dC5jc3MoImxlZnQiLHRoaXMuX3Bvc1swXSsyMCsicHgiKS5jc3MoInRvcCIsdGhpcy5fcG9zWzFdKyJweCIpLHMuc2V0dGluZ3Mub25TZWxlY3Q9bix0aGlzLl9pbkRpYWxvZz0hMCx0aGlzLmRwRGl2LmFkZENsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKSx0aGlzLl9zaG93RGF0ZXBpY2tlcih0aGlzLl9kaWFsb2dJbnB1dFswXSksJC5ibG9ja1VJJiYkLmJsb2NrVUkodGhpcy5kcERpdiksJC5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLFBST1BfTkFNRSxzKSx0aGlzfSxfZGVzdHJveURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9JChlKSxuPSQuZGF0YShlLFBST1BfTkFNRSk7aWYoIXQuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpKXJldHVybjt2YXIgcj1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7JC5yZW1vdmVEYXRhKGUsUFJPUF9OQU1FKSxyPT0iaW5wdXQiPyhuLmFwcGVuZC5yZW1vdmUoKSxuLnRyaWdnZXIucmVtb3ZlKCksdC5yZW1vdmVDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkudW5iaW5kKCJmb2N1cyIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLnVuYmluZCgia2V5ZG93biIsdGhpcy5fZG9LZXlEb3duKS51bmJpbmQoImtleXByZXNzIix0aGlzLl9kb0tleVByZXNzKS51bmJpbmQoImtleXVwIix0aGlzLl9kb0tleVVwKSk6KHI9PSJkaXYifHxyPT0ic3BhbiIpJiZ0LnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5lbXB0eSgpfSxfZW5hYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgdD0kKGUpLG49JC5kYXRhKGUsUFJPUF9OQU1FKTtpZighdC5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpcmV0dXJuO3ZhciByPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihyPT0iaW5wdXQiKWUuZGlzYWJsZWQ9ITEsbi50cmlnZ2VyLmZpbHRlcigiYnV0dG9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9ITF9KS5lbmQoKS5maWx0ZXIoImltZyIpLmNzcyh7b3BhY2l0eToiMS4wIixjdXJzb3I6IiJ9KTtlbHNlIGlmKHI9PSJkaXYifHxyPT0ic3BhbiIpe3ZhciBpPXQuY2hpbGRyZW4oIi4iK3RoaXMuX2lubGluZUNsYXNzKTtpLmNoaWxkcmVuKCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiksaS5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciIpLnByb3AoImRpc2FibGVkIiwhMSl9dGhpcy5fZGlzYWJsZWRJbnB1dHM9JC5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24odCl7cmV0dXJuIHQ9PWU/bnVsbDp0fSl9LF9kaXNhYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgdD0kKGUpLG49JC5kYXRhKGUsUFJPUF9OQU1FKTtpZighdC5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpcmV0dXJuO3ZhciByPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihyPT0iaW5wdXQiKWUuZGlzYWJsZWQ9ITAsbi50cmlnZ2VyLmZpbHRlcigiYnV0dG9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9ITB9KS5lbmQoKS5maWx0ZXIoImltZyIpLmNzcyh7b3BhY2l0eToiMC41IixjdXJzb3I6ImRlZmF1bHQifSk7ZWxzZSBpZihyPT0iZGl2Inx8cj09InNwYW4iKXt2YXIgaT10LmNoaWxkcmVuKCIuIit0aGlzLl9pbmxpbmVDbGFzcyk7aS5jaGlsZHJlbigpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLGkuZmluZCgic2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXIiKS5wcm9wKCJkaXNhYmxlZCIsITApfXRoaXMuX2Rpc2FibGVkSW5wdXRzPSQubWFwKHRoaXMuX2Rpc2FibGVkSW5wdXRzLGZ1bmN0aW9uKHQpe3JldHVybiB0PT1lP251bGw6dH0pLHRoaXMuX2Rpc2FibGVkSW5wdXRzW3RoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aF09ZX0sX2lzRGlzYWJsZWREYXRlcGlja2VyOmZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiExO2Zvcih2YXIgdD0wO3Q8dGhpcy5fZGlzYWJsZWRJbnB1dHMubGVuZ3RoO3QrKylpZih0aGlzLl9kaXNhYmxlZElucHV0c1t0XT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sX2dldEluc3Q6ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiAkLmRhdGEoZSxQUk9QX05BTUUpfWNhdGNoKHQpe3Rocm93Ik1pc3NpbmcgaW5zdGFuY2UgZGF0YSBmb3IgdGhpcyBkYXRlcGlja2VyIn19LF9vcHRpb25EYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLl9nZXRJbnN0KGUpO2lmKGFyZ3VtZW50cy5sZW5ndGg9PTImJnR5cGVvZiB0PT0ic3RyaW5nIilyZXR1cm4gdD09ImRlZmF1bHRzIj8kLmV4dGVuZCh7fSwkLmRhdGVwaWNrZXIuX2RlZmF1bHRzKTpyP3Q9PSJhbGwiPyQuZXh0ZW5kKHt9LHIuc2V0dGluZ3MpOnRoaXMuX2dldChyLHQpOm51bGw7dmFyIGk9dHx8e307dHlwZW9mIHQ9PSJzdHJpbmciJiYoaT17fSxpW3RdPW4pO2lmKHIpe3RoaXMuX2N1ckluc3Q9PXImJnRoaXMuX2hpZGVEYXRlcGlja2VyKCk7dmFyIHM9dGhpcy5fZ2V0RGF0ZURhdGVwaWNrZXIoZSwhMCksbz10aGlzLl9nZXRNaW5NYXhEYXRlKHIsIm1pbiIpLHU9dGhpcy5fZ2V0TWluTWF4RGF0ZShyLCJtYXgiKTtleHRlbmRSZW1vdmUoci5zZXR0aW5ncyxpKSxvIT09bnVsbCYmaS5kYXRlRm9ybWF0IT09dW5kZWZpbmVkJiZpLm1pbkRhdGU9PT11bmRlZmluZWQmJihyLnNldHRpbmdzLm1pbkRhdGU9dGhpcy5fZm9ybWF0RGF0ZShyLG8pKSx1IT09bnVsbCYmaS5kYXRlRm9ybWF0IT09dW5kZWZpbmVkJiZpLm1heERhdGU9PT11bmRlZmluZWQmJihyLnNldHRpbmdzLm1heERhdGU9dGhpcy5fZm9ybWF0RGF0ZShyLHUpKSx0aGlzLl9hdHRhY2htZW50cygkKGUpLHIpLHRoaXMuX2F1dG9TaXplKHIpLHRoaXMuX3NldERhdGUocixzKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUociksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihyKX19LF9jaGFuZ2VEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCxuKXt0aGlzLl9vcHRpb25EYXRlcGlja2VyKGUsdCxuKX0sX3JlZnJlc2hEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldEluc3QoZSk7dCYmdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcih0KX0sX3NldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fZ2V0SW5zdChlKTtuJiYodGhpcy5fc2V0RGF0ZShuLHQpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIobiksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKG4pKX0sX2dldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fZ2V0SW5zdChlKTtyZXR1cm4gbiYmIW4uaW5saW5lJiZ0aGlzLl9zZXREYXRlRnJvbUZpZWxkKG4sdCksbj90aGlzLl9nZXREYXRlKG4pOm51bGx9LF9kb0tleURvd246ZnVuY3Rpb24oZSl7dmFyIHQ9JC5kYXRlcGlja2VyLl9nZXRJbnN0KGUudGFyZ2V0KSxuPSEwLHI9dC5kcERpdi5pcygiLnVpLWRhdGVwaWNrZXItcnRsIik7dC5fa2V5RXZlbnQ9ITA7aWYoJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZylzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDk6JC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLG49ITE7YnJlYWs7Y2FzZSAxMzp2YXIgaT0kKCJ0ZC4iKyQuZGF0ZXBpY2tlci5fZGF5T3ZlckNsYXNzKyI6bm90KC4iKyQuZGF0ZXBpY2tlci5fY3VycmVudENsYXNzKyIpIix0LmRwRGl2KTtpWzBdJiYkLmRhdGVwaWNrZXIuX3NlbGVjdERheShlLnRhcmdldCx0LnNlbGVjdGVkTW9udGgsdC5zZWxlY3RlZFllYXIsaVswXSk7dmFyIHM9JC5kYXRlcGlja2VyLl9nZXQodCwib25TZWxlY3QiKTtpZihzKXt2YXIgbz0kLmRhdGVwaWNrZXIuX2Zvcm1hdERhdGUodCk7cy5hcHBseSh0LmlucHV0P3QuaW5wdXRbMF06bnVsbCxbbyx0XSl9ZWxzZSAkLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7cmV0dXJuITE7Y2FzZSAyNzokLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7YnJlYWs7Y2FzZSAzMzokLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Py0kLmRhdGVwaWNrZXIuX2dldCh0LCJzdGVwQmlnTW9udGhzIik6LSQuZGF0ZXBpY2tlci5fZ2V0KHQsInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzQ6JC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LGUuY3RybEtleT8rJC5kYXRlcGlja2VyLl9nZXQodCwic3RlcEJpZ01vbnRocyIpOiskLmRhdGVwaWNrZXIuX2dldCh0LCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDM1OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJiQuZGF0ZXBpY2tlci5fY2xlYXJEYXRlKGUudGFyZ2V0KSxuPWUuY3RybEtleXx8ZS5tZXRhS2V5O2JyZWFrO2Nhc2UgMzY6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmJC5kYXRlcGlja2VyLl9nb3RvVG9kYXkoZS50YXJnZXQpLG49ZS5jdHJsS2V5fHxlLm1ldGFLZXk7YnJlYWs7Y2FzZSAzNzooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiYkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQscj8xOi0xLCJEIiksbj1lLmN0cmxLZXl8fGUubWV0YUtleSxlLm9yaWdpbmFsRXZlbnQuYWx0S2V5JiYkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Py0kLmRhdGVwaWNrZXIuX2dldCh0LCJzdGVwQmlnTW9udGhzIik6LSQuZGF0ZXBpY2tlci5fZ2V0KHQsInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzg6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmJC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LC03LCJEIiksbj1lLmN0cmxLZXl8fGUubWV0YUtleTticmVhaztjYXNlIDM5OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxyPy0xOjEsIkQiKSxuPWUuY3RybEtleXx8ZS5tZXRhS2V5LGUub3JpZ2luYWxFdmVudC5hbHRLZXkmJiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxlLmN0cmxLZXk/KyQuZGF0ZXBpY2tlci5fZ2V0KHQsInN0ZXBCaWdNb250aHMiKTorJC5kYXRlcGlja2VyLl9nZXQodCwic3RlcE1vbnRocyIpLCJNIik7YnJlYWs7Y2FzZSA0MDooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiYkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsNywiRCIpLG49ZS5jdHJsS2V5fHxlLm1ldGFLZXk7YnJlYWs7ZGVmYXVsdDpuPSExfWVsc2UgZS5rZXlDb2RlPT0zNiYmZS5jdHJsS2V5PyQuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIodGhpcyk6bj0hMTtuJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCkpfSxfZG9LZXlQcmVzczpmdW5jdGlvbihlKXt2YXIgdD0kLmRhdGVwaWNrZXIuX2dldEluc3QoZS50YXJnZXQpO2lmKCQuZGF0ZXBpY2tlci5fZ2V0KHQsImNvbnN0cmFpbklucHV0Iikpe3ZhciBuPSQuZGF0ZXBpY2tlci5fcG9zc2libGVDaGFycygkLmRhdGVwaWNrZXIuX2dldCh0LCJkYXRlRm9ybWF0IikpLHI9U3RyaW5nLmZyb21DaGFyQ29kZShlLmNoYXJDb2RlPT11bmRlZmluZWQ/ZS5rZXlDb2RlOmUuY2hhckNvZGUpO3JldHVybiBlLmN0cmxLZXl8fGUubWV0YUtleXx8cjwiICJ8fCFufHxuLmluZGV4T2Yocik+LTF9fSxfZG9LZXlVcDpmdW5jdGlvbihlKXt2YXIgdD0kLmRhdGVwaWNrZXIuX2dldEluc3QoZS50YXJnZXQpO2lmKHQuaW5wdXQudmFsKCkhPXQubGFzdFZhbCl0cnl7dmFyIG49JC5kYXRlcGlja2VyLnBhcnNlRGF0ZSgkLmRhdGVwaWNrZXIuX2dldCh0LCJkYXRlRm9ybWF0IiksdC5pbnB1dD90LmlucHV0LnZhbCgpOm51bGwsJC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcodCkpO24mJigkLmRhdGVwaWNrZXIuX3NldERhdGVGcm9tRmllbGQodCksJC5kYXRlcGlja2VyLl91cGRhdGVBbHRlcm5hdGUodCksJC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKHQpKX1jYXRjaChyKXskLmRhdGVwaWNrZXIubG9nKHIpfXJldHVybiEwfSxfc2hvd0RhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7ZT1lLnRhcmdldHx8ZSxlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPSJpbnB1dCImJihlPSQoImlucHV0IixlLnBhcmVudE5vZGUpWzBdKTtpZigkLmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKGUpfHwkLmRhdGVwaWNrZXIuX2xhc3RJbnB1dD09ZSlyZXR1cm47dmFyIHQ9JC5kYXRlcGlja2VyLl9nZXRJbnN0KGUpOyQuZGF0ZXBpY2tlci5fY3VySW5zdCYmJC5kYXRlcGlja2VyLl9jdXJJbnN0IT10JiYoJC5kYXRlcGlja2VyLl9jdXJJbnN0LmRwRGl2LnN0b3AoITAsITApLHQmJiQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJiQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoJC5kYXRlcGlja2VyLl9jdXJJbnN0LmlucHV0WzBdKSk7dmFyIG49JC5kYXRlcGlja2VyLl9nZXQodCwiYmVmb3JlU2hvdyIpLHI9bj9uLmFwcGx5KGUsW2UsdF0pOnt9O2lmKHI9PT0hMSlyZXR1cm47ZXh0ZW5kUmVtb3ZlKHQuc2V0dGluZ3MsciksdC5sYXN0VmFsPW51bGwsJC5kYXRlcGlja2VyLl9sYXN0SW5wdXQ9ZSwkLmRhdGVwaWNrZXIuX3NldERhdGVGcm9tRmllbGQodCksJC5kYXRlcGlja2VyLl9pbkRpYWxvZyYmKGUudmFsdWU9IiIpLCQuZGF0ZXBpY2tlci5fcG9zfHwoJC5kYXRlcGlja2VyLl9wb3M9JC5kYXRlcGlja2VyLl9maW5kUG9zKGUpLCQuZGF0ZXBpY2tlci5fcG9zWzFdKz1lLm9mZnNldEhlaWdodCk7dmFyIGk9ITE7JChlKS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpe3JldHVybiBpfD0kKHRoaXMpLmNzcygicG9zaXRpb24iKT09ImZpeGVkIiwhaX0pO3ZhciBzPXtsZWZ0OiQuZGF0ZXBpY2tlci5fcG9zWzBdLHRvcDokLmRhdGVwaWNrZXIuX3Bvc1sxXX07JC5kYXRlcGlja2VyLl9wb3M9bnVsbCx0LmRwRGl2LmVtcHR5KCksdC5kcERpdi5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsZGlzcGxheToiYmxvY2siLHRvcDoiLTEwMDBweCJ9KSwkLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIodCkscz0kLmRhdGVwaWNrZXIuX2NoZWNrT2Zmc2V0KHQscyxpKSx0LmRwRGl2LmNzcyh7cG9zaXRpb246JC5kYXRlcGlja2VyLl9pbkRpYWxvZyYmJC5ibG9ja1VJPyJzdGF0aWMiOmk/ImZpeGVkIjoiYWJzb2x1dGUiLGRpc3BsYXk6Im5vbmUiLGxlZnQ6cy5sZWZ0KyJweCIsdG9wOnMudG9wKyJweCJ9KTtpZighdC5pbmxpbmUpe3ZhciBvPSQuZGF0ZXBpY2tlci5fZ2V0KHQsInNob3dBbmltIiksdT0kLmRhdGVwaWNrZXIuX2dldCh0LCJkdXJhdGlvbiIpLGE9ZnVuY3Rpb24oKXt2YXIgZT10LmRwRGl2LmZpbmQoImlmcmFtZS51aS1kYXRlcGlja2VyLWNvdmVyIik7aWYoISFlLmxlbmd0aCl7dmFyIG49JC5kYXRlcGlja2VyLl9nZXRCb3JkZXJzKHQuZHBEaXYpO2UuY3NzKHtsZWZ0Oi1uWzBdLHRvcDotblsxXSx3aWR0aDp0LmRwRGl2Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dC5kcERpdi5vdXRlckhlaWdodCgpfSl9fTt0LmRwRGl2LnpJbmRleCgkKGUpLnpJbmRleCgpKzEpLCQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmc9ITAsJC5lZmZlY3RzJiYoJC5lZmZlY3RzLmVmZmVjdFtvXXx8JC5lZmZlY3RzW29dKT90LmRwRGl2LnNob3cobywkLmRhdGVwaWNrZXIuX2dldCh0LCJzaG93T3B0aW9ucyIpLHUsYSk6dC5kcERpdltvfHwic2hvdyJdKG8/dTpudWxsLGEpLCghb3x8IXUpJiZhKCksdC5pbnB1dC5pcygiOnZpc2libGUiKSYmIXQuaW5wdXQuaXMoIjpkaXNhYmxlZCIpJiZ0LmlucHV0LmZvY3VzKCksJC5kYXRlcGlja2VyLl9jdXJJbnN0PXR9fSxfdXBkYXRlRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt0aGlzLm1heFJvd3M9NDt2YXIgdD0kLmRhdGVwaWNrZXIuX2dldEJvcmRlcnMoZS5kcERpdik7aW5zdEFjdGl2ZT1lLGUuZHBEaXYuZW1wdHkoKS5hcHBlbmQodGhpcy5fZ2VuZXJhdGVIVE1MKGUpKSx0aGlzLl9hdHRhY2hIYW5kbGVycyhlKTt2YXIgbj1lLmRwRGl2LmZpbmQoImlmcmFtZS51aS1kYXRlcGlja2VyLWNvdmVyIik7IW4ubGVuZ3RofHxuLmNzcyh7bGVmdDotdFswXSx0b3A6LXRbMV0sd2lkdGg6ZS5kcERpdi5vdXRlcldpZHRoKCksaGVpZ2h0OmUuZHBEaXYub3V0ZXJIZWlnaHQoKX0pLGUuZHBEaXYuZmluZCgiLiIrdGhpcy5fZGF5T3ZlckNsYXNzKyIgYSIpLm1vdXNlb3ZlcigpO3ZhciByPXRoaXMuX2dldE51bWJlck9mTW9udGhzKGUpLGk9clsxXSxzPTE3O2UuZHBEaXYucmVtb3ZlQ2xhc3MoInVpLWRhdGVwaWNrZXItbXVsdGktMiB1aS1kYXRlcGlja2VyLW11bHRpLTMgdWktZGF0ZXBpY2tlci1tdWx0aS00Iikud2lkdGgoIiIpLGk+MSYmZS5kcERpdi5hZGRDbGFzcygidWktZGF0ZXBpY2tlci1tdWx0aS0iK2kpLmNzcygid2lkdGgiLHMqaSsiZW0iKSxlLmRwRGl2WyhyWzBdIT0xfHxyWzFdIT0xPyJhZGQiOiJyZW1vdmUiKSsiQ2xhc3MiXSgidWktZGF0ZXBpY2tlci1tdWx0aSIpLGUuZHBEaXZbKHRoaXMuX2dldChlLCJpc1JUTCIpPyJhZGQiOiJyZW1vdmUiKSsiQ2xhc3MiXSgidWktZGF0ZXBpY2tlci1ydGwiKSxlPT0kLmRhdGVwaWNrZXIuX2N1ckluc3QmJiQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJmUuaW5wdXQmJmUuaW5wdXQuaXMoIjp2aXNpYmxlIikmJiFlLmlucHV0LmlzKCI6ZGlzYWJsZWQiKSYmZS5pbnB1dFswXSE9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCYmZS5pbnB1dC5mb2N1cygpO2lmKGUueWVhcnNodG1sKXt2YXIgbz1lLnllYXJzaHRtbDtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bz09PWUueWVhcnNodG1sJiZlLnllYXJzaHRtbCYmZS5kcERpdi5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyOmZpcnN0IikucmVwbGFjZVdpdGgoZS55ZWFyc2h0bWwpLG89ZS55ZWFyc2h0bWw9bnVsbH0sMCl9fSxfZ2V0Qm9yZGVyczpmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXtyZXR1cm57dGhpbjoxLG1lZGl1bToyLHRoaWNrOjN9W2VdfHxlfTtyZXR1cm5bcGFyc2VGbG9hdCh0KGUuY3NzKCJib3JkZXItbGVmdC13aWR0aCIpKSkscGFyc2VGbG9hdCh0KGUuY3NzKCJib3JkZXItdG9wLXdpZHRoIikpKV19LF9jaGVja09mZnNldDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZS5kcERpdi5vdXRlcldpZHRoKCksaT1lLmRwRGl2Lm91dGVySGVpZ2h0KCkscz1lLmlucHV0P2UuaW5wdXQub3V0ZXJXaWR0aCgpOjAsbz1lLmlucHV0P2UuaW5wdXQub3V0ZXJIZWlnaHQoKTowLHU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKyhuPzA6JChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKSxhPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQrKG4/MDokKGRvY3VtZW50KS5zY3JvbGxUb3AoKSk7cmV0dXJuIHQubGVmdC09dGhpcy5fZ2V0KGUsImlzUlRMIik/ci1zOjAsdC5sZWZ0LT1uJiZ0LmxlZnQ9PWUuaW5wdXQub2Zmc2V0KCkubGVmdD8kKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCk6MCx0LnRvcC09biYmdC50b3A9PWUuaW5wdXQub2Zmc2V0KCkudG9wK28/JChkb2N1bWVudCkuc2Nyb2xsVG9wKCk6MCx0LmxlZnQtPU1hdGgubWluKHQubGVmdCx0LmxlZnQrcj51JiZ1PnI/TWF0aC5hYnModC5sZWZ0K3ItdSk6MCksdC50b3AtPU1hdGgubWluKHQudG9wLHQudG9wK2k+YSYmYT5pP01hdGguYWJzKGkrbyk6MCksdH0sX2ZpbmRQb3M6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0SW5zdChlKSxuPXRoaXMuX2dldCh0LCJpc1JUTCIpO3doaWxlKGUmJihlLnR5cGU9PSJoaWRkZW4ifHxlLm5vZGVUeXBlIT0xfHwkLmV4cHIuZmlsdGVycy5oaWRkZW4oZSkpKWU9ZVtuPyJwcmV2aW91c1NpYmxpbmciOiJuZXh0U2libGluZyJdO3ZhciByPSQoZSkub2Zmc2V0KCk7cmV0dXJuW3IubGVmdCxyLnRvcF19LF9oaWRlRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9jdXJJbnN0O2lmKCF0fHxlJiZ0IT0kLmRhdGEoZSxQUk9QX05BTUUpKXJldHVybjtpZih0aGlzLl9kYXRlcGlja2VyU2hvd2luZyl7dmFyIG49dGhpcy5fZ2V0KHQsInNob3dBbmltIikscj10aGlzLl9nZXQodCwiZHVyYXRpb24iKSxpPWZ1bmN0aW9uKCl7JC5kYXRlcGlja2VyLl90aWR5RGlhbG9nKHQpfTskLmVmZmVjdHMmJigkLmVmZmVjdHMuZWZmZWN0W25dfHwkLmVmZmVjdHNbbl0pP3QuZHBEaXYuaGlkZShuLCQuZGF0ZXBpY2tlci5fZ2V0KHQsInNob3dPcHRpb25zIikscixpKTp0LmRwRGl2W249PSJzbGlkZURvd24iPyJzbGlkZVVwIjpuPT0iZmFkZUluIj8iZmFkZU91dCI6ImhpZGUiXShuP3I6bnVsbCxpKSxufHxpKCksdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITE7dmFyIHM9dGhpcy5fZ2V0KHQsIm9uQ2xvc2UiKTtzJiZzLmFwcGx5KHQuaW5wdXQ/dC5pbnB1dFswXTpudWxsLFt0LmlucHV0P3QuaW5wdXQudmFsKCk6IiIsdF0pLHRoaXMuX2xhc3RJbnB1dD1udWxsLHRoaXMuX2luRGlhbG9nJiYodGhpcy5fZGlhbG9nSW5wdXQuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6IjAiLHRvcDoiLTEwMHB4In0pLCQuYmxvY2tVSSYmKCQudW5ibG9ja1VJKCksJCgiYm9keSIpLmFwcGVuZCh0aGlzLmRwRGl2KSkpLHRoaXMuX2luRGlhbG9nPSExfX0sX3RpZHlEaWFsb2c6ZnVuY3Rpb24oZSl7ZS5kcERpdi5yZW1vdmVDbGFzcyh0aGlzLl9kaWFsb2dDbGFzcykudW5iaW5kKCIudWktZGF0ZXBpY2tlci1jYWxlbmRhciIpfSxfY2hlY2tFeHRlcm5hbENsaWNrOmZ1bmN0aW9uKGUpe2lmKCEkLmRhdGVwaWNrZXIuX2N1ckluc3QpcmV0dXJuO3ZhciB0PSQoZS50YXJnZXQpLG49JC5kYXRlcGlja2VyLl9nZXRJbnN0KHRbMF0pOyh0WzBdLmlkIT0kLmRhdGVwaWNrZXIuX21haW5EaXZJZCYmdC5wYXJlbnRzKCIjIiskLmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoPT0wJiYhdC5oYXNDbGFzcygkLmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKSYmIXQuY2xvc2VzdCgiLiIrJC5kYXRlcGlja2VyLl90cmlnZ2VyQ2xhc3MpLmxlbmd0aCYmJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmKCEkLmRhdGVwaWNrZXIuX2luRGlhbG9nfHwhJC5ibG9ja1VJKXx8dC5oYXNDbGFzcygkLmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKSYmJC5kYXRlcGlja2VyLl9jdXJJbnN0IT1uKSYmJC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpfSxfYWRqdXN0RGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9JChlKSxpPXRoaXMuX2dldEluc3QoclswXSk7aWYodGhpcy5faXNEaXNhYmxlZERhdGVwaWNrZXIoclswXSkpcmV0dXJuO3RoaXMuX2FkanVzdEluc3REYXRlKGksdCsobj09Ik0iP3RoaXMuX2dldChpLCJzaG93Q3VycmVudEF0UG9zIik6MCksbiksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihpKX0sX2dvdG9Ub2RheTpmdW5jdGlvbihlKXt2YXIgdD0kKGUpLG49dGhpcy5fZ2V0SW5zdCh0WzBdKTtpZih0aGlzLl9nZXQobiwiZ290b0N1cnJlbnQiKSYmbi5jdXJyZW50RGF5KW4uc2VsZWN0ZWREYXk9bi5jdXJyZW50RGF5LG4uZHJhd01vbnRoPW4uc2VsZWN0ZWRNb250aD1uLmN1cnJlbnRNb250aCxuLmRyYXdZZWFyPW4uc2VsZWN0ZWRZZWFyPW4uY3VycmVudFllYXI7ZWxzZXt2YXIgcj1uZXcgRGF0ZTtuLnNlbGVjdGVkRGF5PXIuZ2V0RGF0ZSgpLG4uZHJhd01vbnRoPW4uc2VsZWN0ZWRNb250aD1yLmdldE1vbnRoKCksbi5kcmF3WWVhcj1uLnNlbGVjdGVkWWVhcj1yLmdldEZ1bGxZZWFyKCl9dGhpcy5fbm90aWZ5Q2hhbmdlKG4pLHRoaXMuX2FkanVzdERhdGUodCl9LF9zZWxlY3RNb250aFllYXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSQoZSksaT10aGlzLl9nZXRJbnN0KHJbMF0pO2lbInNlbGVjdGVkIisobj09Ik0iPyJNb250aCI6IlllYXIiKV09aVsiZHJhdyIrKG49PSJNIj8iTW9udGgiOiJZZWFyIildPXBhcnNlSW50KHQub3B0aW9uc1t0LnNlbGVjdGVkSW5kZXhdLnZhbHVlLDEwKSx0aGlzLl9ub3RpZnlDaGFuZ2UoaSksdGhpcy5fYWRqdXN0RGF0ZShyKX0sX3NlbGVjdERheTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT0kKGUpO2lmKCQocikuaGFzQ2xhc3ModGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MpfHx0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihpWzBdKSlyZXR1cm47dmFyIHM9dGhpcy5fZ2V0SW5zdChpWzBdKTtzLnNlbGVjdGVkRGF5PXMuY3VycmVudERheT0kKCJhIixyKS5odG1sKCkscy5zZWxlY3RlZE1vbnRoPXMuY3VycmVudE1vbnRoPXQscy5zZWxlY3RlZFllYXI9cy5jdXJyZW50WWVhcj1uLHRoaXMuX3NlbGVjdERhdGUoZSx0aGlzLl9mb3JtYXREYXRlKHMscy5jdXJyZW50RGF5LHMuY3VycmVudE1vbnRoLHMuY3VycmVudFllYXIpKX0sX2NsZWFyRGF0ZTpmdW5jdGlvbihlKXt2YXIgdD0kKGUpLG49dGhpcy5fZ2V0SW5zdCh0WzBdKTt0aGlzLl9zZWxlY3REYXRlKHQsIiIpfSxfc2VsZWN0RGF0ZTpmdW5jdGlvbihlLHQpe3ZhciBuPSQoZSkscj10aGlzLl9nZXRJbnN0KG5bMF0pO3Q9dCE9bnVsbD90OnRoaXMuX2Zvcm1hdERhdGUociksci5pbnB1dCYmci5pbnB1dC52YWwodCksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKHIpO3ZhciBpPXRoaXMuX2dldChyLCJvblNlbGVjdCIpO2k/aS5hcHBseShyLmlucHV0P3IuaW5wdXRbMF06bnVsbCxbdCxyXSk6ci5pbnB1dCYmci5pbnB1dC50cmlnZ2VyKCJjaGFuZ2UiKSxyLmlubGluZT90aGlzLl91cGRhdGVEYXRlcGlja2VyKHIpOih0aGlzLl9oaWRlRGF0ZXBpY2tlcigpLHRoaXMuX2xhc3RJbnB1dD1yLmlucHV0WzBdLHR5cGVvZiByLmlucHV0WzBdIT0ib2JqZWN0IiYmci5pbnB1dC5mb2N1cygpLHRoaXMuX2xhc3RJbnB1dD1udWxsKX0sX3VwZGF0ZUFsdGVybmF0ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXQoZSwiYWx0RmllbGQiKTtpZih0KXt2YXIgbj10aGlzLl9nZXQoZSwiYWx0Rm9ybWF0Iil8fHRoaXMuX2dldChlLCJkYXRlRm9ybWF0Iikscj10aGlzLl9nZXREYXRlKGUpLGk9dGhpcy5mb3JtYXREYXRlKG4scix0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOyQodCkuZWFjaChmdW5jdGlvbigpeyQodGhpcykudmFsKGkpfSl9fSxub1dlZWtlbmRzOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0RGF5KCk7cmV0dXJuW3Q+MCYmdDw2LCIiXX0saXNvODYwMVdlZWs6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGUoZS5nZXRUaW1lKCkpO3Quc2V0RGF0ZSh0LmdldERhdGUoKSs0LSh0LmdldERheSgpfHw3KSk7dmFyIG49dC5nZXRUaW1lKCk7cmV0dXJuIHQuc2V0TW9udGgoMCksdC5zZXREYXRlKDEpLE1hdGguZmxvb3IoTWF0aC5yb3VuZCgobi10KS84NjRlNSkvNykrMX0scGFyc2VEYXRlOmZ1bmN0aW9uKGUsdCxuKXtpZihlPT1udWxsfHx0PT1udWxsKXRocm93IkludmFsaWQgYXJndW1lbnRzIjt0PXR5cGVvZiB0PT0ib2JqZWN0Ij90LnRvU3RyaW5nKCk6dCsiIjtpZih0PT0iIilyZXR1cm4gbnVsbDt2YXIgcj0obj9uLnNob3J0WWVhckN1dG9mZjpudWxsKXx8dGhpcy5fZGVmYXVsdHMuc2hvcnRZZWFyQ3V0b2ZmO3I9dHlwZW9mIHIhPSJzdHJpbmciP3I6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCtwYXJzZUludChyLDEwKTt2YXIgaT0obj9uLmRheU5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQscz0obj9uLmRheU5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcyxvPShuP24ubW9udGhOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzU2hvcnQsdT0obj9uLm1vbnRoTmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsYT0tMSxmPS0xLGw9LTEsYz0tMSxoPSExLHA9ZnVuY3Rpb24odCl7dmFyIG49eSsxPGUubGVuZ3RoJiZlLmNoYXJBdCh5KzEpPT10O3JldHVybiBuJiZ5Kyssbn0sZD1mdW5jdGlvbihlKXt2YXIgbj1wKGUpLHI9ZT09IkAiPzE0OmU9PSIhIj8yMDplPT0ieSImJm4/NDplPT0ibyI/MzoyLGk9bmV3IFJlZ0V4cCgiXlxcZHsxLCIrcisifSIpLHM9dC5zdWJzdHJpbmcoZykubWF0Y2goaSk7aWYoIXMpdGhyb3ciTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gIitnO3JldHVybiBnKz1zWzBdLmxlbmd0aCxwYXJzZUludChzWzBdLDEwKX0sdj1mdW5jdGlvbihlLG4scil7dmFyIGk9JC5tYXAocChlKT9yOm4sZnVuY3Rpb24oZSx0KXtyZXR1cm5bW3QsZV1dfSkuc29ydChmdW5jdGlvbihlLHQpe3JldHVybi0oZVsxXS5sZW5ndGgtdFsxXS5sZW5ndGgpfSkscz0tMTskLmVhY2goaSxmdW5jdGlvbihlLG4pe3ZhciByPW5bMV07aWYodC5zdWJzdHIoZyxyLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09ci50b0xvd2VyQ2FzZSgpKXJldHVybiBzPW5bMF0sZys9ci5sZW5ndGgsITF9KTtpZihzIT0tMSlyZXR1cm4gcysxO3Rocm93IlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiAiK2d9LG09ZnVuY3Rpb24oKXtpZih0LmNoYXJBdChnKSE9ZS5jaGFyQXQoeSkpdGhyb3ciVW5leHBlY3RlZCBsaXRlcmFsIGF0IHBvc2l0aW9uICIrZztnKyt9LGc9MDtmb3IodmFyIHk9MDt5PGUubGVuZ3RoO3krKylpZihoKWUuY2hhckF0KHkpPT0iJyImJiFwKCInIik/aD0hMTptKCk7ZWxzZSBzd2l0Y2goZS5jaGFyQXQoeSkpe2Nhc2UiZCI6bD1kKCJkIik7YnJlYWs7Y2FzZSJEIjp2KCJEIixpLHMpO2JyZWFrO2Nhc2UibyI6Yz1kKCJvIik7YnJlYWs7Y2FzZSJtIjpmPWQoIm0iKTticmVhaztjYXNlIk0iOmY9digiTSIsbyx1KTticmVhaztjYXNlInkiOmE9ZCgieSIpO2JyZWFrO2Nhc2UiQCI6dmFyIGI9bmV3IERhdGUoZCgiQCIpKTthPWIuZ2V0RnVsbFllYXIoKSxmPWIuZ2V0TW9udGgoKSsxLGw9Yi5nZXREYXRlKCk7YnJlYWs7Y2FzZSIhIjp2YXIgYj1uZXcgRGF0ZSgoZCgiISIpLXRoaXMuX3RpY2tzVG8xOTcwKS8xZTQpO2E9Yi5nZXRGdWxsWWVhcigpLGY9Yi5nZXRNb250aCgpKzEsbD1iLmdldERhdGUoKTticmVhaztjYXNlIiciOnAoIiciKT9tKCk6aD0hMDticmVhaztkZWZhdWx0Om0oKX1pZihnPHQubGVuZ3RoKXt2YXIgdz10LnN1YnN0cihnKTtpZighL15ccysvLnRlc3QodykpdGhyb3ciRXh0cmEvdW5wYXJzZWQgY2hhcmFjdGVycyBmb3VuZCBpbiBkYXRlOiAiK3d9YT09LTE/YT0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCk6YTwxMDAmJihhKz0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCktKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCsoYTw9cj8wOi0xMDApKTtpZihjPi0xKXtmPTEsbD1jO2Rve3ZhciBFPXRoaXMuX2dldERheXNJbk1vbnRoKGEsZi0xKTtpZihsPD1FKWJyZWFrO2YrKyxsLT1FfXdoaWxlKCEwKX12YXIgYj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShhLGYtMSxsKSk7aWYoYi5nZXRGdWxsWWVhcigpIT1hfHxiLmdldE1vbnRoKCkrMSE9Znx8Yi5nZXREYXRlKCkhPWwpdGhyb3ciSW52YWxpZCBkYXRlIjtyZXR1cm4gYn0sQVRPTToieXktbW0tZGQiLENPT0tJRToiRCwgZGQgTSB5eSIsSVNPXzg2MDE6Inl5LW1tLWRkIixSRkNfODIyOiJELCBkIE0geSIsUkZDXzg1MDoiREQsIGRkLU0teSIsUkZDXzEwMzY6IkQsIGQgTSB5IixSRkNfMTEyMzoiRCwgZCBNIHl5IixSRkNfMjgyMjoiRCwgZCBNIHl5IixSU1M6IkQsIGQgTSB5IixUSUNLUzoiISIsVElNRVNUQU1QOiJAIixXM0M6Inl5LW1tLWRkIixfdGlja3NUbzE5NzA6KDcxODY4NStNYXRoLmZsb29yKDQ5Mi41KS1NYXRoLmZsb29yKDE5LjcpK01hdGguZmxvb3IoNC45MjUpKSoyNCo2MCo2MCoxZTcsZm9ybWF0RGF0ZTpmdW5jdGlvbihlLHQsbil7aWYoIXQpcmV0dXJuIiI7dmFyIHI9KG4/bi5kYXlOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lc1Nob3J0LGk9KG4/bi5kYXlOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXMscz0obj9uLm1vbnRoTmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lc1Nob3J0LG89KG4/bi5tb250aE5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzLHU9ZnVuY3Rpb24odCl7dmFyIG49aCsxPGUubGVuZ3RoJiZlLmNoYXJBdChoKzEpPT10O3JldHVybiBuJiZoKyssbn0sYT1mdW5jdGlvbihlLHQsbil7dmFyIHI9IiIrdDtpZih1KGUpKXdoaWxlKHIubGVuZ3RoPG4pcj0iMCIrcjtyZXR1cm4gcn0sZj1mdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdShlKT9yW3RdOm5bdF19LGw9IiIsYz0hMTtpZih0KWZvcih2YXIgaD0wO2g8ZS5sZW5ndGg7aCsrKWlmKGMpZS5jaGFyQXQoaCk9PSInIiYmIXUoIiciKT9jPSExOmwrPWUuY2hhckF0KGgpO2Vsc2Ugc3dpdGNoKGUuY2hhckF0KGgpKXtjYXNlImQiOmwrPWEoImQiLHQuZ2V0RGF0ZSgpLDIpO2JyZWFrO2Nhc2UiRCI6bCs9ZigiRCIsdC5nZXREYXkoKSxyLGkpO2JyZWFrO2Nhc2UibyI6bCs9YSgibyIsTWF0aC5yb3VuZCgoKG5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkpKS5nZXRUaW1lKCktKG5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSwwLDApKS5nZXRUaW1lKCkpLzg2NGU1KSwzKTticmVhaztjYXNlIm0iOmwrPWEoIm0iLHQuZ2V0TW9udGgoKSsxLDIpO2JyZWFrO2Nhc2UiTSI6bCs9ZigiTSIsdC5nZXRNb250aCgpLHMsbyk7YnJlYWs7Y2FzZSJ5IjpsKz11KCJ5Iik/dC5nZXRGdWxsWWVhcigpOih0LmdldFllYXIoKSUxMDA8MTA/IjAiOiIiKSt0LmdldFllYXIoKSUxMDA7YnJlYWs7Y2FzZSJAIjpsKz10LmdldFRpbWUoKTticmVhaztjYXNlIiEiOmwrPXQuZ2V0VGltZSgpKjFlNCt0aGlzLl90aWNrc1RvMTk3MDticmVhaztjYXNlIiciOnUoIiciKT9sKz0iJyI6Yz0hMDticmVhaztkZWZhdWx0OmwrPWUuY2hhckF0KGgpfXJldHVybiBsfSxfcG9zc2libGVDaGFyczpmdW5jdGlvbihlKXt2YXIgdD0iIixuPSExLHI9ZnVuY3Rpb24odCl7dmFyIG49aSsxPGUubGVuZ3RoJiZlLmNoYXJBdChpKzEpPT10O3JldHVybiBuJiZpKyssbn07Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspaWYobillLmNoYXJBdChpKT09IiciJiYhcigiJyIpP249ITE6dCs9ZS5jaGFyQXQoaSk7ZWxzZSBzd2l0Y2goZS5jaGFyQXQoaSkpe2Nhc2UiZCI6Y2FzZSJtIjpjYXNlInkiOmNhc2UiQCI6dCs9IjAxMjM0NTY3ODkiO2JyZWFrO2Nhc2UiRCI6Y2FzZSJNIjpyZXR1cm4gbnVsbDtjYXNlIiciOnIoIiciKT90Kz0iJyI6bj0hMDticmVhaztkZWZhdWx0OnQrPWUuY2hhckF0KGkpfXJldHVybiB0fSxfZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuc2V0dGluZ3NbdF0hPT11bmRlZmluZWQ/ZS5zZXR0aW5nc1t0XTp0aGlzLl9kZWZhdWx0c1t0XX0sX3NldERhdGVGcm9tRmllbGQ6ZnVuY3Rpb24oZSx0KXtpZihlLmlucHV0LnZhbCgpPT1lLmxhc3RWYWwpcmV0dXJuO3ZhciBuPXRoaXMuX2dldChlLCJkYXRlRm9ybWF0Iikscj1lLmxhc3RWYWw9ZS5pbnB1dD9lLmlucHV0LnZhbCgpOm51bGwsaSxzO2k9cz10aGlzLl9nZXREZWZhdWx0RGF0ZShlKTt2YXIgbz10aGlzLl9nZXRGb3JtYXRDb25maWcoZSk7dHJ5e2k9dGhpcy5wYXJzZURhdGUobixyLG8pfHxzfWNhdGNoKHUpe3RoaXMubG9nKHUpLHI9dD8iIjpyfWUuc2VsZWN0ZWREYXk9aS5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPWkuZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPWkuZ2V0RnVsbFllYXIoKSxlLmN1cnJlbnREYXk9cj9pLmdldERhdGUoKTowLGUuY3VycmVudE1vbnRoPXI/aS5nZXRNb250aCgpOjAsZS5jdXJyZW50WWVhcj1yP2kuZ2V0RnVsbFllYXIoKTowLHRoaXMuX2FkanVzdEluc3REYXRlKGUpfSxfZ2V0RGVmYXVsdERhdGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3Jlc3RyaWN0TWluTWF4KGUsdGhpcy5fZGV0ZXJtaW5lRGF0ZShlLHRoaXMuX2dldChlLCJkZWZhdWx0RGF0ZSIpLG5ldyBEYXRlKSl9LF9kZXRlcm1pbmVEYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdD1uZXcgRGF0ZTtyZXR1cm4gdC5zZXREYXRlKHQuZ2V0RGF0ZSgpK2UpLHR9LGk9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiAkLmRhdGVwaWNrZXIucGFyc2VEYXRlKCQuZGF0ZXBpY2tlci5fZ2V0KGUsImRhdGVGb3JtYXQiKSx0LCQuZGF0ZXBpY2tlci5fZ2V0Rm9ybWF0Q29uZmlnKGUpKX1jYXRjaChuKXt9dmFyIHI9KHQudG9Mb3dlckNhc2UoKS5tYXRjaCgvXmMvKT8kLmRhdGVwaWNrZXIuX2dldERhdGUoZSk6bnVsbCl8fG5ldyBEYXRlLGk9ci5nZXRGdWxsWWVhcigpLHM9ci5nZXRNb250aCgpLG89ci5nZXREYXRlKCksdT0vKFsrLV0/WzAtOV0rKVxzKihkfER8d3xXfG18TXx5fFkpPy9nLGE9dS5leGVjKHQpO3doaWxlKGEpe3N3aXRjaChhWzJdfHwiZCIpe2Nhc2UiZCI6Y2FzZSJEIjpvKz1wYXJzZUludChhWzFdLDEwKTticmVhaztjYXNlInciOmNhc2UiVyI6bys9cGFyc2VJbnQoYVsxXSwxMCkqNzticmVhaztjYXNlIm0iOmNhc2UiTSI6cys9cGFyc2VJbnQoYVsxXSwxMCksbz1NYXRoLm1pbihvLCQuZGF0ZXBpY2tlci5fZ2V0RGF5c0luTW9udGgoaSxzKSk7YnJlYWs7Y2FzZSJ5IjpjYXNlIlkiOmkrPXBhcnNlSW50KGFbMV0sMTApLG89TWF0aC5taW4obywkLmRhdGVwaWNrZXIuX2dldERheXNJbk1vbnRoKGkscykpfWE9dS5leGVjKHQpfXJldHVybiBuZXcgRGF0ZShpLHMsbyl9LHM9dD09bnVsbHx8dD09PSIiP246dHlwZW9mIHQ9PSJzdHJpbmciP2kodCk6dHlwZW9mIHQ9PSJudW1iZXIiP2lzTmFOKHQpP246cih0KTpuZXcgRGF0ZSh0LmdldFRpbWUoKSk7cmV0dXJuIHM9cyYmcy50b1N0cmluZygpPT0iSW52YWxpZCBEYXRlIj9uOnMscyYmKHMuc2V0SG91cnMoMCkscy5zZXRNaW51dGVzKDApLHMuc2V0U2Vjb25kcygwKSxzLnNldE1pbGxpc2Vjb25kcygwKSksdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3Qocyl9LF9kYXlsaWdodFNhdmluZ0FkanVzdDpmdW5jdGlvbihlKXtyZXR1cm4gZT8oZS5zZXRIb3VycyhlLmdldEhvdXJzKCk+MTI/ZS5nZXRIb3VycygpKzI6MCksZSk6bnVsbH0sX3NldERhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSF0LGk9ZS5zZWxlY3RlZE1vbnRoLHM9ZS5zZWxlY3RlZFllYXIsbz10aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RldGVybWluZURhdGUoZSx0LG5ldyBEYXRlKSk7ZS5zZWxlY3RlZERheT1lLmN1cnJlbnREYXk9by5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPWUuY3VycmVudE1vbnRoPW8uZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPWUuY3VycmVudFllYXI9by5nZXRGdWxsWWVhcigpLChpIT1lLnNlbGVjdGVkTW9udGh8fHMhPWUuc2VsZWN0ZWRZZWFyKSYmIW4mJnRoaXMuX25vdGlmeUNoYW5nZShlKSx0aGlzLl9hZGp1c3RJbnN0RGF0ZShlKSxlLmlucHV0JiZlLmlucHV0LnZhbChyPyIiOnRoaXMuX2Zvcm1hdERhdGUoZSkpfSxfZ2V0RGF0ZTpmdW5jdGlvbihlKXt2YXIgdD0hZS5jdXJyZW50WWVhcnx8ZS5pbnB1dCYmZS5pbnB1dC52YWwoKT09IiI/bnVsbDp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShlLmN1cnJlbnRZZWFyLGUuY3VycmVudE1vbnRoLGUuY3VycmVudERheSkpO3JldHVybiB0fSxfYXR0YWNoSGFuZGxlcnM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0KGUsInN0ZXBNb250aHMiKSxuPSIjIitlLmlkLnJlcGxhY2UoL1xcXFwvZywiXFwiKTtlLmRwRGl2LmZpbmQoIltkYXRhLWhhbmRsZXJdIikubWFwKGZ1bmN0aW9uKCl7dmFyIGU9e3ByZXY6ZnVuY3Rpb24oKXt3aW5kb3dbIkRQX2pRdWVyeV8iK2RwdXVpZF0uZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShuLC10LCJNIil9LG5leHQ6ZnVuY3Rpb24oKXt3aW5kb3dbIkRQX2pRdWVyeV8iK2RwdXVpZF0uZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShuLCt0LCJNIil9LGhpZGU6ZnVuY3Rpb24oKXt3aW5kb3dbIkRQX2pRdWVyeV8iK2RwdXVpZF0uZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKX0sdG9kYXk6ZnVuY3Rpb24oKXt3aW5kb3dbIkRQX2pRdWVyeV8iK2RwdXVpZF0uZGF0ZXBpY2tlci5fZ290b1RvZGF5KG4pfSxzZWxlY3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdLmRhdGVwaWNrZXIuX3NlbGVjdERheShuLCt0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS1tb250aCIpLCt0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS15ZWFyIiksdGhpcyksITF9LHNlbGVjdE1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvd1siRFBfalF1ZXJ5XyIrZHB1dWlkXS5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIobix0aGlzLCJNIiksITF9LHNlbGVjdFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihuLHRoaXMsIlkiKSwhMX19OyQodGhpcykuYmluZCh0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS1ldmVudCIpLGVbdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtaGFuZGxlciIpXSl9KX0sX2dlbmVyYXRlSFRNTDpmdW5jdGlvbihlKXt2YXIgdD1uZXcgRGF0ZTt0PXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHQuZ2V0RnVsbFllYXIoKSx0LmdldE1vbnRoKCksdC5nZXREYXRlKCkpKTt2YXIgbj10aGlzLl9nZXQoZSwiaXNSVEwiKSxyPXRoaXMuX2dldChlLCJzaG93QnV0dG9uUGFuZWwiKSxpPXRoaXMuX2dldChlLCJoaWRlSWZOb1ByZXZOZXh0Iikscz10aGlzLl9nZXQoZSwibmF2aWdhdGlvbkFzRGF0ZUZvcm1hdCIpLG89dGhpcy5fZ2V0TnVtYmVyT2ZNb250aHMoZSksdT10aGlzLl9nZXQoZSwic2hvd0N1cnJlbnRBdFBvcyIpLGE9dGhpcy5fZ2V0KGUsInN0ZXBNb250aHMiKSxmPW9bMF0hPTF8fG9bMV0hPTEsbD10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChlLmN1cnJlbnREYXk/bmV3IERhdGUoZS5jdXJyZW50WWVhcixlLmN1cnJlbnRNb250aCxlLmN1cnJlbnREYXkpOm5ldyBEYXRlKDk5OTksOSw5KSksYz10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1pbiIpLGg9dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtYXgiKSxwPWUuZHJhd01vbnRoLXUsZD1lLmRyYXdZZWFyO3A8MCYmKHArPTEyLGQtLSk7aWYoaCl7dmFyIHY9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoaC5nZXRGdWxsWWVhcigpLGguZ2V0TW9udGgoKS1vWzBdKm9bMV0rMSxoLmdldERhdGUoKSkpO3Y9YyYmdjxjP2M6djt3aGlsZSh0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShkLHAsMSkpPnYpcC0tLHA8MCYmKHA9MTEsZC0tKX1lLmRyYXdNb250aD1wLGUuZHJhd1llYXI9ZDt2YXIgbT10aGlzLl9nZXQoZSwicHJldlRleHQiKTttPXM/dGhpcy5mb3JtYXREYXRlKG0sdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZCxwLWEsMSkpLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSk6bTt2YXIgZz10aGlzLl9jYW5BZGp1c3RNb250aChlLC0xLGQscCk/JzxhIGNsYXNzPSJ1aS1kYXRlcGlja2VyLXByZXYgdWktY29ybmVyLWFsbCIgZGF0YS1oYW5kbGVyPSJwcmV2IiBkYXRhLWV2ZW50PSJjbGljayIgdGl0bGU9IicrbSsnIj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0nKyhuPyJlIjoidyIpKyciPicrbSsiPC9zcGFuPjwvYT4iOmk/IiI6JzxhIGNsYXNzPSJ1aS1kYXRlcGlja2VyLXByZXYgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1kaXNhYmxlZCIgdGl0bGU9IicrbSsnIj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0nKyhuPyJlIjoidyIpKyciPicrbSsiPC9zcGFuPjwvYT4iLHk9dGhpcy5fZ2V0KGUsIm5leHRUZXh0Iik7eT1zP3RoaXMuZm9ybWF0RGF0ZSh5LHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGQscCthLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOnk7dmFyIGI9dGhpcy5fY2FuQWRqdXN0TW9udGgoZSwxLGQscCk/JzxhIGNsYXNzPSJ1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCIgZGF0YS1oYW5kbGVyPSJuZXh0IiBkYXRhLWV2ZW50PSJjbGljayIgdGl0bGU9IicreSsnIj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0nKyhuPyJ3IjoiZSIpKyciPicreSsiPC9zcGFuPjwvYT4iOmk/IiI6JzxhIGNsYXNzPSJ1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1kaXNhYmxlZCIgdGl0bGU9IicreSsnIj48c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0nKyhuPyJ3IjoiZSIpKyciPicreSsiPC9zcGFuPjwvYT4iLHc9dGhpcy5fZ2V0KGUsImN1cnJlbnRUZXh0IiksRT10aGlzLl9nZXQoZSwiZ290b0N1cnJlbnQiKSYmZS5jdXJyZW50RGF5P2w6dDt3PXM/dGhpcy5mb3JtYXREYXRlKHcsRSx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOnc7dmFyIFM9ZS5pbmxpbmU/IiI6JzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0idWktZGF0ZXBpY2tlci1jbG9zZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLXByaW9yaXR5LXByaW1hcnkgdWktY29ybmVyLWFsbCIgZGF0YS1oYW5kbGVyPSJoaWRlIiBkYXRhLWV2ZW50PSJjbGljayI+Jyt0aGlzLl9nZXQoZSwiY2xvc2VUZXh0IikrIjwvYnV0dG9uPiIseD1yPyc8ZGl2IGNsYXNzPSJ1aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgdWktd2lkZ2V0LWNvbnRlbnQiPicrKG4/UzoiIikrKHRoaXMuX2lzSW5SYW5nZShlLEUpPyc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InVpLWRhdGVwaWNrZXItY3VycmVudCB1aS1zdGF0ZS1kZWZhdWx0IHVpLXByaW9yaXR5LXNlY29uZGFyeSB1aS1jb3JuZXItYWxsIiBkYXRhLWhhbmRsZXI9InRvZGF5IiBkYXRhLWV2ZW50PSJjbGljayI+Jyt3KyI8L2J1dHRvbj4iOiIiKSsobj8iIjpTKSsiPC9kaXY+IjoiIixUPXBhcnNlSW50KHRoaXMuX2dldChlLCJmaXJzdERheSIpLDEwKTtUPWlzTmFOKFQpPzA6VDt2YXIgTj10aGlzLl9nZXQoZSwic2hvd1dlZWsiKSxDPXRoaXMuX2dldChlLCJkYXlOYW1lcyIpLGs9dGhpcy5fZ2V0KGUsImRheU5hbWVzU2hvcnQiKSxMPXRoaXMuX2dldChlLCJkYXlOYW1lc01pbiIpLEE9dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXMiKSxPPXRoaXMuX2dldChlLCJtb250aE5hbWVzU2hvcnQiKSxNPXRoaXMuX2dldChlLCJiZWZvcmVTaG93RGF5IiksXz10aGlzLl9nZXQoZSwic2hvd090aGVyTW9udGhzIiksRD10aGlzLl9nZXQoZSwic2VsZWN0T3RoZXJNb250aHMiKSxQPXRoaXMuX2dldChlLCJjYWxjdWxhdGVXZWVrIil8fHRoaXMuaXNvODYwMVdlZWssSD10aGlzLl9nZXREZWZhdWx0RGF0ZShlKSxCPSIiO2Zvcih2YXIgaj0wO2o8b1swXTtqKyspe3ZhciBGPSIiO3RoaXMubWF4Um93cz00O2Zvcih2YXIgST0wO0k8b1sxXTtJKyspe3ZhciBxPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGQscCxlLnNlbGVjdGVkRGF5KSksUj0iIHVpLWNvcm5lci1hbGwiLFU9IiI7aWYoZil7VSs9JzxkaXYgY2xhc3M9InVpLWRhdGVwaWNrZXItZ3JvdXAnO2lmKG9bMV0+MSlzd2l0Y2goSSl7Y2FzZSAwOlUrPSIgdWktZGF0ZXBpY2tlci1ncm91cC1maXJzdCIsUj0iIHVpLWNvcm5lci0iKyhuPyJyaWdodCI6ImxlZnQiKTticmVhaztjYXNlIG9bMV0tMTpVKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCIsUj0iIHVpLWNvcm5lci0iKyhuPyJsZWZ0IjoicmlnaHQiKTticmVhaztkZWZhdWx0OlUrPSIgdWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUiLFI9IiJ9VSs9JyI+J31VKz0nPGRpdiBjbGFzcz0idWktZGF0ZXBpY2tlci1oZWFkZXIgdWktd2lkZ2V0LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXgnK1IrJyI+JysoL2FsbHxsZWZ0Ly50ZXN0KFIpJiZqPT0wP24/YjpnOiIiKSsoL2FsbHxyaWdodC8udGVzdChSKSYmaj09MD9uP2c6YjoiIikrdGhpcy5fZ2VuZXJhdGVNb250aFllYXJIZWFkZXIoZSxwLGQsYyxoLGo+MHx8ST4wLEEsTykrJzwvZGl2Pjx0YWJsZSBjbGFzcz0idWktZGF0ZXBpY2tlci1jYWxlbmRhciI+PHRoZWFkPicrIjx0cj4iO3ZhciB6PU4/Jzx0aCBjbGFzcz0idWktZGF0ZXBpY2tlci13ZWVrLWNvbCI+Jyt0aGlzLl9nZXQoZSwid2Vla0hlYWRlciIpKyI8L3RoPiI6IiI7Zm9yKHZhciBXPTA7Vzw3O1crKyl7dmFyIFg9KFcrVCklNzt6Kz0iPHRoIisoKFcrVCs2KSU3Pj01PycgY2xhc3M9InVpLWRhdGVwaWNrZXItd2Vlay1lbmQiJzoiIikrIj4iKyc8c3BhbiB0aXRsZT0iJytDW1hdKyciPicrTFtYXSsiPC9zcGFuPjwvdGg+In1VKz16KyI8L3RyPjwvdGhlYWQ+PHRib2R5PiI7dmFyIFY9dGhpcy5fZ2V0RGF5c0luTW9udGgoZCxwKTtkPT1lLnNlbGVjdGVkWWVhciYmcD09ZS5zZWxlY3RlZE1vbnRoJiYoZS5zZWxlY3RlZERheT1NYXRoLm1pbihlLnNlbGVjdGVkRGF5LFYpKTt2YXIgSj0odGhpcy5fZ2V0Rmlyc3REYXlPZk1vbnRoKGQscCktVCs3KSU3LEs9TWF0aC5jZWlsKChKK1YpLzcpLFE9Zj90aGlzLm1heFJvd3M+Sz90aGlzLm1heFJvd3M6SzpLO3RoaXMubWF4Um93cz1RO3ZhciBHPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGQscCwxLUopKTtmb3IodmFyIFk9MDtZPFE7WSsrKXtVKz0iPHRyPiI7dmFyIFo9Tj8nPHRkIGNsYXNzPSJ1aS1kYXRlcGlja2VyLXdlZWstY29sIj4nK3RoaXMuX2dldChlLCJjYWxjdWxhdGVXZWVrIikoRykrIjwvdGQ+IjoiIjtmb3IodmFyIFc9MDtXPDc7VysrKXt2YXIgZXQ9TT9NLmFwcGx5KGUuaW5wdXQ/ZS5pbnB1dFswXTpudWxsLFtHXSk6WyEwLCIiXSx0dD1HLmdldE1vbnRoKCkhPXAsbnQ9dHQmJiFEfHwhZXRbMF18fGMmJkc8Y3x8aCYmRz5oO1orPSc8dGQgY2xhc3M9IicrKChXK1QrNiklNz49NT8iIHVpLWRhdGVwaWNrZXItd2Vlay1lbmQiOiIiKSsodHQ/IiB1aS1kYXRlcGlja2VyLW90aGVyLW1vbnRoIjoiIikrKEcuZ2V0VGltZSgpPT1xLmdldFRpbWUoKSYmcD09ZS5zZWxlY3RlZE1vbnRoJiZlLl9rZXlFdmVudHx8SC5nZXRUaW1lKCk9PUcuZ2V0VGltZSgpJiZILmdldFRpbWUoKT09cS5nZXRUaW1lKCk/IiAiK3RoaXMuX2RheU92ZXJDbGFzczoiIikrKG50PyIgIit0aGlzLl91bnNlbGVjdGFibGVDbGFzcysiIHVpLXN0YXRlLWRpc2FibGVkIjoiIikrKHR0JiYhXz8iIjoiICIrZXRbMV0rKEcuZ2V0VGltZSgpPT1sLmdldFRpbWUoKT8iICIrdGhpcy5fY3VycmVudENsYXNzOiIiKSsoRy5nZXRUaW1lKCk9PXQuZ2V0VGltZSgpPyIgdWktZGF0ZXBpY2tlci10b2RheSI6IiIpKSsnIicrKCghdHR8fF8pJiZldFsyXT8nIHRpdGxlPSInK2V0WzJdKyciJzoiIikrKG50PyIiOicgZGF0YS1oYW5kbGVyPSJzZWxlY3REYXkiIGRhdGEtZXZlbnQ9ImNsaWNrIiBkYXRhLW1vbnRoPSInK0cuZ2V0TW9udGgoKSsnIiBkYXRhLXllYXI9IicrRy5nZXRGdWxsWWVhcigpKyciJykrIj4iKyh0dCYmIV8/IiYjeGEwOyI6bnQ/JzxzcGFuIGNsYXNzPSJ1aS1zdGF0ZS1kZWZhdWx0Ij4nK0cuZ2V0RGF0ZSgpKyI8L3NwYW4+IjonPGEgY2xhc3M9InVpLXN0YXRlLWRlZmF1bHQnKyhHLmdldFRpbWUoKT09dC5nZXRUaW1lKCk/IiB1aS1zdGF0ZS1oaWdobGlnaHQiOiIiKSsoRy5nZXRUaW1lKCk9PWwuZ2V0VGltZSgpPyIgdWktc3RhdGUtYWN0aXZlIjoiIikrKHR0PyIgdWktcHJpb3JpdHktc2Vjb25kYXJ5IjoiIikrJyIgaHJlZj0iIyI+JytHLmdldERhdGUoKSsiPC9hPiIpKyI8L3RkPiIsRy5zZXREYXRlKEcuZ2V0RGF0ZSgpKzEpLEc9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoRyl9VSs9WisiPC90cj4ifXArKyxwPjExJiYocD0wLGQrKyksVSs9IjwvdGJvZHk+PC90YWJsZT4iKyhmPyI8L2Rpdj4iKyhvWzBdPjAmJkk9PW9bMV0tMT8nPGRpdiBjbGFzcz0idWktZGF0ZXBpY2tlci1yb3ctYnJlYWsiPjwvZGl2Pic6IiIpOiIiKSxGKz1VfUIrPUZ9cmV0dXJuIEIrPXgrKCQuYnJvd3Nlci5tc2llJiZwYXJzZUludCgkLmJyb3dzZXIudmVyc2lvbiwxMCk8NyYmIWUuaW5saW5lPyc8aWZyYW1lIHNyYz0iamF2YXNjcmlwdDpmYWxzZTsiIGNsYXNzPSJ1aS1kYXRlcGlja2VyLWNvdmVyIiBmcmFtZWJvcmRlcj0iMCI+PC9pZnJhbWU+JzoiIiksZS5fa2V5RXZlbnQ9ITEsQn0sX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyOmZ1bmN0aW9uKGUsdCxuLHIsaSxzLG8sdSl7dmFyIGE9dGhpcy5fZ2V0KGUsImNoYW5nZU1vbnRoIiksZj10aGlzLl9nZXQoZSwiY2hhbmdlWWVhciIpLGw9dGhpcy5fZ2V0KGUsInNob3dNb250aEFmdGVyWWVhciIpLGM9JzxkaXYgY2xhc3M9InVpLWRhdGVwaWNrZXItdGl0bGUiPicsaD0iIjtpZihzfHwhYSloKz0nPHNwYW4gY2xhc3M9InVpLWRhdGVwaWNrZXItbW9udGgiPicrb1t0XSsiPC9zcGFuPiI7ZWxzZXt2YXIgcD1yJiZyLmdldEZ1bGxZZWFyKCk9PW4sZD1pJiZpLmdldEZ1bGxZZWFyKCk9PW47aCs9JzxzZWxlY3QgY2xhc3M9InVpLWRhdGVwaWNrZXItbW9udGgiIGRhdGEtaGFuZGxlcj0ic2VsZWN0TW9udGgiIGRhdGEtZXZlbnQ9ImNoYW5nZSI+Jztmb3IodmFyIHY9MDt2PDEyO3YrKykoIXB8fHY+PXIuZ2V0TW9udGgoKSkmJighZHx8djw9aS5nZXRNb250aCgpKSYmKGgrPSc8b3B0aW9uIHZhbHVlPSInK3YrJyInKyh2PT10Pycgc2VsZWN0ZWQ9InNlbGVjdGVkIic6IiIpKyI+Iit1W3ZdKyI8L29wdGlvbj4iKTtoKz0iPC9zZWxlY3Q+In1sfHwoYys9aCsoc3x8IWF8fCFmPyImI3hhMDsiOiIiKSk7aWYoIWUueWVhcnNodG1sKXtlLnllYXJzaHRtbD0iIjtpZihzfHwhZiljKz0nPHNwYW4gY2xhc3M9InVpLWRhdGVwaWNrZXIteWVhciI+JytuKyI8L3NwYW4+IjtlbHNle3ZhciBtPXRoaXMuX2dldChlLCJ5ZWFyUmFuZ2UiKS5zcGxpdCgiOiIpLGc9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLHk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaCgvY1srLV0uKi8pP24rcGFyc2VJbnQoZS5zdWJzdHJpbmcoMSksMTApOmUubWF0Y2goL1srLV0uKi8pP2crcGFyc2VJbnQoZSwxMCk6cGFyc2VJbnQoZSwxMCk7cmV0dXJuIGlzTmFOKHQpP2c6dH0sYj15KG1bMF0pLHc9TWF0aC5tYXgoYix5KG1bMV18fCIiKSk7Yj1yP01hdGgubWF4KGIsci5nZXRGdWxsWWVhcigpKTpiLHc9aT9NYXRoLm1pbih3LGkuZ2V0RnVsbFllYXIoKSk6dyxlLnllYXJzaHRtbCs9JzxzZWxlY3QgY2xhc3M9InVpLWRhdGVwaWNrZXIteWVhciIgZGF0YS1oYW5kbGVyPSJzZWxlY3RZZWFyIiBkYXRhLWV2ZW50PSJjaGFuZ2UiPic7Zm9yKDtiPD13O2IrKyllLnllYXJzaHRtbCs9JzxvcHRpb24gdmFsdWU9IicrYisnIicrKGI9PW4/JyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzoiIikrIj4iK2IrIjwvb3B0aW9uPiI7ZS55ZWFyc2h0bWwrPSI8L3NlbGVjdD4iLGMrPWUueWVhcnNodG1sLGUueWVhcnNodG1sPW51bGx9fXJldHVybiBjKz10aGlzLl9nZXQoZSwieWVhclN1ZmZpeCIpLGwmJihjKz0oc3x8IWF8fCFmPyImI3hhMDsiOiIiKStoKSxjKz0iPC9kaXY+IixjfSxfYWRqdXN0SW5zdERhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZHJhd1llYXIrKG49PSJZIj90OjApLGk9ZS5kcmF3TW9udGgrKG49PSJNIj90OjApLHM9TWF0aC5taW4oZS5zZWxlY3RlZERheSx0aGlzLl9nZXREYXlzSW5Nb250aChyLGkpKSsobj09IkQiP3Q6MCksbz10aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHIsaSxzKSkpO2Uuc2VsZWN0ZWREYXk9by5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPW8uZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPW8uZ2V0RnVsbFllYXIoKSwobj09Ik0ifHxuPT0iWSIpJiZ0aGlzLl9ub3RpZnlDaGFuZ2UoZSl9LF9yZXN0cmljdE1pbk1heDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWluIikscj10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1heCIpLGk9biYmdDxuP246dDtyZXR1cm4gaT1yJiZpPnI/cjppLGl9LF9ub3RpZnlDaGFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0KGUsIm9uQ2hhbmdlTW9udGhZZWFyIik7dCYmdC5hcHBseShlLmlucHV0P2UuaW5wdXRbMF06bnVsbCxbZS5zZWxlY3RlZFllYXIsZS5zZWxlY3RlZE1vbnRoKzEsZV0pfSxfZ2V0TnVtYmVyT2ZNb250aHM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0KGUsIm51bWJlck9mTW9udGhzIik7cmV0dXJuIHQ9PW51bGw/WzEsMV06dHlwZW9mIHQ9PSJudW1iZXIiP1sxLHRdOnR9LF9nZXRNaW5NYXhEYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2RldGVybWluZURhdGUoZSx0aGlzLl9nZXQoZSx0KyJEYXRlIiksbnVsbCl9LF9nZXREYXlzSW5Nb250aDpmdW5jdGlvbihlLHQpe3JldHVybiAzMi10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShlLHQsMzIpKS5nZXREYXRlKCl9LF9nZXRGaXJzdERheU9mTW9udGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4obmV3IERhdGUoZSx0LDEpKS5nZXREYXkoKX0sX2NhbkFkanVzdE1vbnRoOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMuX2dldE51bWJlck9mTW9udGhzKGUpLHM9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUobixyKyh0PDA/dDppWzBdKmlbMV0pLDEpKTtyZXR1cm4gdDwwJiZzLnNldERhdGUodGhpcy5fZ2V0RGF5c0luTW9udGgocy5nZXRGdWxsWWVhcigpLHMuZ2V0TW9udGgoKSkpLHRoaXMuX2lzSW5SYW5nZShlLHMpfSxfaXNJblJhbmdlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtaW4iKSxyPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWF4Iik7cmV0dXJuKCFufHx0LmdldFRpbWUoKT49bi5nZXRUaW1lKCkpJiYoIXJ8fHQuZ2V0VGltZSgpPD1yLmdldFRpbWUoKSl9LF9nZXRGb3JtYXRDb25maWc6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0KGUsInNob3J0WWVhckN1dG9mZiIpO3JldHVybiB0PXR5cGVvZiB0IT0ic3RyaW5nIj90OihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSUxMDArcGFyc2VJbnQodCwxMCkse3Nob3J0WWVhckN1dG9mZjp0LGRheU5hbWVzU2hvcnQ6dGhpcy5fZ2V0KGUsImRheU5hbWVzU2hvcnQiKSxkYXlOYW1lczp0aGlzLl9nZXQoZSwiZGF5TmFtZXMiKSxtb250aE5hbWVzU2hvcnQ6dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXNTaG9ydCIpLG1vbnRoTmFtZXM6dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXMiKX19LF9mb3JtYXREYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3R8fChlLmN1cnJlbnREYXk9ZS5zZWxlY3RlZERheSxlLmN1cnJlbnRNb250aD1lLnNlbGVjdGVkTW9udGgsZS5jdXJyZW50WWVhcj1lLnNlbGVjdGVkWWVhcik7dmFyIGk9dD90eXBlb2YgdD09Im9iamVjdCI/dDp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShyLG4sdCkpOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KSk7cmV0dXJuIHRoaXMuZm9ybWF0RGF0ZSh0aGlzLl9nZXQoZSwiZGF0ZUZvcm1hdCIpLGksdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKX19KSwkLmZuLmRhdGVwaWNrZXI9ZnVuY3Rpb24oZSl7aWYoIXRoaXMubGVuZ3RoKXJldHVybiB0aGlzOyQuZGF0ZXBpY2tlci5pbml0aWFsaXplZHx8KCQoZG9jdW1lbnQpLm1vdXNlZG93bigkLmRhdGVwaWNrZXIuX2NoZWNrRXh0ZXJuYWxDbGljaykuZmluZChkb2N1bWVudC5ib2R5KS5hcHBlbmQoJC5kYXRlcGlja2VyLmRwRGl2KSwkLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQ9ITApO3ZhciB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gdHlwZW9mIGUhPSJzdHJpbmcifHxlIT0iaXNEaXNhYmxlZCImJmUhPSJnZXREYXRlIiYmZSE9IndpZGdldCI/ZT09Im9wdGlvbiImJmFyZ3VtZW50cy5sZW5ndGg9PTImJnR5cGVvZiBhcmd1bWVudHNbMV09PSJzdHJpbmciPyQuZGF0ZXBpY2tlclsiXyIrZSsiRGF0ZXBpY2tlciJdLmFwcGx5KCQuZGF0ZXBpY2tlcixbdGhpc1swXV0uY29uY2F0KHQpKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt0eXBlb2YgZT09InN0cmluZyI/JC5kYXRlcGlja2VyWyJfIitlKyJEYXRlcGlja2VyIl0uYXBwbHkoJC5kYXRlcGlja2VyLFt0aGlzXS5jb25jYXQodCkpOiQuZGF0ZXBpY2tlci5fYXR0YWNoRGF0ZXBpY2tlcih0aGlzLGUpfSk6JC5kYXRlcGlja2VyWyJfIitlKyJEYXRlcGlja2VyIl0uYXBwbHkoJC5kYXRlcGlja2VyLFt0aGlzWzBdXS5jb25jYXQodCkpfSwkLmRhdGVwaWNrZXI9bmV3IERhdGVwaWNrZXIsJC5kYXRlcGlja2VyLmluaXRpYWxpemVkPSExLCQuZGF0ZXBpY2tlci51dWlkPShuZXcgRGF0ZSkuZ2V0VGltZSgpLCQuZGF0ZXBpY2tlci52ZXJzaW9uPSIxLjkuMCIsd2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdPSR9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuPSJ1aS1kaWFsb2cgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwgIixyPXtidXR0b25zOiEwLGhlaWdodDohMCxtYXhIZWlnaHQ6ITAsbWF4V2lkdGg6ITAsbWluSGVpZ2h0OiEwLG1pbldpZHRoOiEwLHdpZHRoOiEwfSxpPXttYXhIZWlnaHQ6ITAsbWF4V2lkdGg6ITAsbWluSGVpZ2h0OiEwLG1pbldpZHRoOiEwfTtlLndpZGdldCgidWkuZGlhbG9nIix7dmVyc2lvbjoiMS45LjAiLG9wdGlvbnM6e2F1dG9PcGVuOiEwLGJ1dHRvbnM6e30sY2xvc2VPbkVzY2FwZTohMCxjbG9zZVRleHQ6ImNsb3NlIixkaWFsb2dDbGFzczoiIixkcmFnZ2FibGU6ITAsaGlkZTpudWxsLGhlaWdodDoiYXV0byIsbWF4SGVpZ2h0OiExLG1heFdpZHRoOiExLG1pbkhlaWdodDoxNTAsbWluV2lkdGg6MTUwLG1vZGFsOiExLHBvc2l0aW9uOntteToiY2VudGVyIixhdDoiY2VudGVyIixvZjp3aW5kb3csY29sbGlzaW9uOiJmaXQiLHVzaW5nOmZ1bmN0aW9uKHQpe3ZhciBuPWUodGhpcykuY3NzKHQpLm9mZnNldCgpLnRvcDtuPDAmJmUodGhpcykuY3NzKCJ0b3AiLHQudG9wLW4pfX0scmVzaXphYmxlOiEwLHNob3c6bnVsbCxzdGFjazohMCx0aXRsZToiIix3aWR0aDozMDAsekluZGV4OjFlM30sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub3JpZ2luYWxUaXRsZT10aGlzLmVsZW1lbnQuYXR0cigidGl0bGUiKSx0eXBlb2YgdGhpcy5vcmlnaW5hbFRpdGxlIT0ic3RyaW5nIiYmKHRoaXMub3JpZ2luYWxUaXRsZT0iIiksdGhpcy5vbGRQb3NpdGlvbj17cGFyZW50OnRoaXMuZWxlbWVudC5wYXJlbnQoKSxpbmRleDp0aGlzLmVsZW1lbnQucGFyZW50KCkuY2hpbGRyZW4oKS5pbmRleCh0aGlzLmVsZW1lbnQpfSx0aGlzLm9wdGlvbnMudGl0bGU9dGhpcy5vcHRpb25zLnRpdGxlfHx0aGlzLm9yaWdpbmFsVGl0bGU7dmFyIHQ9dGhpcyxyPXRoaXMub3B0aW9ucyxpPXIudGl0bGV8fCImIzE2MDsiLHM9KHRoaXMudWlEaWFsb2c9ZSgiPGRpdj4iKSkuYWRkQ2xhc3MobityLmRpYWxvZ0NsYXNzKS5jc3Moe2Rpc3BsYXk6Im5vbmUiLG91dGxpbmU6MCx6SW5kZXg6ci56SW5kZXh9KS5hdHRyKCJ0YWJJbmRleCIsLTEpLmtleWRvd24oZnVuY3Rpb24obil7ci5jbG9zZU9uRXNjYXBlJiYhbi5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmbi5rZXlDb2RlJiZuLmtleUNvZGU9PT1lLnVpLmtleUNvZGUuRVNDQVBFJiYodC5jbG9zZShuKSxuLnByZXZlbnREZWZhdWx0KCkpfSkubW91c2Vkb3duKGZ1bmN0aW9uKGUpe3QubW92ZVRvVG9wKCExLGUpfSkuYXBwZW5kVG8oImJvZHkiKSxvPXRoaXMuZWxlbWVudC5zaG93KCkucmVtb3ZlQXR0cigidGl0bGUiKS5hZGRDbGFzcygidWktZGlhbG9nLWNvbnRlbnQgdWktd2lkZ2V0LWNvbnRlbnQiKS5hcHBlbmRUbyhzKSx1PSh0aGlzLnVpRGlhbG9nVGl0bGViYXI9ZSgiPGRpdj4iKSkuYWRkQ2xhc3MoInVpLWRpYWxvZy10aXRsZWJhciAgdWktd2lkZ2V0LWhlYWRlciAgdWktY29ybmVyLWFsbCAgdWktaGVscGVyLWNsZWFyZml4IikucHJlcGVuZFRvKHMpLGE9ZSgiPGEgaHJlZj0nIyc+PC9hPiIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctdGl0bGViYXItY2xvc2UgIHVpLWNvcm5lci1hbGwiKS5hdHRyKCJyb2xlIiwiYnV0dG9uIikuY2xpY2soZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHQuY2xvc2UoZSl9KS5hcHBlbmRUbyh1KSxmPSh0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZVRleHQ9ZSgiPHNwYW4+IikpLmFkZENsYXNzKCJ1aS1pY29uIHVpLWljb24tY2xvc2V0aGljayIpLnRleHQoci5jbG9zZVRleHQpLmFwcGVuZFRvKGEpLGw9ZSgiPHNwYW4+IikudW5pcXVlSWQoKS5hZGRDbGFzcygidWktZGlhbG9nLXRpdGxlIikuaHRtbChpKS5wcmVwZW5kVG8odSksYz0odGhpcy51aURpYWxvZ0J1dHRvblBhbmU9ZSgiPGRpdj4iKSkuYWRkQ2xhc3MoInVpLWRpYWxvZy1idXR0b25wYW5lIHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCIpLGg9KHRoaXMudWlCdXR0b25TZXQ9ZSgiPGRpdj4iKSkuYWRkQ2xhc3MoInVpLWRpYWxvZy1idXR0b25zZXQiKS5hcHBlbmRUbyhjKTtzLmF0dHIoe3JvbGU6ImRpYWxvZyIsImFyaWEtbGFiZWxsZWRieSI6bC5hdHRyKCJpZCIpfSksdS5maW5kKCIqIikuYWRkKHUpLmRpc2FibGVTZWxlY3Rpb24oKSx0aGlzLl9ob3ZlcmFibGUoYSksdGhpcy5fZm9jdXNhYmxlKGEpLHIuZHJhZ2dhYmxlJiZlLmZuLmRyYWdnYWJsZSYmdGhpcy5fbWFrZURyYWdnYWJsZSgpLHIucmVzaXphYmxlJiZlLmZuLnJlc2l6YWJsZSYmdGhpcy5fbWFrZVJlc2l6YWJsZSgpLHRoaXMuX2NyZWF0ZUJ1dHRvbnMoci5idXR0b25zKSx0aGlzLl9pc09wZW49ITEsZS5mbi5iZ2lmcmFtZSYmcy5iZ2lmcmFtZSgpLHRoaXMuX29uKHMse2tleWRvd246ZnVuY3Rpb24odCl7aWYoIXIubW9kYWx8fHQua2V5Q29kZSE9PWUudWkua2V5Q29kZS5UQUIpcmV0dXJuO3ZhciBuPWUoIjp0YWJiYWJsZSIscyksaT1uLmZpbHRlcigiOmZpcnN0Iiksbz1uLmZpbHRlcigiOmxhc3QiKTtpZih0LnRhcmdldD09PW9bMF0mJiF0LnNoaWZ0S2V5KXJldHVybiBpLmZvY3VzKDEpLCExO2lmKHQudGFyZ2V0PT09aVswXSYmdC5zaGlmdEtleSlyZXR1cm4gby5mb2N1cygxKSwhMX19KX0sX2luaXQ6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuYXV0b09wZW4mJnRoaXMub3BlbigpfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5vbGRQb3NpdGlvbjt0aGlzLm92ZXJsYXkmJnRoaXMub3ZlcmxheS5kZXN0cm95KCksdGhpcy51aURpYWxvZy5oaWRlKCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctY29udGVudCB1aS13aWRnZXQtY29udGVudCIpLmhpZGUoKS5hcHBlbmRUbygiYm9keSIpLHRoaXMudWlEaWFsb2cucmVtb3ZlKCksdGhpcy5vcmlnaW5hbFRpdGxlJiZ0aGlzLmVsZW1lbnQuYXR0cigidGl0bGUiLHRoaXMub3JpZ2luYWxUaXRsZSksZT10LnBhcmVudC5jaGlsZHJlbigpLmVxKHQuaW5kZXgpLGUubGVuZ3RoJiZlWzBdIT09dGhpcy5lbGVtZW50WzBdP2UuYmVmb3JlKHRoaXMuZWxlbWVudCk6dC5wYXJlbnQuYXBwZW5kKHRoaXMuZWxlbWVudCl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVpRGlhbG9nfSxjbG9zZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLHIsaTtpZighdGhpcy5faXNPcGVuKXJldHVybjtpZighMT09PXRoaXMuX3RyaWdnZXIoImJlZm9yZUNsb3NlIix0KSlyZXR1cm47cmV0dXJuIHRoaXMuX2lzT3Blbj0hMSx0aGlzLm92ZXJsYXkmJnRoaXMub3ZlcmxheS5kZXN0cm95KCksdGhpcy5vcHRpb25zLmhpZGU/dGhpcy51aURpYWxvZy5oaWRlKHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7bi5fdHJpZ2dlcigiY2xvc2UiLHQpfSk6KHRoaXMudWlEaWFsb2cuaGlkZSgpLHRoaXMuX3RyaWdnZXIoImNsb3NlIix0KSksZS51aS5kaWFsb2cub3ZlcmxheS5yZXNpemUoKSx0aGlzLm9wdGlvbnMubW9kYWwmJihyPTAsZSgiLnVpLWRpYWxvZyIpLmVhY2goZnVuY3Rpb24oKXt0aGlzIT09bi51aURpYWxvZ1swXSYmKGk9ZSh0aGlzKS5jc3MoInotaW5kZXgiKSxpc05hTihpKXx8KHI9TWF0aC5tYXgocixpKSkpfSksZS51aS5kaWFsb2cubWF4Wj1yKSx0aGlzfSxpc09wZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNPcGVufSxtb3ZlVG9Ub3A6ZnVuY3Rpb24odCxuKXt2YXIgcj10aGlzLm9wdGlvbnMsaTtyZXR1cm4gci5tb2RhbCYmIXR8fCFyLnN0YWNrJiYhci5tb2RhbD90aGlzLl90cmlnZ2VyKCJmb2N1cyIsbik6KHIuekluZGV4PmUudWkuZGlhbG9nLm1heFomJihlLnVpLmRpYWxvZy5tYXhaPXIuekluZGV4KSx0aGlzLm92ZXJsYXkmJihlLnVpLmRpYWxvZy5tYXhaKz0xLGUudWkuZGlhbG9nLm92ZXJsYXkubWF4Wj1lLnVpLmRpYWxvZy5tYXhaLHRoaXMub3ZlcmxheS4kZWwuY3NzKCJ6LWluZGV4IixlLnVpLmRpYWxvZy5vdmVybGF5Lm1heFopKSxpPXtzY3JvbGxUb3A6dGhpcy5lbGVtZW50LnNjcm9sbFRvcCgpLHNjcm9sbExlZnQ6dGhpcy5lbGVtZW50LnNjcm9sbExlZnQoKX0sZS51aS5kaWFsb2cubWF4Wis9MSx0aGlzLnVpRGlhbG9nLmNzcygiei1pbmRleCIsZS51aS5kaWFsb2cubWF4WiksdGhpcy5lbGVtZW50LmF0dHIoaSksdGhpcy5fdHJpZ2dlcigiZm9jdXMiLG4pLHRoaXMpfSxvcGVuOmZ1bmN0aW9uKCl7aWYodGhpcy5faXNPcGVuKXJldHVybjt2YXIgdCxuPXRoaXMub3B0aW9ucyxyPXRoaXMudWlEaWFsb2c7cmV0dXJuIHRoaXMuX3NpemUoKSx0aGlzLl9wb3NpdGlvbihuLnBvc2l0aW9uKSxyLnNob3cobi5zaG93KSx0aGlzLm92ZXJsYXk9bi5tb2RhbD9uZXcgZS51aS5kaWFsb2cub3ZlcmxheSh0aGlzKTpudWxsLHRoaXMubW92ZVRvVG9wKCEwKSx0PXRoaXMuZWxlbWVudC5maW5kKCI6dGFiYmFibGUiKSx0Lmxlbmd0aHx8KHQ9dGhpcy51aURpYWxvZ0J1dHRvblBhbmUuZmluZCgiOnRhYmJhYmxlIiksdC5sZW5ndGh8fCh0PXIpKSx0LmVxKDApLmZvY3VzKCksdGhpcy5faXNPcGVuPSEwLHRoaXMuX3RyaWdnZXIoIm9wZW4iKSx0aGlzfSxfY3JlYXRlQnV0dG9uczpmdW5jdGlvbih0KXt2YXIgbixyLGk9dGhpcyxzPSExO3RoaXMudWlEaWFsb2dCdXR0b25QYW5lLnJlbW92ZSgpLHRoaXMudWlCdXR0b25TZXQuZW1wdHkoKSx0eXBlb2YgdD09Im9iamVjdCImJnQhPT1udWxsJiZlLmVhY2godCxmdW5jdGlvbigpe3JldHVybiEocz0hMCl9KSxzPyhlLmVhY2godCxmdW5jdGlvbih0LG4pe249ZS5pc0Z1bmN0aW9uKG4pP3tjbGljazpuLHRleHQ6dH06bjt2YXIgcj1lKCI8YnV0dG9uIHR5cGU9J2J1dHRvbic+IikuYXR0cihuLCEwKS51bmJpbmQoImNsaWNrIikuY2xpY2soZnVuY3Rpb24oKXtuLmNsaWNrLmFwcGx5KGkuZWxlbWVudFswXSxhcmd1bWVudHMpfSkuYXBwZW5kVG8oaS51aUJ1dHRvblNldCk7ZS5mbi5idXR0b24mJnIuYnV0dG9uKCl9KSx0aGlzLnVpRGlhbG9nLmFkZENsYXNzKCJ1aS1kaWFsb2ctYnV0dG9ucyIpLHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLmFwcGVuZFRvKHRoaXMudWlEaWFsb2cpKTp0aGlzLnVpRGlhbG9nLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctYnV0dG9ucyIpfSxfbWFrZURyYWdnYWJsZTpmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSl7cmV0dXJue3Bvc2l0aW9uOmUucG9zaXRpb24sb2Zmc2V0OmUub2Zmc2V0fX12YXIgdD10aGlzLG49dGhpcy5vcHRpb25zO3RoaXMudWlEaWFsb2cuZHJhZ2dhYmxlKHtjYW5jZWw6Ii51aS1kaWFsb2ctY29udGVudCwgLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZSIsaGFuZGxlOiIudWktZGlhbG9nLXRpdGxlYmFyIixjb250YWlubWVudDoiZG9jdW1lbnQiLHN0YXJ0OmZ1bmN0aW9uKG4saSl7ZSh0aGlzKS5hZGRDbGFzcygidWktZGlhbG9nLWRyYWdnaW5nIiksdC5fdHJpZ2dlcigiZHJhZ1N0YXJ0IixuLHIoaSkpfSxkcmFnOmZ1bmN0aW9uKGUsbil7dC5fdHJpZ2dlcigiZHJhZyIsZSxyKG4pKX0sc3RvcDpmdW5jdGlvbihpLHMpe24ucG9zaXRpb249W3MucG9zaXRpb24ubGVmdC10LmRvY3VtZW50LnNjcm9sbExlZnQoKSxzLnBvc2l0aW9uLnRvcC10LmRvY3VtZW50LnNjcm9sbFRvcCgpXSxlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctZHJhZ2dpbmciKSx0Ll90cmlnZ2VyKCJkcmFnU3RvcCIsaSxyKHMpKSxlLnVpLmRpYWxvZy5vdmVybGF5LnJlc2l6ZSgpfX0pfSxfbWFrZVJlc2l6YWJsZTpmdW5jdGlvbihuKXtmdW5jdGlvbiB1KGUpe3JldHVybntvcmlnaW5hbFBvc2l0aW9uOmUub3JpZ2luYWxQb3NpdGlvbixvcmlnaW5hbFNpemU6ZS5vcmlnaW5hbFNpemUscG9zaXRpb246ZS5wb3NpdGlvbixzaXplOmUuc2l6ZX19bj1uPT09dD90aGlzLm9wdGlvbnMucmVzaXphYmxlOm47dmFyIHI9dGhpcyxpPXRoaXMub3B0aW9ucyxzPXRoaXMudWlEaWFsb2cuY3NzKCJwb3NpdGlvbiIpLG89dHlwZW9mIG49PSJzdHJpbmciP246Im4sZSxzLHcsc2Usc3csbmUsbnciO3RoaXMudWlEaWFsb2cucmVzaXphYmxlKHtjYW5jZWw6Ii51aS1kaWFsb2ctY29udGVudCIsY29udGFpbm1lbnQ6ImRvY3VtZW50IixhbHNvUmVzaXplOnRoaXMuZWxlbWVudCxtYXhXaWR0aDppLm1heFdpZHRoLG1heEhlaWdodDppLm1heEhlaWdodCxtaW5XaWR0aDppLm1pbldpZHRoLG1pbkhlaWdodDp0aGlzLl9taW5IZWlnaHQoKSxoYW5kbGVzOm8sc3RhcnQ6ZnVuY3Rpb24odCxuKXtlKHRoaXMpLmFkZENsYXNzKCJ1aS1kaWFsb2ctcmVzaXppbmciKSxyLl90cmlnZ2VyKCJyZXNpemVTdGFydCIsdCx1KG4pKX0scmVzaXplOmZ1bmN0aW9uKGUsdCl7ci5fdHJpZ2dlcigicmVzaXplIixlLHUodCkpfSxzdG9wOmZ1bmN0aW9uKHQsbil7ZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLXJlc2l6aW5nIiksaS5oZWlnaHQ9ZSh0aGlzKS5oZWlnaHQoKSxpLndpZHRoPWUodGhpcykud2lkdGgoKSxyLl90cmlnZ2VyKCJyZXNpemVTdG9wIix0LHUobikpLGUudWkuZGlhbG9nLm92ZXJsYXkucmVzaXplKCl9fSkuY3NzKCJwb3NpdGlvbiIscykuZmluZCgiLnVpLXJlc2l6YWJsZS1zZSIpLmFkZENsYXNzKCJ1aS1pY29uIHVpLWljb24tZ3JpcC1kaWFnb25hbC1zZSIpfSxfbWluSGVpZ2h0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3JldHVybiBlLmhlaWdodD09PSJhdXRvIj9lLm1pbkhlaWdodDpNYXRoLm1pbihlLm1pbkhlaWdodCxlLmhlaWdodCl9LF9wb3NpdGlvbjpmdW5jdGlvbih0KXt2YXIgbj1bXSxyPVswLDBdLGk7aWYodCl7aWYodHlwZW9mIHQ9PSJzdHJpbmcifHx0eXBlb2YgdD09Im9iamVjdCImJiIwImluIHQpbj10LnNwbGl0P3Quc3BsaXQoIiAiKTpbdFswXSx0WzFdXSxuLmxlbmd0aD09PTEmJihuWzFdPW5bMF0pLGUuZWFjaChbImxlZnQiLCJ0b3AiXSxmdW5jdGlvbihlLHQpeytuW2VdPT09bltlXSYmKHJbZV09bltlXSxuW2VdPXQpfSksdD17bXk6bi5qb2luKCIgIiksYXQ6bi5qb2luKCIgIiksb2Zmc2V0OnIuam9pbigiICIpfTt0PWUuZXh0ZW5kKHt9LGUudWkuZGlhbG9nLnByb3RvdHlwZS5vcHRpb25zLnBvc2l0aW9uLHQpfWVsc2UgdD1lLnVpLmRpYWxvZy5wcm90b3R5cGUub3B0aW9ucy5wb3NpdGlvbjtpPXRoaXMudWlEaWFsb2cuaXMoIjp2aXNpYmxlIiksaXx8dGhpcy51aURpYWxvZy5zaG93KCksdGhpcy51aURpYWxvZy5wb3NpdGlvbih0KSxpfHx0aGlzLnVpRGlhbG9nLmhpZGUoKX0sX3NldE9wdGlvbnM6ZnVuY3Rpb24odCl7dmFyIG49dGhpcyxzPXt9LG89ITE7ZS5lYWNoKHQsZnVuY3Rpb24oZSx0KXtuLl9zZXRPcHRpb24oZSx0KSxlIGluIHImJihvPSEwKSxlIGluIGkmJihzW2VdPXQpfSksbyYmdGhpcy5fc2l6ZSgpLHRoaXMudWlEaWFsb2cuaXMoIjpkYXRhKHJlc2l6YWJsZSkiKSYmdGhpcy51aURpYWxvZy5yZXNpemFibGUoIm9wdGlvbiIscyl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxyKXt2YXIgaSxzLG89dGhpcy51aURpYWxvZztzd2l0Y2godCl7Y2FzZSJidXR0b25zIjp0aGlzLl9jcmVhdGVCdXR0b25zKHIpO2JyZWFrO2Nhc2UiY2xvc2VUZXh0Ijp0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZVRleHQudGV4dCgiIityKTticmVhaztjYXNlImRpYWxvZ0NsYXNzIjpvLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5kaWFsb2dDbGFzcykuYWRkQ2xhc3MobityKTticmVhaztjYXNlImRpc2FibGVkIjpyP28uYWRkQ2xhc3MoInVpLWRpYWxvZy1kaXNhYmxlZCIpOm8ucmVtb3ZlQ2xhc3MoInVpLWRpYWxvZy1kaXNhYmxlZCIpO2JyZWFrO2Nhc2UiZHJhZ2dhYmxlIjppPW8uaXMoIjpkYXRhKGRyYWdnYWJsZSkiKSxpJiYhciYmby5kcmFnZ2FibGUoImRlc3Ryb3kiKSwhaSYmciYmdGhpcy5fbWFrZURyYWdnYWJsZSgpO2JyZWFrO2Nhc2UicG9zaXRpb24iOnRoaXMuX3Bvc2l0aW9uKHIpO2JyZWFrO2Nhc2UicmVzaXphYmxlIjpzPW8uaXMoIjpkYXRhKHJlc2l6YWJsZSkiKSxzJiYhciYmby5yZXNpemFibGUoImRlc3Ryb3kiKSxzJiZ0eXBlb2Ygcj09InN0cmluZyImJm8ucmVzaXphYmxlKCJvcHRpb24iLCJoYW5kbGVzIixyKSwhcyYmciE9PSExJiZ0aGlzLl9tYWtlUmVzaXphYmxlKHIpO2JyZWFrO2Nhc2UidGl0bGUiOmUoIi51aS1kaWFsb2ctdGl0bGUiLHRoaXMudWlEaWFsb2dUaXRsZWJhcikuaHRtbCgiIisocnx8IiYjMTYwOyIpKX10aGlzLl9zdXBlcih0LHIpfSxfc2l6ZTpmdW5jdGlvbigpe3ZhciB0LG4scixpPXRoaXMub3B0aW9ucyxzPXRoaXMudWlEaWFsb2cuaXMoIjp2aXNpYmxlIik7dGhpcy5lbGVtZW50LnNob3coKS5jc3Moe3dpZHRoOiJhdXRvIixtaW5IZWlnaHQ6MCxoZWlnaHQ6MH0pLGkubWluV2lkdGg+aS53aWR0aCYmKGkud2lkdGg9aS5taW5XaWR0aCksdD10aGlzLnVpRGlhbG9nLmNzcyh7aGVpZ2h0OiJhdXRvIix3aWR0aDppLndpZHRofSkub3V0ZXJIZWlnaHQoKSxuPU1hdGgubWF4KDAsaS5taW5IZWlnaHQtdCksaS5oZWlnaHQ9PT0iYXV0byI/ZS5zdXBwb3J0Lm1pbkhlaWdodD90aGlzLmVsZW1lbnQuY3NzKHttaW5IZWlnaHQ6bixoZWlnaHQ6ImF1dG8ifSk6KHRoaXMudWlEaWFsb2cuc2hvdygpLHI9dGhpcy5lbGVtZW50LmNzcygiaGVpZ2h0IiwiYXV0byIpLmhlaWdodCgpLHN8fHRoaXMudWlEaWFsb2cuaGlkZSgpLHRoaXMuZWxlbWVudC5oZWlnaHQoTWF0aC5tYXgocixuKSkpOnRoaXMuZWxlbWVudC5oZWlnaHQoTWF0aC5tYXgoaS5oZWlnaHQtdCwwKSksdGhpcy51aURpYWxvZy5pcygiOmRhdGEocmVzaXphYmxlKSIpJiZ0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSgib3B0aW9uIiwibWluSGVpZ2h0Iix0aGlzLl9taW5IZWlnaHQoKSl9fSksZS5leHRlbmQoZS51aS5kaWFsb2cse3V1aWQ6MCxtYXhaOjAsZ2V0VGl0bGVJZDpmdW5jdGlvbihlKXt2YXIgdD1lLmF0dHIoImlkIik7cmV0dXJuIHR8fCh0aGlzLnV1aWQrPTEsdD10aGlzLnV1aWQpLCJ1aS1kaWFsb2ctdGl0bGUtIit0fSxvdmVybGF5OmZ1bmN0aW9uKHQpe3RoaXMuJGVsPWUudWkuZGlhbG9nLm92ZXJsYXkuY3JlYXRlKHQpfX0pLGUuZXh0ZW5kKGUudWkuZGlhbG9nLm92ZXJsYXkse2luc3RhbmNlczpbXSxvbGRJbnN0YW5jZXM6W10sbWF4WjowLGV2ZW50czplLm1hcCgiZm9jdXMsbW91c2Vkb3duLG1vdXNldXAsa2V5ZG93bixrZXlwcmVzcyxjbGljayIuc3BsaXQoIiwiKSxmdW5jdGlvbihlKXtyZXR1cm4gZSsiLmRpYWxvZy1vdmVybGF5In0pLmpvaW4oIiAiKSxjcmVhdGU6ZnVuY3Rpb24odCl7dGhpcy5pbnN0YW5jZXMubGVuZ3RoPT09MCYmKHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLnVpLmRpYWxvZy5vdmVybGF5Lmluc3RhbmNlcy5sZW5ndGgmJmUoZG9jdW1lbnQpLmJpbmQoZS51aS5kaWFsb2cub3ZlcmxheS5ldmVudHMsZnVuY3Rpb24odCl7aWYoZSh0LnRhcmdldCkuekluZGV4KCk8ZS51aS5kaWFsb2cub3ZlcmxheS5tYXhaKXJldHVybiExfSl9LDEpLGUod2luZG93KS5iaW5kKCJyZXNpemUuZGlhbG9nLW92ZXJsYXkiLGUudWkuZGlhbG9nLm92ZXJsYXkucmVzaXplKSk7dmFyIG49dGhpcy5vbGRJbnN0YW5jZXMucG9wKCl8fGUoIjxkaXY+IikuYWRkQ2xhc3MoInVpLXdpZGdldC1vdmVybGF5Iik7cmV0dXJuIGUoZG9jdW1lbnQpLmJpbmQoImtleWRvd24uZGlhbG9nLW92ZXJsYXkiLGZ1bmN0aW9uKHIpe3ZhciBpPWUudWkuZGlhbG9nLm92ZXJsYXkuaW5zdGFuY2VzO2kubGVuZ3RoIT09MCYmaVtpLmxlbmd0aC0xXT09PW4mJnQub3B0aW9ucy5jbG9zZU9uRXNjYXBlJiYhci5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmci5rZXlDb2RlJiZyLmtleUNvZGU9PT1lLnVpLmtleUNvZGUuRVNDQVBFJiYodC5jbG9zZShyKSxyLnByZXZlbnREZWZhdWx0KCkpfSksbi5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KS5jc3Moe3dpZHRoOnRoaXMud2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWlnaHQoKX0pLGUuZm4uYmdpZnJhbWUmJm4uYmdpZnJhbWUoKSx0aGlzLmluc3RhbmNlcy5wdXNoKG4pLG59LGRlc3Ryb3k6ZnVuY3Rpb24odCl7dmFyIG49ZS5pbkFycmF5KHQsdGhpcy5pbnN0YW5jZXMpLHI9MDtuIT09LTEmJnRoaXMub2xkSW5zdGFuY2VzLnB1c2godGhpcy5pbnN0YW5jZXMuc3BsaWNlKG4sMSlbMF0pLHRoaXMuaW5zdGFuY2VzLmxlbmd0aD09PTAmJmUoW2RvY3VtZW50LHdpbmRvd10pLnVuYmluZCgiLmRpYWxvZy1vdmVybGF5IiksdC5oZWlnaHQoMCkud2lkdGgoMCkucmVtb3ZlKCksZS5lYWNoKHRoaXMuaW5zdGFuY2VzLGZ1bmN0aW9uKCl7cj1NYXRoLm1heChyLHRoaXMuY3NzKCJ6LWluZGV4IikpfSksdGhpcy5tYXhaPXJ9LGhlaWdodDpmdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIGUuYnJvd3Nlci5tc2llPyh0PU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQpLG49TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodCxkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCksdDxuP2Uod2luZG93KS5oZWlnaHQoKSsicHgiOnQrInB4Iik6ZShkb2N1bWVudCkuaGVpZ2h0KCkrInB4In0sd2lkdGg6ZnVuY3Rpb24oKXt2YXIgdCxuO3JldHVybiBlLmJyb3dzZXIubXNpZT8odD1NYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsV2lkdGgsZG9jdW1lbnQuYm9keS5zY3JvbGxXaWR0aCksbj1NYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgsZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCksdDxuP2Uod2luZG93KS53aWR0aCgpKyJweCI6dCsicHgiKTplKGRvY3VtZW50KS53aWR0aCgpKyJweCJ9LHJlc2l6ZTpmdW5jdGlvbigpe3ZhciB0PWUoW10pO2UuZWFjaChlLnVpLmRpYWxvZy5vdmVybGF5Lmluc3RhbmNlcyxmdW5jdGlvbigpe3Q9dC5hZGQodGhpcyl9KSx0LmNzcyh7d2lkdGg6MCxoZWlnaHQ6MH0pLmNzcyh7d2lkdGg6ZS51aS5kaWFsb2cub3ZlcmxheS53aWR0aCgpLGhlaWdodDplLnVpLmRpYWxvZy5vdmVybGF5LmhlaWdodCgpfSl9fSksZS5leHRlbmQoZS51aS5kaWFsb2cub3ZlcmxheS5wcm90b3R5cGUse2Rlc3Ryb3k6ZnVuY3Rpb24oKXtlLnVpLmRpYWxvZy5vdmVybGF5LmRlc3Ryb3kodGhpcy4kZWwpfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLndpZGdldCgidWkuZHJhZ2dhYmxlIixlLnVpLm1vdXNlLHt2ZXJzaW9uOiIxLjkuMCIsd2lkZ2V0RXZlbnRQcmVmaXg6ImRyYWciLG9wdGlvbnM6e2FkZENsYXNzZXM6ITAsYXBwZW5kVG86InBhcmVudCIsYXhpczohMSxjb25uZWN0VG9Tb3J0YWJsZTohMSxjb250YWlubWVudDohMSxjdXJzb3I6ImF1dG8iLGN1cnNvckF0OiExLGdyaWQ6ITEsaGFuZGxlOiExLGhlbHBlcjoib3JpZ2luYWwiLGlmcmFtZUZpeDohMSxvcGFjaXR5OiExLHJlZnJlc2hQb3NpdGlvbnM6ITEscmV2ZXJ0OiExLHJldmVydER1cmF0aW9uOjUwMCxzY29wZToiZGVmYXVsdCIsc2Nyb2xsOiEwLHNjcm9sbFNlbnNpdGl2aXR5OjIwLHNjcm9sbFNwZWVkOjIwLHNuYXA6ITEsc25hcE1vZGU6ImJvdGgiLHNuYXBUb2xlcmFuY2U6MjAsc3RhY2s6ITEsekluZGV4OiExfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmhlbHBlcj09Im9yaWdpbmFsIiYmIS9eKD86cnxhfGYpLy50ZXN0KHRoaXMuZWxlbWVudC5jc3MoInBvc2l0aW9uIikpJiYodGhpcy5lbGVtZW50WzBdLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLHRoaXMub3B0aW9ucy5hZGRDbGFzc2VzJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWRyYWdnYWJsZSIpLHRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1kcmFnZ2FibGUtZGlzYWJsZWQiKSx0aGlzLl9tb3VzZUluaXQoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWRyYWdnYWJsZSB1aS1kcmFnZ2FibGUtZHJhZ2dpbmcgdWktZHJhZ2dhYmxlLWRpc2FibGVkIiksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLmhlbHBlcnx8bi5kaXNhYmxlZHx8ZSh0LnRhcmdldCkuaXMoIi51aS1yZXNpemFibGUtaGFuZGxlIik/ITE6KHRoaXMuaGFuZGxlPXRoaXMuX2dldEhhbmRsZSh0KSx0aGlzLmhhbmRsZT8oZShuLmlmcmFtZUZpeD09PSEwPyJpZnJhbWUiOm4uaWZyYW1lRml4KS5lYWNoKGZ1bmN0aW9uKCl7ZSgnPGRpdiBjbGFzcz0idWktZHJhZ2dhYmxlLWlmcmFtZUZpeCIgc3R5bGU9ImJhY2tncm91bmQ6ICNmZmY7Ij48L2Rpdj4nKS5jc3Moe3dpZHRoOnRoaXMub2Zmc2V0V2lkdGgrInB4IixoZWlnaHQ6dGhpcy5vZmZzZXRIZWlnaHQrInB4Iixwb3NpdGlvbjoiYWJzb2x1dGUiLG9wYWNpdHk6IjAuMDAxIix6SW5kZXg6MWUzfSkuY3NzKGUodGhpcykub2Zmc2V0KCkpLmFwcGVuZFRvKCJib2R5Iil9KSwhMCk6ITEpfSxfbW91c2VTdGFydDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuaGVscGVyPXRoaXMuX2NyZWF0ZUhlbHBlcih0KSx0aGlzLmhlbHBlci5hZGRDbGFzcygidWktZHJhZ2dhYmxlLWRyYWdnaW5nIiksdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLGUudWkuZGRtYW5hZ2VyJiYoZS51aS5kZG1hbmFnZXIuY3VycmVudD10aGlzKSx0aGlzLl9jYWNoZU1hcmdpbnMoKSx0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcygicG9zaXRpb24iKSx0aGlzLnNjcm9sbFBhcmVudD10aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoKSx0aGlzLm9mZnNldD10aGlzLnBvc2l0aW9uQWJzPXRoaXMuZWxlbWVudC5vZmZzZXQoKSx0aGlzLm9mZnNldD17dG9wOnRoaXMub2Zmc2V0LnRvcC10aGlzLm1hcmdpbnMudG9wLGxlZnQ6dGhpcy5vZmZzZXQubGVmdC10aGlzLm1hcmdpbnMubGVmdH0sZS5leHRlbmQodGhpcy5vZmZzZXQse2NsaWNrOntsZWZ0OnQucGFnZVgtdGhpcy5vZmZzZXQubGVmdCx0b3A6dC5wYWdlWS10aGlzLm9mZnNldC50b3B9LHBhcmVudDp0aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSxyZWxhdGl2ZTp0aGlzLl9nZXRSZWxhdGl2ZU9mZnNldCgpfSksdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXRoaXMucG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbih0KSx0aGlzLm9yaWdpbmFsUGFnZVg9dC5wYWdlWCx0aGlzLm9yaWdpbmFsUGFnZVk9dC5wYWdlWSxuLmN1cnNvckF0JiZ0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKG4uY3Vyc29yQXQpLG4uY29udGFpbm1lbnQmJnRoaXMuX3NldENvbnRhaW5tZW50KCksdGhpcy5fdHJpZ2dlcigic3RhcnQiLHQpPT09ITE/KHRoaXMuX2NsZWFyKCksITEpOih0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksZS51aS5kZG1hbmFnZXImJiFuLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsdCksdGhpcy5fbW91c2VEcmFnKHQsITApLGUudWkuZGRtYW5hZ2VyJiZlLnVpLmRkbWFuYWdlci5kcmFnU3RhcnQodGhpcyx0KSwhMCl9LF9tb3VzZURyYWc6ZnVuY3Rpb24odCxuKXt0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKTtpZighbil7dmFyIHI9dGhpcy5fdWlIYXNoKCk7aWYodGhpcy5fdHJpZ2dlcigiZHJhZyIsdCxyKT09PSExKXJldHVybiB0aGlzLl9tb3VzZVVwKHt9KSwhMTt0aGlzLnBvc2l0aW9uPXIucG9zaXRpb259aWYoIXRoaXMub3B0aW9ucy5heGlzfHx0aGlzLm9wdGlvbnMuYXhpcyE9InkiKXRoaXMuaGVscGVyWzBdLnN0eWxlLmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0KyJweCI7aWYoIXRoaXMub3B0aW9ucy5heGlzfHx0aGlzLm9wdGlvbnMuYXhpcyE9IngiKXRoaXMuaGVscGVyWzBdLnN0eWxlLnRvcD10aGlzLnBvc2l0aW9uLnRvcCsicHgiO3JldHVybiBlLnVpLmRkbWFuYWdlciYmZS51aS5kZG1hbmFnZXIuZHJhZyh0aGlzLHQpLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPSExO2UudWkuZGRtYW5hZ2VyJiYhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXImJihuPWUudWkuZGRtYW5hZ2VyLmRyb3AodGhpcyx0KSksdGhpcy5kcm9wcGVkJiYobj10aGlzLmRyb3BwZWQsdGhpcy5kcm9wcGVkPSExKTt2YXIgcj10aGlzLmVsZW1lbnRbMF0saT0hMTt3aGlsZShyJiYocj1yLnBhcmVudE5vZGUpKXI9PWRvY3VtZW50JiYoaT0hMCk7aWYoIWkmJnRoaXMub3B0aW9ucy5oZWxwZXI9PT0ib3JpZ2luYWwiKXJldHVybiExO2lmKHRoaXMub3B0aW9ucy5yZXZlcnQ9PSJpbnZhbGlkIiYmIW58fHRoaXMub3B0aW9ucy5yZXZlcnQ9PSJ2YWxpZCImJm58fHRoaXMub3B0aW9ucy5yZXZlcnQ9PT0hMHx8ZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5yZXZlcnQpJiZ0aGlzLm9wdGlvbnMucmV2ZXJ0LmNhbGwodGhpcy5lbGVtZW50LG4pKXt2YXIgcz10aGlzO2UodGhpcy5oZWxwZXIpLmFuaW1hdGUodGhpcy5vcmlnaW5hbFBvc2l0aW9uLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnREdXJhdGlvbiwxMCksZnVuY3Rpb24oKXtzLl90cmlnZ2VyKCJzdG9wIix0KSE9PSExJiZzLl9jbGVhcigpfSl9ZWxzZSB0aGlzLl90cmlnZ2VyKCJzdG9wIix0KSE9PSExJiZ0aGlzLl9jbGVhcigpO3JldHVybiExfSxfbW91c2VVcDpmdW5jdGlvbih0KXtyZXR1cm4gZSgiZGl2LnVpLWRyYWdnYWJsZS1pZnJhbWVGaXgiKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpfSksZS51aS5kZG1hbmFnZXImJmUudWkuZGRtYW5hZ2VyLmRyYWdTdG9wKHRoaXMsdCksZS51aS5tb3VzZS5wcm90b3R5cGUuX21vdXNlVXAuY2FsbCh0aGlzLHQpfSxjYW5jZWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWxwZXIuaXMoIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmciKT90aGlzLl9tb3VzZVVwKHt9KTp0aGlzLl9jbGVhcigpLHRoaXN9LF9nZXRIYW5kbGU6ZnVuY3Rpb24odCl7dmFyIG49IXRoaXMub3B0aW9ucy5oYW5kbGV8fCFlKHRoaXMub3B0aW9ucy5oYW5kbGUsdGhpcy5lbGVtZW50KS5sZW5ndGg/ITA6ITE7cmV0dXJuIGUodGhpcy5vcHRpb25zLmhhbmRsZSx0aGlzLmVsZW1lbnQpLmZpbmQoIioiKS5hbmRTZWxmKCkuZWFjaChmdW5jdGlvbigpe3RoaXM9PXQudGFyZ2V0JiYobj0hMCl9KSxufSxfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyPWUuaXNGdW5jdGlvbihuLmhlbHBlcik/ZShuLmhlbHBlci5hcHBseSh0aGlzLmVsZW1lbnRbMF0sW3RdKSk6bi5oZWxwZXI9PSJjbG9uZSI/dGhpcy5lbGVtZW50LmNsb25lKCkucmVtb3ZlQXR0cigiaWQiKTp0aGlzLmVsZW1lbnQ7cmV0dXJuIHIucGFyZW50cygiYm9keSIpLmxlbmd0aHx8ci5hcHBlbmRUbyhuLmFwcGVuZFRvPT0icGFyZW50Ij90aGlzLmVsZW1lbnRbMF0ucGFyZW50Tm9kZTpuLmFwcGVuZFRvKSxyWzBdIT10aGlzLmVsZW1lbnRbMF0mJiEvKGZpeGVkfGFic29sdXRlKS8udGVzdChyLmNzcygicG9zaXRpb24iKSkmJnIuY3NzKCJwb3NpdGlvbiIsImFic29sdXRlIikscn0sX2FkanVzdE9mZnNldEZyb21IZWxwZXI6ZnVuY3Rpb24odCl7dHlwZW9mIHQ9PSJzdHJpbmciJiYodD10LnNwbGl0KCIgIikpLGUuaXNBcnJheSh0KSYmKHQ9e2xlZnQ6K3RbMF0sdG9wOit0WzFdfHwwfSksImxlZnQiaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dC5sZWZ0K3RoaXMubWFyZ2lucy5sZWZ0KSwicmlnaHQiaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10LnJpZ2h0K3RoaXMubWFyZ2lucy5sZWZ0KSwidG9wImluIHQmJih0aGlzLm9mZnNldC5jbGljay50b3A9dC50b3ArdGhpcy5tYXJnaW5zLnRvcCksImJvdHRvbSJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXQuYm90dG9tK3RoaXMubWFyZ2lucy50b3ApfSxfZ2V0UGFyZW50T2Zmc2V0OmZ1bmN0aW9uKCl7dGhpcy5vZmZzZXRQYXJlbnQ9dGhpcy5oZWxwZXIub2Zmc2V0UGFyZW50KCk7dmFyIHQ9dGhpcy5vZmZzZXRQYXJlbnQub2Zmc2V0KCk7dGhpcy5jc3NQb3NpdGlvbj09ImFic29sdXRlIiYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiZlLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKSYmKHQubGVmdCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpLHQudG9wKz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSk7aWYodGhpcy5vZmZzZXRQYXJlbnRbMF09PWRvY3VtZW50LmJvZHl8fHRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUmJnRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09Imh0bWwiJiZlLmJyb3dzZXIubXNpZSl0PXt0b3A6MCxsZWZ0OjB9O3JldHVybnt0b3A6dC50b3ArKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApLGxlZnQ6dC5sZWZ0KyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCl9fSxfZ2V0UmVsYXRpdmVPZmZzZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLmNzc1Bvc2l0aW9uPT0icmVsYXRpdmUiKXt2YXIgZT10aGlzLmVsZW1lbnQucG9zaXRpb24oKTtyZXR1cm57dG9wOmUudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoInRvcCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksbGVmdDplLmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcygibGVmdCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfX1yZXR1cm57dG9wOjAsbGVmdDowfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5MZWZ0IiksMTApfHwwLHRvcDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5Ub3AiKSwxMCl8fDAscmlnaHQ6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luUmlnaHQiKSwxMCl8fDAsYm90dG9tOnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoIm1hcmdpbkJvdHRvbSIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3QuY29udGFpbm1lbnQ9PSJwYXJlbnQiJiYodC5jb250YWlubWVudD10aGlzLmhlbHBlclswXS5wYXJlbnROb2RlKTtpZih0LmNvbnRhaW5tZW50PT0iZG9jdW1lbnQifHx0LmNvbnRhaW5tZW50PT0id2luZG93Iil0aGlzLmNvbnRhaW5tZW50PVt0LmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiPzA6ZSh3aW5kb3cpLnNjcm9sbExlZnQoKS10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/MDplKHdpbmRvdykuc2Nyb2xsVG9wKCktdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AsKHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/MDplKHdpbmRvdykuc2Nyb2xsTGVmdCgpKStlKHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/ZG9jdW1lbnQ6d2luZG93KS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/MDplKHdpbmRvdykuc2Nyb2xsVG9wKCkpKyhlKHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/ZG9jdW1lbnQ6d2luZG93KS5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF07aWYoIS9eKGRvY3VtZW50fHdpbmRvd3xwYXJlbnQpJC8udGVzdCh0LmNvbnRhaW5tZW50KSYmdC5jb250YWlubWVudC5jb25zdHJ1Y3RvciE9QXJyYXkpe3ZhciBuPWUodC5jb250YWlubWVudCkscj1uWzBdO2lmKCFyKXJldHVybjt2YXIgaT1uLm9mZnNldCgpLHM9ZShyKS5jc3MoIm92ZXJmbG93IikhPSJoaWRkZW4iO3RoaXMuY29udGFpbm1lbnQ9WyhwYXJzZUludChlKHIpLmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoZShyKS5jc3MoInBhZGRpbmdMZWZ0IiksMTApfHwwKSwocGFyc2VJbnQoZShyKS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoZShyKS5jc3MoInBhZGRpbmdUb3AiKSwxMCl8fDApLChzP01hdGgubWF4KHIuc2Nyb2xsV2lkdGgsci5vZmZzZXRXaWR0aCk6ci5vZmZzZXRXaWR0aCktKHBhcnNlSW50KGUocikuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApLShwYXJzZUludChlKHIpLmNzcygicGFkZGluZ1JpZ2h0IiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LXRoaXMubWFyZ2lucy5yaWdodCwocz9NYXRoLm1heChyLnNjcm9sbEhlaWdodCxyLm9mZnNldEhlaWdodCk6ci5vZmZzZXRIZWlnaHQpLShwYXJzZUludChlKHIpLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApLShwYXJzZUludChlKHIpLmNzcygicGFkZGluZ0JvdHRvbSIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcC10aGlzLm1hcmdpbnMuYm90dG9tXSx0aGlzLnJlbGF0aXZlX2NvbnRhaW5lcj1ufWVsc2UgdC5jb250YWlubWVudC5jb25zdHJ1Y3Rvcj09QXJyYXkmJih0aGlzLmNvbnRhaW5tZW50PXQuY29udGFpbm1lbnQpfSxfY29udmVydFBvc2l0aW9uVG86ZnVuY3Rpb24odCxuKXtufHwobj10aGlzLnBvc2l0aW9uKTt2YXIgcj10PT0iYWJzb2x1dGUiPzE6LTEsaT10aGlzLm9wdGlvbnMscz10aGlzLmNzc1Bvc2l0aW9uIT0iYWJzb2x1dGUifHx0aGlzLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJiEhZS5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSk/dGhpcy5zY3JvbGxQYXJlbnQ6dGhpcy5vZmZzZXRQYXJlbnQsbz0vKGh0bWx8Ym9keSkvaS50ZXN0KHNbMF0udGFnTmFtZSk7cmV0dXJue3RvcDpuLnRvcCt0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3Aqcit0aGlzLm9mZnNldC5wYXJlbnQudG9wKnItKHRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOm8/MDpzLnNjcm9sbFRvcCgpKSpyLGxlZnQ6bi5sZWZ0K3RoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQqcit0aGlzLm9mZnNldC5wYXJlbnQubGVmdCpyLSh0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6bz8wOnMuc2Nyb2xsTGVmdCgpKSpyfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zLHI9dGhpcy5jc3NQb3NpdGlvbiE9ImFic29sdXRlInx8dGhpcy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiYhIWUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LGk9LyhodG1sfGJvZHkpL2kudGVzdChyWzBdLnRhZ05hbWUpLHM9dC5wYWdlWCxvPXQucGFnZVk7aWYodGhpcy5vcmlnaW5hbFBvc2l0aW9uKXt2YXIgdTtpZih0aGlzLmNvbnRhaW5tZW50KXtpZih0aGlzLnJlbGF0aXZlX2NvbnRhaW5lcil7dmFyIGE9dGhpcy5yZWxhdGl2ZV9jb250YWluZXIub2Zmc2V0KCk7dT1bdGhpcy5jb250YWlubWVudFswXSthLmxlZnQsdGhpcy5jb250YWlubWVudFsxXSthLnRvcCx0aGlzLmNvbnRhaW5tZW50WzJdK2EubGVmdCx0aGlzLmNvbnRhaW5tZW50WzNdK2EudG9wXX1lbHNlIHU9dGhpcy5jb250YWlubWVudDt0LnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dVswXSYmKHM9dVswXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSx0LnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx1WzFdJiYobz11WzFdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCksdC5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PnVbMl0mJihzPXVbMl0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksdC5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A+dVszXSYmKG89dVszXSt0aGlzLm9mZnNldC5jbGljay50b3ApfWlmKG4uZ3JpZCl7dmFyIGY9bi5ncmlkWzFdP3RoaXMub3JpZ2luYWxQYWdlWStNYXRoLnJvdW5kKChvLXRoaXMub3JpZ2luYWxQYWdlWSkvbi5ncmlkWzFdKSpuLmdyaWRbMV06dGhpcy5vcmlnaW5hbFBhZ2VZO289dT9mLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx1WzFdfHxmLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD51WzNdP2YtdGhpcy5vZmZzZXQuY2xpY2sudG9wPHVbMV0/ZituLmdyaWRbMV06Zi1uLmdyaWRbMV06ZjpmO3ZhciBsPW4uZ3JpZFswXT90aGlzLm9yaWdpbmFsUGFnZVgrTWF0aC5yb3VuZCgocy10aGlzLm9yaWdpbmFsUGFnZVgpL24uZ3JpZFswXSkqbi5ncmlkWzBdOnRoaXMub3JpZ2luYWxQYWdlWDtzPXU/bC10aGlzLm9mZnNldC5jbGljay5sZWZ0PHVbMF18fGwtdGhpcy5vZmZzZXQuY2xpY2subGVmdD51WzJdP2wtdGhpcy5vZmZzZXQuY2xpY2subGVmdDx1WzBdP2wrbi5ncmlkWzBdOmwtbi5ncmlkWzBdOmw6bH19cmV0dXJue3RvcDpvLXRoaXMub2Zmc2V0LmNsaWNrLnRvcC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCsodGhpcy5jc3NQb3NpdGlvbj09ImZpeGVkIj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6aT8wOnIuc2Nyb2xsVG9wKCkpLGxlZnQ6cy10aGlzLm9mZnNldC5jbGljay5sZWZ0LXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQrKHRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTppPzA6ci5zY3JvbGxMZWZ0KCkpfX0sX2NsZWFyOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXIucmVtb3ZlQ2xhc3MoInVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpLHRoaXMuaGVscGVyWzBdIT10aGlzLmVsZW1lbnRbMF0mJiF0aGlzLmNhbmNlbEhlbHBlclJlbW92YWwmJnRoaXMuaGVscGVyLnJlbW92ZSgpLHRoaXMuaGVscGVyPW51bGwsdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsPSExfSxfdHJpZ2dlcjpmdW5jdGlvbih0LG4scil7cmV0dXJuIHI9cnx8dGhpcy5fdWlIYXNoKCksZS51aS5wbHVnaW4uY2FsbCh0aGlzLHQsW24scl0pLHQ9PSJkcmFnIiYmKHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIikpLGUuV2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5jYWxsKHRoaXMsdCxuLHIpfSxwbHVnaW5zOnt9LF91aUhhc2g6ZnVuY3Rpb24oZSl7cmV0dXJue2hlbHBlcjp0aGlzLmhlbHBlcixwb3NpdGlvbjp0aGlzLnBvc2l0aW9uLG9yaWdpbmFsUG9zaXRpb246dGhpcy5vcmlnaW5hbFBvc2l0aW9uLG9mZnNldDp0aGlzLnBvc2l0aW9uQWJzfX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsImNvbm5lY3RUb1NvcnRhYmxlIix7c3RhcnQ6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLGk9ci5vcHRpb25zLHM9ZS5leHRlbmQoe30sbix7aXRlbTpyLmVsZW1lbnR9KTtyLnNvcnRhYmxlcz1bXSxlKGkuY29ubmVjdFRvU29ydGFibGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgbj1lLmRhdGEodGhpcywic29ydGFibGUiKTtuJiYhbi5vcHRpb25zLmRpc2FibGVkJiYoci5zb3J0YWJsZXMucHVzaCh7aW5zdGFuY2U6bixzaG91bGRSZXZlcnQ6bi5vcHRpb25zLnJldmVydH0pLG4ucmVmcmVzaFBvc2l0aW9ucygpLG4uX3RyaWdnZXIoImFjdGl2YXRlIix0LHMpKX0pfSxzdG9wOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKSxpPWUuZXh0ZW5kKHt9LG4se2l0ZW06ci5lbGVtZW50fSk7ZS5lYWNoKHIuc29ydGFibGVzLGZ1bmN0aW9uKCl7dGhpcy5pbnN0YW5jZS5pc092ZXI/KHRoaXMuaW5zdGFuY2UuaXNPdmVyPTAsci5jYW5jZWxIZWxwZXJSZW1vdmFsPSEwLHRoaXMuaW5zdGFuY2UuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSx0aGlzLnNob3VsZFJldmVydCYmKHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5yZXZlcnQ9ITApLHRoaXMuaW5zdGFuY2UuX21vdXNlU3RvcCh0KSx0aGlzLmluc3RhbmNlLm9wdGlvbnMuaGVscGVyPXRoaXMuaW5zdGFuY2Uub3B0aW9ucy5faGVscGVyLHIub3B0aW9ucy5oZWxwZXI9PSJvcmlnaW5hbCImJnRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW0uY3NzKHt0b3A6ImF1dG8iLGxlZnQ6ImF1dG8ifSkpOih0aGlzLmluc3RhbmNlLmNhbmNlbEhlbHBlclJlbW92YWw9ITEsdGhpcy5pbnN0YW5jZS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsdCxpKSl9KX0sZHJhZzpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgiZHJhZ2dhYmxlIiksaT10aGlzLHM9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vZmZzZXQuY2xpY2sudG9wLHI9dGhpcy5vZmZzZXQuY2xpY2subGVmdCxpPXRoaXMucG9zaXRpb25BYnMudG9wLHM9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LG89dC5oZWlnaHQsdT10LndpZHRoLGE9dC50b3AsZj10LmxlZnQ7cmV0dXJuIGUudWkuaXNPdmVyKGkrbixzK3IsYSxmLG8sdSl9O2UuZWFjaChyLnNvcnRhYmxlcyxmdW5jdGlvbihzKXt0aGlzLmluc3RhbmNlLnBvc2l0aW9uQWJzPXIucG9zaXRpb25BYnMsdGhpcy5pbnN0YW5jZS5oZWxwZXJQcm9wb3J0aW9ucz1yLmhlbHBlclByb3BvcnRpb25zLHRoaXMuaW5zdGFuY2Uub2Zmc2V0LmNsaWNrPXIub2Zmc2V0LmNsaWNrLHRoaXMuaW5zdGFuY2UuX2ludGVyc2VjdHNXaXRoKHRoaXMuaW5zdGFuY2UuY29udGFpbmVyQ2FjaGUpPyh0aGlzLmluc3RhbmNlLmlzT3Zlcnx8KHRoaXMuaW5zdGFuY2UuaXNPdmVyPTEsdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbT1lKGkpLmNsb25lKCkucmVtb3ZlQXR0cigiaWQiKS5hcHBlbmRUbyh0aGlzLmluc3RhbmNlLmVsZW1lbnQpLmRhdGEoInNvcnRhYmxlLWl0ZW0iLCEwKSx0aGlzLmluc3RhbmNlLm9wdGlvbnMuX2hlbHBlcj10aGlzLmluc3RhbmNlLm9wdGlvbnMuaGVscGVyLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxwZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbi5oZWxwZXJbMF19LHQudGFyZ2V0PXRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW1bMF0sdGhpcy5pbnN0YW5jZS5fbW91c2VDYXB0dXJlKHQsITApLHRoaXMuaW5zdGFuY2UuX21vdXNlU3RhcnQodCwhMCwhMCksdGhpcy5pbnN0YW5jZS5vZmZzZXQuY2xpY2sudG9wPXIub2Zmc2V0LmNsaWNrLnRvcCx0aGlzLmluc3RhbmNlLm9mZnNldC5jbGljay5sZWZ0PXIub2Zmc2V0LmNsaWNrLmxlZnQsdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LmxlZnQtPXIub2Zmc2V0LnBhcmVudC5sZWZ0LXRoaXMuaW5zdGFuY2Uub2Zmc2V0LnBhcmVudC5sZWZ0LHRoaXMuaW5zdGFuY2Uub2Zmc2V0LnBhcmVudC50b3AtPXIub2Zmc2V0LnBhcmVudC50b3AtdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LnRvcCxyLl90cmlnZ2VyKCJ0b1NvcnRhYmxlIix0KSxyLmRyb3BwZWQ9dGhpcy5pbnN0YW5jZS5lbGVtZW50LHIuY3VycmVudEl0ZW09ci5lbGVtZW50LHRoaXMuaW5zdGFuY2UuZnJvbU91dHNpZGU9ciksdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbSYmdGhpcy5pbnN0YW5jZS5fbW91c2VEcmFnKHQpKTp0aGlzLmluc3RhbmNlLmlzT3ZlciYmKHRoaXMuaW5zdGFuY2UuaXNPdmVyPTAsdGhpcy5pbnN0YW5jZS5jYW5jZWxIZWxwZXJSZW1vdmFsPSEwLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5yZXZlcnQ9ITEsdGhpcy5pbnN0YW5jZS5fdHJpZ2dlcigib3V0Iix0LHRoaXMuaW5zdGFuY2UuX3VpSGFzaCh0aGlzLmluc3RhbmNlKSksdGhpcy5pbnN0YW5jZS5fbW91c2VTdG9wKHQsITApLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxwZXI9dGhpcy5pbnN0YW5jZS5vcHRpb25zLl9oZWxwZXIsdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbS5yZW1vdmUoKSx0aGlzLmluc3RhbmNlLnBsYWNlaG9sZGVyJiZ0aGlzLmluc3RhbmNlLnBsYWNlaG9sZGVyLnJlbW92ZSgpLHIuX3RyaWdnZXIoImZyb21Tb3J0YWJsZSIsdCksci5kcm9wcGVkPSExKX0pfX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwiY3Vyc29yIix7c3RhcnQ6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKCJib2R5IiksaT1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ci5jc3MoImN1cnNvciIpJiYoaS5fY3Vyc29yPXIuY3NzKCJjdXJzb3IiKSksci5jc3MoImN1cnNvciIsaS5jdXJzb3IpfSxzdG9wOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKS5vcHRpb25zO3IuX2N1cnNvciYmZSgiYm9keSIpLmNzcygiY3Vyc29yIixyLl9jdXJzb3IpfX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwib3BhY2l0eSIse3N0YXJ0OmZ1bmN0aW9uKHQsbil7dmFyIHI9ZShuLmhlbHBlciksaT1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ci5jc3MoIm9wYWNpdHkiKSYmKGkuX29wYWNpdHk9ci5jc3MoIm9wYWNpdHkiKSksci5jc3MoIm9wYWNpdHkiLGkub3BhY2l0eSl9LHN0b3A6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ci5fb3BhY2l0eSYmZShuLmhlbHBlcikuY3NzKCJvcGFjaXR5IixyLl9vcGFjaXR5KX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInNjcm9sbCIse3N0YXJ0OmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKTtyLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJnIuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWUhPSJIVE1MIiYmKHIub3ZlcmZsb3dPZmZzZXQ9ci5zY3JvbGxQYXJlbnQub2Zmc2V0KCkpfSxkcmFnOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKSxpPXIub3B0aW9ucyxzPSExO2lmKHIuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmci5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSE9IkhUTUwiKXtpZighaS5heGlzfHxpLmF4aXMhPSJ4IilyLm92ZXJmbG93T2Zmc2V0LnRvcCtyLnNjcm9sbFBhcmVudFswXS5vZmZzZXRIZWlnaHQtdC5wYWdlWTxpLnNjcm9sbFNlbnNpdGl2aXR5P3Iuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1zPXIuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcCtpLnNjcm9sbFNwZWVkOnQucGFnZVktci5vdmVyZmxvd09mZnNldC50b3A8aS5zY3JvbGxTZW5zaXRpdml0eSYmKHIuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1zPXIuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcC1pLnNjcm9sbFNwZWVkKTtpZighaS5heGlzfHxpLmF4aXMhPSJ5IilyLm92ZXJmbG93T2Zmc2V0LmxlZnQrci5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0V2lkdGgtdC5wYWdlWDxpLnNjcm9sbFNlbnNpdGl2aXR5P3Iuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9cz1yLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0K2kuc2Nyb2xsU3BlZWQ6dC5wYWdlWC1yLm92ZXJmbG93T2Zmc2V0LmxlZnQ8aS5zY3JvbGxTZW5zaXRpdml0eSYmKHIuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9cz1yLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0LWkuc2Nyb2xsU3BlZWQpfWVsc2V7aWYoIWkuYXhpc3x8aS5heGlzIT0ieCIpdC5wYWdlWS1lKGRvY3VtZW50KS5zY3JvbGxUb3AoKTxpLnNjcm9sbFNlbnNpdGl2aXR5P3M9ZShkb2N1bWVudCkuc2Nyb2xsVG9wKGUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpLWkuc2Nyb2xsU3BlZWQpOmUod2luZG93KS5oZWlnaHQoKS0odC5wYWdlWS1lKGRvY3VtZW50KS5zY3JvbGxUb3AoKSk8aS5zY3JvbGxTZW5zaXRpdml0eSYmKHM9ZShkb2N1bWVudCkuc2Nyb2xsVG9wKGUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpK2kuc2Nyb2xsU3BlZWQpKTtpZighaS5heGlzfHxpLmF4aXMhPSJ5Iil0LnBhZ2VYLWUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKTxpLnNjcm9sbFNlbnNpdGl2aXR5P3M9ZShkb2N1bWVudCkuc2Nyb2xsTGVmdChlKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCktaS5zY3JvbGxTcGVlZCk6ZSh3aW5kb3cpLndpZHRoKCktKHQucGFnZVgtZShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKTxpLnNjcm9sbFNlbnNpdGl2aXR5JiYocz1lKGRvY3VtZW50KS5zY3JvbGxMZWZ0KGUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKStpLnNjcm9sbFNwZWVkKSl9cyE9PSExJiZlLnVpLmRkbWFuYWdlciYmIWkuZHJvcEJlaGF2aW91ciYmZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMocix0KX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInNuYXAiLHtzdGFydDpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgiZHJhZ2dhYmxlIiksaT1yLm9wdGlvbnM7ci5zbmFwRWxlbWVudHM9W10sZShpLnNuYXAuY29uc3RydWN0b3IhPVN0cmluZz9pLnNuYXAuaXRlbXN8fCI6ZGF0YShkcmFnZ2FibGUpIjppLnNuYXApLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLG49dC5vZmZzZXQoKTt0aGlzIT1yLmVsZW1lbnRbMF0mJnIuc25hcEVsZW1lbnRzLnB1c2goe2l0ZW06dGhpcyx3aWR0aDp0Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dC5vdXRlckhlaWdodCgpLHRvcDpuLnRvcCxsZWZ0Om4ubGVmdH0pfSl9LGRyYWc6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLGk9ci5vcHRpb25zLHM9aS5zbmFwVG9sZXJhbmNlLG89bi5vZmZzZXQubGVmdCx1PW8rci5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxhPW4ub2Zmc2V0LnRvcCxmPWErci5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQ7Zm9yKHZhciBsPXIuc25hcEVsZW1lbnRzLmxlbmd0aC0xO2w+PTA7bC0tKXt2YXIgYz1yLnNuYXBFbGVtZW50c1tsXS5sZWZ0LGg9YytyLnNuYXBFbGVtZW50c1tsXS53aWR0aCxwPXIuc25hcEVsZW1lbnRzW2xdLnRvcCxkPXArci5zbmFwRWxlbWVudHNbbF0uaGVpZ2h0O2lmKCEoYy1zPG8mJm88aCtzJiZwLXM8YSYmYTxkK3N8fGMtczxvJiZvPGgrcyYmcC1zPGYmJmY8ZCtzfHxjLXM8dSYmdTxoK3MmJnAtczxhJiZhPGQrc3x8Yy1zPHUmJnU8aCtzJiZwLXM8ZiYmZjxkK3MpKXtyLnNuYXBFbGVtZW50c1tsXS5zbmFwcGluZyYmci5vcHRpb25zLnNuYXAucmVsZWFzZSYmci5vcHRpb25zLnNuYXAucmVsZWFzZS5jYWxsKHIuZWxlbWVudCx0LGUuZXh0ZW5kKHIuX3VpSGFzaCgpLHtzbmFwSXRlbTpyLnNuYXBFbGVtZW50c1tsXS5pdGVtfSkpLHIuc25hcEVsZW1lbnRzW2xdLnNuYXBwaW5nPSExO2NvbnRpbnVlfWlmKGkuc25hcE1vZGUhPSJpbm5lciIpe3ZhciB2PU1hdGguYWJzKHAtZik8PXMsbT1NYXRoLmFicyhkLWEpPD1zLGc9TWF0aC5hYnMoYy11KTw9cyx5PU1hdGguYWJzKGgtbyk8PXM7diYmKG4ucG9zaXRpb24udG9wPXIuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDpwLXIuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGxlZnQ6MH0pLnRvcC1yLm1hcmdpbnMudG9wKSxtJiYobi5wb3NpdGlvbi50b3A9ci5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOmQsbGVmdDowfSkudG9wLXIubWFyZ2lucy50b3ApLGcmJihuLnBvc2l0aW9uLmxlZnQ9ci5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOjAsbGVmdDpjLXIuaGVscGVyUHJvcG9ydGlvbnMud2lkdGh9KS5sZWZ0LXIubWFyZ2lucy5sZWZ0KSx5JiYobi5wb3NpdGlvbi5sZWZ0PXIuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6aH0pLmxlZnQtci5tYXJnaW5zLmxlZnQpfXZhciBiPXZ8fG18fGd8fHk7aWYoaS5zbmFwTW9kZSE9Im91dGVyIil7dmFyIHY9TWF0aC5hYnMocC1hKTw9cyxtPU1hdGguYWJzKGQtZik8PXMsZz1NYXRoLmFicyhjLW8pPD1zLHk9TWF0aC5hYnMoaC11KTw9czt2JiYobi5wb3NpdGlvbi50b3A9ci5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOnAsbGVmdDowfSkudG9wLXIubWFyZ2lucy50b3ApLG0mJihuLnBvc2l0aW9uLnRvcD1yLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6ZC1yLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxsZWZ0OjB9KS50b3Atci5tYXJnaW5zLnRvcCksZyYmKG4ucG9zaXRpb24ubGVmdD1yLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6MCxsZWZ0OmN9KS5sZWZ0LXIubWFyZ2lucy5sZWZ0KSx5JiYobi5wb3NpdGlvbi5sZWZ0PXIuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6aC1yLmhlbHBlclByb3BvcnRpb25zLndpZHRofSkubGVmdC1yLm1hcmdpbnMubGVmdCl9IXIuc25hcEVsZW1lbnRzW2xdLnNuYXBwaW5nJiYodnx8bXx8Z3x8eXx8YikmJnIub3B0aW9ucy5zbmFwLnNuYXAmJnIub3B0aW9ucy5zbmFwLnNuYXAuY2FsbChyLmVsZW1lbnQsdCxlLmV4dGVuZChyLl91aUhhc2goKSx7c25hcEl0ZW06ci5zbmFwRWxlbWVudHNbbF0uaXRlbX0pKSxyLnNuYXBFbGVtZW50c1tsXS5zbmFwcGluZz12fHxtfHxnfHx5fHxifX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInN0YWNrIix7c3RhcnQ6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnMsaT1lLm1ha2VBcnJheShlKHIuc3RhY2spKS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuKHBhcnNlSW50KGUodCkuY3NzKCJ6SW5kZXgiKSwxMCl8fDApLShwYXJzZUludChlKG4pLmNzcygiekluZGV4IiksMTApfHwwKX0pO2lmKCFpLmxlbmd0aClyZXR1cm47dmFyIHM9cGFyc2VJbnQoaVswXS5zdHlsZS56SW5kZXgpfHwwO2UoaSkuZWFjaChmdW5jdGlvbihlKXt0aGlzLnN0eWxlLnpJbmRleD1zK2V9KSx0aGlzWzBdLnN0eWxlLnpJbmRleD1zK2kubGVuZ3RofX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwiekluZGV4Iix7c3RhcnQ6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKG4uaGVscGVyKSxpPWUodGhpcykuZGF0YSgiZHJhZ2dhYmxlIikub3B0aW9ucztyLmNzcygiekluZGV4IikmJihpLl96SW5kZXg9ci5jc3MoInpJbmRleCIpKSxyLmNzcygiekluZGV4IixpLnpJbmRleCl9LHN0b3A6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ci5fekluZGV4JiZlKG4uaGVscGVyKS5jc3MoInpJbmRleCIsci5fekluZGV4KX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS53aWRnZXQoInVpLmRyb3BwYWJsZSIse3ZlcnNpb246IjEuOS4wIix3aWRnZXRFdmVudFByZWZpeDoiZHJvcCIsb3B0aW9uczp7YWNjZXB0OiIqIixhY3RpdmVDbGFzczohMSxhZGRDbGFzc2VzOiEwLGdyZWVkeTohMSxob3ZlckNsYXNzOiExLHNjb3BlOiJkZWZhdWx0Iix0b2xlcmFuY2U6ImludGVyc2VjdCJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsbj10LmFjY2VwdDt0aGlzLmlzb3Zlcj0wLHRoaXMuaXNvdXQ9MSx0aGlzLmFjY2VwdD1lLmlzRnVuY3Rpb24obik/bjpmdW5jdGlvbihlKXtyZXR1cm4gZS5pcyhuKX0sdGhpcy5wcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5lbGVtZW50WzBdLm9mZnNldFdpZHRoLGhlaWdodDp0aGlzLmVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0fSxlLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3Quc2NvcGVdPWUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5zY29wZV18fFtdLGUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5zY29wZV0ucHVzaCh0aGlzKSx0LmFkZENsYXNzZXMmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJvcHBhYmxlIil9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIHQ9ZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0aGlzLm9wdGlvbnMuc2NvcGVdO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRbbl09PXRoaXMmJnQuc3BsaWNlKG4sMSk7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1kcm9wcGFibGUgdWktZHJvcHBhYmxlLWRpc2FibGVkIil9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxuKXt0PT0iYWNjZXB0IiYmKHRoaXMuYWNjZXB0PWUuaXNGdW5jdGlvbihuKT9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLmlzKG4pfSksZS5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfYWN0aXZhdGU6ZnVuY3Rpb24odCl7dmFyIG49ZS51aS5kZG1hbmFnZXIuY3VycmVudDt0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MmJnRoaXMuZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpLG4mJnRoaXMuX3RyaWdnZXIoImFjdGl2YXRlIix0LHRoaXMudWkobikpfSxfZGVhY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgbj1lLnVpLmRkbWFuYWdlci5jdXJyZW50O3RoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyksbiYmdGhpcy5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsdCx0aGlzLnVpKG4pKX0sX292ZXI6ZnVuY3Rpb24odCl7dmFyIG49ZS51aS5kZG1hbmFnZXIuY3VycmVudDtpZighbnx8KG4uY3VycmVudEl0ZW18fG4uZWxlbWVudClbMF09PXRoaXMuZWxlbWVudFswXSlyZXR1cm47dGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sbi5jdXJyZW50SXRlbXx8bi5lbGVtZW50KSYmKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpLHRoaXMuX3RyaWdnZXIoIm92ZXIiLHQsdGhpcy51aShuKSkpfSxfb3V0OmZ1bmN0aW9uKHQpe3ZhciBuPWUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7aWYoIW58fChuLmN1cnJlbnRJdGVtfHxuLmVsZW1lbnQpWzBdPT10aGlzLmVsZW1lbnRbMF0pcmV0dXJuO3RoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLG4uY3VycmVudEl0ZW18fG4uZWxlbWVudCkmJih0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzKSx0aGlzLl90cmlnZ2VyKCJvdXQiLHQsdGhpcy51aShuKSkpfSxfZHJvcDpmdW5jdGlvbih0LG4pe3ZhciByPW58fGUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7aWYoIXJ8fChyLmN1cnJlbnRJdGVtfHxyLmVsZW1lbnQpWzBdPT10aGlzLmVsZW1lbnRbMF0pcmV0dXJuITE7dmFyIGk9ITE7cmV0dXJuIHRoaXMuZWxlbWVudC5maW5kKCI6ZGF0YShkcm9wcGFibGUpIikubm90KCIudWktZHJhZ2dhYmxlLWRyYWdnaW5nIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUuZGF0YSh0aGlzLCJkcm9wcGFibGUiKTtpZih0Lm9wdGlvbnMuZ3JlZWR5JiYhdC5vcHRpb25zLmRpc2FibGVkJiZ0Lm9wdGlvbnMuc2NvcGU9PXIub3B0aW9ucy5zY29wZSYmdC5hY2NlcHQuY2FsbCh0LmVsZW1lbnRbMF0sci5jdXJyZW50SXRlbXx8ci5lbGVtZW50KSYmZS51aS5pbnRlcnNlY3QocixlLmV4dGVuZCh0LHtvZmZzZXQ6dC5lbGVtZW50Lm9mZnNldCgpfSksdC5vcHRpb25zLnRvbGVyYW5jZSkpcmV0dXJuIGk9ITAsITF9KSxpPyExOnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLHIuY3VycmVudEl0ZW18fHIuZWxlbWVudCk/KHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyksdGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyksdGhpcy5fdHJpZ2dlcigiZHJvcCIsdCx0aGlzLnVpKHIpKSx0aGlzLmVsZW1lbnQpOiExfSx1aTpmdW5jdGlvbihlKXtyZXR1cm57ZHJhZ2dhYmxlOmUuY3VycmVudEl0ZW18fGUuZWxlbWVudCxoZWxwZXI6ZS5oZWxwZXIscG9zaXRpb246ZS5wb3NpdGlvbixvZmZzZXQ6ZS5wb3NpdGlvbkFic319fSksZS51aS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCxuLHIpe2lmKCFuLm9mZnNldClyZXR1cm4hMTt2YXIgaT0odC5wb3NpdGlvbkFic3x8dC5wb3NpdGlvbi5hYnNvbHV0ZSkubGVmdCxzPWkrdC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxvPSh0LnBvc2l0aW9uQWJzfHx0LnBvc2l0aW9uLmFic29sdXRlKS50b3AsdT1vK3QuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGE9bi5vZmZzZXQubGVmdCxmPWErbi5wcm9wb3J0aW9ucy53aWR0aCxsPW4ub2Zmc2V0LnRvcCxjPWwrbi5wcm9wb3J0aW9ucy5oZWlnaHQ7c3dpdGNoKHIpe2Nhc2UiZml0IjpyZXR1cm4gYTw9aSYmczw9ZiYmbDw9byYmdTw9YztjYXNlImludGVyc2VjdCI6cmV0dXJuIGE8aSt0LmhlbHBlclByb3BvcnRpb25zLndpZHRoLzImJnMtdC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yPGYmJmw8byt0LmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yJiZ1LXQuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI8YztjYXNlInBvaW50ZXIiOnZhciBoPSh0LnBvc2l0aW9uQWJzfHx0LnBvc2l0aW9uLmFic29sdXRlKS5sZWZ0Kyh0LmNsaWNrT2Zmc2V0fHx0Lm9mZnNldC5jbGljaykubGVmdCxwPSh0LnBvc2l0aW9uQWJzfHx0LnBvc2l0aW9uLmFic29sdXRlKS50b3ArKHQuY2xpY2tPZmZzZXR8fHQub2Zmc2V0LmNsaWNrKS50b3AsZD1lLnVpLmlzT3ZlcihwLGgsbCxhLG4ucHJvcG9ydGlvbnMuaGVpZ2h0LG4ucHJvcG9ydGlvbnMud2lkdGgpO3JldHVybiBkO2Nhc2UidG91Y2giOnJldHVybihvPj1sJiZvPD1jfHx1Pj1sJiZ1PD1jfHxvPGwmJnU+YykmJihpPj1hJiZpPD1mfHxzPj1hJiZzPD1mfHxpPGEmJnM+Zik7ZGVmYXVsdDpyZXR1cm4hMX19LGUudWkuZGRtYW5hZ2VyPXtjdXJyZW50Om51bGwsZHJvcHBhYmxlczp7ImRlZmF1bHQiOltdfSxwcmVwYXJlT2Zmc2V0czpmdW5jdGlvbih0LG4pe3ZhciByPWUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5vcHRpb25zLnNjb3BlXXx8W10saT1uP24udHlwZTpudWxsLHM9KHQuY3VycmVudEl0ZW18fHQuZWxlbWVudCkuZmluZCgiOmRhdGEoZHJvcHBhYmxlKSIpLmFuZFNlbGYoKTtlOmZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXtpZihyW29dLm9wdGlvbnMuZGlzYWJsZWR8fHQmJiFyW29dLmFjY2VwdC5jYWxsKHJbb10uZWxlbWVudFswXSx0LmN1cnJlbnRJdGVtfHx0LmVsZW1lbnQpKWNvbnRpbnVlO2Zvcih2YXIgdT0wO3U8cy5sZW5ndGg7dSsrKWlmKHNbdV09PXJbb10uZWxlbWVudFswXSl7cltvXS5wcm9wb3J0aW9ucy5oZWlnaHQ9MDtjb250aW51ZSBlfXJbb10udmlzaWJsZT1yW29dLmVsZW1lbnQuY3NzKCJkaXNwbGF5IikhPSJub25lIjtpZighcltvXS52aXNpYmxlKWNvbnRpbnVlO2k9PSJtb3VzZWRvd24iJiZyW29dLl9hY3RpdmF0ZS5jYWxsKHJbb10sbikscltvXS5vZmZzZXQ9cltvXS5lbGVtZW50Lm9mZnNldCgpLHJbb10ucHJvcG9ydGlvbnM9e3dpZHRoOnJbb10uZWxlbWVudFswXS5vZmZzZXRXaWR0aCxoZWlnaHQ6cltvXS5lbGVtZW50WzBdLm9mZnNldEhlaWdodH19fSxkcm9wOmZ1bmN0aW9uKHQsbil7dmFyIHI9ITE7cmV0dXJuIGUuZWFjaChlLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3Qub3B0aW9ucy5zY29wZV18fFtdLGZ1bmN0aW9uKCl7aWYoIXRoaXMub3B0aW9ucylyZXR1cm47IXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy52aXNpYmxlJiZlLnVpLmludGVyc2VjdCh0LHRoaXMsdGhpcy5vcHRpb25zLnRvbGVyYW5jZSkmJihyPXRoaXMuX2Ryb3AuY2FsbCh0aGlzLG4pfHxyKSwhdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLnZpc2libGUmJnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLHQuY3VycmVudEl0ZW18fHQuZWxlbWVudCkmJih0aGlzLmlzb3V0PTEsdGhpcy5pc292ZXI9MCx0aGlzLl9kZWFjdGl2YXRlLmNhbGwodGhpcyxuKSl9KSxyfSxkcmFnU3RhcnQ6ZnVuY3Rpb24odCxuKXt0LmVsZW1lbnQucGFyZW50c1VudGlsKCJib2R5IikuYmluZCgic2Nyb2xsLmRyb3BwYWJsZSIsZnVuY3Rpb24oKXt0Lm9wdGlvbnMucmVmcmVzaFBvc2l0aW9uc3x8ZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModCxuKX0pfSxkcmFnOmZ1bmN0aW9uKHQsbil7dC5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnMmJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHQsbiksZS5lYWNoKGUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5vcHRpb25zLnNjb3BlXXx8W10sZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fHRoaXMuZ3JlZWR5Q2hpbGR8fCF0aGlzLnZpc2libGUpcmV0dXJuO3ZhciByPWUudWkuaW50ZXJzZWN0KHQsdGhpcyx0aGlzLm9wdGlvbnMudG9sZXJhbmNlKSxpPSFyJiZ0aGlzLmlzb3Zlcj09MT8iaXNvdXQiOnImJnRoaXMuaXNvdmVyPT0wPyJpc292ZXIiOm51bGw7aWYoIWkpcmV0dXJuO3ZhciBzO2lmKHRoaXMub3B0aW9ucy5ncmVlZHkpe3ZhciBvPXRoaXMub3B0aW9ucy5zY29wZSx1PXRoaXMuZWxlbWVudC5wYXJlbnRzKCI6ZGF0YShkcm9wcGFibGUpIikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGF0YSh0aGlzLCJkcm9wcGFibGUiKS5vcHRpb25zLnNjb3BlPT09b30pO3UubGVuZ3RoJiYocz1lLmRhdGEodVswXSwiZHJvcHBhYmxlIikscy5ncmVlZHlDaGlsZD1pPT0iaXNvdmVyIj8xOjApfXMmJmk9PSJpc292ZXIiJiYocy5pc292ZXI9MCxzLmlzb3V0PTEscy5fb3V0LmNhbGwocyxuKSksdGhpc1tpXT0xLHRoaXNbaT09Imlzb3V0Ij8iaXNvdmVyIjoiaXNvdXQiXT0wLHRoaXNbaT09Imlzb3ZlciI/Il9vdmVyIjoiX291dCJdLmNhbGwodGhpcyxuKSxzJiZpPT0iaXNvdXQiJiYocy5pc291dD0wLHMuaXNvdmVyPTEscy5fb3Zlci5jYWxsKHMsbikpfSl9LGRyYWdTdG9wOmZ1bmN0aW9uKHQsbil7dC5lbGVtZW50LnBhcmVudHNVbnRpbCgiYm9keSIpLnVuYmluZCgic2Nyb2xsLmRyb3BwYWJsZSIpLHQub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zfHxlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0LG4pfX19KShqUXVlcnkpO2pRdWVyeS5lZmZlY3RzfHxmdW5jdGlvbihlLHQpe3ZhciBuPWUudWlCYWNrQ29tcGF0IT09ITEscj0idWktZWZmZWN0cy0iO2UuZWZmZWN0cz17ZWZmZWN0Ont9fSxmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHAoZSx0LG4pe3ZhciByPWFbdC50eXBlXXx8e307cmV0dXJuIGU9PW51bGw/bnx8IXQuZGVmP251bGw6dC5kZWY6KGU9ci5mbG9vcj9+fmU6cGFyc2VGbG9hdChlKSxpc05hTihlKT90LmRlZjpyLm1vZD8oZStyLm1vZCklci5tb2Q6MD5lPzA6ci5tYXg8ZT9yLm1heDplKX1mdW5jdGlvbiBkKGUpe3ZhciBuPW8oKSxyPW4uX3JnYmE9W107cmV0dXJuIGU9ZS50b0xvd2VyQ2FzZSgpLGgocyxmdW5jdGlvbih0LGkpe3ZhciBzLG89aS5yZS5leGVjKGUpLGE9byYmaS5wYXJzZShvKSxmPWkuc3BhY2V8fCJyZ2JhIjtpZihhKXJldHVybiBzPW5bZl0oYSksblt1W2ZdLmNhY2hlXT1zW3VbZl0uY2FjaGVdLHI9bi5fcmdiYT1zLl9yZ2JhLCExfSksci5sZW5ndGg/KHIuam9pbigpPT09IjAsMCwwLDAiJiZ0LmV4dGVuZChyLGMudHJhbnNwYXJlbnQpLG4pOmNbZV19ZnVuY3Rpb24gdihlLHQsbil7cmV0dXJuIG49KG4rMSklMSxuKjY8MT9lKyh0LWUpKm4qNjpuKjI8MT90Om4qMzwyP2UrKHQtZSkqKDIvMy1uKSo2OmV9dmFyIHI9ImJhY2tncm91bmRDb2xvciBib3JkZXJCb3R0b21Db2xvciBib3JkZXJMZWZ0Q29sb3IgYm9yZGVyUmlnaHRDb2xvciBib3JkZXJUb3BDb2xvciBjb2xvciBjb2x1bW5SdWxlQ29sb3Igb3V0bGluZUNvbG9yIHRleHREZWNvcmF0aW9uQ29sb3IgdGV4dEVtcGhhc2lzQ29sb3IiLnNwbGl0KCIgIiksaT0vXihbXC0rXSk9XHMqKFxkK1wuP1xkKikvLHM9W3tyZTovcmdiYT9cKFxzKihcZHsxLDN9KVxzKixccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pXHMqKD86LFxzKihcZCsoPzpcLlxkKyk/KVxzKik/XCkvLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltlWzFdLGVbMl0sZVszXSxlWzRdXX19LHtyZTovcmdiYT9cKFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqLFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqLFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqKD86LFxzKihcZCsoPzpcLlxkKyk/KVxzKik/XCkvLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltlWzFdKjIuNTUsZVsyXSoyLjU1LGVbM10qMi41NSxlWzRdXX19LHtyZTovIyhbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KS8scGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuW3BhcnNlSW50KGVbMV0sMTYpLHBhcnNlSW50KGVbMl0sMTYpLHBhcnNlSW50KGVbM10sMTYpXX19LHtyZTovIyhbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKS8scGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuW3BhcnNlSW50KGVbMV0rZVsxXSwxNikscGFyc2VJbnQoZVsyXStlWzJdLDE2KSxwYXJzZUludChlWzNdK2VbM10sMTYpXX19LHtyZTovaHNsYT9cKFxzKihcZCsoPzpcLlxkKyk/KVxzKixccyooXGQrKD86XC5cZCspPylcJVxzKixccyooXGQrKD86XC5cZCspPylcJVxzKig/OixccyooXGQrKD86XC5cZCspPylccyopP1wpLyxzcGFjZToiaHNsYSIscGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMV0sZVsyXS8xMDAsZVszXS8xMDAsZVs0XV19fV0sbz10LkNvbG9yPWZ1bmN0aW9uKGUsbixyLGkpe3JldHVybiBuZXcgdC5Db2xvci5mbi5wYXJzZShlLG4scixpKX0sdT17cmdiYTp7cHJvcHM6e3JlZDp7aWR4OjAsdHlwZToiYnl0ZSJ9LGdyZWVuOntpZHg6MSx0eXBlOiJieXRlIn0sYmx1ZTp7aWR4OjIsdHlwZToiYnl0ZSJ9fX0saHNsYTp7cHJvcHM6e2h1ZTp7aWR4OjAsdHlwZToiZGVncmVlcyJ9LHNhdHVyYXRpb246e2lkeDoxLHR5cGU6InBlcmNlbnQifSxsaWdodG5lc3M6e2lkeDoyLHR5cGU6InBlcmNlbnQifX19fSxhPXsiYnl0ZSI6e2Zsb29yOiEwLG1heDoyNTV9LHBlcmNlbnQ6e21heDoxfSxkZWdyZWVzOnttb2Q6MzYwLGZsb29yOiEwfX0sZj1vLnN1cHBvcnQ9e30sbD10KCI8cD4iKVswXSxjLGg9dC5lYWNoO2wuc3R5bGUuY3NzVGV4dD0iYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEsMSwxLC41KSIsZi5yZ2JhPWwuc3R5bGUuYmFja2dyb3VuZENvbG9yLmluZGV4T2YoInJnYmEiKT4tMSxoKHUsZnVuY3Rpb24oZSx0KXt0LmNhY2hlPSJfIitlLHQucHJvcHMuYWxwaGE9e2lkeDozLHR5cGU6InBlcmNlbnQiLGRlZjoxfX0pLG8uZm49dC5leHRlbmQoby5wcm90b3R5cGUse3BhcnNlOmZ1bmN0aW9uKHIsaSxzLGEpe2lmKHI9PT1uKXJldHVybiB0aGlzLl9yZ2JhPVtudWxsLG51bGwsbnVsbCxudWxsXSx0aGlzO2lmKHIuanF1ZXJ5fHxyLm5vZGVUeXBlKXI9dChyKS5jc3MoaSksaT1uO3ZhciBmPXRoaXMsbD10LnR5cGUociksdj10aGlzLl9yZ2JhPVtdLG07aSE9PW4mJihyPVtyLGkscyxhXSxsPSJhcnJheSIpO2lmKGw9PT0ic3RyaW5nIilyZXR1cm4gdGhpcy5wYXJzZShkKHIpfHxjLl9kZWZhdWx0KTtpZihsPT09ImFycmF5IilyZXR1cm4gaCh1LnJnYmEucHJvcHMsZnVuY3Rpb24oZSx0KXt2W3QuaWR4XT1wKHJbdC5pZHhdLHQpfSksdGhpcztpZihsPT09Im9iamVjdCIpcmV0dXJuIHIgaW5zdGFuY2VvZiBvP2godSxmdW5jdGlvbihlLHQpe3JbdC5jYWNoZV0mJihmW3QuY2FjaGVdPXJbdC5jYWNoZV0uc2xpY2UoKSl9KTpoKHUsZnVuY3Rpb24odCxuKXt2YXIgaT1uLmNhY2hlO2gobi5wcm9wcyxmdW5jdGlvbihlLHQpe2lmKCFmW2ldJiZuLnRvKXtpZihlPT09ImFscGhhInx8cltlXT09bnVsbClyZXR1cm47ZltpXT1uLnRvKGYuX3JnYmEpfWZbaV1bdC5pZHhdPXAocltlXSx0LCEwKX0pLGZbaV0mJmUuaW5BcnJheShudWxsLGZbaV0uc2xpY2UoMCwzKSk8MCYmKGZbaV1bM109MSxuLmZyb20mJihmLl9yZ2JhPW4uZnJvbShmW2ldKSkpfSksdGhpc30saXM6ZnVuY3Rpb24oZSl7dmFyIHQ9byhlKSxuPSEwLHI9dGhpcztyZXR1cm4gaCh1LGZ1bmN0aW9uKGUsaSl7dmFyIHMsbz10W2kuY2FjaGVdO3JldHVybiBvJiYocz1yW2kuY2FjaGVdfHxpLnRvJiZpLnRvKHIuX3JnYmEpfHxbXSxoKGkucHJvcHMsZnVuY3Rpb24oZSx0KXtpZihvW3QuaWR4XSE9bnVsbClyZXR1cm4gbj1vW3QuaWR4XT09PXNbdC5pZHhdLG59KSksbn0pLG59LF9zcGFjZTpmdW5jdGlvbigpe3ZhciBlPVtdLHQ9dGhpcztyZXR1cm4gaCh1LGZ1bmN0aW9uKG4scil7dFtyLmNhY2hlXSYmZS5wdXNoKG4pfSksZS5wb3AoKX0sdHJhbnNpdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuPW8oZSkscj1uLl9zcGFjZSgpLGk9dVtyXSxzPXRoaXMuYWxwaGEoKT09PTA/bygidHJhbnNwYXJlbnQiKTp0aGlzLGY9c1tpLmNhY2hlXXx8aS50byhzLl9yZ2JhKSxsPWYuc2xpY2UoKTtyZXR1cm4gbj1uW2kuY2FjaGVdLGgoaS5wcm9wcyxmdW5jdGlvbihlLHIpe3ZhciBpPXIuaWR4LHM9ZltpXSxvPW5baV0sdT1hW3IudHlwZV18fHt9O2lmKG89PT1udWxsKXJldHVybjtzPT09bnVsbD9sW2ldPW86KHUubW9kJiYoby1zPnUubW9kLzI/cys9dS5tb2Q6cy1vPnUubW9kLzImJihzLT11Lm1vZCkpLGxbaV09cCgoby1zKSp0K3MscikpfSksdGhpc1tyXShsKX0sYmxlbmQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5fcmdiYVszXT09PTEpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5fcmdiYS5zbGljZSgpLHI9bi5wb3AoKSxpPW8oZSkuX3JnYmE7cmV0dXJuIG8odC5tYXAobixmdW5jdGlvbihlLHQpe3JldHVybigxLXIpKmlbdF0rciplfSkpfSx0b1JnYmFTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT0icmdiYSgiLG49dC5tYXAodGhpcy5fcmdiYSxmdW5jdGlvbihlLHQpe3JldHVybiBlPT1udWxsP3Q+Mj8xOjA6ZX0pO3JldHVybiBuWzNdPT09MSYmKG4ucG9wKCksZT0icmdiKCIpLGUrbi5qb2luKCkrIikifSx0b0hzbGFTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT0iaHNsYSgiLG49dC5tYXAodGhpcy5oc2xhKCksZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09bnVsbCYmKGU9dD4yPzE6MCksdCYmdDwzJiYoZT1NYXRoLnJvdW5kKGUqMTAwKSsiJSIpLGV9KTtyZXR1cm4gblszXT09PTEmJihuLnBvcCgpLGU9ImhzbCgiKSxlK24uam9pbigpKyIpIn0sdG9IZXhTdHJpbmc6ZnVuY3Rpb24oZSl7dmFyIG49dGhpcy5fcmdiYS5zbGljZSgpLHI9bi5wb3AoKTtyZXR1cm4gZSYmbi5wdXNoKH5+KHIqMjU1KSksIiMiK3QubWFwKG4sZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT0oZXx8MCkudG9TdHJpbmcoMTYpLGUubGVuZ3RoPT09MT8iMCIrZTplfSkuam9pbigiIil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JnYmFbM109PT0wPyJ0cmFuc3BhcmVudCI6dGhpcy50b1JnYmFTdHJpbmcoKX19KSxvLmZuLnBhcnNlLnByb3RvdHlwZT1vLmZuLHUuaHNsYS50bz1mdW5jdGlvbihlKXtpZihlWzBdPT1udWxsfHxlWzFdPT1udWxsfHxlWzJdPT1udWxsKXJldHVybltudWxsLG51bGwsbnVsbCxlWzNdXTt2YXIgdD1lWzBdLzI1NSxuPWVbMV0vMjU1LHI9ZVsyXS8yNTUsaT1lWzNdLHM9TWF0aC5tYXgodCxuLHIpLG89TWF0aC5taW4odCxuLHIpLHU9cy1vLGE9cytvLGY9YSouNSxsLGM7cmV0dXJuIG89PT1zP2w9MDp0PT09cz9sPTYwKihuLXIpL3UrMzYwOm49PT1zP2w9NjAqKHItdCkvdSsxMjA6bD02MCoodC1uKS91KzI0MCxmPT09MHx8Zj09PTE/Yz1mOmY8PS41P2M9dS9hOmM9dS8oMi1hKSxbTWF0aC5yb3VuZChsKSUzNjAsYyxmLGk9PW51bGw/MTppXX0sdS5oc2xhLmZyb209ZnVuY3Rpb24oZSl7aWYoZVswXT09bnVsbHx8ZVsxXT09bnVsbHx8ZVsyXT09bnVsbClyZXR1cm5bbnVsbCxudWxsLG51bGwsZVszXV07dmFyIHQ9ZVswXS8zNjAsbj1lWzFdLHI9ZVsyXSxpPWVbM10scz1yPD0uNT9yKigxK24pOnIrbi1yKm4sbz0yKnItcyx1LGEsZjtyZXR1cm5bTWF0aC5yb3VuZCh2KG8scyx0KzEvMykqMjU1KSxNYXRoLnJvdW5kKHYobyxzLHQpKjI1NSksTWF0aC5yb3VuZCh2KG8scyx0LTEvMykqMjU1KSxpXX0saCh1LGZ1bmN0aW9uKGUscil7dmFyIHM9ci5wcm9wcyx1PXIuY2FjaGUsYT1yLnRvLGY9ci5mcm9tO28uZm5bZV09ZnVuY3Rpb24oZSl7YSYmIXRoaXNbdV0mJih0aGlzW3VdPWEodGhpcy5fcmdiYSkpO2lmKGU9PT1uKXJldHVybiB0aGlzW3VdLnNsaWNlKCk7dmFyIHIsaT10LnR5cGUoZSksbD1pPT09ImFycmF5Inx8aT09PSJvYmplY3QiP2U6YXJndW1lbnRzLGM9dGhpc1t1XS5zbGljZSgpO3JldHVybiBoKHMsZnVuY3Rpb24oZSx0KXt2YXIgbj1sW2k9PT0ib2JqZWN0Ij9lOnQuaWR4XTtuPT1udWxsJiYobj1jW3QuaWR4XSksY1t0LmlkeF09cChuLHQpfSksZj8ocj1vKGYoYykpLHJbdV09YyxyKTpvKGMpfSxoKHMsZnVuY3Rpb24obixyKXtpZihvLmZuW25dKXJldHVybjtvLmZuW25dPWZ1bmN0aW9uKHMpe3ZhciBvPXQudHlwZShzKSx1PW49PT0iYWxwaGEiP3RoaXMuX2hzbGE/ImhzbGEiOiJyZ2JhIjplLGE9dGhpc1t1XSgpLGY9YVtyLmlkeF0sbDtyZXR1cm4gbz09PSJ1bmRlZmluZWQiP2Y6KG89PT0iZnVuY3Rpb24iJiYocz1zLmNhbGwodGhpcyxmKSxvPXQudHlwZShzKSkscz09bnVsbCYmci5lbXB0eT90aGlzOihvPT09InN0cmluZyImJihsPWkuZXhlYyhzKSxsJiYocz1mK3BhcnNlRmxvYXQobFsyXSkqKGxbMV09PT0iKyI/MTotMSkpKSxhW3IuaWR4XT1zLHRoaXNbdV0oYSkpKX19KX0pLGgocixmdW5jdGlvbihlLG4pe3QuY3NzSG9va3Nbbl09e3NldDpmdW5jdGlvbihlLHIpe3ZhciBpLHMsdT0iIjtpZih0LnR5cGUocikhPT0ic3RyaW5nInx8KGk9ZChyKSkpe3I9byhpfHxyKTtpZighZi5yZ2JhJiZyLl9yZ2JhWzNdIT09MSl7cz1uPT09ImJhY2tncm91bmRDb2xvciI/ZS5wYXJlbnROb2RlOmU7d2hpbGUoKHU9PT0iInx8dT09PSJ0cmFuc3BhcmVudCIpJiZzJiZzLnN0eWxlKXRyeXt1PXQuY3NzKHMsImJhY2tncm91bmRDb2xvciIpLHM9cy5wYXJlbnROb2RlfWNhdGNoKGEpe31yPXIuYmxlbmQodSYmdSE9PSJ0cmFuc3BhcmVudCI/dToiX2RlZmF1bHQiKX1yPXIudG9SZ2JhU3RyaW5nKCl9dHJ5e2Uuc3R5bGVbbl09cn1jYXRjaChyKXt9fX0sdC5meC5zdGVwW25dPWZ1bmN0aW9uKGUpe2UuY29sb3JJbml0fHwoZS5zdGFydD1vKGUuZWxlbSxuKSxlLmVuZD1vKGUuZW5kKSxlLmNvbG9ySW5pdD0hMCksdC5jc3NIb29rc1tuXS5zZXQoZS5lbGVtLGUuc3RhcnQudHJhbnNpdGlvbihlLmVuZCxlLnBvcykpfX0pLHQuY3NzSG9va3MuYm9yZGVyQ29sb3I9e2V4cGFuZDpmdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gaChbIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLGZ1bmN0aW9uKG4scil7dFsiYm9yZGVyIityKyJDb2xvciJdPWV9KSx0fX0sYz10LkNvbG9yLm5hbWVzPXthcXVhOiIjMDBmZmZmIixibGFjazoiIzAwMDAwMCIsYmx1ZToiIzAwMDBmZiIsZnVjaHNpYToiI2ZmMDBmZiIsZ3JheToiIzgwODA4MCIsZ3JlZW46IiMwMDgwMDAiLGxpbWU6IiMwMGZmMDAiLG1hcm9vbjoiIzgwMDAwMCIsbmF2eToiIzAwMDA4MCIsb2xpdmU6IiM4MDgwMDAiLHB1cnBsZToiIzgwMDA4MCIscmVkOiIjZmYwMDAwIixzaWx2ZXI6IiNjMGMwYzAiLHRlYWw6IiMwMDgwODAiLHdoaXRlOiIjZmZmZmZmIix5ZWxsb3c6IiNmZmZmMDAiLHRyYW5zcGFyZW50OltudWxsLG51bGwsbnVsbCwwXSxfZGVmYXVsdDoiI2ZmZmZmZiJ9fShqUXVlcnkpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSgpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldz90aGlzLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpOnRoaXMuY3VycmVudFN0eWxlLG49e30scixpLHM7aWYodCYmdC5sZW5ndGgmJnRbMF0mJnRbdFswXV0pe3M9dC5sZW5ndGg7d2hpbGUocy0tKXI9dFtzXSx0eXBlb2YgdFtyXT09InN0cmluZyImJihuW2UuY2FtZWxDYXNlKHIpXT10W3JdKX1lbHNlIGZvcihyIGluIHQpdHlwZW9mIHRbcl09PSJzdHJpbmciJiYobltyXT10W3JdKTtyZXR1cm4gbn1mdW5jdGlvbiBzKHQsbil7dmFyIGk9e30scyxvO2ZvcihzIGluIG4pbz1uW3NdLHRbc10hPT1vJiYhcltzXSYmKGUuZnguc3RlcFtzXXx8IWlzTmFOKHBhcnNlRmxvYXQobykpKSYmKGlbc109byk7cmV0dXJuIGl9dmFyIG49WyJhZGQiLCJyZW1vdmUiLCJ0b2dnbGUiXSxyPXtib3JkZXI6MSxib3JkZXJCb3R0b206MSxib3JkZXJDb2xvcjoxLGJvcmRlckxlZnQ6MSxib3JkZXJSaWdodDoxLGJvcmRlclRvcDoxLGJvcmRlcldpZHRoOjEsbWFyZ2luOjEscGFkZGluZzoxfTtlLmVhY2goWyJib3JkZXJMZWZ0U3R5bGUiLCJib3JkZXJSaWdodFN0eWxlIiwiYm9yZGVyQm90dG9tU3R5bGUiLCJib3JkZXJUb3BTdHlsZSJdLGZ1bmN0aW9uKHQsbil7ZS5meC5zdGVwW25dPWZ1bmN0aW9uKGUpe2lmKGUuZW5kIT09Im5vbmUiJiYhZS5zZXRBdHRyfHxlLnBvcz09PTEmJiFlLnNldEF0dHIpalF1ZXJ5LnN0eWxlKGUuZWxlbSxuLGUuZW5kKSxlLnNldEF0dHI9ITB9fSksZS5lZmZlY3RzLmFuaW1hdGVDbGFzcz1mdW5jdGlvbih0LHIsbyx1KXt2YXIgYT1lLnNwZWVkKHIsbyx1KTtyZXR1cm4gdGhpcy5xdWV1ZShmdW5jdGlvbigpe3ZhciByPWUodGhpcyksbz1yLmF0dHIoImNsYXNzIil8fCIiLHUsZj1hLmNoaWxkcmVuP3IuZmluZCgiKiIpLmFuZFNlbGYoKTpyO2Y9Zi5tYXAoZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3JldHVybntlbDp0LHN0YXJ0OmkuY2FsbCh0aGlzKX19KSx1PWZ1bmN0aW9uKCl7ZS5lYWNoKG4sZnVuY3Rpb24oZSxuKXt0W25dJiZyW24rIkNsYXNzIl0odFtuXSl9KX0sdSgpLGY9Zi5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmQ9aS5jYWxsKHRoaXMuZWxbMF0pLHRoaXMuZGlmZj1zKHRoaXMuc3RhcnQsdGhpcy5lbmQpLHRoaXN9KSxyLmF0dHIoImNsYXNzIixvKSxmPWYubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPWUuRGVmZXJyZWQoKSxyPWpRdWVyeS5leHRlbmQoe30sYSx7cXVldWU6ITEsY29tcGxldGU6ZnVuY3Rpb24oKXtuLnJlc29sdmUodCl9fSk7cmV0dXJuIHRoaXMuZWwuYW5pbWF0ZSh0aGlzLmRpZmYsciksbi5wcm9taXNlKCl9KSxlLndoZW4uYXBwbHkoZSxmLmdldCgpKS5kb25lKGZ1bmN0aW9uKCl7dSgpLGUuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsO2UuZWFjaCh0aGlzLmRpZmYsZnVuY3Rpb24oZSl7dC5jc3MoZSwiIil9KX0pLGEuY29tcGxldGUuY2FsbChyWzBdKX0pfSl9LGUuZm4uZXh0ZW5kKHtfYWRkQ2xhc3M6ZS5mbi5hZGRDbGFzcyxhZGRDbGFzczpmdW5jdGlvbih0LG4scixpKXtyZXR1cm4gbj9lLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7YWRkOnR9LG4scixpKTp0aGlzLl9hZGRDbGFzcyh0KX0sX3JlbW92ZUNsYXNzOmUuZm4ucmVtb3ZlQ2xhc3MscmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCxuLHIsaSl7cmV0dXJuIG4/ZS5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse3JlbW92ZTp0fSxuLHIsaSk6dGhpcy5fcmVtb3ZlQ2xhc3ModCl9LF90b2dnbGVDbGFzczplLmZuLnRvZ2dsZUNsYXNzLHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKG4scixpLHMsbyl7cmV0dXJuIHR5cGVvZiByPT0iYm9vbGVhbiJ8fHI9PT10P2k/ZS5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMscj97YWRkOm59OntyZW1vdmU6bn0saSxzLG8pOnRoaXMuX3RvZ2dsZUNsYXNzKG4scik6ZS5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse3RvZ2dsZTpufSxyLGkscyl9LHN3aXRjaENsYXNzOmZ1bmN0aW9uKHQsbixyLGkscyl7cmV0dXJuIGUuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHthZGQ6bixyZW1vdmU6dH0scixpLHMpfX0pfSgpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gaShuLHIsaSxzKXtlLmlzUGxhaW5PYmplY3QobikmJihyPW4sbj1uLmVmZmVjdCksbj17ZWZmZWN0Om59LHI9PT10JiYocj17fSksZS5pc0Z1bmN0aW9uKHIpJiYocz1yLGk9bnVsbCxyPXt9KTtpZih0eXBlb2Ygcj09Im51bWJlciJ8fGUuZnguc3BlZWRzW3JdKXM9aSxpPXIscj17fTtyZXR1cm4gZS5pc0Z1bmN0aW9uKGkpJiYocz1pLGk9bnVsbCksciYmZS5leHRlbmQobixyKSxpPWl8fHIuZHVyYXRpb24sbi5kdXJhdGlvbj1lLmZ4Lm9mZj8wOnR5cGVvZiBpPT0ibnVtYmVyIj9pOmkgaW4gZS5meC5zcGVlZHM/ZS5meC5zcGVlZHNbaV06ZS5meC5zcGVlZHMuX2RlZmF1bHQsbi5jb21wbGV0ZT1zfHxyLmNvbXBsZXRlLG59ZnVuY3Rpb24gcyh0KXtyZXR1cm4hdHx8dHlwZW9mIHQ9PSJudW1iZXIifHxlLmZ4LnNwZWVkc1t0XT8hMDp0eXBlb2YgdD09InN0cmluZyImJiFlLmVmZmVjdHMuZWZmZWN0W3RdP24mJmUuZWZmZWN0c1t0XT8hMTohMDohMX1lLmV4dGVuZChlLmVmZmVjdHMse3ZlcnNpb246IjEuOS4wIixzYXZlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXSE9PW51bGwmJmUuZGF0YShyK3Rbbl0sZVswXS5zdHlsZVt0W25dXSl9LHJlc3RvcmU6ZnVuY3Rpb24oZSxuKXt2YXIgaSxzO2ZvcihzPTA7czxuLmxlbmd0aDtzKyspbltzXSE9PW51bGwmJihpPWUuZGF0YShyK25bc10pLGk9PT10JiYoaT0iIiksZS5jc3MobltzXSxpKSl9LHNldE1vZGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD09PSJ0b2dnbGUiJiYodD1lLmlzKCI6aGlkZGVuIik/InNob3ciOiJoaWRlIiksdH0sZ2V0QmFzZWxpbmU6ZnVuY3Rpb24oZSx0KXt2YXIgbixyO3N3aXRjaChlWzBdKXtjYXNlInRvcCI6bj0wO2JyZWFrO2Nhc2UibWlkZGxlIjpuPS41O2JyZWFrO2Nhc2UiYm90dG9tIjpuPTE7YnJlYWs7ZGVmYXVsdDpuPWVbMF0vdC5oZWlnaHR9c3dpdGNoKGVbMV0pe2Nhc2UibGVmdCI6cj0wO2JyZWFrO2Nhc2UiY2VudGVyIjpyPS41O2JyZWFrO2Nhc2UicmlnaHQiOnI9MTticmVhaztkZWZhdWx0OnI9ZVsxXS90LndpZHRofXJldHVybnt4OnIseTpufX0sY3JlYXRlV3JhcHBlcjpmdW5jdGlvbih0KXtpZih0LnBhcmVudCgpLmlzKCIudWktZWZmZWN0cy13cmFwcGVyIikpcmV0dXJuIHQucGFyZW50KCk7dmFyIG49e3dpZHRoOnQub3V0ZXJXaWR0aCghMCksaGVpZ2h0OnQub3V0ZXJIZWlnaHQoITApLCJmbG9hdCI6dC5jc3MoImZsb2F0Iil9LHI9ZSgiPGRpdj48L2Rpdj4iKS5hZGRDbGFzcygidWktZWZmZWN0cy13cmFwcGVyIikuY3NzKHtmb250U2l6ZToiMTAwJSIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsbWFyZ2luOjAscGFkZGluZzowfSksaT17d2lkdGg6dC53aWR0aCgpLGhlaWdodDp0LmhlaWdodCgpfSxzPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7dHJ5e3MuaWR9Y2F0Y2gobyl7cz1kb2N1bWVudC5ib2R5fXJldHVybiB0LndyYXAociksKHRbMF09PT1zfHxlLmNvbnRhaW5zKHRbMF0scykpJiZlKHMpLmZvY3VzKCkscj10LnBhcmVudCgpLHQuY3NzKCJwb3NpdGlvbiIpPT09InN0YXRpYyI/KHIuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUifSksdC5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSJ9KSk6KGUuZXh0ZW5kKG4se3Bvc2l0aW9uOnQuY3NzKCJwb3NpdGlvbiIpLHpJbmRleDp0LmNzcygiei1pbmRleCIpfSksZS5lYWNoKFsidG9wIiwibGVmdCIsImJvdHRvbSIsInJpZ2h0Il0sZnVuY3Rpb24oZSxyKXtuW3JdPXQuY3NzKHIpLGlzTmFOKHBhcnNlSW50KG5bcl0sMTApKSYmKG5bcl09ImF1dG8iKX0pLHQuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUiLHRvcDowLGxlZnQ6MCxyaWdodDoiYXV0byIsYm90dG9tOiJhdXRvIn0pKSx0LmNzcyhpKSxyLmNzcyhuKS5zaG93KCl9LHJlbW92ZVdyYXBwZXI6ZnVuY3Rpb24odCl7dmFyIG49ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtyZXR1cm4gdC5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpJiYodC5wYXJlbnQoKS5yZXBsYWNlV2l0aCh0KSwodFswXT09PW58fGUuY29udGFpbnModFswXSxuKSkmJmUobikuZm9jdXMoKSksdH0sc2V0VHJhbnNpdGlvbjpmdW5jdGlvbih0LG4scixpKXtyZXR1cm4gaT1pfHx7fSxlLmVhY2gobixmdW5jdGlvbihlLG4pe3ZhciBzPXQuY3NzVW5pdChuKTtzWzBdPjAmJihpW25dPXNbMF0qcitzWzFdKX0pLGl9fSksZS5mbi5leHRlbmQoe2VmZmVjdDpmdW5jdGlvbih0LHIscyxvKXtmdW5jdGlvbiBoKHQpe2Z1bmN0aW9uIHMoKXtlLmlzRnVuY3Rpb24ocikmJnIuY2FsbChuWzBdKSxlLmlzRnVuY3Rpb24odCkmJnQoKX12YXIgbj1lKHRoaXMpLHI9dS5jb21wbGV0ZSxpPXUubW9kZTsobi5pcygiOmhpZGRlbiIpP2k9PT0iaGlkZSI6aT09PSJzaG93Iik/cygpOmwuY2FsbChuWzBdLHUscyl9dmFyIHU9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyksYT11Lm1vZGUsZj11LnF1ZXVlLGw9ZS5lZmZlY3RzLmVmZmVjdFt1LmVmZmVjdF0sYz0hbCYmbiYmZS5lZmZlY3RzW3UuZWZmZWN0XTtyZXR1cm4gZS5meC5vZmZ8fCFsJiYhYz9hP3RoaXNbYV0odS5kdXJhdGlvbix1LmNvbXBsZXRlKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt1LmNvbXBsZXRlJiZ1LmNvbXBsZXRlLmNhbGwodGhpcyl9KTpsP2Y9PT0hMT90aGlzLmVhY2goaCk6dGhpcy5xdWV1ZShmfHwiZngiLGgpOmMuY2FsbCh0aGlzLHtvcHRpb25zOnUsZHVyYXRpb246dS5kdXJhdGlvbixjYWxsYmFjazp1LmNvbXBsZXRlLG1vZGU6dS5tb2RlfSl9LF9zaG93OmUuZm4uc2hvdyxzaG93OmZ1bmN0aW9uKGUpe2lmKHMoZSkpcmV0dXJuIHRoaXMuX3Nob3cuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciB0PWkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB0Lm1vZGU9InNob3ciLHRoaXMuZWZmZWN0LmNhbGwodGhpcyx0KX0sX2hpZGU6ZS5mbi5oaWRlLGhpZGU6ZnVuY3Rpb24oZSl7aWYocyhlKSlyZXR1cm4gdGhpcy5faGlkZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHQubW9kZT0iaGlkZSIsdGhpcy5lZmZlY3QuY2FsbCh0aGlzLHQpfSxfX3RvZ2dsZTplLmZuLnRvZ2dsZSx0b2dnbGU6ZnVuY3Rpb24odCl7aWYocyh0KXx8dHlwZW9mIHQ9PSJib29sZWFuInx8ZS5pc0Z1bmN0aW9uKHQpKXJldHVybiB0aGlzLl9fdG9nZ2xlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgbj1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbi5tb2RlPSJ0b2dnbGUiLHRoaXMuZWZmZWN0LmNhbGwodGhpcyxuKX0sY3NzVW5pdDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLmNzcyh0KSxyPVtdO3JldHVybiBlLmVhY2goWyJlbSIsInB4IiwiJSIsInB0Il0sZnVuY3Rpb24oZSx0KXtuLmluZGV4T2YodCk+MCYmKHI9W3BhcnNlRmxvYXQobiksdF0pfSkscn19KX0oKSxmdW5jdGlvbigpe3ZhciB0PXt9O2UuZWFjaChbIlF1YWQiLCJDdWJpYyIsIlF1YXJ0IiwiUXVpbnQiLCJFeHBvIl0sZnVuY3Rpb24oZSxuKXt0W25dPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LGUrMil9fSksZS5leHRlbmQodCx7U2luZTpmdW5jdGlvbihlKXtyZXR1cm4gMS1NYXRoLmNvcyhlKk1hdGguUEkvMil9LENpcmM6ZnVuY3Rpb24oZSl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZSplKX0sRWxhc3RpYzpmdW5jdGlvbihlKXtyZXR1cm4gZT09PTB8fGU9PT0xP2U6LU1hdGgucG93KDIsOCooZS0xKSkqTWF0aC5zaW4oKChlLTEpKjgwLTcuNSkqTWF0aC5QSS8xNSl9LEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqZSooMyplLTIpfSxCb3VuY2U6ZnVuY3Rpb24oZSl7dmFyIHQsbj00O3doaWxlKGU8KCh0PU1hdGgucG93KDIsLS1uKSktMSkvMTEpO3JldHVybiAxL01hdGgucG93KDQsMy1uKS03LjU2MjUqTWF0aC5wb3coKHQqMy0yKS8yMi1lLDIpfX0pLGUuZWFjaCh0LGZ1bmN0aW9uKHQsbil7ZS5lYXNpbmdbImVhc2VJbiIrdF09bixlLmVhc2luZ1siZWFzZU91dCIrdF09ZnVuY3Rpb24oZSl7cmV0dXJuIDEtbigxLWUpfSxlLmVhc2luZ1siZWFzZUluT3V0Iit0XT1mdW5jdGlvbihlKXtyZXR1cm4gZTwuNT9uKGUqMikvMjoxLW4oZSotMisyKS8yfX0pfSgpfShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuPS91cHxkb3dufHZlcnRpY2FsLyxyPS91cHxsZWZ0fHZlcnRpY2FsfGhvcml6b250YWwvO2UuZWZmZWN0cy5lZmZlY3QuYmxpbmQ9ZnVuY3Rpb24odCxpKXt2YXIgcz1lKHRoaXMpLG89WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0sdT1lLmVmZmVjdHMuc2V0TW9kZShzLHQubW9kZXx8ImhpZGUiKSxhPXQuZGlyZWN0aW9ufHwidXAiLGY9bi50ZXN0KGEpLGw9Zj8iaGVpZ2h0Ijoid2lkdGgiLGM9Zj8idG9wIjoibGVmdCIsaD1yLnRlc3QoYSkscD17fSxkPXU9PT0ic2hvdyIsdixtLGc7cy5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpP2UuZWZmZWN0cy5zYXZlKHMucGFyZW50KCksbyk6ZS5lZmZlY3RzLnNhdmUocyxvKSxzLnNob3coKSx2PWUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKHMpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxtPXZbbF0oKSxnPXBhcnNlRmxvYXQodi5jc3MoYykpfHwwLHBbbF09ZD9tOjAsaHx8KHMuY3NzKGY/ImJvdHRvbSI6InJpZ2h0IiwwKS5jc3MoZj8idG9wIjoibGVmdCIsImF1dG8iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSJ9KSxwW2NdPWQ/ZzptK2cpLGQmJih2LmNzcyhsLDApLGh8fHYuY3NzKGMsZyttKSksdi5hbmltYXRlKHAse2R1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLHF1ZXVlOiExLGNvbXBsZXRlOmZ1bmN0aW9uKCl7dT09PSJoaWRlIiYmcy5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUocyxvKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihzKSxpKCl9fSl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LmJvdW5jZT1mdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcyksaT1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiaGVpZ2h0Iiwid2lkdGgiXSxzPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwiZWZmZWN0Iiksbz1zPT09ImhpZGUiLHU9cz09PSJzaG93IixhPXQuZGlyZWN0aW9ufHwidXAiLGY9dC5kaXN0YW5jZSxsPXQudGltZXN8fDUsYz1sKjIrKHV8fG8/MTowKSxoPXQuZHVyYXRpb24vYyxwPXQuZWFzaW5nLGQ9YT09PSJ1cCJ8fGE9PT0iZG93biI/InRvcCI6ImxlZnQiLHY9YT09PSJ1cCJ8fGE9PT0ibGVmdCIsbSxnLHksYj1yLnF1ZXVlKCksdz1iLmxlbmd0aDsodXx8bykmJmkucHVzaCgib3BhY2l0eSIpLGUuZWZmZWN0cy5zYXZlKHIsaSksci5zaG93KCksZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIociksZnx8KGY9cltkPT09InRvcCI/Im91dGVySGVpZ2h0Ijoib3V0ZXJXaWR0aCJdKCkvMyksdSYmKHk9e29wYWNpdHk6MX0seVtkXT0wLHIuY3NzKCJvcGFjaXR5IiwwKS5jc3MoZCx2Py1mKjI6ZioyKS5hbmltYXRlKHksaCxwKSksbyYmKGYvPU1hdGgucG93KDIsbC0xKSkseT17fSx5W2RdPTA7Zm9yKG09MDttPGw7bSsrKWc9e30sZ1tkXT0odj8iLT0iOiIrPSIpK2Ysci5hbmltYXRlKGcsaCxwKS5hbmltYXRlKHksaCxwKSxmPW8/ZioyOmYvMjtvJiYoZz17b3BhY2l0eTowfSxnW2RdPSh2PyItPSI6Iis9IikrZixyLmFuaW1hdGUoZyxoLHApKSxyLnF1ZXVlKGZ1bmN0aW9uKCl7byYmci5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUocixpKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihyKSxuKCl9KSx3PjEmJmIuc3BsaWNlLmFwcGx5KGIsWzEsMF0uY29uY2F0KGIuc3BsaWNlKHcsYysxKSkpLHIuZGVxdWV1ZSgpfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5jbGlwPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLHM9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJoaWRlIiksbz1zPT09InNob3ciLHU9dC5kaXJlY3Rpb258fCJ2ZXJ0aWNhbCIsYT11PT09InZlcnRpY2FsIixmPWE/ImhlaWdodCI6IndpZHRoIixsPWE/InRvcCI6ImxlZnQiLGM9e30saCxwLGQ7ZS5lZmZlY3RzLnNhdmUocixpKSxyLnNob3coKSxoPWUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKHIpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxwPXJbMF0udGFnTmFtZT09PSJJTUciP2g6cixkPXBbZl0oKSxvJiYocC5jc3MoZiwwKSxwLmNzcyhsLGQvMikpLGNbZl09bz9kOjAsY1tsXT1vPzA6ZC8yLHAuYW5pbWF0ZShjLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpe298fHIuaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKHIsaSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIociksbigpfX0pfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5kcm9wPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJvcGFjaXR5IiwiaGVpZ2h0Iiwid2lkdGgiXSxzPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwiaGlkZSIpLG89cz09PSJzaG93Iix1PXQuZGlyZWN0aW9ufHwibGVmdCIsYT11PT09InVwInx8dT09PSJkb3duIj8idG9wIjoibGVmdCIsZj11PT09InVwInx8dT09PSJsZWZ0Ij8icG9zIjoibmVnIixsPXtvcGFjaXR5Om8/MTowfSxjO2UuZWZmZWN0cy5zYXZlKHIsaSksci5zaG93KCksZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIociksYz10LmRpc3RhbmNlfHxyW2E9PT0idG9wIj8ib3V0ZXJIZWlnaHQiOiJvdXRlcldpZHRoIl0oITApLzIsbyYmci5jc3MoIm9wYWNpdHkiLDApLmNzcyhhLGY9PT0icG9zIj8tYzpjKSxsW2FdPShvP2Y9PT0icG9zIj8iKz0iOiItPSI6Zj09PSJwb3MiPyItPSI6Iis9IikrYyxyLmFuaW1hdGUobCx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtzPT09ImhpZGUiJiZyLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShyLGkpLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKHIpLG4oKX19KX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2UuZWZmZWN0cy5lZmZlY3QuZXhwbG9kZT1mdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHkoKXtjLnB1c2godGhpcyksYy5sZW5ndGg9PT1yKmkmJmIoKX1mdW5jdGlvbiBiKCl7cy5jc3Moe3Zpc2liaWxpdHk6InZpc2libGUifSksZShjKS5yZW1vdmUoKSx1fHxzLmhpZGUoKSxuKCl9dmFyIHI9dC5waWVjZXM/TWF0aC5yb3VuZChNYXRoLnNxcnQodC5waWVjZXMpKTozLGk9cixzPWUodGhpcyksbz1lLmVmZmVjdHMuc2V0TW9kZShzLHQubW9kZXx8ImhpZGUiKSx1PW89PT0ic2hvdyIsYT1zLnNob3coKS5jc3MoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5vZmZzZXQoKSxmPU1hdGguY2VpbChzLm91dGVyV2lkdGgoKS9pKSxsPU1hdGguY2VpbChzLm91dGVySGVpZ2h0KCkvciksYz1bXSxoLHAsZCx2LG0sZztmb3IoaD0wO2g8cjtoKyspe3Y9YS50b3AraCpsLGc9aC0oci0xKS8yO2ZvcihwPTA7cDxpO3ArKylkPWEubGVmdCtwKmYsbT1wLShpLTEpLzIscy5jbG9uZSgpLmFwcGVuZFRvKCJib2R5Iikud3JhcCgiPGRpdj48L2Rpdj4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToidmlzaWJsZSIsbGVmdDotcCpmLHRvcDotaCpsfSkucGFyZW50KCkuYWRkQ2xhc3MoInVpLWVmZmVjdHMtZXhwbG9kZSIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIixvdmVyZmxvdzoiaGlkZGVuIix3aWR0aDpmLGhlaWdodDpsLGxlZnQ6ZCsodT9tKmY6MCksdG9wOnYrKHU/ZypsOjApLG9wYWNpdHk6dT8wOjF9KS5hbmltYXRlKHtsZWZ0OmQrKHU/MDptKmYpLHRvcDp2Kyh1PzA6ZypsKSxvcGFjaXR5OnU/MTowfSx0LmR1cmF0aW9ufHw1MDAsdC5lYXNpbmcseSl9fX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5mYWRlPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwidG9nZ2xlIik7ci5hbmltYXRlKHtvcGFjaXR5Oml9LHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpufSl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LmZvbGQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0scz1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8ImhpZGUiKSxvPXM9PT0ic2hvdyIsdT1zPT09ImhpZGUiLGE9dC5zaXplfHwxNSxmPS8oWzAtOV0rKSUvLmV4ZWMoYSksbD0hIXQuaG9yaXpGaXJzdCxjPW8hPT1sLGg9Yz9bIndpZHRoIiwiaGVpZ2h0Il06WyJoZWlnaHQiLCJ3aWR0aCJdLHA9dC5kdXJhdGlvbi8yLGQsdixtPXt9LGc9e307ZS5lZmZlY3RzLnNhdmUocixpKSxyLnNob3coKSxkPWUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKHIpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSx2PWM/W2Qud2lkdGgoKSxkLmhlaWdodCgpXTpbZC5oZWlnaHQoKSxkLndpZHRoKCldLGYmJihhPXBhcnNlSW50KGZbMV0sMTApLzEwMCp2W3U/MDoxXSksbyYmZC5jc3MobD97aGVpZ2h0OjAsd2lkdGg6YX06e2hlaWdodDphLHdpZHRoOjB9KSxtW2hbMF1dPW8/dlswXTphLGdbaFsxXV09bz92WzFdOjAsZC5hbmltYXRlKG0scCx0LmVhc2luZykuYW5pbWF0ZShnLHAsdC5lYXNpbmcsZnVuY3Rpb24oKXt1JiZyLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShyLGkpLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKHIpLG4oKX0pfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5oaWdobGlnaHQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kQ29sb3IiLCJvcGFjaXR5Il0scz1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8InNob3ciKSxvPXtiYWNrZ3JvdW5kQ29sb3I6ci5jc3MoImJhY2tncm91bmRDb2xvciIpfTtzPT09ImhpZGUiJiYoby5vcGFjaXR5PTApLGUuZWZmZWN0cy5zYXZlKHIsaSksci5zaG93KCkuY3NzKHtiYWNrZ3JvdW5kSW1hZ2U6Im5vbmUiLGJhY2tncm91bmRDb2xvcjp0LmNvbG9yfHwiI2ZmZmY5OSJ9KS5hbmltYXRlKG8se3F1ZXVlOiExLGR1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7cz09PSJoaWRlIiYmci5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUocixpKSxuKCl9fSl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LnB1bHNhdGU9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJzaG93Iikscz1pPT09InNob3ciLG89aT09PSJoaWRlIix1PXN8fGk9PT0iaGlkZSIsYT0odC50aW1lc3x8NSkqMisodT8xOjApLGY9dC5kdXJhdGlvbi9hLGw9MCxjPXIucXVldWUoKSxoPWMubGVuZ3RoLHA7aWYoc3x8IXIuaXMoIjp2aXNpYmxlIikpci5jc3MoIm9wYWNpdHkiLDApLnNob3coKSxsPTE7Zm9yKHA9MTtwPGE7cCsrKXIuYW5pbWF0ZSh7b3BhY2l0eTpsfSxmLHQuZWFzaW5nKSxsPTEtbDtyLmFuaW1hdGUoe29wYWNpdHk6bH0sZix0LmVhc2luZyksci5xdWV1ZShmdW5jdGlvbigpe28mJnIuaGlkZSgpLG4oKX0pLGg+MSYmYy5zcGxpY2UuYXBwbHkoYyxbMSwwXS5jb25jYXQoYy5zcGxpY2UoaCxhKzEpKSksci5kZXF1ZXVlKCl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LnB1ZmY9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJoaWRlIikscz1pPT09ImhpZGUiLG89cGFyc2VJbnQodC5wZXJjZW50LDEwKXx8MTUwLHU9by8xMDAsYT17aGVpZ2h0OnIuaGVpZ2h0KCksd2lkdGg6ci53aWR0aCgpfTtlLmV4dGVuZCh0LHtlZmZlY3Q6InNjYWxlIixxdWV1ZTohMSxmYWRlOiEwLG1vZGU6aSxjb21wbGV0ZTpuLHBlcmNlbnQ6cz9vOjEwMCxmcm9tOnM/YTp7aGVpZ2h0OmEuaGVpZ2h0KnUsd2lkdGg6YS53aWR0aCp1fX0pLHIuZWZmZWN0KHQpfSxlLmVmZmVjdHMuZWZmZWN0LnNjYWxlPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPWUuZXh0ZW5kKCEwLHt9LHQpLHM9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJlZmZlY3QiKSxvPXBhcnNlSW50KHQucGVyY2VudCwxMCl8fChwYXJzZUludCh0LnBlcmNlbnQsMTApPT09MD8wOnM9PT0iaGlkZSI/MDoxMDApLHU9dC5kaXJlY3Rpb258fCJib3RoIixhPXQub3JpZ2luLGY9e2hlaWdodDpyLmhlaWdodCgpLHdpZHRoOnIud2lkdGgoKSxvdXRlckhlaWdodDpyLm91dGVySGVpZ2h0KCksb3V0ZXJXaWR0aDpyLm91dGVyV2lkdGgoKX0sbD17eTp1IT09Imhvcml6b250YWwiP28vMTAwOjEseDp1IT09InZlcnRpY2FsIj9vLzEwMDoxfTtpLmVmZmVjdD0ic2l6ZSIsaS5xdWV1ZT0hMSxpLmNvbXBsZXRlPW4scyE9PSJlZmZlY3QiJiYoaS5vcmlnaW49YXx8WyJtaWRkbGUiLCJjZW50ZXIiXSxpLnJlc3RvcmU9ITApLGkuZnJvbT10LmZyb218fChzPT09InNob3ciP3toZWlnaHQ6MCx3aWR0aDowfTpmKSxpLnRvPXtoZWlnaHQ6Zi5oZWlnaHQqbC55LHdpZHRoOmYud2lkdGgqbC54LG91dGVySGVpZ2h0OmYub3V0ZXJIZWlnaHQqbC55LG91dGVyV2lkdGg6Zi5vdXRlcldpZHRoKmwueH0saS5mYWRlJiYocz09PSJzaG93IiYmKGkuZnJvbS5vcGFjaXR5PTAsaS50by5vcGFjaXR5PTEpLHM9PT0iaGlkZSImJihpLmZyb20ub3BhY2l0eT0xLGkudG8ub3BhY2l0eT0wKSksci5lZmZlY3QoaSl9LGUuZWZmZWN0cy5lZmZlY3Quc2l6ZT1mdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcyksaT1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Iiwid2lkdGgiLCJoZWlnaHQiLCJvdmVyZmxvdyIsIm9wYWNpdHkiXSxzPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJvdmVyZmxvdyIsIm9wYWNpdHkiXSxvPVsid2lkdGgiLCJoZWlnaHQiLCJvdmVyZmxvdyJdLHU9WyJmb250U2l6ZSJdLGE9WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxmPVsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0Il0sbD1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8ImVmZmVjdCIpLGM9dC5yZXN0b3JlfHxsIT09ImVmZmVjdCIsaD10LnNjYWxlfHwiYm90aCIscD10Lm9yaWdpbnx8WyJtaWRkbGUiLCJjZW50ZXIiXSxkLHYsbSxnPXIuY3NzKCJwb3NpdGlvbiIpO2w9PT0ic2hvdyImJnIuc2hvdygpLGQ9e2hlaWdodDpyLmhlaWdodCgpLHdpZHRoOnIud2lkdGgoKSxvdXRlckhlaWdodDpyLm91dGVySGVpZ2h0KCksb3V0ZXJXaWR0aDpyLm91dGVyV2lkdGgoKX0sci5mcm9tPXQuZnJvbXx8ZCxyLnRvPXQudG98fGQsbT17ZnJvbTp7eTpyLmZyb20uaGVpZ2h0L2QuaGVpZ2h0LHg6ci5mcm9tLndpZHRoL2Qud2lkdGh9LHRvOnt5OnIudG8uaGVpZ2h0L2QuaGVpZ2h0LHg6ci50by53aWR0aC9kLndpZHRofX07aWYoaD09PSJib3gifHxoPT09ImJvdGgiKW0uZnJvbS55IT09bS50by55JiYoaT1pLmNvbmNhdChhKSxyLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24ocixhLG0uZnJvbS55LHIuZnJvbSksci50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihyLGEsbS50by55LHIudG8pKSxtLmZyb20ueCE9PW0udG8ueCYmKGk9aS5jb25jYXQoZiksci5mcm9tPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKHIsZixtLmZyb20ueCxyLmZyb20pLHIudG89ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24ocixmLG0udG8ueCxyLnRvKSk7KGg9PT0iY29udGVudCJ8fGg9PT0iYm90aCIpJiZtLmZyb20ueSE9PW0udG8ueSYmKGk9aS5jb25jYXQodSksci5mcm9tPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKHIsdSxtLmZyb20ueSxyLmZyb20pLHIudG89ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24ocix1LG0udG8ueSxyLnRvKSksZS5lZmZlY3RzLnNhdmUocixjP2k6cyksci5zaG93KCksZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIociksci5jc3MoIm92ZXJmbG93IiwiaGlkZGVuIikuY3NzKHIuZnJvbSkscCYmKHY9ZS5lZmZlY3RzLmdldEJhc2VsaW5lKHAsZCksci5mcm9tLnRvcD0oZC5vdXRlckhlaWdodC1yLm91dGVySGVpZ2h0KCkpKnYueSxyLmZyb20ubGVmdD0oZC5vdXRlcldpZHRoLXIub3V0ZXJXaWR0aCgpKSp2Lngsci50by50b3A9KGQub3V0ZXJIZWlnaHQtci50by5vdXRlckhlaWdodCkqdi55LHIudG8ubGVmdD0oZC5vdXRlcldpZHRoLXIudG8ub3V0ZXJXaWR0aCkqdi54KSxyLmNzcyhyLmZyb20pO2lmKGg9PT0iY29udGVudCJ8fGg9PT0iYm90aCIpYT1hLmNvbmNhdChbIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSJdKS5jb25jYXQodSksZj1mLmNvbmNhdChbIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCJdKSxvPWkuY29uY2F0KGEpLmNvbmNhdChmKSxyLmZpbmQoIipbd2lkdGhdIikuZWFjaChmdW5jdGlvbigpe3ZhciBuPWUodGhpcykscj17aGVpZ2h0Om4uaGVpZ2h0KCksd2lkdGg6bi53aWR0aCgpfTtjJiZlLmVmZmVjdHMuc2F2ZShuLG8pLG4uZnJvbT17aGVpZ2h0OnIuaGVpZ2h0Km0uZnJvbS55LHdpZHRoOnIud2lkdGgqbS5mcm9tLnh9LG4udG89e2hlaWdodDpyLmhlaWdodCptLnRvLnksd2lkdGg6ci53aWR0aCptLnRvLnh9LG0uZnJvbS55IT09bS50by55JiYobi5mcm9tPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG4sYSxtLmZyb20ueSxuLmZyb20pLG4udG89ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obixhLG0udG8ueSxuLnRvKSksbS5mcm9tLnghPT1tLnRvLngmJihuLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obixmLG0uZnJvbS54LG4uZnJvbSksbi50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihuLGYsbS50by54LG4udG8pKSxuLmNzcyhuLmZyb20pLG4uYW5pbWF0ZShuLnRvLHQuZHVyYXRpb24sdC5lYXNpbmcsZnVuY3Rpb24oKXtjJiZlLmVmZmVjdHMucmVzdG9yZShuLG8pfSl9KTtyLmFuaW1hdGUoci50byx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtyLnRvLm9wYWNpdHk9PT0wJiZyLmNzcygib3BhY2l0eSIsci5mcm9tLm9wYWNpdHkpLGw9PT0iaGlkZSImJnIuaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKHIsYz9pOnMpLGN8fChnPT09InN0YXRpYyI/ci5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSIsdG9wOnIudG8udG9wLGxlZnQ6ci50by5sZWZ0fSk6ZS5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGUsdCl7ci5jc3ModCxmdW5jdGlvbih0LG4pe3ZhciBpPXBhcnNlSW50KG4sMTApLHM9ZT9yLnRvLmxlZnQ6ci50by50b3A7cmV0dXJuIG49PT0iYXV0byI/cysicHgiOmkrcysicHgifSl9KSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIociksbigpfX0pfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5zaGFrZT1mdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcyksaT1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiaGVpZ2h0Iiwid2lkdGgiXSxzPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwiZWZmZWN0Iiksbz10LmRpcmVjdGlvbnx8ImxlZnQiLHU9dC5kaXN0YW5jZXx8MjAsYT10LnRpbWVzfHwzLGY9YSoyKzEsbD1NYXRoLnJvdW5kKHQuZHVyYXRpb24vZiksYz1vPT09InVwInx8bz09PSJkb3duIj8idG9wIjoibGVmdCIsaD1vPT09InVwInx8bz09PSJsZWZ0IixwPXt9LGQ9e30sdj17fSxtLGc9ci5xdWV1ZSgpLHk9Zy5sZW5ndGg7ZS5lZmZlY3RzLnNhdmUocixpKSxyLnNob3coKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihyKSxwW2NdPShoPyItPSI6Iis9IikrdSxkW2NdPShoPyIrPSI6Ii09IikrdSoyLHZbY109KGg/Ii09IjoiKz0iKSt1KjIsci5hbmltYXRlKHAsbCx0LmVhc2luZyk7Zm9yKG09MTttPGE7bSsrKXIuYW5pbWF0ZShkLGwsdC5lYXNpbmcpLmFuaW1hdGUodixsLHQuZWFzaW5nKTtyLmFuaW1hdGUoZCxsLHQuZWFzaW5nKS5hbmltYXRlKHAsbC8yLHQuZWFzaW5nKS5xdWV1ZShmdW5jdGlvbigpe3M9PT0iaGlkZSImJnIuaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKHIsaSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIociksbigpfSkseT4xJiZnLnNwbGljZS5hcHBseShnLFsxLDBdLmNvbmNhdChnLnNwbGljZSh5LGYrMSkpKSxyLmRlcXVldWUoKX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2UuZWZmZWN0cy5lZmZlY3Quc2xpZGU9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsIndpZHRoIiwiaGVpZ2h0Il0scz1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8InNob3ciKSxvPXM9PT0ic2hvdyIsdT10LmRpcmVjdGlvbnx8ImxlZnQiLGE9dT09PSJ1cCJ8fHU9PT0iZG93biI/InRvcCI6ImxlZnQiLGY9dT09PSJ1cCJ8fHU9PT0ibGVmdCIsbCxjPXt9O2UuZWZmZWN0cy5zYXZlKHIsaSksci5zaG93KCksbD10LmRpc3RhbmNlfHxyW2E9PT0idG9wIj8ib3V0ZXJIZWlnaHQiOiJvdXRlcldpZHRoIl0oITApLGUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKHIpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxvJiZyLmNzcyhhLGY/aXNOYU4obCk/Ii0iK2w6LWw6bCksY1thXT0obz9mPyIrPSI6Ii09IjpmPyItPSI6Iis9IikrbCxyLmFuaW1hdGUoYyx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtzPT09ImhpZGUiJiZyLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShyLGkpLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKHIpLG4oKX19KX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2UuZWZmZWN0cy5lZmZlY3QudHJhbnNmZXI9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9ZSh0LnRvKSxzPWkuY3NzKCJwb3NpdGlvbiIpPT09ImZpeGVkIixvPWUoImJvZHkiKSx1PXM/by5zY3JvbGxUb3AoKTowLGE9cz9vLnNjcm9sbExlZnQoKTowLGY9aS5vZmZzZXQoKSxsPXt0b3A6Zi50b3AtdSxsZWZ0OmYubGVmdC1hLGhlaWdodDppLmlubmVySGVpZ2h0KCksd2lkdGg6aS5pbm5lcldpZHRoKCl9LGM9ci5vZmZzZXQoKSxoPWUoJzxkaXYgY2xhc3M9InVpLWVmZmVjdHMtdHJhbnNmZXIiPjwvZGl2PicpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKHQuY2xhc3NOYW1lKS5jc3Moe3RvcDpjLnRvcC11LGxlZnQ6Yy5sZWZ0LWEsaGVpZ2h0OnIuaW5uZXJIZWlnaHQoKSx3aWR0aDpyLmlubmVyV2lkdGgoKSxwb3NpdGlvbjpzPyJmaXhlZCI6ImFic29sdXRlIn0pLmFuaW1hdGUobCx0LmR1cmF0aW9uLHQuZWFzaW5nLGZ1bmN0aW9uKCl7aC5yZW1vdmUoKSxuKCl9KX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuPSExO2Uud2lkZ2V0KCJ1aS5tZW51Iix7dmVyc2lvbjoiMS45LjAiLGRlZmF1bHRFbGVtZW50OiI8dWw+IixkZWxheTozMDAsb3B0aW9uczp7aWNvbnM6e3N1Ym1lbnU6InVpLWljb24tY2FyYXQtMS1lIn0sbWVudXM6InVsIixwb3NpdGlvbjp7bXk6ImxlZnQgdG9wIixhdDoicmlnaHQgdG9wIn0scm9sZToibWVudSIsYmx1cjpudWxsLGZvY3VzOm51bGwsc2VsZWN0Om51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZU1lbnU9dGhpcy5lbGVtZW50LHRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmFkZENsYXNzKCJ1aS1tZW51IHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikudG9nZ2xlQ2xhc3MoInVpLW1lbnUtaWNvbnMiLCEhdGhpcy5lbGVtZW50LmZpbmQoIi51aS1pY29uIikubGVuZ3RoKS5hdHRyKHtyb2xlOnRoaXMub3B0aW9ucy5yb2xlLHRhYkluZGV4OjB9KS5iaW5kKCJjbGljayIrdGhpcy5ldmVudE5hbWVzcGFjZSxlLnByb3h5KGZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucy5kaXNhYmxlZCYmZS5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzKSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsInRydWUiKSx0aGlzLl9vbih7Im1vdXNlZG93biAudWktbWVudS1pdGVtID4gYSI6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSwiY2xpY2sgLnVpLXN0YXRlLWRpc2FibGVkID4gYSI6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSwiY2xpY2sgLnVpLW1lbnUtaXRlbTpoYXMoYSkiOmZ1bmN0aW9uKHQpe3ZhciByPWUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKTshbiYmci5ub3QoIi51aS1zdGF0ZS1kaXNhYmxlZCIpLmxlbmd0aCYmKG49ITAsdGhpcy5zZWxlY3QodCksci5oYXMoIi51aS1tZW51IikubGVuZ3RoP3RoaXMuZXhwYW5kKHQpOnRoaXMuZWxlbWVudC5pcygiOmZvY3VzIil8fCh0aGlzLmVsZW1lbnQudHJpZ2dlcigiZm9jdXMiLFshMF0pLHRoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZS5wYXJlbnRzKCIudWktbWVudSIpLmxlbmd0aD09PTEmJmNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSkpfSwibW91c2VlbnRlciAudWktbWVudS1pdGVtIjpmdW5jdGlvbih0KXt2YXIgbj1lKHQuY3VycmVudFRhcmdldCk7bi5zaWJsaW5ncygpLmNoaWxkcmVuKCIudWktc3RhdGUtYWN0aXZlIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHRoaXMuZm9jdXModCxuKX0sbW91c2VsZWF2ZToiY29sbGFwc2VBbGwiLCJtb3VzZWxlYXZlIC51aS1tZW51IjoiY29sbGFwc2VBbGwiLGZvY3VzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5hY3RpdmV8fHRoaXMuZWxlbWVudC5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmVxKDApO3R8fHRoaXMuZm9jdXMoZSxuKX0sYmx1cjpmdW5jdGlvbih0KXt0aGlzLl9kZWxheShmdW5jdGlvbigpe2UuY29udGFpbnModGhpcy5lbGVtZW50WzBdLHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCl8fHRoaXMuY29sbGFwc2VBbGwodCl9KX0sa2V5ZG93bjoiX2tleWRvd24ifSksdGhpcy5yZWZyZXNoKCksdGhpcy5fb24odGhpcy5kb2N1bWVudCx7Y2xpY2s6ZnVuY3Rpb24odCl7ZSh0LnRhcmdldCkuY2xvc2VzdCgiLnVpLW1lbnUiKS5sZW5ndGh8fHRoaXMuY29sbGFwc2VBbGwodCksbj0hMX19KX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50IikuZmluZCgiLnVpLW1lbnUiKS5hbmRTZWxmKCkucmVtb3ZlQ2xhc3MoInVpLW1lbnUgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwgdWktbWVudS1pY29ucyIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJ0YWJJbmRleCIpLnJlbW92ZUF0dHIoImFyaWEtbGFiZWxsZWRieSIpLnJlbW92ZUF0dHIoImFyaWEtZXhwYW5kZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKS5yZW1vdmVVbmlxdWVJZCgpLnNob3coKSx0aGlzLmVsZW1lbnQuZmluZCgiLnVpLW1lbnUtaXRlbSIpLnJlbW92ZUNsYXNzKCJ1aS1tZW51LWl0ZW0iKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpLmNoaWxkcmVuKCJhIikucmVtb3ZlVW5pcXVlSWQoKS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCB1aS1zdGF0ZS1ob3ZlciIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtaGFzcG9wdXAiKS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3QuZGF0YSgidWktbWVudS1zdWJtZW51LWNhcmF0IikmJnQucmVtb3ZlKCl9KSx0aGlzLmVsZW1lbnQuZmluZCgiLnVpLW1lbnUtZGl2aWRlciIpLnJlbW92ZUNsYXNzKCJ1aS1tZW51LWRpdmlkZXIgdWktd2lkZ2V0LWNvbnRlbnQiKX0sX2tleWRvd246ZnVuY3Rpb24odCl7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXC1cW1xde30oKSorPy4sXFxcXiR8I1xzXS9nLCJcXCQmIil9dmFyIG4scixpLHMsbyx1PSEwO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLlBBR0VfVVA6dGhpcy5wcmV2aW91c1BhZ2UodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOnRoaXMubmV4dFBhZ2UodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuSE9NRTp0aGlzLl9tb3ZlKCJmaXJzdCIsImZpcnN0Iix0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FTkQ6dGhpcy5fbW92ZSgibGFzdCIsImxhc3QiLHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlVQOnRoaXMucHJldmlvdXModCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRE9XTjp0aGlzLm5leHQodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuTEVGVDp0aGlzLmNvbGxhcHNlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlJJR0hUOnRoaXMuYWN0aXZlJiYhdGhpcy5hY3RpdmUuaXMoIi51aS1zdGF0ZS1kaXNhYmxlZCIpJiZ0aGlzLmV4cGFuZCh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FTlRFUjpjYXNlIGUudWkua2V5Q29kZS5TUEFDRTp0aGlzLl9hY3RpdmF0ZSh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FU0NBUEU6dGhpcy5jb2xsYXBzZSh0KTticmVhaztkZWZhdWx0OnU9ITEscj10aGlzLnByZXZpb3VzRmlsdGVyfHwiIixpPVN0cmluZy5mcm9tQ2hhckNvZGUodC5rZXlDb2RlKSxzPSExLGNsZWFyVGltZW91dCh0aGlzLmZpbHRlclRpbWVyKSxpPT09cj9zPSEwOmk9citpLG89bmV3IFJlZ0V4cCgiXiIrYShpKSwiaSIpLG49dGhpcy5hY3RpdmVNZW51LmNoaWxkcmVuKCIudWktbWVudS1pdGVtIikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIG8udGVzdChlKHRoaXMpLmNoaWxkcmVuKCJhIikudGV4dCgpKX0pLG49cyYmbi5pbmRleCh0aGlzLmFjdGl2ZS5uZXh0KCkpIT09LTE/dGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpOm4sbi5sZW5ndGh8fChpPVN0cmluZy5mcm9tQ2hhckNvZGUodC5rZXlDb2RlKSxvPW5ldyBSZWdFeHAoIl4iK2EoaSksImkiKSxuPXRoaXMuYWN0aXZlTWVudS5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBvLnRlc3QoZSh0aGlzKS5jaGlsZHJlbigiYSIpLnRleHQoKSl9KSksbi5sZW5ndGg/KHRoaXMuZm9jdXModCxuKSxuLmxlbmd0aD4xPyh0aGlzLnByZXZpb3VzRmlsdGVyPWksdGhpcy5maWx0ZXJUaW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLnByZXZpb3VzRmlsdGVyfSwxZTMpKTpkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcik6ZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXJ9dSYmdC5wcmV2ZW50RGVmYXVsdCgpfSxfYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dGhpcy5hY3RpdmUuaXMoIi51aS1zdGF0ZS1kaXNhYmxlZCIpfHwodGhpcy5hY3RpdmUuY2hpbGRyZW4oImFbYXJpYS1oYXNwb3B1cD0ndHJ1ZSddIikubGVuZ3RoP3RoaXMuZXhwYW5kKGUpOnRoaXMuc2VsZWN0KGUpKX0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0LG49dGhpcy5vcHRpb25zLmljb25zLnN1Ym1lbnUscj10aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMubWVudXMrIjpub3QoLnVpLW1lbnUpIikuYWRkQ2xhc3MoInVpLW1lbnUgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS5oaWRlKCkuYXR0cih7cm9sZTp0aGlzLm9wdGlvbnMucm9sZSwiYXJpYS1oaWRkZW4iOiJ0cnVlIiwiYXJpYS1leHBhbmRlZCI6ImZhbHNlIn0pO3Q9ci5hZGQodGhpcy5lbGVtZW50KSx0LmNoaWxkcmVuKCI6bm90KC51aS1tZW51LWl0ZW0pOmhhcyhhKSIpLmFkZENsYXNzKCJ1aS1tZW51LWl0ZW0iKS5hdHRyKCJyb2xlIiwicHJlc2VudGF0aW9uIikuY2hpbGRyZW4oImEiKS51bmlxdWVJZCgpLmFkZENsYXNzKCJ1aS1jb3JuZXItYWxsIikuYXR0cih7dGFiSW5kZXg6LTEscm9sZTp0aGlzLl9pdGVtUm9sZSgpfSksdC5jaGlsZHJlbigiOm5vdCgudWktbWVudS1pdGVtKSIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpOy9bXlwt4oCU4oCTXHNdLy50ZXN0KHQudGV4dCgpKXx8dC5hZGRDbGFzcygidWktd2lkZ2V0LWNvbnRlbnQgdWktbWVudS1kaXZpZGVyIil9KSx0LmNoaWxkcmVuKCIudWktc3RhdGUtZGlzYWJsZWQiKS5hdHRyKCJhcmlhLWRpc2FibGVkIiwidHJ1ZSIpLHIuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcykscj10LnByZXYoImEiKSxpPWUoIjxzcGFuPiIpLmFkZENsYXNzKCJ1aS1tZW51LWljb24gdWktaWNvbiAiK24pLmRhdGEoInVpLW1lbnUtc3VibWVudS1jYXJhdCIsITApO3IuYXR0cigiYXJpYS1oYXNwb3B1cCIsInRydWUiKS5wcmVwZW5kKGkpLHQuYXR0cigiYXJpYS1sYWJlbGxlZGJ5IixyLmF0dHIoImlkIikpfSksdGhpcy5hY3RpdmUmJiFlLmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSx0aGlzLmFjdGl2ZVswXSkmJnRoaXMuYmx1cigpfSxfaXRlbVJvbGU6ZnVuY3Rpb24oKXtyZXR1cm57bWVudToibWVudWl0ZW0iLGxpc3Rib3g6Im9wdGlvbiJ9W3RoaXMub3B0aW9ucy5yb2xlXX0sZm9jdXM6ZnVuY3Rpb24oZSx0KXt2YXIgbixyO3RoaXMuYmx1cihlLGUmJmUudHlwZT09PSJmb2N1cyIpLHRoaXMuX3Njcm9sbEludG9WaWV3KHQpLHRoaXMuYWN0aXZlPXQuZmlyc3QoKSxyPXRoaXMuYWN0aXZlLmNoaWxkcmVuKCJhIikuYWRkQ2xhc3MoInVpLXN0YXRlLWZvY3VzIiksdGhpcy5vcHRpb25zLnJvbGUmJnRoaXMuZWxlbWVudC5hdHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLHIuYXR0cigiaWQiKSksdGhpcy5hY3RpdmUucGFyZW50KCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIpLmNoaWxkcmVuKCJhOmZpcnN0IikuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLGUmJmUudHlwZT09PSJrZXlkb3duIj90aGlzLl9jbG9zZSgpOnRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9jbG9zZSgpfSx0aGlzLmRlbGF5KSxuPXQuY2hpbGRyZW4oIi51aS1tZW51Iiksbi5sZW5ndGgmJi9ebW91c2UvLnRlc3QoZS50eXBlKSYmdGhpcy5fc3RhcnRPcGVuaW5nKG4pLHRoaXMuYWN0aXZlTWVudT10LnBhcmVudCgpLHRoaXMuX3RyaWdnZXIoImZvY3VzIixlLHtpdGVtOnR9KX0sX3Njcm9sbEludG9WaWV3OmZ1bmN0aW9uKHQpe3ZhciBuLHIsaSxzLG8sdTt0aGlzLl9oYXNTY3JvbGwoKSYmKG49cGFyc2VGbG9hdChlLmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sImJvcmRlclRvcFdpZHRoIikpfHwwLHI9cGFyc2VGbG9hdChlLmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sInBhZGRpbmdUb3AiKSl8fDAsaT10Lm9mZnNldCgpLnRvcC10aGlzLmFjdGl2ZU1lbnUub2Zmc2V0KCkudG9wLW4tcixzPXRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AoKSxvPXRoaXMuYWN0aXZlTWVudS5oZWlnaHQoKSx1PXQuaGVpZ2h0KCksaTwwP3RoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AocytpKTppK3U+byYmdGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcChzK2ktbyt1KSl9LGJsdXI6ZnVuY3Rpb24oZSx0KXt0fHxjbGVhclRpbWVvdXQodGhpcy50aW1lcik7aWYoIXRoaXMuYWN0aXZlKXJldHVybjt0aGlzLmFjdGl2ZS5jaGlsZHJlbigiYSIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpLHRoaXMuYWN0aXZlPW51bGwsdGhpcy5fdHJpZ2dlcigiYmx1ciIsZSx7aXRlbTp0aGlzLmFjdGl2ZX0pfSxfc3RhcnRPcGVuaW5nOmZ1bmN0aW9uKGUpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtpZihlLmF0dHIoImFyaWEtaGlkZGVuIikhPT0idHJ1ZSIpcmV0dXJuO3RoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9jbG9zZSgpLHRoaXMuX29wZW4oZSl9LHRoaXMuZGVsYXkpfSxfb3BlbjpmdW5jdGlvbih0KXt2YXIgbj1lLmV4dGVuZCh7b2Y6dGhpcy5hY3RpdmV9LHRoaXMub3B0aW9ucy5wb3NpdGlvbik7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudSIpLm5vdCh0LnBhcmVudHMoIi51aS1tZW51IikpLmhpZGUoKS5hdHRyKCJhcmlhLWhpZGRlbiIsInRydWUiKSx0LnNob3coKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJ0cnVlIikucG9zaXRpb24obil9LGNvbGxhcHNlQWxsOmZ1bmN0aW9uKHQsbil7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt2YXIgcj1uP3RoaXMuZWxlbWVudDplKHQmJnQudGFyZ2V0KS5jbG9zZXN0KHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudSIpKTtyLmxlbmd0aHx8KHI9dGhpcy5lbGVtZW50KSx0aGlzLl9jbG9zZShyKSx0aGlzLmJsdXIodCksdGhpcy5hY3RpdmVNZW51PXJ9LHRoaXMuZGVsYXkpfSxfY2xvc2U6ZnVuY3Rpb24oZSl7ZXx8KGU9dGhpcy5hY3RpdmU/dGhpcy5hY3RpdmUucGFyZW50KCk6dGhpcy5lbGVtZW50KSxlLmZpbmQoIi51aS1tZW51IikuaGlkZSgpLmF0dHIoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJmYWxzZSIpLmVuZCgpLmZpbmQoImEudWktc3RhdGUtYWN0aXZlIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSxjb2xsYXBzZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmFjdGl2ZSYmdGhpcy5hY3RpdmUucGFyZW50KCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIsdGhpcy5lbGVtZW50KTt0JiZ0Lmxlbmd0aCYmKHRoaXMuX2Nsb3NlKCksdGhpcy5mb2N1cyhlLHQpKX0sZXhwYW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZS5jaGlsZHJlbigiLnVpLW1lbnUgIikuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKS5maXJzdCgpO3QmJnQubGVuZ3RoJiYodGhpcy5fb3Blbih0LnBhcmVudCgpKSx0aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuZm9jdXMoZSx0KX0pKX0sbmV4dDpmdW5jdGlvbihlKXt0aGlzLl9tb3ZlKCJuZXh0IiwiZmlyc3QiLGUpfSxwcmV2aW91czpmdW5jdGlvbihlKXt0aGlzLl9tb3ZlKCJwcmV2IiwibGFzdCIsZSl9LGlzRmlyc3RJdGVtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlJiYhdGhpcy5hY3RpdmUucHJldkFsbCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aH0saXNMYXN0SXRlbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLm5leHRBbGwoIi51aS1tZW51LWl0ZW0iKS5sZW5ndGh9LF9tb3ZlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjt0aGlzLmFjdGl2ZSYmKGU9PT0iZmlyc3QifHxlPT09Imxhc3QiP3I9dGhpcy5hY3RpdmVbZT09PSJmaXJzdCI/InByZXZBbGwiOiJuZXh0QWxsIl0oIi51aS1tZW51LWl0ZW0iKS5lcSgtMSk6cj10aGlzLmFjdGl2ZVtlKyJBbGwiXSgiLnVpLW1lbnUtaXRlbSIpLmVxKDApKTtpZighcnx8IXIubGVuZ3RofHwhdGhpcy5hY3RpdmUpcj10aGlzLmFjdGl2ZU1lbnUuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKVt0XSgpO3RoaXMuZm9jdXMobixyKX0sbmV4dFBhZ2U6ZnVuY3Rpb24odCl7dmFyIG4scixpO2lmKCF0aGlzLmFjdGl2ZSl7dGhpcy5uZXh0KHQpO3JldHVybn1pZih0aGlzLmlzTGFzdEl0ZW0oKSlyZXR1cm47dGhpcy5faGFzU2Nyb2xsKCk/KHI9dGhpcy5hY3RpdmUub2Zmc2V0KCkudG9wLGk9dGhpcy5lbGVtZW50LmhlaWdodCgpLHRoaXMuYWN0aXZlLm5leHRBbGwoIi51aS1tZW51LWl0ZW0iKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIG49ZSh0aGlzKSxuLm9mZnNldCgpLnRvcC1yLWk8MH0pLHRoaXMuZm9jdXModCxuKSk6dGhpcy5mb2N1cyh0LHRoaXMuYWN0aXZlTWVudS5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpW3RoaXMuYWN0aXZlPyJsYXN0IjoiZmlyc3QiXSgpKX0scHJldmlvdXNQYWdlOmZ1bmN0aW9uKHQpe3ZhciBuLHIsaTtpZighdGhpcy5hY3RpdmUpe3RoaXMubmV4dCh0KTtyZXR1cm59aWYodGhpcy5pc0ZpcnN0SXRlbSgpKXJldHVybjt0aGlzLl9oYXNTY3JvbGwoKT8ocj10aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3AsaT10aGlzLmVsZW1lbnQuaGVpZ2h0KCksdGhpcy5hY3RpdmUucHJldkFsbCgiLnVpLW1lbnUtaXRlbSIpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gbj1lKHRoaXMpLG4ub2Zmc2V0KCkudG9wLXIraT4wfSksdGhpcy5mb2N1cyh0LG4pKTp0aGlzLmZvY3VzKHQsdGhpcy5hY3RpdmVNZW51LmNoaWxkcmVuKCIudWktbWVudS1pdGVtIikuZmlyc3QoKSl9LF9oYXNTY3JvbGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCk8dGhpcy5lbGVtZW50LnByb3AoInNjcm9sbEhlaWdodCIpfSxzZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5hY3RpdmU9dGhpcy5hY3RpdmV8fGUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKTt2YXIgbj17aXRlbTp0aGlzLmFjdGl2ZX07dGhpcy5hY3RpdmUuaGFzKCIudWktbWVudSIpLmxlbmd0aHx8dGhpcy5jb2xsYXBzZUFsbCh0LCEwKSx0aGlzLl90cmlnZ2VyKCJzZWxlY3QiLHQsbil9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2Uud2lkZ2V0KCJ1aS5wcm9ncmVzc2JhciIse3ZlcnNpb246IjEuOS4wIixvcHRpb25zOnt2YWx1ZTowLG1heDoxMDB9LG1pbjowLF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXByb2dyZXNzYmFyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikuYXR0cih7cm9sZToicHJvZ3Jlc3NiYXIiLCJhcmlhLXZhbHVlbWluIjp0aGlzLm1pbiwiYXJpYS12YWx1ZW1heCI6dGhpcy5vcHRpb25zLm1heCwiYXJpYS12YWx1ZW5vdyI6dGhpcy5fdmFsdWUoKX0pLHRoaXMudmFsdWVEaXY9ZSgiPGRpdiBjbGFzcz0ndWktcHJvZ3Jlc3NiYXItdmFsdWUgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItbGVmdCc+PC9kaXY+IikuYXBwZW5kVG8odGhpcy5lbGVtZW50KSx0aGlzLm9sZFZhbHVlPXRoaXMuX3ZhbHVlKCksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1wcm9ncmVzc2JhciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbWluIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1heCIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVub3ciKSx0aGlzLnZhbHVlRGl2LnJlbW92ZSgpfSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQ/dGhpcy5fdmFsdWUoKToodGhpcy5fc2V0T3B0aW9uKCJ2YWx1ZSIsZSksdGhpcyl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtlPT09InZhbHVlIiYmKHRoaXMub3B0aW9ucy52YWx1ZT10LHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX3ZhbHVlKCk9PT10aGlzLm9wdGlvbnMubWF4JiZ0aGlzLl90cmlnZ2VyKCJjb21wbGV0ZSIpKSx0aGlzLl9zdXBlcihlLHQpfSxfdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMudmFsdWU7cmV0dXJuIHR5cGVvZiBlIT0ibnVtYmVyIiYmKGU9MCksTWF0aC5taW4odGhpcy5vcHRpb25zLm1heCxNYXRoLm1heCh0aGlzLm1pbixlKSl9LF9wZXJjZW50YWdlOmZ1bmN0aW9uKCl7cmV0dXJuIDEwMCp0aGlzLl92YWx1ZSgpL3RoaXMub3B0aW9ucy5tYXh9LF9yZWZyZXNoVmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnZhbHVlKCksdD10aGlzLl9wZXJjZW50YWdlKCk7dGhpcy5vbGRWYWx1ZSE9PWUmJih0aGlzLm9sZFZhbHVlPWUsdGhpcy5fdHJpZ2dlcigiY2hhbmdlIikpLHRoaXMudmFsdWVEaXYudG9nZ2xlKGU+dGhpcy5taW4pLnRvZ2dsZUNsYXNzKCJ1aS1jb3JuZXItcmlnaHQiLGU9PT10aGlzLm9wdGlvbnMubWF4KS53aWR0aCh0LnRvRml4ZWQoMCkrIiUiKSx0aGlzLmVsZW1lbnQuYXR0cigiYXJpYS12YWx1ZW5vdyIsZSl9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2Uud2lkZ2V0KCJ1aS5yZXNpemFibGUiLGUudWkubW91c2Use3ZlcnNpb246IjEuOS4wIix3aWRnZXRFdmVudFByZWZpeDoicmVzaXplIixvcHRpb25zOnthbHNvUmVzaXplOiExLGFuaW1hdGU6ITEsYW5pbWF0ZUR1cmF0aW9uOiJzbG93IixhbmltYXRlRWFzaW5nOiJzd2luZyIsYXNwZWN0UmF0aW86ITEsYXV0b0hpZGU6ITEsY29udGFpbm1lbnQ6ITEsZ2hvc3Q6ITEsZ3JpZDohMSxoYW5kbGVzOiJlLHMsc2UiLGhlbHBlcjohMSxtYXhIZWlnaHQ6bnVsbCxtYXhXaWR0aDpudWxsLG1pbkhlaWdodDoxMCxtaW5XaWR0aDoxMCx6SW5kZXg6MWUzfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPXRoaXMub3B0aW9uczt0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZSIpLGUuZXh0ZW5kKHRoaXMse19hc3BlY3RSYXRpbzohIW4uYXNwZWN0UmF0aW8sYXNwZWN0UmF0aW86bi5hc3BlY3RSYXRpbyxvcmlnaW5hbEVsZW1lbnQ6dGhpcy5lbGVtZW50LF9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzOltdLF9oZWxwZXI6bi5oZWxwZXJ8fG4uZ2hvc3R8fG4uYW5pbWF0ZT9uLmhlbHBlcnx8InVpLXJlc2l6YWJsZS1oZWxwZXIiOm51bGx9KSx0aGlzLmVsZW1lbnRbMF0ubm9kZU5hbWUubWF0Y2goL2NhbnZhc3x0ZXh0YXJlYXxpbnB1dHxzZWxlY3R8YnV0dG9ufGltZy9pKSYmKHRoaXMuZWxlbWVudC53cmFwKGUoJzxkaXYgY2xhc3M9InVpLXdyYXBwZXIiIHN0eWxlPSJvdmVyZmxvdzogaGlkZGVuOyI+PC9kaXY+JykuY3NzKHtwb3NpdGlvbjp0aGlzLmVsZW1lbnQuY3NzKCJwb3NpdGlvbiIpLHdpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLHRvcDp0aGlzLmVsZW1lbnQuY3NzKCJ0b3AiKSxsZWZ0OnRoaXMuZWxlbWVudC5jc3MoImxlZnQiKX0pKSx0aGlzLmVsZW1lbnQ9dGhpcy5lbGVtZW50LnBhcmVudCgpLmRhdGEoInJlc2l6YWJsZSIsdGhpcy5lbGVtZW50LmRhdGEoInJlc2l6YWJsZSIpKSx0aGlzLmVsZW1lbnRJc1dyYXBwZXI9ITAsdGhpcy5lbGVtZW50LmNzcyh7bWFyZ2luTGVmdDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpbkxlZnQiKSxtYXJnaW5Ub3A6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5Ub3AiKSxtYXJnaW5SaWdodDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpblJpZ2h0IiksbWFyZ2luQm90dG9tOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luQm90dG9tIil9KSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe21hcmdpbkxlZnQ6MCxtYXJnaW5Ub3A6MCxtYXJnaW5SaWdodDowLG1hcmdpbkJvdHRvbTowfSksdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlPXRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygicmVzaXplIiksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJyZXNpemUiLCJub25lIiksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5wdXNoKHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7cG9zaXRpb246InN0YXRpYyIsem9vbToxLGRpc3BsYXk6ImJsb2NrIn0pKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe21hcmdpbjp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpbiIpfSksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSksdGhpcy5oYW5kbGVzPW4uaGFuZGxlc3x8KGUoIi51aS1yZXNpemFibGUtaGFuZGxlIix0aGlzLmVsZW1lbnQpLmxlbmd0aD97bjoiLnVpLXJlc2l6YWJsZS1uIixlOiIudWktcmVzaXphYmxlLWUiLHM6Ii51aS1yZXNpemFibGUtcyIsdzoiLnVpLXJlc2l6YWJsZS13IixzZToiLnVpLXJlc2l6YWJsZS1zZSIsc3c6Ii51aS1yZXNpemFibGUtc3ciLG5lOiIudWktcmVzaXphYmxlLW5lIixudzoiLnVpLXJlc2l6YWJsZS1udyJ9OiJlLHMsc2UiKTtpZih0aGlzLmhhbmRsZXMuY29uc3RydWN0b3I9PVN0cmluZyl7dGhpcy5oYW5kbGVzPT0iYWxsIiYmKHRoaXMuaGFuZGxlcz0ibixlLHMsdyxzZSxzdyxuZSxudyIpO3ZhciByPXRoaXMuaGFuZGxlcy5zcGxpdCgiLCIpO3RoaXMuaGFuZGxlcz17fTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIHM9ZS50cmltKHJbaV0pLG89InVpLXJlc2l6YWJsZS0iK3MsdT1lKCc8ZGl2IGNsYXNzPSJ1aS1yZXNpemFibGUtaGFuZGxlICcrbysnIj48L2Rpdj4nKTt1LmNzcyh7ekluZGV4Om4uekluZGV4fSksInNlIj09cyYmdS5hZGRDbGFzcygidWktaWNvbiB1aS1pY29uLWdyaXBzbWFsbC1kaWFnb25hbC1zZSIpLHRoaXMuaGFuZGxlc1tzXT0iLnVpLXJlc2l6YWJsZS0iK3MsdGhpcy5lbGVtZW50LmFwcGVuZCh1KX19dGhpcy5fcmVuZGVyQXhpcz1mdW5jdGlvbih0KXt0PXR8fHRoaXMuZWxlbWVudDtmb3IodmFyIG4gaW4gdGhpcy5oYW5kbGVzKXt0aGlzLmhhbmRsZXNbbl0uY29uc3RydWN0b3I9PVN0cmluZyYmKHRoaXMuaGFuZGxlc1tuXT1lKHRoaXMuaGFuZGxlc1tuXSx0aGlzLmVsZW1lbnQpLnNob3coKSk7aWYodGhpcy5lbGVtZW50SXNXcmFwcGVyJiZ0aGlzLm9yaWdpbmFsRWxlbWVudFswXS5ub2RlTmFtZS5tYXRjaCgvdGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbi9pKSl7dmFyIHI9ZSh0aGlzLmhhbmRsZXNbbl0sdGhpcy5lbGVtZW50KSxpPTA7aT0vc3d8bmV8bnd8c2V8bnxzLy50ZXN0KG4pP3Iub3V0ZXJIZWlnaHQoKTpyLm91dGVyV2lkdGgoKTt2YXIgcz1bInBhZGRpbmciLC9uZXxud3xuLy50ZXN0KG4pPyJUb3AiOi9zZXxzd3xzLy50ZXN0KG4pPyJCb3R0b20iOi9eZSQvLnRlc3Qobik/IlJpZ2h0IjoiTGVmdCJdLmpvaW4oIiIpO3QuY3NzKHMsaSksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKX1pZighZSh0aGlzLmhhbmRsZXNbbl0pLmxlbmd0aCljb250aW51ZX19LHRoaXMuX3JlbmRlckF4aXModGhpcy5lbGVtZW50KSx0aGlzLl9oYW5kbGVzPWUoIi51aS1yZXNpemFibGUtaGFuZGxlIix0aGlzLmVsZW1lbnQpLmRpc2FibGVTZWxlY3Rpb24oKSx0aGlzLl9oYW5kbGVzLm1vdXNlb3ZlcihmdW5jdGlvbigpe2lmKCF0LnJlc2l6aW5nKXtpZih0aGlzLmNsYXNzTmFtZSl2YXIgZT10aGlzLmNsYXNzTmFtZS5tYXRjaCgvdWktcmVzaXphYmxlLShzZXxzd3xuZXxud3xufGV8c3x3KS9pKTt0LmF4aXM9ZSYmZVsxXT9lWzFdOiJzZSJ9fSksbi5hdXRvSGlkZSYmKHRoaXMuX2hhbmRsZXMuaGlkZSgpLGUodGhpcy5lbGVtZW50KS5hZGRDbGFzcygidWktcmVzaXphYmxlLWF1dG9oaWRlIikubW91c2VlbnRlcihmdW5jdGlvbigpe2lmKG4uZGlzYWJsZWQpcmV0dXJuO2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpLHQuX2hhbmRsZXMuc2hvdygpfSkubW91c2VsZWF2ZShmdW5jdGlvbigpe2lmKG4uZGlzYWJsZWQpcmV0dXJuO3QucmVzaXppbmd8fChlKHRoaXMpLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtYXV0b2hpZGUiKSx0Ll9oYW5kbGVzLmhpZGUoKSl9KSksdGhpcy5fbW91c2VJbml0KCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fbW91c2VEZXN0cm95KCk7dmFyIHQ9ZnVuY3Rpb24odCl7ZSh0KS5yZW1vdmVDbGFzcygidWktcmVzaXphYmxlIHVpLXJlc2l6YWJsZS1kaXNhYmxlZCB1aS1yZXNpemFibGUtcmVzaXppbmciKS5yZW1vdmVEYXRhKCJyZXNpemFibGUiKS5yZW1vdmVEYXRhKCJ1aS1yZXNpemFibGUiKS51bmJpbmQoIi5yZXNpemFibGUiKS5maW5kKCIudWktcmVzaXphYmxlLWhhbmRsZSIpLnJlbW92ZSgpfTtpZih0aGlzLmVsZW1lbnRJc1dyYXBwZXIpe3QodGhpcy5lbGVtZW50KTt2YXIgbj10aGlzLmVsZW1lbnQ7bi5hZnRlcih0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe3Bvc2l0aW9uOm4uY3NzKCJwb3NpdGlvbiIpLHdpZHRoOm4ub3V0ZXJXaWR0aCgpLGhlaWdodDpuLm91dGVySGVpZ2h0KCksdG9wOm4uY3NzKCJ0b3AiKSxsZWZ0Om4uY3NzKCJsZWZ0Iil9KSkucmVtb3ZlKCl9cmV0dXJuIHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygicmVzaXplIix0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGUpLHQodGhpcy5vcmlnaW5hbEVsZW1lbnQpLHRoaXN9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24odCl7dmFyIG49ITE7Zm9yKHZhciByIGluIHRoaXMuaGFuZGxlcyllKHRoaXMuaGFuZGxlc1tyXSlbMF09PXQudGFyZ2V0JiYobj0hMCk7cmV0dXJuIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmbn0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5vcHRpb25zLGk9dGhpcy5lbGVtZW50LnBvc2l0aW9uKCkscz10aGlzLmVsZW1lbnQ7dGhpcy5yZXNpemluZz0hMCx0aGlzLmRvY3VtZW50U2Nyb2xsPXt0b3A6ZShkb2N1bWVudCkuc2Nyb2xsVG9wKCksbGVmdDplKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCl9LChzLmlzKCIudWktZHJhZ2dhYmxlIil8fC9hYnNvbHV0ZS8udGVzdChzLmNzcygicG9zaXRpb24iKSkpJiZzLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6aS50b3AsbGVmdDppLmxlZnR9KSx0aGlzLl9yZW5kZXJQcm94eSgpO3ZhciBvPW4odGhpcy5oZWxwZXIuY3NzKCJsZWZ0IikpLHU9bih0aGlzLmhlbHBlci5jc3MoInRvcCIpKTtyLmNvbnRhaW5tZW50JiYobys9ZShyLmNvbnRhaW5tZW50KS5zY3JvbGxMZWZ0KCl8fDAsdSs9ZShyLmNvbnRhaW5tZW50KS5zY3JvbGxUb3AoKXx8MCksdGhpcy5vZmZzZXQ9dGhpcy5oZWxwZXIub2Zmc2V0KCksdGhpcy5wb3NpdGlvbj17bGVmdDpvLHRvcDp1fSx0aGlzLnNpemU9dGhpcy5faGVscGVyP3t3aWR0aDpzLm91dGVyV2lkdGgoKSxoZWlnaHQ6cy5vdXRlckhlaWdodCgpfTp7d2lkdGg6cy53aWR0aCgpLGhlaWdodDpzLmhlaWdodCgpfSx0aGlzLm9yaWdpbmFsU2l6ZT10aGlzLl9oZWxwZXI/e3dpZHRoOnMub3V0ZXJXaWR0aCgpLGhlaWdodDpzLm91dGVySGVpZ2h0KCl9Ont3aWR0aDpzLndpZHRoKCksaGVpZ2h0OnMuaGVpZ2h0KCl9LHRoaXMub3JpZ2luYWxQb3NpdGlvbj17bGVmdDpvLHRvcDp1fSx0aGlzLnNpemVEaWZmPXt3aWR0aDpzLm91dGVyV2lkdGgoKS1zLndpZHRoKCksaGVpZ2h0OnMub3V0ZXJIZWlnaHQoKS1zLmhlaWdodCgpfSx0aGlzLm9yaWdpbmFsTW91c2VQb3NpdGlvbj17bGVmdDp0LnBhZ2VYLHRvcDp0LnBhZ2VZfSx0aGlzLmFzcGVjdFJhdGlvPXR5cGVvZiByLmFzcGVjdFJhdGlvPT0ibnVtYmVyIj9yLmFzcGVjdFJhdGlvOnRoaXMub3JpZ2luYWxTaXplLndpZHRoL3RoaXMub3JpZ2luYWxTaXplLmhlaWdodHx8MTt2YXIgYT1lKCIudWktcmVzaXphYmxlLSIrdGhpcy5heGlzKS5jc3MoImN1cnNvciIpO3JldHVybiBlKCJib2R5IikuY3NzKCJjdXJzb3IiLGE9PSJhdXRvIj90aGlzLmF4aXMrIi1yZXNpemUiOmEpLHMuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1yZXNpemluZyIpLHRoaXMuX3Byb3BhZ2F0ZSgic3RhcnQiLHQpLCEwfSxfbW91c2VEcmFnOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuaGVscGVyLG49dGhpcy5vcHRpb25zLHI9e30saT10aGlzLHM9dGhpcy5vcmlnaW5hbE1vdXNlUG9zaXRpb24sbz10aGlzLmF4aXMsdT1lLnBhZ2VYLXMubGVmdHx8MCxhPWUucGFnZVktcy50b3B8fDAsZj10aGlzLl9jaGFuZ2Vbb107aWYoIWYpcmV0dXJuITE7dmFyIGw9Zi5hcHBseSh0aGlzLFtlLHUsYV0pO3RoaXMuX3VwZGF0ZVZpcnR1YWxCb3VuZGFyaWVzKGUuc2hpZnRLZXkpO2lmKHRoaXMuX2FzcGVjdFJhdGlvfHxlLnNoaWZ0S2V5KWw9dGhpcy5fdXBkYXRlUmF0aW8obCxlKTtyZXR1cm4gbD10aGlzLl9yZXNwZWN0U2l6ZShsLGUpLHRoaXMuX3Byb3BhZ2F0ZSgicmVzaXplIixlKSx0LmNzcyh7dG9wOnRoaXMucG9zaXRpb24udG9wKyJweCIsbGVmdDp0aGlzLnBvc2l0aW9uLmxlZnQrInB4Iix3aWR0aDp0aGlzLnNpemUud2lkdGgrInB4IixoZWlnaHQ6dGhpcy5zaXplLmhlaWdodCsicHgifSksIXRoaXMuX2hlbHBlciYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGgmJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCksdGhpcy5fdXBkYXRlQ2FjaGUobCksdGhpcy5fdHJpZ2dlcigicmVzaXplIixlLHRoaXMudWkoKSksITF9LF9tb3VzZVN0b3A6ZnVuY3Rpb24odCl7dGhpcy5yZXNpemluZz0hMTt2YXIgbj10aGlzLm9wdGlvbnMscj10aGlzO2lmKHRoaXMuX2hlbHBlcil7dmFyIGk9dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cyxzPWkubGVuZ3RoJiYvdGV4dGFyZWEvaS50ZXN0KGlbMF0ubm9kZU5hbWUpLG89cyYmZS51aS5oYXNTY3JvbGwoaVswXSwibGVmdCIpPzA6ci5zaXplRGlmZi5oZWlnaHQsdT1zPzA6ci5zaXplRGlmZi53aWR0aCxhPXt3aWR0aDpyLmhlbHBlci53aWR0aCgpLXUsaGVpZ2h0OnIuaGVscGVyLmhlaWdodCgpLW99LGY9cGFyc2VJbnQoci5lbGVtZW50LmNzcygibGVmdCIpLDEwKSsoci5wb3NpdGlvbi5sZWZ0LXIub3JpZ2luYWxQb3NpdGlvbi5sZWZ0KXx8bnVsbCxsPXBhcnNlSW50KHIuZWxlbWVudC5jc3MoInRvcCIpLDEwKSsoci5wb3NpdGlvbi50b3Atci5vcmlnaW5hbFBvc2l0aW9uLnRvcCl8fG51bGw7bi5hbmltYXRlfHx0aGlzLmVsZW1lbnQuY3NzKGUuZXh0ZW5kKGEse3RvcDpsLGxlZnQ6Zn0pKSxyLmhlbHBlci5oZWlnaHQoci5zaXplLmhlaWdodCksci5oZWxwZXIud2lkdGgoci5zaXplLndpZHRoKSx0aGlzLl9oZWxwZXImJiFuLmFuaW1hdGUmJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCl9cmV0dXJuIGUoImJvZHkiKS5jc3MoImN1cnNvciIsImF1dG8iKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZS1yZXNpemluZyIpLHRoaXMuX3Byb3BhZ2F0ZSgic3RvcCIsdCksdGhpcy5faGVscGVyJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSwhMX0sX3VwZGF0ZVZpcnR1YWxCb3VuZGFyaWVzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub3B0aW9ucyxuLGkscyxvLHU7dT17bWluV2lkdGg6cih0Lm1pbldpZHRoKT90Lm1pbldpZHRoOjAsbWF4V2lkdGg6cih0Lm1heFdpZHRoKT90Lm1heFdpZHRoOkluZmluaXR5LG1pbkhlaWdodDpyKHQubWluSGVpZ2h0KT90Lm1pbkhlaWdodDowLG1heEhlaWdodDpyKHQubWF4SGVpZ2h0KT90Lm1heEhlaWdodDpJbmZpbml0eX07aWYodGhpcy5fYXNwZWN0UmF0aW98fGUpbj11Lm1pbkhlaWdodCp0aGlzLmFzcGVjdFJhdGlvLHM9dS5taW5XaWR0aC90aGlzLmFzcGVjdFJhdGlvLGk9dS5tYXhIZWlnaHQqdGhpcy5hc3BlY3RSYXRpbyxvPXUubWF4V2lkdGgvdGhpcy5hc3BlY3RSYXRpbyxuPnUubWluV2lkdGgmJih1Lm1pbldpZHRoPW4pLHM+dS5taW5IZWlnaHQmJih1Lm1pbkhlaWdodD1zKSxpPHUubWF4V2lkdGgmJih1Lm1heFdpZHRoPWkpLG88dS5tYXhIZWlnaHQmJih1Lm1heEhlaWdodD1vKTt0aGlzLl92Qm91bmRhcmllcz11fSxfdXBkYXRlQ2FjaGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vcHRpb25zO3RoaXMub2Zmc2V0PXRoaXMuaGVscGVyLm9mZnNldCgpLHIoZS5sZWZ0KSYmKHRoaXMucG9zaXRpb24ubGVmdD1lLmxlZnQpLHIoZS50b3ApJiYodGhpcy5wb3NpdGlvbi50b3A9ZS50b3ApLHIoZS5oZWlnaHQpJiYodGhpcy5zaXplLmhlaWdodD1lLmhlaWdodCkscihlLndpZHRoKSYmKHRoaXMuc2l6ZS53aWR0aD1lLndpZHRoKX0sX3VwZGF0ZVJhdGlvOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5vcHRpb25zLGk9dGhpcy5wb3NpdGlvbixzPXRoaXMuc2l6ZSxvPXRoaXMuYXhpcztyZXR1cm4gcihlLmhlaWdodCk/ZS53aWR0aD1lLmhlaWdodCp0aGlzLmFzcGVjdFJhdGlvOnIoZS53aWR0aCkmJihlLmhlaWdodD1lLndpZHRoL3RoaXMuYXNwZWN0UmF0aW8pLG89PSJzdyImJihlLmxlZnQ9aS5sZWZ0KyhzLndpZHRoLWUud2lkdGgpLGUudG9wPW51bGwpLG89PSJudyImJihlLnRvcD1pLnRvcCsocy5oZWlnaHQtZS5oZWlnaHQpLGUubGVmdD1pLmxlZnQrKHMud2lkdGgtZS53aWR0aCkpLGV9LF9yZXNwZWN0U2l6ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuaGVscGVyLGk9dGhpcy5fdkJvdW5kYXJpZXMscz10aGlzLl9hc3BlY3RSYXRpb3x8dC5zaGlmdEtleSxvPXRoaXMuYXhpcyx1PXIoZS53aWR0aCkmJmkubWF4V2lkdGgmJmkubWF4V2lkdGg8ZS53aWR0aCxhPXIoZS5oZWlnaHQpJiZpLm1heEhlaWdodCYmaS5tYXhIZWlnaHQ8ZS5oZWlnaHQsZj1yKGUud2lkdGgpJiZpLm1pbldpZHRoJiZpLm1pbldpZHRoPmUud2lkdGgsbD1yKGUuaGVpZ2h0KSYmaS5taW5IZWlnaHQmJmkubWluSGVpZ2h0PmUuaGVpZ2h0O2YmJihlLndpZHRoPWkubWluV2lkdGgpLGwmJihlLmhlaWdodD1pLm1pbkhlaWdodCksdSYmKGUud2lkdGg9aS5tYXhXaWR0aCksYSYmKGUuaGVpZ2h0PWkubWF4SGVpZ2h0KTt2YXIgYz10aGlzLm9yaWdpbmFsUG9zaXRpb24ubGVmdCt0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aCxoPXRoaXMucG9zaXRpb24udG9wK3RoaXMuc2l6ZS5oZWlnaHQscD0vc3d8bnd8dy8udGVzdChvKSxkPS9ud3xuZXxuLy50ZXN0KG8pO2YmJnAmJihlLmxlZnQ9Yy1pLm1pbldpZHRoKSx1JiZwJiYoZS5sZWZ0PWMtaS5tYXhXaWR0aCksbCYmZCYmKGUudG9wPWgtaS5taW5IZWlnaHQpLGEmJmQmJihlLnRvcD1oLWkubWF4SGVpZ2h0KTt2YXIgdj0hZS53aWR0aCYmIWUuaGVpZ2h0O3JldHVybiB2JiYhZS5sZWZ0JiZlLnRvcD9lLnRvcD1udWxsOnYmJiFlLnRvcCYmZS5sZWZ0JiYoZS5sZWZ0PW51bGwpLGV9LF9wcm9wb3J0aW9uYWxseVJlc2l6ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucztpZighdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGgpcmV0dXJuO3ZhciBuPXRoaXMuaGVscGVyfHx0aGlzLmVsZW1lbnQ7Zm9yKHZhciByPTA7cjx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aDtyKyspe3ZhciBpPXRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHNbcl07aWYoIXRoaXMuYm9yZGVyRGlmKXt2YXIgcz1baS5jc3MoImJvcmRlclRvcFdpZHRoIiksaS5jc3MoImJvcmRlclJpZ2h0V2lkdGgiKSxpLmNzcygiYm9yZGVyQm90dG9tV2lkdGgiKSxpLmNzcygiYm9yZGVyTGVmdFdpZHRoIildLG89W2kuY3NzKCJwYWRkaW5nVG9wIiksaS5jc3MoInBhZGRpbmdSaWdodCIpLGkuY3NzKCJwYWRkaW5nQm90dG9tIiksaS5jc3MoInBhZGRpbmdMZWZ0IildO3RoaXMuYm9yZGVyRGlmPWUubWFwKHMsZnVuY3Rpb24oZSx0KXt2YXIgbj1wYXJzZUludChlLDEwKXx8MCxyPXBhcnNlSW50KG9bdF0sMTApfHwwO3JldHVybiBuK3J9KX1pLmNzcyh7aGVpZ2h0Om4uaGVpZ2h0KCktdGhpcy5ib3JkZXJEaWZbMF0tdGhpcy5ib3JkZXJEaWZbMl18fDAsd2lkdGg6bi53aWR0aCgpLXRoaXMuYm9yZGVyRGlmWzFdLXRoaXMuYm9yZGVyRGlmWzNdfHwwfSl9fSxfcmVuZGVyUHJveHk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQsbj10aGlzLm9wdGlvbnM7dGhpcy5lbGVtZW50T2Zmc2V0PXQub2Zmc2V0KCk7aWYodGhpcy5faGVscGVyKXt0aGlzLmhlbHBlcj10aGlzLmhlbHBlcnx8ZSgnPGRpdiBzdHlsZT0ib3ZlcmZsb3c6aGlkZGVuOyI+PC9kaXY+Jyk7dmFyIHI9ZS5icm93c2VyLm1zaWUmJmUuYnJvd3Nlci52ZXJzaW9uPDcsaT1yPzE6MCxzPXI/MjotMTt0aGlzLmhlbHBlci5hZGRDbGFzcyh0aGlzLl9oZWxwZXIpLmNzcyh7d2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKStzLGhlaWdodDp0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKStzLHBvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDp0aGlzLmVsZW1lbnRPZmZzZXQubGVmdC1pKyJweCIsdG9wOnRoaXMuZWxlbWVudE9mZnNldC50b3AtaSsicHgiLHpJbmRleDorK24uekluZGV4fSksdGhpcy5oZWxwZXIuYXBwZW5kVG8oImJvZHkiKS5kaXNhYmxlU2VsZWN0aW9uKCl9ZWxzZSB0aGlzLmhlbHBlcj10aGlzLmVsZW1lbnR9LF9jaGFuZ2U6e2U6ZnVuY3Rpb24oZSx0LG4pe3JldHVybnt3aWR0aDp0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aCt0fX0sdzpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5vcHRpb25zLGk9dGhpcy5vcmlnaW5hbFNpemUscz10aGlzLm9yaWdpbmFsUG9zaXRpb247cmV0dXJue2xlZnQ6cy5sZWZ0K3Qsd2lkdGg6aS53aWR0aC10fX0sbjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5vcHRpb25zLGk9dGhpcy5vcmlnaW5hbFNpemUscz10aGlzLm9yaWdpbmFsUG9zaXRpb247cmV0dXJue3RvcDpzLnRvcCtuLGhlaWdodDppLmhlaWdodC1ufX0sczpmdW5jdGlvbihlLHQsbil7cmV0dXJue2hlaWdodDp0aGlzLm9yaWdpbmFsU2l6ZS5oZWlnaHQrbn19LHNlOmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gZS5leHRlbmQodGhpcy5fY2hhbmdlLnMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS5lLmFwcGx5KHRoaXMsW3QsbixyXSkpfSxzdzpmdW5jdGlvbih0LG4scil7cmV0dXJuIGUuZXh0ZW5kKHRoaXMuX2NoYW5nZS5zLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2Uudy5hcHBseSh0aGlzLFt0LG4scl0pKX0sbmU6ZnVuY3Rpb24odCxuLHIpe3JldHVybiBlLmV4dGVuZCh0aGlzLl9jaGFuZ2Uubi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLmUuYXBwbHkodGhpcyxbdCxuLHJdKSl9LG53OmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gZS5leHRlbmQodGhpcy5fY2hhbmdlLm4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS53LmFwcGx5KHRoaXMsW3QsbixyXSkpfX0sX3Byb3BhZ2F0ZTpmdW5jdGlvbih0LG4pe2UudWkucGx1Z2luLmNhbGwodGhpcyx0LFtuLHRoaXMudWkoKV0pLHQhPSJyZXNpemUiJiZ0aGlzLl90cmlnZ2VyKHQsbix0aGlzLnVpKCkpfSxwbHVnaW5zOnt9LHVpOmZ1bmN0aW9uKCl7cmV0dXJue29yaWdpbmFsRWxlbWVudDp0aGlzLm9yaWdpbmFsRWxlbWVudCxlbGVtZW50OnRoaXMuZWxlbWVudCxoZWxwZXI6dGhpcy5oZWxwZXIscG9zaXRpb246dGhpcy5wb3NpdGlvbixzaXplOnRoaXMuc2l6ZSxvcmlnaW5hbFNpemU6dGhpcy5vcmlnaW5hbFNpemUsb3JpZ2luYWxQb3NpdGlvbjp0aGlzLm9yaWdpbmFsUG9zaXRpb259fX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiYWxzb1Jlc2l6ZSIse3N0YXJ0OmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxpPXIub3B0aW9ucyxzPWZ1bmN0aW9uKHQpe2UodCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dC5kYXRhKCJyZXNpemFibGUtYWxzb3Jlc2l6ZSIse3dpZHRoOnBhcnNlSW50KHQud2lkdGgoKSwxMCksaGVpZ2h0OnBhcnNlSW50KHQuaGVpZ2h0KCksMTApLGxlZnQ6cGFyc2VJbnQodC5jc3MoImxlZnQiKSwxMCksdG9wOnBhcnNlSW50KHQuY3NzKCJ0b3AiKSwxMCl9KX0pfTt0eXBlb2YgaS5hbHNvUmVzaXplPT0ib2JqZWN0IiYmIWkuYWxzb1Jlc2l6ZS5wYXJlbnROb2RlP2kuYWxzb1Jlc2l6ZS5sZW5ndGg/KGkuYWxzb1Jlc2l6ZT1pLmFsc29SZXNpemVbMF0scyhpLmFsc29SZXNpemUpKTplLmVhY2goaS5hbHNvUmVzaXplLGZ1bmN0aW9uKGUpe3MoZSl9KTpzKGkuYWxzb1Jlc2l6ZSl9LHJlc2l6ZTpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgicmVzaXphYmxlIiksaT1yLm9wdGlvbnMscz1yLm9yaWdpbmFsU2l6ZSxvPXIub3JpZ2luYWxQb3NpdGlvbix1PXtoZWlnaHQ6ci5zaXplLmhlaWdodC1zLmhlaWdodHx8MCx3aWR0aDpyLnNpemUud2lkdGgtcy53aWR0aHx8MCx0b3A6ci5wb3NpdGlvbi50b3Atby50b3B8fDAsbGVmdDpyLnBvc2l0aW9uLmxlZnQtby5sZWZ0fHwwfSxhPWZ1bmN0aW9uKHQscil7ZSh0KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKSxpPWUodGhpcykuZGF0YSgicmVzaXphYmxlLWFsc29yZXNpemUiKSxzPXt9LG89ciYmci5sZW5ndGg/cjp0LnBhcmVudHMobi5vcmlnaW5hbEVsZW1lbnRbMF0pLmxlbmd0aD9bIndpZHRoIiwiaGVpZ2h0Il06WyJ3aWR0aCIsImhlaWdodCIsInRvcCIsImxlZnQiXTtlLmVhY2gobyxmdW5jdGlvbihlLHQpe3ZhciBuPShpW3RdfHwwKSsodVt0XXx8MCk7biYmbj49MCYmKHNbdF09bnx8bnVsbCl9KSx0LmNzcyhzKX0pfTt0eXBlb2YgaS5hbHNvUmVzaXplPT0ib2JqZWN0IiYmIWkuYWxzb1Jlc2l6ZS5ub2RlVHlwZT9lLmVhY2goaS5hbHNvUmVzaXplLGZ1bmN0aW9uKGUsdCl7YShlLHQpfSk6YShpLmFsc29SZXNpemUpfSxzdG9wOmZ1bmN0aW9uKHQsbil7ZSh0aGlzKS5yZW1vdmVEYXRhKCJyZXNpemFibGUtYWxzb3Jlc2l6ZSIpfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiYW5pbWF0ZSIse3N0b3A6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGk9ci5vcHRpb25zLHM9ci5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cyxvPXMubGVuZ3RoJiYvdGV4dGFyZWEvaS50ZXN0KHNbMF0ubm9kZU5hbWUpLHU9byYmZS51aS5oYXNTY3JvbGwoc1swXSwibGVmdCIpPzA6ci5zaXplRGlmZi5oZWlnaHQsYT1vPzA6ci5zaXplRGlmZi53aWR0aCxmPXt3aWR0aDpyLnNpemUud2lkdGgtYSxoZWlnaHQ6ci5zaXplLmhlaWdodC11fSxsPXBhcnNlSW50KHIuZWxlbWVudC5jc3MoImxlZnQiKSwxMCkrKHIucG9zaXRpb24ubGVmdC1yLm9yaWdpbmFsUG9zaXRpb24ubGVmdCl8fG51bGwsYz1wYXJzZUludChyLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCkrKHIucG9zaXRpb24udG9wLXIub3JpZ2luYWxQb3NpdGlvbi50b3ApfHxudWxsO3IuZWxlbWVudC5hbmltYXRlKGUuZXh0ZW5kKGYsYyYmbD97dG9wOmMsbGVmdDpsfTp7fSkse2R1cmF0aW9uOmkuYW5pbWF0ZUR1cmF0aW9uLGVhc2luZzppLmFuaW1hdGVFYXNpbmcsc3RlcDpmdW5jdGlvbigpe3ZhciBuPXt3aWR0aDpwYXJzZUludChyLmVsZW1lbnQuY3NzKCJ3aWR0aCIpLDEwKSxoZWlnaHQ6cGFyc2VJbnQoci5lbGVtZW50LmNzcygiaGVpZ2h0IiksMTApLHRvcDpwYXJzZUludChyLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCksbGVmdDpwYXJzZUludChyLmVsZW1lbnQuY3NzKCJsZWZ0IiksMTApfTtzJiZzLmxlbmd0aCYmZShzWzBdKS5jc3Moe3dpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0fSksci5fdXBkYXRlQ2FjaGUobiksci5fcHJvcGFnYXRlKCJyZXNpemUiLHQpfX0pfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiY29udGFpbm1lbnQiLHtzdGFydDpmdW5jdGlvbih0LHIpe3ZhciBpPWUodGhpcykuZGF0YSgicmVzaXphYmxlIikscz1pLm9wdGlvbnMsbz1pLmVsZW1lbnQsdT1zLmNvbnRhaW5tZW50LGE9dSBpbnN0YW5jZW9mIGU/dS5nZXQoMCk6L3BhcmVudC8udGVzdCh1KT9vLnBhcmVudCgpLmdldCgwKTp1O2lmKCFhKXJldHVybjtpLmNvbnRhaW5lckVsZW1lbnQ9ZShhKTtpZigvZG9jdW1lbnQvLnRlc3QodSl8fHU9PWRvY3VtZW50KWkuY29udGFpbmVyT2Zmc2V0PXtsZWZ0OjAsdG9wOjB9LGkuY29udGFpbmVyUG9zaXRpb249e2xlZnQ6MCx0b3A6MH0saS5wYXJlbnREYXRhPXtlbGVtZW50OmUoZG9jdW1lbnQpLGxlZnQ6MCx0b3A6MCx3aWR0aDplKGRvY3VtZW50KS53aWR0aCgpLGhlaWdodDplKGRvY3VtZW50KS5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodH07ZWxzZXt2YXIgZj1lKGEpLGw9W107ZShbIlRvcCIsIlJpZ2h0IiwiTGVmdCIsIkJvdHRvbSJdKS5lYWNoKGZ1bmN0aW9uKGUsdCl7bFtlXT1uKGYuY3NzKCJwYWRkaW5nIit0KSl9KSxpLmNvbnRhaW5lck9mZnNldD1mLm9mZnNldCgpLGkuY29udGFpbmVyUG9zaXRpb249Zi5wb3NpdGlvbigpLGkuY29udGFpbmVyU2l6ZT17aGVpZ2h0OmYuaW5uZXJIZWlnaHQoKS1sWzNdLHdpZHRoOmYuaW5uZXJXaWR0aCgpLWxbMV19O3ZhciBjPWkuY29udGFpbmVyT2Zmc2V0LGg9aS5jb250YWluZXJTaXplLmhlaWdodCxwPWkuY29udGFpbmVyU2l6ZS53aWR0aCxkPWUudWkuaGFzU2Nyb2xsKGEsImxlZnQiKT9hLnNjcm9sbFdpZHRoOnAsdj1lLnVpLmhhc1Njcm9sbChhKT9hLnNjcm9sbEhlaWdodDpoO2kucGFyZW50RGF0YT17ZWxlbWVudDphLGxlZnQ6Yy5sZWZ0LHRvcDpjLnRvcCx3aWR0aDpkLGhlaWdodDp2fX19LHJlc2l6ZTpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgicmVzaXphYmxlIiksaT1yLm9wdGlvbnMscz1yLmNvbnRhaW5lclNpemUsbz1yLmNvbnRhaW5lck9mZnNldCx1PXIuc2l6ZSxhPXIucG9zaXRpb24sZj1yLl9hc3BlY3RSYXRpb3x8dC5zaGlmdEtleSxsPXt0b3A6MCxsZWZ0OjB9LGM9ci5jb250YWluZXJFbGVtZW50O2NbMF0hPWRvY3VtZW50JiYvc3RhdGljLy50ZXN0KGMuY3NzKCJwb3NpdGlvbiIpKSYmKGw9byksYS5sZWZ0PChyLl9oZWxwZXI/by5sZWZ0OjApJiYoci5zaXplLndpZHRoPXIuc2l6ZS53aWR0aCsoci5faGVscGVyP3IucG9zaXRpb24ubGVmdC1vLmxlZnQ6ci5wb3NpdGlvbi5sZWZ0LWwubGVmdCksZiYmKHIuc2l6ZS5oZWlnaHQ9ci5zaXplLndpZHRoL3IuYXNwZWN0UmF0aW8pLHIucG9zaXRpb24ubGVmdD1pLmhlbHBlcj9vLmxlZnQ6MCksYS50b3A8KHIuX2hlbHBlcj9vLnRvcDowKSYmKHIuc2l6ZS5oZWlnaHQ9ci5zaXplLmhlaWdodCsoci5faGVscGVyP3IucG9zaXRpb24udG9wLW8udG9wOnIucG9zaXRpb24udG9wKSxmJiYoci5zaXplLndpZHRoPXIuc2l6ZS5oZWlnaHQqci5hc3BlY3RSYXRpbyksci5wb3NpdGlvbi50b3A9ci5faGVscGVyP28udG9wOjApLHIub2Zmc2V0LmxlZnQ9ci5wYXJlbnREYXRhLmxlZnQrci5wb3NpdGlvbi5sZWZ0LHIub2Zmc2V0LnRvcD1yLnBhcmVudERhdGEudG9wK3IucG9zaXRpb24udG9wO3ZhciBoPU1hdGguYWJzKChyLl9oZWxwZXI/ci5vZmZzZXQubGVmdC1sLmxlZnQ6ci5vZmZzZXQubGVmdC1sLmxlZnQpK3Iuc2l6ZURpZmYud2lkdGgpLHA9TWF0aC5hYnMoKHIuX2hlbHBlcj9yLm9mZnNldC50b3AtbC50b3A6ci5vZmZzZXQudG9wLW8udG9wKStyLnNpemVEaWZmLmhlaWdodCksZD1yLmNvbnRhaW5lckVsZW1lbnQuZ2V0KDApPT1yLmVsZW1lbnQucGFyZW50KCkuZ2V0KDApLHY9L3JlbGF0aXZlfGFic29sdXRlLy50ZXN0KHIuY29udGFpbmVyRWxlbWVudC5jc3MoInBvc2l0aW9uIikpO2QmJnYmJihoLT1yLnBhcmVudERhdGEubGVmdCksaCtyLnNpemUud2lkdGg+PXIucGFyZW50RGF0YS53aWR0aCYmKHIuc2l6ZS53aWR0aD1yLnBhcmVudERhdGEud2lkdGgtaCxmJiYoci5zaXplLmhlaWdodD1yLnNpemUud2lkdGgvci5hc3BlY3RSYXRpbykpLHArci5zaXplLmhlaWdodD49ci5wYXJlbnREYXRhLmhlaWdodCYmKHIuc2l6ZS5oZWlnaHQ9ci5wYXJlbnREYXRhLmhlaWdodC1wLGYmJihyLnNpemUud2lkdGg9ci5zaXplLmhlaWdodCpyLmFzcGVjdFJhdGlvKSl9LHN0b3A6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGk9ci5vcHRpb25zLHM9ci5wb3NpdGlvbixvPXIuY29udGFpbmVyT2Zmc2V0LHU9ci5jb250YWluZXJQb3NpdGlvbixhPXIuY29udGFpbmVyRWxlbWVudCxmPWUoci5oZWxwZXIpLGw9Zi5vZmZzZXQoKSxjPWYub3V0ZXJXaWR0aCgpLXIuc2l6ZURpZmYud2lkdGgsaD1mLm91dGVySGVpZ2h0KCktci5zaXplRGlmZi5oZWlnaHQ7ci5faGVscGVyJiYhaS5hbmltYXRlJiYvcmVsYXRpdmUvLnRlc3QoYS5jc3MoInBvc2l0aW9uIikpJiZlKHRoaXMpLmNzcyh7bGVmdDpsLmxlZnQtdS5sZWZ0LW8ubGVmdCx3aWR0aDpjLGhlaWdodDpofSksci5faGVscGVyJiYhaS5hbmltYXRlJiYvc3RhdGljLy50ZXN0KGEuY3NzKCJwb3NpdGlvbiIpKSYmZSh0aGlzKS5jc3Moe2xlZnQ6bC5sZWZ0LXUubGVmdC1vLmxlZnQsd2lkdGg6YyxoZWlnaHQ6aH0pfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiZ2hvc3QiLHtzdGFydDpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgicmVzaXphYmxlIiksaT1yLm9wdGlvbnMscz1yLnNpemU7ci5naG9zdD1yLm9yaWdpbmFsRWxlbWVudC5jbG9uZSgpLHIuZ2hvc3QuY3NzKHtvcGFjaXR5Oi4yNSxkaXNwbGF5OiJibG9jayIscG9zaXRpb246InJlbGF0aXZlIixoZWlnaHQ6cy5oZWlnaHQsd2lkdGg6cy53aWR0aCxtYXJnaW46MCxsZWZ0OjAsdG9wOjB9KS5hZGRDbGFzcygidWktcmVzaXphYmxlLWdob3N0IikuYWRkQ2xhc3ModHlwZW9mIGkuZ2hvc3Q9PSJzdHJpbmciP2kuZ2hvc3Q6IiIpLHIuZ2hvc3QuYXBwZW5kVG8oci5oZWxwZXIpfSxyZXNpemU6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGk9ci5vcHRpb25zO3IuZ2hvc3QmJnIuZ2hvc3QuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUiLGhlaWdodDpyLnNpemUuaGVpZ2h0LHdpZHRoOnIuc2l6ZS53aWR0aH0pfSxzdG9wOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxpPXIub3B0aW9ucztyLmdob3N0JiZyLmhlbHBlciYmci5oZWxwZXIuZ2V0KDApLnJlbW92ZUNoaWxkKHIuZ2hvc3QuZ2V0KDApKX19KSxlLnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsImdyaWQiLHtyZXNpemU6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGk9ci5vcHRpb25zLHM9ci5zaXplLG89ci5vcmlnaW5hbFNpemUsdT1yLm9yaWdpbmFsUG9zaXRpb24sYT1yLmF4aXMsZj1pLl9hc3BlY3RSYXRpb3x8dC5zaGlmdEtleTtpLmdyaWQ9dHlwZW9mIGkuZ3JpZD09Im51bWJlciI/W2kuZ3JpZCxpLmdyaWRdOmkuZ3JpZDt2YXIgbD1NYXRoLnJvdW5kKChzLndpZHRoLW8ud2lkdGgpLyhpLmdyaWRbMF18fDEpKSooaS5ncmlkWzBdfHwxKSxjPU1hdGgucm91bmQoKHMuaGVpZ2h0LW8uaGVpZ2h0KS8oaS5ncmlkWzFdfHwxKSkqKGkuZ3JpZFsxXXx8MSk7L14oc2V8c3xlKSQvLnRlc3QoYSk/KHIuc2l6ZS53aWR0aD1vLndpZHRoK2wsci5zaXplLmhlaWdodD1vLmhlaWdodCtjKTovXihuZSkkLy50ZXN0KGEpPyhyLnNpemUud2lkdGg9by53aWR0aCtsLHIuc2l6ZS5oZWlnaHQ9by5oZWlnaHQrYyxyLnBvc2l0aW9uLnRvcD11LnRvcC1jKTovXihzdykkLy50ZXN0KGEpPyhyLnNpemUud2lkdGg9by53aWR0aCtsLHIuc2l6ZS5oZWlnaHQ9by5oZWlnaHQrYyxyLnBvc2l0aW9uLmxlZnQ9dS5sZWZ0LWwpOihyLnNpemUud2lkdGg9by53aWR0aCtsLHIuc2l6ZS5oZWlnaHQ9by5oZWlnaHQrYyxyLnBvc2l0aW9uLnRvcD11LnRvcC1jLHIucG9zaXRpb24ubGVmdD11LmxlZnQtbCl9fSk7dmFyIG49ZnVuY3Rpb24oZSl7cmV0dXJuIHBhcnNlSW50KGUsMTApfHwwfSxyPWZ1bmN0aW9uKGUpe3JldHVybiFpc05hTihwYXJzZUludChlLDEwKSl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLndpZGdldCgidWkuc2VsZWN0YWJsZSIsZS51aS5tb3VzZSx7dmVyc2lvbjoiMS45LjAiLG9wdGlvbnM6e2FwcGVuZFRvOiJib2R5IixhdXRvUmVmcmVzaDohMCxkaXN0YW5jZTowLGZpbHRlcjoiKiIsdG9sZXJhbmNlOiJ0b3VjaCJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc2VsZWN0YWJsZSIpLHRoaXMuZHJhZ2dlZD0hMTt2YXIgbjt0aGlzLnJlZnJlc2g9ZnVuY3Rpb24oKXtuPWUodC5vcHRpb25zLmZpbHRlcix0LmVsZW1lbnRbMF0pLG4uYWRkQ2xhc3MoInVpLXNlbGVjdGVlIiksbi5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKSxuPXQub2Zmc2V0KCk7ZS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIse2VsZW1lbnQ6dGhpcywkZWxlbWVudDp0LGxlZnQ6bi5sZWZ0LHRvcDpuLnRvcCxyaWdodDpuLmxlZnQrdC5vdXRlcldpZHRoKCksYm90dG9tOm4udG9wK3Qub3V0ZXJIZWlnaHQoKSxzdGFydHNlbGVjdGVkOiExLHNlbGVjdGVkOnQuaGFzQ2xhc3MoInVpLXNlbGVjdGVkIiksc2VsZWN0aW5nOnQuaGFzQ2xhc3MoInVpLXNlbGVjdGluZyIpLHVuc2VsZWN0aW5nOnQuaGFzQ2xhc3MoInVpLXVuc2VsZWN0aW5nIil9KX0pfSx0aGlzLnJlZnJlc2goKSx0aGlzLnNlbGVjdGVlcz1uLmFkZENsYXNzKCJ1aS1zZWxlY3RlZSIpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMuaGVscGVyPWUoIjxkaXYgY2xhc3M9J3VpLXNlbGVjdGFibGUtaGVscGVyJz48L2Rpdj4iKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVlcy5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWUiKS5yZW1vdmVEYXRhKCJzZWxlY3RhYmxlLWl0ZW0iKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGFibGUgdWktc2VsZWN0YWJsZS1kaXNhYmxlZCIpLHRoaXMuX21vdXNlRGVzdHJveSgpfSxfbW91c2VTdGFydDpmdW5jdGlvbih0KXt2YXIgbj10aGlzO3RoaXMub3Bvcz1bdC5wYWdlWCx0LnBhZ2VZXTtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWQpcmV0dXJuO3ZhciByPXRoaXMub3B0aW9uczt0aGlzLnNlbGVjdGVlcz1lKHIuZmlsdGVyLHRoaXMuZWxlbWVudFswXSksdGhpcy5fdHJpZ2dlcigic3RhcnQiLHQpLGUoci5hcHBlbmRUbykuYXBwZW5kKHRoaXMuaGVscGVyKSx0aGlzLmhlbHBlci5jc3Moe2xlZnQ6dC5jbGllbnRYLHRvcDp0LmNsaWVudFksd2lkdGg6MCxoZWlnaHQ6MH0pLHIuYXV0b1JlZnJlc2gmJnRoaXMucmVmcmVzaCgpLHRoaXMuc2VsZWN0ZWVzLmZpbHRlcigiLnVpLXNlbGVjdGVkIikuZWFjaChmdW5jdGlvbigpe3ZhciByPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKTtyLnN0YXJ0c2VsZWN0ZWQ9ITAsIXQubWV0YUtleSYmIXQuY3RybEtleSYmKHIuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGVkIiksci5zZWxlY3RlZD0hMSxyLiRlbGVtZW50LmFkZENsYXNzKCJ1aS11bnNlbGVjdGluZyIpLHIudW5zZWxlY3Rpbmc9ITAsbi5fdHJpZ2dlcigidW5zZWxlY3RpbmciLHQse3Vuc2VsZWN0aW5nOnIuZWxlbWVudH0pKX0pLGUodC50YXJnZXQpLnBhcmVudHMoKS5hbmRTZWxmKCkuZWFjaChmdW5jdGlvbigpe3ZhciByPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKTtpZihyKXt2YXIgaT0hdC5tZXRhS2V5JiYhdC5jdHJsS2V5fHwhci4kZWxlbWVudC5oYXNDbGFzcygidWktc2VsZWN0ZWQiKTtyZXR1cm4gci4kZWxlbWVudC5yZW1vdmVDbGFzcyhpPyJ1aS11bnNlbGVjdGluZyI6InVpLXNlbGVjdGVkIikuYWRkQ2xhc3MoaT8idWktc2VsZWN0aW5nIjoidWktdW5zZWxlY3RpbmciKSxyLnVuc2VsZWN0aW5nPSFpLHIuc2VsZWN0aW5nPWksci5zZWxlY3RlZD1pLGk/bi5fdHJpZ2dlcigic2VsZWN0aW5nIix0LHtzZWxlY3Rpbmc6ci5lbGVtZW50fSk6bi5fdHJpZ2dlcigidW5zZWxlY3RpbmciLHQse3Vuc2VsZWN0aW5nOnIuZWxlbWVudH0pLCExfX0pfSxfbW91c2VEcmFnOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7dGhpcy5kcmFnZ2VkPSEwO2lmKHRoaXMub3B0aW9ucy5kaXNhYmxlZClyZXR1cm47dmFyIHI9dGhpcy5vcHRpb25zLGk9dGhpcy5vcG9zWzBdLHM9dGhpcy5vcG9zWzFdLG89dC5wYWdlWCx1PXQucGFnZVk7aWYoaT5vKXt2YXIgYT1vO289aSxpPWF9aWYocz51KXt2YXIgYT11O3U9cyxzPWF9cmV0dXJuIHRoaXMuaGVscGVyLmNzcyh7bGVmdDppLHRvcDpzLHdpZHRoOm8taSxoZWlnaHQ6dS1zfSksdGhpcy5zZWxlY3RlZXMuZWFjaChmdW5jdGlvbigpe3ZhciBhPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKTtpZighYXx8YS5lbGVtZW50PT1uLmVsZW1lbnRbMF0pcmV0dXJuO3ZhciBmPSExO3IudG9sZXJhbmNlPT0idG91Y2giP2Y9IShhLmxlZnQ+b3x8YS5yaWdodDxpfHxhLnRvcD51fHxhLmJvdHRvbTxzKTpyLnRvbGVyYW5jZT09ImZpdCImJihmPWEubGVmdD5pJiZhLnJpZ2h0PG8mJmEudG9wPnMmJmEuYm90dG9tPHUpLGY/KGEuc2VsZWN0ZWQmJihhLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZCIpLGEuc2VsZWN0ZWQ9ITEpLGEudW5zZWxlY3RpbmcmJihhLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS11bnNlbGVjdGluZyIpLGEudW5zZWxlY3Rpbmc9ITEpLGEuc2VsZWN0aW5nfHwoYS4kZWxlbWVudC5hZGRDbGFzcygidWktc2VsZWN0aW5nIiksYS5zZWxlY3Rpbmc9ITAsbi5fdHJpZ2dlcigic2VsZWN0aW5nIix0LHtzZWxlY3Rpbmc6YS5lbGVtZW50fSkpKTooYS5zZWxlY3RpbmcmJigodC5tZXRhS2V5fHx0LmN0cmxLZXkpJiZhLnN0YXJ0c2VsZWN0ZWQ/KGEuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGluZyIpLGEuc2VsZWN0aW5nPSExLGEuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXNlbGVjdGVkIiksYS5zZWxlY3RlZD0hMCk6KGEuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGluZyIpLGEuc2VsZWN0aW5nPSExLGEuc3RhcnRzZWxlY3RlZCYmKGEuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXVuc2VsZWN0aW5nIiksYS51bnNlbGVjdGluZz0hMCksbi5fdHJpZ2dlcigidW5zZWxlY3RpbmciLHQse3Vuc2VsZWN0aW5nOmEuZWxlbWVudH0pKSksYS5zZWxlY3RlZCYmIXQubWV0YUtleSYmIXQuY3RybEtleSYmIWEuc3RhcnRzZWxlY3RlZCYmKGEuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGVkIiksYS5zZWxlY3RlZD0hMSxhLiRlbGVtZW50LmFkZENsYXNzKCJ1aS11bnNlbGVjdGluZyIpLGEudW5zZWxlY3Rpbmc9ITAsbi5fdHJpZ2dlcigidW5zZWxlY3RpbmciLHQse3Vuc2VsZWN0aW5nOmEuZWxlbWVudH0pKSl9KSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0KXt2YXIgbj10aGlzO3RoaXMuZHJhZ2dlZD0hMTt2YXIgcj10aGlzLm9wdGlvbnM7cmV0dXJuIGUoIi51aS11bnNlbGVjdGluZyIsdGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIpO3IuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXVuc2VsZWN0aW5nIiksci51bnNlbGVjdGluZz0hMSxyLnN0YXJ0c2VsZWN0ZWQ9ITEsbi5fdHJpZ2dlcigidW5zZWxlY3RlZCIsdCx7dW5zZWxlY3RlZDpyLmVsZW1lbnR9KX0pLGUoIi51aS1zZWxlY3RpbmciLHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe3ZhciByPWUuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKTtyLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RpbmciKS5hZGRDbGFzcygidWktc2VsZWN0ZWQiKSxyLnNlbGVjdGluZz0hMSxyLnNlbGVjdGVkPSEwLHIuc3RhcnRzZWxlY3RlZD0hMCxuLl90cmlnZ2VyKCJzZWxlY3RlZCIsdCx7c2VsZWN0ZWQ6ci5lbGVtZW50fSl9KSx0aGlzLl90cmlnZ2VyKCJzdG9wIix0KSx0aGlzLmhlbHBlci5yZW1vdmUoKSwhMX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7dmFyIG49NTtlLndpZGdldCgidWkuc2xpZGVyIixlLnVpLm1vdXNlLHt2ZXJzaW9uOiIxLjkuMCIsd2lkZ2V0RXZlbnRQcmVmaXg6InNsaWRlIixvcHRpb25zOnthbmltYXRlOiExLGRpc3RhbmNlOjAsbWF4OjEwMCxtaW46MCxvcmllbnRhdGlvbjoiaG9yaXpvbnRhbCIscmFuZ2U6ITEsc3RlcDoxLHZhbHVlOjAsdmFsdWVzOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdCxyPXRoaXMub3B0aW9ucyxpPXRoaXMuZWxlbWVudC5maW5kKCIudWktc2xpZGVyLWhhbmRsZSIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKSxzPSI8YSBjbGFzcz0ndWktc2xpZGVyLWhhbmRsZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwnIGhyZWY9JyMnPjwvYT4iLG89ci52YWx1ZXMmJnIudmFsdWVzLmxlbmd0aHx8MSx1PVtdO3RoaXMuX2tleVNsaWRpbmc9ITEsdGhpcy5fbW91c2VTbGlkaW5nPSExLHRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5faGFuZGxlSW5kZXg9bnVsbCx0aGlzLl9kZXRlY3RPcmllbnRhdGlvbigpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc2xpZGVyIHVpLXNsaWRlci0iK3RoaXMub3JpZW50YXRpb24rIiB1aS13aWRnZXQiKyIgdWktd2lkZ2V0LWNvbnRlbnQiKyIgdWktY29ybmVyLWFsbCIrKHIuZGlzYWJsZWQ/IiB1aS1zbGlkZXItZGlzYWJsZWQgdWktZGlzYWJsZWQiOiIiKSksdGhpcy5yYW5nZT1lKFtdKSxyLnJhbmdlJiYoci5yYW5nZT09PSEwJiYoci52YWx1ZXN8fChyLnZhbHVlcz1bdGhpcy5fdmFsdWVNaW4oKSx0aGlzLl92YWx1ZU1pbigpXSksci52YWx1ZXMubGVuZ3RoJiZyLnZhbHVlcy5sZW5ndGghPT0yJiYoci52YWx1ZXM9W3IudmFsdWVzWzBdLHIudmFsdWVzWzBdXSkpLHRoaXMucmFuZ2U9ZSgiPGRpdj48L2Rpdj4iKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpLmFkZENsYXNzKCJ1aS1zbGlkZXItcmFuZ2UgdWktd2lkZ2V0LWhlYWRlciIrKHIucmFuZ2U9PT0ibWluInx8ci5yYW5nZT09PSJtYXgiPyIgdWktc2xpZGVyLXJhbmdlLSIrci5yYW5nZToiIikpKTtmb3IodD1pLmxlbmd0aDt0PG87dCsrKXUucHVzaChzKTt0aGlzLmhhbmRsZXM9aS5hZGQoZSh1LmpvaW4oIiIpKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpKSx0aGlzLmhhbmRsZT10aGlzLmhhbmRsZXMuZXEoMCksdGhpcy5oYW5kbGVzLmFkZCh0aGlzLnJhbmdlKS5maWx0ZXIoImEiKS5jbGljayhmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9KS5tb3VzZWVudGVyKGZ1bmN0aW9uKCl7ci5kaXNhYmxlZHx8ZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKX0pLm1vdXNlbGVhdmUoZnVuY3Rpb24oKXtlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfSkuZm9jdXMoZnVuY3Rpb24oKXtyLmRpc2FibGVkP2UodGhpcykuYmx1cigpOihlKCIudWktc2xpZGVyIC51aS1zdGF0ZS1mb2N1cyIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpLGUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWZvY3VzIikpfSkuYmx1cihmdW5jdGlvbigpe2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIil9KSx0aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbih0KXtlKHRoaXMpLmRhdGEoInVpLXNsaWRlci1oYW5kbGUtaW5kZXgiLHQpfSksdGhpcy5fb24odGhpcy5oYW5kbGVzLHtrZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciByLGkscyxvLHU9ZSh0LnRhcmdldCkuZGF0YSgidWktc2xpZGVyLWhhbmRsZS1pbmRleCIpO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6Y2FzZSBlLnVpLmtleUNvZGUuRU5EOmNhc2UgZS51aS5rZXlDb2RlLlBBR0VfVVA6Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOmNhc2UgZS51aS5rZXlDb2RlLlVQOmNhc2UgZS51aS5rZXlDb2RlLlJJR0hUOmNhc2UgZS51aS5rZXlDb2RlLkRPV046Y2FzZSBlLnVpLmtleUNvZGUuTEVGVDp0LnByZXZlbnREZWZhdWx0KCk7aWYoIXRoaXMuX2tleVNsaWRpbmcpe3RoaXMuX2tleVNsaWRpbmc9ITAsZSh0LnRhcmdldCkuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHI9dGhpcy5fc3RhcnQodCx1KTtpZihyPT09ITEpcmV0dXJufX1vPXRoaXMub3B0aW9ucy5zdGVwLHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoP2k9cz10aGlzLnZhbHVlcyh1KTppPXM9dGhpcy52YWx1ZSgpO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6cz10aGlzLl92YWx1ZU1pbigpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkVORDpzPXRoaXMuX3ZhbHVlTWF4KCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9VUDpzPXRoaXMuX3RyaW1BbGlnblZhbHVlKGkrKHRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSkvbik7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOnM9dGhpcy5fdHJpbUFsaWduVmFsdWUoaS0odGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpKS9uKTticmVhaztjYXNlIGUudWkua2V5Q29kZS5VUDpjYXNlIGUudWkua2V5Q29kZS5SSUdIVDppZihpPT09dGhpcy5fdmFsdWVNYXgoKSlyZXR1cm47cz10aGlzLl90cmltQWxpZ25WYWx1ZShpK28pO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkRPV046Y2FzZSBlLnVpLmtleUNvZGUuTEVGVDppZihpPT09dGhpcy5fdmFsdWVNaW4oKSlyZXR1cm47cz10aGlzLl90cmltQWxpZ25WYWx1ZShpLW8pfXRoaXMuX3NsaWRlKHQsdSxzKX0sa2V5dXA6ZnVuY3Rpb24odCl7dmFyIG49ZSh0LnRhcmdldCkuZGF0YSgidWktc2xpZGVyLWhhbmRsZS1pbmRleCIpO3RoaXMuX2tleVNsaWRpbmcmJih0aGlzLl9rZXlTbGlkaW5nPSExLHRoaXMuX3N0b3AodCxuKSx0aGlzLl9jaGFuZ2UodCxuKSxlKHQudGFyZ2V0KS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikpfX0pLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX2FuaW1hdGVPZmY9ITF9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVzLnJlbW92ZSgpLHRoaXMucmFuZ2UucmVtb3ZlKCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zbGlkZXIgdWktc2xpZGVyLWhvcml6b250YWwgdWktc2xpZGVyLXZlcnRpY2FsIHVpLXNsaWRlci1kaXNhYmxlZCB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLHRoaXMuX21vdXNlRGVzdHJveSgpfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKHQpe3ZhciBuLHIsaSxzLG8sdSxhLGYsbD10aGlzLGM9dGhpcy5vcHRpb25zO3JldHVybiBjLmRpc2FibGVkPyExOih0aGlzLmVsZW1lbnRTaXplPXt3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKX0sdGhpcy5lbGVtZW50T2Zmc2V0PXRoaXMuZWxlbWVudC5vZmZzZXQoKSxuPXt4OnQucGFnZVgseTp0LnBhZ2VZfSxyPXRoaXMuX25vcm1WYWx1ZUZyb21Nb3VzZShuKSxpPXRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSsxLHRoaXMuaGFuZGxlcy5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPU1hdGguYWJzKHItbC52YWx1ZXModCkpO2k+biYmKGk9bixzPWUodGhpcyksbz10KX0pLGMucmFuZ2U9PT0hMCYmdGhpcy52YWx1ZXMoMSk9PT1jLm1pbiYmKG8rPTEscz1lKHRoaXMuaGFuZGxlc1tvXSkpLHU9dGhpcy5fc3RhcnQodCxvKSx1PT09ITE/ITE6KHRoaXMuX21vdXNlU2xpZGluZz0hMCx0aGlzLl9oYW5kbGVJbmRleD1vLHMuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmZvY3VzKCksYT1zLm9mZnNldCgpLGY9IWUodC50YXJnZXQpLnBhcmVudHMoKS5hbmRTZWxmKCkuaXMoIi51aS1zbGlkZXItaGFuZGxlIiksdGhpcy5fY2xpY2tPZmZzZXQ9Zj97bGVmdDowLHRvcDowfTp7bGVmdDp0LnBhZ2VYLWEubGVmdC1zLndpZHRoKCkvMix0b3A6dC5wYWdlWS1hLnRvcC1zLmhlaWdodCgpLzItKHBhcnNlSW50KHMuY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCktKHBhcnNlSW50KHMuY3NzKCJib3JkZXJCb3R0b21XaWR0aCIpLDEwKXx8MCkrKHBhcnNlSW50KHMuY3NzKCJtYXJnaW5Ub3AiKSwxMCl8fDApfSx0aGlzLmhhbmRsZXMuaGFzQ2xhc3MoInVpLXN0YXRlLWhvdmVyIil8fHRoaXMuX3NsaWRlKHQsbyxyKSx0aGlzLl9hbmltYXRlT2ZmPSEwLCEwKSl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKGUpe3JldHVybiEwfSxfbW91c2VEcmFnOmZ1bmN0aW9uKGUpe3ZhciB0PXt4OmUucGFnZVgseTplLnBhZ2VZfSxuPXRoaXMuX25vcm1WYWx1ZUZyb21Nb3VzZSh0KTtyZXR1cm4gdGhpcy5fc2xpZGUoZSx0aGlzLl9oYW5kbGVJbmRleCxuKSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5oYW5kbGVzLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0aGlzLl9tb3VzZVNsaWRpbmc9ITEsdGhpcy5fc3RvcChlLHRoaXMuX2hhbmRsZUluZGV4KSx0aGlzLl9jaGFuZ2UoZSx0aGlzLl9oYW5kbGVJbmRleCksdGhpcy5faGFuZGxlSW5kZXg9bnVsbCx0aGlzLl9jbGlja09mZnNldD1udWxsLHRoaXMuX2FuaW1hdGVPZmY9ITEsITF9LF9kZXRlY3RPcmllbnRhdGlvbjpmdW5jdGlvbigpe3RoaXMub3JpZW50YXRpb249dGhpcy5vcHRpb25zLm9yaWVudGF0aW9uPT09InZlcnRpY2FsIj8idmVydGljYWwiOiJob3Jpem9udGFsIn0sX25vcm1WYWx1ZUZyb21Nb3VzZTpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxzO3JldHVybiB0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiPyh0PXRoaXMuZWxlbWVudFNpemUud2lkdGgsbj1lLngtdGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQtKHRoaXMuX2NsaWNrT2Zmc2V0P3RoaXMuX2NsaWNrT2Zmc2V0LmxlZnQ6MCkpOih0PXRoaXMuZWxlbWVudFNpemUuaGVpZ2h0LG49ZS55LXRoaXMuZWxlbWVudE9mZnNldC50b3AtKHRoaXMuX2NsaWNrT2Zmc2V0P3RoaXMuX2NsaWNrT2Zmc2V0LnRvcDowKSkscj1uL3Qscj4xJiYocj0xKSxyPDAmJihyPTApLHRoaXMub3JpZW50YXRpb249PT0idmVydGljYWwiJiYocj0xLXIpLGk9dGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpLHM9dGhpcy5fdmFsdWVNaW4oKStyKmksdGhpcy5fdHJpbUFsaWduVmFsdWUocyl9LF9zdGFydDpmdW5jdGlvbihlLHQpe3ZhciBuPXtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOnRoaXMudmFsdWUoKX07cmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoJiYobi52YWx1ZT10aGlzLnZhbHVlcyh0KSxuLnZhbHVlcz10aGlzLnZhbHVlcygpKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsZSxuKX0sX3NsaWRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLHM7dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg/KHI9dGhpcy52YWx1ZXModD8wOjEpLHRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoPT09MiYmdGhpcy5vcHRpb25zLnJhbmdlPT09ITAmJih0PT09MCYmbj5yfHx0PT09MSYmbjxyKSYmKG49ciksbiE9PXRoaXMudmFsdWVzKHQpJiYoaT10aGlzLnZhbHVlcygpLGlbdF09bixzPXRoaXMuX3RyaWdnZXIoInNsaWRlIixlLHtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOm4sdmFsdWVzOml9KSxyPXRoaXMudmFsdWVzKHQ/MDoxKSxzIT09ITEmJnRoaXMudmFsdWVzKHQsbiwhMCkpKTpuIT09dGhpcy52YWx1ZSgpJiYocz10aGlzLl90cmlnZ2VyKCJzbGlkZSIsZSx7aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTpufSkscyE9PSExJiZ0aGlzLnZhbHVlKG4pKX0sX3N0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgbj17aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTp0aGlzLnZhbHVlKCl9O3RoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoJiYobi52YWx1ZT10aGlzLnZhbHVlcyh0KSxuLnZhbHVlcz10aGlzLnZhbHVlcygpKSx0aGlzLl90cmlnZ2VyKCJzdG9wIixlLG4pfSxfY2hhbmdlOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuX2tleVNsaWRpbmcmJiF0aGlzLl9tb3VzZVNsaWRpbmcpe3ZhciBuPXtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOnRoaXMudmFsdWUoKX07dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgmJihuLnZhbHVlPXRoaXMudmFsdWVzKHQpLG4udmFsdWVzPXRoaXMudmFsdWVzKCkpLHRoaXMuX3RyaWdnZXIoImNoYW5nZSIsZSxuKX19LHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGFyZ3VtZW50cy5sZW5ndGgpe3RoaXMub3B0aW9ucy52YWx1ZT10aGlzLl90cmltQWxpZ25WYWx1ZShlKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCwwKTtyZXR1cm59cmV0dXJuIHRoaXMuX3ZhbHVlKCl9LHZhbHVlczpmdW5jdGlvbih0LG4pe3ZhciByLGkscztpZihhcmd1bWVudHMubGVuZ3RoPjEpe3RoaXMub3B0aW9ucy52YWx1ZXNbdF09dGhpcy5fdHJpbUFsaWduVmFsdWUobiksdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fY2hhbmdlKG51bGwsdCk7cmV0dXJufWlmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl92YWx1ZXMoKTtpZighZS5pc0FycmF5KGFyZ3VtZW50c1swXSkpcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoP3RoaXMuX3ZhbHVlcyh0KTp0aGlzLnZhbHVlKCk7cj10aGlzLm9wdGlvbnMudmFsdWVzLGk9YXJndW1lbnRzWzBdO2ZvcihzPTA7czxyLmxlbmd0aDtzKz0xKXJbc109dGhpcy5fdHJpbUFsaWduVmFsdWUoaVtzXSksdGhpcy5fY2hhbmdlKG51bGwscyk7dGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxuKXt2YXIgcixpPTA7ZS5pc0FycmF5KHRoaXMub3B0aW9ucy52YWx1ZXMpJiYoaT10aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCksZS5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpO3N3aXRjaCh0KXtjYXNlImRpc2FibGVkIjpuPyh0aGlzLmhhbmRsZXMuZmlsdGVyKCIudWktc3RhdGUtZm9jdXMiKS5ibHVyKCksdGhpcy5oYW5kbGVzLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLHRoaXMuaGFuZGxlcy5wcm9wKCJkaXNhYmxlZCIsITApLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZGlzYWJsZWQiKSk6KHRoaXMuaGFuZGxlcy5wcm9wKCJkaXNhYmxlZCIsITEpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktZGlzYWJsZWQiKSk7YnJlYWs7Y2FzZSJvcmllbnRhdGlvbiI6dGhpcy5fZGV0ZWN0T3JpZW50YXRpb24oKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNsaWRlci1ob3Jpem9udGFsIHVpLXNsaWRlci12ZXJ0aWNhbCIpLmFkZENsYXNzKCJ1aS1zbGlkZXItIit0aGlzLm9yaWVudGF0aW9uKSx0aGlzLl9yZWZyZXNoVmFsdWUoKTticmVhaztjYXNlInZhbHVlIjp0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX2NoYW5nZShudWxsLDApLHRoaXMuX2FuaW1hdGVPZmY9ITE7YnJlYWs7Y2FzZSJ2YWx1ZXMiOnRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fcmVmcmVzaFZhbHVlKCk7Zm9yKHI9MDtyPGk7cis9MSl0aGlzLl9jaGFuZ2UobnVsbCxyKTt0aGlzLl9hbmltYXRlT2ZmPSExfX0sX3ZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLnZhbHVlO3JldHVybiBlPXRoaXMuX3RyaW1BbGlnblZhbHVlKGUpLGV9LF92YWx1ZXM6ZnVuY3Rpb24oZSl7dmFyIHQsbixyO2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQ9dGhpcy5vcHRpb25zLnZhbHVlc1tlXSx0PXRoaXMuX3RyaW1BbGlnblZhbHVlKHQpLHQ7bj10aGlzLm9wdGlvbnMudmFsdWVzLnNsaWNlKCk7Zm9yKHI9MDtyPG4ubGVuZ3RoO3IrPTEpbltyXT10aGlzLl90cmltQWxpZ25WYWx1ZShuW3JdKTtyZXR1cm4gbn0sX3RyaW1BbGlnblZhbHVlOmZ1bmN0aW9uKGUpe2lmKGU8PXRoaXMuX3ZhbHVlTWluKCkpcmV0dXJuIHRoaXMuX3ZhbHVlTWluKCk7aWYoZT49dGhpcy5fdmFsdWVNYXgoKSlyZXR1cm4gdGhpcy5fdmFsdWVNYXgoKTt2YXIgdD10aGlzLm9wdGlvbnMuc3RlcD4wP3RoaXMub3B0aW9ucy5zdGVwOjEsbj0oZS10aGlzLl92YWx1ZU1pbigpKSV0LHI9ZS1uO3JldHVybiBNYXRoLmFicyhuKSoyPj10JiYocis9bj4wP3Q6LXQpLHBhcnNlRmxvYXQoci50b0ZpeGVkKDUpKX0sX3ZhbHVlTWluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5taW59LF92YWx1ZU1heDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMubWF4fSxfcmVmcmVzaFZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsbixyLGkscyxvPXRoaXMub3B0aW9ucy5yYW5nZSx1PXRoaXMub3B0aW9ucyxhPXRoaXMsZj10aGlzLl9hbmltYXRlT2ZmPyExOnUuYW5pbWF0ZSxsPXt9O3RoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoP3RoaXMuaGFuZGxlcy5lYWNoKGZ1bmN0aW9uKHIsaSl7bj0oYS52YWx1ZXMociktYS5fdmFsdWVNaW4oKSkvKGEuX3ZhbHVlTWF4KCktYS5fdmFsdWVNaW4oKSkqMTAwLGxbYS5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIj8ibGVmdCI6ImJvdHRvbSJdPW4rIiUiLGUodGhpcykuc3RvcCgxLDEpW2Y/ImFuaW1hdGUiOiJjc3MiXShsLHUuYW5pbWF0ZSksYS5vcHRpb25zLnJhbmdlPT09ITAmJihhLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiPyhyPT09MCYmYS5yYW5nZS5zdG9wKDEsMSlbZj8iYW5pbWF0ZSI6ImNzcyJdKHtsZWZ0Om4rIiUifSx1LmFuaW1hdGUpLHI9PT0xJiZhLnJhbmdlW2Y/ImFuaW1hdGUiOiJjc3MiXSh7d2lkdGg6bi10KyIlIn0se3F1ZXVlOiExLGR1cmF0aW9uOnUuYW5pbWF0ZX0pKToocj09PTAmJmEucmFuZ2Uuc3RvcCgxLDEpW2Y/ImFuaW1hdGUiOiJjc3MiXSh7Ym90dG9tOm4rIiUifSx1LmFuaW1hdGUpLHI9PT0xJiZhLnJhbmdlW2Y/ImFuaW1hdGUiOiJjc3MiXSh7aGVpZ2h0Om4tdCsiJSJ9LHtxdWV1ZTohMSxkdXJhdGlvbjp1LmFuaW1hdGV9KSkpLHQ9bn0pOihyPXRoaXMudmFsdWUoKSxpPXRoaXMuX3ZhbHVlTWluKCkscz10aGlzLl92YWx1ZU1heCgpLG49cyE9PWk/KHItaSkvKHMtaSkqMTAwOjAsbFt0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiPyJsZWZ0IjoiYm90dG9tIl09bisiJSIsdGhpcy5oYW5kbGUuc3RvcCgxLDEpW2Y/ImFuaW1hdGUiOiJjc3MiXShsLHUuYW5pbWF0ZSksbz09PSJtaW4iJiZ0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiJiZ0aGlzLnJhbmdlLnN0b3AoMSwxKVtmPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOm4rIiUifSx1LmFuaW1hdGUpLG89PT0ibWF4IiYmdGhpcy5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIiYmdGhpcy5yYW5nZVtmPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOjEwMC1uKyIlIn0se3F1ZXVlOiExLGR1cmF0aW9uOnUuYW5pbWF0ZX0pLG89PT0ibWluIiYmdGhpcy5vcmllbnRhdGlvbj09PSJ2ZXJ0aWNhbCImJnRoaXMucmFuZ2Uuc3RvcCgxLDEpW2Y/ImFuaW1hdGUiOiJjc3MiXSh7aGVpZ2h0Om4rIiUifSx1LmFuaW1hdGUpLG89PT0ibWF4IiYmdGhpcy5vcmllbnRhdGlvbj09PSJ2ZXJ0aWNhbCImJnRoaXMucmFuZ2VbZj8iYW5pbWF0ZSI6ImNzcyJdKHtoZWlnaHQ6MTAwLW4rIiUifSx7cXVldWU6ITEsZHVyYXRpb246dS5hbmltYXRlfSkpfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLndpZGdldCgidWkuc29ydGFibGUiLGUudWkubW91c2Use3ZlcnNpb246IjEuOS4wIix3aWRnZXRFdmVudFByZWZpeDoic29ydCIscmVhZHk6ITEsb3B0aW9uczp7YXBwZW5kVG86InBhcmVudCIsYXhpczohMSxjb25uZWN0V2l0aDohMSxjb250YWlubWVudDohMSxjdXJzb3I6ImF1dG8iLGN1cnNvckF0OiExLGRyb3BPbkVtcHR5OiEwLGZvcmNlUGxhY2Vob2xkZXJTaXplOiExLGZvcmNlSGVscGVyU2l6ZTohMSxncmlkOiExLGhhbmRsZTohMSxoZWxwZXI6Im9yaWdpbmFsIixpdGVtczoiPiAqIixvcGFjaXR5OiExLHBsYWNlaG9sZGVyOiExLHJldmVydDohMSxzY3JvbGw6ITAsc2Nyb2xsU2Vuc2l0aXZpdHk6MjAsc2Nyb2xsU3BlZWQ6MjAsc2NvcGU6ImRlZmF1bHQiLHRvbGVyYW5jZToiaW50ZXJzZWN0Iix6SW5kZXg6MWUzfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3RoaXMuY29udGFpbmVyQ2FjaGU9e30sdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zb3J0YWJsZSIpLHRoaXMucmVmcmVzaCgpLHRoaXMuZmxvYXRpbmc9dGhpcy5pdGVtcy5sZW5ndGg/ZS5heGlzPT09IngifHwvbGVmdHxyaWdodC8udGVzdCh0aGlzLml0ZW1zWzBdLml0ZW0uY3NzKCJmbG9hdCIpKXx8L2lubGluZXx0YWJsZS1jZWxsLy50ZXN0KHRoaXMuaXRlbXNbMF0uaXRlbS5jc3MoImRpc3BsYXkiKSk6ITEsdGhpcy5vZmZzZXQ9dGhpcy5lbGVtZW50Lm9mZnNldCgpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMucmVhZHk9ITB9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZSB1aS1zb3J0YWJsZS1kaXNhYmxlZCIpLHRoaXMuX21vdXNlRGVzdHJveSgpO2Zvcih2YXIgZT10aGlzLml0ZW1zLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMuaXRlbXNbZV0uaXRlbS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0TmFtZSsiLWl0ZW0iKTtyZXR1cm4gdGhpc30sX3NldE9wdGlvbjpmdW5jdGlvbih0LG4pe3Q9PT0iZGlzYWJsZWQiPyh0aGlzLm9wdGlvbnNbdF09bix0aGlzLndpZGdldCgpLnRvZ2dsZUNsYXNzKCJ1aS1zb3J0YWJsZS1kaXNhYmxlZCIsISFuKSk6ZS5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKHQsbil7dmFyIHI9dGhpcztpZih0aGlzLnJldmVydGluZylyZXR1cm4hMTtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fHRoaXMub3B0aW9ucy50eXBlPT0ic3RhdGljIilyZXR1cm4hMTt0aGlzLl9yZWZyZXNoSXRlbXModCk7dmFyIGk9bnVsbCxzPWUodC50YXJnZXQpLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7aWYoZS5kYXRhKHRoaXMsci53aWRnZXROYW1lKyItaXRlbSIpPT1yKXJldHVybiBpPWUodGhpcyksITF9KTtlLmRhdGEodC50YXJnZXQsci53aWRnZXROYW1lKyItaXRlbSIpPT1yJiYoaT1lKHQudGFyZ2V0KSk7aWYoIWkpcmV0dXJuITE7aWYodGhpcy5vcHRpb25zLmhhbmRsZSYmIW4pe3ZhciBvPSExO2UodGhpcy5vcHRpb25zLmhhbmRsZSxpKS5maW5kKCIqIikuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oKXt0aGlzPT10LnRhcmdldCYmKG89ITApfSk7aWYoIW8pcmV0dXJuITF9cmV0dXJuIHRoaXMuY3VycmVudEl0ZW09aSx0aGlzLl9yZW1vdmVDdXJyZW50c0Zyb21JdGVtcygpLCEwfSxfbW91c2VTdGFydDpmdW5jdGlvbih0LG4scil7dmFyIGk9dGhpcy5vcHRpb25zO3RoaXMuY3VycmVudENvbnRhaW5lcj10aGlzLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpLHRoaXMuaGVscGVyPXRoaXMuX2NyZWF0ZUhlbHBlcih0KSx0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksdGhpcy5fY2FjaGVNYXJnaW5zKCksdGhpcy5zY3JvbGxQYXJlbnQ9dGhpcy5oZWxwZXIuc2Nyb2xsUGFyZW50KCksdGhpcy5vZmZzZXQ9dGhpcy5jdXJyZW50SXRlbS5vZmZzZXQoKSx0aGlzLm9mZnNldD17dG9wOnRoaXMub2Zmc2V0LnRvcC10aGlzLm1hcmdpbnMudG9wLGxlZnQ6dGhpcy5vZmZzZXQubGVmdC10aGlzLm1hcmdpbnMubGVmdH0sZS5leHRlbmQodGhpcy5vZmZzZXQse2NsaWNrOntsZWZ0OnQucGFnZVgtdGhpcy5vZmZzZXQubGVmdCx0b3A6dC5wYWdlWS10aGlzLm9mZnNldC50b3B9LHBhcmVudDp0aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSxyZWxhdGl2ZTp0aGlzLl9nZXRSZWxhdGl2ZU9mZnNldCgpfSksdGhpcy5oZWxwZXIuY3NzKCJwb3NpdGlvbiIsImFic29sdXRlIiksdGhpcy5jc3NQb3NpdGlvbj10aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiksdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCksdGhpcy5vcmlnaW5hbFBhZ2VYPXQucGFnZVgsdGhpcy5vcmlnaW5hbFBhZ2VZPXQucGFnZVksaS5jdXJzb3JBdCYmdGhpcy5fYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcihpLmN1cnNvckF0KSx0aGlzLmRvbVBvc2l0aW9uPXtwcmV2OnRoaXMuY3VycmVudEl0ZW0ucHJldigpWzBdLHBhcmVudDp0aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpWzBdfSx0aGlzLmhlbHBlclswXSE9dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5jdXJyZW50SXRlbS5oaWRlKCksdGhpcy5fY3JlYXRlUGxhY2Vob2xkZXIoKSxpLmNvbnRhaW5tZW50JiZ0aGlzLl9zZXRDb250YWlubWVudCgpLGkuY3Vyc29yJiYoZSgiYm9keSIpLmNzcygiY3Vyc29yIikmJih0aGlzLl9zdG9yZWRDdXJzb3I9ZSgiYm9keSIpLmNzcygiY3Vyc29yIikpLGUoImJvZHkiKS5jc3MoImN1cnNvciIsaS5jdXJzb3IpKSxpLm9wYWNpdHkmJih0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiKSYmKHRoaXMuX3N0b3JlZE9wYWNpdHk9dGhpcy5oZWxwZXIuY3NzKCJvcGFjaXR5IikpLHRoaXMuaGVscGVyLmNzcygib3BhY2l0eSIsaS5vcGFjaXR5KSksaS56SW5kZXgmJih0aGlzLmhlbHBlci5jc3MoInpJbmRleCIpJiYodGhpcy5fc3RvcmVkWkluZGV4PXRoaXMuaGVscGVyLmNzcygiekluZGV4IikpLHRoaXMuaGVscGVyLmNzcygiekluZGV4IixpLnpJbmRleCkpLHRoaXMuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmdGhpcy5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSE9IkhUTUwiJiYodGhpcy5vdmVyZmxvd09mZnNldD10aGlzLnNjcm9sbFBhcmVudC5vZmZzZXQoKSksdGhpcy5fdHJpZ2dlcigic3RhcnQiLHQsdGhpcy5fdWlIYXNoKCkpLHRoaXMuX3ByZXNlcnZlSGVscGVyUHJvcG9ydGlvbnN8fHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKTtpZighcilmb3IodmFyIHM9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO3M+PTA7cy0tKXRoaXMuY29udGFpbmVyc1tzXS5fdHJpZ2dlcigiYWN0aXZhdGUiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKTtyZXR1cm4gZS51aS5kZG1hbmFnZXImJihlLnVpLmRkbWFuYWdlci5jdXJyZW50PXRoaXMpLGUudWkuZGRtYW5hZ2VyJiYhaS5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLHQpLHRoaXMuZHJhZ2dpbmc9ITAsdGhpcy5oZWxwZXIuYWRkQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpLHRoaXMuX21vdXNlRHJhZyh0KSwhMH0sX21vdXNlRHJhZzpmdW5jdGlvbih0KXt0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSx0aGlzLmxhc3RQb3NpdGlvbkFic3x8KHRoaXMubGFzdFBvc2l0aW9uQWJzPXRoaXMucG9zaXRpb25BYnMpO2lmKHRoaXMub3B0aW9ucy5zY3JvbGwpe3ZhciBuPXRoaXMub3B0aW9ucyxyPSExO3RoaXMuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmdGhpcy5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSE9IkhUTUwiPyh0aGlzLm92ZXJmbG93T2Zmc2V0LnRvcCt0aGlzLnNjcm9sbFBhcmVudFswXS5vZmZzZXRIZWlnaHQtdC5wYWdlWTxuLnNjcm9sbFNlbnNpdGl2aXR5P3RoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcCtuLnNjcm9sbFNwZWVkOnQucGFnZVktdGhpcy5vdmVyZmxvd09mZnNldC50b3A8bi5zY3JvbGxTZW5zaXRpdml0eSYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcC1uLnNjcm9sbFNwZWVkKSx0aGlzLm92ZXJmbG93T2Zmc2V0LmxlZnQrdGhpcy5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0V2lkdGgtdC5wYWdlWDxuLnNjcm9sbFNlbnNpdGl2aXR5P3RoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9cj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0K24uc2Nyb2xsU3BlZWQ6dC5wYWdlWC10aGlzLm92ZXJmbG93T2Zmc2V0LmxlZnQ8bi5zY3JvbGxTZW5zaXRpdml0eSYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9cj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0LW4uc2Nyb2xsU3BlZWQpKToodC5wYWdlWS1lKGRvY3VtZW50KS5zY3JvbGxUb3AoKTxuLnNjcm9sbFNlbnNpdGl2aXR5P3I9ZShkb2N1bWVudCkuc2Nyb2xsVG9wKGUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpLW4uc2Nyb2xsU3BlZWQpOmUod2luZG93KS5oZWlnaHQoKS0odC5wYWdlWS1lKGRvY3VtZW50KS5zY3JvbGxUb3AoKSk8bi5zY3JvbGxTZW5zaXRpdml0eSYmKHI9ZShkb2N1bWVudCkuc2Nyb2xsVG9wKGUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpK24uc2Nyb2xsU3BlZWQpKSx0LnBhZ2VYLWUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKTxuLnNjcm9sbFNlbnNpdGl2aXR5P3I9ZShkb2N1bWVudCkuc2Nyb2xsTGVmdChlKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCktbi5zY3JvbGxTcGVlZCk6ZSh3aW5kb3cpLndpZHRoKCktKHQucGFnZVgtZShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKTxuLnNjcm9sbFNlbnNpdGl2aXR5JiYocj1lKGRvY3VtZW50KS5zY3JvbGxMZWZ0KGUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKStuLnNjcm9sbFNwZWVkKSkpLHIhPT0hMSYmZS51aS5kZG1hbmFnZXImJiFuLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsdCl9dGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKTtpZighdGhpcy5vcHRpb25zLmF4aXN8fHRoaXMub3B0aW9ucy5heGlzIT0ieSIpdGhpcy5oZWxwZXJbMF0uc3R5bGUubGVmdD10aGlzLnBvc2l0aW9uLmxlZnQrInB4IjtpZighdGhpcy5vcHRpb25zLmF4aXN8fHRoaXMub3B0aW9ucy5heGlzIT0ieCIpdGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wKyJweCI7Zm9yKHZhciBpPXRoaXMuaXRlbXMubGVuZ3RoLTE7aT49MDtpLS0pe3ZhciBzPXRoaXMuaXRlbXNbaV0sbz1zLml0ZW1bMF0sdT10aGlzLl9pbnRlcnNlY3RzV2l0aFBvaW50ZXIocyk7aWYoIXUpY29udGludWU7aWYocy5pbnN0YW5jZSE9PXRoaXMuY3VycmVudENvbnRhaW5lciljb250aW51ZTtpZihvIT10aGlzLmN1cnJlbnRJdGVtWzBdJiZ0aGlzLnBsYWNlaG9sZGVyW3U9PTE/Im5leHQiOiJwcmV2Il0oKVswXSE9byYmIWUuY29udGFpbnModGhpcy5wbGFjZWhvbGRlclswXSxvKSYmKHRoaXMub3B0aW9ucy50eXBlPT0ic2VtaS1keW5hbWljIj8hZS5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sbyk6ITApKXt0aGlzLmRpcmVjdGlvbj11PT0xPyJkb3duIjoidXAiO2lmKHRoaXMub3B0aW9ucy50b2xlcmFuY2UhPSJwb2ludGVyIiYmIXRoaXMuX2ludGVyc2VjdHNXaXRoU2lkZXMocykpYnJlYWs7dGhpcy5fcmVhcnJhbmdlKHQscyksdGhpcy5fdHJpZ2dlcigiY2hhbmdlIix0LHRoaXMuX3VpSGFzaCgpKTticmVha319cmV0dXJuIHRoaXMuX2NvbnRhY3RDb250YWluZXJzKHQpLGUudWkuZGRtYW5hZ2VyJiZlLnVpLmRkbWFuYWdlci5kcmFnKHRoaXMsdCksdGhpcy5fdHJpZ2dlcigic29ydCIsdCx0aGlzLl91aUhhc2goKSksdGhpcy5sYXN0UG9zaXRpb25BYnM9dGhpcy5wb3NpdGlvbkFicywhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0LG4pe2lmKCF0KXJldHVybjtlLnVpLmRkbWFuYWdlciYmIXRoaXMub3B0aW9ucy5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5kcm9wKHRoaXMsdCk7aWYodGhpcy5vcHRpb25zLnJldmVydCl7dmFyIHI9dGhpcyxpPXRoaXMucGxhY2Vob2xkZXIub2Zmc2V0KCk7dGhpcy5yZXZlcnRpbmc9ITAsZSh0aGlzLmhlbHBlcikuYW5pbWF0ZSh7bGVmdDppLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQtdGhpcy5tYXJnaW5zLmxlZnQrKHRoaXMub2Zmc2V0UGFyZW50WzBdPT1kb2N1bWVudC5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsTGVmdCksdG9wOmkudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AtdGhpcy5tYXJnaW5zLnRvcCsodGhpcy5vZmZzZXRQYXJlbnRbMF09PWRvY3VtZW50LmJvZHk/MDp0aGlzLm9mZnNldFBhcmVudFswXS5zY3JvbGxUb3ApfSxwYXJzZUludCh0aGlzLm9wdGlvbnMucmV2ZXJ0LDEwKXx8NTAwLGZ1bmN0aW9uKCl7ci5fY2xlYXIodCl9KX1lbHNlIHRoaXMuX2NsZWFyKHQsbik7cmV0dXJuITF9LGNhbmNlbDpmdW5jdGlvbigpe2lmKHRoaXMuZHJhZ2dpbmcpe3RoaXMuX21vdXNlVXAoe3RhcmdldDpudWxsfSksdGhpcy5vcHRpb25zLmhlbHBlcj09Im9yaWdpbmFsIj90aGlzLmN1cnJlbnRJdGVtLmNzcyh0aGlzLl9zdG9yZWRDU1MpLnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZS1oZWxwZXIiKTp0aGlzLmN1cnJlbnRJdGVtLnNob3coKTtmb3IodmFyIHQ9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO3Q+PTA7dC0tKXRoaXMuY29udGFpbmVyc1t0XS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsbnVsbCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1t0XS5jb250YWluZXJDYWNoZS5vdmVyJiYodGhpcy5jb250YWluZXJzW3RdLl90cmlnZ2VyKCJvdXQiLG51bGwsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbdF0uY29udGFpbmVyQ2FjaGUub3Zlcj0wKX1yZXR1cm4gdGhpcy5wbGFjZWhvbGRlciYmKHRoaXMucGxhY2Vob2xkZXJbMF0ucGFyZW50Tm9kZSYmdGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pLHRoaXMub3B0aW9ucy5oZWxwZXIhPSJvcmlnaW5hbCImJnRoaXMuaGVscGVyJiZ0aGlzLmhlbHBlclswXS5wYXJlbnROb2RlJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSxlLmV4dGVuZCh0aGlzLHtoZWxwZXI6bnVsbCxkcmFnZ2luZzohMSxyZXZlcnRpbmc6ITEsX25vRmluYWxTb3J0Om51bGx9KSx0aGlzLmRvbVBvc2l0aW9uLnByZXY/ZSh0aGlzLmRvbVBvc2l0aW9uLnByZXYpLmFmdGVyKHRoaXMuY3VycmVudEl0ZW0pOmUodGhpcy5kb21Qb3NpdGlvbi5wYXJlbnQpLnByZXBlbmQodGhpcy5jdXJyZW50SXRlbSkpLHRoaXN9LHNlcmlhbGl6ZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KHQmJnQuY29ubmVjdGVkKSxyPVtdO3JldHVybiB0PXR8fHt9LGUobikuZWFjaChmdW5jdGlvbigpe3ZhciBuPShlKHQuaXRlbXx8dGhpcykuYXR0cih0LmF0dHJpYnV0ZXx8ImlkIil8fCIiKS5tYXRjaCh0LmV4cHJlc3Npb258fC8oLispWy09X10oLispLyk7biYmci5wdXNoKCh0LmtleXx8blsxXSsiW10iKSsiPSIrKHQua2V5JiZ0LmV4cHJlc3Npb24/blsxXTpuWzJdKSl9KSwhci5sZW5ndGgmJnQua2V5JiZyLnB1c2godC5rZXkrIj0iKSxyLmpvaW4oIiYiKX0sdG9BcnJheTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KHQmJnQuY29ubmVjdGVkKSxyPVtdO3JldHVybiB0PXR8fHt9LG4uZWFjaChmdW5jdGlvbigpe3IucHVzaChlKHQuaXRlbXx8dGhpcykuYXR0cih0LmF0dHJpYnV0ZXx8ImlkIil8fCIiKX0pLHJ9LF9pbnRlcnNlY3RzV2l0aDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnBvc2l0aW9uQWJzLmxlZnQsbj10K3RoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgscj10aGlzLnBvc2l0aW9uQWJzLnRvcCxpPXIrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQscz1lLmxlZnQsbz1zK2Uud2lkdGgsdT1lLnRvcCxhPXUrZS5oZWlnaHQsZj10aGlzLm9mZnNldC5jbGljay50b3AsbD10aGlzLm9mZnNldC5jbGljay5sZWZ0LGM9citmPnUmJnIrZjxhJiZ0K2w+cyYmdCtsPG87cmV0dXJuIHRoaXMub3B0aW9ucy50b2xlcmFuY2U9PSJwb2ludGVyInx8dGhpcy5vcHRpb25zLmZvcmNlUG9pbnRlckZvckNvbnRhaW5lcnN8fHRoaXMub3B0aW9ucy50b2xlcmFuY2UhPSJwb2ludGVyIiYmdGhpcy5oZWxwZXJQcm9wb3J0aW9uc1t0aGlzLmZsb2F0aW5nPyJ3aWR0aCI6ImhlaWdodCJdPmVbdGhpcy5mbG9hdGluZz8id2lkdGgiOiJoZWlnaHQiXT9jOnM8dCt0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzImJm4tdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yPG8mJnU8cit0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yJiZpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI8YX0sX2ludGVyc2VjdHNXaXRoUG9pbnRlcjpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm9wdGlvbnMuYXhpcz09PSJ4Inx8ZS51aS5pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMudG9wK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCx0LnRvcCx0LmhlaWdodCkscj10aGlzLm9wdGlvbnMuYXhpcz09PSJ5Inx8ZS51aS5pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMubGVmdCt0aGlzLm9mZnNldC5jbGljay5sZWZ0LHQubGVmdCx0LndpZHRoKSxpPW4mJnIscz10aGlzLl9nZXREcmFnVmVydGljYWxEaXJlY3Rpb24oKSxvPXRoaXMuX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uKCk7cmV0dXJuIGk/dGhpcy5mbG9hdGluZz9vJiZvPT0icmlnaHQifHxzPT0iZG93biI/MjoxOnMmJihzPT0iZG93biI/MjoxKTohMX0sX2ludGVyc2VjdHNXaXRoU2lkZXM6ZnVuY3Rpb24odCl7dmFyIG49ZS51aS5pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMudG9wK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCx0LnRvcCt0LmhlaWdodC8yLHQuaGVpZ2h0KSxyPWUudWkuaXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLmxlZnQrdGhpcy5vZmZzZXQuY2xpY2subGVmdCx0LmxlZnQrdC53aWR0aC8yLHQud2lkdGgpLGk9dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCkscz10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpO3JldHVybiB0aGlzLmZsb2F0aW5nJiZzP3M9PSJyaWdodCImJnJ8fHM9PSJsZWZ0IiYmIXI6aSYmKGk9PSJkb3duIiYmbnx8aT09InVwIiYmIW4pfSxfZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wb3NpdGlvbkFicy50b3AtdGhpcy5sYXN0UG9zaXRpb25BYnMudG9wO3JldHVybiBlIT0wJiYoZT4wPyJkb3duIjoidXAiKX0sX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LXRoaXMubGFzdFBvc2l0aW9uQWJzLmxlZnQ7cmV0dXJuIGUhPTAmJihlPjA/InJpZ2h0IjoibGVmdCIpfSxyZWZyZXNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yZWZyZXNoSXRlbXMoZSksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCksdGhpc30sX2Nvbm5lY3RXaXRoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3JldHVybiBlLmNvbm5lY3RXaXRoLmNvbnN0cnVjdG9yPT1TdHJpbmc/W2UuY29ubmVjdFdpdGhdOmUuY29ubmVjdFdpdGh9LF9nZXRJdGVtc0FzalF1ZXJ5OmZ1bmN0aW9uKHQpe3ZhciBuPVtdLHI9W10saT10aGlzLl9jb25uZWN0V2l0aCgpO2lmKGkmJnQpZm9yKHZhciBzPWkubGVuZ3RoLTE7cz49MDtzLS0pe3ZhciBvPWUoaVtzXSk7Zm9yKHZhciB1PW8ubGVuZ3RoLTE7dT49MDt1LS0pe3ZhciBhPWUuZGF0YShvW3VdLHRoaXMud2lkZ2V0TmFtZSk7YSYmYSE9dGhpcyYmIWEub3B0aW9ucy5kaXNhYmxlZCYmci5wdXNoKFtlLmlzRnVuY3Rpb24oYS5vcHRpb25zLml0ZW1zKT9hLm9wdGlvbnMuaXRlbXMuY2FsbChhLmVsZW1lbnQpOmUoYS5vcHRpb25zLml0ZW1zLGEuZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSxhXSl9fXIucHVzaChbZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50LG51bGwse29wdGlvbnM6dGhpcy5vcHRpb25zLGl0ZW06dGhpcy5jdXJyZW50SXRlbX0pOmUodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSx0aGlzXSk7Zm9yKHZhciBzPXIubGVuZ3RoLTE7cz49MDtzLS0pcltzXVswXS5lYWNoKGZ1bmN0aW9uKCl7bi5wdXNoKHRoaXMpfSk7cmV0dXJuIGUobil9LF9yZW1vdmVDdXJyZW50c0Zyb21JdGVtczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudEl0ZW0uZmluZCgiOmRhdGEoIit0aGlzLndpZGdldE5hbWUrIi1pdGVtKSIpO2Zvcih2YXIgdD0wO3Q8dGhpcy5pdGVtcy5sZW5ndGg7dCsrKWZvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKWVbbl09PXRoaXMuaXRlbXNbdF0uaXRlbVswXSYmdGhpcy5pdGVtcy5zcGxpY2UodCwxKX0sX3JlZnJlc2hJdGVtczpmdW5jdGlvbih0KXt0aGlzLml0ZW1zPVtdLHRoaXMuY29udGFpbmVycz1bdGhpc107dmFyIG49dGhpcy5pdGVtcyxyPVtbZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50WzBdLHQse2l0ZW06dGhpcy5jdXJyZW50SXRlbX0pOmUodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCksdGhpc11dLGk9dGhpcy5fY29ubmVjdFdpdGgoKTtpZihpJiZ0aGlzLnJlYWR5KWZvcih2YXIgcz1pLmxlbmd0aC0xO3M+PTA7cy0tKXt2YXIgbz1lKGlbc10pO2Zvcih2YXIgdT1vLmxlbmd0aC0xO3U+PTA7dS0tKXt2YXIgYT1lLmRhdGEob1t1XSx0aGlzLndpZGdldE5hbWUpO2EmJmEhPXRoaXMmJiFhLm9wdGlvbnMuZGlzYWJsZWQmJihyLnB1c2goW2UuaXNGdW5jdGlvbihhLm9wdGlvbnMuaXRlbXMpP2Eub3B0aW9ucy5pdGVtcy5jYWxsKGEuZWxlbWVudFswXSx0LHtpdGVtOnRoaXMuY3VycmVudEl0ZW19KTplKGEub3B0aW9ucy5pdGVtcyxhLmVsZW1lbnQpLGFdKSx0aGlzLmNvbnRhaW5lcnMucHVzaChhKSl9fWZvcih2YXIgcz1yLmxlbmd0aC0xO3M+PTA7cy0tKXt2YXIgZj1yW3NdWzFdLGw9cltzXVswXTtmb3IodmFyIHU9MCxjPWwubGVuZ3RoO3U8Yzt1Kyspe3ZhciBoPWUobFt1XSk7aC5kYXRhKHRoaXMud2lkZ2V0TmFtZSsiLWl0ZW0iLGYpLG4ucHVzaCh7aXRlbTpoLGluc3RhbmNlOmYsd2lkdGg6MCxoZWlnaHQ6MCxsZWZ0OjAsdG9wOjB9KX19fSxyZWZyZXNoUG9zaXRpb25zOmZ1bmN0aW9uKHQpe3RoaXMub2Zmc2V0UGFyZW50JiZ0aGlzLmhlbHBlciYmKHRoaXMub2Zmc2V0LnBhcmVudD10aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSk7Zm9yKHZhciBuPXRoaXMuaXRlbXMubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciByPXRoaXMuaXRlbXNbbl07aWYoci5pbnN0YW5jZSE9dGhpcy5jdXJyZW50Q29udGFpbmVyJiZ0aGlzLmN1cnJlbnRDb250YWluZXImJnIuaXRlbVswXSE9dGhpcy5jdXJyZW50SXRlbVswXSljb250aW51ZTt2YXIgaT10aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudD9lKHRoaXMub3B0aW9ucy50b2xlcmFuY2VFbGVtZW50LHIuaXRlbSk6ci5pdGVtO3R8fChyLndpZHRoPWkub3V0ZXJXaWR0aCgpLHIuaGVpZ2h0PWkub3V0ZXJIZWlnaHQoKSk7dmFyIHM9aS5vZmZzZXQoKTtyLmxlZnQ9cy5sZWZ0LHIudG9wPXMudG9wfWlmKHRoaXMub3B0aW9ucy5jdXN0b20mJnRoaXMub3B0aW9ucy5jdXN0b20ucmVmcmVzaENvbnRhaW5lcnMpdGhpcy5vcHRpb25zLmN1c3RvbS5yZWZyZXNoQ29udGFpbmVycy5jYWxsKHRoaXMpO2Vsc2UgZm9yKHZhciBuPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIHM9dGhpcy5jb250YWluZXJzW25dLmVsZW1lbnQub2Zmc2V0KCk7dGhpcy5jb250YWluZXJzW25dLmNvbnRhaW5lckNhY2hlLmxlZnQ9cy5sZWZ0LHRoaXMuY29udGFpbmVyc1tuXS5jb250YWluZXJDYWNoZS50b3A9cy50b3AsdGhpcy5jb250YWluZXJzW25dLmNvbnRhaW5lckNhY2hlLndpZHRoPXRoaXMuY29udGFpbmVyc1tuXS5lbGVtZW50Lm91dGVyV2lkdGgoKSx0aGlzLmNvbnRhaW5lcnNbbl0uY29udGFpbmVyQ2FjaGUuaGVpZ2h0PXRoaXMuY29udGFpbmVyc1tuXS5lbGVtZW50Lm91dGVySGVpZ2h0KCl9cmV0dXJuIHRoaXN9LF9jcmVhdGVQbGFjZWhvbGRlcjpmdW5jdGlvbih0KXt0PXR8fHRoaXM7dmFyIG49dC5vcHRpb25zO2lmKCFuLnBsYWNlaG9sZGVyfHxuLnBsYWNlaG9sZGVyLmNvbnN0cnVjdG9yPT1TdHJpbmcpe3ZhciByPW4ucGxhY2Vob2xkZXI7bi5wbGFjZWhvbGRlcj17ZWxlbWVudDpmdW5jdGlvbigpe3ZhciBuPWUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0LmN1cnJlbnRJdGVtWzBdLm5vZGVOYW1lKSkuYWRkQ2xhc3Mocnx8dC5jdXJyZW50SXRlbVswXS5jbGFzc05hbWUrIiB1aS1zb3J0YWJsZS1wbGFjZWhvbGRlciIpLnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZS1oZWxwZXIiKVswXTtyZXR1cm4gcnx8KG4uc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIiksbn0sdXBkYXRlOmZ1bmN0aW9uKGUsaSl7aWYociYmIW4uZm9yY2VQbGFjZWhvbGRlclNpemUpcmV0dXJuO2kuaGVpZ2h0KCl8fGkuaGVpZ2h0KHQuY3VycmVudEl0ZW0uaW5uZXJIZWlnaHQoKS1wYXJzZUludCh0LmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ1RvcCIpfHwwLDEwKS1wYXJzZUludCh0LmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ0JvdHRvbSIpfHwwLDEwKSksaS53aWR0aCgpfHxpLndpZHRoKHQuY3VycmVudEl0ZW0uaW5uZXJXaWR0aCgpLXBhcnNlSW50KHQuY3VycmVudEl0ZW0uY3NzKCJwYWRkaW5nTGVmdCIpfHwwLDEwKS1wYXJzZUludCh0LmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ1JpZ2h0Iil8fDAsMTApKX19fXQucGxhY2Vob2xkZXI9ZShuLnBsYWNlaG9sZGVyLmVsZW1lbnQuY2FsbCh0LmVsZW1lbnQsdC5jdXJyZW50SXRlbSkpLHQuY3VycmVudEl0ZW0uYWZ0ZXIodC5wbGFjZWhvbGRlciksbi5wbGFjZWhvbGRlci51cGRhdGUodCx0LnBsYWNlaG9sZGVyKX0sX2NvbnRhY3RDb250YWluZXJzOmZ1bmN0aW9uKHQpe3ZhciBuPW51bGwscj1udWxsO2Zvcih2YXIgaT10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7aT49MDtpLS0pe2lmKGUuY29udGFpbnModGhpcy5jdXJyZW50SXRlbVswXSx0aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudFswXSkpY29udGludWU7aWYodGhpcy5faW50ZXJzZWN0c1dpdGgodGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlKSl7aWYobiYmZS5jb250YWlucyh0aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudFswXSxuLmVsZW1lbnRbMF0pKWNvbnRpbnVlO249dGhpcy5jb250YWluZXJzW2ldLHI9aX1lbHNlIHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS5vdmVyJiYodGhpcy5jb250YWluZXJzW2ldLl90cmlnZ2VyKCJvdXQiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3Zlcj0wKX1pZighbilyZXR1cm47aWYodGhpcy5jb250YWluZXJzLmxlbmd0aD09PTEpdGhpcy5jb250YWluZXJzW3JdLl90cmlnZ2VyKCJvdmVyIix0LHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW3JdLmNvbnRhaW5lckNhY2hlLm92ZXI9MTtlbHNlIGlmKHRoaXMuY3VycmVudENvbnRhaW5lciE9dGhpcy5jb250YWluZXJzW3JdKXt2YXIgcz0xZTQsbz1udWxsLHU9dGhpcy5wb3NpdGlvbkFic1t0aGlzLmNvbnRhaW5lcnNbcl0uZmxvYXRpbmc/ImxlZnQiOiJ0b3AiXTtmb3IodmFyIGE9dGhpcy5pdGVtcy5sZW5ndGgtMTthPj0wO2EtLSl7aWYoIWUuY29udGFpbnModGhpcy5jb250YWluZXJzW3JdLmVsZW1lbnRbMF0sdGhpcy5pdGVtc1thXS5pdGVtWzBdKSljb250aW51ZTt2YXIgZj10aGlzLmNvbnRhaW5lcnNbcl0uZmxvYXRpbmc/dGhpcy5pdGVtc1thXS5pdGVtLm9mZnNldCgpLmxlZnQ6dGhpcy5pdGVtc1thXS5pdGVtLm9mZnNldCgpLnRvcDtNYXRoLmFicyhmLXUpPHMmJihzPU1hdGguYWJzKGYtdSksbz10aGlzLml0ZW1zW2FdLHRoaXMuZGlyZWN0aW9uPWYtdT4wPyJkb3duIjoidXAiKX1pZighbyYmIXRoaXMub3B0aW9ucy5kcm9wT25FbXB0eSlyZXR1cm47dGhpcy5jdXJyZW50Q29udGFpbmVyPXRoaXMuY29udGFpbmVyc1tyXSxvP3RoaXMuX3JlYXJyYW5nZSh0LG8sbnVsbCwhMCk6dGhpcy5fcmVhcnJhbmdlKHQsbnVsbCx0aGlzLmNvbnRhaW5lcnNbcl0uZWxlbWVudCwhMCksdGhpcy5fdHJpZ2dlcigiY2hhbmdlIix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLmNvbnRhaW5lcnNbcl0uX3RyaWdnZXIoImNoYW5nZSIsdCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlci51cGRhdGUodGhpcy5jdXJyZW50Q29udGFpbmVyLHRoaXMucGxhY2Vob2xkZXIpLHRoaXMuY29udGFpbmVyc1tyXS5fdHJpZ2dlcigib3ZlciIsdCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1tyXS5jb250YWluZXJDYWNoZS5vdmVyPTF9fSxfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyPWUuaXNGdW5jdGlvbihuLmhlbHBlcik/ZShuLmhlbHBlci5hcHBseSh0aGlzLmVsZW1lbnRbMF0sW3QsdGhpcy5jdXJyZW50SXRlbV0pKTpuLmhlbHBlcj09ImNsb25lIj90aGlzLmN1cnJlbnRJdGVtLmNsb25lKCk6dGhpcy5jdXJyZW50SXRlbTtyZXR1cm4gci5wYXJlbnRzKCJib2R5IikubGVuZ3RofHxlKG4uYXBwZW5kVG8hPSJwYXJlbnQiP24uYXBwZW5kVG86dGhpcy5jdXJyZW50SXRlbVswXS5wYXJlbnROb2RlKVswXS5hcHBlbmRDaGlsZChyWzBdKSxyWzBdPT10aGlzLmN1cnJlbnRJdGVtWzBdJiYodGhpcy5fc3RvcmVkQ1NTPXt3aWR0aDp0aGlzLmN1cnJlbnRJdGVtWzBdLnN0eWxlLndpZHRoLGhlaWdodDp0aGlzLmN1cnJlbnRJdGVtWzBdLnN0eWxlLmhlaWdodCxwb3NpdGlvbjp0aGlzLmN1cnJlbnRJdGVtLmNzcygicG9zaXRpb24iKSx0b3A6dGhpcy5jdXJyZW50SXRlbS5jc3MoInRvcCIpLGxlZnQ6dGhpcy5jdXJyZW50SXRlbS5jc3MoImxlZnQiKX0pLChyWzBdLnN0eWxlLndpZHRoPT0iInx8bi5mb3JjZUhlbHBlclNpemUpJiZyLndpZHRoKHRoaXMuY3VycmVudEl0ZW0ud2lkdGgoKSksKHJbMF0uc3R5bGUuaGVpZ2h0PT0iInx8bi5mb3JjZUhlbHBlclNpemUpJiZyLmhlaWdodCh0aGlzLmN1cnJlbnRJdGVtLmhlaWdodCgpKSxyfSxfYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcjpmdW5jdGlvbih0KXt0eXBlb2YgdD09InN0cmluZyImJih0PXQuc3BsaXQoIiAiKSksZS5pc0FycmF5KHQpJiYodD17bGVmdDordFswXSx0b3A6K3RbMV18fDB9KSwibGVmdCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2subGVmdD10LmxlZnQrdGhpcy5tYXJnaW5zLmxlZnQpLCJyaWdodCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2subGVmdD10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXQucmlnaHQrdGhpcy5tYXJnaW5zLmxlZnQpLCJ0b3AiaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10LnRvcCt0aGlzLm1hcmdpbnMudG9wKSwiYm90dG9tImluIHQmJih0aGlzLm9mZnNldC5jbGljay50b3A9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdC5ib3R0b20rdGhpcy5tYXJnaW5zLnRvcCl9LF9nZXRQYXJlbnRPZmZzZXQ6ZnVuY3Rpb24oKXt0aGlzLm9mZnNldFBhcmVudD10aGlzLmhlbHBlci5vZmZzZXRQYXJlbnQoKTt2YXIgdD10aGlzLm9mZnNldFBhcmVudC5vZmZzZXQoKTt0aGlzLmNzc1Bvc2l0aW9uPT0iYWJzb2x1dGUiJiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJmUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYodC5sZWZ0Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksdC50b3ArPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKTtpZih0aGlzLm9mZnNldFBhcmVudFswXT09ZG9jdW1lbnQuYm9keXx8dGhpcy5vZmZzZXRQYXJlbnRbMF0udGFnTmFtZSYmdGhpcy5vZmZzZXRQYXJlbnRbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0iaHRtbCImJmUuYnJvd3Nlci5tc2llKXQ9e3RvcDowLGxlZnQ6MH07cmV0dXJue3RvcDp0LnRvcCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCksbGVmdDp0LmxlZnQrKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKX19LF9nZXRSZWxhdGl2ZU9mZnNldDpmdW5jdGlvbigpe2lmKHRoaXMuY3NzUG9zaXRpb249PSJyZWxhdGl2ZSIpe3ZhciBlPXRoaXMuY3VycmVudEl0ZW0ucG9zaXRpb24oKTtyZXR1cm57dG9wOmUudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoInRvcCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksbGVmdDplLmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcygibGVmdCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfX1yZXR1cm57dG9wOjAsbGVmdDowfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmN1cnJlbnRJdGVtLmNzcygibWFyZ2luTGVmdCIpLDEwKXx8MCx0b3A6cGFyc2VJbnQodGhpcy5jdXJyZW50SXRlbS5jc3MoIm1hcmdpblRvcCIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3QuY29udGFpbm1lbnQ9PSJwYXJlbnQiJiYodC5jb250YWlubWVudD10aGlzLmhlbHBlclswXS5wYXJlbnROb2RlKTtpZih0LmNvbnRhaW5tZW50PT0iZG9jdW1lbnQifHx0LmNvbnRhaW5tZW50PT0id2luZG93Iil0aGlzLmNvbnRhaW5tZW50PVswLXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQsMC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCxlKHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/ZG9jdW1lbnQ6d2luZG93KS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKGUodC5jb250YWlubWVudD09ImRvY3VtZW50Ij9kb2N1bWVudDp3aW5kb3cpLmhlaWdodCgpfHxkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXTtpZighL14oZG9jdW1lbnR8d2luZG93fHBhcmVudCkkLy50ZXN0KHQuY29udGFpbm1lbnQpKXt2YXIgbj1lKHQuY29udGFpbm1lbnQpWzBdLHI9ZSh0LmNvbnRhaW5tZW50KS5vZmZzZXQoKSxpPWUobikuY3NzKCJvdmVyZmxvdyIpIT0iaGlkZGVuIjt0aGlzLmNvbnRhaW5tZW50PVtyLmxlZnQrKHBhcnNlSW50KGUobikuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChlKG4pLmNzcygicGFkZGluZ0xlZnQiKSwxMCl8fDApLXRoaXMubWFyZ2lucy5sZWZ0LHIudG9wKyhwYXJzZUludChlKG4pLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChlKG4pLmNzcygicGFkZGluZ1RvcCIpLDEwKXx8MCktdGhpcy5tYXJnaW5zLnRvcCxyLmxlZnQrKGk/TWF0aC5tYXgobi5zY3JvbGxXaWR0aCxuLm9mZnNldFdpZHRoKTpuLm9mZnNldFdpZHRoKS0ocGFyc2VJbnQoZShuKS5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCktKHBhcnNlSW50KGUobikuY3NzKCJwYWRkaW5nUmlnaHQiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsci50b3ArKGk/TWF0aC5tYXgobi5zY3JvbGxIZWlnaHQsbi5vZmZzZXRIZWlnaHQpOm4ub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoZShuKS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoZShuKS5jc3MoInBhZGRpbmdCb3R0b20iKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdfX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKHQsbil7bnx8KG49dGhpcy5wb3NpdGlvbik7dmFyIHI9dD09ImFic29sdXRlIj8xOi0xLGk9dGhpcy5vcHRpb25zLHM9dGhpcy5jc3NQb3NpdGlvbiE9ImFic29sdXRlInx8dGhpcy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiYhIWUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LG89LyhodG1sfGJvZHkpL2kudGVzdChzWzBdLnRhZ05hbWUpO3JldHVybnt0b3A6bi50b3ArdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wKnIrdGhpcy5vZmZzZXQucGFyZW50LnRvcCpyLSh0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKTpvPzA6cy5zY3JvbGxUb3AoKSkqcixsZWZ0Om4ubGVmdCt0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0KnIrdGhpcy5vZmZzZXQucGFyZW50LmxlZnQqci0odGhpcy5jc3NQb3NpdGlvbj09ImZpeGVkIj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpOm8/MDpzLnNjcm9sbExlZnQoKSkqcn19LF9nZW5lcmF0ZVBvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyPXRoaXMuY3NzUG9zaXRpb24hPSJhYnNvbHV0ZSJ8fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmISFlLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKT90aGlzLnNjcm9sbFBhcmVudDp0aGlzLm9mZnNldFBhcmVudCxpPS8oaHRtbHxib2R5KS9pLnRlc3QoclswXS50YWdOYW1lKTt0aGlzLmNzc1Bvc2l0aW9uPT0icmVsYXRpdmUiJiYodGhpcy5zY3JvbGxQYXJlbnRbMF09PWRvY3VtZW50fHx0aGlzLnNjcm9sbFBhcmVudFswXT09dGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYodGhpcy5vZmZzZXQucmVsYXRpdmU9dGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKSk7dmFyIHM9dC5wYWdlWCxvPXQucGFnZVk7aWYodGhpcy5vcmlnaW5hbFBvc2l0aW9uKXt0aGlzLmNvbnRhaW5tZW50JiYodC5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PHRoaXMuY29udGFpbm1lbnRbMF0mJihzPXRoaXMuY29udGFpbm1lbnRbMF0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksdC5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A8dGhpcy5jb250YWlubWVudFsxXSYmKG89dGhpcy5jb250YWlubWVudFsxXSt0aGlzLm9mZnNldC5jbGljay50b3ApLHQucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdD50aGlzLmNvbnRhaW5tZW50WzJdJiYocz10aGlzLmNvbnRhaW5tZW50WzJdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLHQucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPnRoaXMuY29udGFpbm1lbnRbM10mJihvPXRoaXMuY29udGFpbm1lbnRbM10rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSk7aWYobi5ncmlkKXt2YXIgdT10aGlzLm9yaWdpbmFsUGFnZVkrTWF0aC5yb3VuZCgoby10aGlzLm9yaWdpbmFsUGFnZVkpL24uZ3JpZFsxXSkqbi5ncmlkWzFdO289dGhpcy5jb250YWlubWVudD91LXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx0aGlzLmNvbnRhaW5tZW50WzFdfHx1LXRoaXMub2Zmc2V0LmNsaWNrLnRvcD50aGlzLmNvbnRhaW5tZW50WzNdP3UtdGhpcy5vZmZzZXQuY2xpY2sudG9wPHRoaXMuY29udGFpbm1lbnRbMV0/dStuLmdyaWRbMV06dS1uLmdyaWRbMV06dTp1O3ZhciBhPXRoaXMub3JpZ2luYWxQYWdlWCtNYXRoLnJvdW5kKChzLXRoaXMub3JpZ2luYWxQYWdlWCkvbi5ncmlkWzBdKSpuLmdyaWRbMF07cz10aGlzLmNvbnRhaW5tZW50P2EtdGhpcy5vZmZzZXQuY2xpY2subGVmdDx0aGlzLmNvbnRhaW5tZW50WzBdfHxhLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+dGhpcy5jb250YWlubWVudFsyXT9hLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dGhpcy5jb250YWlubWVudFswXT9hK24uZ3JpZFswXTphLW4uZ3JpZFswXTphOmF9fXJldHVybnt0b3A6by10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKHRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOmk/MDpyLnNjcm9sbFRvcCgpKSxsZWZ0OnMtdGhpcy5vZmZzZXQuY2xpY2subGVmdC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0Kyh0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6aT8wOnIuc2Nyb2xsTGVmdCgpKX19LF9yZWFycmFuZ2U6ZnVuY3Rpb24oZSx0LG4scil7bj9uWzBdLmFwcGVuZENoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pOnQuaXRlbVswXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLnBsYWNlaG9sZGVyWzBdLHRoaXMuZGlyZWN0aW9uPT0iZG93biI/dC5pdGVtWzBdOnQuaXRlbVswXS5uZXh0U2libGluZyksdGhpcy5jb3VudGVyPXRoaXMuY291bnRlcj8rK3RoaXMuY291bnRlcjoxO3ZhciBpPXRoaXMuY291bnRlcjt0aGlzLl9kZWxheShmdW5jdGlvbigpe2k9PXRoaXMuY291bnRlciYmdGhpcy5yZWZyZXNoUG9zaXRpb25zKCFyKX0pfSxfY2xlYXI6ZnVuY3Rpb24odCxuKXt0aGlzLnJldmVydGluZz0hMTt2YXIgcj1bXTshdGhpcy5fbm9GaW5hbFNvcnQmJnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KCkubGVuZ3RoJiZ0aGlzLnBsYWNlaG9sZGVyLmJlZm9yZSh0aGlzLmN1cnJlbnRJdGVtKSx0aGlzLl9ub0ZpbmFsU29ydD1udWxsO2lmKHRoaXMuaGVscGVyWzBdPT10aGlzLmN1cnJlbnRJdGVtWzBdKXtmb3IodmFyIGkgaW4gdGhpcy5fc3RvcmVkQ1NTKWlmKHRoaXMuX3N0b3JlZENTU1tpXT09ImF1dG8ifHx0aGlzLl9zdG9yZWRDU1NbaV09PSJzdGF0aWMiKXRoaXMuX3N0b3JlZENTU1tpXT0iIjt0aGlzLmN1cnJlbnRJdGVtLmNzcyh0aGlzLl9zdG9yZWRDU1MpLnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZS1oZWxwZXIiKX1lbHNlIHRoaXMuY3VycmVudEl0ZW0uc2hvdygpO3RoaXMuZnJvbU91dHNpZGUmJiFuJiZyLnB1c2goZnVuY3Rpb24oZSl7dGhpcy5fdHJpZ2dlcigicmVjZWl2ZSIsZSx0aGlzLl91aUhhc2godGhpcy5mcm9tT3V0c2lkZSkpfSksKHRoaXMuZnJvbU91dHNpZGV8fHRoaXMuZG9tUG9zaXRpb24ucHJldiE9dGhpcy5jdXJyZW50SXRlbS5wcmV2KCkubm90KCIudWktc29ydGFibGUtaGVscGVyIilbMF18fHRoaXMuZG9tUG9zaXRpb24ucGFyZW50IT10aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpWzBdKSYmIW4mJnIucHVzaChmdW5jdGlvbihlKXt0aGlzLl90cmlnZ2VyKCJ1cGRhdGUiLGUsdGhpcy5fdWlIYXNoKCkpfSksdGhpcyE9PXRoaXMuY3VycmVudENvbnRhaW5lciYmKG58fChyLnB1c2goZnVuY3Rpb24oZSl7dGhpcy5fdHJpZ2dlcigicmVtb3ZlIixlLHRoaXMuX3VpSGFzaCgpKX0pLHIucHVzaChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7ZS5fdHJpZ2dlcigicmVjZWl2ZSIsdCx0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY3VycmVudENvbnRhaW5lcikpLHIucHVzaChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7ZS5fdHJpZ2dlcigidXBkYXRlIix0LHRoaXMuX3VpSGFzaCh0aGlzKSl9fS5jYWxsKHRoaXMsdGhpcy5jdXJyZW50Q29udGFpbmVyKSkpKTtmb3IodmFyIGk9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2k+PTA7aS0tKW58fHIucHVzaChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7ZS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsdCx0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY29udGFpbmVyc1tpXSkpLHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS5vdmVyJiYoci5wdXNoKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtlLl90cmlnZ2VyKCJvdXQiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKX19LmNhbGwodGhpcyx0aGlzLmNvbnRhaW5lcnNbaV0pKSx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3Zlcj0wKTt0aGlzLl9zdG9yZWRDdXJzb3ImJmUoImJvZHkiKS5jc3MoImN1cnNvciIsdGhpcy5fc3RvcmVkQ3Vyc29yKSx0aGlzLl9zdG9yZWRPcGFjaXR5JiZ0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiLHRoaXMuX3N0b3JlZE9wYWNpdHkpLHRoaXMuX3N0b3JlZFpJbmRleCYmdGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiLHRoaXMuX3N0b3JlZFpJbmRleD09ImF1dG8iPyIiOnRoaXMuX3N0b3JlZFpJbmRleCksdGhpcy5kcmFnZ2luZz0hMTtpZih0aGlzLmNhbmNlbEhlbHBlclJlbW92YWwpe2lmKCFuKXt0aGlzLl90cmlnZ2VyKCJiZWZvcmVTdG9wIix0LHRoaXMuX3VpSGFzaCgpKTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKylyW2ldLmNhbGwodGhpcyx0KTt0aGlzLl90cmlnZ2VyKCJzdG9wIix0LHRoaXMuX3VpSGFzaCgpKX1yZXR1cm4gdGhpcy5mcm9tT3V0c2lkZT0hMSwhMX1ufHx0aGlzLl90cmlnZ2VyKCJiZWZvcmVTdG9wIix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSksdGhpcy5oZWxwZXJbMF0hPXRoaXMuY3VycmVudEl0ZW1bMF0mJnRoaXMuaGVscGVyLnJlbW92ZSgpLHRoaXMuaGVscGVyPW51bGw7aWYoIW4pe2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKXJbaV0uY2FsbCh0aGlzLHQpO3RoaXMuX3RyaWdnZXIoInN0b3AiLHQsdGhpcy5fdWlIYXNoKCkpfXJldHVybiB0aGlzLmZyb21PdXRzaWRlPSExLCEwfSxfdHJpZ2dlcjpmdW5jdGlvbigpe2UuV2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk9PT0hMSYmdGhpcy5jYW5jZWwoKX0sX3VpSGFzaDpmdW5jdGlvbih0KXt2YXIgbj10fHx0aGlzO3JldHVybntoZWxwZXI6bi5oZWxwZXIscGxhY2Vob2xkZXI6bi5wbGFjZWhvbGRlcnx8ZShbXSkscG9zaXRpb246bi5wb3NpdGlvbixvcmlnaW5hbFBvc2l0aW9uOm4ub3JpZ2luYWxQb3NpdGlvbixvZmZzZXQ6bi5wb3NpdGlvbkFicyxpdGVtOm4uY3VycmVudEl0ZW0sc2VuZGVyOnQ/dC5lbGVtZW50Om51bGx9fX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQudmFsKCk7ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fcmVmcmVzaCgpLHQhPT10aGlzLmVsZW1lbnQudmFsKCkmJnRoaXMuX3RyaWdnZXIoImNoYW5nZSIpfX1lLndpZGdldCgidWkuc3Bpbm5lciIse3ZlcnNpb246IjEuOS4wIixkZWZhdWx0RWxlbWVudDoiPGlucHV0PiIsd2lkZ2V0RXZlbnRQcmVmaXg6InNwaW4iLG9wdGlvbnM6e2N1bHR1cmU6bnVsbCxpY29uczp7ZG93bjoidWktaWNvbi10cmlhbmdsZS0xLXMiLHVwOiJ1aS1pY29uLXRyaWFuZ2xlLTEtbiJ9LGluY3JlbWVudGFsOiEwLG1heDpudWxsLG1pbjpudWxsLG51bWJlckZvcm1hdDpudWxsLHBhZ2U6MTAsc3RlcDoxLGNoYW5nZTpudWxsLHNwaW46bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX3NldE9wdGlvbigibWF4Iix0aGlzLm9wdGlvbnMubWF4KSx0aGlzLl9zZXRPcHRpb24oIm1pbiIsdGhpcy5vcHRpb25zLm1pbiksdGhpcy5fc2V0T3B0aW9uKCJzdGVwIix0aGlzLm9wdGlvbnMuc3RlcCksdGhpcy5fdmFsdWUodGhpcy5lbGVtZW50LnZhbCgpLCEwKSx0aGlzLl9kcmF3KCksdGhpcy5fb24odGhpcy5fZXZlbnRzKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5fb24odGhpcy53aW5kb3cse2JlZm9yZXVubG9hZDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKX19KX0sX2dldENyZWF0ZU9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgdD17fSxuPXRoaXMuZWxlbWVudDtyZXR1cm4gZS5lYWNoKFsibWluIiwibWF4Iiwic3RlcCJdLGZ1bmN0aW9uKGUscil7dmFyIGk9bi5hdHRyKHIpO2khPT11bmRlZmluZWQmJmkubGVuZ3RoJiYodFtyXT1pKX0pLHR9LF9ldmVudHM6e2tleWRvd246ZnVuY3Rpb24oZSl7dGhpcy5fc3RhcnQoZSkmJnRoaXMuX2tleWRvd24oZSkmJmUucHJldmVudERlZmF1bHQoKX0sa2V5dXA6Il9zdG9wIixmb2N1czpmdW5jdGlvbigpe3RoaXMudWlTcGlubmVyLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0aGlzLnByZXZpb3VzPXRoaXMuZWxlbWVudC52YWwoKX0sYmx1cjpmdW5jdGlvbihlKXtpZih0aGlzLmNhbmNlbEJsdXIpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXI7cmV0dXJufXRoaXMuX3JlZnJlc2goKSx0aGlzLnVpU3Bpbm5lci5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdGhpcy5wcmV2aW91cyE9PXRoaXMuZWxlbWVudC52YWwoKSYmdGhpcy5fdHJpZ2dlcigiY2hhbmdlIixlKX0sbW91c2V3aGVlbDpmdW5jdGlvbihlLHQpe2lmKCF0KXJldHVybjtpZighdGhpcy5zcGlubmluZyYmIXRoaXMuX3N0YXJ0KGUpKXJldHVybiExO3RoaXMuX3NwaW4oKHQ+MD8xOi0xKSp0aGlzLm9wdGlvbnMuc3RlcCxlKSxjbGVhclRpbWVvdXQodGhpcy5tb3VzZXdoZWVsVGltZXIpLHRoaXMubW91c2V3aGVlbFRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5zcGlubmluZyYmdGhpcy5fc3RvcChlKX0sMTAwKSxlLnByZXZlbnREZWZhdWx0KCl9LCJtb3VzZWRvd24gLnVpLXNwaW5uZXItYnV0dG9uIjpmdW5jdGlvbih0KXtmdW5jdGlvbiByKCl7dmFyIGU9dGhpcy5lbGVtZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50O2V8fCh0aGlzLmVsZW1lbnQuZm9jdXMoKSx0aGlzLnByZXZpb3VzPW4sdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPW59KSl9dmFyIG47bj10aGlzLmVsZW1lbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQ/dGhpcy5wcmV2aW91czp0aGlzLmVsZW1lbnQudmFsKCksdC5wcmV2ZW50RGVmYXVsdCgpLHIuY2FsbCh0aGlzKSx0aGlzLmNhbmNlbEJsdXI9ITAsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5jYW5jZWxCbHVyLHIuY2FsbCh0aGlzKX0pO2lmKHRoaXMuX3N0YXJ0KHQpPT09ITEpcmV0dXJuO3RoaXMuX3JlcGVhdChudWxsLGUodC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3Bpbm5lci11cCIpPzE6LTEsdCl9LCJtb3VzZXVwIC51aS1zcGlubmVyLWJ1dHRvbiI6Il9zdG9wIiwibW91c2VlbnRlciAudWktc3Bpbm5lci1idXR0b24iOmZ1bmN0aW9uKHQpe2lmKCFlKHQuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpKXJldHVybjtpZih0aGlzLl9zdGFydCh0KT09PSExKXJldHVybiExO3RoaXMuX3JlcGVhdChudWxsLGUodC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3Bpbm5lci11cCIpPzE6LTEsdCl9LCJtb3VzZWxlYXZlIC51aS1zcGlubmVyLWJ1dHRvbiI6Il9zdG9wIn0sX2RyYXc6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnVpU3Bpbm5lcj10aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNwaW5uZXItaW5wdXQiKS5hdHRyKCJhdXRvY29tcGxldGUiLCJvZmYiKS53cmFwKHRoaXMuX3VpU3Bpbm5lckh0bWwoKSkucGFyZW50KCkuYXBwZW5kKHRoaXMuX2J1dHRvbkh0bWwoKSk7dGhpcy5faG92ZXJhYmxlKGUpLHRoaXMuZWxlbWVudC5hdHRyKCJyb2xlIiwic3BpbmJ1dHRvbiIpLHRoaXMuYnV0dG9ucz1lLmZpbmQoIi51aS1zcGlubmVyLWJ1dHRvbiIpLmF0dHIoInRhYkluZGV4IiwtMSkuYnV0dG9uKCkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwiKSx0aGlzLmJ1dHRvbnMuaGVpZ2h0KCk+TWF0aC5jZWlsKGUuaGVpZ2h0KCkqLjUpJiZlLmhlaWdodCgpPjAmJmUuaGVpZ2h0KGUuaGVpZ2h0KCkpLHRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5kaXNhYmxlKCl9LF9rZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyPWUudWkua2V5Q29kZTtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIHIuVVA6cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLDEsdCksITA7Y2FzZSByLkRPV046cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLC0xLHQpLCEwO2Nhc2Ugci5QQUdFX1VQOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCxuLnBhZ2UsdCksITA7Y2FzZSByLlBBR0VfRE9XTjpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsLW4ucGFnZSx0KSwhMH1yZXR1cm4hMX0sX3VpU3Bpbm5lckh0bWw6ZnVuY3Rpb24oKXtyZXR1cm4iPHNwYW4gY2xhc3M9J3VpLXNwaW5uZXIgdWktc3RhdGUtZGVmYXVsdCB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCc+PC9zcGFuPiJ9LF9idXR0b25IdG1sOmZ1bmN0aW9uKCl7cmV0dXJuIjxhIGNsYXNzPSd1aS1zcGlubmVyLWJ1dHRvbiB1aS1zcGlubmVyLXVwIHVpLWNvcm5lci10cic+PHNwYW4gY2xhc3M9J3VpLWljb24gIit0aGlzLm9wdGlvbnMuaWNvbnMudXArIic+JiM5NjUwOzwvc3Bhbj4iKyI8L2E+IisiPGEgY2xhc3M9J3VpLXNwaW5uZXItYnV0dG9uIHVpLXNwaW5uZXItZG93biB1aS1jb3JuZXItYnInPiIrIjxzcGFuIGNsYXNzPSd1aS1pY29uICIrdGhpcy5vcHRpb25zLmljb25zLmRvd24rIic+JiM5NjYwOzwvc3Bhbj4iKyI8L2E+In0sX3N0YXJ0OmZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLnNwaW5uaW5nJiZ0aGlzLl90cmlnZ2VyKCJzdGFydCIsZSk9PT0hMT8hMToodGhpcy5jb3VudGVyfHwodGhpcy5jb3VudGVyPTEpLHRoaXMuc3Bpbm5pbmc9ITAsITApfSxfcmVwZWF0OmZ1bmN0aW9uKGUsdCxuKXtlPWV8fDUwMCxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX3JlcGVhdCg0MCx0LG4pfSxlKSx0aGlzLl9zcGluKHQqdGhpcy5vcHRpb25zLnN0ZXAsbil9LF9zcGluOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy52YWx1ZSgpfHwwO3RoaXMuY291bnRlcnx8KHRoaXMuY291bnRlcj0xKSxuPXRoaXMuX2FkanVzdFZhbHVlKG4rZSp0aGlzLl9pbmNyZW1lbnQodGhpcy5jb3VudGVyKSk7aWYoIXRoaXMuc3Bpbm5pbmd8fHRoaXMuX3RyaWdnZXIoInNwaW4iLHQse3ZhbHVlOm59KSE9PSExKXRoaXMuX3ZhbHVlKG4pLHRoaXMuY291bnRlcisrfSxfaW5jcmVtZW50OmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucy5pbmNyZW1lbnRhbDtyZXR1cm4gbj9lLmlzRnVuY3Rpb24obik/bih0KTpNYXRoLmZsb29yKHQqdCp0LzVlNC10KnQvNTAwKzE3KnQvMjAwKzEpOjF9LF9wcmVjaXNpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcmVjaXNpb25PZih0aGlzLm9wdGlvbnMuc3RlcCk7cmV0dXJuIHRoaXMub3B0aW9ucy5taW4hPT1udWxsJiYoZT1NYXRoLm1heChlLHRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5taW4pKSksZX0sX3ByZWNpc2lvbk9mOmZ1bmN0aW9uKGUpe3ZhciB0PWUudG9TdHJpbmcoKSxuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPT09LTE/MDp0Lmxlbmd0aC1uLTF9LF9hZGp1c3RWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcy5vcHRpb25zO3JldHVybiB0PXIubWluIT09bnVsbD9yLm1pbjowLG49ZS10LG49TWF0aC5yb3VuZChuL3Iuc3RlcCkqci5zdGVwLGU9dCtuLGU9cGFyc2VGbG9hdChlLnRvRml4ZWQodGhpcy5fcHJlY2lzaW9uKCkpKSxyLm1heCE9PW51bGwmJmU+ci5tYXg/ci5tYXg6ci5taW4hPT1udWxsJiZlPHIubWluP3IubWluOmV9LF9zdG9wOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLnNwaW5uaW5nKXJldHVybjtjbGVhclRpbWVvdXQodGhpcy50aW1lciksY2xlYXJUaW1lb3V0KHRoaXMubW91c2V3aGVlbFRpbWVyKSx0aGlzLmNvdW50ZXI9MCx0aGlzLnNwaW5uaW5nPSExLHRoaXMuX3RyaWdnZXIoInN0b3AiLGUpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7aWYoZT09PSJjdWx0dXJlInx8ZT09PSJudW1iZXJGb3JtYXQiKXt2YXIgbj10aGlzLl9wYXJzZSh0aGlzLmVsZW1lbnQudmFsKCkpO3RoaXMub3B0aW9uc1tlXT10LHRoaXMuZWxlbWVudC52YWwodGhpcy5fZm9ybWF0KG4pKTtyZXR1cm59KGU9PT0ibWF4Inx8ZT09PSJtaW4ifHxlPT09InN0ZXAiKSYmdHlwZW9mIHQ9PSJzdHJpbmciJiYodD10aGlzLl9wYXJzZSh0KSksdGhpcy5fc3VwZXIoZSx0KSxlPT09ImRpc2FibGVkIiYmKHQ/KHRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsITApLHRoaXMuYnV0dG9ucy5idXR0b24oImRpc2FibGUiKSk6KHRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsITEpLHRoaXMuYnV0dG9ucy5idXR0b24oImVuYWJsZSIpKSl9LF9zZXRPcHRpb25zOnQoZnVuY3Rpb24oZSl7dGhpcy5fc3VwZXIoZSksdGhpcy5fdmFsdWUodGhpcy5lbGVtZW50LnZhbCgpKX0pLF9wYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciJiZlIT09IiImJihlPXdpbmRvdy5HbG9iYWxpemUmJnRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQ/R2xvYmFsaXplLnBhcnNlRmxvYXQoZSwxMCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6K2UpLGU9PT0iInx8aXNOYU4oZSk/bnVsbDplfSxfZm9ybWF0OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09IiI/IiI6d2luZG93Lkdsb2JhbGl6ZSYmdGhpcy5vcHRpb25zLm51bWJlckZvcm1hdD9HbG9iYWxpemUuZm9ybWF0KGUsdGhpcy5vcHRpb25zLm51bWJlckZvcm1hdCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6ZX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYXR0cih7ImFyaWEtdmFsdWVtaW4iOnRoaXMub3B0aW9ucy5taW4sImFyaWEtdmFsdWVtYXgiOnRoaXMub3B0aW9ucy5tYXgsImFyaWEtdmFsdWVub3ciOnRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSl9KX0sX3ZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG47ZSE9PSIiJiYobj10aGlzLl9wYXJzZShlKSxuIT09bnVsbCYmKHR8fChuPXRoaXMuX2FkanVzdFZhbHVlKG4pKSxlPXRoaXMuX2Zvcm1hdChuKSkpLHRoaXMuZWxlbWVudC52YWwoZSksdGhpcy5fcmVmcmVzaCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc3Bpbm5lci1pbnB1dCIpLnByb3AoImRpc2FibGVkIiwhMSkucmVtb3ZlQXR0cigiYXV0b2NvbXBsZXRlIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVtaW4iKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbWF4IikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW5vdyIpLHRoaXMudWlTcGlubmVyLnJlcGxhY2VXaXRoKHRoaXMuZWxlbWVudCl9LHN0ZXBVcDp0KGZ1bmN0aW9uKGUpe3RoaXMuX3N0ZXBVcChlKX0pLF9zdGVwVXA6ZnVuY3Rpb24oZSl7dGhpcy5fc3BpbigoZXx8MSkqdGhpcy5vcHRpb25zLnN0ZXApfSxzdGVwRG93bjp0KGZ1bmN0aW9uKGUpe3RoaXMuX3N0ZXBEb3duKGUpfSksX3N0ZXBEb3duOmZ1bmN0aW9uKGUpe3RoaXMuX3NwaW4oKGV8fDEpKi10aGlzLm9wdGlvbnMuc3RlcCl9LHBhZ2VVcDp0KGZ1bmN0aW9uKGUpe3RoaXMuX3N0ZXBVcCgoZXx8MSkqdGhpcy5vcHRpb25zLnBhZ2UpfSkscGFnZURvd246dChmdW5jdGlvbihlKXt0aGlzLl9zdGVwRG93bigoZXx8MSkqdGhpcy5vcHRpb25zLnBhZ2UpfSksdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSk7dCh0aGlzLl92YWx1ZSkuY2FsbCh0aGlzLGUpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51aVNwaW5uZXJ9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXtyZXR1cm4rK259ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZT1lLmNsb25lTm9kZSghMSksZS5oYXNoLmxlbmd0aD4xJiZlLmhyZWYucmVwbGFjZShyLCIiKT09PWxvY2F0aW9uLmhyZWYucmVwbGFjZShyLCIiKX12YXIgbj0wLHI9LyMuKiQvO2Uud2lkZ2V0KCJ1aS50YWJzIix7dmVyc2lvbjoiMS45LjAiLGRlbGF5OjMwMCxvcHRpb25zOnthY3RpdmU6bnVsbCxjb2xsYXBzaWJsZTohMSxldmVudDoiY2xpY2siLGhlaWdodFN0eWxlOiJjb250ZW50IixoaWRlOm51bGwsc2hvdzpudWxsLGFjdGl2YXRlOm51bGwsYmVmb3JlQWN0aXZhdGU6bnVsbCxiZWZvcmVMb2FkOm51bGwsbG9hZDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzLHI9dGhpcy5vcHRpb25zLGk9ci5hY3RpdmU7dGhpcy5ydW5uaW5nPSExLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktdGFicyB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLnRvZ2dsZUNsYXNzKCJ1aS10YWJzLWNvbGxhcHNpYmxlIixyLmNvbGxhcHNpYmxlKS5kZWxlZ2F0ZSgiLnVpLXRhYnMtbmF2ID4gbGkiLCJtb3VzZWRvd24iK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24odCl7ZSh0aGlzKS5pcygiLnVpLXN0YXRlLWRpc2FibGVkIikmJnQucHJldmVudERlZmF1bHQoKX0pLmRlbGVnYXRlKCIudWktdGFicy1hbmNob3IiLCJmb2N1cyIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2UodGhpcykuY2xvc2VzdCgibGkiKS5pcygiLnVpLXN0YXRlLWRpc2FibGVkIikmJnRoaXMuYmx1cigpfSksdGhpcy5fcHJvY2Vzc1RhYnMoKTtpZihpPT09bnVsbCl7bG9jYXRpb24uaGFzaCYmdGhpcy5hbmNob3JzLmVhY2goZnVuY3Rpb24oZSx0KXtpZih0Lmhhc2g9PT1sb2NhdGlvbi5oYXNoKXJldHVybiBpPWUsITF9KSxpPT09bnVsbCYmKGk9dGhpcy50YWJzLmZpbHRlcigiLnVpLXRhYnMtYWN0aXZlIikuaW5kZXgoKSk7aWYoaT09PW51bGx8fGk9PT0tMSlpPXRoaXMudGFicy5sZW5ndGg/MDohMX1pIT09ITEmJihpPXRoaXMudGFicy5pbmRleCh0aGlzLnRhYnMuZXEoaSkpLGk9PT0tMSYmKGk9ci5jb2xsYXBzaWJsZT8hMTowKSksci5hY3RpdmU9aSwhci5jb2xsYXBzaWJsZSYmci5hY3RpdmU9PT0hMSYmdGhpcy5hbmNob3JzLmxlbmd0aCYmKHIuYWN0aXZlPTApLGUuaXNBcnJheShyLmRpc2FibGVkKSYmKHIuZGlzYWJsZWQ9ZS51bmlxdWUoci5kaXNhYmxlZC5jb25jYXQoZS5tYXAodGhpcy50YWJzLmZpbHRlcigiLnVpLXN0YXRlLWRpc2FibGVkIiksZnVuY3Rpb24oZSl7cmV0dXJuIG4udGFicy5pbmRleChlKX0pKSkuc29ydCgpKSx0aGlzLm9wdGlvbnMuYWN0aXZlIT09ITEmJnRoaXMuYW5jaG9ycy5sZW5ndGg/dGhpcy5hY3RpdmU9dGhpcy5fZmluZEFjdGl2ZSh0aGlzLm9wdGlvbnMuYWN0aXZlKTp0aGlzLmFjdGl2ZT1lKCksdGhpcy5fcmVmcmVzaCgpLHRoaXMuYWN0aXZlLmxlbmd0aCYmdGhpcy5sb2FkKHIuYWN0aXZlKX0sX2dldENyZWF0ZUV2ZW50RGF0YTpmdW5jdGlvbigpe3JldHVybnt0YWI6dGhpcy5hY3RpdmUscGFuZWw6dGhpcy5hY3RpdmUubGVuZ3RoP3RoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKTplKCl9fSxfdGFiS2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCkuY2xvc2VzdCgibGkiKSxyPXRoaXMudGFicy5pbmRleChuKSxpPSEwO2lmKHRoaXMuX2hhbmRsZVBhZ2VOYXYodCkpcmV0dXJuO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLlJJR0hUOmNhc2UgZS51aS5rZXlDb2RlLkRPV046cisrO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlVQOmNhc2UgZS51aS5rZXlDb2RlLkxFRlQ6aT0hMSxyLS07YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5EOnI9dGhpcy5hbmNob3JzLmxlbmd0aC0xO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6cj0wO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlNQQUNFOnQucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSx0aGlzLl9hY3RpdmF0ZShyKTtyZXR1cm47Y2FzZSBlLnVpLmtleUNvZGUuRU5URVI6dC5wcmV2ZW50RGVmYXVsdCgpLGNsZWFyVGltZW91dCh0aGlzLmFjdGl2YXRpbmcpLHRoaXMuX2FjdGl2YXRlKHI9PT10aGlzLm9wdGlvbnMuYWN0aXZlPyExOnIpO3JldHVybjtkZWZhdWx0OnJldHVybn10LnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZykscj10aGlzLl9mb2N1c05leHRUYWIocixpKSx0LmN0cmxLZXl8fChuLmF0dHIoImFyaWEtc2VsZWN0ZWQiLCJmYWxzZSIpLHRoaXMudGFicy5lcShyKS5hdHRyKCJhcmlhLXNlbGVjdGVkIiwidHJ1ZSIpLHRoaXMuYWN0aXZhdGluZz10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMub3B0aW9uKCJhY3RpdmUiLHIpfSx0aGlzLmRlbGF5KSl9LF9wYW5lbEtleWRvd246ZnVuY3Rpb24odCl7aWYodGhpcy5faGFuZGxlUGFnZU5hdih0KSlyZXR1cm47dC5jdHJsS2V5JiZ0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuVVAmJih0LnByZXZlbnREZWZhdWx0KCksdGhpcy5hY3RpdmUuZm9jdXMoKSl9LF9oYW5kbGVQYWdlTmF2OmZ1bmN0aW9uKHQpe2lmKHQuYWx0S2V5JiZ0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuUEFHRV9VUClyZXR1cm4gdGhpcy5fYWN0aXZhdGUodGhpcy5fZm9jdXNOZXh0VGFiKHRoaXMub3B0aW9ucy5hY3RpdmUtMSwhMSkpLCEwO2lmKHQuYWx0S2V5JiZ0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuUEFHRV9ET1dOKXJldHVybiB0aGlzLl9hY3RpdmF0ZSh0aGlzLl9mb2N1c05leHRUYWIodGhpcy5vcHRpb25zLmFjdGl2ZSsxLCEwKSksITB9LF9maW5kTmV4dFRhYjpmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGkoKXtyZXR1cm4gdD5yJiYodD0wKSx0PDAmJih0PXIpLHR9dmFyIHI9dGhpcy50YWJzLmxlbmd0aC0xO3doaWxlKGUuaW5BcnJheShpKCksdGhpcy5vcHRpb25zLmRpc2FibGVkKSE9PS0xKXQ9bj90KzE6dC0xO3JldHVybiB0fSxfZm9jdXNOZXh0VGFiOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9dGhpcy5fZmluZE5leHRUYWIoZSx0KSx0aGlzLnRhYnMuZXEoZSkuZm9jdXMoKSxlfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7aWYoZT09PSJhY3RpdmUiKXt0aGlzLl9hY3RpdmF0ZSh0KTtyZXR1cm59aWYoZT09PSJkaXNhYmxlZCIpe3RoaXMuX3NldHVwRGlzYWJsZWQodCk7cmV0dXJufXRoaXMuX3N1cGVyKGUsdCksZT09PSJjb2xsYXBzaWJsZSImJih0aGlzLmVsZW1lbnQudG9nZ2xlQ2xhc3MoInVpLXRhYnMtY29sbGFwc2libGUiLHQpLCF0JiZ0aGlzLm9wdGlvbnMuYWN0aXZlPT09ITEmJnRoaXMuX2FjdGl2YXRlKDApKSxlPT09ImV2ZW50IiYmdGhpcy5fc2V0dXBFdmVudHModCksZT09PSJoZWlnaHRTdHlsZSImJnRoaXMuX3NldHVwSGVpZ2h0U3R5bGUodCl9LF90YWJJZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5hdHRyKCJhcmlhLWNvbnRyb2xzIil8fCJ1aS10YWJzLSIraSgpfSxfc2FuaXRpemVTZWxlY3RvcjpmdW5jdGlvbihlKXtyZXR1cm4gZT9lLnJlcGxhY2UoL1shIiQlJicoKSorLC5cLzo7PD0+P0BcW1xdXF5ge3x9fl0vZywiXFwkJiIpOiIifSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQsbj10aGlzLm9wdGlvbnMscj10aGlzLnRhYmxpc3QuY2hpbGRyZW4oIjpoYXMoYVtocmVmXSkiKTtuLmRpc2FibGVkPWUubWFwKHIuZmlsdGVyKCIudWktc3RhdGUtZGlzYWJsZWQiKSxmdW5jdGlvbihlKXtyZXR1cm4gci5pbmRleChlKX0pLHRoaXMuX3Byb2Nlc3NUYWJzKCksbi5hY3RpdmU9PT0hMXx8IXRoaXMuYW5jaG9ycy5sZW5ndGg/KG4uYWN0aXZlPSExLHRoaXMuYWN0aXZlPWUoKSk6dGhpcy5hY3RpdmUubGVuZ3RoJiYhZS5jb250YWlucyh0aGlzLnRhYmxpc3RbMF0sdGhpcy5hY3RpdmVbMF0pP3RoaXMudGFicy5sZW5ndGg9PT1uLmRpc2FibGVkLmxlbmd0aD8obi5hY3RpdmU9ITEsdGhpcy5hY3RpdmU9ZSgpKTp0aGlzLl9hY3RpdmF0ZSh0aGlzLl9maW5kTmV4dFRhYihNYXRoLm1heCgwLG4uYWN0aXZlLTEpLCExKSk6bi5hY3RpdmU9dGhpcy50YWJzLmluZGV4KHRoaXMuYWN0aXZlKSx0aGlzLl9yZWZyZXNoKCl9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5fc2V0dXBEaXNhYmxlZCh0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLHRoaXMuX3NldHVwRXZlbnRzKHRoaXMub3B0aW9ucy5ldmVudCksdGhpcy5fc2V0dXBIZWlnaHRTdHlsZSh0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUpLHRoaXMudGFicy5ub3QodGhpcy5hY3RpdmUpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLHRhYkluZGV4Oi0xfSksdGhpcy5wYW5lbHMubm90KHRoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKSkuaGlkZSgpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLCJhcmlhLWhpZGRlbiI6InRydWUifSksdGhpcy5hY3RpdmUubGVuZ3RoPyh0aGlzLmFjdGl2ZS5hZGRDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIikuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJ0cnVlIix0YWJJbmRleDowfSksdGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpLnNob3coKS5hdHRyKHsiYXJpYS1leHBhbmRlZCI6InRydWUiLCJhcmlhLWhpZGRlbiI6ImZhbHNlIn0pKTp0aGlzLnRhYnMuZXEoMCkuYXR0cigidGFiSW5kZXgiLDApfSxfcHJvY2Vzc1RhYnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMudGFibGlzdD10aGlzLl9nZXRMaXN0KCkuYWRkQ2xhc3MoInVpLXRhYnMtbmF2IHVpLWhlbHBlci1yZXNldCB1aS1oZWxwZXItY2xlYXJmaXggdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIikuYXR0cigicm9sZSIsInRhYmxpc3QiKSx0aGlzLnRhYnM9dGhpcy50YWJsaXN0LmZpbmQoIj4gbGk6aGFzKGFbaHJlZl0pIikuYWRkQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLXRvcCIpLmF0dHIoe3JvbGU6InRhYiIsdGFiSW5kZXg6LTF9KSx0aGlzLmFuY2hvcnM9dGhpcy50YWJzLm1hcChmdW5jdGlvbigpe3JldHVybiBlKCJhIix0aGlzKVswXX0pLmFkZENsYXNzKCJ1aS10YWJzLWFuY2hvciIpLmF0dHIoe3JvbGU6InByZXNlbnRhdGlvbiIsdGFiSW5kZXg6LTF9KSx0aGlzLnBhbmVscz1lKCksdGhpcy5hbmNob3JzLmVhY2goZnVuY3Rpb24obixyKXt2YXIgaSxvLHUsYT1lKHIpLnVuaXF1ZUlkKCkuYXR0cigiaWQiKSxmPWUocikuY2xvc2VzdCgibGkiKSxsPWYuYXR0cigiYXJpYS1jb250cm9scyIpO3Mocik/KGk9ci5oYXNoLG89dC5lbGVtZW50LmZpbmQodC5fc2FuaXRpemVTZWxlY3RvcihpKSkpOih1PXQuX3RhYklkKGYpLGk9IiMiK3Usbz10LmVsZW1lbnQuZmluZChpKSxvLmxlbmd0aHx8KG89dC5fY3JlYXRlUGFuZWwodSksby5pbnNlcnRBZnRlcih0LnBhbmVsc1tuLTFdfHx0LnRhYmxpc3QpKSxvLmF0dHIoImFyaWEtbGl2ZSIsInBvbGl0ZSIpKSxvLmxlbmd0aCYmKHQucGFuZWxzPXQucGFuZWxzLmFkZChvKSksbCYmZi5kYXRhKCJ1aS10YWJzLWFyaWEtY29udHJvbHMiLGwpLGYuYXR0cih7ImFyaWEtY29udHJvbHMiOmkuc3Vic3RyaW5nKDEpLCJhcmlhLWxhYmVsbGVkYnkiOmF9KSxvLmF0dHIoImFyaWEtbGFiZWxsZWRieSIsYSl9KSx0aGlzLnBhbmVscy5hZGRDbGFzcygidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuYXR0cigicm9sZSIsInRhYnBhbmVsIil9LF9nZXRMaXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5maW5kKCJvbCx1bCIpLmVxKDApfSxfY3JlYXRlUGFuZWw6ZnVuY3Rpb24odCl7cmV0dXJuIGUoIjxkaXY+IikuYXR0cigiaWQiLHQpLmFkZENsYXNzKCJ1aS10YWJzLXBhbmVsIHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20iKS5kYXRhKCJ1aS10YWJzLWRlc3Ryb3kiLCEwKX0sX3NldHVwRGlzYWJsZWQ6ZnVuY3Rpb24odCl7ZS5pc0FycmF5KHQpJiYodC5sZW5ndGg/dC5sZW5ndGg9PT10aGlzLmFuY2hvcnMubGVuZ3RoJiYodD0hMCk6dD0hMSk7Zm9yKHZhciBuPTAscjtyPXRoaXMudGFic1tuXTtuKyspdD09PSEwfHxlLmluQXJyYXkobix0KSE9PS0xP2UocikuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsInRydWUiKTplKHIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKTt0aGlzLm9wdGlvbnMuZGlzYWJsZWQ9dH0sX3NldHVwRXZlbnRzOmZ1bmN0aW9uKHQpe3ZhciBuPXtjbGljazpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9fTt0JiZlLmVhY2godC5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7blt0XT0iX2V2ZW50SGFuZGxlciJ9KSx0aGlzLl9vZmYodGhpcy5hbmNob3JzLmFkZCh0aGlzLnRhYnMpLmFkZCh0aGlzLnBhbmVscykpLHRoaXMuX29uKHRoaXMuYW5jaG9ycyxuKSx0aGlzLl9vbih0aGlzLnRhYnMse2tleWRvd246Il90YWJLZXlkb3duIn0pLHRoaXMuX29uKHRoaXMucGFuZWxzLHtrZXlkb3duOiJfcGFuZWxLZXlkb3duIn0pLHRoaXMuX2ZvY3VzYWJsZSh0aGlzLnRhYnMpLHRoaXMuX2hvdmVyYWJsZSh0aGlzLnRhYnMpfSxfc2V0dXBIZWlnaHRTdHlsZTpmdW5jdGlvbih0KXt2YXIgbixyLGk9dGhpcy5lbGVtZW50LnBhcmVudCgpO3Q9PT0iZmlsbCI/KGUuc3VwcG9ydC5taW5IZWlnaHR8fChyPWkuY3NzKCJvdmVyZmxvdyIpLGkuY3NzKCJvdmVyZmxvdyIsImhpZGRlbiIpKSxuPWkuaGVpZ2h0KCksdGhpcy5lbGVtZW50LnNpYmxpbmdzKCI6dmlzaWJsZSIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLHI9dC5jc3MoInBvc2l0aW9uIik7aWYocj09PSJhYnNvbHV0ZSJ8fHI9PT0iZml4ZWQiKXJldHVybjtuLT10Lm91dGVySGVpZ2h0KCEwKX0pLHImJmkuY3NzKCJvdmVyZmxvdyIsciksdGhpcy5lbGVtZW50LmNoaWxkcmVuKCkubm90KHRoaXMucGFuZWxzKS5lYWNoKGZ1bmN0aW9uKCl7bi09ZSh0aGlzKS5vdXRlckhlaWdodCghMCl9KSx0aGlzLnBhbmVscy5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5oZWlnaHQoTWF0aC5tYXgoMCxuLWUodGhpcykuaW5uZXJIZWlnaHQoKStlKHRoaXMpLmhlaWdodCgpKSl9KS5jc3MoIm92ZXJmbG93IiwiYXV0byIpKTp0PT09ImF1dG8iJiYobj0wLHRoaXMucGFuZWxzLmVhY2goZnVuY3Rpb24oKXtuPU1hdGgubWF4KG4sZSh0aGlzKS5oZWlnaHQoIiIpLmhlaWdodCgpKX0pLmhlaWdodChuKSl9LF9ldmVudEhhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zLHI9dGhpcy5hY3RpdmUsaT1lKHQuY3VycmVudFRhcmdldCkscz1pLmNsb3Nlc3QoImxpIiksbz1zWzBdPT09clswXSx1PW8mJm4uY29sbGFwc2libGUsYT11P2UoKTp0aGlzLl9nZXRQYW5lbEZvclRhYihzKSxmPXIubGVuZ3RoP3RoaXMuX2dldFBhbmVsRm9yVGFiKHIpOmUoKSxsPXtvbGRUYWI6cixvbGRQYW5lbDpmLG5ld1RhYjp1P2UoKTpzLG5ld1BhbmVsOmF9O3QucHJldmVudERlZmF1bHQoKTtpZihzLmhhc0NsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpfHxzLmhhc0NsYXNzKCJ1aS10YWJzLWxvYWRpbmciKXx8dGhpcy5ydW5uaW5nfHxvJiYhbi5jb2xsYXBzaWJsZXx8dGhpcy5fdHJpZ2dlcigiYmVmb3JlQWN0aXZhdGUiLHQsbCk9PT0hMSlyZXR1cm47bi5hY3RpdmU9dT8hMTp0aGlzLnRhYnMuaW5kZXgocyksdGhpcy5hY3RpdmU9bz9lKCk6cyx0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKSwhZi5sZW5ndGgmJiFhLmxlbmd0aCYmZS5lcnJvcigialF1ZXJ5IFVJIFRhYnM6IE1pc21hdGNoaW5nIGZyYWdtZW50IGlkZW50aWZpZXIuIiksYS5sZW5ndGgmJnRoaXMubG9hZCh0aGlzLnRhYnMuaW5kZXgocyksdCksdGhpcy5fdG9nZ2xlKHQsbCl9LF90b2dnbGU6ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBvKCl7ci5ydW5uaW5nPSExLHIuX3RyaWdnZXIoImFjdGl2YXRlIix0LG4pfWZ1bmN0aW9uIHUoKXtuLm5ld1RhYi5jbG9zZXN0KCJsaSIpLmFkZENsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKSxpLmxlbmd0aCYmci5vcHRpb25zLnNob3c/ci5fc2hvdyhpLHIub3B0aW9ucy5zaG93LG8pOihpLnNob3coKSxvKCkpfXZhciByPXRoaXMsaT1uLm5ld1BhbmVsLHM9bi5vbGRQYW5lbDt0aGlzLnJ1bm5pbmc9ITAscy5sZW5ndGgmJnRoaXMub3B0aW9ucy5oaWRlP3RoaXMuX2hpZGUocyx0aGlzLm9wdGlvbnMuaGlkZSxmdW5jdGlvbigpe24ub2xkVGFiLmNsb3Nlc3QoImxpIikucmVtb3ZlQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLHUoKX0pOihuLm9sZFRhYi5jbG9zZXN0KCJsaSIpLnJlbW92ZUNsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKSxzLmhpZGUoKSx1KCkpLHMuYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJmYWxzZSIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxuLm9sZFRhYi5hdHRyKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSxpLmxlbmd0aCYmcy5sZW5ndGg/bi5vbGRUYWIuYXR0cigidGFiSW5kZXgiLC0xKTppLmxlbmd0aCYmdGhpcy50YWJzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmF0dHIoInRhYkluZGV4Iik9PT0wfSkuYXR0cigidGFiSW5kZXgiLC0xKSxpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsImFyaWEtaGlkZGVuIjoiZmFsc2UifSksbi5uZXdUYWIuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJ0cnVlIix0YWJJbmRleDowfSl9LF9hY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgbixyPXRoaXMuX2ZpbmRBY3RpdmUodCk7aWYoclswXT09PXRoaXMuYWN0aXZlWzBdKXJldHVybjtyLmxlbmd0aHx8KHI9dGhpcy5hY3RpdmUpLG49ci5maW5kKCIudWktdGFicy1hbmNob3IiKVswXSx0aGlzLl9ldmVudEhhbmRsZXIoe3RhcmdldDpuLGN1cnJlbnRUYXJnZXQ6bixwcmV2ZW50RGVmYXVsdDplLm5vb3B9KX0sX2ZpbmRBY3RpdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT0hMT9lKCk6dGhpcy50YWJzLmVxKHQpfSxfZ2V0SW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9dGhpcy5hbmNob3JzLmluZGV4KHRoaXMuYW5jaG9ycy5maWx0ZXIoIltocmVmJD0nIitlKyInXSIpKSksZX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXRhYnMgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwgdWktdGFicy1jb2xsYXBzaWJsZSIpLHRoaXMudGFibGlzdC5yZW1vdmVDbGFzcygidWktdGFicy1uYXYgdWktaGVscGVyLXJlc2V0IHVpLWhlbHBlci1jbGVhcmZpeCB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1hbGwiKS5yZW1vdmVBdHRyKCJyb2xlIiksdGhpcy5hbmNob3JzLnJlbW92ZUNsYXNzKCJ1aS10YWJzLWFuY2hvciIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJ0YWJJbmRleCIpLnJlbW92ZURhdGEoImhyZWYudGFicyIpLnJlbW92ZURhdGEoImxvYWQudGFicyIpLnJlbW92ZVVuaXF1ZUlkKCksdGhpcy50YWJzLmFkZCh0aGlzLnBhbmVscykuZWFjaChmdW5jdGlvbigpe2UuZGF0YSh0aGlzLCJ1aS10YWJzLWRlc3Ryb3kiKT9lKHRoaXMpLnJlbW92ZSgpOmUodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktc3RhdGUtYWN0aXZlIHVpLXN0YXRlLWRpc2FibGVkIHVpLWNvcm5lci10b3AgdWktY29ybmVyLWJvdHRvbSB1aS13aWRnZXQtY29udGVudCB1aS10YWJzLWFjdGl2ZSB1aS10YWJzLXBhbmVsIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVBdHRyKCJhcmlhLWxpdmUiKS5yZW1vdmVBdHRyKCJhcmlhLWJ1c3kiKS5yZW1vdmVBdHRyKCJhcmlhLXNlbGVjdGVkIikucmVtb3ZlQXR0cigiYXJpYS1sYWJlbGxlZGJ5IikucmVtb3ZlQXR0cigiYXJpYS1oaWRkZW4iKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigicm9sZSIpfSksdGhpcy50YWJzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLG49dC5kYXRhKCJ1aS10YWJzLWFyaWEtY29udHJvbHMiKTtuP3QuYXR0cigiYXJpYS1jb250cm9scyIsbik6dC5yZW1vdmVBdHRyKCJhcmlhLWNvbnRyb2xzIil9KSx0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUhPT0iY29udGVudCImJnRoaXMucGFuZWxzLmNzcygiaGVpZ2h0IiwiIil9LGVuYWJsZTpmdW5jdGlvbihuKXt2YXIgcj10aGlzLm9wdGlvbnMuZGlzYWJsZWQ7aWYocj09PSExKXJldHVybjtuPT09dD9yPSExOihuPXRoaXMuX2dldEluZGV4KG4pLGUuaXNBcnJheShyKT9yPWUubWFwKHIsZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1uP2U6bnVsbH0pOnI9ZS5tYXAodGhpcy50YWJzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQhPT1uP3Q6bnVsbH0pKSx0aGlzLl9zZXR1cERpc2FibGVkKHIpfSxkaXNhYmxlOmZ1bmN0aW9uKG4pe3ZhciByPXRoaXMub3B0aW9ucy5kaXNhYmxlZDtpZihyPT09ITApcmV0dXJuO2lmKG49PT10KXI9ITA7ZWxzZXtuPXRoaXMuX2dldEluZGV4KG4pO2lmKGUuaW5BcnJheShuLHIpIT09LTEpcmV0dXJuO2UuaXNBcnJheShyKT9yPWUubWVyZ2UoW25dLHIpLnNvcnQoKTpyPVtuXX10aGlzLl9zZXR1cERpc2FibGVkKHIpfSxsb2FkOmZ1bmN0aW9uKHQsbil7dD10aGlzLl9nZXRJbmRleCh0KTt2YXIgcj10aGlzLGk9dGhpcy50YWJzLmVxKHQpLG89aS5maW5kKCIudWktdGFicy1hbmNob3IiKSx1PXRoaXMuX2dldFBhbmVsRm9yVGFiKGkpLGE9e3RhYjppLHBhbmVsOnV9O2lmKHMob1swXSkpcmV0dXJuO3RoaXMueGhyPWUuYWpheCh0aGlzLl9hamF4U2V0dGluZ3MobyxuLGEpKSx0aGlzLnhociYmdGhpcy54aHIuc3RhdHVzVGV4dCE9PSJjYW5jZWxlZCImJihpLmFkZENsYXNzKCJ1aS10YWJzLWxvYWRpbmciKSx1LmF0dHIoImFyaWEtYnVzeSIsInRydWUiKSx0aGlzLnhoci5zdWNjZXNzKGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt1Lmh0bWwoZSksci5fdHJpZ2dlcigibG9hZCIsbixhKX0sMSl9KS5jb21wbGV0ZShmdW5jdGlvbihlLHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0PT09ImFib3J0IiYmci5wYW5lbHMuc3RvcCghMSwhMCksaS5yZW1vdmVDbGFzcygidWktdGFicy1sb2FkaW5nIiksdS5yZW1vdmVBdHRyKCJhcmlhLWJ1c3kiKSxlPT09ci54aHImJmRlbGV0ZSByLnhocn0sMSl9KSl9LF9hamF4U2V0dGluZ3M6ZnVuY3Rpb24odCxuLHIpe3ZhciBpPXRoaXM7cmV0dXJue3VybDp0LmF0dHIoImhyZWYiKSxiZWZvcmVTZW5kOmZ1bmN0aW9uKHQscyl7cmV0dXJuIGkuX3RyaWdnZXIoImJlZm9yZUxvYWQiLG4sZS5leHRlbmQoe2pxWEhSOnQsYWpheFNldHRpbmdzOnN9LHIpKX19fSxfZ2V0UGFuZWxGb3JUYWI6ZnVuY3Rpb24odCl7dmFyIG49ZSh0KS5hdHRyKCJhcmlhLWNvbnRyb2xzIik7cmV0dXJuIHRoaXMuZWxlbWVudC5maW5kKHRoaXMuX3Nhbml0aXplU2VsZWN0b3IoIiMiK24pKX19KSxlLnVpQmFja0NvbXBhdCE9PSExJiYoZS51aS50YWJzLnByb3RvdHlwZS5fdWk9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dGFiOmUscGFuZWw6dCxpbmRleDp0aGlzLmFuY2hvcnMuaW5kZXgoZSl9fSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHt1cmw6ZnVuY3Rpb24oZSx0KXt0aGlzLmFuY2hvcnMuZXEoZSkuYXR0cigiaHJlZiIsdCl9fSksZS53aWRnZXQoInVpLnRhYnMiLGUudWkudGFicyx7b3B0aW9uczp7YWpheE9wdGlvbnM6bnVsbCxjYWNoZTohMX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX3N1cGVyKCk7dmFyIHQ9dGhpczt0aGlzLl9vbih7dGFic2JlZm9yZWxvYWQ6ZnVuY3Rpb24obixyKXtpZihlLmRhdGEoci50YWJbMF0sImNhY2hlLnRhYnMiKSl7bi5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1yLmpxWEhSLnN1Y2Nlc3MoZnVuY3Rpb24oKXt0Lm9wdGlvbnMuY2FjaGUmJmUuZGF0YShyLnRhYlswXSwiY2FjaGUudGFicyIsITApfSl9fSl9LF9hamF4U2V0dGluZ3M6ZnVuY3Rpb24odCxuLHIpe3ZhciBpPXRoaXMub3B0aW9ucy5hamF4T3B0aW9ucztyZXR1cm4gZS5leHRlbmQoe30saSx7ZXJyb3I6ZnVuY3Rpb24oZSx0LG4pe3RyeXtpLmVycm9yKGUsdCxyLnRhYi5jbG9zZXN0KCJsaSIpLmluZGV4KCksci50YWJbMF0pfWNhdGNoKG4pe319fSx0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cykpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7ZT09PSJjYWNoZSImJnQ9PT0hMSYmdGhpcy5hbmNob3JzLnJlbW92ZURhdGEoImNhY2hlLnRhYnMiKSx0aGlzLl9zdXBlcihlLHQpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuYW5jaG9ycy5yZW1vdmVEYXRhKCJjYWNoZS50YWJzIiksdGhpcy5fc3VwZXIoKX0sdXJsOmZ1bmN0aW9uKGUsdCl7dGhpcy5hbmNob3JzLmVxKGUpLnJlbW92ZURhdGEoImNhY2hlLnRhYnMiKSx0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyl9fSksZS53aWRnZXQoInVpLnRhYnMiLGUudWkudGFicyx7YWJvcnQ6ZnVuY3Rpb24oKXt0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKX19KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtvcHRpb25zOntzcGlubmVyOiI8ZW0+TG9hZGluZyYjODIzMDs8L2VtPiJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlcigpLHRoaXMuX29uKHt0YWJzYmVmb3JlbG9hZDpmdW5jdGlvbihlLHQpe2lmKGUudGFyZ2V0IT09dGhpcy5lbGVtZW50WzBdfHwhdGhpcy5vcHRpb25zLnNwaW5uZXIpcmV0dXJuO3ZhciBuPXQudGFiLmZpbmQoInNwYW4iKSxyPW4uaHRtbCgpO24uaHRtbCh0aGlzLm9wdGlvbnMuc3Bpbm5lciksdC5qcVhIUi5jb21wbGV0ZShmdW5jdGlvbigpe24uaHRtbChyKX0pfX0pfX0pLGUud2lkZ2V0KCJ1aS50YWJzIixlLnVpLnRhYnMse29wdGlvbnM6e2VuYWJsZTpudWxsLGRpc2FibGU6bnVsbH0sZW5hYmxlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyO2lmKHQmJm4uZGlzYWJsZWQ9PT0hMHx8ZS5pc0FycmF5KG4uZGlzYWJsZWQpJiZlLmluQXJyYXkodCxuLmRpc2FibGVkKSE9PS0xKXI9ITA7dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpLHImJnRoaXMuX3RyaWdnZXIoImVuYWJsZSIsbnVsbCx0aGlzLl91aSh0aGlzLmFuY2hvcnNbdF0sdGhpcy5wYW5lbHNbdF0pKX0sZGlzYWJsZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm9wdGlvbnMscjtpZih0JiZuLmRpc2FibGVkPT09ITF8fGUuaXNBcnJheShuLmRpc2FibGVkKSYmZS5pbkFycmF5KHQsbi5kaXNhYmxlZCk9PT0tMSlyPSEwO3RoaXMuX3N1cGVyQXBwbHkoYXJndW1lbnRzKSxyJiZ0aGlzLl90cmlnZ2VyKCJkaXNhYmxlIixudWxsLHRoaXMuX3VpKHRoaXMuYW5jaG9yc1t0XSx0aGlzLnBhbmVsc1t0XSkpfX0pLGUud2lkZ2V0KCJ1aS50YWJzIixlLnVpLnRhYnMse29wdGlvbnM6e2FkZDpudWxsLHJlbW92ZTpudWxsLHRhYlRlbXBsYXRlOiI8bGk+PGEgaHJlZj0nI3tocmVmfSc+PHNwYW4+I3tsYWJlbH08L3NwYW4+PC9hPjwvbGk+In0sYWRkOmZ1bmN0aW9uKG4scixpKXtpPT09dCYmKGk9dGhpcy5hbmNob3JzLmxlbmd0aCk7dmFyIHMsbyx1PXRoaXMub3B0aW9ucyxhPWUodS50YWJUZW1wbGF0ZS5yZXBsYWNlKC8jXHtocmVmXH0vZyxuKS5yZXBsYWNlKC8jXHtsYWJlbFx9L2cscikpLGY9bi5pbmRleE9mKCIjIik/dGhpcy5fdGFiSWQoYSk6bi5yZXBsYWNlKCIjIiwiIik7cmV0dXJuIGEuYWRkQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLXRvcCIpLmRhdGEoInVpLXRhYnMtZGVzdHJveSIsITApLGEuYXR0cigiYXJpYS1jb250cm9scyIsZikscz1pPj10aGlzLnRhYnMubGVuZ3RoLG89dGhpcy5lbGVtZW50LmZpbmQoIiMiK2YpLG8ubGVuZ3RofHwobz10aGlzLl9jcmVhdGVQYW5lbChmKSxzP2k+MD9vLmluc2VydEFmdGVyKHRoaXMucGFuZWxzLmVxKC0xKSk6by5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpOm8uaW5zZXJ0QmVmb3JlKHRoaXMucGFuZWxzW2ldKSksby5hZGRDbGFzcygidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuaGlkZSgpLHM/YS5hcHBlbmRUbyh0aGlzLnRhYmxpc3QpOmEuaW5zZXJ0QmVmb3JlKHRoaXMudGFic1tpXSksdS5kaXNhYmxlZD1lLm1hcCh1LmRpc2FibGVkLGZ1bmN0aW9uKGUpe3JldHVybiBlPj1pPysrZTplfSksdGhpcy5yZWZyZXNoKCksdGhpcy50YWJzLmxlbmd0aD09PTEmJnUuYWN0aXZlPT09ITEmJnRoaXMub3B0aW9uKCJhY3RpdmUiLDApLHRoaXMuX3RyaWdnZXIoImFkZCIsbnVsbCx0aGlzLl91aSh0aGlzLmFuY2hvcnNbaV0sdGhpcy5wYW5lbHNbaV0pKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dD10aGlzLl9nZXRJbmRleCh0KTt2YXIgbj10aGlzLm9wdGlvbnMscj10aGlzLnRhYnMuZXEodCkucmVtb3ZlKCksaT10aGlzLl9nZXRQYW5lbEZvclRhYihyKS5yZW1vdmUoKTtyZXR1cm4gci5oYXNDbGFzcygidWktdGFicy1hY3RpdmUiKSYmdGhpcy5hbmNob3JzLmxlbmd0aD4yJiZ0aGlzLl9hY3RpdmF0ZSh0Kyh0KzE8dGhpcy5hbmNob3JzLmxlbmd0aD8xOi0xKSksbi5kaXNhYmxlZD1lLm1hcChlLmdyZXAobi5kaXNhYmxlZCxmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXR9KSxmdW5jdGlvbihlKXtyZXR1cm4gZT49dD8tLWU6ZX0pLHRoaXMucmVmcmVzaCgpLHRoaXMuX3RyaWdnZXIoInJlbW92ZSIsbnVsbCx0aGlzLl91aShyLmZpbmQoImEiKVswXSxpWzBdKSksdGhpc319KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbmNob3JzLmxlbmd0aH19KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtvcHRpb25zOntpZFByZWZpeDoidWktdGFicy0ifSxfdGFiSWQ6ZnVuY3Rpb24odCl7dmFyIG49dC5pcygibGkiKT90LmZpbmQoImFbaHJlZl0iKTp0O3JldHVybiBuPW5bMF0sZShuKS5jbG9zZXN0KCJsaSIpLmF0dHIoImFyaWEtY29udHJvbHMiKXx8bi50aXRsZSYmbi50aXRsZS5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZSgvW15cd1x1MDBjMC1cdUZGRkZcLV0vZywiIil8fHRoaXMub3B0aW9ucy5pZFByZWZpeCtpKCl9fSksZS53aWRnZXQoInVpLnRhYnMiLGUudWkudGFicyx7b3B0aW9uczp7cGFuZWxUZW1wbGF0ZToiPGRpdj48L2Rpdj4ifSxfY3JlYXRlUGFuZWw6ZnVuY3Rpb24odCl7cmV0dXJuIGUodGhpcy5vcHRpb25zLnBhbmVsVGVtcGxhdGUpLmF0dHIoImlkIix0KS5hZGRDbGFzcygidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuZGF0YSgidWktdGFicy1kZXN0cm95IiwhMCl9fSksZS53aWRnZXQoInVpLnRhYnMiLGUudWkudGFicyx7X2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztlLmFjdGl2ZT09PW51bGwmJmUuc2VsZWN0ZWQhPT10JiYoZS5hY3RpdmU9ZS5zZWxlY3RlZD09PS0xPyExOmUuc2VsZWN0ZWQpLHRoaXMuX3N1cGVyKCksZS5zZWxlY3RlZD1lLmFjdGl2ZSxlLnNlbGVjdGVkPT09ITEmJihlLnNlbGVjdGVkPS0xKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe2lmKGUhPT0ic2VsZWN0ZWQiKXJldHVybiB0aGlzLl9zdXBlcihlLHQpO3ZhciBuPXRoaXMub3B0aW9uczt0aGlzLl9zdXBlcigiYWN0aXZlIix0PT09LTE/ITE6dCksbi5zZWxlY3RlZD1uLmFjdGl2ZSxuLnNlbGVjdGVkPT09ITEmJihuLnNlbGVjdGVkPS0xKX0sX2V2ZW50SGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyksdGhpcy5vcHRpb25zLnNlbGVjdGVkPXRoaXMub3B0aW9ucy5hY3RpdmUsdGhpcy5vcHRpb25zLnNlbGVjdGVkPT09ITEmJih0aGlzLm9wdGlvbnMuc2VsZWN0ZWQ9LTEpfX0pLGUud2lkZ2V0KCJ1aS50YWJzIixlLnVpLnRhYnMse29wdGlvbnM6e3Nob3c6bnVsbCxzZWxlY3Q6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX3N1cGVyKCksdGhpcy5vcHRpb25zLmFjdGl2ZSE9PSExJiZ0aGlzLl90cmlnZ2VyKCJzaG93IixudWxsLHRoaXMuX3VpKHRoaXMuYWN0aXZlLmZpbmQoIi51aS10YWJzLWFuY2hvciIpWzBdLHRoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKVswXSkpfSxfdHJpZ2dlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpO3JldHVybiByPyhlPT09ImJlZm9yZUFjdGl2YXRlIiYmbi5uZXdUYWIubGVuZ3RoP3I9dGhpcy5fc3VwZXIoInNlbGVjdCIsdCx7dGFiOm4ubmV3VGFiLmZpbmQoIi51aS10YWJzLWFuY2hvciIpWzBdLHBhbmVsOm4ubmV3UGFuZWxbMF0saW5kZXg6bi5uZXdUYWIuY2xvc2VzdCgibGkiKS5pbmRleCgpfSk6ZT09PSJhY3RpdmF0ZSImJm4ubmV3VGFiLmxlbmd0aCYmKHI9dGhpcy5fc3VwZXIoInNob3ciLHQse3RhYjpuLm5ld1RhYi5maW5kKCIudWktdGFicy1hbmNob3IiKVswXSxwYW5lbDpuLm5ld1BhbmVsWzBdLGluZGV4Om4ubmV3VGFiLmNsb3Nlc3QoImxpIikuaW5kZXgoKX0pKSxyKTohMX19KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtzZWxlY3Q6ZnVuY3Rpb24oZSl7ZT10aGlzLl9nZXRJbmRleChlKTtpZihlPT09LTEpe2lmKCF0aGlzLm9wdGlvbnMuY29sbGFwc2libGV8fHRoaXMub3B0aW9ucy5zZWxlY3RlZD09PS0xKXJldHVybjtlPXRoaXMub3B0aW9ucy5zZWxlY3RlZH10aGlzLmFuY2hvcnMuZXEoZSkudHJpZ2dlcih0aGlzLm9wdGlvbnMuZXZlbnQrdGhpcy5ldmVudE5hbWVzcGFjZSl9fSksZnVuY3Rpb24oKXt2YXIgdD0wO2Uud2lkZ2V0KCJ1aS50YWJzIixlLnVpLnRhYnMse29wdGlvbnM6e2Nvb2tpZTpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLHQ7ZS5hY3RpdmU9PW51bGwmJmUuY29va2llJiYodD1wYXJzZUludCh0aGlzLl9jb29raWUoKSwxMCksdD09PS0xJiYodD0hMSksZS5hY3RpdmU9dCksdGhpcy5fc3VwZXIoKX0sX2Nvb2tpZTpmdW5jdGlvbihuKXt2YXIgcj1bdGhpcy5jb29raWV8fCh0aGlzLmNvb2tpZT10aGlzLm9wdGlvbnMuY29va2llLm5hbWV8fCJ1aS10YWJzLSIrICsrdCldO3JldHVybiBhcmd1bWVudHMubGVuZ3RoJiYoci5wdXNoKG49PT0hMT8tMTpuKSxyLnB1c2godGhpcy5vcHRpb25zLmNvb2tpZSkpLGUuY29va2llLmFwcGx5KG51bGwscil9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIoKSx0aGlzLm9wdGlvbnMuY29va2llJiZ0aGlzLl9jb29raWUodGhpcy5vcHRpb25zLmFjdGl2ZSx0aGlzLm9wdGlvbnMuY29va2llKX0sX2V2ZW50SGFuZGxlcjpmdW5jdGlvbihlKXt0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyksdGhpcy5vcHRpb25zLmNvb2tpZSYmdGhpcy5fY29va2llKHRoaXMub3B0aW9ucy5hY3RpdmUsdGhpcy5vcHRpb25zLmNvb2tpZSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIoKSx0aGlzLm9wdGlvbnMuY29va2llJiZ0aGlzLl9jb29raWUobnVsbCx0aGlzLm9wdGlvbnMuY29va2llKX19KX0oKSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtfdHJpZ2dlcjpmdW5jdGlvbih0LG4scil7dmFyIGk9ZS5leHRlbmQoe30scik7cmV0dXJuIHQ9PT0ibG9hZCImJihpLnBhbmVsPWkucGFuZWxbMF0saS50YWI9aS50YWIuZmluZCgiLnVpLXRhYnMtYW5jaG9yIilbMF0pLHRoaXMuX3N1cGVyKHQsbixpKX19KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtvcHRpb25zOntmeDpudWxsfSxfZ2V0Rng6ZnVuY3Rpb24oKXt2YXIgdCxuLHI9dGhpcy5vcHRpb25zLmZ4O3JldHVybiByJiYoZS5pc0FycmF5KHIpPyh0PXJbMF0sbj1yWzFdKTp0PW49cikscj97c2hvdzpuLGhpZGU6dH06bnVsbH0sX3RvZ2dsZTpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG8oKXtuLnJ1bm5pbmc9ITEsbi5fdHJpZ2dlcigiYWN0aXZhdGUiLGUsdCl9ZnVuY3Rpb24gdSgpe3QubmV3VGFiLmNsb3Nlc3QoImxpIikuYWRkQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLHIubGVuZ3RoJiZzLnNob3c/ci5hbmltYXRlKHMuc2hvdyxzLnNob3cuZHVyYXRpb24sZnVuY3Rpb24oKXtvKCl9KTooci5zaG93KCksbygpKX12YXIgbj10aGlzLHI9dC5uZXdQYW5lbCxpPXQub2xkUGFuZWwscz10aGlzLl9nZXRGeCgpO2lmKCFzKXJldHVybiB0aGlzLl9zdXBlcihlLHQpO24ucnVubmluZz0hMCxpLmxlbmd0aCYmcy5oaWRlP2kuYW5pbWF0ZShzLmhpZGUscy5oaWRlLmR1cmF0aW9uLGZ1bmN0aW9uKCl7dC5vbGRUYWIuY2xvc2VzdCgibGkiKS5yZW1vdmVDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiksdSgpfSk6KHQub2xkVGFiLmNsb3Nlc3QoImxpIikucmVtb3ZlQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLGkuaGlkZSgpLHUoKSl9fSkpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LG4pe3ZhciByPSh0LmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKXx8IiIpLnNwbGl0KC9ccysvKTtyLnB1c2gobiksdC5kYXRhKCJ1aS10b29sdGlwLWlkIixuKS5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IixlLnRyaW0oci5qb2luKCIgIikpKX1mdW5jdGlvbiByKHQpe3ZhciBuPXQuZGF0YSgidWktdG9vbHRpcC1pZCIpLHI9KHQuYXR0cigiYXJpYS1kZXNjcmliZWRieSIpfHwiIikuc3BsaXQoL1xzKy8pLGk9ZS5pbkFycmF5KG4scik7aSE9PS0xJiZyLnNwbGljZShpLDEpLHQucmVtb3ZlRGF0YSgidWktdG9vbHRpcC1pZCIpLHI9ZS50cmltKHIuam9pbigiICIpKSxyP3QuYXR0cigiYXJpYS1kZXNjcmliZWRieSIscik6dC5yZW1vdmVBdHRyKCJhcmlhLWRlc2NyaWJlZGJ5Iil9dmFyIHQ9MDtlLndpZGdldCgidWkudG9vbHRpcCIse3ZlcnNpb246IjEuOS4wIixvcHRpb25zOntjb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcykuYXR0cigidGl0bGUiKX0saGlkZTohMCxpdGVtczoiW3RpdGxlXSIscG9zaXRpb246e215OiJsZWZ0KzE1IGNlbnRlciIsYXQ6InJpZ2h0IGNlbnRlciIsY29sbGlzaW9uOiJmbGlwZml0IGZsaXBmaXQifSxzaG93OiEwLHRvb2x0aXBDbGFzczpudWxsLHRyYWNrOiExLGNsb3NlOm51bGwsb3BlbjpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fb24oe21vdXNlb3Zlcjoib3BlbiIsZm9jdXNpbjoib3BlbiJ9KSx0aGlzLnRvb2x0aXBzPXt9fSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsbil7dmFyIHI9dGhpcztpZih0PT09ImRpc2FibGVkIil7dGhpc1tuPyJfZGlzYWJsZSI6Il9lbmFibGUiXSgpLHRoaXMub3B0aW9uc1t0XT1uO3JldHVybn10aGlzLl9zdXBlcih0LG4pLHQ9PT0iY29udGVudCImJmUuZWFjaCh0aGlzLnRvb2x0aXBzLGZ1bmN0aW9uKGUsdCl7ci5fdXBkYXRlQ29udGVudCh0KX0pfSxfZGlzYWJsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7ZS5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24obixyKXt2YXIgaT1lLkV2ZW50KCJibHVyIik7aS50YXJnZXQ9aS5jdXJyZW50VGFyZ2V0PXJbMF0sdC5jbG9zZShpLCEwKX0pLHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3QuaXMoIlt0aXRsZV0iKSYmdC5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIix0LmF0dHIoInRpdGxlIikpLmF0dHIoInRpdGxlIiwiIil9KX0sX2VuYWJsZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3QuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpJiZ0LmF0dHIoInRpdGxlIix0LmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSl9KX0sb3BlbjpmdW5jdGlvbih0KXt2YXIgbj1lKHQ/dC50YXJnZXQ6dGhpcy5lbGVtZW50KS5jbG9zZXN0KHRoaXMub3B0aW9ucy5pdGVtcyk7aWYoIW4ubGVuZ3RoKXJldHVybjtpZih0aGlzLm9wdGlvbnMudHJhY2smJm4uZGF0YSgidWktdG9vbHRpcC1pZCIpKXt0aGlzLl9maW5kKG4pLnBvc2l0aW9uKGUuZXh0ZW5kKHtvZjpufSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSx0aGlzLl9vZmYodGhpcy5kb2N1bWVudCwibW91c2Vtb3ZlIik7cmV0dXJufW4uYXR0cigidGl0bGUiKSYmbi5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIixuLmF0dHIoInRpdGxlIikpLG4uZGF0YSgidG9vbHRpcC1vcGVuIiwhMCksdGhpcy5fdXBkYXRlQ29udGVudChuLHQpfSxfdXBkYXRlQ29udGVudDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcy5vcHRpb25zLmNvbnRlbnQsaT10aGlzO2lmKHR5cGVvZiByPT0ic3RyaW5nIilyZXR1cm4gdGhpcy5fb3Blbih0LGUscik7bj1yLmNhbGwoZVswXSxmdW5jdGlvbihuKXtpZighZS5kYXRhKCJ0b29sdGlwLW9wZW4iKSlyZXR1cm47aS5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9vcGVuKHQsZSxuKX0pfSksbiYmdGhpcy5fb3Blbih0LGUsbil9LF9vcGVuOmZ1bmN0aW9uKHQscixpKXtmdW5jdGlvbiB1KGUpe28ub2Y9ZSxzLnBvc2l0aW9uKG8pfXZhciBzLG87aWYoIWkpcmV0dXJuO3M9dGhpcy5fZmluZChyKTtpZihzLmxlbmd0aCl7cy5maW5kKCIudWktdG9vbHRpcC1jb250ZW50IikuaHRtbChpKTtyZXR1cm59ci5pcygiW3RpdGxlXSIpJiYodCYmdC50eXBlPT09Im1vdXNlb3ZlciI/ci5hdHRyKCJ0aXRsZSIsIiIpOnIucmVtb3ZlQXR0cigidGl0bGUiKSkscz10aGlzLl90b29sdGlwKHIpLG4ocixzLmF0dHIoImlkIikpLHMuZmluZCgiLnVpLXRvb2x0aXAtY29udGVudCIpLmh0bWwoaSksdGhpcy5vcHRpb25zLnRyYWNrJiZ0JiYvXm1vdXNlLy50ZXN0KHQub3JpZ2luYWxFdmVudC50eXBlKT8obz1lLmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pLHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse21vdXNlbW92ZTp1fSksdSh0KSk6cy5wb3NpdGlvbihlLmV4dGVuZCh7b2Y6cn0sdGhpcy5vcHRpb25zLnBvc2l0aW9uKSkscy5oaWRlKCksdGhpcy5fc2hvdyhzLHRoaXMub3B0aW9ucy5zaG93KSx0aGlzLl90cmlnZ2VyKCJvcGVuIix0LHt0b29sdGlwOnN9KSx0aGlzLl9vbihyLHttb3VzZWxlYXZlOiJjbG9zZSIsZm9jdXNvdXQ6ImNsb3NlIixrZXl1cDpmdW5jdGlvbih0KXtpZih0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuRVNDQVBFKXt2YXIgbj1lLkV2ZW50KHQpO24uY3VycmVudFRhcmdldD1yWzBdLHRoaXMuY2xvc2UobiwhMCl9fX0pfSxjbG9zZTpmdW5jdGlvbih0LG4pe3ZhciBpPXRoaXMscz1lKHQ/dC5jdXJyZW50VGFyZ2V0OnRoaXMuZWxlbWVudCksbz10aGlzLl9maW5kKHMpO2lmKHRoaXMuY2xvc2luZylyZXR1cm47aWYoIW4mJnQmJnQudHlwZSE9PSJmb2N1c291dCImJnRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudD09PXNbMF0pcmV0dXJuO3MuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpJiZzLmF0dHIoInRpdGxlIixzLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSkscihzKSxvLnN0b3AoITApLHRoaXMuX2hpZGUobyx0aGlzLm9wdGlvbnMuaGlkZSxmdW5jdGlvbigpe2UodGhpcykucmVtb3ZlKCksZGVsZXRlIGkudG9vbHRpcHNbdGhpcy5pZF19KSxzLnJlbW92ZURhdGEoInRvb2x0aXAtb3BlbiIpLHRoaXMuX29mZihzLCJtb3VzZWxlYXZlIGZvY3Vzb3V0IGtleXVwIiksdGhpcy5fb2ZmKHRoaXMuZG9jdW1lbnQsIm1vdXNlbW92ZSIpLHRoaXMuY2xvc2luZz0hMCx0aGlzLl90cmlnZ2VyKCJjbG9zZSIsdCx7dG9vbHRpcDpvfSksdGhpcy5jbG9zaW5nPSExfSxfdG9vbHRpcDpmdW5jdGlvbihuKXt2YXIgcj0idWktdG9vbHRpcC0iK3QrKyxpPWUoIjxkaXY+IikuYXR0cih7aWQ6cixyb2xlOiJ0b29sdGlwIn0pLmFkZENsYXNzKCJ1aS10b29sdGlwIHVpLXdpZGdldCB1aS1jb3JuZXItYWxsIHVpLXdpZGdldC1jb250ZW50ICIrKHRoaXMub3B0aW9ucy50b29sdGlwQ2xhc3N8fCIiKSk7cmV0dXJuIGUoIjxkaXY+IikuYWRkQ2xhc3MoInVpLXRvb2x0aXAtY29udGVudCIpLmFwcGVuZFRvKGkpLGkuYXBwZW5kVG8odGhpcy5kb2N1bWVudFswXS5ib2R5KSxlLmZuLmJnaWZyYW1lJiZpLmJnaWZyYW1lKCksdGhpcy50b29sdGlwc1tyXT1uLGl9LF9maW5kOmZ1bmN0aW9uKHQpe3ZhciBuPXQuZGF0YSgidWktdG9vbHRpcC1pZCIpO3JldHVybiBuP2UoIiMiK24pOmUoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2UuZWFjaCh0aGlzLnRvb2x0aXBzLGZ1bmN0aW9uKG4scil7dmFyIGk9ZS5FdmVudCgiYmx1ciIpO2kudGFyZ2V0PWkuY3VycmVudFRhcmdldD1yWzBdLHQuY2xvc2UoaSwhMCksZSgiIyIrbikucmVtb3ZlKCksci5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikmJihyLmF0dHIoInRpdGxlIixyLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSksci5yZW1vdmVEYXRhKCJ1aS10b29sdGlwLXRpdGxlIikpfSl9fSl9KShqUXVlcnkpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi9qcXVlcnkuanMgYi9oaXZlL3NjYWxhZG9jcy9saWIvanF1ZXJ5LmpzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJjM2ZiYzgKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvanF1ZXJ5LmpzCkBAIC0wLDAgKzEsMiBAQAorLyohIGpRdWVyeSB2MS44LjIganF1ZXJ5LmNvbSB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLworKGZ1bmN0aW9uKGEsYil7ZnVuY3Rpb24gRyhhKXt2YXIgYj1GW2FdPXt9O3JldHVybiBwLmVhY2goYS5zcGxpdChzKSxmdW5jdGlvbihhLGMpe2JbY109ITB9KSxifWZ1bmN0aW9uIEooYSxjLGQpe2lmKGQ9PT1iJiZhLm5vZGVUeXBlPT09MSl7dmFyIGU9ImRhdGEtIitjLnJlcGxhY2UoSSwiLSQxIikudG9Mb3dlckNhc2UoKTtkPWEuZ2V0QXR0cmlidXRlKGUpO2lmKHR5cGVvZiBkPT0ic3RyaW5nIil7dHJ5e2Q9ZD09PSJ0cnVlIj8hMDpkPT09ImZhbHNlIj8hMTpkPT09Im51bGwiP251bGw6K2QrIiI9PT1kPytkOkgudGVzdChkKT9wLnBhcnNlSlNPTihkKTpkfWNhdGNoKGYpe31wLmRhdGEoYSxjLGQpfWVsc2UgZD1ifXJldHVybiBkfWZ1bmN0aW9uIEsoYSl7dmFyIGI7Zm9yKGIgaW4gYSl7aWYoYj09PSJkYXRhIiYmcC5pc0VtcHR5T2JqZWN0KGFbYl0pKWNvbnRpbnVlO2lmKGIhPT0idG9KU09OIilyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBiYSgpe3JldHVybiExfWZ1bmN0aW9uIGJiKCl7cmV0dXJuITB9ZnVuY3Rpb24gYmgoYSl7cmV0dXJuIWF8fCFhLnBhcmVudE5vZGV8fGEucGFyZW50Tm9kZS5ub2RlVHlwZT09PTExfWZ1bmN0aW9uIGJpKGEsYil7ZG8gYT1hW2JdO3doaWxlKGEmJmEubm9kZVR5cGUhPT0xKTtyZXR1cm4gYX1mdW5jdGlvbiBiaihhLGIsYyl7Yj1ifHwwO2lmKHAuaXNGdW5jdGlvbihiKSlyZXR1cm4gcC5ncmVwKGEsZnVuY3Rpb24oYSxkKXt2YXIgZT0hIWIuY2FsbChhLGQsYSk7cmV0dXJuIGU9PT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gcC5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gYT09PWI9PT1jfSk7aWYodHlwZW9mIGI9PSJzdHJpbmciKXt2YXIgZD1wLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlVHlwZT09PTF9KTtpZihiZS50ZXN0KGIpKXJldHVybiBwLmZpbHRlcihiLGQsIWMpO2I9cC5maWx0ZXIoYixkKX1yZXR1cm4gcC5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gcC5pbkFycmF5KGEsYik+PTA9PT1jfSl9ZnVuY3Rpb24gYmsoYSl7dmFyIGI9Ymwuc3BsaXQoInwiKSxjPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2lmKGMuY3JlYXRlRWxlbWVudCl3aGlsZShiLmxlbmd0aCljLmNyZWF0ZUVsZW1lbnQoYi5wb3AoKSk7cmV0dXJuIGN9ZnVuY3Rpb24gYkMoYSxiKXtyZXR1cm4gYS5nZXRFbGVtZW50c0J5VGFnTmFtZShiKVswXXx8YS5hcHBlbmRDaGlsZChhLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChiKSl9ZnVuY3Rpb24gYkQoYSxiKXtpZihiLm5vZGVUeXBlIT09MXx8IXAuaGFzRGF0YShhKSlyZXR1cm47dmFyIGMsZCxlLGY9cC5fZGF0YShhKSxnPXAuX2RhdGEoYixmKSxoPWYuZXZlbnRzO2lmKGgpe2RlbGV0ZSBnLmhhbmRsZSxnLmV2ZW50cz17fTtmb3IoYyBpbiBoKWZvcihkPTAsZT1oW2NdLmxlbmd0aDtkPGU7ZCsrKXAuZXZlbnQuYWRkKGIsYyxoW2NdW2RdKX1nLmRhdGEmJihnLmRhdGE9cC5leHRlbmQoe30sZy5kYXRhKSl9ZnVuY3Rpb24gYkUoYSxiKXt2YXIgYztpZihiLm5vZGVUeXBlIT09MSlyZXR1cm47Yi5jbGVhckF0dHJpYnV0ZXMmJmIuY2xlYXJBdHRyaWJ1dGVzKCksYi5tZXJnZUF0dHJpYnV0ZXMmJmIubWVyZ2VBdHRyaWJ1dGVzKGEpLGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGM9PT0ib2JqZWN0Ij8oYi5wYXJlbnROb2RlJiYoYi5vdXRlckhUTUw9YS5vdXRlckhUTUwpLHAuc3VwcG9ydC5odG1sNUNsb25lJiZhLmlubmVySFRNTCYmIXAudHJpbShiLmlubmVySFRNTCkmJihiLmlubmVySFRNTD1hLmlubmVySFRNTCkpOmM9PT0iaW5wdXQiJiZidi50ZXN0KGEudHlwZSk/KGIuZGVmYXVsdENoZWNrZWQ9Yi5jaGVja2VkPWEuY2hlY2tlZCxiLnZhbHVlIT09YS52YWx1ZSYmKGIudmFsdWU9YS52YWx1ZSkpOmM9PT0ib3B0aW9uIj9iLnNlbGVjdGVkPWEuZGVmYXVsdFNlbGVjdGVkOmM9PT0iaW5wdXQifHxjPT09InRleHRhcmVhIj9iLmRlZmF1bHRWYWx1ZT1hLmRlZmF1bHRWYWx1ZTpjPT09InNjcmlwdCImJmIudGV4dCE9PWEudGV4dCYmKGIudGV4dD1hLnRleHQpLGIucmVtb3ZlQXR0cmlidXRlKHAuZXhwYW5kbyl9ZnVuY3Rpb24gYkYoYSl7cmV0dXJuIHR5cGVvZiBhLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIj9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik6dHlwZW9mIGEucXVlcnlTZWxlY3RvckFsbCE9InVuZGVmaW5lZCI/YS5xdWVyeVNlbGVjdG9yQWxsKCIqIik6W119ZnVuY3Rpb24gYkcoYSl7YnYudGVzdChhLnR5cGUpJiYoYS5kZWZhdWx0Q2hlY2tlZD1hLmNoZWNrZWQpfWZ1bmN0aW9uIGJZKGEsYil7aWYoYiBpbiBhKXJldHVybiBiO3ZhciBjPWIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYi5zbGljZSgxKSxkPWIsZT1iVy5sZW5ndGg7d2hpbGUoZS0tKXtiPWJXW2VdK2M7aWYoYiBpbiBhKXJldHVybiBifXJldHVybiBkfWZ1bmN0aW9uIGJaKGEsYil7cmV0dXJuIGE9Ynx8YSxwLmNzcyhhLCJkaXNwbGF5Iik9PT0ibm9uZSJ8fCFwLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKX1mdW5jdGlvbiBiJChhLGIpe3ZhciBjLGQsZT1bXSxmPTAsZz1hLmxlbmd0aDtmb3IoO2Y8ZztmKyspe2M9YVtmXTtpZighYy5zdHlsZSljb250aW51ZTtlW2ZdPXAuX2RhdGEoYywib2xkZGlzcGxheSIpLGI/KCFlW2ZdJiZjLnN0eWxlLmRpc3BsYXk9PT0ibm9uZSImJihjLnN0eWxlLmRpc3BsYXk9IiIpLGMuc3R5bGUuZGlzcGxheT09PSIiJiZiWihjKSYmKGVbZl09cC5fZGF0YShjLCJvbGRkaXNwbGF5IixjYyhjLm5vZGVOYW1lKSkpKTooZD1iSChjLCJkaXNwbGF5IiksIWVbZl0mJmQhPT0ibm9uZSImJnAuX2RhdGEoYywib2xkZGlzcGxheSIsZCkpfWZvcihmPTA7ZjxnO2YrKyl7Yz1hW2ZdO2lmKCFjLnN0eWxlKWNvbnRpbnVlO2lmKCFifHxjLnN0eWxlLmRpc3BsYXk9PT0ibm9uZSJ8fGMuc3R5bGUuZGlzcGxheT09PSIiKWMuc3R5bGUuZGlzcGxheT1iP2VbZl18fCIiOiJub25lIn1yZXR1cm4gYX1mdW5jdGlvbiBiXyhhLGIsYyl7dmFyIGQ9YlAuZXhlYyhiKTtyZXR1cm4gZD9NYXRoLm1heCgwLGRbMV0tKGN8fDApKSsoZFsyXXx8InB4Iik6Yn1mdW5jdGlvbiBjYShhLGIsYyxkKXt2YXIgZT1jPT09KGQ/ImJvcmRlciI6ImNvbnRlbnQiKT80OmI9PT0id2lkdGgiPzE6MCxmPTA7Zm9yKDtlPDQ7ZSs9MiljPT09Im1hcmdpbiImJihmKz1wLmNzcyhhLGMrYlZbZV0sITApKSxkPyhjPT09ImNvbnRlbnQiJiYoZi09cGFyc2VGbG9hdChiSChhLCJwYWRkaW5nIitiVltlXSkpfHwwKSxjIT09Im1hcmdpbiImJihmLT1wYXJzZUZsb2F0KGJIKGEsImJvcmRlciIrYlZbZV0rIldpZHRoIikpfHwwKSk6KGYrPXBhcnNlRmxvYXQoYkgoYSwicGFkZGluZyIrYlZbZV0pKXx8MCxjIT09InBhZGRpbmciJiYoZis9cGFyc2VGbG9hdChiSChhLCJib3JkZXIiK2JWW2VdKyJXaWR0aCIpKXx8MCkpO3JldHVybiBmfWZ1bmN0aW9uIGNiKGEsYixjKXt2YXIgZD1iPT09IndpZHRoIj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0LGU9ITAsZj1wLnN1cHBvcnQuYm94U2l6aW5nJiZwLmNzcyhhLCJib3hTaXppbmciKT09PSJib3JkZXItYm94IjtpZihkPD0wfHxkPT1udWxsKXtkPWJIKGEsYik7aWYoZDwwfHxkPT1udWxsKWQ9YS5zdHlsZVtiXTtpZihiUS50ZXN0KGQpKXJldHVybiBkO2U9ZiYmKHAuc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZXx8ZD09PWEuc3R5bGVbYl0pLGQ9cGFyc2VGbG9hdChkKXx8MH1yZXR1cm4gZCtjYShhLGIsY3x8KGY/ImJvcmRlciI6ImNvbnRlbnQiKSxlKSsicHgifWZ1bmN0aW9uIGNjKGEpe2lmKGJTW2FdKXJldHVybiBiU1thXTt2YXIgYj1wKCI8IithKyI+IikuYXBwZW5kVG8oZS5ib2R5KSxjPWIuY3NzKCJkaXNwbGF5Iik7Yi5yZW1vdmUoKTtpZihjPT09Im5vbmUifHxjPT09IiIpe2JJPWUuYm9keS5hcHBlbmRDaGlsZChiSXx8cC5leHRlbmQoZS5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKSx7ZnJhbWVCb3JkZXI6MCx3aWR0aDowLGhlaWdodDowfSkpO2lmKCFiSnx8IWJJLmNyZWF0ZUVsZW1lbnQpYko9KGJJLmNvbnRlbnRXaW5kb3d8fGJJLmNvbnRlbnREb2N1bWVudCkuZG9jdW1lbnQsYkoud3JpdGUoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxib2R5PiIpLGJKLmNsb3NlKCk7Yj1iSi5ib2R5LmFwcGVuZENoaWxkKGJKLmNyZWF0ZUVsZW1lbnQoYSkpLGM9YkgoYiwiZGlzcGxheSIpLGUuYm9keS5yZW1vdmVDaGlsZChiSSl9cmV0dXJuIGJTW2FdPWMsY31mdW5jdGlvbiBjaShhLGIsYyxkKXt2YXIgZTtpZihwLmlzQXJyYXkoYikpcC5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHxjZS50ZXN0KGEpP2QoYSxlKTpjaShhKyJbIisodHlwZW9mIGU9PSJvYmplY3QiP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKCFjJiZwLnR5cGUoYik9PT0ib2JqZWN0Iilmb3IoZSBpbiBiKWNpKGErIlsiK2UrIl0iLGJbZV0sYyxkKTtlbHNlIGQoYSxiKX1mdW5jdGlvbiBjeihhKXtyZXR1cm4gZnVuY3Rpb24oYixjKXt0eXBlb2YgYiE9InN0cmluZyImJihjPWIsYj0iKiIpO3ZhciBkLGUsZixnPWIudG9Mb3dlckNhc2UoKS5zcGxpdChzKSxoPTAsaT1nLmxlbmd0aDtpZihwLmlzRnVuY3Rpb24oYykpZm9yKDtoPGk7aCsrKWQ9Z1toXSxmPS9eXCsvLnRlc3QoZCksZiYmKGQ9ZC5zdWJzdHIoMSl8fCIqIiksZT1hW2RdPWFbZF18fFtdLGVbZj8idW5zaGlmdCI6InB1c2giXShjKX19ZnVuY3Rpb24gY0EoYSxjLGQsZSxmLGcpe2Y9Znx8Yy5kYXRhVHlwZXNbMF0sZz1nfHx7fSxnW2ZdPSEwO3ZhciBoLGk9YVtmXSxqPTAsaz1pP2kubGVuZ3RoOjAsbD1hPT09Y3Y7Zm9yKDtqPGsmJihsfHwhaCk7aisrKWg9aVtqXShjLGQsZSksdHlwZW9mIGg9PSJzdHJpbmciJiYoIWx8fGdbaF0/aD1iOihjLmRhdGFUeXBlcy51bnNoaWZ0KGgpLGg9Y0EoYSxjLGQsZSxoLGcpKSk7cmV0dXJuKGx8fCFoKSYmIWdbIioiXSYmKGg9Y0EoYSxjLGQsZSwiKiIsZykpLGh9ZnVuY3Rpb24gY0IoYSxjKXt2YXIgZCxlLGY9cC5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihkIGluIGMpY1tkXSE9PWImJigoZltkXT9hOmV8fChlPXt9KSlbZF09Y1tkXSk7ZSYmcC5leHRlbmQoITAsYSxlKX1mdW5jdGlvbiBjQyhhLGMsZCl7dmFyIGUsZixnLGgsaT1hLmNvbnRlbnRzLGo9YS5kYXRhVHlwZXMsaz1hLnJlc3BvbnNlRmllbGRzO2ZvcihmIGluIGspZiBpbiBkJiYoY1trW2ZdXT1kW2ZdKTt3aGlsZShqWzBdPT09IioiKWouc2hpZnQoKSxlPT09YiYmKGU9YS5taW1lVHlwZXx8Yy5nZXRSZXNwb25zZUhlYWRlcigiY29udGVudC10eXBlIikpO2lmKGUpZm9yKGYgaW4gaSlpZihpW2ZdJiZpW2ZdLnRlc3QoZSkpe2oudW5zaGlmdChmKTticmVha31pZihqWzBdaW4gZClnPWpbMF07ZWxzZXtmb3IoZiBpbiBkKXtpZighalswXXx8YS5jb252ZXJ0ZXJzW2YrIiAiK2pbMF1dKXtnPWY7YnJlYWt9aHx8KGg9Zil9Zz1nfHxofWlmKGcpcmV0dXJuIGchPT1qWzBdJiZqLnVuc2hpZnQoZyksZFtnXX1mdW5jdGlvbiBjRChhLGIpe3ZhciBjLGQsZSxmLGc9YS5kYXRhVHlwZXMuc2xpY2UoKSxoPWdbMF0saT17fSxqPTA7YS5kYXRhRmlsdGVyJiYoYj1hLmRhdGFGaWx0ZXIoYixhLmRhdGFUeXBlKSk7aWYoZ1sxXSlmb3IoYyBpbiBhLmNvbnZlcnRlcnMpaVtjLnRvTG93ZXJDYXNlKCldPWEuY29udmVydGVyc1tjXTtmb3IoO2U9Z1srK2pdOylpZihlIT09IioiKXtpZihoIT09IioiJiZoIT09ZSl7Yz1pW2grIiAiK2VdfHxpWyIqICIrZV07aWYoIWMpZm9yKGQgaW4gaSl7Zj1kLnNwbGl0KCIgIik7aWYoZlsxXT09PWUpe2M9aVtoKyIgIitmWzBdXXx8aVsiKiAiK2ZbMF1dO2lmKGMpe2M9PT0hMD9jPWlbZF06aVtkXSE9PSEwJiYoZT1mWzBdLGcuc3BsaWNlKGotLSwwLGUpKTticmVha319fWlmKGMhPT0hMClpZihjJiZhWyJ0aHJvd3MiXSliPWMoYik7ZWxzZSB0cnl7Yj1jKGIpfWNhdGNoKGspe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmM/azoiTm8gY29udmVyc2lvbiBmcm9tICIraCsiIHRvICIrZX19fWg9ZX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6Yn19ZnVuY3Rpb24gY0woKXt0cnl7cmV0dXJuIG5ldyBhLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGIpe319ZnVuY3Rpb24gY00oKXt0cnl7cmV0dXJuIG5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYil7fX1mdW5jdGlvbiBjVSgpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Y049Yn0sMCksY049cC5ub3coKX1mdW5jdGlvbiBjVihhLGIpe3AuZWFjaChiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9KGNUW2JdfHxbXSkuY29uY2F0KGNUWyIqIl0pLGU9MCxmPWQubGVuZ3RoO2Zvcig7ZTxmO2UrKylpZihkW2VdLmNhbGwoYSxiLGMpKXJldHVybn0pfWZ1bmN0aW9uIGNXKGEsYixjKXt2YXIgZCxlPTAsZj0wLGc9Y1MubGVuZ3RoLGg9cC5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7dmFyIGI9Y058fGNVKCksYz1NYXRoLm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRpb24tYiksZD0xLShjL2ouZHVyYXRpb258fDApLGU9MCxmPWoudHdlZW5zLmxlbmd0aDtmb3IoO2U8ZjtlKyspai50d2VlbnNbZV0ucnVuKGQpO3JldHVybiBoLm5vdGlmeVdpdGgoYSxbaixkLGNdKSxkPDEmJmY/YzooaC5yZXNvbHZlV2l0aChhLFtqXSksITEpfSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOnAuZXh0ZW5kKHt9LGIpLG9wdHM6cC5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LGMpLG9yaWdpbmFsUHJvcGVydGllczpiLG9yaWdpbmFsT3B0aW9uczpjLHN0YXJ0VGltZTpjTnx8Y1UoKSxkdXJhdGlvbjpjLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihiLGMsZCl7dmFyIGU9cC5Ud2VlbihhLGoub3B0cyxiLGMsai5vcHRzLnNwZWNpYWxFYXNpbmdbYl18fGoub3B0cy5lYXNpbmcpO3JldHVybiBqLnR3ZWVucy5wdXNoKGUpLGV9LHN0b3A6ZnVuY3Rpb24oYil7dmFyIGM9MCxkPWI/ai50d2VlbnMubGVuZ3RoOjA7Zm9yKDtjPGQ7YysrKWoudHdlZW5zW2NdLnJ1bigxKTtyZXR1cm4gYj9oLnJlc29sdmVXaXRoKGEsW2osYl0pOmgucmVqZWN0V2l0aChhLFtqLGJdKSx0aGlzfX0pLGs9ai5wcm9wcztjWChrLGoub3B0cy5zcGVjaWFsRWFzaW5nKTtmb3IoO2U8ZztlKyspe2Q9Y1NbZV0uY2FsbChqLGEsayxqLm9wdHMpO2lmKGQpcmV0dXJuIGR9cmV0dXJuIGNWKGosaykscC5pc0Z1bmN0aW9uKGoub3B0cy5zdGFydCkmJmoub3B0cy5zdGFydC5jYWxsKGEsaikscC5meC50aW1lcihwLmV4dGVuZChpLHthbmltOmoscXVldWU6ai5vcHRzLnF1ZXVlLGVsZW06YX0pKSxqLnByb2dyZXNzKGoub3B0cy5wcm9ncmVzcykuZG9uZShqLm9wdHMuZG9uZSxqLm9wdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3YXlzKX1mdW5jdGlvbiBjWChhLGIpe3ZhciBjLGQsZSxmLGc7Zm9yKGMgaW4gYSl7ZD1wLmNhbWVsQ2FzZShjKSxlPWJbZF0sZj1hW2NdLHAuaXNBcnJheShmKSYmKGU9ZlsxXSxmPWFbY109ZlswXSksYyE9PWQmJihhW2RdPWYsZGVsZXRlIGFbY10pLGc9cC5jc3NIb29rc1tkXTtpZihnJiYiZXhwYW5kImluIGcpe2Y9Zy5leHBhbmQoZiksZGVsZXRlIGFbZF07Zm9yKGMgaW4gZiljIGluIGF8fChhW2NdPWZbY10sYltjXT1lKX1lbHNlIGJbZF09ZX19ZnVuY3Rpb24gY1koYSxiLGMpe3ZhciBkLGUsZixnLGgsaSxqLGssbD10aGlzLG09YS5zdHlsZSxuPXt9LG89W10scT1hLm5vZGVUeXBlJiZiWihhKTtjLnF1ZXVlfHwoaj1wLl9xdWV1ZUhvb2tzKGEsImZ4Iiksai51bnF1ZXVlZD09bnVsbCYmKGoudW5xdWV1ZWQ9MCxrPWouZW1wdHkuZmlyZSxqLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXtqLnVucXVldWVkfHxrKCl9KSxqLnVucXVldWVkKyssbC5hbHdheXMoZnVuY3Rpb24oKXtsLmFsd2F5cyhmdW5jdGlvbigpe2oudW5xdWV1ZWQtLSxwLnF1ZXVlKGEsImZ4IikubGVuZ3RofHxqLmVtcHR5LmZpcmUoKX0pfSkpLGEubm9kZVR5cGU9PT0xJiYoImhlaWdodCJpbiBifHwid2lkdGgiaW4gYikmJihjLm92ZXJmbG93PVttLm92ZXJmbG93LG0ub3ZlcmZsb3dYLG0ub3ZlcmZsb3dZXSxwLmNzcyhhLCJkaXNwbGF5Iik9PT0iaW5saW5lIiYmcC5jc3MoYSwiZmxvYXQiKT09PSJub25lIiYmKCFwLnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dHx8Y2MoYS5ub2RlTmFtZSk9PT0iaW5saW5lIj9tLmRpc3BsYXk9ImlubGluZS1ibG9jayI6bS56b29tPTEpKSxjLm92ZXJmbG93JiYobS5vdmVyZmxvdz0iaGlkZGVuIixwLnN1cHBvcnQuc2hyaW5rV3JhcEJsb2Nrc3x8bC5kb25lKGZ1bmN0aW9uKCl7bS5vdmVyZmxvdz1jLm92ZXJmbG93WzBdLG0ub3ZlcmZsb3dYPWMub3ZlcmZsb3dbMV0sbS5vdmVyZmxvd1k9Yy5vdmVyZmxvd1syXX0pKTtmb3IoZCBpbiBiKXtmPWJbZF07aWYoY1AuZXhlYyhmKSl7ZGVsZXRlIGJbZF07aWYoZj09PShxPyJoaWRlIjoic2hvdyIpKWNvbnRpbnVlO28ucHVzaChkKX19Zz1vLmxlbmd0aDtpZihnKXtoPXAuX2RhdGEoYSwiZnhzaG93Iil8fHAuX2RhdGEoYSwiZnhzaG93Iix7fSkscT9wKGEpLnNob3coKTpsLmRvbmUoZnVuY3Rpb24oKXtwKGEpLmhpZGUoKX0pLGwuZG9uZShmdW5jdGlvbigpe3ZhciBiO3AucmVtb3ZlRGF0YShhLCJmeHNob3ciLCEwKTtmb3IoYiBpbiBuKXAuc3R5bGUoYSxiLG5bYl0pfSk7Zm9yKGQ9MDtkPGc7ZCsrKWU9b1tkXSxpPWwuY3JlYXRlVHdlZW4oZSxxP2hbZV06MCksbltlXT1oW2VdfHxwLnN0eWxlKGEsZSksZSBpbiBofHwoaFtlXT1pLnN0YXJ0LHEmJihpLmVuZD1pLnN0YXJ0LGkuc3RhcnQ9ZT09PSJ3aWR0aCJ8fGU9PT0iaGVpZ2h0Ij8xOjApKX19ZnVuY3Rpb24gY1ooYSxiLGMsZCxlKXtyZXR1cm4gbmV3IGNaLnByb3RvdHlwZS5pbml0KGEsYixjLGQsZSl9ZnVuY3Rpb24gYyQoYSxiKXt2YXIgYyxkPXtoZWlnaHQ6YX0sZT0wO2I9Yj8xOjA7Zm9yKDtlPDQ7ZSs9Mi1iKWM9YlZbZV0sZFsibWFyZ2luIitjXT1kWyJwYWRkaW5nIitjXT1hO3JldHVybiBiJiYoZC5vcGFjaXR5PWQud2lkdGg9YSksZH1mdW5jdGlvbiBkYShhKXtyZXR1cm4gcC5pc1dpbmRvdyhhKT9hOmEubm9kZVR5cGU9PT05P2EuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93OiExfXZhciBjLGQsZT1hLmRvY3VtZW50LGY9YS5sb2NhdGlvbixnPWEubmF2aWdhdG9yLGg9YS5qUXVlcnksaT1hLiQsaj1BcnJheS5wcm90b3R5cGUucHVzaCxrPUFycmF5LnByb3RvdHlwZS5zbGljZSxsPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLG09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbz1TdHJpbmcucHJvdG90eXBlLnRyaW0scD1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgcC5mbi5pbml0KGEsYixjKX0scT0vW1wtK10/KD86XGQqXC58KVxkKyg/OltlRV1bXC0rXT9cZCt8KS8uc291cmNlLHI9L1xTLyxzPS9ccysvLHQ9L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLHU9L14oPzpbXiM8XSooPFtcd1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLHY9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyx3PS9eW1xdLDp7fVxzXSokLyx4PS8oPzpefDp8LCkoPzpccypcWykrL2cseT0vXFwoPzpbIlxcXC9iZm5ydF18dVtcZGEtZkEtRl17NH0pL2csej0vIlteIlxcXHJcbl0qInx0cnVlfGZhbHNlfG51bGx8LT8oPzpcZFxkKlwufClcZCsoPzpbZUVdW1wtK10/XGQrfCkvZyxBPS9eLW1zLS8sQj0vLShbXGRhLXpdKS9naSxDPWZ1bmN0aW9uKGEsYil7cmV0dXJuKGIrIiIpLnRvVXBwZXJDYXNlKCl9LEQ9ZnVuY3Rpb24oKXtlLmFkZEV2ZW50TGlzdGVuZXI/KGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsRCwhMSkscC5yZWFkeSgpKTplLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiJiYoZS5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixEKSxwLnJlYWR5KCkpfSxFPXt9O3AuZm49cC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnAsaW5pdDpmdW5jdGlvbihhLGMsZCl7dmFyIGYsZyxoLGk7aWYoIWEpcmV0dXJuIHRoaXM7aWYoYS5ub2RlVHlwZSlyZXR1cm4gdGhpcy5jb250ZXh0PXRoaXNbMF09YSx0aGlzLmxlbmd0aD0xLHRoaXM7aWYodHlwZW9mIGE9PSJzdHJpbmciKXthLmNoYXJBdCgwKT09PSI8IiYmYS5jaGFyQXQoYS5sZW5ndGgtMSk9PT0iPiImJmEubGVuZ3RoPj0zP2Y9W251bGwsYSxudWxsXTpmPXUuZXhlYyhhKTtpZihmJiYoZlsxXXx8IWMpKXtpZihmWzFdKXJldHVybiBjPWMgaW5zdGFuY2VvZiBwP2NbMF06YyxpPWMmJmMubm9kZVR5cGU/Yy5vd25lckRvY3VtZW50fHxjOmUsYT1wLnBhcnNlSFRNTChmWzFdLGksITApLHYudGVzdChmWzFdKSYmcC5pc1BsYWluT2JqZWN0KGMpJiZ0aGlzLmF0dHIuY2FsbChhLGMsITApLHAubWVyZ2UodGhpcyxhKTtnPWUuZ2V0RWxlbWVudEJ5SWQoZlsyXSk7aWYoZyYmZy5wYXJlbnROb2RlKXtpZihnLmlkIT09ZlsyXSlyZXR1cm4gZC5maW5kKGEpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1nfXJldHVybiB0aGlzLmNvbnRleHQ9ZSx0aGlzLnNlbGVjdG9yPWEsdGhpc31yZXR1cm4hY3x8Yy5qcXVlcnk/KGN8fGQpLmZpbmQoYSk6dGhpcy5jb25zdHJ1Y3RvcihjKS5maW5kKGEpfXJldHVybiBwLmlzRnVuY3Rpb24oYSk/ZC5yZWFkeShhKTooYS5zZWxlY3RvciE9PWImJih0aGlzLnNlbGVjdG9yPWEuc2VsZWN0b3IsdGhpcy5jb250ZXh0PWEuY29udGV4dCkscC5tYWtlQXJyYXkoYSx0aGlzKSl9LHNlbGVjdG9yOiIiLGpxdWVyeToiMS44LjIiLGxlbmd0aDowLHNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gay5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/dGhpcy50b0FycmF5KCk6YTwwP3RoaXNbdGhpcy5sZW5ndGgrYV06dGhpc1thXX0scHVzaFN0YWNrOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1wLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxhKTtyZXR1cm4gZC5wcmV2T2JqZWN0PXRoaXMsZC5jb250ZXh0PXRoaXMuY29udGV4dCxiPT09ImZpbmQiP2Quc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisodGhpcy5zZWxlY3Rvcj8iICI6IiIpK2M6YiYmKGQuc2VsZWN0b3I9dGhpcy5zZWxlY3RvcisiLiIrYisiKCIrYysiKSIpLGR9LGVhY2g6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gcC5lYWNoKHRoaXMsYSxiKX0scmVhZHk6ZnVuY3Rpb24oYSl7cmV0dXJuIHAucmVhZHkucHJvbWlzZSgpLmRvbmUoYSksdGhpc30sZXE6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9K2EsYT09PS0xP3RoaXMuc2xpY2UoYSk6dGhpcy5zbGljZShhLGErMSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGsuYXBwbHkodGhpcyxhcmd1bWVudHMpLCJzbGljZSIsay5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX0sbWFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhwLm1hcCh0aGlzLGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEuY2FsbChiLGMsYil9KSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6aixzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX0scC5mbi5pbml0LnByb3RvdHlwZT1wLmZuLHAuZXh0ZW5kPXAuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGEsYyxkLGUsZixnLGg9YXJndW1lbnRzWzBdfHx7fSxpPTEsaj1hcmd1bWVudHMubGVuZ3RoLGs9ITE7dHlwZW9mIGg9PSJib29sZWFuIiYmKGs9aCxoPWFyZ3VtZW50c1sxXXx8e30saT0yKSx0eXBlb2YgaCE9Im9iamVjdCImJiFwLmlzRnVuY3Rpb24oaCkmJihoPXt9KSxqPT09aSYmKGg9dGhpcywtLWkpO2Zvcig7aTxqO2krKylpZigoYT1hcmd1bWVudHNbaV0pIT1udWxsKWZvcihjIGluIGEpe2Q9aFtjXSxlPWFbY107aWYoaD09PWUpY29udGludWU7ayYmZSYmKHAuaXNQbGFpbk9iamVjdChlKXx8KGY9cC5pc0FycmF5KGUpKSk/KGY/KGY9ITEsZz1kJiZwLmlzQXJyYXkoZCk/ZDpbXSk6Zz1kJiZwLmlzUGxhaW5PYmplY3QoZCk/ZDp7fSxoW2NdPXAuZXh0ZW5kKGssZyxlKSk6ZSE9PWImJihoW2NdPWUpfXJldHVybiBofSxwLmV4dGVuZCh7bm9Db25mbGljdDpmdW5jdGlvbihiKXtyZXR1cm4gYS4kPT09cCYmKGEuJD1pKSxiJiZhLmpRdWVyeT09PXAmJihhLmpRdWVyeT1oKSxwfSxpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihhKXthP3AucmVhZHlXYWl0Kys6cC5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGEpe2lmKGE9PT0hMD8tLXAucmVhZHlXYWl0OnAuaXNSZWFkeSlyZXR1cm47aWYoIWUuYm9keSlyZXR1cm4gc2V0VGltZW91dChwLnJlYWR5LDEpO3AuaXNSZWFkeT0hMDtpZihhIT09ITAmJi0tcC5yZWFkeVdhaXQ+MClyZXR1cm47ZC5yZXNvbHZlV2l0aChlLFtwXSkscC5mbi50cmlnZ2VyJiZwKGUpLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIpfSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiBwLnR5cGUoYSk9PT0iZnVuY3Rpb24ifSxpc0FycmF5OkFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVybiBwLnR5cGUoYSk9PT0iYXJyYXkifSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gYSE9bnVsbCYmYT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChhKSkmJmlzRmluaXRlKGEpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP1N0cmluZyhhKTpFW20uY2FsbChhKV18fCJvYmplY3QifSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe2lmKCFhfHxwLnR5cGUoYSkhPT0ib2JqZWN0Inx8YS5ub2RlVHlwZXx8cC5pc1dpbmRvdyhhKSlyZXR1cm4hMTt0cnl7aWYoYS5jb25zdHJ1Y3RvciYmIW4uY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhbi5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2goYyl7cmV0dXJuITF9dmFyIGQ7Zm9yKGQgaW4gYSk7cmV0dXJuIGQ9PT1ifHxuLmNhbGwoYSxkKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSxlcnJvcjpmdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoYSl9LHBhcnNlSFRNTDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIWF8fHR5cGVvZiBhIT0ic3RyaW5nIj9udWxsOih0eXBlb2YgYj09ImJvb2xlYW4iJiYoYz1iLGI9MCksYj1ifHxlLChkPXYuZXhlYyhhKSk/W2IuY3JlYXRlRWxlbWVudChkWzFdKV06KGQ9cC5idWlsZEZyYWdtZW50KFthXSxiLGM/bnVsbDpbXSkscC5tZXJnZShbXSwoZC5jYWNoZWFibGU/cC5jbG9uZShkLmZyYWdtZW50KTpkLmZyYWdtZW50KS5jaGlsZE5vZGVzKSkpfSxwYXJzZUpTT046ZnVuY3Rpb24oYil7aWYoIWJ8fHR5cGVvZiBiIT0ic3RyaW5nIilyZXR1cm4gbnVsbDtiPXAudHJpbShiKTtpZihhLkpTT04mJmEuSlNPTi5wYXJzZSlyZXR1cm4gYS5KU09OLnBhcnNlKGIpO2lmKHcudGVzdChiLnJlcGxhY2UoeSwiQCIpLnJlcGxhY2UoeiwiXSIpLnJlcGxhY2UoeCwiIikpKXJldHVybihuZXcgRnVuY3Rpb24oInJldHVybiAiK2IpKSgpO3AuZXJyb3IoIkludmFsaWQgSlNPTjogIitiKX0scGFyc2VYTUw6ZnVuY3Rpb24oYyl7dmFyIGQsZTtpZighY3x8dHlwZW9mIGMhPSJzdHJpbmciKXJldHVybiBudWxsO3RyeXthLkRPTVBhcnNlcj8oZT1uZXcgRE9NUGFyc2VyLGQ9ZS5wYXJzZUZyb21TdHJpbmcoYywidGV4dC94bWwiKSk6KGQ9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxkLmFzeW5jPSJmYWxzZSIsZC5sb2FkWE1MKGMpKX1jYXRjaChmKXtkPWJ9cmV0dXJuKCFkfHwhZC5kb2N1bWVudEVsZW1lbnR8fGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RoKSYmcC5lcnJvcigiSW52YWxpZCBYTUw6ICIrYyksZH0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihiKXtiJiZyLnRlc3QoYikmJihhLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKGIpe2EuZXZhbC5jYWxsKGEsYil9KShiKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoQSwibXMtIikucmVwbGFjZShCLEMpfSxub2RlTmFtZTpmdW5jdGlvbihhLGIpe3JldHVybiBhLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iLnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oYSxjLGQpe3ZhciBlLGY9MCxnPWEubGVuZ3RoLGg9Zz09PWJ8fHAuaXNGdW5jdGlvbihhKTtpZihkKXtpZihoKXtmb3IoZSBpbiBhKWlmKGMuYXBwbHkoYVtlXSxkKT09PSExKWJyZWFrfWVsc2UgZm9yKDtmPGc7KWlmKGMuYXBwbHkoYVtmKytdLGQpPT09ITEpYnJlYWt9ZWxzZSBpZihoKXtmb3IoZSBpbiBhKWlmKGMuY2FsbChhW2VdLGUsYVtlXSk9PT0hMSlicmVha31lbHNlIGZvcig7ZjxnOylpZihjLmNhbGwoYVtmXSxmLGFbZisrXSk9PT0hMSlicmVhaztyZXR1cm4gYX0sdHJpbTpvJiYhby5jYWxsKCLvu7/CoCIpP2Z1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOm8uY2FsbChhKX06ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6KGErIiIpLnJlcGxhY2UodCwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9Ynx8W107cmV0dXJuIGEhPW51bGwmJihjPXAudHlwZShhKSxhLmxlbmd0aD09bnVsbHx8Yz09PSJzdHJpbmcifHxjPT09ImZ1bmN0aW9uInx8Yz09PSJyZWdleHAifHxwLmlzV2luZG93KGEpP2ouY2FsbChkLGEpOnAubWVyZ2UoZCxhKSksZH0saW5BcnJheTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7aWYoYil7aWYobClyZXR1cm4gbC5jYWxsKGIsYSxjKTtkPWIubGVuZ3RoLGM9Yz9jPDA/TWF0aC5tYXgoMCxkK2MpOmM6MDtmb3IoO2M8ZDtjKyspaWYoYyBpbiBiJiZiW2NdPT09YSlyZXR1cm4gY31yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxjKXt2YXIgZD1jLmxlbmd0aCxlPWEubGVuZ3RoLGY9MDtpZih0eXBlb2YgZD09Im51bWJlciIpZm9yKDtmPGQ7ZisrKWFbZSsrXT1jW2ZdO2Vsc2Ugd2hpbGUoY1tmXSE9PWIpYVtlKytdPWNbZisrXTtyZXR1cm4gYS5sZW5ndGg9ZSxhfSxncmVwOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlPVtdLGY9MCxnPWEubGVuZ3RoO2M9ISFjO2Zvcig7ZjxnO2YrKylkPSEhYihhW2ZdLGYpLGMhPT1kJiZlLnB1c2goYVtmXSk7cmV0dXJuIGV9LG1hcDpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZixnPVtdLGg9MCxpPWEubGVuZ3RoLGo9YSBpbnN0YW5jZW9mIHB8fGkhPT1iJiZ0eXBlb2YgaT09Im51bWJlciImJihpPjAmJmFbMF0mJmFbaS0xXXx8aT09PTB8fHAuaXNBcnJheShhKSk7aWYoailmb3IoO2g8aTtoKyspZT1jKGFbaF0saCxkKSxlIT1udWxsJiYoZ1tnLmxlbmd0aF09ZSk7ZWxzZSBmb3IoZiBpbiBhKWU9YyhhW2ZdLGYsZCksZSE9bnVsbCYmKGdbZy5sZW5ndGhdPWUpO3JldHVybiBnLmNvbmNhdC5hcHBseShbXSxnKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYyl7dmFyIGQsZSxmO3JldHVybiB0eXBlb2YgYz09InN0cmluZyImJihkPWFbY10sYz1hLGE9ZCkscC5pc0Z1bmN0aW9uKGEpPyhlPWsuY2FsbChhcmd1bWVudHMsMiksZj1mdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGMsZS5jb25jYXQoay5jYWxsKGFyZ3VtZW50cykpKX0sZi5ndWlkPWEuZ3VpZD1hLmd1aWR8fHAuZ3VpZCsrLGYpOmJ9LGFjY2VzczpmdW5jdGlvbihhLGMsZCxlLGYsZyxoKXt2YXIgaSxqPWQ9PW51bGwsaz0wLGw9YS5sZW5ndGg7aWYoZCYmdHlwZW9mIGQ9PSJvYmplY3QiKXtmb3IoayBpbiBkKXAuYWNjZXNzKGEsYyxrLGRba10sMSxnLGUpO2Y9MX1lbHNlIGlmKGUhPT1iKXtpPWg9PT1iJiZwLmlzRnVuY3Rpb24oZSksaiYmKGk/KGk9YyxjPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gaS5jYWxsKHAoYSksYyl9KTooYy5jYWxsKGEsZSksYz1udWxsKSk7aWYoYylmb3IoO2s8bDtrKyspYyhhW2tdLGQsaT9lLmNhbGwoYVtrXSxrLGMoYVtrXSxkKSk6ZSxoKTtmPTF9cmV0dXJuIGY/YTpqP2MuY2FsbChhKTpsP2MoYVswXSxkKTpnfSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19KSxwLnJlYWR5LnByb21pc2U9ZnVuY3Rpb24oYil7aWYoIWQpe2Q9cC5EZWZlcnJlZCgpO2lmKGUucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpc2V0VGltZW91dChwLnJlYWR5LDEpO2Vsc2UgaWYoZS5hZGRFdmVudExpc3RlbmVyKWUuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsRCwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixwLnJlYWR5LCExKTtlbHNle2UuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsRCksYS5hdHRhY2hFdmVudCgib25sb2FkIixwLnJlYWR5KTt2YXIgYz0hMTt0cnl7Yz1hLmZyYW1lRWxlbWVudD09bnVsbCYmZS5kb2N1bWVudEVsZW1lbnR9Y2F0Y2goZil7fWMmJmMuZG9TY3JvbGwmJmZ1bmN0aW9uIGcoKXtpZighcC5pc1JlYWR5KXt0cnl7Yy5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGEpe3JldHVybiBzZXRUaW1lb3V0KGcsNTApfXAucmVhZHkoKX19KCl9fXJldHVybiBkLnByb21pc2UoYil9LHAuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe0VbIltvYmplY3QgIitiKyJdIl09Yi50b0xvd2VyQ2FzZSgpfSksYz1wKGUpO3ZhciBGPXt9O3AuQ2FsbGJhY2tzPWZ1bmN0aW9uKGEpe2E9dHlwZW9mIGE9PSJzdHJpbmciP0ZbYV18fEcoYSk6cC5leHRlbmQoe30sYSk7dmFyIGMsZCxlLGYsZyxoLGk9W10saj0hYS5vbmNlJiZbXSxrPWZ1bmN0aW9uKGIpe2M9YS5tZW1vcnkmJmIsZD0hMCxoPWZ8fDAsZj0wLGc9aS5sZW5ndGgsZT0hMDtmb3IoO2kmJmg8ZztoKyspaWYoaVtoXS5hcHBseShiWzBdLGJbMV0pPT09ITEmJmEuc3RvcE9uRmFsc2Upe2M9ITE7YnJlYWt9ZT0hMSxpJiYoaj9qLmxlbmd0aCYmayhqLnNoaWZ0KCkpOmM/aT1bXTpsLmRpc2FibGUoKSl9LGw9e2FkZDpmdW5jdGlvbigpe2lmKGkpe3ZhciBiPWkubGVuZ3RoOyhmdW5jdGlvbiBkKGIpe3AuZWFjaChiLGZ1bmN0aW9uKGIsYyl7dmFyIGU9cC50eXBlKGMpO2U9PT0iZnVuY3Rpb24iJiYoIWEudW5pcXVlfHwhbC5oYXMoYykpP2kucHVzaChjKTpjJiZjLmxlbmd0aCYmZSE9PSJzdHJpbmciJiZkKGMpfSl9KShhcmd1bWVudHMpLGU/Zz1pLmxlbmd0aDpjJiYoZj1iLGsoYykpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gaSYmcC5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihhLGIpe3ZhciBjO3doaWxlKChjPXAuaW5BcnJheShiLGksYykpPi0xKWkuc3BsaWNlKGMsMSksZSYmKGM8PWcmJmctLSxjPD1oJiZoLS0pfSksdGhpc30saGFzOmZ1bmN0aW9uKGEpe3JldHVybiBwLmluQXJyYXkoYSxpKT4tMX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gaT1bXSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGk9aj1jPWIsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4haX0sbG9jazpmdW5jdGlvbigpe3JldHVybiBqPWIsY3x8bC5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWp9LGZpcmVXaXRoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9Ynx8W10sYj1bYSxiLnNsaWNlP2Iuc2xpY2UoKTpiXSxpJiYoIWR8fGopJiYoZT9qLnB1c2goYik6ayhiKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBsLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhZH19O3JldHVybiBsfSxwLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9W1sicmVzb2x2ZSIsImRvbmUiLHAuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIscC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlamVjdGVkIl0sWyJub3RpZnkiLCJwcm9ncmVzcyIscC5DYWxsYmFja3MoIm1lbW9yeSIpXV0sYz0icGVuZGluZyIsZD17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gY30sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGUuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSx0aGVuOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzO3JldHVybiBwLkRlZmVycmVkKGZ1bmN0aW9uKGMpe3AuZWFjaChiLGZ1bmN0aW9uKGIsZCl7dmFyIGY9ZFswXSxnPWFbYl07ZVtkWzFdXShwLmlzRnVuY3Rpb24oZyk/ZnVuY3Rpb24oKXt2YXIgYT1nLmFwcGx5KHRoaXMsYXJndW1lbnRzKTthJiZwLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9hLnByb21pc2UoKS5kb25lKGMucmVzb2x2ZSkuZmFpbChjLnJlamVjdCkucHJvZ3Jlc3MoYy5ub3RpZnkpOmNbZisiV2l0aCJdKHRoaXM9PT1lP2M6dGhpcyxbYV0pfTpjW2ZdKX0pLGE9bnVsbH0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtyZXR1cm4gYSE9bnVsbD9wLmV4dGVuZChhLGQpOmR9fSxlPXt9O3JldHVybiBkLnBpcGU9ZC50aGVuLHAuZWFjaChiLGZ1bmN0aW9uKGEsZil7dmFyIGc9ZlsyXSxoPWZbM107ZFtmWzFdXT1nLmFkZCxoJiZnLmFkZChmdW5jdGlvbigpe2M9aH0sYlthXjFdWzJdLmRpc2FibGUsYlsyXVsyXS5sb2NrKSxlW2ZbMF1dPWcuZmlyZSxlW2ZbMF0rIldpdGgiXT1nLmZpcmVXaXRofSksZC5wcm9taXNlKGUpLGEmJmEuY2FsbChlLGUpLGV9LHdoZW46ZnVuY3Rpb24oYSl7dmFyIGI9MCxjPWsuY2FsbChhcmd1bWVudHMpLGQ9Yy5sZW5ndGgsZT1kIT09MXx8YSYmcC5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/ZDowLGY9ZT09PTE/YTpwLkRlZmVycmVkKCksZz1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe2JbYV09dGhpcyxjW2FdPWFyZ3VtZW50cy5sZW5ndGg+MT9rLmNhbGwoYXJndW1lbnRzKTpkLGM9PT1oP2Yubm90aWZ5V2l0aChiLGMpOi0tZXx8Zi5yZXNvbHZlV2l0aChiLGMpfX0saCxpLGo7aWYoZD4xKXtoPW5ldyBBcnJheShkKSxpPW5ldyBBcnJheShkKSxqPW5ldyBBcnJheShkKTtmb3IoO2I8ZDtiKyspY1tiXSYmcC5pc0Z1bmN0aW9uKGNbYl0ucHJvbWlzZSk/Y1tiXS5wcm9taXNlKCkuZG9uZShnKGIsaixjKSkuZmFpbChmLnJlamVjdCkucHJvZ3Jlc3MoZyhiLGksaCkpOi0tZX1yZXR1cm4gZXx8Zi5yZXNvbHZlV2l0aChqLGMpLGYucHJvbWlzZSgpfX0pLHAuc3VwcG9ydD1mdW5jdGlvbigpe3ZhciBiLGMsZCxmLGcsaCxpLGosayxsLG0sbj1lLmNyZWF0ZUVsZW1lbnQoImRpdiIpO24uc2V0QXR0cmlidXRlKCJjbGFzc05hbWUiLCJ0Iiksbi5pbm5lckhUTUw9IiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsYz1uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIiksZD1uLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF0sZC5zdHlsZS5jc3NUZXh0PSJ0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNSI7aWYoIWN8fCFjLmxlbmd0aClyZXR1cm57fTtmPWUuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksZz1mLmFwcGVuZENoaWxkKGUuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLGg9bi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKVswXSxiPXtsZWFkaW5nV2hpdGVzcGFjZTpuLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0zLHRib2R5OiFuLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCxodG1sU2VyaWFsaXplOiEhbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpLmxlbmd0aCxzdHlsZTovdG9wLy50ZXN0KGQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxocmVmTm9ybWFsaXplZDpkLmdldEF0dHJpYnV0ZSgiaHJlZiIpPT09Ii9hIixvcGFjaXR5Oi9eMC41Ly50ZXN0KGQuc3R5bGUub3BhY2l0eSksY3NzRmxvYXQ6ISFkLnN0eWxlLmNzc0Zsb2F0LGNoZWNrT246aC52YWx1ZT09PSJvbiIsb3B0U2VsZWN0ZWQ6Zy5zZWxlY3RlZCxnZXRTZXRBdHRyaWJ1dGU6bi5jbGFzc05hbWUhPT0idCIsZW5jdHlwZTohIWUuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsaHRtbDVDbG9uZTplLmNyZWF0ZUVsZW1lbnQoIm5hdiIpLmNsb25lTm9kZSghMCkub3V0ZXJIVE1MIT09Ijw6bmF2PjwvOm5hdj4iLGJveE1vZGVsOmUuY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0IixzdWJtaXRCdWJibGVzOiEwLGNoYW5nZUJ1YmJsZXM6ITAsZm9jdXNpbkJ1YmJsZXM6ITEsZGVsZXRlRXhwYW5kbzohMCxub0Nsb25lRXZlbnQ6ITAsaW5saW5lQmxvY2tOZWVkc0xheW91dDohMSxzaHJpbmtXcmFwQmxvY2tzOiExLHJlbGlhYmxlTWFyZ2luUmlnaHQ6ITAsYm94U2l6aW5nUmVsaWFibGU6ITAscGl4ZWxQb3NpdGlvbjohMX0saC5jaGVja2VkPSEwLGIubm9DbG9uZUNoZWNrZWQ9aC5jbG9uZU5vZGUoITApLmNoZWNrZWQsZi5kaXNhYmxlZD0hMCxiLm9wdERpc2FibGVkPSFnLmRpc2FibGVkO3RyeXtkZWxldGUgbi50ZXN0fWNhdGNoKG8pe2IuZGVsZXRlRXhwYW5kbz0hMX0hbi5hZGRFdmVudExpc3RlbmVyJiZuLmF0dGFjaEV2ZW50JiZuLmZpcmVFdmVudCYmKG4uYXR0YWNoRXZlbnQoIm9uY2xpY2siLG09ZnVuY3Rpb24oKXtiLm5vQ2xvbmVFdmVudD0hMX0pLG4uY2xvbmVOb2RlKCEwKS5maXJlRXZlbnQoIm9uY2xpY2siKSxuLmRldGFjaEV2ZW50KCJvbmNsaWNrIixtKSksaD1lLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksaC52YWx1ZT0idCIsaC5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGIucmFkaW9WYWx1ZT1oLnZhbHVlPT09InQiLGguc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLGguc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLG4uYXBwZW5kQ2hpbGQoaCksaT1lLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxpLmFwcGVuZENoaWxkKG4ubGFzdENoaWxkKSxiLmNoZWNrQ2xvbmU9aS5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsYi5hcHBlbmRDaGVja2VkPWguY2hlY2tlZCxpLnJlbW92ZUNoaWxkKGgpLGkuYXBwZW5kQ2hpbGQobik7aWYobi5hdHRhY2hFdmVudClmb3IoayBpbntzdWJtaXQ6ITAsY2hhbmdlOiEwLGZvY3VzaW46ITB9KWo9Im9uIitrLGw9aiBpbiBuLGx8fChuLnNldEF0dHJpYnV0ZShqLCJyZXR1cm47IiksbD10eXBlb2YgbltqXT09ImZ1bmN0aW9uIiksYltrKyJCdWJibGVzIl09bDtyZXR1cm4gcChmdW5jdGlvbigpe3ZhciBjLGQsZixnLGg9InBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjsiLGk9ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO2lmKCFpKXJldHVybjtjPWUuY3JlYXRlRWxlbWVudCgiZGl2IiksYy5zdHlsZS5jc3NUZXh0PSJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3Bvc2l0aW9uOnN0YXRpYzt0b3A6MDttYXJnaW4tdG9wOjFweCIsaS5pbnNlcnRCZWZvcmUoYyxpLmZpcnN0Q2hpbGQpLGQ9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSxjLmFwcGVuZENoaWxkKGQpLGQuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZD48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IixmPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIiksZlswXS5zdHlsZS5jc3NUZXh0PSJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25lIixsPWZbMF0ub2Zmc2V0SGVpZ2h0PT09MCxmWzBdLnN0eWxlLmRpc3BsYXk9IiIsZlsxXS5zdHlsZS5kaXNwbGF5PSJub25lIixiLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cz1sJiZmWzBdLm9mZnNldEhlaWdodD09PTAsZC5pbm5lckhUTUw9IiIsZC5zdHlsZS5jc3NUZXh0PSJib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxcHg7Ym9yZGVyOjFweDtkaXNwbGF5OmJsb2NrO3dpZHRoOjRweDttYXJnaW4tdG9wOjElO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxJTsiLGIuYm94U2l6aW5nPWQub2Zmc2V0V2lkdGg9PT00LGIuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQ9aS5vZmZzZXRUb3AhPT0xLGEuZ2V0Q29tcHV0ZWRTdHlsZSYmKGIucGl4ZWxQb3NpdGlvbj0oYS5nZXRDb21wdXRlZFN0eWxlKGQsbnVsbCl8fHt9KS50b3AhPT0iMSUiLGIuYm94U2l6aW5nUmVsaWFibGU9KGEuZ2V0Q29tcHV0ZWRTdHlsZShkLG51bGwpfHx7d2lkdGg6IjRweCJ9KS53aWR0aD09PSI0cHgiLGc9ZS5jcmVhdGVFbGVtZW50KCJkaXYiKSxnLnN0eWxlLmNzc1RleHQ9ZC5zdHlsZS5jc3NUZXh0PWgsZy5zdHlsZS5tYXJnaW5SaWdodD1nLnN0eWxlLndpZHRoPSIwIixkLnN0eWxlLndpZHRoPSIxcHgiLGQuYXBwZW5kQ2hpbGQoZyksYi5yZWxpYWJsZU1hcmdpblJpZ2h0PSFwYXJzZUZsb2F0KChhLmdldENvbXB1dGVkU3R5bGUoZyxudWxsKXx8e30pLm1hcmdpblJpZ2h0KSksdHlwZW9mIGQuc3R5bGUuem9vbSE9InVuZGVmaW5lZCImJihkLmlubmVySFRNTD0iIixkLnN0eWxlLmNzc1RleHQ9aCsid2lkdGg6MXB4O3BhZGRpbmc6MXB4O2Rpc3BsYXk6aW5saW5lO3pvb206MSIsYi5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PWQub2Zmc2V0V2lkdGg9PT0zLGQuc3R5bGUuZGlzcGxheT0iYmxvY2siLGQuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiLGQuaW5uZXJIVE1MPSI8ZGl2PjwvZGl2PiIsZC5maXJzdENoaWxkLnN0eWxlLndpZHRoPSI1cHgiLGIuc2hyaW5rV3JhcEJsb2Nrcz1kLm9mZnNldFdpZHRoIT09MyxjLnN0eWxlLnpvb209MSksaS5yZW1vdmVDaGlsZChjKSxjPWQ9Zj1nPW51bGx9KSxpLnJlbW92ZUNoaWxkKG4pLGM9ZD1mPWc9aD1pPW49bnVsbCxifSgpO3ZhciBIPS8oPzpce1tcc1xTXSpcfXxcW1tcc1xTXSpcXSkkLyxJPS8oW0EtWl0pL2c7cC5leHRlbmQoe2NhY2hlOnt9LGRlbGV0ZWRJZHM6W10sdXVpZDowLGV4cGFuZG86ImpRdWVyeSIrKHAuZm4uanF1ZXJ5K01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLG5vRGF0YTp7ZW1iZWQ6ITAsb2JqZWN0OiJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLGFwcGxldDohMH0saGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gYT1hLm5vZGVUeXBlP3AuY2FjaGVbYVtwLmV4cGFuZG9dXTphW3AuZXhwYW5kb10sISFhJiYhSyhhKX0sZGF0YTpmdW5jdGlvbihhLGMsZCxlKXtpZighcC5hY2NlcHREYXRhKGEpKXJldHVybjt2YXIgZixnLGg9cC5leHBhbmRvLGk9dHlwZW9mIGM9PSJzdHJpbmciLGo9YS5ub2RlVHlwZSxrPWo/cC5jYWNoZTphLGw9aj9hW2hdOmFbaF0mJmg7aWYoKCFsfHwha1tsXXx8IWUmJiFrW2xdLmRhdGEpJiZpJiZkPT09YilyZXR1cm47bHx8KGo/YVtoXT1sPXAuZGVsZXRlZElkcy5wb3AoKXx8cC5ndWlkKys6bD1oKSxrW2xdfHwoa1tsXT17fSxqfHwoa1tsXS50b0pTT049cC5ub29wKSk7aWYodHlwZW9mIGM9PSJvYmplY3QifHx0eXBlb2YgYz09ImZ1bmN0aW9uIillP2tbbF09cC5leHRlbmQoa1tsXSxjKTprW2xdLmRhdGE9cC5leHRlbmQoa1tsXS5kYXRhLGMpO3JldHVybiBmPWtbbF0sZXx8KGYuZGF0YXx8KGYuZGF0YT17fSksZj1mLmRhdGEpLGQhPT1iJiYoZltwLmNhbWVsQ2FzZShjKV09ZCksaT8oZz1mW2NdLGc9PW51bGwmJihnPWZbcC5jYW1lbENhc2UoYyldKSk6Zz1mLGd9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiLGMpe2lmKCFwLmFjY2VwdERhdGEoYSkpcmV0dXJuO3ZhciBkLGUsZixnPWEubm9kZVR5cGUsaD1nP3AuY2FjaGU6YSxpPWc/YVtwLmV4cGFuZG9dOnAuZXhwYW5kbztpZighaFtpXSlyZXR1cm47aWYoYil7ZD1jP2hbaV06aFtpXS5kYXRhO2lmKGQpe3AuaXNBcnJheShiKXx8KGIgaW4gZD9iPVtiXTooYj1wLmNhbWVsQ2FzZShiKSxiIGluIGQ/Yj1bYl06Yj1iLnNwbGl0KCIgIikpKTtmb3IoZT0wLGY9Yi5sZW5ndGg7ZTxmO2UrKylkZWxldGUgZFtiW2VdXTtpZighKGM/SzpwLmlzRW1wdHlPYmplY3QpKGQpKXJldHVybn19aWYoIWMpe2RlbGV0ZSBoW2ldLmRhdGE7aWYoIUsoaFtpXSkpcmV0dXJufWc/cC5jbGVhbkRhdGEoW2FdLCEwKTpwLnN1cHBvcnQuZGVsZXRlRXhwYW5kb3x8aCE9aC53aW5kb3c/ZGVsZXRlIGhbaV06aFtpXT1udWxsfSxfZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHAuZGF0YShhLGIsYywhMCl9LGFjY2VwdERhdGE6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZSYmcC5ub0RhdGFbYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtyZXR1cm4hYnx8YiE9PSEwJiZhLmdldEF0dHJpYnV0ZSgiY2xhc3NpZCIpPT09Yn19KSxwLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGMpe3ZhciBkLGUsZixnLGgsaT10aGlzWzBdLGo9MCxrPW51bGw7aWYoYT09PWIpe2lmKHRoaXMubGVuZ3RoKXtrPXAuZGF0YShpKTtpZihpLm5vZGVUeXBlPT09MSYmIXAuX2RhdGEoaSwicGFyc2VkQXR0cnMiKSl7Zj1pLmF0dHJpYnV0ZXM7Zm9yKGg9Zi5sZW5ndGg7ajxoO2orKylnPWZbal0ubmFtZSxnLmluZGV4T2YoImRhdGEtIil8fChnPXAuY2FtZWxDYXNlKGcuc3Vic3RyaW5nKDUpKSxKKGksZyxrW2ddKSk7cC5fZGF0YShpLCJwYXJzZWRBdHRycyIsITApfX1yZXR1cm4ga31yZXR1cm4gdHlwZW9mIGE9PSJvYmplY3QiP3RoaXMuZWFjaChmdW5jdGlvbigpe3AuZGF0YSh0aGlzLGEpfSk6KGQ9YS5zcGxpdCgiLiIsMiksZFsxXT1kWzFdPyIuIitkWzFdOiIiLGU9ZFsxXSsiISIscC5hY2Nlc3ModGhpcyxmdW5jdGlvbihjKXtpZihjPT09YilyZXR1cm4gaz10aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIitlLFtkWzBdXSksaz09PWImJmkmJihrPXAuZGF0YShpLGEpLGs9SihpLGEsaykpLGs9PT1iJiZkWzFdP3RoaXMuZGF0YShkWzBdKTprO2RbMV09Yyx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1wKHRoaXMpO2IudHJpZ2dlckhhbmRsZXIoInNldERhdGEiK2UsZCkscC5kYXRhKHRoaXMsYSxjKSxiLnRyaWdnZXJIYW5kbGVyKCJjaGFuZ2VEYXRhIitlLGQpfSl9LG51bGwsYyxhcmd1bWVudHMubGVuZ3RoPjEsbnVsbCwhMSkpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtwLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLHAuZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7aWYoYSlyZXR1cm4gYj0oYnx8ImZ4IikrInF1ZXVlIixkPXAuX2RhdGEoYSxiKSxjJiYoIWR8fHAuaXNBcnJheShjKT9kPXAuX2RhdGEoYSxiLHAubWFrZUFycmF5KGMpKTpkLnB1c2goYykpLGR8fFtdfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPXAucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9cC5fcXVldWVIb29rcyhhLGIpLGc9ZnVuY3Rpb24oKXtwLmRlcXVldWUoYSxiKX07ZT09PSJpbnByb2dyZXNzIiYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKGI9PT0iZngiJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iKyJxdWV1ZUhvb2tzIjtyZXR1cm4gcC5fZGF0YShhLGMpfHxwLl9kYXRhKGEsYyx7ZW1wdHk6cC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7cC5yZW1vdmVEYXRhKGEsYisicXVldWUiLCEwKSxwLnJlbW92ZURhdGEoYSxjLCEwKX0pfSl9fSkscC5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9MjtyZXR1cm4gdHlwZW9mIGEhPSJzdHJpbmciJiYoYz1hLGE9ImZ4IixkLS0pLGFyZ3VtZW50cy5sZW5ndGg8ZD9wLnF1ZXVlKHRoaXNbMF0sYSk6Yz09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj1wLnF1ZXVlKHRoaXMsYSxjKTtwLl9xdWV1ZUhvb2tzKHRoaXMsYSksYT09PSJmeCImJmJbMF0hPT0iaW5wcm9ncmVzcyImJnAuZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3AuZGVxdWV1ZSh0aGlzLGEpfSl9LGRlbGF5OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9cC5meD9wLmZ4LnNwZWVkc1thXXx8YTphLGI9Ynx8ImZ4Iix0aGlzLnF1ZXVlKGIsZnVuY3Rpb24oYixjKXt2YXIgZD1zZXRUaW1lb3V0KGIsYSk7Yy5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGQpfX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnF1ZXVlKGF8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGEsYyl7dmFyIGQsZT0xLGY9cC5EZWZlcnJlZCgpLGc9dGhpcyxoPXRoaXMubGVuZ3RoLGk9ZnVuY3Rpb24oKXstLWV8fGYucmVzb2x2ZVdpdGgoZyxbZ10pfTt0eXBlb2YgYSE9InN0cmluZyImJihjPWEsYT1iKSxhPWF8fCJmeCI7d2hpbGUoaC0tKWQ9cC5fZGF0YShnW2hdLGErInF1ZXVlSG9va3MiKSxkJiZkLmVtcHR5JiYoZSsrLGQuZW1wdHkuYWRkKGkpKTtyZXR1cm4gaSgpLGYucHJvbWlzZShjKX19KTt2YXIgTCxNLE4sTz0vW1x0XHJcbl0vZyxQPS9cci9nLFE9L14oPzpidXR0b258aW5wdXQpJC9pLFI9L14oPzpidXR0b258aW5wdXR8b2JqZWN0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksUz0vXmEoPzpyZWF8KSQvaSxUPS9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5jfGNoZWNrZWR8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWR8c2VsZWN0ZWQpJC9pLFU9cC5zdXBwb3J0LmdldFNldEF0dHJpYnV0ZTtwLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiBwLmFjY2Vzcyh0aGlzLHAuYXR0cixhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cC5yZW1vdmVBdHRyKHRoaXMsYSl9KX0scHJvcDpmdW5jdGlvbihhLGIpe3JldHVybiBwLmFjY2Vzcyh0aGlzLHAucHJvcCxhLGIsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihhKXtyZXR1cm4gYT1wLnByb3BGaXhbYV18fGEsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbYV09YixkZWxldGUgdGhpc1thXX1jYXRjaChjKXt9fSl9LGFkZENsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoO2lmKHAuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3AodGhpcykuYWRkQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoYSYmdHlwZW9mIGE9PSJzdHJpbmciKXtiPWEuc3BsaXQocyk7Zm9yKGM9MCxkPXRoaXMubGVuZ3RoO2M8ZDtjKyspe2U9dGhpc1tjXTtpZihlLm5vZGVUeXBlPT09MSlpZighZS5jbGFzc05hbWUmJmIubGVuZ3RoPT09MSllLmNsYXNzTmFtZT1hO2Vsc2V7Zj0iICIrZS5jbGFzc05hbWUrIiAiO2ZvcihnPTAsaD1iLmxlbmd0aDtnPGg7ZysrKWYuaW5kZXhPZigiICIrYltnXSsiICIpPDAmJihmKz1iW2ddKyIgIik7ZS5jbGFzc05hbWU9cC50cmltKGYpfX19cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe3ZhciBjLGQsZSxmLGcsaCxpO2lmKHAuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3AodGhpcykucmVtb3ZlQ2xhc3MoYS5jYWxsKHRoaXMsYix0aGlzLmNsYXNzTmFtZSkpfSk7aWYoYSYmdHlwZW9mIGE9PSJzdHJpbmcifHxhPT09Yil7Yz0oYXx8IiIpLnNwbGl0KHMpO2ZvcihoPTAsaT10aGlzLmxlbmd0aDtoPGk7aCsrKXtlPXRoaXNbaF07aWYoZS5ub2RlVHlwZT09PTEmJmUuY2xhc3NOYW1lKXtkPSgiICIrZS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKE8sIiAiKTtmb3IoZj0wLGc9Yy5sZW5ndGg7ZjxnO2YrKyl3aGlsZShkLmluZGV4T2YoIiAiK2NbZl0rIiAiKT49MClkPWQucmVwbGFjZSgiICIrY1tmXSsiICIsIiAiKTtlLmNsYXNzTmFtZT1hP3AudHJpbShkKToiIn19fXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBhLGQ9dHlwZW9mIGI9PSJib29sZWFuIjtyZXR1cm4gcC5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihjKXtwKHRoaXMpLnRvZ2dsZUNsYXNzKGEuY2FsbCh0aGlzLGMsdGhpcy5jbGFzc05hbWUsYiksYil9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihjPT09InN0cmluZyIpe3ZhciBlLGY9MCxnPXAodGhpcyksaD1iLGk9YS5zcGxpdChzKTt3aGlsZShlPWlbZisrXSloPWQ/aDohZy5oYXNDbGFzcyhlKSxnW2g/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXShlKX1lbHNlIGlmKGM9PT0idW5kZWZpbmVkInx8Yz09PSJib29sZWFuIil0aGlzLmNsYXNzTmFtZSYmcC5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjpwLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiJ9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGI9IiAiK2ErIiAiLGM9MCxkPXRoaXMubGVuZ3RoO2Zvcig7YzxkO2MrKylpZih0aGlzW2NdLm5vZGVUeXBlPT09MSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoTywiICIpLmluZGV4T2YoYik+PTApcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZj10aGlzWzBdO2lmKCFhcmd1bWVudHMubGVuZ3RoKXtpZihmKXJldHVybiBjPXAudmFsSG9va3NbZi50eXBlXXx8cC52YWxIb29rc1tmLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGMmJiJnZXQiaW4gYyYmKGQ9Yy5nZXQoZiwidmFsdWUiKSkhPT1iP2Q6KGQ9Zi52YWx1ZSx0eXBlb2YgZD09InN0cmluZyI/ZC5yZXBsYWNlKFAsIiIpOmQ9PW51bGw/IiI6ZCk7cmV0dXJufXJldHVybiBlPXAuaXNGdW5jdGlvbihhKSx0aGlzLmVhY2goZnVuY3Rpb24oZCl7dmFyIGYsZz1wKHRoaXMpO2lmKHRoaXMubm9kZVR5cGUhPT0xKXJldHVybjtlP2Y9YS5jYWxsKHRoaXMsZCxnLnZhbCgpKTpmPWEsZj09bnVsbD9mPSIiOnR5cGVvZiBmPT0ibnVtYmVyIj9mKz0iIjpwLmlzQXJyYXkoZikmJihmPXAubWFwKGYsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6YSsiIn0pKSxjPXAudmFsSG9va3NbdGhpcy50eXBlXXx8cC52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldO2lmKCFjfHwhKCJzZXQiaW4gYyl8fGMuc2V0KHRoaXMsZiwidmFsdWUiKT09PWIpdGhpcy52YWx1ZT1mfSl9fSkscC5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihhKXt2YXIgYj1hLmF0dHJpYnV0ZXMudmFsdWU7cmV0dXJuIWJ8fGIuc3BlY2lmaWVkP2EudmFsdWU6YS50ZXh0fX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZj1hLnNlbGVjdGVkSW5kZXgsZz1bXSxoPWEub3B0aW9ucyxpPWEudHlwZT09PSJzZWxlY3Qtb25lIjtpZihmPDApcmV0dXJuIG51bGw7Yz1pP2Y6MCxkPWk/ZisxOmgubGVuZ3RoO2Zvcig7YzxkO2MrKyl7ZT1oW2NdO2lmKGUuc2VsZWN0ZWQmJihwLnN1cHBvcnQub3B0RGlzYWJsZWQ/IWUuZGlzYWJsZWQ6ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIik9PT1udWxsKSYmKCFlLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFwLm5vZGVOYW1lKGUucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2I9cChlKS52YWwoKTtpZihpKXJldHVybiBiO2cucHVzaChiKX19cmV0dXJuIGkmJiFnLmxlbmd0aCYmaC5sZW5ndGg/cChoW2ZdKS52YWwoKTpnfSxzZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1wLm1ha2VBcnJheShiKTtyZXR1cm4gcChhKS5maW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD1wLmluQXJyYXkocCh0aGlzKS52YWwoKSxjKT49MH0pLGMubGVuZ3RofHwoYS5zZWxlY3RlZEluZGV4PS0xKSxjfX19LGF0dHJGbjp7fSxhdHRyOmZ1bmN0aW9uKGEsYyxkLGUpe3ZhciBmLGcsaCxpPWEubm9kZVR5cGU7aWYoIWF8fGk9PT0zfHxpPT09OHx8aT09PTIpcmV0dXJuO2lmKGUmJnAuaXNGdW5jdGlvbihwLmZuW2NdKSlyZXR1cm4gcChhKVtjXShkKTtpZih0eXBlb2YgYS5nZXRBdHRyaWJ1dGU9PSJ1bmRlZmluZWQiKXJldHVybiBwLnByb3AoYSxjLGQpO2g9aSE9PTF8fCFwLmlzWE1MRG9jKGEpLGgmJihjPWMudG9Mb3dlckNhc2UoKSxnPXAuYXR0ckhvb2tzW2NdfHwoVC50ZXN0KGMpP006TCkpO2lmKGQhPT1iKXtpZihkPT09bnVsbCl7cC5yZW1vdmVBdHRyKGEsYyk7cmV0dXJufXJldHVybiBnJiYic2V0ImluIGcmJmgmJihmPWcuc2V0KGEsZCxjKSkhPT1iP2Y6KGEuc2V0QXR0cmlidXRlKGMsZCsiIiksZCl9cmV0dXJuIGcmJiJnZXQiaW4gZyYmaCYmKGY9Zy5nZXQoYSxjKSkhPT1udWxsP2Y6KGY9YS5nZXRBdHRyaWJ1dGUoYyksZj09PW51bGw/YjpmKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmLGc9MDtpZihiJiZhLm5vZGVUeXBlPT09MSl7ZD1iLnNwbGl0KHMpO2Zvcig7ZzxkLmxlbmd0aDtnKyspZT1kW2ddLGUmJihjPXAucHJvcEZpeFtlXXx8ZSxmPVQudGVzdChlKSxmfHxwLmF0dHIoYSxlLCIiKSxhLnJlbW92ZUF0dHJpYnV0ZShVP2U6YyksZiYmYyBpbiBhJiYoYVtjXT0hMSkpfX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oYSxiKXtpZihRLnRlc3QoYS5ub2RlTmFtZSkmJmEucGFyZW50Tm9kZSlwLmVycm9yKCJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiKTtlbHNlIGlmKCFwLnN1cHBvcnQucmFkaW9WYWx1ZSYmYj09PSJyYWRpbyImJnAubm9kZU5hbWUoYSwiaW5wdXQiKSl7dmFyIGM9YS52YWx1ZTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoInR5cGUiLGIpLGMmJihhLnZhbHVlPWMpLGJ9fX0sdmFsdWU6e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBMJiZwLm5vZGVOYW1lKGEsImJ1dHRvbiIpP0wuZ2V0KGEsYik6YiBpbiBhP2EudmFsdWU6bnVsbH0sc2V0OmZ1bmN0aW9uKGEsYixjKXtpZihMJiZwLm5vZGVOYW1lKGEsImJ1dHRvbiIpKXJldHVybiBMLnNldChhLGIsYyk7YS52YWx1ZT1ifX19LHByb3BGaXg6e3RhYmluZGV4OiJ0YWJJbmRleCIscmVhZG9ubHk6InJlYWRPbmx5IiwiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIixtYXhsZW5ndGg6Im1heExlbmd0aCIsY2VsbHNwYWNpbmc6ImNlbGxTcGFjaW5nIixjZWxscGFkZGluZzoiY2VsbFBhZGRpbmciLHJvd3NwYW46InJvd1NwYW4iLGNvbHNwYW46ImNvbFNwYW4iLHVzZW1hcDoidXNlTWFwIixmcmFtZWJvcmRlcjoiZnJhbWVCb3JkZXIiLGNvbnRlbnRlZGl0YWJsZToiY29udGVudEVkaXRhYmxlIn0scHJvcDpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZixnLGg9YS5ub2RlVHlwZTtpZighYXx8aD09PTN8fGg9PT04fHxoPT09MilyZXR1cm47cmV0dXJuIGc9aCE9PTF8fCFwLmlzWE1MRG9jKGEpLGcmJihjPXAucHJvcEZpeFtjXXx8YyxmPXAucHJvcEhvb2tzW2NdKSxkIT09Yj9mJiYic2V0ImluIGYmJihlPWYuc2V0KGEsZCxjKSkhPT1iP2U6YVtjXT1kOmYmJiJnZXQiaW4gZiYmKGU9Zi5nZXQoYSxjKSkhPT1udWxsP2U6YVtjXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBjPWEuZ2V0QXR0cmlidXRlTm9kZSgidGFiaW5kZXgiKTtyZXR1cm4gYyYmYy5zcGVjaWZpZWQ/cGFyc2VJbnQoYy52YWx1ZSwxMCk6Ui50ZXN0KGEubm9kZU5hbWUpfHxTLnRlc3QoYS5ub2RlTmFtZSkmJmEuaHJlZj8wOmJ9fX19KSxNPXtnZXQ6ZnVuY3Rpb24oYSxjKXt2YXIgZCxlPXAucHJvcChhLGMpO3JldHVybiBlPT09ITB8fHR5cGVvZiBlIT0iYm9vbGVhbiImJihkPWEuZ2V0QXR0cmlidXRlTm9kZShjKSkmJmQubm9kZVZhbHVlIT09ITE/Yy50b0xvd2VyQ2FzZSgpOmJ9LHNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGI9PT0hMT9wLnJlbW92ZUF0dHIoYSxjKTooZD1wLnByb3BGaXhbY118fGMsZCBpbiBhJiYoYVtkXT0hMCksYS5zZXRBdHRyaWJ1dGUoYyxjLnRvTG93ZXJDYXNlKCkpKSxjfX0sVXx8KE49e25hbWU6ITAsaWQ6ITAsY29vcmRzOiEwfSxMPXAudmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oYSxjKXt2YXIgZDtyZXR1cm4gZD1hLmdldEF0dHJpYnV0ZU5vZGUoYyksZCYmKE5bY10/ZC52YWx1ZSE9PSIiOmQuc3BlY2lmaWVkKT9kLnZhbHVlOmJ9LHNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpO3JldHVybiBkfHwoZD1lLmNyZWF0ZUF0dHJpYnV0ZShjKSxhLnNldEF0dHJpYnV0ZU5vZGUoZCkpLGQudmFsdWU9YisiIn19LHAuZWFjaChbIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxiKXtwLmF0dHJIb29rc1tiXT1wLmV4dGVuZChwLmF0dHJIb29rc1tiXSx7c2V0OmZ1bmN0aW9uKGEsYyl7aWYoYz09PSIiKXJldHVybiBhLnNldEF0dHJpYnV0ZShiLCJhdXRvIiksY319KX0pLHAuYXR0ckhvb2tzLmNvbnRlbnRlZGl0YWJsZT17Z2V0OkwuZ2V0LHNldDpmdW5jdGlvbihhLGIsYyl7Yj09PSIiJiYoYj0iZmFsc2UiKSxMLnNldChhLGIsYyl9fSkscC5zdXBwb3J0LmhyZWZOb3JtYWxpemVkfHxwLmVhY2goWyJocmVmIiwic3JjIiwid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihhLGMpe3AuYXR0ckhvb2tzW2NdPXAuZXh0ZW5kKHAuYXR0ckhvb2tzW2NdLHtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGQ9YS5nZXRBdHRyaWJ1dGUoYywyKTtyZXR1cm4gZD09PW51bGw/YjpkfX0pfSkscC5zdXBwb3J0LnN0eWxlfHwocC5hdHRySG9va3Muc3R5bGU9e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5zdHlsZS5jc3NUZXh0LnRvTG93ZXJDYXNlKCl8fGJ9LHNldDpmdW5jdGlvbihhLGIpe3JldHVybiBhLnN0eWxlLmNzc1RleHQ9YisiIn19KSxwLnN1cHBvcnQub3B0U2VsZWN0ZWR8fChwLnByb3BIb29rcy5zZWxlY3RlZD1wLmV4dGVuZChwLnByb3BIb29rcy5zZWxlY3RlZCx7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEucGFyZW50Tm9kZTtyZXR1cm4gYiYmKGIuc2VsZWN0ZWRJbmRleCxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KSxudWxsfX0pKSxwLnN1cHBvcnQuZW5jdHlwZXx8KHAucHJvcEZpeC5lbmN0eXBlPSJlbmNvZGluZyIpLHAuc3VwcG9ydC5jaGVja09ufHxwLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtwLnZhbEhvb2tzW3RoaXNdPXtnZXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPT09bnVsbD8ib24iOmEudmFsdWV9fX0pLHAuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe3AudmFsSG9va3NbdGhpc109cC5leHRlbmQocC52YWxIb29rc1t0aGlzXSx7c2V0OmZ1bmN0aW9uKGEsYil7aWYocC5pc0FycmF5KGIpKXJldHVybiBhLmNoZWNrZWQ9cC5pbkFycmF5KHAoYSkudmFsKCksYik+PTB9fSl9KTt2YXIgVj0vXig/OnRleHRhcmVhfGlucHV0fHNlbGVjdCkkL2ksVz0vXihbXlwuXSp8KSg/OlwuKC4rKXwpJC8sWD0vKD86Xnxccylob3ZlcihcLlxTK3wpXGIvLFk9L15rZXkvLFo9L14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLCQ9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLF89ZnVuY3Rpb24oYSl7cmV0dXJuIHAuZXZlbnQuc3BlY2lhbC5ob3Zlcj9hOmEucmVwbGFjZShYLCJtb3VzZWVudGVyJDEgbW91c2VsZWF2ZSQxIil9O3AuZXZlbnQ9e2FkZDpmdW5jdGlvbihhLGMsZCxlLGYpe3ZhciBnLGgsaSxqLGssbCxtLG4sbyxxLHI7aWYoYS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04fHwhY3x8IWR8fCEoZz1wLl9kYXRhKGEpKSlyZXR1cm47ZC5oYW5kbGVyJiYobz1kLGQ9by5oYW5kbGVyLGY9by5zZWxlY3RvciksZC5ndWlkfHwoZC5ndWlkPXAuZ3VpZCsrKSxpPWcuZXZlbnRzLGl8fChnLmV2ZW50cz1pPXt9KSxoPWcuaGFuZGxlLGh8fChnLmhhbmRsZT1oPWZ1bmN0aW9uKGEpe3JldHVybiB0eXBlb2YgcCE9InVuZGVmaW5lZCImJighYXx8cC5ldmVudC50cmlnZ2VyZWQhPT1hLnR5cGUpP3AuZXZlbnQuZGlzcGF0Y2guYXBwbHkoaC5lbGVtLGFyZ3VtZW50cyk6Yn0saC5lbGVtPWEpLGM9cC50cmltKF8oYykpLnNwbGl0KCIgIik7Zm9yKGo9MDtqPGMubGVuZ3RoO2orKyl7az1XLmV4ZWMoY1tqXSl8fFtdLGw9a1sxXSxtPShrWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCkscj1wLmV2ZW50LnNwZWNpYWxbbF18fHt9LGw9KGY/ci5kZWxlZ2F0ZVR5cGU6ci5iaW5kVHlwZSl8fGwscj1wLmV2ZW50LnNwZWNpYWxbbF18fHt9LG49cC5leHRlbmQoe3R5cGU6bCxvcmlnVHlwZTprWzFdLGRhdGE6ZSxoYW5kbGVyOmQsZ3VpZDpkLmd1aWQsc2VsZWN0b3I6ZixuZWVkc0NvbnRleHQ6ZiYmcC5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KGYpLG5hbWVzcGFjZTptLmpvaW4oIi4iKX0sbykscT1pW2xdO2lmKCFxKXtxPWlbbF09W10scS5kZWxlZ2F0ZUNvdW50PTA7aWYoIXIuc2V0dXB8fHIuc2V0dXAuY2FsbChhLGUsbSxoKT09PSExKWEuYWRkRXZlbnRMaXN0ZW5lcj9hLmFkZEV2ZW50TGlzdGVuZXIobCxoLCExKTphLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbiIrbCxoKX1yLmFkZCYmKHIuYWRkLmNhbGwoYSxuKSxuLmhhbmRsZXIuZ3VpZHx8KG4uaGFuZGxlci5ndWlkPWQuZ3VpZCkpLGY/cS5zcGxpY2UocS5kZWxlZ2F0ZUNvdW50KyssMCxuKTpxLnB1c2gobikscC5ldmVudC5nbG9iYWxbbF09ITB9YT1udWxsfSxnbG9iYWw6e30scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scSxyPXAuaGFzRGF0YShhKSYmcC5fZGF0YShhKTtpZighcnx8IShtPXIuZXZlbnRzKSlyZXR1cm47Yj1wLnRyaW0oXyhifHwiIikpLnNwbGl0KCIgIik7Zm9yKGY9MDtmPGIubGVuZ3RoO2YrKyl7Zz1XLmV4ZWMoYltmXSl8fFtdLGg9aT1nWzFdLGo9Z1syXTtpZighaCl7Zm9yKGggaW4gbSlwLmV2ZW50LnJlbW92ZShhLGgrYltmXSxjLGQsITApO2NvbnRpbnVlfW49cC5ldmVudC5zcGVjaWFsW2hdfHx7fSxoPShkP24uZGVsZWdhdGVUeXBlOm4uYmluZFR5cGUpfHxoLG89bVtoXXx8W10saz1vLmxlbmd0aCxqPWo/bmV3IFJlZ0V4cCgiKF58XFwuKSIrai5zcGxpdCgiLiIpLnNvcnQoKS5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsO2ZvcihsPTA7bDxvLmxlbmd0aDtsKyspcT1vW2xdLChlfHxpPT09cS5vcmlnVHlwZSkmJighY3x8Yy5ndWlkPT09cS5ndWlkKSYmKCFqfHxqLnRlc3QocS5uYW1lc3BhY2UpKSYmKCFkfHxkPT09cS5zZWxlY3Rvcnx8ZD09PSIqKiImJnEuc2VsZWN0b3IpJiYoby5zcGxpY2UobC0tLDEpLHEuc2VsZWN0b3ImJm8uZGVsZWdhdGVDb3VudC0tLG4ucmVtb3ZlJiZuLnJlbW92ZS5jYWxsKGEscSkpO28ubGVuZ3RoPT09MCYmayE9PW8ubGVuZ3RoJiYoKCFuLnRlYXJkb3dufHxuLnRlYXJkb3duLmNhbGwoYSxqLHIuaGFuZGxlKT09PSExKSYmcC5yZW1vdmVFdmVudChhLGgsci5oYW5kbGUpLGRlbGV0ZSBtW2hdKX1wLmlzRW1wdHlPYmplY3QobSkmJihkZWxldGUgci5oYW5kbGUscC5yZW1vdmVEYXRhKGEsImV2ZW50cyIsITApKX0sY3VzdG9tRXZlbnQ6e2dldERhdGE6ITAsc2V0RGF0YTohMCxjaGFuZ2VEYXRhOiEwfSx0cmlnZ2VyOmZ1bmN0aW9uKGMsZCxmLGcpe2lmKCFmfHxmLm5vZGVUeXBlIT09MyYmZi5ub2RlVHlwZSE9PTgpe3ZhciBoLGksaixrLGwsbSxuLG8scSxyLHM9Yy50eXBlfHxjLHQ9W107aWYoJC50ZXN0KHMrcC5ldmVudC50cmlnZ2VyZWQpKXJldHVybjtzLmluZGV4T2YoIiEiKT49MCYmKHM9cy5zbGljZSgwLC0xKSxpPSEwKSxzLmluZGV4T2YoIi4iKT49MCYmKHQ9cy5zcGxpdCgiLiIpLHM9dC5zaGlmdCgpLHQuc29ydCgpKTtpZigoIWZ8fHAuZXZlbnQuY3VzdG9tRXZlbnRbc10pJiYhcC5ldmVudC5nbG9iYWxbc10pcmV0dXJuO2M9dHlwZW9mIGM9PSJvYmplY3QiP2NbcC5leHBhbmRvXT9jOm5ldyBwLkV2ZW50KHMsYyk6bmV3IHAuRXZlbnQocyksYy50eXBlPXMsYy5pc1RyaWdnZXI9ITAsYy5leGNsdXNpdmU9aSxjLm5hbWVzcGFjZT10LmpvaW4oIi4iKSxjLm5hbWVzcGFjZV9yZT1jLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIit0LmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsbT1zLmluZGV4T2YoIjoiKTwwPyJvbiIrczoiIjtpZighZil7aD1wLmNhY2hlO2ZvcihqIGluIGgpaFtqXS5ldmVudHMmJmhbal0uZXZlbnRzW3NdJiZwLmV2ZW50LnRyaWdnZXIoYyxkLGhbal0uaGFuZGxlLmVsZW0sITApO3JldHVybn1jLnJlc3VsdD1iLGMudGFyZ2V0fHwoYy50YXJnZXQ9ZiksZD1kIT1udWxsP3AubWFrZUFycmF5KGQpOltdLGQudW5zaGlmdChjKSxuPXAuZXZlbnQuc3BlY2lhbFtzXXx8e307aWYobi50cmlnZ2VyJiZuLnRyaWdnZXIuYXBwbHkoZixkKT09PSExKXJldHVybjtxPVtbZixuLmJpbmRUeXBlfHxzXV07aWYoIWcmJiFuLm5vQnViYmxlJiYhcC5pc1dpbmRvdyhmKSl7cj1uLmRlbGVnYXRlVHlwZXx8cyxrPSQudGVzdChyK3MpP2Y6Zi5wYXJlbnROb2RlO2ZvcihsPWY7aztrPWsucGFyZW50Tm9kZSlxLnB1c2goW2sscl0pLGw9aztsPT09KGYub3duZXJEb2N1bWVudHx8ZSkmJnEucHVzaChbbC5kZWZhdWx0Vmlld3x8bC5wYXJlbnRXaW5kb3d8fGEscl0pfWZvcihqPTA7ajxxLmxlbmd0aCYmIWMuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtqKyspaz1xW2pdWzBdLGMudHlwZT1xW2pdWzFdLG89KHAuX2RhdGEoaywiZXZlbnRzIil8fHt9KVtjLnR5cGVdJiZwLl9kYXRhKGssImhhbmRsZSIpLG8mJm8uYXBwbHkoayxkKSxvPW0mJmtbbV0sbyYmcC5hY2NlcHREYXRhKGspJiZvLmFwcGx5JiZvLmFwcGx5KGssZCk9PT0hMSYmYy5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBjLnR5cGU9cywhZyYmIWMuaXNEZWZhdWx0UHJldmVudGVkKCkmJighbi5fZGVmYXVsdHx8bi5fZGVmYXVsdC5hcHBseShmLm93bmVyRG9jdW1lbnQsZCk9PT0hMSkmJihzIT09ImNsaWNrInx8IXAubm9kZU5hbWUoZiwiYSIpKSYmcC5hY2NlcHREYXRhKGYpJiZtJiZmW3NdJiYocyE9PSJmb2N1cyImJnMhPT0iYmx1ciJ8fGMudGFyZ2V0Lm9mZnNldFdpZHRoIT09MCkmJiFwLmlzV2luZG93KGYpJiYobD1mW21dLGwmJihmW21dPW51bGwpLHAuZXZlbnQudHJpZ2dlcmVkPXMsZltzXSgpLHAuZXZlbnQudHJpZ2dlcmVkPWIsbCYmKGZbbV09bCkpLGMucmVzdWx0fXJldHVybn0sZGlzcGF0Y2g6ZnVuY3Rpb24oYyl7Yz1wLmV2ZW50LmZpeChjfHxhLmV2ZW50KTt2YXIgZCxlLGYsZyxoLGksaixsLG0sbixvPShwLl9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbYy50eXBlXXx8W10scT1vLmRlbGVnYXRlQ291bnQscj1rLmNhbGwoYXJndW1lbnRzKSxzPSFjLmV4Y2x1c2l2ZSYmIWMubmFtZXNwYWNlLHQ9cC5ldmVudC5zcGVjaWFsW2MudHlwZV18fHt9LHU9W107clswXT1jLGMuZGVsZWdhdGVUYXJnZXQ9dGhpcztpZih0LnByZURpc3BhdGNoJiZ0LnByZURpc3BhdGNoLmNhbGwodGhpcyxjKT09PSExKXJldHVybjtpZihxJiYoIWMuYnV0dG9ufHxjLnR5cGUhPT0iY2xpY2siKSlmb3IoZj1jLnRhcmdldDtmIT10aGlzO2Y9Zi5wYXJlbnROb2RlfHx0aGlzKWlmKGYuZGlzYWJsZWQhPT0hMHx8Yy50eXBlIT09ImNsaWNrIil7aD17fSxqPVtdO2ZvcihkPTA7ZDxxO2QrKylsPW9bZF0sbT1sLnNlbGVjdG9yLGhbbV09PT1iJiYoaFttXT1sLm5lZWRzQ29udGV4dD9wKG0sdGhpcykuaW5kZXgoZik+PTA6cC5maW5kKG0sdGhpcyxudWxsLFtmXSkubGVuZ3RoKSxoW21dJiZqLnB1c2gobCk7ai5sZW5ndGgmJnUucHVzaCh7ZWxlbTpmLG1hdGNoZXM6an0pfW8ubGVuZ3RoPnEmJnUucHVzaCh7ZWxlbTp0aGlzLG1hdGNoZXM6by5zbGljZShxKX0pO2ZvcihkPTA7ZDx1Lmxlbmd0aCYmIWMuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtkKyspe2k9dVtkXSxjLmN1cnJlbnRUYXJnZXQ9aS5lbGVtO2ZvcihlPTA7ZTxpLm1hdGNoZXMubGVuZ3RoJiYhYy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpO2UrKyl7bD1pLm1hdGNoZXNbZV07aWYoc3x8IWMubmFtZXNwYWNlJiYhbC5uYW1lc3BhY2V8fGMubmFtZXNwYWNlX3JlJiZjLm5hbWVzcGFjZV9yZS50ZXN0KGwubmFtZXNwYWNlKSljLmRhdGE9bC5kYXRhLGMuaGFuZGxlT2JqPWwsZz0oKHAuZXZlbnQuc3BlY2lhbFtsLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8bC5oYW5kbGVyKS5hcHBseShpLmVsZW0sciksZyE9PWImJihjLnJlc3VsdD1nLGc9PT0hMSYmKGMucHJldmVudERlZmF1bHQoKSxjLnN0b3BQcm9wYWdhdGlvbigpKSl9fXJldHVybiB0LnBvc3REaXNwYXRjaCYmdC5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLGMpLGMucmVzdWx0fSxwcm9wczoiYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEud2hpY2g9PW51bGwmJihhLndoaWNoPWIuY2hhckNvZGUhPW51bGw/Yi5jaGFyQ29kZTpiLmtleUNvZGUpLGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGMpe3ZhciBkLGYsZyxoPWMuYnV0dG9uLGk9Yy5mcm9tRWxlbWVudDtyZXR1cm4gYS5wYWdlWD09bnVsbCYmYy5jbGllbnRYIT1udWxsJiYoZD1hLnRhcmdldC5vd25lckRvY3VtZW50fHxlLGY9ZC5kb2N1bWVudEVsZW1lbnQsZz1kLmJvZHksYS5wYWdlWD1jLmNsaWVudFgrKGYmJmYuc2Nyb2xsTGVmdHx8ZyYmZy5zY3JvbGxMZWZ0fHwwKS0oZiYmZi5jbGllbnRMZWZ0fHxnJiZnLmNsaWVudExlZnR8fDApLGEucGFnZVk9Yy5jbGllbnRZKyhmJiZmLnNjcm9sbFRvcHx8ZyYmZy5zY3JvbGxUb3B8fDApLShmJiZmLmNsaWVudFRvcHx8ZyYmZy5jbGllbnRUb3B8fDApKSwhYS5yZWxhdGVkVGFyZ2V0JiZpJiYoYS5yZWxhdGVkVGFyZ2V0PWk9PT1hLnRhcmdldD9jLnRvRWxlbWVudDppKSwhYS53aGljaCYmaCE9PWImJihhLndoaWNoPWgmMT8xOmgmMj8zOmgmND8yOjApLGF9fSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtwLmV4cGFuZG9dKXJldHVybiBhO3ZhciBiLGMsZD1hLGY9cC5ldmVudC5maXhIb29rc1thLnR5cGVdfHx7fSxnPWYucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoZi5wcm9wcyk6dGhpcy5wcm9wczthPXAuRXZlbnQoZCk7Zm9yKGI9Zy5sZW5ndGg7YjspYz1nWy0tYl0sYVtjXT1kW2NdO3JldHVybiBhLnRhcmdldHx8KGEudGFyZ2V0PWQuc3JjRWxlbWVudHx8ZSksYS50YXJnZXQubm9kZVR5cGU9PT0zJiYoYS50YXJnZXQ9YS50YXJnZXQucGFyZW50Tm9kZSksYS5tZXRhS2V5PSEhYS5tZXRhS2V5LGYuZmlsdGVyP2YuZmlsdGVyKGEsZCk6YX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOntkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOntkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0In0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihhLGIsYyl7cC5pc1dpbmRvdyh0aGlzKSYmKHRoaXMub25iZWZvcmV1bmxvYWQ9Yyl9LHRlYXJkb3duOmZ1bmN0aW9uKGEsYil7dGhpcy5vbmJlZm9yZXVubG9hZD09PWImJih0aGlzLm9uYmVmb3JldW5sb2FkPW51bGwpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPXAuZXh0ZW5kKG5ldyBwLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7ZD9wLmV2ZW50LnRyaWdnZXIoZSxudWxsLGIpOnAuZXZlbnQuZGlzcGF0Y2guY2FsbChiLGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkmJmMucHJldmVudERlZmF1bHQoKX19LHAuZXZlbnQuaGFuZGxlPXAuZXZlbnQuZGlzcGF0Y2gscC5yZW1vdmVFdmVudD1lLnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9OmZ1bmN0aW9uKGEsYixjKXt2YXIgZD0ib24iK2I7YS5kZXRhY2hFdmVudCYmKHR5cGVvZiBhW2RdPT0idW5kZWZpbmVkIiYmKGFbZF09bnVsbCksYS5kZXRhY2hFdmVudChkLGMpKX0scC5FdmVudD1mdW5jdGlvbihhLGIpe2lmKHRoaXMgaW5zdGFuY2VvZiBwLkV2ZW50KWEmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhpcy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQcmV2ZW50ZWR8fGEucmV0dXJuVmFsdWU9PT0hMXx8YS5nZXRQcmV2ZW50RGVmYXVsdCYmYS5nZXRQcmV2ZW50RGVmYXVsdCgpP2JiOmJhKTp0aGlzLnR5cGU9YSxiJiZwLmV4dGVuZCh0aGlzLGIpLHRoaXMudGltZVN0YW1wPWEmJmEudGltZVN0YW1wfHxwLm5vdygpLHRoaXNbcC5leHBhbmRvXT0hMDtlbHNlIHJldHVybiBuZXcgcC5FdmVudChhLGIpfSxwLkV2ZW50LnByb3RvdHlwZT17cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1iYjt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7aWYoIWEpcmV0dXJuO2EucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmEucmV0dXJuVmFsdWU9ITF9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9YmI7dmFyIGE9dGhpcy5vcmlnaW5hbEV2ZW50O2lmKCFhKXJldHVybjthLnN0b3BQcm9wYWdhdGlvbiYmYS5zdG9wUHJvcGFnYXRpb24oKSxhLmNhbmNlbEJ1YmJsZT0hMH0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1iYix0aGlzLnN0b3BQcm9wYWdhdGlvbigpfSxpc0RlZmF1bHRQcmV2ZW50ZWQ6YmEsaXNQcm9wYWdhdGlvblN0b3BwZWQ6YmEsaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6YmF9LHAuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGEsYil7cC5ldmVudC5zcGVjaWFsW2FdPXtkZWxlZ2F0ZVR5cGU6YixiaW5kVHlwZTpiLGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYyxkPXRoaXMsZT1hLnJlbGF0ZWRUYXJnZXQsZj1hLmhhbmRsZU9iaixnPWYuc2VsZWN0b3I7aWYoIWV8fGUhPT1kJiYhcC5jb250YWlucyhkLGUpKWEudHlwZT1mLm9yaWdUeXBlLGM9Zi5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxhLnR5cGU9YjtyZXR1cm4gY319fSkscC5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXN8fChwLmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe2lmKHAubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO3AuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9zdWJtaXQga2V5cHJlc3MuX3N1Ym1pdCIsZnVuY3Rpb24oYSl7dmFyIGM9YS50YXJnZXQsZD1wLm5vZGVOYW1lKGMsImlucHV0Iil8fHAubm9kZU5hbWUoYywiYnV0dG9uIik/Yy5mb3JtOmI7ZCYmIXAuX2RhdGEoZCwiX3N1Ym1pdF9hdHRhY2hlZCIpJiYocC5ldmVudC5hZGQoZCwic3VibWl0Ll9zdWJtaXQiLGZ1bmN0aW9uKGEpe2EuX3N1Ym1pdF9idWJibGU9ITB9KSxwLl9kYXRhKGQsIl9zdWJtaXRfYXR0YWNoZWQiLCEwKSl9KX0scG9zdERpc3BhdGNoOmZ1bmN0aW9uKGEpe2EuX3N1Ym1pdF9idWJibGUmJihkZWxldGUgYS5fc3VibWl0X2J1YmJsZSx0aGlzLnBhcmVudE5vZGUmJiFhLmlzVHJpZ2dlciYmcC5ldmVudC5zaW11bGF0ZSgic3VibWl0Iix0aGlzLnBhcmVudE5vZGUsYSwhMCkpfSx0ZWFyZG93bjpmdW5jdGlvbigpe2lmKHAubm9kZU5hbWUodGhpcywiZm9ybSIpKXJldHVybiExO3AuZXZlbnQucmVtb3ZlKHRoaXMsIi5fc3VibWl0Iil9fSkscC5zdXBwb3J0LmNoYW5nZUJ1YmJsZXN8fChwLmV2ZW50LnNwZWNpYWwuY2hhbmdlPXtzZXR1cDpmdW5jdGlvbigpe2lmKFYudGVzdCh0aGlzLm5vZGVOYW1lKSl7aWYodGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlvIilwLmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXthLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lPT09ImNoZWNrZWQiJiYodGhpcy5fanVzdF9jaGFuZ2VkPSEwKX0pLHAuZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMuX2p1c3RfY2hhbmdlZCYmIWEuaXNUcmlnZ2VyJiYodGhpcy5fanVzdF9jaGFuZ2VkPSExKSxwLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsYSwhMCl9KTtyZXR1cm4hMX1wLmV2ZW50LmFkZCh0aGlzLCJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtWLnRlc3QoYi5ub2RlTmFtZSkmJiFwLl9kYXRhKGIsIl9jaGFuZ2VfYXR0YWNoZWQiKSYmKHAuZXZlbnQuYWRkKGIsImNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJiFhLmlzU2ltdWxhdGVkJiYhYS5pc1RyaWdnZXImJnAuZXZlbnQuc2ltdWxhdGUoImNoYW5nZSIsdGhpcy5wYXJlbnROb2RlLGEsITApfSkscC5fZGF0YShiLCJfY2hhbmdlX2F0dGFjaGVkIiwhMCkpfSl9LGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtpZih0aGlzIT09Ynx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fGIudHlwZSE9PSJyYWRpbyImJmIudHlwZSE9PSJjaGVja2JveCIpcmV0dXJuIGEuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3JldHVybiBwLmV2ZW50LnJlbW92ZSh0aGlzLCIuX2NoYW5nZSIpLCFWLnRlc3QodGhpcy5ub2RlTmFtZSl9fSkscC5zdXBwb3J0LmZvY3VzaW5CdWJibGVzfHxwLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGM9MCxkPWZ1bmN0aW9uKGEpe3AuZXZlbnQuc2ltdWxhdGUoYixhLnRhcmdldCxwLmV2ZW50LmZpeChhKSwhMCl9O3AuZXZlbnQuc3BlY2lhbFtiXT17c2V0dXA6ZnVuY3Rpb24oKXtjKys9PT0wJiZlLmFkZEV2ZW50TGlzdGVuZXIoYSxkLCEwKX0sdGVhcmRvd246ZnVuY3Rpb24oKXstLWM9PT0wJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxkLCEwKX19fSkscC5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGEsYyxkLGUsZil7dmFyIGcsaDtpZih0eXBlb2YgYT09Im9iamVjdCIpe3R5cGVvZiBjIT0ic3RyaW5nIiYmKGQ9ZHx8YyxjPWIpO2ZvcihoIGluIGEpdGhpcy5vbihoLGMsZCxhW2hdLGYpO3JldHVybiB0aGlzfWQ9PW51bGwmJmU9PW51bGw/KGU9YyxkPWM9Yik6ZT09bnVsbCYmKHR5cGVvZiBjPT0ic3RyaW5nIj8oZT1kLGQ9Yik6KGU9ZCxkPWMsYz1iKSk7aWYoZT09PSExKWU9YmE7ZWxzZSBpZighZSlyZXR1cm4gdGhpcztyZXR1cm4gZj09PTEmJihnPWUsZT1mdW5jdGlvbihhKXtyZXR1cm4gcCgpLm9mZihhKSxnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZS5ndWlkPWcuZ3VpZHx8KGcuZ3VpZD1wLmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe3AuZXZlbnQuYWRkKHRoaXMsYSxlLGQsYyl9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZjtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZT1hLmhhbmRsZU9iaixwKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihlLm5hbWVzcGFjZT9lLm9yaWdUeXBlKyIuIitlLm5hbWVzcGFjZTplLm9yaWdUeXBlLGUuc2VsZWN0b3IsZS5oYW5kbGVyKSx0aGlzO2lmKHR5cGVvZiBhPT0ib2JqZWN0Iil7Zm9yKGYgaW4gYSl0aGlzLm9mZihmLGMsYVtmXSk7cmV0dXJuIHRoaXN9aWYoYz09PSExfHx0eXBlb2YgYz09ImZ1bmN0aW9uIilkPWMsYz1iO3JldHVybiBkPT09ITEmJihkPWJhKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtwLmV2ZW50LnJlbW92ZSh0aGlzLGEsZCxjKX0pfSxiaW5kOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5vbihhLG51bGwsYixjKX0sdW5iaW5kOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMub2ZmKGEsbnVsbCxiKX0sbGl2ZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHAodGhpcy5jb250ZXh0KS5vbihhLHRoaXMuc2VsZWN0b3IsYixjKSx0aGlzfSxkaWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gcCh0aGlzLmNvbnRleHQpLm9mZihhLHRoaXMuc2VsZWN0b3J8fCIqKiIsYiksdGhpc30sZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMub24oYixhLGMsZCl9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT09MT90aGlzLm9mZihhLCIqKiIpOnRoaXMub2ZmKGIsYXx8IioqIixjKX0sdHJpZ2dlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtwLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGEsYil7aWYodGhpc1swXSlyZXR1cm4gcC5ldmVudC50cmlnZ2VyKGEsYix0aGlzWzBdLCEwKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3ZhciBiPWFyZ3VtZW50cyxjPWEuZ3VpZHx8cC5ndWlkKyssZD0wLGU9ZnVuY3Rpb24oYyl7dmFyIGU9KHAuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkKXx8MCklZDtyZXR1cm4gcC5fZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIithLmd1aWQsZSsxKSxjLnByZXZlbnREZWZhdWx0KCksYltlXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fCExfTtlLmd1aWQ9Yzt3aGlsZShkPGIubGVuZ3RoKWJbZCsrXS5ndWlkPWM7cmV0dXJuIHRoaXMuY2xpY2soZSl9LGhvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfX0pLHAuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe3AuZm5bYl09ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYz09bnVsbCYmKGM9YSxhPW51bGwpLGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKGIsbnVsbCxhLGMpOnRoaXMudHJpZ2dlcihiKX0sWS50ZXN0KGIpJiYocC5ldmVudC5maXhIb29rc1tiXT1wLmV2ZW50LmtleUhvb2tzKSxaLnRlc3QoYikmJihwLmV2ZW50LmZpeEhvb2tzW2JdPXAuZXZlbnQubW91c2VIb29rcyl9KSxmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGJjKGEsYixjLGQpe2M9Y3x8W10sYj1ifHxyO3ZhciBlLGYsaSxqLGs9Yi5ub2RlVHlwZTtpZighYXx8dHlwZW9mIGEhPSJzdHJpbmciKXJldHVybiBjO2lmKGshPT0xJiZrIT09OSlyZXR1cm5bXTtpPWcoYik7aWYoIWkmJiFkKWlmKGU9UC5leGVjKGEpKWlmKGo9ZVsxXSl7aWYoaz09PTkpe2Y9Yi5nZXRFbGVtZW50QnlJZChqKTtpZighZnx8IWYucGFyZW50Tm9kZSlyZXR1cm4gYztpZihmLmlkPT09ailyZXR1cm4gYy5wdXNoKGYpLGN9ZWxzZSBpZihiLm93bmVyRG9jdW1lbnQmJihmPWIub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChqKSkmJmgoYixmKSYmZi5pZD09PWopcmV0dXJuIGMucHVzaChmKSxjfWVsc2V7aWYoZVsyXSlyZXR1cm4gdy5hcHBseShjLHguY2FsbChiLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpLDApKSxjO2lmKChqPWVbM10pJiZfJiZiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIHcuYXBwbHkoYyx4LmNhbGwoYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGopLDApKSxjfXJldHVybiBicChhLnJlcGxhY2UoTCwiJDEiKSxiLGMsZCxpKX1mdW5jdGlvbiBiZChhKXtyZXR1cm4gZnVuY3Rpb24oYil7dmFyIGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiBjPT09ImlucHV0IiYmYi50eXBlPT09YX19ZnVuY3Rpb24gYmUoYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oYz09PSJpbnB1dCJ8fGM9PT0iYnV0dG9uIikmJmIudHlwZT09PWF9fWZ1bmN0aW9uIGJmKGEpe3JldHVybiB6KGZ1bmN0aW9uKGIpe3JldHVybiBiPStiLHooZnVuY3Rpb24oYyxkKXt2YXIgZSxmPWEoW10sYy5sZW5ndGgsYiksZz1mLmxlbmd0aDt3aGlsZShnLS0pY1tlPWZbZ11dJiYoY1tlXT0hKGRbZV09Y1tlXSkpfSl9KX1mdW5jdGlvbiBiZyhhLGIsYyl7aWYoYT09PWIpcmV0dXJuIGM7dmFyIGQ9YS5uZXh0U2libGluZzt3aGlsZShkKXtpZihkPT09YilyZXR1cm4tMTtkPWQubmV4dFNpYmxpbmd9cmV0dXJuIDF9ZnVuY3Rpb24gYmgoYSxiKXt2YXIgYyxkLGYsZyxoLGksaixrPUNbb11bYV07aWYoaylyZXR1cm4gYj8wOmsuc2xpY2UoMCk7aD1hLGk9W10saj1lLnByZUZpbHRlcjt3aGlsZShoKXtpZighY3x8KGQ9TS5leGVjKGgpKSlkJiYoaD1oLnNsaWNlKGRbMF0ubGVuZ3RoKSksaS5wdXNoKGY9W10pO2M9ITE7aWYoZD1OLmV4ZWMoaCkpZi5wdXNoKGM9bmV3IHEoZC5zaGlmdCgpKSksaD1oLnNsaWNlKGMubGVuZ3RoKSxjLnR5cGU9ZFswXS5yZXBsYWNlKEwsIiAiKTtmb3IoZyBpbiBlLmZpbHRlcikoZD1XW2ddLmV4ZWMoaCkpJiYoIWpbZ118fChkPWpbZ10oZCxyLCEwKSkpJiYoZi5wdXNoKGM9bmV3IHEoZC5zaGlmdCgpKSksaD1oLnNsaWNlKGMubGVuZ3RoKSxjLnR5cGU9ZyxjLm1hdGNoZXM9ZCk7aWYoIWMpYnJlYWt9cmV0dXJuIGI/aC5sZW5ndGg6aD9iYy5lcnJvcihhKTpDKGEsaSkuc2xpY2UoMCl9ZnVuY3Rpb24gYmkoYSxiLGQpe3ZhciBlPWIuZGlyLGY9ZCYmYi5kaXI9PT0icGFyZW50Tm9kZSIsZz11Kys7cmV0dXJuIGIuZmlyc3Q/ZnVuY3Rpb24oYixjLGQpe3doaWxlKGI9YltlXSlpZihmfHxiLm5vZGVUeXBlPT09MSlyZXR1cm4gYShiLGMsZCl9OmZ1bmN0aW9uKGIsZCxoKXtpZighaCl7dmFyIGksaj10KyIgIitnKyIgIixrPWorYzt3aGlsZShiPWJbZV0paWYoZnx8Yi5ub2RlVHlwZT09PTEpe2lmKChpPWJbb10pPT09aylyZXR1cm4gYi5zaXpzZXQ7aWYodHlwZW9mIGk9PSJzdHJpbmciJiZpLmluZGV4T2Yoaik9PT0wKXtpZihiLnNpenNldClyZXR1cm4gYn1lbHNle2Jbb109aztpZihhKGIsZCxoKSlyZXR1cm4gYi5zaXpzZXQ9ITAsYjtiLnNpenNldD0hMX19fWVsc2Ugd2hpbGUoYj1iW2VdKWlmKGZ8fGIubm9kZVR5cGU9PT0xKWlmKGEoYixkLGgpKXJldHVybiBifX1mdW5jdGlvbiBiaihhKXtyZXR1cm4gYS5sZW5ndGg+MT9mdW5jdGlvbihiLGMsZCl7dmFyIGU9YS5sZW5ndGg7d2hpbGUoZS0tKWlmKCFhW2VdKGIsYyxkKSlyZXR1cm4hMTtyZXR1cm4hMH06YVswXX1mdW5jdGlvbiBiayhhLGIsYyxkLGUpe3ZhciBmLGc9W10saD0wLGk9YS5sZW5ndGgsaj1iIT1udWxsO2Zvcig7aDxpO2grKylpZihmPWFbaF0paWYoIWN8fGMoZixkLGUpKWcucHVzaChmKSxqJiZiLnB1c2goaCk7cmV0dXJuIGd9ZnVuY3Rpb24gYmwoYSxiLGMsZCxlLGYpe3JldHVybiBkJiYhZFtvXSYmKGQ9YmwoZCkpLGUmJiFlW29dJiYoZT1ibChlLGYpKSx6KGZ1bmN0aW9uKGYsZyxoLGkpe2lmKGYmJmUpcmV0dXJuO3ZhciBqLGssbCxtPVtdLG49W10sbz1nLmxlbmd0aCxwPWZ8fGJvKGJ8fCIqIixoLm5vZGVUeXBlP1toXTpoLFtdLGYpLHE9YSYmKGZ8fCFiKT9iayhwLG0sYSxoLGkpOnAscj1jP2V8fChmP2E6b3x8ZCk/W106ZzpxO2MmJmMocSxyLGgsaSk7aWYoZCl7bD1iayhyLG4pLGQobCxbXSxoLGkpLGo9bC5sZW5ndGg7d2hpbGUoai0tKWlmKGs9bFtqXSlyW25bal1dPSEocVtuW2pdXT1rKX1pZihmKXtqPWEmJnIubGVuZ3RoO3doaWxlKGotLSlpZihrPXJbal0pZlttW2pdXT0hKGdbbVtqXV09ayl9ZWxzZSByPWJrKHI9PT1nP3Iuc3BsaWNlKG8sci5sZW5ndGgpOnIpLGU/ZShudWxsLGcscixpKTp3LmFwcGx5KGcscil9KX1mdW5jdGlvbiBibShhKXt2YXIgYixjLGQsZj1hLmxlbmd0aCxnPWUucmVsYXRpdmVbYVswXS50eXBlXSxoPWd8fGUucmVsYXRpdmVbIiAiXSxpPWc/MTowLGo9YmkoZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1ifSxoLCEwKSxrPWJpKGZ1bmN0aW9uKGEpe3JldHVybiB5LmNhbGwoYixhKT4tMX0saCwhMCksbT1bZnVuY3Rpb24oYSxjLGQpe3JldHVybiFnJiYoZHx8YyE9PWwpfHwoKGI9Yykubm9kZVR5cGU/aihhLGMsZCk6ayhhLGMsZCkpfV07Zm9yKDtpPGY7aSsrKWlmKGM9ZS5yZWxhdGl2ZVthW2ldLnR5cGVdKW09W2JpKGJqKG0pLGMpXTtlbHNle2M9ZS5maWx0ZXJbYVtpXS50eXBlXS5hcHBseShudWxsLGFbaV0ubWF0Y2hlcyk7aWYoY1tvXSl7ZD0rK2k7Zm9yKDtkPGY7ZCsrKWlmKGUucmVsYXRpdmVbYVtkXS50eXBlXSlicmVhaztyZXR1cm4gYmwoaT4xJiZiaihtKSxpPjEmJmEuc2xpY2UoMCxpLTEpLmpvaW4oIiIpLnJlcGxhY2UoTCwiJDEiKSxjLGk8ZCYmYm0oYS5zbGljZShpLGQpKSxkPGYmJmJtKGE9YS5zbGljZShkKSksZDxmJiZhLmpvaW4oIiIpKX1tLnB1c2goYyl9cmV0dXJuIGJqKG0pfWZ1bmN0aW9uIGJuKGEsYil7dmFyIGQ9Yi5sZW5ndGg+MCxmPWEubGVuZ3RoPjAsZz1mdW5jdGlvbihoLGksaixrLG0pe3ZhciBuLG8scCxxPVtdLHM9MCx1PSIwIix4PWgmJltdLHk9bSE9bnVsbCx6PWwsQT1ofHxmJiZlLmZpbmQuVEFHKCIqIixtJiZpLnBhcmVudE5vZGV8fGkpLEI9dCs9ej09bnVsbD8xOk1hdGguRTt5JiYobD1pIT09ciYmaSxjPWcuZWwpO2Zvcig7KG49QVt1XSkhPW51bGw7dSsrKXtpZihmJiZuKXtmb3Iobz0wO3A9YVtvXTtvKyspaWYocChuLGksaikpe2sucHVzaChuKTticmVha315JiYodD1CLGM9KytnLmVsKX1kJiYoKG49IXAmJm4pJiZzLS0saCYmeC5wdXNoKG4pKX1zKz11O2lmKGQmJnUhPT1zKXtmb3Iobz0wO3A9YltvXTtvKyspcCh4LHEsaSxqKTtpZihoKXtpZihzPjApd2hpbGUodS0tKSF4W3VdJiYhcVt1XSYmKHFbdV09di5jYWxsKGspKTtxPWJrKHEpfXcuYXBwbHkoayxxKSx5JiYhaCYmcS5sZW5ndGg+MCYmcytiLmxlbmd0aD4xJiZiYy51bmlxdWVTb3J0KGspfXJldHVybiB5JiYodD1CLGw9eikseH07cmV0dXJuIGcuZWw9MCxkP3ooZyk6Z31mdW5jdGlvbiBibyhhLGIsYyxkKXt2YXIgZT0wLGY9Yi5sZW5ndGg7Zm9yKDtlPGY7ZSsrKWJjKGEsYltlXSxjLGQpO3JldHVybiBjfWZ1bmN0aW9uIGJwKGEsYixjLGQsZil7dmFyIGcsaCxqLGssbCxtPWJoKGEpLG49bS5sZW5ndGg7aWYoIWQmJm0ubGVuZ3RoPT09MSl7aD1tWzBdPW1bMF0uc2xpY2UoMCk7aWYoaC5sZW5ndGg+MiYmKGo9aFswXSkudHlwZT09PSJJRCImJmIubm9kZVR5cGU9PT05JiYhZiYmZS5yZWxhdGl2ZVtoWzFdLnR5cGVdKXtiPWUuZmluZC5JRChqLm1hdGNoZXNbMF0ucmVwbGFjZShWLCIiKSxiLGYpWzBdO2lmKCFiKXJldHVybiBjO2E9YS5zbGljZShoLnNoaWZ0KCkubGVuZ3RoKX1mb3IoZz1XLlBPUy50ZXN0KGEpPy0xOmgubGVuZ3RoLTE7Zz49MDtnLS0pe2o9aFtnXTtpZihlLnJlbGF0aXZlW2s9ai50eXBlXSlicmVhaztpZihsPWUuZmluZFtrXSlpZihkPWwoai5tYXRjaGVzWzBdLnJlcGxhY2UoViwiIiksUi50ZXN0KGhbMF0udHlwZSkmJmIucGFyZW50Tm9kZXx8YixmKSl7aC5zcGxpY2UoZywxKSxhPWQubGVuZ3RoJiZoLmpvaW4oIiIpO2lmKCFhKXJldHVybiB3LmFwcGx5KGMseC5jYWxsKGQsMCkpLGM7YnJlYWt9fX1yZXR1cm4gaShhLG0pKGQsYixmLGMsUi50ZXN0KGEpKSxjfWZ1bmN0aW9uIGJxKCl7fXZhciBjLGQsZSxmLGcsaCxpLGosayxsLG09ITAsbj0idW5kZWZpbmVkIixvPSgic2l6Y2FjaGUiK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoIi4iLCIiKSxxPVN0cmluZyxyPWEuZG9jdW1lbnQscz1yLmRvY3VtZW50RWxlbWVudCx0PTAsdT0wLHY9W10ucG9wLHc9W10ucHVzaCx4PVtdLnNsaWNlLHk9W10uaW5kZXhPZnx8ZnVuY3Rpb24oYSl7dmFyIGI9MCxjPXRoaXMubGVuZ3RoO2Zvcig7YjxjO2IrKylpZih0aGlzW2JdPT09YSlyZXR1cm4gYjtyZXR1cm4tMX0sej1mdW5jdGlvbihhLGIpe3JldHVybiBhW29dPWI9PW51bGx8fGIsYX0sQT1mdW5jdGlvbigpe3ZhciBhPXt9LGI9W107cmV0dXJuIHooZnVuY3Rpb24oYyxkKXtyZXR1cm4gYi5wdXNoKGMpPmUuY2FjaGVMZW5ndGgmJmRlbGV0ZSBhW2Iuc2hpZnQoKV0sYVtjXT1kfSxhKX0sQj1BKCksQz1BKCksRD1BKCksRT0iW1xceDIwXFx0XFxyXFxuXFxmXSIsRj0iKD86XFxcXC58Wy1cXHddfFteXFx4MDAtXFx4YTBdKSsiLEc9Ri5yZXBsYWNlKCJ3IiwidyMiKSxIPSIoWypeJHwhfl0/PSkiLEk9IlxcWyIrRSsiKigiK0YrIikiK0UrIiooPzoiK0grRSsiKig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIrRysiKXwpfCkiK0UrIipcXF0iLEo9IjooIitGKyIpKD86XFwoKD86KFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcMnwoW14oKVtcXF1dKnwoPzooPzoiK0krIil8W146XXxcXFxcLikqfC4qKSlcXCl8KSIsSz0iOihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK0UrIiooKD86LVxcZCk/XFxkKikiK0UrIipcXCl8KSg/PVteLV18JCkiLEw9bmV3IFJlZ0V4cCgiXiIrRSsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitFKyIrJCIsImciKSxNPW5ldyBSZWdFeHAoIl4iK0UrIiosIitFKyIqIiksTj1uZXcgUmVnRXhwKCJeIitFKyIqKFtcXHgyMFxcdFxcclxcblxcZj4rfl0pIitFKyIqIiksTz1uZXcgUmVnRXhwKEopLFA9L14oPzojKFtcd1wtXSspfChcdyspfFwuKFtcd1wtXSspKSQvLFE9L146bm90LyxSPS9bXHgyMFx0XHJcblxmXSpbK35dLyxTPS86bm90XCgkLyxUPS9oXGQvaSxVPS9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2ksVj0vXFwoPyFcXCkvZyxXPXtJRDpuZXcgUmVnRXhwKCJeIygiK0YrIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrRisiKSIpLE5BTUU6bmV3IFJlZ0V4cCgiXlxcW25hbWU9WydcIl0/KCIrRisiKVsnXCJdP1xcXSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrRi5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrSSksUFNFVURPOm5ldyBSZWdFeHAoIl4iK0opLFBPUzpuZXcgUmVnRXhwKEssImkiKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fG50aHxmaXJzdHxsYXN0KS1jaGlsZCg/OlxcKCIrRSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrRSsiKig/OihbKy1dfCkiK0UrIiooXFxkKyl8KSkiK0UrIipcXCl8KSIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrRSsiKls+K35dfCIrSywiaSIpfSxYPWZ1bmN0aW9uKGEpe3ZhciBiPXIuY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiBhKGIpfWNhdGNoKGMpe3JldHVybiExfWZpbmFsbHl7Yj1udWxsfX0sWT1YKGZ1bmN0aW9uKGEpe3JldHVybiBhLmFwcGVuZENoaWxkKHIuY3JlYXRlQ29tbWVudCgiIikpLCFhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksWj1YKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsYS5maXJzdENoaWxkJiZ0eXBlb2YgYS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSE9PW4mJmEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIjIn0pLCQ9WChmdW5jdGlvbihhKXthLmlubmVySFRNTD0iPHNlbGVjdD48L3NlbGVjdD4iO3ZhciBiPXR5cGVvZiBhLmxhc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIm11bHRpcGxlIik7cmV0dXJuIGIhPT0iYm9vbGVhbiImJmIhPT0ic3RyaW5nIn0pLF89WChmdW5jdGlvbihhKXtyZXR1cm4gYS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J2hpZGRlbiBlJz48L2Rpdj48ZGl2IGNsYXNzPSdoaWRkZW4nPjwvZGl2PiIsIWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZXx8IWEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aD8hMTooYS5sYXN0Q2hpbGQuY2xhc3NOYW1lPSJlIixhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGg9PT0yKX0pLGJhPVgoZnVuY3Rpb24oYSl7YS5pZD1vKzAsYS5pbm5lckhUTUw9IjxhIG5hbWU9JyIrbysiJz48L2E+PGRpdiBuYW1lPSciK28rIic+PC9kaXY+IixzLmluc2VydEJlZm9yZShhLHMuZmlyc3RDaGlsZCk7dmFyIGI9ci5nZXRFbGVtZW50c0J5TmFtZSYmci5nZXRFbGVtZW50c0J5TmFtZShvKS5sZW5ndGg9PT0yK3IuZ2V0RWxlbWVudHNCeU5hbWUobyswKS5sZW5ndGg7cmV0dXJuIGQ9IXIuZ2V0RWxlbWVudEJ5SWQobykscy5yZW1vdmVDaGlsZChhKSxifSk7dHJ5e3guY2FsbChzLmNoaWxkTm9kZXMsMClbMF0ubm9kZVR5cGV9Y2F0Y2goYmIpe3g9ZnVuY3Rpb24oYSl7dmFyIGIsYz1bXTtmb3IoO2I9dGhpc1thXTthKyspYy5wdXNoKGIpO3JldHVybiBjfX1iYy5tYXRjaGVzPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGJjKGEsbnVsbCxudWxsLGIpfSxiYy5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYmMoYixudWxsLG51bGwsW2FdKS5sZW5ndGg+MH0sZj1iYy5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9IiIsZD0wLGU9YS5ub2RlVHlwZTtpZihlKXtpZihlPT09MXx8ZT09PTl8fGU9PT0xMSl7aWYodHlwZW9mIGEudGV4dENvbnRlbnQ9PSJzdHJpbmciKXJldHVybiBhLnRleHRDb250ZW50O2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyljKz1mKGEpfWVsc2UgaWYoZT09PTN8fGU9PT00KXJldHVybiBhLm5vZGVWYWx1ZX1lbHNlIGZvcig7Yj1hW2RdO2QrKyljKz1mKGIpO3JldHVybiBjfSxnPWJjLmlzWE1MPWZ1bmN0aW9uKGEpe3ZhciBiPWEmJihhLm93bmVyRG9jdW1lbnR8fGEpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gYj9iLm5vZGVOYW1lIT09IkhUTUwiOiExfSxoPWJjLmNvbnRhaW5zPXMuY29udGFpbnM/ZnVuY3Rpb24oYSxiKXt2YXIgYz1hLm5vZGVUeXBlPT09OT9hLmRvY3VtZW50RWxlbWVudDphLGQ9YiYmYi5wYXJlbnROb2RlO3JldHVybiBhPT09ZHx8ISEoZCYmZC5ub2RlVHlwZT09PTEmJmMuY29udGFpbnMmJmMuY29udGFpbnMoZCkpfTpzLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGEsYil7cmV0dXJuIGImJiEhKGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikmMTYpfTpmdW5jdGlvbihhLGIpe3doaWxlKGI9Yi5wYXJlbnROb2RlKWlmKGI9PT1hKXJldHVybiEwO3JldHVybiExfSxiYy5hdHRyPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD1nKGEpO3JldHVybiBkfHwoYj1iLnRvTG93ZXJDYXNlKCkpLChjPWUuYXR0ckhhbmRsZVtiXSk/YyhhKTpkfHwkP2EuZ2V0QXR0cmlidXRlKGIpOihjPWEuZ2V0QXR0cmlidXRlTm9kZShiKSxjP3R5cGVvZiBhW2JdPT0iYm9vbGVhbiI/YVtiXT9iOm51bGw6Yy5zcGVjaWZpZWQ/Yy52YWx1ZTpudWxsOm51bGwpfSxlPWJjLnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOnosbWF0Y2g6VyxhdHRySGFuZGxlOlo/e306e2hyZWY6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJocmVmIiwyKX0sdHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoInR5cGUiKX19LGZpbmQ6e0lEOmQ/ZnVuY3Rpb24oYSxiLGMpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRCeUlkIT09biYmIWMpe3ZhciBkPWIuZ2V0RWxlbWVudEJ5SWQoYSk7cmV0dXJuIGQmJmQucGFyZW50Tm9kZT9bZF06W119fTpmdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGMuZ2V0RWxlbWVudEJ5SWQhPT1uJiYhZCl7dmFyIGU9Yy5nZXRFbGVtZW50QnlJZChhKTtyZXR1cm4gZT9lLmlkPT09YXx8dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSE9PW4mJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS52YWx1ZT09PWE/W2VdOmI6W119fSxUQUc6WT9mdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09bilyZXR1cm4gYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKX06ZnVuY3Rpb24oYSxiKXt2YXIgYz1iLmdldEVsZW1lbnRzQnlUYWdOYW1lKGEpO2lmKGE9PT0iKiIpe3ZhciBkLGU9W10sZj0wO2Zvcig7ZD1jW2ZdO2YrKylkLm5vZGVUeXBlPT09MSYmZS5wdXNoKGQpO3JldHVybiBlfXJldHVybiBjfSxOQU1FOmJhJiZmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlOYW1lIT09bilyZXR1cm4gYi5nZXRFbGVtZW50c0J5TmFtZShuYW1lKX0sQ0xBU1M6XyYmZnVuY3Rpb24oYSxiLGMpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT1uJiYhYylyZXR1cm4gYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpfX0scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS5yZXBsYWNlKFYsIiIpLGFbM109KGFbNF18fGFbNV18fCIiKS5yZXBsYWNlKFYsIiIpLGFbMl09PT0ifj0iJiYoYVszXT0iICIrYVszXSsiICIpLGEuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS50b0xvd2VyQ2FzZSgpLGFbMV09PT0ibnRoIj8oYVsyXXx8YmMuZXJyb3IoYVswXSksYVszXT0rKGFbM10/YVs0XSsoYVs1XXx8MSk6MiooYVsyXT09PSJldmVuInx8YVsyXT09PSJvZGQiKSksYVs0XT0rKGFbNl0rYVs3XXx8YVsyXT09PSJvZGQiKSk6YVsyXSYmYmMuZXJyb3IoYVswXSksYX0sUFNFVURPOmZ1bmN0aW9uKGEpe3ZhciBiLGM7aWYoVy5DSElMRC50ZXN0KGFbMF0pKXJldHVybiBudWxsO2lmKGFbM10pYVsyXT1hWzNdO2Vsc2UgaWYoYj1hWzRdKU8udGVzdChiKSYmKGM9YmgoYiwhMCkpJiYoYz1iLmluZGV4T2YoIikiLGIubGVuZ3RoLWMpLWIubGVuZ3RoKSYmKGI9Yi5zbGljZSgwLGMpLGFbMF09YVswXS5zbGljZSgwLGMpKSxhWzJdPWI7cmV0dXJuIGEuc2xpY2UoMCwzKX19LGZpbHRlcjp7SUQ6ZD9mdW5jdGlvbihhKXtyZXR1cm4gYT1hLnJlcGxhY2UoViwiIiksZnVuY3Rpb24oYil7cmV0dXJuIGIuZ2V0QXR0cmlidXRlKCJpZCIpPT09YX19OmZ1bmN0aW9uKGEpe3JldHVybiBhPWEucmVwbGFjZShWLCIiKSxmdW5jdGlvbihiKXt2YXIgYz10eXBlb2YgYi5nZXRBdHRyaWJ1dGVOb2RlIT09biYmYi5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBjJiZjLnZhbHVlPT09YX19LFRBRzpmdW5jdGlvbihhKXtyZXR1cm4gYT09PSIqIj9mdW5jdGlvbigpe3JldHVybiEwfTooYT1hLnJlcGxhY2UoViwiIikudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihiKXtyZXR1cm4gYi5ub2RlTmFtZSYmYi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09YX0pfSxDTEFTUzpmdW5jdGlvbihhKXt2YXIgYj1CW29dW2FdO3JldHVybiBifHwoYj1CKGEsbmV3IFJlZ0V4cCgiKF58IitFKyIpIithKyIoIitFKyJ8JCkiKSkpLGZ1bmN0aW9uKGEpe3JldHVybiBiLnRlc3QoYS5jbGFzc05hbWV8fHR5cGVvZiBhLmdldEF0dHJpYnV0ZSE9PW4mJmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9fSxBVFRSOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZCxlKXt2YXIgZj1iYy5hdHRyKGQsYSk7cmV0dXJuIGY9PW51bGw/Yj09PSIhPSI6Yj8oZis9IiIsYj09PSI9Ij9mPT09YzpiPT09IiE9Ij9mIT09YzpiPT09Il49Ij9jJiZmLmluZGV4T2YoYyk9PT0wOmI9PT0iKj0iP2MmJmYuaW5kZXhPZihjKT4tMTpiPT09IiQ9Ij9jJiZmLnN1YnN0cihmLmxlbmd0aC1jLmxlbmd0aCk9PT1jOmI9PT0ifj0iPygiICIrZisiICIpLmluZGV4T2YoYyk+LTE6Yj09PSJ8PSI/Zj09PWN8fGYuc3Vic3RyKDAsYy5sZW5ndGgrMSk9PT1jKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYT09PSJudGgiP2Z1bmN0aW9uKGEpe3ZhciBiLGUsZj1hLnBhcmVudE5vZGU7aWYoYz09PTEmJmQ9PT0wKXJldHVybiEwO2lmKGYpe2U9MDtmb3IoYj1mLmZpcnN0Q2hpbGQ7YjtiPWIubmV4dFNpYmxpbmcpaWYoYi5ub2RlVHlwZT09PTEpe2UrKztpZihhPT09YilicmVha319cmV0dXJuIGUtPWQsZT09PWN8fGUlYz09PTAmJmUvYz49MH06ZnVuY3Rpb24oYil7dmFyIGM9Yjtzd2l0Y2goYSl7Y2FzZSJvbmx5IjpjYXNlImZpcnN0Ijp3aGlsZShjPWMucHJldmlvdXNTaWJsaW5nKWlmKGMubm9kZVR5cGU9PT0xKXJldHVybiExO2lmKGE9PT0iZmlyc3QiKXJldHVybiEwO2M9YjtjYXNlImxhc3QiOndoaWxlKGM9Yy5uZXh0U2libGluZylpZihjLm5vZGVUeXBlPT09MSlyZXR1cm4hMTtyZXR1cm4hMH19fSxQU0VVRE86ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPWUucHNldWRvc1thXXx8ZS5zZXRGaWx0ZXJzW2EudG9Mb3dlckNhc2UoKV18fGJjLmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrYSk7cmV0dXJuIGRbb10/ZChiKTpkLmxlbmd0aD4xPyhjPVthLGEsIiIsYl0sZS5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGEudG9Mb3dlckNhc2UoKSk/eihmdW5jdGlvbihhLGMpe3ZhciBlLGY9ZChhLGIpLGc9Zi5sZW5ndGg7d2hpbGUoZy0tKWU9eS5jYWxsKGEsZltnXSksYVtlXT0hKGNbZV09ZltnXSl9KTpmdW5jdGlvbihhKXtyZXR1cm4gZChhLDAsYyl9KTpkfX0scHNldWRvczp7bm90OnooZnVuY3Rpb24oYSl7dmFyIGI9W10sYz1bXSxkPWkoYS5yZXBsYWNlKEwsIiQxIikpO3JldHVybiBkW29dP3ooZnVuY3Rpb24oYSxiLGMsZSl7dmFyIGYsZz1kKGEsbnVsbCxlLFtdKSxoPWEubGVuZ3RoO3doaWxlKGgtLSlpZihmPWdbaF0pYVtoXT0hKGJbaF09Zil9KTpmdW5jdGlvbihhLGUsZil7cmV0dXJuIGJbMF09YSxkKGIsbnVsbCxmLGMpLCFjLnBvcCgpfX0pLGhhczp6KGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4gYmMoYSxiKS5sZW5ndGg+MH19KSxjb250YWluczp6KGZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4oYi50ZXh0Q29udGVudHx8Yi5pbm5lclRleHR8fGYoYikpLmluZGV4T2YoYSk+LTF9fSksZW5hYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSExfSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gYj09PSJpbnB1dCImJiEhYS5jaGVja2VkfHxiPT09Im9wdGlvbiImJiEhYS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucGFyZW50Tm9kZSYmYS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsYS5zZWxlY3RlZD09PSEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIWUucHNldWRvcy5lbXB0eShhKX0sZW1wdHk6ZnVuY3Rpb24oYSl7dmFyIGI7YT1hLmZpcnN0Q2hpbGQ7d2hpbGUoYSl7aWYoYS5ub2RlTmFtZT4iQCJ8fChiPWEubm9kZVR5cGUpPT09M3x8Yj09PTQpcmV0dXJuITE7YT1hLm5leHRTaWJsaW5nfXJldHVybiEwfSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIFQudGVzdChhLm5vZGVOYW1lKX0sdGV4dDpmdW5jdGlvbihhKXt2YXIgYixjO3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYoYj1hLnR5cGUpPT09InRleHQiJiYoKGM9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSk9PW51bGx8fGMudG9Mb3dlckNhc2UoKT09PWIpfSxyYWRpbzpiZCgicmFkaW8iKSxjaGVja2JveDpiZCgiY2hlY2tib3giKSxmaWxlOmJkKCJmaWxlIikscGFzc3dvcmQ6YmQoInBhc3N3b3JkIiksaW1hZ2U6YmQoImltYWdlIiksc3VibWl0OmJlKCJzdWJtaXQiKSxyZXNldDpiZSgicmVzZXQiKSxidXR0b246ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiBiPT09ImlucHV0IiYmYS50eXBlPT09ImJ1dHRvbiJ8fGI9PT0iYnV0dG9uIn0saW5wdXQ6ZnVuY3Rpb24oYSl7cmV0dXJuIFUudGVzdChhLm5vZGVOYW1lKX0sZm9jdXM6ZnVuY3Rpb24oYSl7dmFyIGI9YS5vd25lckRvY3VtZW50O3JldHVybiBhPT09Yi5hY3RpdmVFbGVtZW50JiYoIWIuaGFzRm9jdXN8fGIuaGFzRm9jdXMoKSkmJighIWEudHlwZXx8ISFhLmhyZWYpfSxhY3RpdmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1hLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudH0sZmlyc3Q6YmYoZnVuY3Rpb24oYSxiLGMpe3JldHVyblswXX0pLGxhc3Q6YmYoZnVuY3Rpb24oYSxiLGMpe3JldHVybltiLTFdfSksZXE6YmYoZnVuY3Rpb24oYSxiLGMpe3JldHVybltjPDA/YytiOmNdfSksZXZlbjpiZihmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPTA7ZDxiO2QrPTIpYS5wdXNoKGQpO3JldHVybiBhfSksb2RkOmJmKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MTtkPGI7ZCs9MilhLnB1c2goZCk7cmV0dXJuIGF9KSxsdDpiZihmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPWM8MD9jK2I6YzstLWQ+PTA7KWEucHVzaChkKTtyZXR1cm4gYX0pLGd0OmJmKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9YzwwP2MrYjpjOysrZDxiOylhLnB1c2goZCk7cmV0dXJuIGF9KX19LGo9cy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihhLGIpe3JldHVybiBhPT09Yj8oaz0hMCwwKTooIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb258fCFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2EuY29tcGFyZURvY3VtZW50UG9zaXRpb246YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSY0KT8tMToxfTpmdW5jdGlvbihhLGIpe2lmKGE9PT1iKXJldHVybiBrPSEwLDA7aWYoYS5zb3VyY2VJbmRleCYmYi5zb3VyY2VJbmRleClyZXR1cm4gYS5zb3VyY2VJbmRleC1iLnNvdXJjZUluZGV4O3ZhciBjLGQsZT1bXSxmPVtdLGc9YS5wYXJlbnROb2RlLGg9Yi5wYXJlbnROb2RlLGk9ZztpZihnPT09aClyZXR1cm4gYmcoYSxiKTtpZighZylyZXR1cm4tMTtpZighaClyZXR1cm4gMTt3aGlsZShpKWUudW5zaGlmdChpKSxpPWkucGFyZW50Tm9kZTtpPWg7d2hpbGUoaSlmLnVuc2hpZnQoaSksaT1pLnBhcmVudE5vZGU7Yz1lLmxlbmd0aCxkPWYubGVuZ3RoO2Zvcih2YXIgaj0wO2o8YyYmajxkO2orKylpZihlW2pdIT09ZltqXSlyZXR1cm4gYmcoZVtqXSxmW2pdKTtyZXR1cm4gaj09PWM/YmcoYSxmW2pdLC0xKTpiZyhlW2pdLGIsMSl9LFswLDBdLnNvcnQoaiksbT0hayxiYy51bmlxdWVTb3J0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9MTtrPW0sYS5zb3J0KGopO2lmKGspZm9yKDtiPWFbY107YysrKWI9PT1hW2MtMV0mJmEuc3BsaWNlKGMtLSwxKTtyZXR1cm4gYX0sYmMuZXJyb3I9ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiK2EpfSxpPWJjLmNvbXBpbGU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPVtdLGU9W10sZj1EW29dW2FdO2lmKCFmKXtifHwoYj1iaChhKSksYz1iLmxlbmd0aDt3aGlsZShjLS0pZj1ibShiW2NdKSxmW29dP2QucHVzaChmKTplLnB1c2goZik7Zj1EKGEsYm4oZSxkKSl9cmV0dXJuIGZ9LHIucXVlcnlTZWxlY3RvckFsbCYmZnVuY3Rpb24oKXt2YXIgYSxiPWJwLGM9Lyd8XFwvZyxkPS9cPVtceDIwXHRcclxuXGZdKihbXiciXF1dKilbXHgyMFx0XHJcblxmXSpcXS9nLGU9WyI6Zm9jdXMiXSxmPVsiOmFjdGl2ZSIsIjpmb2N1cyJdLGg9cy5tYXRjaGVzU2VsZWN0b3J8fHMubW96TWF0Y2hlc1NlbGVjdG9yfHxzLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8cy5vTWF0Y2hlc1NlbGVjdG9yfHxzLm1zTWF0Y2hlc1NlbGVjdG9yO1goZnVuY3Rpb24oYSl7YS5pbm5lckhUTUw9IjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGEucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8ZS5wdXNoKCJcXFsiK0UrIiooPzpjaGVja2VkfGRpc2FibGVkfGlzbWFwfG11bHRpcGxlfHJlYWRvbmx5fHNlbGVjdGVkfHZhbHVlKSIpLGEucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fGUucHVzaCgiOmNoZWNrZWQiKX0pLFgoZnVuY3Rpb24oYSl7YS5pbm5lckhUTUw9IjxwIHRlc3Q9Jyc+PC9wPiIsYS5xdWVyeVNlbGVjdG9yQWxsKCJbdGVzdF49JyddIikubGVuZ3RoJiZlLnB1c2goIlsqXiRdPSIrRSsiKig/OlwiXCJ8JycpIiksYS5pbm5lckhUTUw9IjxpbnB1dCB0eXBlPSdoaWRkZW4nLz4iLGEucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGh8fGUucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKX0pLGU9bmV3IFJlZ0V4cChlLmpvaW4oInwiKSksYnA9ZnVuY3Rpb24oYSxkLGYsZyxoKXtpZighZyYmIWgmJighZXx8IWUudGVzdChhKSkpe3ZhciBpLGosaz0hMCxsPW8sbT1kLG49ZC5ub2RlVHlwZT09PTkmJmE7aWYoZC5ub2RlVHlwZT09PTEmJmQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PSJvYmplY3QiKXtpPWJoKGEpLChrPWQuZ2V0QXR0cmlidXRlKCJpZCIpKT9sPWsucmVwbGFjZShjLCJcXCQmIik6ZC5zZXRBdHRyaWJ1dGUoImlkIixsKSxsPSJbaWQ9JyIrbCsiJ10gIixqPWkubGVuZ3RoO3doaWxlKGotLSlpW2pdPWwraVtqXS5qb2luKCIiKTttPVIudGVzdChhKSYmZC5wYXJlbnROb2RlfHxkLG49aS5qb2luKCIsIil9aWYobil0cnl7cmV0dXJuIHcuYXBwbHkoZix4LmNhbGwobS5xdWVyeVNlbGVjdG9yQWxsKG4pLDApKSxmfWNhdGNoKHApe31maW5hbGx5e2t8fGQucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX1yZXR1cm4gYihhLGQsZixnLGgpfSxoJiYoWChmdW5jdGlvbihiKXthPWguY2FsbChiLCJkaXYiKTt0cnl7aC5jYWxsKGIsIlt0ZXN0IT0nJ106c2l6emxlIiksZi5wdXNoKCIhPSIsSil9Y2F0Y2goYyl7fX0pLGY9bmV3IFJlZ0V4cChmLmpvaW4oInwiKSksYmMubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGIsYyl7Yz1jLnJlcGxhY2UoZCwiPSckMSddIik7aWYoIWcoYikmJiFmLnRlc3QoYykmJighZXx8IWUudGVzdChjKSkpdHJ5e3ZhciBpPWguY2FsbChiLGMpO2lmKGl8fGF8fGIuZG9jdW1lbnQmJmIuZG9jdW1lbnQubm9kZVR5cGUhPT0xMSlyZXR1cm4gaX1jYXRjaChqKXt9cmV0dXJuIGJjKGMsbnVsbCxudWxsLFtiXSkubGVuZ3RoPjB9KX0oKSxlLnBzZXVkb3MubnRoPWUucHNldWRvcy5lcSxlLmZpbHRlcnM9YnEucHJvdG90eXBlPWUucHNldWRvcyxlLnNldEZpbHRlcnM9bmV3IGJxLGJjLmF0dHI9cC5hdHRyLHAuZmluZD1iYyxwLmV4cHI9YmMuc2VsZWN0b3JzLHAuZXhwclsiOiJdPXAuZXhwci5wc2V1ZG9zLHAudW5pcXVlPWJjLnVuaXF1ZVNvcnQscC50ZXh0PWJjLmdldFRleHQscC5pc1hNTERvYz1iYy5pc1hNTCxwLmNvbnRhaW5zPWJjLmNvbnRhaW5zfShhKTt2YXIgYmM9L1VudGlsJC8sYmQ9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sYmU9L14uW146I1xbXC4sXSokLyxiZj1wLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LGJnPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O3AuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPXRoaXM7aWYodHlwZW9mIGEhPSJzdHJpbmciKXJldHVybiBwKGEpLmZpbHRlcihmdW5jdGlvbigpe2ZvcihiPTAsYz1oLmxlbmd0aDtiPGM7YisrKWlmKHAuY29udGFpbnMoaFtiXSx0aGlzKSlyZXR1cm4hMH0pO2c9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGEpO2ZvcihiPTAsYz10aGlzLmxlbmd0aDtiPGM7YisrKXtkPWcubGVuZ3RoLHAuZmluZChhLHRoaXNbYl0sZyk7aWYoYj4wKWZvcihlPWQ7ZTxnLmxlbmd0aDtlKyspZm9yKGY9MDtmPGQ7ZisrKWlmKGdbZl09PT1nW2VdKXtnLnNwbGljZShlLS0sMSk7YnJlYWt9fXJldHVybiBnfSxoYXM6ZnVuY3Rpb24oYSl7dmFyIGIsYz1wKGEsdGhpcyksZD1jLmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYj0wO2I8ZDtiKyspaWYocC5jb250YWlucyh0aGlzLGNbYl0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYmoodGhpcyxhLCExKSwibm90IixhKX0sZmlsdGVyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhiaih0aGlzLGEsITApLCJmaWx0ZXIiLGEpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIWEmJih0eXBlb2YgYT09InN0cmluZyI/YmYudGVzdChhKT9wKGEsdGhpcy5jb250ZXh0KS5pbmRleCh0aGlzWzBdKT49MDpwLmZpbHRlcihhLHRoaXMpLmxlbmd0aD4wOnRoaXMuZmlsdGVyKGEpLmxlbmd0aD4wKX0sY2xvc2VzdDpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9MCxlPXRoaXMubGVuZ3RoLGY9W10sZz1iZi50ZXN0KGEpfHx0eXBlb2YgYSE9InN0cmluZyI/cChhLGJ8fHRoaXMuY29udGV4dCk6MDtmb3IoO2Q8ZTtkKyspe2M9dGhpc1tkXTt3aGlsZShjJiZjLm93bmVyRG9jdW1lbnQmJmMhPT1iJiZjLm5vZGVUeXBlIT09MTEpe2lmKGc/Zy5pbmRleChjKT4tMTpwLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGMsYSkpe2YucHVzaChjKTticmVha31jPWMucGFyZW50Tm9kZX19cmV0dXJuIGY9Zi5sZW5ndGg+MT9wLnVuaXF1ZShmKTpmLHRoaXMucHVzaFN0YWNrKGYsImNsb3Nlc3QiLGEpfSxpbmRleDpmdW5jdGlvbihhKXtyZXR1cm4gYT90eXBlb2YgYT09InN0cmluZyI/cC5pbkFycmF5KHRoaXNbMF0scChhKSk6cC5pbkFycmF5KGEuanF1ZXJ5P2FbMF06YSx0aGlzKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYT09InN0cmluZyI/cChhLGIpOnAubWFrZUFycmF5KGEmJmEubm9kZVR5cGU/W2FdOmEpLGQ9cC5tZXJnZSh0aGlzLmdldCgpLGMpO3JldHVybiB0aGlzLnB1c2hTdGFjayhiaChjWzBdKXx8YmgoZFswXSk/ZDpwLnVuaXF1ZShkKSl9LGFkZEJhY2s6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYWRkKGE9PW51bGw/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoYSkpfX0pLHAuZm4uYW5kU2VsZj1wLmZuLmFkZEJhY2sscC5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiZiLm5vZGVUeXBlIT09MTE/YjpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBwLmRpcihhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHAuZGlyKGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBiaShhLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGEpe3JldHVybiBiaShhLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihhKXtyZXR1cm4gcC5kaXIoYSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihhKXtyZXR1cm4gcC5kaXIoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHAuZGlyKGEsIm5leHRTaWJsaW5nIixjKX0scHJldlVudGlsOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gcC5kaXIoYSwicHJldmlvdXNTaWJsaW5nIixjKX0sc2libGluZ3M6ZnVuY3Rpb24oYSl7cmV0dXJuIHAuc2libGluZygoYS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxhKX0sY2hpbGRyZW46ZnVuY3Rpb24oYSl7cmV0dXJuIHAuc2libGluZyhhLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihhKXtyZXR1cm4gcC5ub2RlTmFtZShhLCJpZnJhbWUiKT9hLmNvbnRlbnREb2N1bWVudHx8YS5jb250ZW50V2luZG93LmRvY3VtZW50OnAubWVyZ2UoW10sYS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGEsYil7cC5mblthXT1mdW5jdGlvbihjLGQpe3ZhciBlPXAubWFwKHRoaXMsYixjKTtyZXR1cm4gYmMudGVzdChhKXx8KGQ9YyksZCYmdHlwZW9mIGQ9PSJzdHJpbmciJiYoZT1wLmZpbHRlcihkLGUpKSxlPXRoaXMubGVuZ3RoPjEmJiFiZ1thXT9wLnVuaXF1ZShlKTplLHRoaXMubGVuZ3RoPjEmJmJkLnRlc3QoYSkmJihlPWUucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhlLGEsay5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX19KSxwLmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYyYmKGE9Ijpub3QoIithKyIpIiksYi5sZW5ndGg9PT0xP3AuZmluZC5tYXRjaGVzU2VsZWN0b3IoYlswXSxhKT9bYlswXV06W106cC5maW5kLm1hdGNoZXMoYSxiKX0sZGlyOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1bXSxmPWFbY107d2hpbGUoZiYmZi5ub2RlVHlwZSE9PTkmJihkPT09Ynx8Zi5ub2RlVHlwZSE9PTF8fCFwKGYpLmlzKGQpKSlmLm5vZGVUeXBlPT09MSYmZS5wdXNoKGYpLGY9ZltjXTtyZXR1cm4gZX0sc2libGluZzpmdW5jdGlvbihhLGIpe3ZhciBjPVtdO2Zvcig7YTthPWEubmV4dFNpYmxpbmcpYS5ub2RlVHlwZT09PTEmJmEhPT1iJiZjLnB1c2goYSk7cmV0dXJuIGN9fSk7dmFyIGJsPSJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0aW1lfHZpZGVvIixibT0vIGpRdWVyeVxkKz0iKD86bnVsbHxcZCspIi9nLGJuPS9eXHMrLyxibz0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpLGJwPS88KFtcdzpdKykvLGJxPS88dGJvZHkvaSxicj0vPHwmIz9cdys7Lyxicz0vPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLGJ0PS88KD86c2NyaXB0fG9iamVjdHxlbWJlZHxvcHRpb258c3R5bGUpL2ksYnU9bmV3IFJlZ0V4cCgiPCg/OiIrYmwrIilbXFxzLz5dIiwiaSIpLGJ2PS9eKD86Y2hlY2tib3h8cmFkaW8pJC8sYnc9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksYng9L1wvKGphdmF8ZWNtYSlzY3JpcHQvaSxieT0vXlxzKjwhKD86XFtDREFUQVxbfFwtXC0pfFtcXVwtXXsyfT5ccyokL2csYno9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX0sYkE9YmsoZSksYkI9YkEuYXBwZW5kQ2hpbGQoZS5jcmVhdGVFbGVtZW50KCJkaXYiKSk7Ynoub3B0Z3JvdXA9Ynoub3B0aW9uLGJ6LnRib2R5PWJ6LnRmb290PWJ6LmNvbGdyb3VwPWJ6LmNhcHRpb249YnoudGhlYWQsYnoudGg9YnoudGQscC5zdXBwb3J0Lmh0bWxTZXJpYWxpemV8fChiei5fZGVmYXVsdD1bMSwiWDxkaXY+IiwiPC9kaXY+Il0pLHAuZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBwLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGEpe3JldHVybiBhPT09Yj9wLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmFwcGVuZCgodGhpc1swXSYmdGhpc1swXS5vd25lckRvY3VtZW50fHxlKS5jcmVhdGVUZXh0Tm9kZShhKSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0sd3JhcEFsbDpmdW5jdGlvbihhKXtpZihwLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtwKHRoaXMpLndyYXBBbGwoYS5jYWxsKHRoaXMsYikpfSk7aWYodGhpc1swXSl7dmFyIGI9cChhLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApO3RoaXNbMF0ucGFyZW50Tm9kZSYmYi5pbnNlcnRCZWZvcmUodGhpc1swXSksYi5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzO3doaWxlKGEuZmlyc3RDaGlsZCYmYS5maXJzdENoaWxkLm5vZGVUeXBlPT09MSlhPWEuZmlyc3RDaGlsZDtyZXR1cm4gYX0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGEpe3JldHVybiBwLmlzRnVuY3Rpb24oYSk/dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe3AodGhpcykud3JhcElubmVyKGEuY2FsbCh0aGlzLGIpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPXAodGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7dmFyIGI9cC5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7cCh0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsYyk6YSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe3Aubm9kZU5hbWUodGhpcywiYm9keSIpfHxwKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9uKGEpeyh0aGlzLm5vZGVUeXBlPT09MXx8dGhpcy5ub2RlVHlwZT09PTExKSYmdGhpcy5hcHBlbmRDaGlsZChhKX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCEwLGZ1bmN0aW9uKGEpeyh0aGlzLm5vZGVUeXBlPT09MXx8dGhpcy5ub2RlVHlwZT09PTExKSYmdGhpcy5pbnNlcnRCZWZvcmUoYSx0aGlzLmZpcnN0Q2hpbGQpfSl9LGJlZm9yZTpmdW5jdGlvbigpe2lmKCFiaCh0aGlzWzBdKSlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMpfSk7aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9cC5jbGVhbihhcmd1bWVudHMpO3JldHVybiB0aGlzLnB1c2hTdGFjayhwLm1lcmdlKGEsdGhpcyksImJlZm9yZSIsdGhpcy5zZWxlY3Rvcil9fSxhZnRlcjpmdW5jdGlvbigpe2lmKCFiaCh0aGlzWzBdKSlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMubmV4dFNpYmxpbmcpfSk7aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9cC5jbGVhbihhcmd1bWVudHMpO3JldHVybiB0aGlzLnB1c2hTdGFjayhwLm1lcmdlKHRoaXMsYSksImFmdGVyIix0aGlzLnNlbGVjdG9yKX19LHJlbW92ZTpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9MDtmb3IoOyhjPXRoaXNbZF0pIT1udWxsO2QrKylpZighYXx8cC5maWx0ZXIoYSxbY10pLmxlbmd0aCkhYiYmYy5ub2RlVHlwZT09PTEmJihwLmNsZWFuRGF0YShjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLHAuY2xlYW5EYXRhKFtjXSkpLGMucGFyZW50Tm9kZSYmYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe3ZhciBhLGI9MDtmb3IoOyhhPXRoaXNbYl0pIT1udWxsO2IrKyl7YS5ub2RlVHlwZT09PTEmJnAuY2xlYW5EYXRhKGEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSk7d2hpbGUoYS5maXJzdENoaWxkKWEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKX1yZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1hPT1udWxsPyExOmEsYj1iPT1udWxsP2E6Yix0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBwLmNsb25lKHRoaXMsYSxiKX0pfSxodG1sOmZ1bmN0aW9uKGEpe3JldHVybiBwLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGEpe3ZhciBjPXRoaXNbMF18fHt9LGQ9MCxlPXRoaXMubGVuZ3RoO2lmKGE9PT1iKXJldHVybiBjLm5vZGVUeXBlPT09MT9jLmlubmVySFRNTC5yZXBsYWNlKGJtLCIiKTpiO2lmKHR5cGVvZiBhPT0ic3RyaW5nIiYmIWJzLnRlc3QoYSkmJihwLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZXx8IWJ1LnRlc3QoYSkpJiYocC5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlfHwhYm4udGVzdChhKSkmJiFielsoYnAuZXhlYyhhKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2E9YS5yZXBsYWNlKGJvLCI8JDE+PC8kMj4iKTt0cnl7Zm9yKDtkPGU7ZCsrKWM9dGhpc1tkXXx8e30sYy5ub2RlVHlwZT09PTEmJihwLmNsZWFuRGF0YShjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikpLGMuaW5uZXJIVE1MPWEpO2M9MH1jYXRjaChmKXt9fWMmJnRoaXMuZW1wdHkoKS5hcHBlbmQoYSl9LG51bGwsYSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oYSl7cmV0dXJuIGJoKHRoaXNbMF0pP3RoaXMubGVuZ3RoP3RoaXMucHVzaFN0YWNrKHAocC5pc0Z1bmN0aW9uKGEpP2EoKTphKSwicmVwbGFjZVdpdGgiLGEpOnRoaXM6cC5pc0Z1bmN0aW9uKGEpP3RoaXMuZWFjaChmdW5jdGlvbihiKXt2YXIgYz1wKHRoaXMpLGQ9Yy5odG1sKCk7Yy5yZXBsYWNlV2l0aChhLmNhbGwodGhpcyxiLGQpKX0pOih0eXBlb2YgYSE9InN0cmluZyImJihhPXAoYSkuZGV0YWNoKCkpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPXRoaXMubmV4dFNpYmxpbmcsYz10aGlzLnBhcmVudE5vZGU7cCh0aGlzKS5yZW1vdmUoKSxiP3AoYikuYmVmb3JlKGEpOnAoYykuYXBwZW5kKGEpfSkpfSxkZXRhY2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucmVtb3ZlKGEsITApfSxkb21NYW5pcDpmdW5jdGlvbihhLGMsZCl7YT1bXS5jb25jYXQuYXBwbHkoW10sYSk7dmFyIGUsZixnLGgsaT0wLGo9YVswXSxrPVtdLGw9dGhpcy5sZW5ndGg7aWYoIXAuc3VwcG9ydC5jaGVja0Nsb25lJiZsPjEmJnR5cGVvZiBqPT0ic3RyaW5nIiYmYncudGVzdChqKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7cCh0aGlzKS5kb21NYW5pcChhLGMsZCl9KTtpZihwLmlzRnVuY3Rpb24oaikpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXt2YXIgZj1wKHRoaXMpO2FbMF09ai5jYWxsKHRoaXMsZSxjP2YuaHRtbCgpOmIpLGYuZG9tTWFuaXAoYSxjLGQpfSk7aWYodGhpc1swXSl7ZT1wLmJ1aWxkRnJhZ21lbnQoYSx0aGlzLGspLGc9ZS5mcmFnbWVudCxmPWcuZmlyc3RDaGlsZCxnLmNoaWxkTm9kZXMubGVuZ3RoPT09MSYmKGc9Zik7aWYoZil7Yz1jJiZwLm5vZGVOYW1lKGYsInRyIik7Zm9yKGg9ZS5jYWNoZWFibGV8fGwtMTtpPGw7aSsrKWQuY2FsbChjJiZwLm5vZGVOYW1lKHRoaXNbaV0sInRhYmxlIik/YkModGhpc1tpXSwidGJvZHkiKTp0aGlzW2ldLGk9PT1oP2c6cC5jbG9uZShnLCEwLCEwKSl9Zz1mPW51bGwsay5sZW5ndGgmJnAuZWFjaChrLGZ1bmN0aW9uKGEsYil7Yi5zcmM/cC5hamF4P3AuYWpheCh7dXJsOmIuc3JjLHR5cGU6IkdFVCIsZGF0YVR5cGU6InNjcmlwdCIsYXN5bmM6ITEsZ2xvYmFsOiExLCJ0aHJvd3MiOiEwfSk6cC5lcnJvcigibm8gYWpheCIpOnAuZ2xvYmFsRXZhbCgoYi50ZXh0fHxiLnRleHRDb250ZW50fHxiLmlubmVySFRNTHx8IiIpLnJlcGxhY2UoYnksIiIpKSxiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKX0pfXJldHVybiB0aGlzfX0pLHAuYnVpbGRGcmFnbWVudD1mdW5jdGlvbihhLGMsZCl7dmFyIGYsZyxoLGk9YVswXTtyZXR1cm4gYz1jfHxlLGM9IWMubm9kZVR5cGUmJmNbMF18fGMsYz1jLm93bmVyRG9jdW1lbnR8fGMsYS5sZW5ndGg9PT0xJiZ0eXBlb2YgaT09InN0cmluZyImJmkubGVuZ3RoPDUxMiYmYz09PWUmJmkuY2hhckF0KDApPT09IjwiJiYhYnQudGVzdChpKSYmKHAuc3VwcG9ydC5jaGVja0Nsb25lfHwhYncudGVzdChpKSkmJihwLnN1cHBvcnQuaHRtbDVDbG9uZXx8IWJ1LnRlc3QoaSkpJiYoZz0hMCxmPXAuZnJhZ21lbnRzW2ldLGg9ZiE9PWIpLGZ8fChmPWMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHAuY2xlYW4oYSxjLGYsZCksZyYmKHAuZnJhZ21lbnRzW2ldPWgmJmYpKSx7ZnJhZ21lbnQ6ZixjYWNoZWFibGU6Z319LHAuZnJhZ21lbnRzPXt9LHAuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGEsYil7cC5mblthXT1mdW5jdGlvbihjKXt2YXIgZCxlPTAsZj1bXSxnPXAoYyksaD1nLmxlbmd0aCxpPXRoaXMubGVuZ3RoPT09MSYmdGhpc1swXS5wYXJlbnROb2RlO2lmKChpPT1udWxsfHxpJiZpLm5vZGVUeXBlPT09MTEmJmkuY2hpbGROb2Rlcy5sZW5ndGg9PT0xKSYmaD09PTEpcmV0dXJuIGdbYl0odGhpc1swXSksdGhpcztmb3IoO2U8aDtlKyspZD0oZT4wP3RoaXMuY2xvbmUoITApOnRoaXMpLmdldCgpLHAoZ1tlXSlbYl0oZCksZj1mLmNvbmNhdChkKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZixhLGcuc2VsZWN0b3IpfX0pLHAuZXh0ZW5kKHtjbG9uZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGc7cC5zdXBwb3J0Lmh0bWw1Q2xvbmV8fHAuaXNYTUxEb2MoYSl8fCFidS50ZXN0KCI8IithLm5vZGVOYW1lKyI+Iik/Zz1hLmNsb25lTm9kZSghMCk6KGJCLmlubmVySFRNTD1hLm91dGVySFRNTCxiQi5yZW1vdmVDaGlsZChnPWJCLmZpcnN0Q2hpbGQpKTtpZigoIXAuc3VwcG9ydC5ub0Nsb25lRXZlbnR8fCFwLnN1cHBvcnQubm9DbG9uZUNoZWNrZWQpJiYoYS5ub2RlVHlwZT09PTF8fGEubm9kZVR5cGU9PT0xMSkmJiFwLmlzWE1MRG9jKGEpKXtiRShhLGcpLGQ9YkYoYSksZT1iRihnKTtmb3IoZj0wO2RbZl07KytmKWVbZl0mJmJFKGRbZl0sZVtmXSl9aWYoYil7YkQoYSxnKTtpZihjKXtkPWJGKGEpLGU9YkYoZyk7Zm9yKGY9MDtkW2ZdOysrZiliRChkW2ZdLGVbZl0pfX1yZXR1cm4gZD1lPW51bGwsZ30sY2xlYW46ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGYsZyxoLGksaixrLGwsbSxuLG8scSxyLHM9Yj09PWUmJmJBLHQ9W107aWYoIWJ8fHR5cGVvZiBiLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQ9PSJ1bmRlZmluZWQiKWI9ZTtmb3IoZj0wOyhoPWFbZl0pIT1udWxsO2YrKyl7dHlwZW9mIGg9PSJudW1iZXIiJiYoaCs9IiIpO2lmKCFoKWNvbnRpbnVlO2lmKHR5cGVvZiBoPT0ic3RyaW5nIilpZighYnIudGVzdChoKSloPWIuY3JlYXRlVGV4dE5vZGUoaCk7ZWxzZXtzPXN8fGJrKGIpLGw9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKSxzLmFwcGVuZENoaWxkKGwpLGg9aC5yZXBsYWNlKGJvLCI8JDE+PC8kMj4iKSxpPShicC5leGVjKGgpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLGo9YnpbaV18fGJ6Ll9kZWZhdWx0LGs9alswXSxsLmlubmVySFRNTD1qWzFdK2gralsyXTt3aGlsZShrLS0pbD1sLmxhc3RDaGlsZDtpZighcC5zdXBwb3J0LnRib2R5KXttPWJxLnRlc3QoaCksbj1pPT09InRhYmxlIiYmIW0/bC5maXJzdENoaWxkJiZsLmZpcnN0Q2hpbGQuY2hpbGROb2RlczpqWzFdPT09Ijx0YWJsZT4iJiYhbT9sLmNoaWxkTm9kZXM6W107Zm9yKGc9bi5sZW5ndGgtMTtnPj0wOy0tZylwLm5vZGVOYW1lKG5bZ10sInRib2R5IikmJiFuW2ddLmNoaWxkTm9kZXMubGVuZ3RoJiZuW2ddLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobltnXSl9IXAuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSYmYm4udGVzdChoKSYmbC5pbnNlcnRCZWZvcmUoYi5jcmVhdGVUZXh0Tm9kZShibi5leGVjKGgpWzBdKSxsLmZpcnN0Q2hpbGQpLGg9bC5jaGlsZE5vZGVzLGwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChsKX1oLm5vZGVUeXBlP3QucHVzaChoKTpwLm1lcmdlKHQsaCl9bCYmKGg9bD1zPW51bGwpO2lmKCFwLnN1cHBvcnQuYXBwZW5kQ2hlY2tlZClmb3IoZj0wOyhoPXRbZl0pIT1udWxsO2YrKylwLm5vZGVOYW1lKGgsImlucHV0Iik/YkcoaCk6dHlwZW9mIGguZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiJiZwLmdyZXAoaC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKSxiRyk7aWYoYyl7cT1mdW5jdGlvbihhKXtpZighYS50eXBlfHxieC50ZXN0KGEudHlwZSkpcmV0dXJuIGQ/ZC5wdXNoKGEucGFyZW50Tm9kZT9hLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSk6YSk6Yy5hcHBlbmRDaGlsZChhKX07Zm9yKGY9MDsoaD10W2ZdKSE9bnVsbDtmKyspaWYoIXAubm9kZU5hbWUoaCwic2NyaXB0Iil8fCFxKGgpKWMuYXBwZW5kQ2hpbGQoaCksdHlwZW9mIGguZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiJiYocj1wLmdyZXAocC5tZXJnZShbXSxoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSkscSksdC5zcGxpY2UuYXBwbHkodCxbZisxLDBdLmNvbmNhdChyKSksZis9ci5sZW5ndGgpfXJldHVybiB0fSxjbGVhbkRhdGE6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnPTAsaD1wLmV4cGFuZG8saT1wLmNhY2hlLGo9cC5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8saz1wLmV2ZW50LnNwZWNpYWw7Zm9yKDsoZT1hW2ddKSE9bnVsbDtnKyspaWYoYnx8cC5hY2NlcHREYXRhKGUpKXtkPWVbaF0sYz1kJiZpW2RdO2lmKGMpe2lmKGMuZXZlbnRzKWZvcihmIGluIGMuZXZlbnRzKWtbZl0/cC5ldmVudC5yZW1vdmUoZSxmKTpwLnJlbW92ZUV2ZW50KGUsZixjLmhhbmRsZSk7aVtkXSYmKGRlbGV0ZSBpW2RdLGo/ZGVsZXRlIGVbaF06ZS5yZW1vdmVBdHRyaWJ1dGU/ZS5yZW1vdmVBdHRyaWJ1dGUoaCk6ZVtoXT1udWxsLHAuZGVsZXRlZElkcy5wdXNoKGQpKX19fX0pLGZ1bmN0aW9uKCl7dmFyIGEsYjtwLnVhTWF0Y2g9ZnVuY3Rpb24oYSl7YT1hLnRvTG93ZXJDYXNlKCk7dmFyIGI9LyhjaHJvbWUpWyBcL10oW1x3Ll0rKS8uZXhlYyhhKXx8Lyh3ZWJraXQpWyBcL10oW1x3Ll0rKS8uZXhlYyhhKXx8LyhvcGVyYSkoPzouKnZlcnNpb258KVsgXC9dKFtcdy5dKykvLmV4ZWMoYSl8fC8obXNpZSkgKFtcdy5dKykvLmV4ZWMoYSl8fGEuaW5kZXhPZigiY29tcGF0aWJsZSIpPDAmJi8obW96aWxsYSkoPzouKj8gcnY6KFtcdy5dKyl8KS8uZXhlYyhhKXx8W107cmV0dXJue2Jyb3dzZXI6YlsxXXx8IiIsdmVyc2lvbjpiWzJdfHwiMCJ9fSxhPXAudWFNYXRjaChnLnVzZXJBZ2VudCksYj17fSxhLmJyb3dzZXImJihiW2EuYnJvd3Nlcl09ITAsYi52ZXJzaW9uPWEudmVyc2lvbiksYi5jaHJvbWU/Yi53ZWJraXQ9ITA6Yi53ZWJraXQmJihiLnNhZmFyaT0hMCkscC5icm93c2VyPWIscC5zdWI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGIsYyl7cmV0dXJuIG5ldyBhLmZuLmluaXQoYixjKX1wLmV4dGVuZCghMCxhLHRoaXMpLGEuc3VwZXJjbGFzcz10aGlzLGEuZm49YS5wcm90b3R5cGU9dGhpcygpLGEuZm4uY29uc3RydWN0b3I9YSxhLnN1Yj10aGlzLnN1YixhLmZuLmluaXQ9ZnVuY3Rpb24gYyhjLGQpe3JldHVybiBkJiZkIGluc3RhbmNlb2YgcCYmIShkIGluc3RhbmNlb2YgYSkmJihkPWEoZCkpLHAuZm4uaW5pdC5jYWxsKHRoaXMsYyxkLGIpfSxhLmZuLmluaXQucHJvdG90eXBlPWEuZm47dmFyIGI9YShlKTtyZXR1cm4gYX19KCk7dmFyIGJILGJJLGJKLGJLPS9hbHBoYVwoW14pXSpcKS9pLGJMPS9vcGFjaXR5PShbXildKikvLGJNPS9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkLyxiTj0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sYk89L15tYXJnaW4vLGJQPW5ldyBSZWdFeHAoIl4oIitxKyIpKC4qKSQiLCJpIiksYlE9bmV3IFJlZ0V4cCgiXigiK3ErIikoPyFweClbYS16JV0rJCIsImkiKSxiUj1uZXcgUmVnRXhwKCJeKFstK10pPSgiK3ErIikiLCJpIiksYlM9e30sYlQ9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LGJVPXtsZXR0ZXJTcGFjaW5nOjAsZm9udFdlaWdodDo0MDB9LGJWPVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sYlc9WyJXZWJraXQiLCJPIiwiTW96IiwibXMiXSxiWD1wLmZuLnRvZ2dsZTtwLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGEsYyl7cmV0dXJuIHAuYWNjZXNzKHRoaXMsZnVuY3Rpb24oYSxjLGQpe3JldHVybiBkIT09Yj9wLnN0eWxlKGEsYyxkKTpwLmNzcyhhLGMpfSxhLGMsYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBiJCh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBiJCh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGE9PSJib29sZWFuIjtyZXR1cm4gcC5pc0Z1bmN0aW9uKGEpJiZwLmlzRnVuY3Rpb24oYik/YlguYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuZWFjaChmdW5jdGlvbigpeyhjP2E6YloodGhpcykpP3AodGhpcykuc2hvdygpOnAodGhpcykuaGlkZSgpfSl9fSkscC5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oYSxiKXtpZihiKXt2YXIgYz1iSChhLCJvcGFjaXR5Iik7cmV0dXJuIGM9PT0iIj8iMSI6Y319fX0sY3NzTnVtYmVyOntmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6cC5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGMsZCxlKXtpZighYXx8YS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04fHwhYS5zdHlsZSlyZXR1cm47dmFyIGYsZyxoLGk9cC5jYW1lbENhc2UoYyksaj1hLnN0eWxlO2M9cC5jc3NQcm9wc1tpXXx8KHAuY3NzUHJvcHNbaV09YlkoaixpKSksaD1wLmNzc0hvb2tzW2NdfHxwLmNzc0hvb2tzW2ldO2lmKGQ9PT1iKXJldHVybiBoJiYiZ2V0ImluIGgmJihmPWguZ2V0KGEsITEsZSkpIT09Yj9mOmpbY107Zz10eXBlb2YgZCxnPT09InN0cmluZyImJihmPWJSLmV4ZWMoZCkpJiYoZD0oZlsxXSsxKSpmWzJdK3BhcnNlRmxvYXQocC5jc3MoYSxjKSksZz0ibnVtYmVyIik7aWYoZD09bnVsbHx8Zz09PSJudW1iZXIiJiZpc05hTihkKSlyZXR1cm47Zz09PSJudW1iZXIiJiYhcC5jc3NOdW1iZXJbaV0mJihkKz0icHgiKTtpZighaHx8ISgic2V0ImluIGgpfHwoZD1oLnNldChhLGQsZSkpIT09Yil0cnl7altjXT1kfWNhdGNoKGspe319LGNzczpmdW5jdGlvbihhLGMsZCxlKXt2YXIgZixnLGgsaT1wLmNhbWVsQ2FzZShjKTtyZXR1cm4gYz1wLmNzc1Byb3BzW2ldfHwocC5jc3NQcm9wc1tpXT1iWShhLnN0eWxlLGkpKSxoPXAuY3NzSG9va3NbY118fHAuY3NzSG9va3NbaV0saCYmImdldCJpbiBoJiYoZj1oLmdldChhLCEwLGUpKSxmPT09YiYmKGY9YkgoYSxjKSksZj09PSJub3JtYWwiJiZjIGluIGJVJiYoZj1iVVtjXSksZHx8ZSE9PWI/KGc9cGFyc2VGbG9hdChmKSxkfHxwLmlzTnVtZXJpYyhnKT9nfHwwOmYpOmZ9LHN3YXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj17fTtmb3IoZSBpbiBiKWZbZV09YS5zdHlsZVtlXSxhLnN0eWxlW2VdPWJbZV07ZD1jLmNhbGwoYSk7Zm9yKGUgaW4gYilhLnN0eWxlW2VdPWZbZV07cmV0dXJuIGR9fSksYS5nZXRDb21wdXRlZFN0eWxlP2JIPWZ1bmN0aW9uKGIsYyl7dmFyIGQsZSxmLGcsaD1hLmdldENvbXB1dGVkU3R5bGUoYixudWxsKSxpPWIuc3R5bGU7cmV0dXJuIGgmJihkPWhbY10sZD09PSIiJiYhcC5jb250YWlucyhiLm93bmVyRG9jdW1lbnQsYikmJihkPXAuc3R5bGUoYixjKSksYlEudGVzdChkKSYmYk8udGVzdChjKSYmKGU9aS53aWR0aCxmPWkubWluV2lkdGgsZz1pLm1heFdpZHRoLGkubWluV2lkdGg9aS5tYXhXaWR0aD1pLndpZHRoPWQsZD1oLndpZHRoLGkud2lkdGg9ZSxpLm1pbldpZHRoPWYsaS5tYXhXaWR0aD1nKSksZH06ZS5kb2N1bWVudEVsZW1lbnQuY3VycmVudFN0eWxlJiYoYkg9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9YS5jdXJyZW50U3R5bGUmJmEuY3VycmVudFN0eWxlW2JdLGY9YS5zdHlsZTtyZXR1cm4gZT09bnVsbCYmZiYmZltiXSYmKGU9ZltiXSksYlEudGVzdChlKSYmIWJNLnRlc3QoYikmJihjPWYubGVmdCxkPWEucnVudGltZVN0eWxlJiZhLnJ1bnRpbWVTdHlsZS5sZWZ0LGQmJihhLnJ1bnRpbWVTdHlsZS5sZWZ0PWEuY3VycmVudFN0eWxlLmxlZnQpLGYubGVmdD1iPT09ImZvbnRTaXplIj8iMWVtIjplLGU9Zi5waXhlbExlZnQrInB4IixmLmxlZnQ9YyxkJiYoYS5ydW50aW1lU3R5bGUubGVmdD1kKSksZT09PSIiPyJhdXRvIjplfSkscC5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihhLGIpe3AuY3NzSG9va3NbYl09e2dldDpmdW5jdGlvbihhLGMsZCl7aWYoYylyZXR1cm4gYS5vZmZzZXRXaWR0aD09PTAmJmJOLnRlc3QoYkgoYSwiZGlzcGxheSIpKT9wLnN3YXAoYSxiVCxmdW5jdGlvbigpe3JldHVybiBjYihhLGIsZCl9KTpjYihhLGIsZCl9LHNldDpmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGJfKGEsYyxkP2NhKGEsYixkLHAuc3VwcG9ydC5ib3hTaXppbmcmJnAuY3NzKGEsImJveFNpemluZyIpPT09ImJvcmRlci1ib3giKTowKX19fSkscC5zdXBwb3J0Lm9wYWNpdHl8fChwLmNzc0hvb2tzLm9wYWNpdHk9e2dldDpmdW5jdGlvbihhLGIpe3JldHVybiBiTC50ZXN0KChiJiZhLmN1cnJlbnRTdHlsZT9hLmN1cnJlbnRTdHlsZS5maWx0ZXI6YS5zdHlsZS5maWx0ZXIpfHwiIik/LjAxKnBhcnNlRmxvYXQoUmVnRXhwLiQxKSsiIjpiPyIxIjoiIn0sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5zdHlsZSxkPWEuY3VycmVudFN0eWxlLGU9cC5pc051bWVyaWMoYik/ImFscGhhKG9wYWNpdHk9IitiKjEwMCsiKSI6IiIsZj1kJiZkLmZpbHRlcnx8Yy5maWx0ZXJ8fCIiO2Muem9vbT0xO2lmKGI+PTEmJnAudHJpbShmLnJlcGxhY2UoYkssIiIpKT09PSIiJiZjLnJlbW92ZUF0dHJpYnV0ZSl7Yy5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpO2lmKGQmJiFkLmZpbHRlcilyZXR1cm59Yy5maWx0ZXI9YksudGVzdChmKT9mLnJlcGxhY2UoYkssZSk6ZisiICIrZX19KSxwKGZ1bmN0aW9uKCl7cC5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHR8fChwLmNzc0hvb2tzLm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gcC5zd2FwKGEse2Rpc3BsYXk6ImlubGluZS1ibG9jayJ9LGZ1bmN0aW9uKCl7aWYoYilyZXR1cm4gYkgoYSwibWFyZ2luUmlnaHQiKX0pfX0pLCFwLnN1cHBvcnQucGl4ZWxQb3NpdGlvbiYmcC5mbi5wb3NpdGlvbiYmcC5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGEsYil7cC5jc3NIb29rc1tiXT17Z2V0OmZ1bmN0aW9uKGEsYyl7aWYoYyl7dmFyIGQ9YkgoYSxiKTtyZXR1cm4gYlEudGVzdChkKT9wKGEpLnBvc2l0aW9uKClbYl0rInB4IjpkfX19fSl9KSxwLmV4cHImJnAuZXhwci5maWx0ZXJzJiYocC5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGEpe3JldHVybiBhLm9mZnNldFdpZHRoPT09MCYmYS5vZmZzZXRIZWlnaHQ9PT0wfHwhcC5zdXBwb3J0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cyYmKGEuc3R5bGUmJmEuc3R5bGUuZGlzcGxheXx8YkgoYSwiZGlzcGxheSIpKT09PSJub25lIn0scC5leHByLmZpbHRlcnMudmlzaWJsZT1mdW5jdGlvbihhKXtyZXR1cm4hcC5leHByLmZpbHRlcnMuaGlkZGVuKGEpfSkscC5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24oYSxiKXtwLmNzc0hvb2tzW2ErYl09e2V4cGFuZDpmdW5jdGlvbihjKXt2YXIgZCxlPXR5cGVvZiBjPT0ic3RyaW5nIj9jLnNwbGl0KCIgIik6W2NdLGY9e307Zm9yKGQ9MDtkPDQ7ZCsrKWZbYStiVltkXStiXT1lW2RdfHxlW2QtMl18fGVbMF07cmV0dXJuIGZ9fSxiTy50ZXN0KGEpfHwocC5jc3NIb29rc1thK2JdLnNldD1iXyl9KTt2YXIgY2Q9LyUyMC9nLGNlPS9cW1xdJC8sY2Y9L1xyP1xuL2csY2c9L14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lLWxvY2FsfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLGNoPS9eKD86c2VsZWN0fHRleHRhcmVhKS9pO3AuZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gcC5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnRzP3AubWFrZUFycmF5KHRoaXMuZWxlbWVudHMpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lJiYhdGhpcy5kaXNhYmxlZCYmKHRoaXMuY2hlY2tlZHx8Y2gudGVzdCh0aGlzLm5vZGVOYW1lKXx8Y2cudGVzdCh0aGlzLnR5cGUpKX0pLm1hcChmdW5jdGlvbihhLGIpe3ZhciBjPXAodGhpcykudmFsKCk7cmV0dXJuIGM9PW51bGw/bnVsbDpwLmlzQXJyYXkoYyk/cC5tYXAoYyxmdW5jdGlvbihhLGMpe3JldHVybntuYW1lOmIubmFtZSx2YWx1ZTphLnJlcGxhY2UoY2YsIlxyXG4iKX19KTp7bmFtZTpiLm5hbWUsdmFsdWU6Yy5yZXBsYWNlKGNmLCJcclxuIil9fSkuZ2V0KCl9fSkscC5wYXJhbT1mdW5jdGlvbihhLGMpe3ZhciBkLGU9W10sZj1mdW5jdGlvbihhLGIpe2I9cC5pc0Z1bmN0aW9uKGIpP2IoKTpiPT1udWxsPyIiOmIsZVtlLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYil9O2M9PT1iJiYoYz1wLmFqYXhTZXR0aW5ncyYmcC5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO2lmKHAuaXNBcnJheShhKXx8YS5qcXVlcnkmJiFwLmlzUGxhaW5PYmplY3QoYSkpcC5lYWNoKGEsZnVuY3Rpb24oKXtmKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKGQgaW4gYSljaShkLGFbZF0sYyxmKTtyZXR1cm4gZS5qb2luKCImIikucmVwbGFjZShjZCwiKyIpfTt2YXIgY2osY2ssY2w9LyMuKiQvLGNtPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcsY249L14oPzphYm91dHxhcHB8YXBwXC1zdG9yYWdlfC4rXC1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxjbz0vXig/OkdFVHxIRUFEKSQvLGNwPS9eXC9cLy8sY3E9L1w/Lyxjcj0vPHNjcmlwdFxiW148XSooPzooPyE8XC9zY3JpcHQ+KTxbXjxdKikqPFwvc2NyaXB0Pi9naSxjcz0vKFs/Jl0pXz1bXiZdKi8sY3Q9L14oW1x3XCtcLlwtXSs6KSg/OlwvXC8oW15cLz8jOl0qKSg/OjooXGQrKXwpfCkvLGN1PXAuZm4ubG9hZCxjdj17fSxjdz17fSxjeD1bIiovIl0rWyIqIl07dHJ5e2NrPWYuaHJlZn1jYXRjaChjeSl7Y2s9ZS5jcmVhdGVFbGVtZW50KCJhIiksY2suaHJlZj0iIixjaz1jay5ocmVmfWNqPWN0LmV4ZWMoY2sudG9Mb3dlckNhc2UoKSl8fFtdLHAuZm4ubG9hZD1mdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGEhPSJzdHJpbmciJiZjdSlyZXR1cm4gY3UuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZSxmLGcsaD10aGlzLGk9YS5pbmRleE9mKCIgIik7cmV0dXJuIGk+PTAmJihlPWEuc2xpY2UoaSxhLmxlbmd0aCksYT1hLnNsaWNlKDAsaSkpLHAuaXNGdW5jdGlvbihjKT8oZD1jLGM9Yik6YyYmdHlwZW9mIGM9PSJvYmplY3QiJiYoZj0iUE9TVCIpLHAuYWpheCh7dXJsOmEsdHlwZTpmLGRhdGFUeXBlOiJodG1sIixkYXRhOmMsY29tcGxldGU6ZnVuY3Rpb24oYSxiKXtkJiZoLmVhY2goZCxnfHxbYS5yZXNwb25zZVRleHQsYixhXSl9fSkuZG9uZShmdW5jdGlvbihhKXtnPWFyZ3VtZW50cyxoLmh0bWwoZT9wKCI8ZGl2PiIpLmFwcGVuZChhLnJlcGxhY2UoY3IsIiIpKS5maW5kKGUpOmEpfSksdGhpc30scC5lYWNoKCJhamF4U3RhcnQgYWpheFN0b3AgYWpheENvbXBsZXRlIGFqYXhFcnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe3AuZm5bYl09ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMub24oYixhKX19KSxwLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oYSxjKXtwW2NdPWZ1bmN0aW9uKGEsZCxlLGYpe3JldHVybiBwLmlzRnVuY3Rpb24oZCkmJihmPWZ8fGUsZT1kLGQ9YikscC5hamF4KHt0eXBlOmMsdXJsOmEsZGF0YTpkLHN1Y2Nlc3M6ZSxkYXRhVHlwZTpmfSl9fSkscC5leHRlbmQoe2dldFNjcmlwdDpmdW5jdGlvbihhLGMpe3JldHVybiBwLmdldChhLGIsYywic2NyaXB0Iil9LGdldEpTT046ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBwLmdldChhLGIsYywianNvbiIpfSxhamF4U2V0dXA6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9jQihhLHAuYWpheFNldHRpbmdzKTooYj1hLGE9cC5hamF4U2V0dGluZ3MpLGNCKGEsYiksYX0sYWpheFNldHRpbmdzOnt1cmw6Y2ssaXNMb2NhbDpjbi50ZXN0KGNqWzFdKSxnbG9iYWw6ITAsdHlwZToiR0VUIixjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04Iixwcm9jZXNzRGF0YTohMCxhc3luYzohMCxhY2NlcHRzOnt4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6InRleHQvaHRtbCIsdGV4dDoidGV4dC9wbGFpbiIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwiKiI6Y3h9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjphLlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpwLnBhcnNlSlNPTiwidGV4dCB4bWwiOnAucGFyc2VYTUx9LGZsYXRPcHRpb25zOntjb250ZXh0OiEwLHVybDohMH19LGFqYXhQcmVmaWx0ZXI6Y3ooY3YpLGFqYXhUcmFuc3BvcnQ6Y3ooY3cpLGFqYXg6ZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiB5KGEsYyxmLGkpe3ZhciBrLHMsdCx1LHcseT1jO2lmKHY9PT0yKXJldHVybjt2PTIsaCYmY2xlYXJUaW1lb3V0KGgpLGc9YixlPWl8fCIiLHgucmVhZHlTdGF0ZT1hPjA/NDowLGYmJih1PWNDKGwseCxmKSk7aWYoYT49MjAwJiZhPDMwMHx8YT09PTMwNClsLmlmTW9kaWZpZWQmJih3PXguZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSx3JiYocC5sYXN0TW9kaWZpZWRbZF09dyksdz14LmdldFJlc3BvbnNlSGVhZGVyKCJFdGFnIiksdyYmKHAuZXRhZ1tkXT13KSksYT09PTMwND8oeT0ibm90bW9kaWZpZWQiLGs9ITApOihrPWNEKGwsdSkseT1rLnN0YXRlLHM9ay5kYXRhLHQ9ay5lcnJvcixrPSF0KTtlbHNle3Q9eTtpZigheXx8YSl5PSJlcnJvciIsYTwwJiYoYT0wKX14LnN0YXR1cz1hLHguc3RhdHVzVGV4dD0oY3x8eSkrIiIsaz9vLnJlc29sdmVXaXRoKG0sW3MseSx4XSk6by5yZWplY3RXaXRoKG0sW3gseSx0XSkseC5zdGF0dXNDb2RlKHIpLHI9YixqJiZuLnRyaWdnZXIoImFqYXgiKyhrPyJTdWNjZXNzIjoiRXJyb3IiKSxbeCxsLGs/czp0XSkscS5maXJlV2l0aChtLFt4LHldKSxqJiYobi50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFt4LGxdKSwtLXAuYWN0aXZlfHxwLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpfXR5cGVvZiBhPT0ib2JqZWN0IiYmKGM9YSxhPWIpLGM9Y3x8e307dmFyIGQsZSxmLGcsaCxpLGosayxsPXAuYWpheFNldHVwKHt9LGMpLG09bC5jb250ZXh0fHxsLG49bSE9PWwmJihtLm5vZGVUeXBlfHxtIGluc3RhbmNlb2YgcCk/cChtKTpwLmV2ZW50LG89cC5EZWZlcnJlZCgpLHE9cC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iikscj1sLnN0YXR1c0NvZGV8fHt9LHQ9e30sdT17fSx2PTAsdz0iY2FuY2VsZWQiLHg9e3JlYWR5U3RhdGU6MCxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7aWYoIXYpe3ZhciBjPWEudG9Mb3dlckNhc2UoKTthPXVbY109dVtjXXx8YSx0W2FdPWJ9cmV0dXJuIHRoaXN9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiB2PT09Mj9lOm51bGx9LGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBjO2lmKHY9PT0yKXtpZighZil7Zj17fTt3aGlsZShjPWNtLmV4ZWMoZSkpZltjWzFdLnRvTG93ZXJDYXNlKCldPWNbMl19Yz1mW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIGM9PT1iP251bGw6Y30sb3ZlcnJpZGVNaW1lVHlwZTpmdW5jdGlvbihhKXtyZXR1cm4gdnx8KGwubWltZVR5cGU9YSksdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YXx8dyxnJiZnLmFib3J0KGEpLHkoMCxhKSx0aGlzfX07by5wcm9taXNlKHgpLHguc3VjY2Vzcz14LmRvbmUseC5lcnJvcj14LmZhaWwseC5jb21wbGV0ZT1xLmFkZCx4LnN0YXR1c0NvZGU9ZnVuY3Rpb24oYSl7aWYoYSl7dmFyIGI7aWYodjwyKWZvcihiIGluIGEpcltiXT1bcltiXSxhW2JdXTtlbHNlIGI9YVt4LnN0YXR1c10seC5hbHdheXMoYil9cmV0dXJuIHRoaXN9LGwudXJsPSgoYXx8bC51cmwpKyIiKS5yZXBsYWNlKGNsLCIiKS5yZXBsYWNlKGNwLGNqWzFdKyIvLyIpLGwuZGF0YVR5cGVzPXAudHJpbShsLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkuc3BsaXQocyksbC5jcm9zc0RvbWFpbj09bnVsbCYmKGk9Y3QuZXhlYyhsLnVybC50b0xvd2VyQ2FzZSgpKXx8ITEsbC5jcm9zc0RvbWFpbj1pJiZpLmpvaW4oIjoiKSsoaVszXT8iIjppWzFdPT09Imh0dHA6Ij84MDo0NDMpIT09Y2ouam9pbigiOiIpKyhjalszXT8iIjpjalsxXT09PSJodHRwOiI/ODA6NDQzKSksbC5kYXRhJiZsLnByb2Nlc3NEYXRhJiZ0eXBlb2YgbC5kYXRhIT0ic3RyaW5nIiYmKGwuZGF0YT1wLnBhcmFtKGwuZGF0YSxsLnRyYWRpdGlvbmFsKSksY0EoY3YsbCxjLHgpO2lmKHY9PT0yKXJldHVybiB4O2o9bC5nbG9iYWwsbC50eXBlPWwudHlwZS50b1VwcGVyQ2FzZSgpLGwuaGFzQ29udGVudD0hY28udGVzdChsLnR5cGUpLGomJnAuYWN0aXZlKys9PT0wJiZwLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpO2lmKCFsLmhhc0NvbnRlbnQpe2wuZGF0YSYmKGwudXJsKz0oY3EudGVzdChsLnVybCk/IiYiOiI/IikrbC5kYXRhLGRlbGV0ZSBsLmRhdGEpLGQ9bC51cmw7aWYobC5jYWNoZT09PSExKXt2YXIgej1wLm5vdygpLEE9bC51cmwucmVwbGFjZShjcywiJDFfPSIreik7bC51cmw9QSsoQT09PWwudXJsPyhjcS50ZXN0KGwudXJsKT8iJiI6Ij8iKSsiXz0iK3o6IiIpfX0obC5kYXRhJiZsLmhhc0NvbnRlbnQmJmwuY29udGVudFR5cGUhPT0hMXx8Yy5jb250ZW50VHlwZSkmJnguc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixsLmNvbnRlbnRUeXBlKSxsLmlmTW9kaWZpZWQmJihkPWR8fGwudXJsLHAubGFzdE1vZGlmaWVkW2RdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixwLmxhc3RNb2RpZmllZFtkXSkscC5ldGFnW2RdJiZ4LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLHAuZXRhZ1tkXSkpLHguc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixsLmRhdGFUeXBlc1swXSYmbC5hY2NlcHRzW2wuZGF0YVR5cGVzWzBdXT9sLmFjY2VwdHNbbC5kYXRhVHlwZXNbMF1dKyhsLmRhdGFUeXBlc1swXSE9PSIqIj8iLCAiK2N4KyI7IHE9MC4wMSI6IiIpOmwuYWNjZXB0c1siKiJdKTtmb3IoayBpbiBsLmhlYWRlcnMpeC5zZXRSZXF1ZXN0SGVhZGVyKGssbC5oZWFkZXJzW2tdKTtpZighbC5iZWZvcmVTZW5kfHxsLmJlZm9yZVNlbmQuY2FsbChtLHgsbCkhPT0hMSYmdiE9PTIpe3c9ImFib3J0Ijtmb3IoayBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSl4W2tdKGxba10pO2c9Y0EoY3csbCxjLHgpO2lmKCFnKXkoLTEsIk5vIFRyYW5zcG9ydCIpO2Vsc2V7eC5yZWFkeVN0YXRlPTEsaiYmbi50cmlnZ2VyKCJhamF4U2VuZCIsW3gsbF0pLGwuYXN5bmMmJmwudGltZW91dD4wJiYoaD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eC5hYm9ydCgidGltZW91dCIpfSxsLnRpbWVvdXQpKTt0cnl7dj0xLGcuc2VuZCh0LHkpfWNhdGNoKEIpe2lmKHY8Mil5KC0xLEIpO2Vsc2UgdGhyb3cgQn19cmV0dXJuIHh9cmV0dXJuIHguYWJvcnQoKX0sYWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e319KTt2YXIgY0U9W10sY0Y9L1w/LyxjRz0vKD0pXD8oPz0mfCQpfFw/XD8vLGNIPXAubm93KCk7cC5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBhPWNFLnBvcCgpfHxwLmV4cGFuZG8rIl8iK2NIKys7cmV0dXJuIHRoaXNbYV09ITAsYX19KSxwLmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9uKGMsZCxlKXt2YXIgZixnLGgsaT1jLmRhdGEsaj1jLnVybCxrPWMuanNvbnAhPT0hMSxsPWsmJmNHLnRlc3QoaiksbT1rJiYhbCYmdHlwZW9mIGk9PSJzdHJpbmciJiYhKGMuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmY0cudGVzdChpKTtpZihjLmRhdGFUeXBlc1swXT09PSJqc29ucCJ8fGx8fG0pcmV0dXJuIGY9Yy5qc29ucENhbGxiYWNrPXAuaXNGdW5jdGlvbihjLmpzb25wQ2FsbGJhY2spP2MuanNvbnBDYWxsYmFjaygpOmMuanNvbnBDYWxsYmFjayxnPWFbZl0sbD9jLnVybD1qLnJlcGxhY2UoY0csIiQxIitmKTptP2MuZGF0YT1pLnJlcGxhY2UoY0csIiQxIitmKTprJiYoYy51cmwrPShjRi50ZXN0KGopPyImIjoiPyIpK2MuanNvbnArIj0iK2YpLGMuY29udmVydGVyc1sic2NyaXB0IGpzb24iXT1mdW5jdGlvbigpe3JldHVybiBofHxwLmVycm9yKGYrIiB3YXMgbm90IGNhbGxlZCIpLGhbMF19LGMuZGF0YVR5cGVzWzBdPSJqc29uIixhW2ZdPWZ1bmN0aW9uKCl7aD1hcmd1bWVudHN9LGUuYWx3YXlzKGZ1bmN0aW9uKCl7YVtmXT1nLGNbZl0mJihjLmpzb25wQ2FsbGJhY2s9ZC5qc29ucENhbGxiYWNrLGNFLnB1c2goZikpLGgmJnAuaXNGdW5jdGlvbihnKSYmZyhoWzBdKSxoPWc9Yn0pLCJzY3JpcHQifSkscC5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi9qYXZhc2NyaXB0fGVjbWFzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe3JldHVybiBwLmdsb2JhbEV2YWwoYSksYX19fSkscC5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2EuY2FjaGU9PT1iJiYoYS5jYWNoZT0hMSksYS5jcm9zc0RvbWFpbiYmKGEudHlwZT0iR0VUIixhLmdsb2JhbD0hMSl9KSxwLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24oYSl7aWYoYS5jcm9zc0RvbWFpbil7dmFyIGMsZD1lLmhlYWR8fGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8ZS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZixnKXtjPWUuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksYy5hc3luYz0iYXN5bmMiLGEuc2NyaXB0Q2hhcnNldCYmKGMuY2hhcnNldD1hLnNjcmlwdENoYXJzZXQpLGMuc3JjPWEudXJsLGMub25sb2FkPWMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKGEsZSl7aWYoZXx8IWMucmVhZHlTdGF0ZXx8L2xvYWRlZHxjb21wbGV0ZS8udGVzdChjLnJlYWR5U3RhdGUpKWMub25sb2FkPWMub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsZCYmYy5wYXJlbnROb2RlJiZkLnJlbW92ZUNoaWxkKGMpLGM9YixlfHxnKDIwMCwic3VjY2VzcyIpfSxkLmluc2VydEJlZm9yZShjLGQuZmlyc3RDaGlsZCl9LGFib3J0OmZ1bmN0aW9uKCl7YyYmYy5vbmxvYWQoMCwxKX19fX0pO3ZhciBjSSxjSj1hLkFjdGl2ZVhPYmplY3Q/ZnVuY3Rpb24oKXtmb3IodmFyIGEgaW4gY0kpY0lbYV0oMCwxKX06ITEsY0s9MDtwLmFqYXhTZXR0aW5ncy54aHI9YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNMb2NhbCYmY0woKXx8Y00oKX06Y0wsZnVuY3Rpb24oYSl7cC5leHRlbmQocC5zdXBwb3J0LHthamF4OiEhYSxjb3JzOiEhYSYmIndpdGhDcmVkZW50aWFscyJpbiBhfSl9KHAuYWpheFNldHRpbmdzLnhocigpKSxwLnN1cHBvcnQuYWpheCYmcC5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGMpe2lmKCFjLmNyb3NzRG9tYWlufHxwLnN1cHBvcnQuY29ycyl7dmFyIGQ7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSxmKXt2YXIgZyxoLGk9Yy54aHIoKTtjLnVzZXJuYW1lP2kub3BlbihjLnR5cGUsYy51cmwsYy5hc3luYyxjLnVzZXJuYW1lLGMucGFzc3dvcmQpOmkub3BlbihjLnR5cGUsYy51cmwsYy5hc3luYyk7aWYoYy54aHJGaWVsZHMpZm9yKGggaW4gYy54aHJGaWVsZHMpaVtoXT1jLnhockZpZWxkc1toXTtjLm1pbWVUeXBlJiZpLm92ZXJyaWRlTWltZVR5cGUmJmkub3ZlcnJpZGVNaW1lVHlwZShjLm1pbWVUeXBlKSwhYy5jcm9zc0RvbWFpbiYmIWVbIlgtUmVxdWVzdGVkLVdpdGgiXSYmKGVbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTt0cnl7Zm9yKGggaW4gZSlpLnNldFJlcXVlc3RIZWFkZXIoaCxlW2hdKX1jYXRjaChqKXt9aS5zZW5kKGMuaGFzQ29udGVudCYmYy5kYXRhfHxudWxsKSxkPWZ1bmN0aW9uKGEsZSl7dmFyIGgsaixrLGwsbTt0cnl7aWYoZCYmKGV8fGkucmVhZHlTdGF0ZT09PTQpKXtkPWIsZyYmKGkub25yZWFkeXN0YXRlY2hhbmdlPXAubm9vcCxjSiYmZGVsZXRlIGNJW2ddKTtpZihlKWkucmVhZHlTdGF0ZSE9PTQmJmkuYWJvcnQoKTtlbHNle2g9aS5zdGF0dXMsaz1pLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLGw9e30sbT1pLnJlc3BvbnNlWE1MLG0mJm0uZG9jdW1lbnRFbGVtZW50JiYobC54bWw9bSk7dHJ5e2wudGV4dD1pLnJlc3BvbnNlVGV4dH1jYXRjaChhKXt9dHJ5e2o9aS5zdGF0dXNUZXh0fWNhdGNoKG4pe2o9IiJ9IWgmJmMuaXNMb2NhbCYmIWMuY3Jvc3NEb21haW4/aD1sLnRleHQ/MjAwOjQwNDpoPT09MTIyMyYmKGg9MjA0KX19fWNhdGNoKG8pe2V8fGYoLTEsbyl9bCYmZihoLGosbCxrKX0sYy5hc3luYz9pLnJlYWR5U3RhdGU9PT00P3NldFRpbWVvdXQoZCwwKTooZz0rK2NLLGNKJiYoY0l8fChjST17fSxwKGEpLnVubG9hZChjSikpLGNJW2ddPWQpLGkub25yZWFkeXN0YXRlY2hhbmdlPWQpOmQoKX0sYWJvcnQ6ZnVuY3Rpb24oKXtkJiZkKDAsMSl9fX19KTt2YXIgY04sY08sY1A9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGNRPW5ldyBSZWdFeHAoIl4oPzooWy0rXSk9fCkoIitxKyIpKFthLXolXSopJCIsImkiKSxjUj0vcXVldWVIb29rcyQvLGNTPVtjWV0sY1Q9eyIqIjpbZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9dGhpcy5jcmVhdGVUd2VlbihhLGIpLGY9Y1EuZXhlYyhiKSxnPWUuY3VyKCksaD0rZ3x8MCxpPTEsaj0yMDtpZihmKXtjPStmWzJdLGQ9ZlszXXx8KHAuY3NzTnVtYmVyW2FdPyIiOiJweCIpO2lmKGQhPT0icHgiJiZoKXtoPXAuY3NzKGUuZWxlbSxhLCEwKXx8Y3x8MTtkbyBpPWl8fCIuNSIsaD1oL2kscC5zdHlsZShlLmVsZW0sYSxoK2QpO3doaWxlKGkhPT0oaT1lLmN1cigpL2cpJiZpIT09MSYmLS1qKX1lLnVuaXQ9ZCxlLnN0YXJ0PWgsZS5lbmQ9ZlsxXT9oKyhmWzFdKzEpKmM6Y31yZXR1cm4gZX1dfTtwLkFuaW1hdGlvbj1wLmV4dGVuZChjVyx7dHdlZW5lcjpmdW5jdGlvbihhLGIpe3AuaXNGdW5jdGlvbihhKT8oYj1hLGE9WyIqIl0pOmE9YS5zcGxpdCgiICIpO3ZhciBjLGQ9MCxlPWEubGVuZ3RoO2Zvcig7ZDxlO2QrKyljPWFbZF0sY1RbY109Y1RbY118fFtdLGNUW2NdLnVuc2hpZnQoYil9LHByZWZpbHRlcjpmdW5jdGlvbihhLGIpe2I/Y1MudW5zaGlmdChhKTpjUy5wdXNoKGEpfX0pLHAuVHdlZW49Y1osY1oucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpjWixpbml0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmVsZW09YSx0aGlzLnByb3A9Yyx0aGlzLmVhc2luZz1lfHwic3dpbmciLHRoaXMub3B0aW9ucz1iLHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1kLHRoaXMudW5pdD1mfHwocC5jc3NOdW1iZXJbY10/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBhPWNaLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBhJiZhLmdldD9hLmdldCh0aGlzKTpjWi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oYSl7dmFyIGIsYz1jWi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uP3RoaXMucG9zPWI9cC5lYXNpbmdbdGhpcy5lYXNpbmddKGEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmEsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9Yj1hLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSpiK3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLGMmJmMuc2V0P2Muc2V0KHRoaXMpOmNaLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LGNaLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1jWi5wcm90b3R5cGUsY1oucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBhLmVsZW1bYS5wcm9wXT09bnVsbHx8ISFhLmVsZW0uc3R5bGUmJmEuZWxlbS5zdHlsZVthLnByb3BdIT1udWxsPyhiPXAuY3NzKGEuZWxlbSxhLnByb3AsITEsIiIpLCFifHxiPT09ImF1dG8iPzA6Yik6YS5lbGVtW2EucHJvcF19LHNldDpmdW5jdGlvbihhKXtwLmZ4LnN0ZXBbYS5wcm9wXT9wLmZ4LnN0ZXBbYS5wcm9wXShhKTphLmVsZW0uc3R5bGUmJihhLmVsZW0uc3R5bGVbcC5jc3NQcm9wc1thLnByb3BdXSE9bnVsbHx8cC5jc3NIb29rc1thLnByb3BdKT9wLnN0eWxlKGEuZWxlbSxhLnByb3AsYS5ub3crYS51bml0KTphLmVsZW1bYS5wcm9wXT1hLm5vd319fSxjWi5wcm9wSG9va3Muc2Nyb2xsVG9wPWNaLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oYSl7YS5lbGVtLm5vZGVUeXBlJiZhLmVsZW0ucGFyZW50Tm9kZSYmKGEuZWxlbVthLnByb3BdPWEubm93KX19LHAuZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24oYSxiKXt2YXIgYz1wLmZuW2JdO3AuZm5bYl09ZnVuY3Rpb24oZCxlLGYpe3JldHVybiBkPT1udWxsfHx0eXBlb2YgZD09ImJvb2xlYW4ifHwhYSYmcC5pc0Z1bmN0aW9uKGQpJiZwLmlzRnVuY3Rpb24oZSk/Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKGMkKGIsITApLGQsZSxmKX19KSxwLmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLmZpbHRlcihiWikuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9cC5pc0VtcHR5T2JqZWN0KGEpLGY9cC5zcGVlZChiLGMsZCksZz1mdW5jdGlvbigpe3ZhciBiPWNXKHRoaXMscC5leHRlbmQoe30sYSksZik7ZSYmYi5zdG9wKCEwKX07cmV0dXJuIGV8fGYucXVldWU9PT0hMT90aGlzLmVhY2goZyk6dGhpcy5xdWV1ZShmLnF1ZXVlLGcpfSxzdG9wOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1mdW5jdGlvbihhKXt2YXIgYj1hLnN0b3A7ZGVsZXRlIGEuc3RvcCxiKGQpfTtyZXR1cm4gdHlwZW9mIGEhPSJzdHJpbmciJiYoZD1jLGM9YSxhPWIpLGMmJmEhPT0hMSYmdGhpcy5xdWV1ZShhfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj0hMCxjPWEhPW51bGwmJmErInF1ZXVlSG9va3MiLGY9cC50aW1lcnMsZz1wLl9kYXRhKHRoaXMpO2lmKGMpZ1tjXSYmZ1tjXS5zdG9wJiZlKGdbY10pO2Vsc2UgZm9yKGMgaW4gZylnW2NdJiZnW2NdLnN0b3AmJmNSLnRlc3QoYykmJmUoZ1tjXSk7Zm9yKGM9Zi5sZW5ndGg7Yy0tOylmW2NdLmVsZW09PT10aGlzJiYoYT09bnVsbHx8ZltjXS5xdWV1ZT09PWEpJiYoZltjXS5hbmltLnN0b3AoZCksYj0hMSxmLnNwbGljZShjLDEpKTsoYnx8IWQpJiZwLmRlcXVldWUodGhpcyxhKX0pfX0pLHAuZWFjaCh7c2xpZGVEb3duOmMkKCJzaG93Iiksc2xpZGVVcDpjJCgiaGlkZSIpLHNsaWRlVG9nZ2xlOmMkKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7cC5mblthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxwLnNwZWVkPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1hJiZ0eXBlb2YgYT09Im9iamVjdCI/cC5leHRlbmQoe30sYSk6e2NvbXBsZXRlOmN8fCFjJiZifHxwLmlzRnVuY3Rpb24oYSkmJmEsZHVyYXRpb246YSxlYXNpbmc6YyYmYnx8YiYmIXAuaXNGdW5jdGlvbihiKSYmYn07ZC5kdXJhdGlvbj1wLmZ4Lm9mZj8wOnR5cGVvZiBkLmR1cmF0aW9uPT0ibnVtYmVyIj9kLmR1cmF0aW9uOmQuZHVyYXRpb24gaW4gcC5meC5zcGVlZHM/cC5meC5zcGVlZHNbZC5kdXJhdGlvbl06cC5meC5zcGVlZHMuX2RlZmF1bHQ7aWYoZC5xdWV1ZT09bnVsbHx8ZC5xdWV1ZT09PSEwKWQucXVldWU9ImZ4IjtyZXR1cm4gZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7cC5pc0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZwLmRlcXVldWUodGhpcyxkLnF1ZXVlKX0sZH0scC5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihhKXtyZXR1cm4gYX0sc3dpbmc6ZnVuY3Rpb24oYSl7cmV0dXJuLjUtTWF0aC5jb3MoYSpNYXRoLlBJKS8yfX0scC50aW1lcnM9W10scC5meD1jWi5wcm90b3R5cGUuaW5pdCxwLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPXAudGltZXJzLGM9MDtmb3IoO2M8Yi5sZW5ndGg7YysrKWE9YltjXSwhYSgpJiZiW2NdPT09YSYmYi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxwLmZ4LnN0b3AoKX0scC5meC50aW1lcj1mdW5jdGlvbihhKXthKCkmJnAudGltZXJzLnB1c2goYSkmJiFjTyYmKGNPPXNldEludGVydmFsKHAuZngudGljayxwLmZ4LmludGVydmFsKSl9LHAuZnguaW50ZXJ2YWw9MTMscC5meC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChjTyksY089bnVsbH0scC5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0scC5meC5zdGVwPXt9LHAuZXhwciYmcC5leHByLmZpbHRlcnMmJihwLmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihhKXtyZXR1cm4gcC5ncmVwKHAudGltZXJzLGZ1bmN0aW9uKGIpe3JldHVybiBhPT09Yi5lbGVtfSkubGVuZ3RofSk7dmFyIGNfPS9eKD86Ym9keXxodG1sKSQvaTtwLmZuLm9mZnNldD1mdW5jdGlvbihhKXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBhPT09Yj90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihiKXtwLm9mZnNldC5zZXRPZmZzZXQodGhpcyxhLGIpfSk7dmFyIGMsZCxlLGYsZyxoLGksaj17dG9wOjAsbGVmdDowfSxrPXRoaXNbMF0sbD1rJiZrLm93bmVyRG9jdW1lbnQ7aWYoIWwpcmV0dXJuO3JldHVybihkPWwuYm9keSk9PT1rP3Aub2Zmc2V0LmJvZHlPZmZzZXQoayk6KGM9bC5kb2N1bWVudEVsZW1lbnQscC5jb250YWlucyhjLGspPyh0eXBlb2Ygay5nZXRCb3VuZGluZ0NsaWVudFJlY3QhPSJ1bmRlZmluZWQiJiYoaj1rLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSxlPWRhKGwpLGY9Yy5jbGllbnRUb3B8fGQuY2xpZW50VG9wfHwwLGc9Yy5jbGllbnRMZWZ0fHxkLmNsaWVudExlZnR8fDAsaD1lLnBhZ2VZT2Zmc2V0fHxjLnNjcm9sbFRvcCxpPWUucGFnZVhPZmZzZXR8fGMuc2Nyb2xsTGVmdCx7dG9wOmoudG9wK2gtZixsZWZ0OmoubGVmdCtpLWd9KTpqKX0scC5vZmZzZXQ9e2JvZHlPZmZzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5vZmZzZXRUb3AsYz1hLm9mZnNldExlZnQ7cmV0dXJuIHAuc3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCYmKGIrPXBhcnNlRmxvYXQocC5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMrPXBhcnNlRmxvYXQocC5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCkse3RvcDpiLGxlZnQ6Y319LHNldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9cC5jc3MoYSwicG9zaXRpb24iKTtkPT09InN0YXRpYyImJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciBlPXAoYSksZj1lLm9mZnNldCgpLGc9cC5jc3MoYSwidG9wIiksaD1wLmNzcyhhLCJsZWZ0IiksaT0oZD09PSJhYnNvbHV0ZSJ8fGQ9PT0iZml4ZWQiKSYmcC5pbkFycmF5KCJhdXRvIixbZyxoXSk+LTEsaj17fSxrPXt9LGwsbTtpPyhrPWUucG9zaXRpb24oKSxsPWsudG9wLG09ay5sZWZ0KToobD1wYXJzZUZsb2F0KGcpfHwwLG09cGFyc2VGbG9hdChoKXx8MCkscC5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGYpKSxiLnRvcCE9bnVsbCYmKGoudG9wPWIudG9wLWYudG9wK2wpLGIubGVmdCE9bnVsbCYmKGoubGVmdD1iLmxlZnQtZi5sZWZ0K20pLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLGopOmUuY3NzKGopfX0scC5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pcmV0dXJuO3ZhciBhPXRoaXNbMF0sYj10aGlzLm9mZnNldFBhcmVudCgpLGM9dGhpcy5vZmZzZXQoKSxkPWNfLnRlc3QoYlswXS5ub2RlTmFtZSk/e3RvcDowLGxlZnQ6MH06Yi5vZmZzZXQoKTtyZXR1cm4gYy50b3AtPXBhcnNlRmxvYXQocC5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMubGVmdC09cGFyc2VGbG9hdChwLmNzcyhhLCJtYXJnaW5MZWZ0IikpfHwwLGQudG9wKz1wYXJzZUZsb2F0KHAuY3NzKGJbMF0sImJvcmRlclRvcFdpZHRoIikpfHwwLGQubGVmdCs9cGFyc2VGbG9hdChwLmNzcyhiWzBdLCJib3JkZXJMZWZ0V2lkdGgiKSl8fDAse3RvcDpjLnRvcC1kLnRvcCxsZWZ0OmMubGVmdC1kLmxlZnR9fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9mZnNldFBhcmVudHx8ZS5ib2R5O3doaWxlKGEmJiFjXy50ZXN0KGEubm9kZU5hbWUpJiZwLmNzcyhhLCJwb3NpdGlvbiIpPT09InN0YXRpYyIpYT1hLm9mZnNldFBhcmVudDtyZXR1cm4gYXx8ZS5ib2R5fSl9fSkscC5lYWNoKHtzY3JvbGxMZWZ0OiJwYWdlWE9mZnNldCIsc2Nyb2xsVG9wOiJwYWdlWU9mZnNldCJ9LGZ1bmN0aW9uKGEsYyl7dmFyIGQ9L1kvLnRlc3QoYyk7cC5mblthXT1mdW5jdGlvbihlKXtyZXR1cm4gcC5hY2Nlc3ModGhpcyxmdW5jdGlvbihhLGUsZil7dmFyIGc9ZGEoYSk7aWYoZj09PWIpcmV0dXJuIGc/YyBpbiBnP2dbY106Zy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbZV06YVtlXTtnP2cuc2Nyb2xsVG8oZD9wKGcpLnNjcm9sbExlZnQoKTpmLGQ/ZjpwKGcpLnNjcm9sbFRvcCgpKTphW2VdPWZ9LGEsZSxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pLHAuZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGEsYyl7cC5lYWNoKHtwYWRkaW5nOiJpbm5lciIrYSxjb250ZW50OmMsIiI6Im91dGVyIithfSxmdW5jdGlvbihkLGUpe3AuZm5bZV09ZnVuY3Rpb24oZSxmKXt2YXIgZz1hcmd1bWVudHMubGVuZ3RoJiYoZHx8dHlwZW9mIGUhPSJib29sZWFuIiksaD1kfHwoZT09PSEwfHxmPT09ITA/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiBwLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGMsZCxlKXt2YXIgZjtyZXR1cm4gcC5pc1dpbmRvdyhjKT9jLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IithXTpjLm5vZGVUeXBlPT09OT8oZj1jLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChjLmJvZHlbInNjcm9sbCIrYV0sZlsic2Nyb2xsIithXSxjLmJvZHlbIm9mZnNldCIrYV0sZlsib2Zmc2V0IithXSxmWyJjbGllbnQiK2FdKSk6ZT09PWI/cC5jc3MoYyxkLGUsaCk6cC5zdHlsZShjLGQsZSxoKX0sYyxnP2U6YixnLG51bGwpfX0pfSksYS5qUXVlcnk9YS4kPXAsdHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZCYmZGVmaW5lLmFtZC5qUXVlcnkmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiBwfSl9KSh3aW5kb3cpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi9qcXVlcnkubGF5b3V0LmpzIGIvaGl2ZS9zY2FsYWRvY3MvbGliL2pxdWVyeS5sYXlvdXQuanMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNGRkNDg2NwotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9qcXVlcnkubGF5b3V0LmpzCkBAIC0wLDAgKzEsNTQ4NiBAQAorLyoqCisgKiBAcHJlc2VydmUganF1ZXJ5LmxheW91dCAxLjMuMCAtIFJlbGVhc2UgQ2FuZGlkYXRlIDMwLjYyCisgKiAkRGF0ZTogMjAxMi0wOC0wNCAwODowMDowMCAoVGh1LCAyMyBBdWcgMjAxMikgJAorICogJFJldjogMzAzMDA2ICQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgCisgKiAgIEZhYnJpemlvIEJhbGxpYW5vIChodHRwOi8vd3d3LmZhYnJpemlvYmFsbGlhbm8ubmV0KQorICogICBLZXZpbiBEYWxtYW4gKGh0dHA6Ly9hbGxwcm8ubmV0KQorICoKKyAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sKQorICogYW5kIE1JVCAoaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHApIGxpY2Vuc2VzLgorICoKKyAqIENoYW5nZWxvZzogaHR0cDovL2xheW91dC5qcXVlcnktZGV2Lm5ldC9jaGFuZ2Vsb2cuY2ZtIzEuMy4wLnJjMzAuNjIKKyAqIE5PVEU6IFRoaXMgaXMgYSBzaG9ydC10ZXJtIHJlbGVhc2UgdG8gcGF0Y2ggYSBjb3VwbGUgb2YgYnVncy4KKyAqIFRoZXNlIGJ1Z3MgYXJlIGxpc3RlZCBhcyBvZmZpY2lhbGx5IGZpeGVkIGluIFJDMzAuNywgd2hpY2ggd2lsbCBiZSByZWxlYXNlZCBzaG9ydGx5LgorICoKKyAqIERvY3M6IGh0dHA6Ly9sYXlvdXQuanF1ZXJ5LWRldi5uZXQvZG9jdW1lbnRhdGlvbi5odG1sCisgKiBUaXBzOiBodHRwOi8vbGF5b3V0LmpxdWVyeS1kZXYubmV0L3RpcHMuaHRtbAorICogSGVscDogaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2pxdWVyeS11aS1sYXlvdXQKKyAqLworCisvKiBKYXZhRG9jIEluZm86IGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vY2xvc3VyZS9jb21waWxlci9kb2NzL2pzLWZvci1jb21waWxlci5odG1sCisgKiB7IU9iamVjdH0Jbm9uLW51bGxhYmxlIHR5cGUgKG5ldmVyIE5VTEwpCisgKiB7P3N0cmluZ30JbnVsbGFibGUgdHlwZSAoc29tZXRpbWVzIE5VTEwpIC0gZGVmYXVsdCBmb3Ige09iamVjdH0KKyAqIHtudW1iZXI9fQlvcHRpb25hbCBwYXJhbWV0ZXIKKyAqIHsqfQkJCUFMTCB0eXBlcworICovCisKKy8vIE5PVEU6IEZvciBiZXN0IHJlYWRhYmlsaXR5LCB2aWV3IHdpdGggYSBmaXhlZC13aWR0aCBmb250IGFuZCB0YWJzIGVxdWFsIHRvIDQtY2hhcnMKKworOyhmdW5jdGlvbiAoJCkgeworCisvLyBhbGlhcyBNYXRoIG1ldGhvZHMgLSB1c2VkIGEgbG90IQordmFyCW1pbgkJPSBNYXRoLm1pbgorLAltYXgJCT0gTWF0aC5tYXgKKywJcm91bmQJPSBNYXRoLmZsb29yCisKKywJaXNTdHIJPSAgZnVuY3Rpb24gKHYpIHsgcmV0dXJuICQudHlwZSh2KSA9PT0gInN0cmluZyI7IH0KKworLAlydW5QbHVnaW5DYWxsYmFja3MgPSBmdW5jdGlvbiAoSW5zdGFuY2UsIGFfZm4pIHsKKwkJaWYgKCQuaXNBcnJheShhX2ZuKSkKKwkJCWZvciAodmFyIGk9MCwgYz1hX2ZuLmxlbmd0aDsgaTxjOyBpKyspIHsKKwkJCQl2YXIgZm4gPSBhX2ZuW2ldOworCQkJCXRyeSB7CisJCQkJCWlmIChpc1N0cihmbikpIC8vICduYW1lJyBvZiBhIGZ1bmN0aW9uCisJCQkJCQlmbiA9IGV2YWwoZm4pOworCQkJCQlpZiAoJC5pc0Z1bmN0aW9uKGZuKSkKKwkJCQkJCWZuKCBJbnN0YW5jZSApOworCQkJCX0gY2F0Y2ggKGV4KSB7fQorCQkJfQorCX0KKworOworCisKKy8qCisgKglHRU5FUklDICQubGF5b3V0IE1FVEhPRFMgLSB1c2VkIGJ5IGFsbCBsYXlvdXRzCisgKi8KKyQubGF5b3V0ID0geworCisJdmVyc2lvbjoJIjEuMy5yYzMwLjYyIgorLAlyZXZpc2lvbjoJMC4wMzMwMDYgLy8gMS4zLjAgZmluYWwgPSAxLjAzMDAgLSBtYWpvcihuKykubWlub3Iobm4pK3BhdGNoKG5uKykKKworCS8vIGNhbiB1cGRhdGUgY29kZSBoZXJlIGlmICQuYnJvd3NlciBpcyBwaGFzZWQgb3V0CissCWJyb3dzZXI6IHsKKwkJbW96aWxsYToJISEkLmJyb3dzZXIubW96aWxsYQorCSwJd2Via2l0OgkJISEkLmJyb3dzZXIud2Via2l0IHx8ICEhJC5icm93c2VyLnNhZmFyaSAvLyB3ZWJraXQgPSBqUSAxLjQKKwksCW1zaWU6CQkhISQuYnJvd3Nlci5tc2llCisJLAlpc0lFNjoJCSQuYnJvd3Nlci5tc2llICYmICQuYnJvd3Nlci52ZXJzaW9uID09IDYKKwksCWJveE1vZGVsOgkkLnN1cHBvcnQuYm94TW9kZWwgIT09IGZhbHNlIHx8ICEkLmJyb3dzZXIubXNpZSAvLyBPTkxZIElFIHJldmVydHMgdG8gb2xkIGJveC1tb2RlbCAtIHVwZGF0ZSBmb3Igb2xkZXIgalEgb25SZWFkeQorCSwJdmVyc2lvbjoJJC5icm93c2VyLnZlcnNpb24gLy8gbm90IHVzZWQgaW4gTGF5b3V0IGNvcmUsIGJ1dCBtYXkgYmUgdXNlZCBieSBwbHVnaW5zCisJfQorCisJLy8gKlBSRURFRklORUQqIEVGRkVDVFMgJiBERUZBVUxUUyAKKwkvLyBNVVNUIGxpc3QgZWZmZWN0IGhlcmUgLSBPUiBNVVNUIHNldCBhbiBmeFNldHRpbmdzIG9wdGlvbiAoY2FuIGJlIGFuIGVtcHR5IGhhc2g6IHt9KQorLAllZmZlY3RzOiB7CisKKwkvLwlQYW5lIE9wZW4vQ2xvc2UgQW5pbWF0aW9ucworCQlzbGlkZTogeworCQkJYWxsOgl7IGR1cmF0aW9uOiAgImZhc3QiCX0gLy8gZWc6IGR1cmF0aW9uOiAxMDAwLCBlYXNpbmc6ICJlYXNlT3V0Qm91bmNlIgorCQksCW5vcnRoOgl7IGRpcmVjdGlvbjogInVwIgl9CisJCSwJc291dGg6CXsgZGlyZWN0aW9uOiAiZG93biIJfQorCQksCWVhc3Q6CXsgZGlyZWN0aW9uOiAicmlnaHQifQorCQksCXdlc3Q6CXsgZGlyZWN0aW9uOiAibGVmdCIJfQorCQl9CisJLAlkcm9wOiB7CisJCQlhbGw6CXsgZHVyYXRpb246ICAic2xvdyIJfQorCQksCW5vcnRoOgl7IGRpcmVjdGlvbjogInVwIgl9CisJCSwJc291dGg6CXsgZGlyZWN0aW9uOiAiZG93biIJfQorCQksCWVhc3Q6CXsgZGlyZWN0aW9uOiAicmlnaHQifQorCQksCXdlc3Q6CXsgZGlyZWN0aW9uOiAibGVmdCIJfQorCQl9CisJLAlzY2FsZTogeworCQkJYWxsOgl7IGR1cmF0aW9uOgkiZmFzdCIJfQorCQl9CisJLy8JdGhlc2UgYXJlIG5vdCByZWNvbW1lbmRlZCwgYnV0IGNhbiBiZSB1c2VkCisJLAlibGluZDoJCXt9CisJLAljbGlwOgkJe30KKwksCWV4cGxvZGU6CXt9CisJLAlmYWRlOgkJe30KKwksCWZvbGQ6CQl7fQorCSwJcHVmZjoJCXt9CisKKwkvLwlQYW5lIFJlc2l6ZSBBbmltYXRpb25zCisJLAlzaXplOiB7CisJCQlhbGw6CXsgZWFzaW5nOgkic3dpbmciCX0KKwkJfQorCX0KKworCS8vIElOVEVSTkFMIENPTkZJRyBEQVRBIC0gRE8gTk9UIENIQU5HRSBUSElTIQorLAljb25maWc6IHsKKwkJb3B0aW9uUm9vdEtleXM6CSJlZmZlY3RzLHBhbmVzLG5vcnRoLHNvdXRoLHdlc3QsZWFzdCxjZW50ZXIiLnNwbGl0KCIsIikKKwksCWFsbFBhbmVzOgkJIm5vcnRoLHNvdXRoLHdlc3QsZWFzdCxjZW50ZXIiLnNwbGl0KCIsIikKKwksCWJvcmRlclBhbmVzOgkibm9ydGgsc291dGgsd2VzdCxlYXN0Ii5zcGxpdCgiLCIpCisJLAlvcHBvc2l0ZUVkZ2U6IHsKKwkJCW5vcnRoOgkic291dGgiCisJCSwJc291dGg6CSJub3J0aCIKKwkJLAllYXN0OiAJIndlc3QiCisJCSwJd2VzdDogCSJlYXN0IgorCQl9CisJLy8Jb2Zmc2NyZWVuIGRhdGEKKwksCW9mZnNjcmVlbkNTUzoJeyBsZWZ0OiAiLTk5OTk5cHgiLCByaWdodDogImF1dG8iIH0gLy8gdXNlZCBieSBoaWRlL2Nsb3NlIGlmIHVzZU9mZnNjcmVlbkNsb3NlPXRydWUKKwksCW9mZnNjcmVlblJlc2V0Ogkib2Zmc2NyZWVuUmVzZXQiIC8vIGtleSB1c2VkIGZvciBkYXRhCisJLy8JQ1NTIHVzZWQgaW4gbXVsdGlwbGUgcGxhY2VzCisJLAloaWRkZW46CQl7IHZpc2liaWxpdHk6ICJoaWRkZW4iIH0KKwksCXZpc2libGU6CXsgdmlzaWJpbGl0eTogInZpc2libGUiIH0KKwkvLwlsYXlvdXQgZWxlbWVudCBzZXR0aW5ncworCSwJcmVzaXplcnM6IHsKKwkJCWNzc1JlcTogeworCQkJCXBvc2l0aW9uOiAJImFic29sdXRlIgorCQkJLAlwYWRkaW5nOiAJMAorCQkJLAltYXJnaW46IAkwCisJCQksCWZvbnRTaXplOgkiMXB4IgorCQkJLAl0ZXh0QWxpZ246CSJsZWZ0IgkvLyB0byBjb3VudGVyLWFjdCAiY2VudGVyIiBhbGlnbm1lbnQhCisJCQksCW92ZXJmbG93OiAJImhpZGRlbiIgLy8gcHJldmVudCB0b2dnbGVyLWJ1dHRvbiBmcm9tIG92ZXJmbG93aW5nCisJCQkvLwlTRUUgJC5sYXlvdXQuZGVmYXVsdHMuekluZGV4ZXMucmVzaXplcl9ub3JtYWwKKwkJCX0KKwkJLAljc3NEZW1vOiB7IC8vIERFTU8gQ1NTIC0gYXBwbGllZCBpZjogb3B0aW9ucy5QQU5FLmFwcGx5RGVtb1N0eWxlcz10cnVlCisJCQkJYmFja2dyb3VuZDogIiNEREQiCisJCQksCWJvcmRlcjoJCSJub25lIgorCQkJfQorCQl9CisJLAl0b2dnbGVyczogeworCQkJY3NzUmVxOiB7CisJCQkJcG9zaXRpb246IAkiYWJzb2x1dGUiCisJCQksCWRpc3BsYXk6IAkiYmxvY2siCisJCQksCXBhZGRpbmc6IAkwCisJCQksCW1hcmdpbjogCTAKKwkJCSwJb3ZlcmZsb3c6CSJoaWRkZW4iCisJCQksCXRleHRBbGlnbjoJImNlbnRlciIKKwkJCSwJZm9udFNpemU6CSIxcHgiCisJCQksCWN1cnNvcjogCSJwb2ludGVyIgorCQkJLAl6SW5kZXg6IAkxCisJCQl9CisJCSwJY3NzRGVtbzogeyAvLyBERU1PIENTUyAtIGFwcGxpZWQgaWY6IG9wdGlvbnMuUEFORS5hcHBseURlbW9TdHlsZXM9dHJ1ZQorCQkJCWJhY2tncm91bmQ6ICIjQUFBIgorCQkJfQorCQl9CisJLAljb250ZW50OiB7CisJCQljc3NSZXE6IHsKKwkJCQlwb3NpdGlvbjoJInJlbGF0aXZlIiAvKiBjb250YWluIGZsb2F0ZWQgb3IgcG9zaXRpb25lZCBlbGVtZW50cyAqLworCQkJfQorCQksCWNzc0RlbW86IHsgLy8gREVNTyBDU1MgLSBhcHBsaWVkIGlmOiBvcHRpb25zLlBBTkUuYXBwbHlEZW1vU3R5bGVzPXRydWUKKwkJCQlvdmVyZmxvdzoJImF1dG8iCisJCQksCXBhZGRpbmc6CSIxMHB4IgorCQkJfQorCQksCWNzc0RlbW9QYW5lOiB7IC8vIERFTU8gQ1NTIC0gUkVNT1ZFIHNjcm9sbGluZyBmcm9tICdwYW5lJyB3aGVuIGl0IGhhcyBhIGNvbnRlbnQtZGl2CisJCQkJb3ZlcmZsb3c6CSJoaWRkZW4iCisJCQksCXBhZGRpbmc6CTAKKwkJCX0KKwkJfQorCSwJcGFuZXM6IHsgLy8gZGVmYXVsdHMgZm9yIEFMTCBwYW5lcyAtIG92ZXJyaWRkZW4gYnkgJ3Blci1wYW5lIHNldHRpbmdzJyBiZWxvdworCQkJY3NzUmVxOiB7CisJCQkJcG9zaXRpb246IAkiYWJzb2x1dGUiCisJCQksCW1hcmdpbjoJCTAKKwkJCS8vCSQubGF5b3V0LmRlZmF1bHRzLnpJbmRleGVzLnBhbmVfbm9ybWFsCisJCQl9CisJCSwJY3NzRGVtbzogeyAvLyBERU1PIENTUyAtIGFwcGxpZWQgaWY6IG9wdGlvbnMuUEFORS5hcHBseURlbW9TdHlsZXM9dHJ1ZQorCQkJCXBhZGRpbmc6CSIxMHB4IgorCQkJLAliYWNrZ3JvdW5kOgkiI0ZGRiIKKwkJCSwJYm9yZGVyOgkJIjFweCBzb2xpZCAjQkJCIgorCQkJLAlvdmVyZmxvdzoJImF1dG8iCisJCQl9CisJCX0KKwksCW5vcnRoOiB7CisJCQlzaWRlOgkJCSJUb3AiCisJCSwJc2l6ZVR5cGU6CQkiSGVpZ2h0IgorCQksCWRpcjoJCQkiaG9yeiIKKwkJLAljc3NSZXE6IHsKKwkJCQl0b3A6IAkJMAorCQkJLAlib3R0b206IAkiYXV0byIKKwkJCSwJbGVmdDogCQkwCisJCQksCXJpZ2h0OiAJCTAKKwkJCSwJd2lkdGg6IAkJImF1dG8iCisJCQkvLwloZWlnaHQ6IAlEWU5BTUlDCisJCQl9CisJCX0KKwksCXNvdXRoOiB7CisJCQlzaWRlOgkJCSJCb3R0b20iCisJCSwJc2l6ZVR5cGU6CQkiSGVpZ2h0IgorCQksCWRpcjoJCQkiaG9yeiIKKwkJLAljc3NSZXE6IHsKKwkJCQl0b3A6IAkJImF1dG8iCisJCQksCWJvdHRvbTogCTAKKwkJCSwJbGVmdDogCQkwCisJCQksCXJpZ2h0OiAJCTAKKwkJCSwJd2lkdGg6IAkJImF1dG8iCisJCQkvLwloZWlnaHQ6IAlEWU5BTUlDCisJCQl9CisJCX0KKwksCWVhc3Q6IHsKKwkJCXNpZGU6CQkJIlJpZ2h0IgorCQksCXNpemVUeXBlOgkJIldpZHRoIgorCQksCWRpcjoJCQkidmVydCIKKwkJLAljc3NSZXE6IHsKKwkJCQlsZWZ0OiAJCSJhdXRvIgorCQkJLAlyaWdodDogCQkwCisJCQksCXRvcDogCQkiYXV0byIgLy8gRFlOQU1JQworCQkJLAlib3R0b206IAkiYXV0byIgLy8gRFlOQU1JQworCQkJLAloZWlnaHQ6IAkiYXV0byIKKwkJCS8vCXdpZHRoOiAJCURZTkFNSUMKKwkJCX0KKwkJfQorCSwJd2VzdDogeworCQkJc2lkZToJCQkiTGVmdCIKKwkJLAlzaXplVHlwZToJCSJXaWR0aCIKKwkJLAlkaXI6CQkJInZlcnQiCisJCSwJY3NzUmVxOiB7CisJCQkJbGVmdDogCQkwCisJCQksCXJpZ2h0OiAJCSJhdXRvIgorCQkJLAl0b3A6IAkJImF1dG8iIC8vIERZTkFNSUMKKwkJCSwJYm90dG9tOiAJImF1dG8iIC8vIERZTkFNSUMKKwkJCSwJaGVpZ2h0OiAJImF1dG8iCisJCQkvLwl3aWR0aDogCQlEWU5BTUlDCisJCQl9CisJCX0KKwksCWNlbnRlcjogeworCQkJZGlyOgkJCSJjZW50ZXIiCisJCSwJY3NzUmVxOiB7CisJCQkJbGVmdDogCQkiYXV0byIgLy8gRFlOQU1JQworCQkJLAlyaWdodDogCQkiYXV0byIgLy8gRFlOQU1JQworCQkJLAl0b3A6IAkJImF1dG8iIC8vIERZTkFNSUMKKwkJCSwJYm90dG9tOiAJImF1dG8iIC8vIERZTkFNSUMKKwkJCSwJaGVpZ2h0OiAJImF1dG8iCisJCQksCXdpZHRoOiAJCSJhdXRvIgorCQkJfQorCQl9CisJfQorCisJLy8gQ0FMTEJBQ0sgRlVOQ1RJT04gTkFNRVNQQUNFIC0gdXNlZCB0byBzdG9yZSByZXVzYWJsZSBjYWxsYmFjayBmdW5jdGlvbnMKKywJY2FsbGJhY2tzOiB7fQorCissCWdldFBhcmVudFBhbmVFbGVtOiBmdW5jdGlvbiAoZWwpIHsKKwkJLy8gbXVzdCBwYXNzIGVpdGhlciBhIGNvbnRhaW5lciBvciBwYW5lIGVsZW1lbnQKKwkJdmFyICRlbCA9ICQoZWwpCisJCSwJbGF5b3V0ID0gJGVsLmRhdGEoImxheW91dCIpIHx8ICRlbC5kYXRhKCJwYXJlbnRMYXlvdXQiKTsKKwkJaWYgKGxheW91dCkgeworCQkJdmFyICRjb250ID0gbGF5b3V0LmNvbnRhaW5lcjsKKwkJCS8vIHNlZSBpZiB0aGlzIGNvbnRhaW5lciBpcyBkaXJlY3RseS1uZXN0ZWQgaW5zaWRlIGFuIG91dGVyLXBhbmUKKwkJCWlmICgkY29udC5kYXRhKCJsYXlvdXRQYW5lIikpIHJldHVybiAkY29udDsKKwkJCXZhciAkcGFuZSA9ICRjb250LmNsb3Nlc3QoIi4iKyAkLmxheW91dC5kZWZhdWx0cy5wYW5lcy5wYW5lQ2xhc3MpOworCQkJLy8gaWYgYSBwYW5lIHdhcyBmb3VuZCwgcmV0dXJuIGl0CisJCQlpZiAoJHBhbmUuZGF0YSgibGF5b3V0UGFuZSIpKSByZXR1cm4gJHBhbmU7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCissCWdldFBhcmVudFBhbmVJbnN0YW5jZTogZnVuY3Rpb24gKGVsKSB7CisJCS8vIG11c3QgcGFzcyBlaXRoZXIgYSBjb250YWluZXIgb3IgcGFuZSBlbGVtZW50CisJCXZhciAkcGFuZSA9ICQubGF5b3V0LmdldFBhcmVudFBhbmVFbGVtKGVsKTsKKwkJcmV0dXJuICRwYW5lID8gJHBhbmUuZGF0YSgibGF5b3V0UGFuZSIpIDogbnVsbDsKKwl9CisKKywJZ2V0UGFyZW50TGF5b3V0SW5zdGFuY2U6IGZ1bmN0aW9uIChlbCkgeworCQkvLyBtdXN0IHBhc3MgZWl0aGVyIGEgY29udGFpbmVyIG9yIHBhbmUgZWxlbWVudAorCQl2YXIgJHBhbmUgPSAkLmxheW91dC5nZXRQYXJlbnRQYW5lRWxlbShlbCk7CisJCXJldHVybiAkcGFuZSA/ICRwYW5lLmRhdGEoInBhcmVudExheW91dCIpIDogbnVsbDsKKwl9CisKKywJZ2V0RXZlbnRPYmplY3Q6IGZ1bmN0aW9uIChldnQpIHsKKwkJcmV0dXJuIHR5cGVvZiBldnQgPT09ICJvYmplY3QiICYmIGV2dC5zdG9wUHJvcGFnYXRpb24gPyBldnQgOiBudWxsOworCX0KKywJcGFyc2VQYW5lTmFtZTogZnVuY3Rpb24gKGV2dF9vcl9wYW5lKSB7CisJCS8vIGdldEV2ZW50T2JqZWN0KCkgYXV0b21hdGljYWxseSBjYWxscyAuc3RvcFByb3BhZ2F0aW9uKCksIFdISUNIIE1VU1QgQkUgRE9ORSEKKwkJdmFyIGV2dCA9ICQubGF5b3V0LmdldEV2ZW50T2JqZWN0KCBldnRfb3JfcGFuZSApOworCQlpZiAoZXZ0KSB7CisJCQkvLyBBTFdBWVMgc3RvcCBwcm9wYWdhdGlvbiBvZiBldmVudHMgdHJpZ2dlcmVkIGluIExheW91dCEKKwkJCWV2dC5zdG9wUHJvcGFnYXRpb24oKTsKKwkJCXJldHVybiAkKHRoaXMpLmRhdGEoImxheW91dEVkZ2UiKTsKKwkJfQorCQllbHNlCisJCQlyZXR1cm4gZXZ0X29yX3BhbmU7CisJfQorCisKKwkvLyBMQVlPVVQtUExVR0lOIFJFR0lTVFJBVElPTgorCS8vIG1vcmUgcGx1Z2lucyBjYW4gYWRkZWQgYmV5b25kIHRoaXMgZGVmYXVsdCBsaXN0CissCXBsdWdpbnM6IHsKKwkJZHJhZ2dhYmxlOgkJISEkLmZuLmRyYWdnYWJsZSAvLyByZXNpemluZworCSwJZWZmZWN0czogeworCQkJY29yZToJCSEhJC5lZmZlY3RzCQkvLyBhbmltaW1hdGlvbnMgKHNwZWNpZmljIGVmZmVjdHMgdGVzdGVkIGJ5IGluaXRPcHRpb25zKQorCQksCXNsaWRlOgkJJC5lZmZlY3RzICYmICQuZWZmZWN0cy5zbGlkZSAvLyBkZWZhdWx0IGVmZmVjdAorCQl9CisJfQorCisvLwlhcnJheXMgb2YgcGx1Z2luIG9yIG90aGVyIG1ldGhvZHMgdG8gYmUgdHJpZ2dlcmVkIGZvciBldmVudHMgaW4gKmVhY2ggbGF5b3V0KiAtIHdpbGwgYmUgcGFzc2VkICdJbnN0YW5jZScKKywJb25DcmVhdGU6CVtdCS8vIHJ1bnMgd2hlbiBsYXlvdXQgaXMganVzdCBzdGFydGluZyB0byBiZSBjcmVhdGVkIC0gcmlnaHQgYWZ0ZXIgb3B0aW9ucyBhcmUgc2V0CissCW9uTG9hZDoJCVtdCS8vIHJ1bnMgYWZ0ZXIgbGF5b3V0IGNvbnRhaW5lciBhbmQgZ2xvYmFsIGV2ZW50cyBpbml0LCBidXQgYmVmb3JlIGluaXRQYW5lcyBpcyBjYWxsZWQKKywJb25SZWFkeToJW10JLy8gcnVucyBhZnRlciBpbml0aWFsaXphdGlvbiAqY29tcGxldGVzKiAtIGllLCBhZnRlciBpbml0UGFuZXMgY29tcGxldGVzIHN1Y2Nlc3NmdWxseQorLAlvbkRlc3Ryb3k6CVtdCS8vIHJ1bnMgYWZ0ZXIgbGF5b3V0IGlzIGRlc3Ryb3llZAorLAlvblVubG9hZDoJW10JLy8gcnVucyBhZnRlciBsYXlvdXQgaXMgZGVzdHJveWVkIE9SIHdoZW4gcGFnZSB1bmxvYWRzCissCWFmdGVyT3BlbjoJW10JLy8gcnVucyBhZnRlciBzZXRBc09wZW4oKSBjb21wbGV0ZXMKKywJYWZ0ZXJDbG9zZToJW10JLy8gcnVucyBhZnRlciBzZXRBc0Nsb3NlZCgpIGNvbXBsZXRlcworCisJLyoKKwkqCUdFTkVSSUMgVVRJTElUWSBNRVRIT0RTCisJKi8KKworCS8vIGNhbGN1bGF0ZSBhbmQgcmV0dXJuIHRoZSBzY3JvbGxiYXIgd2lkdGgsIGFzIGFuIGludGVnZXIKKywJc2Nyb2xsYmFyV2lkdGg6CQlmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3cuc2Nyb2xsYmFyV2lkdGggIHx8ICQubGF5b3V0LmdldFNjcm9sbGJhclNpemUoJ3dpZHRoJyk7IH0KKywJc2Nyb2xsYmFySGVpZ2h0OglmdW5jdGlvbiAoKSB7IHJldHVybiB3aW5kb3cuc2Nyb2xsYmFySGVpZ2h0IHx8ICQubGF5b3V0LmdldFNjcm9sbGJhclNpemUoJ2hlaWdodCcpOyB9CissCWdldFNjcm9sbGJhclNpemU6CWZ1bmN0aW9uIChkaW0pIHsKKwkJdmFyICRjCT0gJCgnPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IC0xMDAwMHB4OyBsZWZ0OiAtMTAwMDBweDsgd2lkdGg6IDEwMHB4OyBoZWlnaHQ6IDEwMHB4OyBvdmVyZmxvdzogc2Nyb2xsOyI+PC9kaXY+JykuYXBwZW5kVG8oImJvZHkiKTsKKwkJdmFyIGQJPSB7IHdpZHRoOiAkYy53aWR0aCgpIC0gJGNbMF0uY2xpZW50V2lkdGgsIGhlaWdodDogJGMuaGVpZ2h0KCkgLSAkY1swXS5jbGllbnRIZWlnaHQgfTsKKwkJJGMucmVtb3ZlKCk7CisJCXdpbmRvdy5zY3JvbGxiYXJXaWR0aAk9IGQud2lkdGg7CisJCXdpbmRvdy5zY3JvbGxiYXJIZWlnaHQJPSBkLmhlaWdodDsKKwkJcmV0dXJuIGRpbS5tYXRjaCgvXih3aWR0aHxoZWlnaHQpJC8pID8gZFtkaW1dIDogZDsKKwl9CisKKworCS8qKgorCSogUmV0dXJucyBoYXNoIGNvbnRhaW5lciAnZGlzcGxheScgYW5kICd2aXNpYmlsaXR5JworCSoKKwkqIEBzZWUJJC5zd2FwKCkgLSBzd2FwcyBDU1MsIHJ1bnMgY2FsbGJhY2ssIHJlc2V0cyBDU1MKKwkqLworLAlzaG93SW52aXNpYmx5OiBmdW5jdGlvbiAoJEUsIGZvcmNlKSB7CisJCWlmICgkRSAmJiAkRS5sZW5ndGggJiYgKGZvcmNlIHx8ICRFLmNzcygnZGlzcGxheScpID09PSAibm9uZSIpKSB7IC8vIG9ubHkgaWYgbm90ICphbHJlYWR5IGhpZGRlbioKKwkJCXZhciBzID0gJEVbMF0uc3R5bGUKKwkJCQkvLyBzYXZlIE9OTFkgdGhlICdzdHlsZScgcHJvcHMgYmVjYXVzZSB0aGF0IGlzIHdoYXQgd2UgbXVzdCByZXN0b3JlCisJCQksCUNTUyA9IHsgZGlzcGxheTogcy5kaXNwbGF5IHx8ICcnLCB2aXNpYmlsaXR5OiBzLnZpc2liaWxpdHkgfHwgJycgfTsKKwkJCS8vIHNob3cgZWxlbWVudCAnaW52aXNpYmx5JyBzbyBjYW4gYmUgbWVhc3VyZWQKKwkJCSRFLmNzcyh7IGRpc3BsYXk6ICJibG9jayIsIHZpc2liaWxpdHk6ICJoaWRkZW4iIH0pOworCQkJcmV0dXJuIENTUzsKKwkJfQorCQlyZXR1cm4ge307CisJfQorCisJLyoqCisJKiBSZXR1cm5zIGRhdGEgZm9yIHNldHRpbmcgc2l6ZSBvZiBhbiBlbGVtZW50IChjb250YWluZXIgb3IgYSBwYW5lKS4KKwkqCisJKiBAc2VlICBfY3JlYXRlKCksIG9uV2luZG93UmVzaXplKCkgZm9yIGNvbnRhaW5lciwgcGx1cyBvdGhlcnMgZm9yIHBhbmUKKwkqIEByZXR1cm4gSlNPTiAgUmV0dXJucyBhIGhhc2ggb2YgYWxsIGRpbWVuc2lvbnM6IHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCwgb3V0ZXJXaWR0aCwgaW5uZXJIZWlnaHQsIGV0YworCSovCissCWdldEVsZW1lbnREaW1lbnNpb25zOiBmdW5jdGlvbiAoJEUpIHsKKwkJdmFyCisJCQlkCT0ge30JCQkvLyBkaW1lbnNpb25zIGhhc2gKKwkJLAl4CT0gZC5jc3MgPSB7fQkvLyBDU1MgaGFzaAorCQksCWkJPSB7fQkJCS8vIFRFTVAgaW5zZXRzCisJCSwJYiwgcAkJCQkvLyBURU1QIGJvcmRlciwgcGFkZGluZworCQksCU4JPSAkLmxheW91dC5jc3NOdW0KKwkJLAlvZmYgPSAkRS5vZmZzZXQoKQorCQk7CisJCWQub2Zmc2V0TGVmdCA9IG9mZi5sZWZ0OworCQlkLm9mZnNldFRvcCAgPSBvZmYudG9wOworCisJCSQuZWFjaCgiTGVmdCxSaWdodCxUb3AsQm90dG9tIi5zcGxpdCgiLCIpLCBmdW5jdGlvbiAoaWR4LCBlKSB7IC8vIGUgPSBlZGdlCisJCQliID0geFsiYm9yZGVyIiArIGVdID0gJC5sYXlvdXQuYm9yZGVyV2lkdGgoJEUsIGUpOworCQkJcCA9IHhbInBhZGRpbmciKyBlXSA9ICQubGF5b3V0LmNzc051bSgkRSwgInBhZGRpbmciK2UpOworCQkJaVtlXSA9IGIgKyBwOyAvLyB0b3RhbCBvZmZzZXQgb2YgY29udGVudCBmcm9tIG91dGVyIHNpZGUKKwkJCWRbImluc2V0IisgZV0gPSBwOwkvLyBlZzogaW5zZXRMZWZ0ID0gcGFkZGluZ0xlZnQKKwkJfSk7CisKKwkJZC5vZmZzZXRXaWR0aAk9ICRFLmlubmVyV2lkdGgoKTsJLy8gb2Zmc2V0V2lkdGggaXMgdXNlZCBpbiBjYWxjIHdoZW4gZG9pbmcgbWFudWFsIHJlc2l6ZQorCQlkLm9mZnNldEhlaWdodAk9ICRFLmlubmVySGVpZ2h0KCk7CS8vIGRpdHRvCisJCWQub3V0ZXJXaWR0aAk9ICRFLm91dGVyV2lkdGgoKTsKKwkJZC5vdXRlckhlaWdodAk9ICRFLm91dGVySGVpZ2h0KCk7CisJCWQuaW5uZXJXaWR0aAk9IG1heCgwLCBkLm91dGVyV2lkdGggIC0gaS5MZWZ0IC0gaS5SaWdodCk7CisJCWQuaW5uZXJIZWlnaHQJPSBtYXgoMCwgZC5vdXRlckhlaWdodCAtIGkuVG9wICAtIGkuQm90dG9tKTsKKworCQl4LndpZHRoCQk9ICRFLndpZHRoKCk7CisJCXguaGVpZ2h0CT0gJEUuaGVpZ2h0KCk7CisJCXgudG9wCQk9IE4oJEUsInRvcCIsdHJ1ZSk7CisJCXguYm90dG9tCT0gTigkRSwiYm90dG9tIix0cnVlKTsKKwkJeC5sZWZ0CQk9IE4oJEUsImxlZnQiLHRydWUpOworCQl4LnJpZ2h0CQk9IE4oJEUsInJpZ2h0Iix0cnVlKTsKKworCQkvL2QudmlzaWJsZQk9ICRFLmlzKCI6dmlzaWJsZSIpOy8vICYmIHgud2lkdGggPiAwICYmIHguaGVpZ2h0ID4gMDsKKworCQlyZXR1cm4gZDsKKwl9CisKKywJZ2V0RWxlbWVudENTUzogZnVuY3Rpb24gKCRFLCBsaXN0KSB7CisJCXZhcgorCQkJQ1NTCT0ge30KKwkJLAlzdHlsZQk9ICRFWzBdLnN0eWxlCisJCSwJcHJvcHMJPSBsaXN0LnNwbGl0KCIsIikKKwkJLAlzaWRlcwk9ICJUb3AsQm90dG9tLExlZnQsUmlnaHQiLnNwbGl0KCIsIikKKwkJLAlhdHRycwk9ICJDb2xvcixTdHlsZSxXaWR0aCIuc3BsaXQoIiwiKQorCQksCXAsIHMsIGEsIGksIGosIGsKKwkJOworCQlmb3IgKGk9MDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7CisJCQlwID0gcHJvcHNbaV07CisJCQlpZiAocC5tYXRjaCgvKGJvcmRlcnxwYWRkaW5nfG1hcmdpbikkLykpCisJCQkJZm9yIChqPTA7IGogPCA0OyBqKyspIHsKKwkJCQkJcyA9IHNpZGVzW2pdOworCQkJCQlpZiAocCA9PT0gImJvcmRlciIpCisJCQkJCQlmb3IgKGs9MDsgayA8IDM7IGsrKykgeworCQkJCQkJCWEgPSBhdHRyc1trXTsKKwkJCQkJCQlDU1NbcCtzK2FdID0gc3R5bGVbcCtzK2FdOworCQkJCQkJfQorCQkJCQllbHNlCisJCQkJCQlDU1NbcCtzXSA9IHN0eWxlW3Arc107CisJCQkJfQorCQkJZWxzZQorCQkJCUNTU1twXSA9IHN0eWxlW3BdOworCQl9OworCQlyZXR1cm4gQ1NTCisJfQorCisJLyoqCisJKiBSZXR1cm4gdGhlIGlubmVyV2lkdGggZm9yIHRoZSBjdXJyZW50IGJyb3dzZXIvZG9jdHlwZQorCSoKKwkqIEBzZWUgIGluaXRQYW5lcygpLCBzaXplTWlkUGFuZXMoKSwgaW5pdEhhbmRsZXMoKSwgc2l6ZUhhbmRsZXMoKQorCSogQHBhcmFtICB7QXJyYXkuPE9iamVjdD59CSRFICBNdXN0IHBhc3MgYSBqUXVlcnkgb2JqZWN0IC0gZmlyc3QgZWxlbWVudCBpcyBwcm9jZXNzZWQKKwkqIEBwYXJhbSAge251bWJlcj19CQkJb3V0ZXJXaWR0aCAob3B0aW9uYWwpIENhbiBwYXNzIGEgd2lkdGgsIGFsbG93aW5nIGNhbGN1bGF0aW9ucyBCRUZPUkUgZWxlbWVudCBpcyByZXNpemVkCisJKiBAcmV0dXJuIHtudW1iZXJ9CQkJUmV0dXJucyB0aGUgaW5uZXJXaWR0aCBvZiB0aGUgZWxlbSBieSBzdWJ0cmFjdGluZyBwYWRkaW5nIGFuZCBib3JkZXJzCisJKi8KKywJY3NzV2lkdGg6IGZ1bmN0aW9uICgkRSwgb3V0ZXJXaWR0aCkgeworCQkvLyBhICdjYWxjdWxhdGVkJyBvdXRlckhlaWdodCBjYW4gYmUgcGFzc2VkIHNvIGJvcmRlcnMgYW5kL29yIHBhZGRpbmcgYXJlIHJlbW92ZWQgaWYgbmVlZGVkCisJCWlmIChvdXRlcldpZHRoIDw9IDApIHJldHVybiAwOworCisJCWlmICghJC5sYXlvdXQuYnJvd3Nlci5ib3hNb2RlbCkgcmV0dXJuIG91dGVyV2lkdGg7CisKKwkJLy8gc3RyaXAgYm9yZGVyIGFuZCBwYWRkaW5nIGZyb20gb3V0ZXJXaWR0aCB0byBnZXQgQ1NTIFdpZHRoCisJCXZhciBiID0gJC5sYXlvdXQuYm9yZGVyV2lkdGgKKwkJLAluID0gJC5sYXlvdXQuY3NzTnVtCisJCSwJVyA9IG91dGVyV2lkdGgKKwkJCQktIGIoJEUsICJMZWZ0IikKKwkJCQktIGIoJEUsICJSaWdodCIpCisJCQkJLSBuKCRFLCAicGFkZGluZ0xlZnQiKQkJCisJCQkJLSBuKCRFLCAicGFkZGluZ1JpZ2h0Iik7CisKKwkJcmV0dXJuIG1heCgwLFcpOworCX0KKworCS8qKgorCSogUmV0dXJuIHRoZSBpbm5lckhlaWdodCBmb3IgdGhlIGN1cnJlbnQgYnJvd3Nlci9kb2N0eXBlCisJKgorCSogQHNlZSAgaW5pdFBhbmVzKCksIHNpemVNaWRQYW5lcygpLCBpbml0SGFuZGxlcygpLCBzaXplSGFuZGxlcygpCisJKiBAcGFyYW0gIHtBcnJheS48T2JqZWN0Pn0JJEUgIE11c3QgcGFzcyBhIGpRdWVyeSBvYmplY3QgLSBmaXJzdCBlbGVtZW50IGlzIHByb2Nlc3NlZAorCSogQHBhcmFtICB7bnVtYmVyPX0JCQlvdXRlckhlaWdodCAgKG9wdGlvbmFsKSBDYW4gcGFzcyBhIHdpZHRoLCBhbGxvd2luZyBjYWxjdWxhdGlvbnMgQkVGT1JFIGVsZW1lbnQgaXMgcmVzaXplZAorCSogQHJldHVybiB7bnVtYmVyfQkJCVJldHVybnMgdGhlIGlubmVySGVpZ2h0IG9mIHRoZSBlbGVtIGJ5IHN1YnRyYWN0aW5nIHBhZGRpbmcgYW5kIGJvcmRlcnMKKwkqLworLAljc3NIZWlnaHQ6IGZ1bmN0aW9uICgkRSwgb3V0ZXJIZWlnaHQpIHsKKwkJLy8gYSAnY2FsY3VsYXRlZCcgb3V0ZXJIZWlnaHQgY2FuIGJlIHBhc3NlZCBzbyBib3JkZXJzIGFuZC9vciBwYWRkaW5nIGFyZSByZW1vdmVkIGlmIG5lZWRlZAorCQlpZiAob3V0ZXJIZWlnaHQgPD0gMCkgcmV0dXJuIDA7CisKKwkJaWYgKCEkLmxheW91dC5icm93c2VyLmJveE1vZGVsKSByZXR1cm4gb3V0ZXJIZWlnaHQ7CisKKwkJLy8gc3RyaXAgYm9yZGVyIGFuZCBwYWRkaW5nIGZyb20gb3V0ZXJIZWlnaHQgdG8gZ2V0IENTUyBIZWlnaHQKKwkJdmFyIGIgPSAkLmxheW91dC5ib3JkZXJXaWR0aAorCQksCW4gPSAkLmxheW91dC5jc3NOdW0KKwkJLAlIID0gb3V0ZXJIZWlnaHQKKwkJCS0gYigkRSwgIlRvcCIpCisJCQktIGIoJEUsICJCb3R0b20iKQorCQkJLSBuKCRFLCAicGFkZGluZ1RvcCIpCisJCQktIG4oJEUsICJwYWRkaW5nQm90dG9tIik7CisKKwkJcmV0dXJuIG1heCgwLEgpOworCX0KKworCS8qKgorCSogUmV0dXJucyB0aGUgJ2N1cnJlbnQgQ1NTIG51bWVyaWMgdmFsdWUnIGZvciBhIENTUyBwcm9wZXJ0eSAtIDAgaWYgcHJvcGVydHkgZG9lcyBub3QgZXhpc3QKKwkqCisJKiBAc2VlICBDYWxsZWQgYnkgbWFueSBtZXRob2RzCisJKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fQkkRQkJCQkJTXVzdCBwYXNzIGEgalF1ZXJ5IG9iamVjdCAtIGZpcnN0IGVsZW1lbnQgaXMgcHJvY2Vzc2VkCisJKiBAcGFyYW0ge3N0cmluZ30JCQlwcm9wCQkJCVRoZSBuYW1lIG9mIHRoZSBDU1MgcHJvcGVydHksIGVnOiB0b3AsIHdpZHRoLCBldGMuCisJKiBAcGFyYW0ge2Jvb2xlYW49fQkJCVthbGxvd0F1dG89ZmFsc2VdCXRydWUgPSByZXR1cm4gJ2F1dG8nIGlmIHRoYXQgaXMgdmFsdWU7IGZhbHNlID0gcmV0dXJuIDAKKwkqIEByZXR1cm4geyhzdHJpbmd8bnVtYmVyKX0JCQkJCQlVc3VhbGx5IHVzZWQgdG8gZ2V0IGFuIGludGVnZXIgdmFsdWUgZm9yIHBvc2l0aW9uICh0b3AsIGxlZnQpIG9yIHNpemUgKGhlaWdodCwgd2lkdGgpCisJKi8KKywJY3NzTnVtOiBmdW5jdGlvbiAoJEUsIHByb3AsIGFsbG93QXV0bykgeworCQlpZiAoISRFLmpxdWVyeSkgJEUgPSAkKCRFKTsKKwkJdmFyIENTUyA9ICQubGF5b3V0LnNob3dJbnZpc2libHkoJEUpCisJCSwJcAk9ICQuY3NzKCRFWzBdLCBwcm9wLCB0cnVlKQorCQksCXYJPSBhbGxvd0F1dG8gJiYgcD09ImF1dG8iID8gcCA6IChwYXJzZUludChwLCAxMCkgfHwgMCk7CisJCSRFLmNzcyggQ1NTICk7IC8vIFJFU0VUCisJCXJldHVybiB2OworCX0KKworLAlib3JkZXJXaWR0aDogZnVuY3Rpb24gKGVsLCBzaWRlKSB7CisJCWlmIChlbC5qcXVlcnkpIGVsID0gZWxbMF07CisJCXZhciBiID0gImJvcmRlciIrIHNpZGUuc3Vic3RyKDAsMSkudG9VcHBlckNhc2UoKSArIHNpZGUuc3Vic3RyKDEpOyAvLyBsZWZ0ID0+IExlZnQKKwkJcmV0dXJuICQuY3NzKGVsLCBiKyJTdHlsZSIsIHRydWUpID09PSAibm9uZSIgPyAwIDogKHBhcnNlSW50KCQuY3NzKGVsLCBiKyJXaWR0aCIsIHRydWUpLCAxMCkgfHwgMCk7CisJfQorCisJLyoqCisJKiBNb3VzZS10cmFja2luZyB1dGlsaXR5IC0gRlVUVVJFIFJFRkVSRU5DRQorCSoKKwkqIGluaXQ6IGlmICghd2luZG93Lm1vdXNlKSB7CisJKgkJCXdpbmRvdy5tb3VzZSA9IHsgeDogMCwgeTogMCB9OworCSoJCQkkKGRvY3VtZW50KS5tb3VzZW1vdmUoICQubGF5b3V0LnRyYWNrTW91c2UgKTsKKwkqCQl9CisJKgorCSogQHBhcmFtIHtPYmplY3R9CQlldnQKKwkqCissCXRyYWNrTW91c2U6IGZ1bmN0aW9uIChldnQpIHsKKwkJd2luZG93Lm1vdXNlID0geyB4OiBldnQuY2xpZW50WCwgeTogZXZ0LmNsaWVudFkgfTsKKwl9CisJKi8KKworCS8qKgorCSogU1VCUk9VVElORSBmb3IgcHJldmVudFByZW1hdHVyZVNsaWRlQ2xvc2Ugb3B0aW9uCisJKgorCSogQHBhcmFtIHtPYmplY3R9CQlldnQKKwkqIEBwYXJhbSB7T2JqZWN0PX0JCWVsCisJKi8KKywJaXNNb3VzZU92ZXJFbGVtOiBmdW5jdGlvbiAoZXZ0LCBlbCkgeworCQl2YXIKKwkJCSRFCT0gJChlbCB8fCB0aGlzKQorCQksCWQJPSAkRS5vZmZzZXQoKQorCQksCVQJPSBkLnRvcAorCQksCUwJPSBkLmxlZnQKKwkJLAlSCT0gTCArICRFLm91dGVyV2lkdGgoKQorCQksCUIJPSBUICsgJEUub3V0ZXJIZWlnaHQoKQorCQksCXgJPSBldnQucGFnZVgJLy8gZXZ0LmNsaWVudFggPworCQksCXkJPSBldnQucGFnZVkJLy8gZXZ0LmNsaWVudFkgPworCQk7CisJCS8vIGlmIFggJiBZIGFyZSA8IDAsIHByb2JhYmx5IG1lYW5zIGlzIG92ZXIgYW4gb3BlbiBTRUxFQ1QKKwkJcmV0dXJuICgkLmxheW91dC5icm93c2VyLm1zaWUgJiYgeCA8IDAgJiYgeSA8IDApIHx8ICgoeCA+PSBMICYmIHggPD0gUikgJiYgKHkgPj0gVCAmJiB5IDw9IEIpKTsKKwl9CisKKwkvKioKKwkqIE1lc3NhZ2UvTG9nZ2luZyBVdGlsaXR5CisJKgorCSogQGV4YW1wbGUgJC5sYXlvdXQubXNnKCJNeSBtZXNzYWdlIik7CQkJCS8vIGxvZyB0ZXh0CisJKiBAZXhhbXBsZSAkLmxheW91dC5tc2coIk15IG1lc3NhZ2UiLCB0cnVlKTsJCS8vIGFsZXJ0IHRleHQKKwkqIEBleGFtcGxlICQubGF5b3V0Lm1zZyh7IGZvbzogImJhciIgfSwgIlRpdGxlIik7CS8vIGxvZyBoYXNoLWRhdGEsIHdpdGggY3VzdG9tIHRpdGxlCisJKiBAZXhhbXBsZSAkLmxheW91dC5tc2coeyBmb286ICJiYXIiIH0sIHRydWUsICJUaXRsZSIsIHsgc29ydDogZmFsc2UgfSk7IC1PUi0KKwkqIEBleGFtcGxlICQubGF5b3V0Lm1zZyh7IGZvbzogImJhciIgfSwgIlRpdGxlIiwgeyBzb3J0OiBmYWxzZSwgZGlzcGxheTogdHJ1ZSB9KTsgLy8gYWxlcnQgaGFzaC1kYXRhCisJKgorCSogQHBhcmFtIHsoT2JqZWN0fHN0cmluZyl9CQkJaW5mbwkJCVN0cmluZyBtZXNzYWdlIE9SIEhhc2gvQXJyYXkKKwkqIEBwYXJhbSB7KEJvb2xlYW58c3RyaW5nfE9iamVjdCk9fQlbcG9wdXA9ZmFsc2VdCVRydWUgbWVhbnMgYWxlcnQtYm94IC0gY2FuIGJlIHNraXBwZWQKKwkqIEBwYXJhbSB7KE9iamVjdHxzdHJpbmcpPX0JCQlbZGVidWdUaXRsZT0iIl0JVGl0bGUgZm9yIEhhc2ggZGF0YSAtIGNhbiBiZSBza2lwcGVkCisJKiBAcGFyYW0ge09iamVjdD19CQkJCQlbZGVidWdPcHRzXQkJRXh0cmEgb3B0aW9ucyBmb3IgZGVidWcgb3V0cHV0CisJKi8KKywJbXNnOiBmdW5jdGlvbiAoaW5mbywgcG9wdXAsIGRlYnVnVGl0bGUsIGRlYnVnT3B0cykgeworCQlpZiAoJC5pc1BsYWluT2JqZWN0KGluZm8pICYmIHdpbmRvdy5kZWJ1Z0RhdGEpIHsKKwkJCWlmICh0eXBlb2YgcG9wdXAgPT09ICJzdHJpbmciKSB7CisJCQkJZGVidWdPcHRzCT0gZGVidWdUaXRsZTsKKwkJCQlkZWJ1Z1RpdGxlCT0gcG9wdXA7CisJCQl9CisJCQllbHNlIGlmICh0eXBlb2YgZGVidWdUaXRsZSA9PT0gIm9iamVjdCIpIHsKKwkJCQlkZWJ1Z09wdHMJPSBkZWJ1Z1RpdGxlOworCQkJCWRlYnVnVGl0bGUJPSBudWxsOworCQkJfQorCQkJdmFyIHQgPSBkZWJ1Z1RpdGxlIHx8ICJsb2coIDxvYmplY3Q+ICkiCisJCQksCW8gPSAkLmV4dGVuZCh7IHNvcnQ6IGZhbHNlLCByZXR1cm5IVE1MOiBmYWxzZSwgZGlzcGxheTogZmFsc2UgfSwgZGVidWdPcHRzKTsKKwkJCWlmIChwb3B1cCA9PT0gdHJ1ZSB8fCBvLmRpc3BsYXkpCisJCQkJZGVidWdEYXRhKCBpbmZvLCB0LCBvICk7CisJCQllbHNlIGlmICh3aW5kb3cuY29uc29sZSkKKwkJCQljb25zb2xlLmxvZyhkZWJ1Z0RhdGEoIGluZm8sIHQsIG8gKSk7CisJCX0KKwkJZWxzZSBpZiAocG9wdXApCisJCQlhbGVydChpbmZvKTsKKwkJZWxzZSBpZiAod2luZG93LmNvbnNvbGUpCisJCQljb25zb2xlLmxvZyhpbmZvKTsKKwkJZWxzZSB7CisJCQl2YXIgaWQJPSAiI2xheW91dExvZ2dlciIKKwkJCSwJJGwgPSAkKGlkKTsKKwkJCWlmICghJGwubGVuZ3RoKQorCQkJCSRsID0gY3JlYXRlTG9nKCk7CisJCQkkbC5jaGlsZHJlbigidWwiKS5hcHBlbmQoJzxsaSBzdHlsZT0icGFkZGluZzogNHB4IDEwcHg7IG1hcmdpbjogMDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNDQ0M7Ij4nKyBpbmZvLnJlcGxhY2UoL1w8L2csIiZsdDsiKS5yZXBsYWNlKC9cPi9nLCImZ3Q7IikgKyc8L2xpPicpOworCQl9CisKKwkJZnVuY3Rpb24gY3JlYXRlTG9nICgpIHsKKwkJCXZhciBwb3MgPSAkLnN1cHBvcnQuZml4ZWRQb3NpdGlvbiA/ICdmaXhlZCcgOiAnYWJzb2x1dGUnCisJCQksCSRlID0gJCgnPGRpdiBpZD0ibGF5b3V0TG9nZ2VyIiBzdHlsZT0icG9zaXRpb246ICcrIHBvcyArJzsgdG9wOiA1cHg7IHotaW5kZXg6IDk5OTk5OTsgbWF4LXdpZHRoOiAyNSU7IG92ZXJmbG93OiBoaWRkZW47IGJvcmRlcjogMXB4IHNvbGlkICMwMDA7IGJvcmRlci1yYWRpdXM6IDVweDsgYmFja2dyb3VuZDogI0ZCRkJGQjsgYm94LXNoYWRvdzogMCAycHggMTBweCByZ2JhKDAsMCwwLDAuMyk7Ij4nCisJCQkJKwknPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxM3B4OyBmb250LXdlaWdodDogYm9sZDsgcGFkZGluZzogNXB4IDEwcHg7IGJhY2tncm91bmQ6ICNGNkY2RjY7IGJvcmRlci1yYWRpdXM6IDVweCA1cHggMCAwOyBjdXJzb3I6IG1vdmU7Ij4nCisJCQkJKwknPHNwYW4gc3R5bGU9ImZsb2F0OiByaWdodDsgcGFkZGluZy1sZWZ0OiA3cHg7IGN1cnNvcjogcG9pbnRlcjsiIHRpdGxlPSJSZW1vdmUgQ29uc29sZSIgb25jbGljaz0iJCh0aGlzKS5jbG9zZXN0KFwnI2xheW91dExvZ2dlclwnKS5yZW1vdmUoKSI+WDwvc3Bhbj5MYXlvdXQgY29uc29sZS5sb2c8L2Rpdj4nCisJCQkJKwknPHVsIHN0eWxlPSJmb250LXNpemU6IDEzcHg7IGZvbnQtd2VpZ2h0OiBub25lOyBsaXN0LXN0eWxlOiBub25lOyBtYXJnaW46IDA7IHBhZGRpbmc6IDAgMCAycHg7Ij48L3VsPicKKwkJCQkrICc8L2Rpdj4nCisJCQkJKS5hcHBlbmRUbygiYm9keSIpOworCQkJJGUuY3NzKCdsZWZ0JywgJCh3aW5kb3cpLndpZHRoKCkgLSAkZS5vdXRlcldpZHRoKCkgLSA1KQorCQkJaWYgKCQudWkuZHJhZ2dhYmxlKSAkZS5kcmFnZ2FibGUoeyBoYW5kbGU6ICc6Zmlyc3QtY2hpbGQnIH0pOworCQkJcmV0dXJuICRlOworCQl9OworCX0KKworfTsKKworLy8gREVGQVVMVCBPUFRJT05TCiskLmxheW91dC5kZWZhdWx0cyA9IHsKKy8qCisgKglMQVlPVVQgJiBMQVlPVVQtQ09OVEFJTkVSIE9QVElPTlMKKyAqCS0gbm9uZSBvZiB0aGVzZSBvcHRpb25zIGFyZSBhcHBsaWNhYmxlIHRvIGluZGl2aWR1YWwgcGFuZXMKKyAqLworCW5hbWU6CQkJCQkJIiIJCQkvLyBOb3QgcmVxdWlyZWQsIGJ1dCB1c2VmdWwgZm9yIGJ1dHRvbnMgYW5kIHVzZWQgZm9yIHRoZSBzdGF0ZS1jb29raWUKKywJY29udGFpbmVyU2VsZWN0b3I6CQkJIiIJCQkvLyBPTkxZIHVzZWQgd2hlbiBzcGVjaWZ5aW5nIGEgY2hpbGRPcHRpb25zIC0gdG8gZmluZCBjb250YWluZXItZWxlbWVudCB0aGF0IGlzIE5PVCBkaXJlY3RseS1uZXN0ZWQKKywJY29udGFpbmVyQ2xhc3M6CQkJCSJ1aS1sYXlvdXQtY29udGFpbmVyIiAvLyBsYXlvdXQtY29udGFpbmVyIGVsZW1lbnQKKywJc2Nyb2xsVG9Cb29rbWFya09uTG9hZDoJCXRydWUJCS8vIGFmdGVyIGNyZWF0aW5nIGEgbGF5b3V0LCBzY3JvbGwgdG8gYm9va21hcmsgaW4gVVJMICguLi4vcGFnZS5odG0jbXlCb29rbWFyaykKKywJcmVzaXplV2l0aFdpbmRvdzoJCQl0cnVlCQkvLyBiaW5kIHRoaXNMYXlvdXQucmVzaXplQWxsKCkgdG8gdGhlIHdpbmRvdy5yZXNpemUgZXZlbnQKKywJcmVzaXplV2l0aFdpbmRvd0RlbGF5OgkJMjAwCQkJLy8gZGVsYXkgY2FsbGluZyByZXNpemVBbGwgYmVjYXVzZSBtYWtlcyB3aW5kb3cgcmVzaXppbmcgdmVyeSBqZXJreQorLAlyZXNpemVXaXRoV2luZG93TWF4RGVsYXk6CTAJCQkvLyAwID0gbm9uZSAtIGZvcmNlIHJlc2l6ZSBldmVyeSBYWCBtcyB3aGlsZSB3aW5kb3cgaXMgYmVpbmcgcmVzaXplZAorLAlvbnJlc2l6ZWFsbF9zdGFydDoJCQludWxsCQkvLyBDQUxMQkFDSyB3aGVuIHJlc2l6ZUFsbCgpIFNUQVJUUwktIE5PVCBwYW5lLXNwZWNpZmljCissCW9ucmVzaXplYWxsX2VuZDoJCQludWxsCQkvLyBDQUxMQkFDSyB3aGVuIHJlc2l6ZUFsbCgpIEVORFMJLSBOT1QgcGFuZS1zcGVjaWZpYworLAlvbmxvYWRfc3RhcnQ6CQkJCW51bGwJCS8vIENBTExCQUNLIHdoZW4gTGF5b3V0IGluaXRzIC0gYWZ0ZXIgb3B0aW9ucyBpbml0aWFsaXplZCwgYnV0IGJlZm9yZSBlbGVtZW50cworLAlvbmxvYWRfZW5kOgkJCQkJbnVsbAkJLy8gQ0FMTEJBQ0sgd2hlbiBMYXlvdXQgaW5pdHMgLSBhZnRlciBFVkVSWVRISU5HIGhhcyBiZWVuIGluaXRpYWxpemVkCissCW9udW5sb2FkX3N0YXJ0OgkJCQludWxsCQkvLyBDQUxMQkFDSyB3aGVuIExheW91dCBpcyBkZXN0cm95ZWQgT1Igb25XaW5kb3dVbmxvYWQKKywJb251bmxvYWRfZW5kOgkJCQludWxsCQkvLyBDQUxMQkFDSyB3aGVuIExheW91dCBpcyBkZXN0cm95ZWQgT1Igb25XaW5kb3dVbmxvYWQKKywJaW5pdFBhbmVzOgkJCQkJdHJ1ZQkJLy8gZmFsc2UgPSBETyBOT1QgaW5pdGlhbGl6ZSB0aGUgcGFuZXMgb25Mb2FkIC0gd2lsbCBpbml0IGxhdGVyCissCXNob3dFcnJvck1lc3NhZ2VzOgkJCXRydWUJCS8vIGVuYWJsZXMgZmF0YWwgZXJyb3IgbWVzc2FnZXMgdG8gd2FybiBkZXZlbG9wZXJzIG9mIGNvbW1vbiBlcnJvcnMKKywJc2hvd0RlYnVnTWVzc2FnZXM6CQkJZmFsc2UJCS8vIGRpc3BsYXkgY29uc29sZS1hbmQtYWxlcnQgZGVidWcgbXNncyAtIElGIHRoaXMgTGF5b3V0IHZlcnNpb24gX2hhc18gZGVidWdnaW5nIGNvZGUhCisvLwlDaGFuZ2luZyB0aGlzIHpJbmRleCB2YWx1ZSB3aWxsIGNhdXNlIG90aGVyIHpJbmRleCB2YWx1ZXMgdG8gYXV0b21hdGljYWxseSBjaGFuZ2UKKywJekluZGV4OgkJCQkJCW51bGwJCS8vIHRoZSBQQU5FIHpJbmRleCAtIHJlc2l6ZXJzIGFuZCBtYXNrcyB3aWxsIGJlICsxCisvLwlETyBOT1QgQ0hBTkdFIHRoZSB6SW5kZXggdmFsdWVzIGJlbG93IHVubGVzcyB5b3UgY2xlYXJseSB1bmRlcnN0YW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMKKywJekluZGV4ZXM6IHsJCQkJCQkJCS8vIHNldCBfZGVmYXVsdF8gei1pbmRleCB2YWx1ZXMgaGVyZS4uLgorCQlwYW5lX25vcm1hbDoJCQkwCQkJLy8gbm9ybWFsIHotaW5kZXggZm9yIHBhbmVzCisJLAljb250ZW50X21hc2s6CQkJMQkJCS8vIGFwcGxpZWQgdG8gb3ZlcmxheXMgdXNlZCB0byBtYXNrIGNvbnRlbnQgSU5TSURFIHBhbmVzIGR1cmluZyByZXNpemluZworCSwJcmVzaXplcl9ub3JtYWw6CQkJMgkJCS8vIG5vcm1hbCB6LWluZGV4IGZvciByZXNpemVyLWJhcnMKKwksCXBhbmVfc2xpZGluZzoJCQkxMDAJCQkvLyBhcHBsaWVkIHRvICpCT1RIKiB0aGUgcGFuZSBhbmQgaXRzIHJlc2l6ZXIgd2hlbiBhIHBhbmUgaXMgJ3NsaWQgb3BlbicKKwksCXBhbmVfYW5pbWF0ZToJCQkxMDAwCQkvLyBhcHBsaWVkIHRvIHRoZSBwYW5lIHdoZW4gYmVpbmcgYW5pbWF0ZWQgLSBub3QgYXBwbGllZCB0byB0aGUgcmVzaXplcgorCSwJcmVzaXplcl9kcmFnOgkJCTEwMDAwCQkvLyBhcHBsaWVkIHRvIHRoZSBDTE9ORUQgcmVzaXplci1iYXIgd2hlbiBiZWluZyAnZHJhZ2dlZCcKKwl9CissCWVycm9yczogeworCQlwYW5lOgkJCQkJInBhbmUiCQkvLyBkZXNjcmlwdGlvbiBvZiAibGF5b3V0IHBhbmUgZWxlbWVudCIgLSB1c2VkIG9ubHkgaW4gZXJyb3IgbWVzc2FnZXMKKwksCXNlbGVjdG9yOgkJCQkic2VsZWN0b3IiCS8vIGRlc2NyaXB0aW9uIG9mICJqUXVlcnktc2VsZWN0b3IiIC0gdXNlZCBvbmx5IGluIGVycm9yIG1lc3NhZ2VzCisJLAlhZGRCdXR0b25FcnJvcjoJCQkiRXJyb3IgQWRkaW5nIEJ1dHRvbiBcblxuSW52YWxpZCAiCisJLAljb250YWluZXJNaXNzaW5nOgkJIlVJIExheW91dCBJbml0aWFsaXphdGlvbiBFcnJvclxuXG5UaGUgc3BlY2lmaWVkIGxheW91dC1jb250YWluZXIgZG9lcyBub3QgZXhpc3QuIgorCSwJY2VudGVyUGFuZU1pc3Npbmc6CQkiVUkgTGF5b3V0IEluaXRpYWxpemF0aW9uIEVycm9yXG5cblRoZSBjZW50ZXItcGFuZSBlbGVtZW50IGRvZXMgbm90IGV4aXN0LlxuXG5UaGUgY2VudGVyLXBhbmUgaXMgYSByZXF1aXJlZCBlbGVtZW50LiIKKwksCW5vQ29udGFpbmVySGVpZ2h0OgkJIlVJIExheW91dCBJbml0aWFsaXphdGlvbiBXYXJuaW5nXG5cblRoZSBsYXlvdXQtY29udGFpbmVyIFwiQ09OVEFJTkVSXCIgaGFzIG5vIGhlaWdodC5cblxuVGhlcmVmb3JlIHRoZSBsYXlvdXQgaXMgMC1oZWlnaHQgYW5kIGhlbmNlICdpbnZpc2libGUnISIKKwksCWNhbGxiYWNrRXJyb3I6CQkJIlVJIExheW91dCBDYWxsYmFjayBFcnJvclxuXG5UaGUgRVZFTlQgY2FsbGJhY2sgaXMgbm90IGEgdmFsaWQgZnVuY3Rpb24uIgorCX0KKy8qCisgKglQQU5FIERFRkFVTFQgU0VUVElOR1MKKyAqCS0gc2V0dGluZ3MgdW5kZXIgdGhlICdwYW5lcycga2V5IGJlY29tZSB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgKmFsbCBwYW5lcyoKKyAqCS0gQUxMIHBhbmUtb3B0aW9ucyBjYW4gYWxzbyBiZSBzZXQgc3BlY2lmaWNhbGx5IGZvciBlYWNoIHBhbmVzLCB3aGljaCB3aWxsIG92ZXJyaWRlIHRoZXNlICdkZWZhdWx0IHZhbHVlcycKKyAqLworLAlwYW5lczogeyAvLyBkZWZhdWx0IG9wdGlvbnMgZm9yICdhbGwgcGFuZXMnIC0gd2lsbCBiZSBvdmVycmlkZGVuIGJ5ICdwZXItcGFuZSBzZXR0aW5ncycKKwkJYXBwbHlEZW1vU3R5bGVzOiAJCWZhbHNlCQkvLyBOT1RFOiByZW5hbWVkIGZyb20gYXBwbHlEZWZhdWx0U3R5bGVzIGZvciBjbGFyaXR5CisJLAljbG9zYWJsZToJCQkJdHJ1ZQkJLy8gcGFuZSBjYW4gb3BlbiAmIGNsb3NlCisJLAlyZXNpemFibGU6CQkJCXRydWUJCS8vIHdoZW4gb3BlbiwgcGFuZSBjYW4gYmUgcmVzaXplZCAKKwksCXNsaWRhYmxlOgkJCQl0cnVlCQkvLyB3aGVuIGNsb3NlZCwgcGFuZSBjYW4gJ3NsaWRlIG9wZW4nIG92ZXIgb3RoZXIgcGFuZXMgLSBjbG9zZXMgb24gbW91c2Utb3V0CisJLAlpbml0Q2xvc2VkOgkJCQlmYWxzZQkJLy8gdHJ1ZSA9IGluaXQgcGFuZSBhcyAnY2xvc2VkJworCSwJaW5pdEhpZGRlbjogCQkJZmFsc2UgCQkvLyB0cnVlID0gaW5pdCBwYW5lIGFzICdoaWRkZW4nIC0gbm8gcmVzaXplci1iYXIvc3BhY2luZworCS8vCVNFTEVDVE9SUworCS8vLAlwYW5lU2VsZWN0b3I6CQkJIiIJCQkvLyBNVVNUIGJlIHBhbmUtc3BlY2lmaWMgLSBqUXVlcnkgc2VsZWN0b3IgZm9yIHBhbmUKKwksCWNvbnRlbnRTZWxlY3RvcjoJCSIudWktbGF5b3V0LWNvbnRlbnQiIC8vIElOTkVSIGRpdi9lbGVtZW50IHRvIGF1dG8tc2l6ZSBzbyBvbmx5IGl0IHNjcm9sbHMsIG5vdCB0aGUgZW50aXJlIHBhbmUhCisJLAljb250ZW50SWdub3JlU2VsZWN0b3I6CSIudWktbGF5b3V0LWlnbm9yZSIJLy8gZWxlbWVudChzKSB0byAnaWdub3JlJyB3aGVuIG1lYXN1cmluZyAnY29udGVudCcKKwksCWZpbmROZXN0ZWRDb250ZW50OgkJZmFsc2UJCS8vIHRydWUgPSAkUC5maW5kKGNvbnRlbnRTZWxlY3RvciksIGZhbHNlID0gJFAuY2hpbGRyZW4oY29udGVudFNlbGVjdG9yKQorCS8vCUdFTkVSSUMgUk9PVC1DTEFTU0VTIC0gZm9yIGF1dG8tZ2VuZXJhdGVkIGNsYXNzTmFtZXMKKwksCXBhbmVDbGFzczoJCQkJInVpLWxheW91dC1wYW5lIgkvLyBMYXlvdXQgUGFuZQorCSwJcmVzaXplckNsYXNzOgkJCSJ1aS1sYXlvdXQtcmVzaXplciIJLy8gUmVzaXplciBCYXIKKwksCXRvZ2dsZXJDbGFzczoJCQkidWktbGF5b3V0LXRvZ2dsZXIiCS8vIFRvZ2dsZXIgQnV0dG9uCisJLAlidXR0b25DbGFzczoJCQkidWktbGF5b3V0LWJ1dHRvbiIJLy8gQ1VTVE9NIEJ1dHRvbnMJLSBlZzogJ1t1aS1sYXlvdXQtYnV0dG9uXS10b2dnbGUvLW9wZW4vLWNsb3NlLy1waW4nCisJLy8JRUxFTUVOVCBTSVpFICYgU1BBQ0lORworCS8vLAlzaXplOgkJCQkJMTAwCQkJLy8gTVVTVCBiZSBwYW5lLXNwZWNpZmljIC1pbml0aWFsIHNpemUgb2YgcGFuZQorCSwJbWluU2l6ZToJCQkJMAkJCS8vIHdoZW4gbWFudWFsbHkgcmVzaXppbmcgYSBwYW5lCisJLAltYXhTaXplOgkJCQkwCQkJLy8gZGl0dG8sIDAgPSBubyBsaW1pdAorCSwJc3BhY2luZ19vcGVuOgkJCTYJCQkvLyBzcGFjZSBiZXR3ZWVuIHBhbmUgYW5kIGFkamFjZW50IHBhbmVzIC0gd2hlbiBwYW5lIGlzICdvcGVuJworCSwJc3BhY2luZ19jbG9zZWQ6CQkJNgkJCS8vIGRpdHRvIC0gd2hlbiBwYW5lIGlzICdjbG9zZWQnCisJLAl0b2dnbGVyTGVuZ3RoX29wZW46CQk1MAkJCS8vIExlbmd0aCA9IFdJRFRIIG9mIHRvZ2dsZXIgYnV0dG9uIG9uIG5vcnRoL3NvdXRoIHNpZGVzIC0gSEVJR0hUIG9uIGVhc3Qvd2VzdCBzaWRlcworCSwJdG9nZ2xlckxlbmd0aF9jbG9zZWQ6IAk1MAkJCS8vIDEwMCUgT1IgLTEgbWVhbnMgJ2Z1bGwgaGVpZ2h0L3dpZHRoIG9mIHJlc2l6ZXIgYmFyJyAtIDAgbWVhbnMgJ2hpZGRlbicKKwksCXRvZ2dsZXJBbGlnbl9vcGVuOgkJImNlbnRlciIJLy8gdG9wL2xlZnQsIGJvdHRvbS9yaWdodCwgY2VudGVyLCBPUi4uLgorCSwJdG9nZ2xlckFsaWduX2Nsb3NlZDoJImNlbnRlciIJLy8gMSA9PiBubiA9IG9mZnNldCBmcm9tIHRvcC9sZWZ0LCAtMSA9PiAtbm4gPT0gb2Zmc2V0IGZyb20gYm90dG9tL3JpZ2h0CisJLAl0b2dnbGVyQ29udGVudF9vcGVuOgkiIgkJCS8vIHRleHQgb3IgSFRNTCB0byBwdXQgSU5TSURFIHRoZSB0b2dnbGVyCisJLAl0b2dnbGVyQ29udGVudF9jbG9zZWQ6CSIiCQkJLy8gZGl0dG8KKwkvLwlSRVNJWklORyBPUFRJT05TCisJLAlyZXNpemVyRGJsQ2xpY2tUb2dnbGU6CXRydWUJCS8vIAorCSwJYXV0b1Jlc2l6ZToJCQkJdHJ1ZQkJLy8gSUYgc2l6ZSBpcyAnYXV0bycgb3IgYSBwZXJjZW50YWdlLCB0aGVuIHJlY2FsYyAncGl4ZWwgc2l6ZScgd2hlbmV2ZXIgdGhlIGxheW91dCByZXNpemVzCisJLAlhdXRvUmVvcGVuOgkJCQl0cnVlCQkvLyBJRiBhIHBhbmUgd2FzIGF1dG8tY2xvc2VkIGR1ZSB0byBub1Jvb20sIHJlb3BlbiBpdCB3aGVuIHRoZXJlIGlzIHJvb20/IEZhbHNlID0gbGVhdmUgaXQgY2xvc2VkCisJLAlyZXNpemVyRHJhZ09wYWNpdHk6CQkxCQkJLy8gb3B0aW9uIGZvciB1aS5kcmFnZ2FibGUKKwkvLywJcmVzaXplckN1cnNvcjoJCQkiIgkJCS8vIE1VU1QgYmUgcGFuZS1zcGVjaWZpYyAtIGN1cnNvciB3aGVuIG92ZXIgcmVzaXplci1iYXIKKwksCW1hc2tDb250ZW50czoJCQlmYWxzZQkJLy8gdHJ1ZSA9IGFkZCBESVYtbWFzayBvdmVyLW9yLWluc2lkZSB0aGlzIHBhbmUgc28gY2FuICdkcmFnJyBvdmVyIElGUkFNRVMKKwksCW1hc2tPYmplY3RzOgkJCWZhbHNlCQkvLyB0cnVlID0gYWRkIElGUkFNRS1tYXNrIG92ZXItb3ItaW5zaWRlIHRoaXMgcGFuZSB0byBjb3ZlciBvYmplY3RzL2FwcGxldHMgLSBjb250ZW50LW1hc2sgd2lsbCBvdmVybGF5IHRoaXMgbWFzaworCSwJbWFza1ppbmRleDoJCQkJbnVsbAkJLy8gd2lsbCBvdmVycmlkZSB6SW5kZXhlcy5jb250ZW50X21hc2sgaWYgc3BlY2lmaWVkIC0gbm90IGFwcGxpY2FibGUgdG8gaWZyYW1lLXBhbmVzCisJLAlyZXNpemluZ0dyaWQ6CQkJZmFsc2UJCS8vIGdyaWQgc2l6ZSB0aGF0IHRoZSByZXNpemVycyB3aWxsIHNuYXAtdG8gZHVyaW5nIHJlc2l6aW5nLCBlZzogWzIwLDIwXQorCSwJbGl2ZVBhbmVSZXNpemluZzoJCWZhbHNlCQkvLyB0cnVlID0gTElWRSBSZXNpemluZyBhcyByZXNpemVyIGlzIGRyYWdnZWQKKwksCWxpdmVDb250ZW50UmVzaXppbmc6CWZhbHNlCQkvLyB0cnVlID0gcmUtbWVhc3VyZSBoZWFkZXIvZm9vdGVyIGhlaWdodHMgYXMgcmVzaXplciBpcyBkcmFnZ2VkCisJLAlsaXZlUmVzaXppbmdUb2xlcmFuY2U6CTEJCQkvLyBob3cgbWFueSBweCBjaGFuZ2UgYmVmb3JlIHBhbmUgcmVzaXplcywgdG8gY29udHJvbCBwZXJmb3JtYW5jZQorCS8vCVNMSURJTkcgT1BUSU9OUworCSwJc2xpZGVyQ3Vyc29yOgkJCSJwb2ludGVyIgkvLyBjdXJzb3Igd2hlbiByZXNpemVyLWJhciB3aWxsIHRyaWdnZXIgJ3NsaWRpbmcnCisJLAlzbGlkZVRyaWdnZXJfb3BlbjoJCSJjbGljayIJCS8vIGNsaWNrLCBkYmxjbGljaywgbW91c2VlbnRlcgorCSwJc2xpZGVUcmlnZ2VyX2Nsb3NlOgkJIm1vdXNlbGVhdmUiLy8gY2xpY2ssIG1vdXNlbGVhdmUKKwksCXNsaWRlRGVsYXlfb3BlbjoJCTMwMAkJCS8vIGFwcGxpZXMgb25seSBmb3IgbW91c2VlbnRlciBldmVudCAtIDAgPSBpbnN0YW50IG9wZW4KKwksCXNsaWRlRGVsYXlfY2xvc2U6CQkzMDAJCQkvLyBhcHBsaWVzIG9ubHkgZm9yIG1vdXNlbGVhdmUgZXZlbnQgKDMwMG1zIGlzIHRoZSBtaW5pbXVtISkKKwksCWhpZGVUb2dnbGVyT25TbGlkZToJCWZhbHNlCQkvLyB3aGVuIHBhbmUgaXMgc2xpZC1vcGVuLCBzaG91bGQgdGhlIHRvZ2dsZXIgc2hvdz8KKwksCXByZXZlbnRRdWlja1NsaWRlQ2xvc2U6CSQubGF5b3V0LmJyb3dzZXIud2Via2l0IC8vIENocm9tZSB0cmlnZ2VycyBzbGlkZUNsb3NlZCBhcyBpdCBpcyBvcGVuaW5nCisJLAlwcmV2ZW50UHJlbWF0dXJlU2xpZGVDbG9zZTogZmFsc2UJLy8gaGFuZGxlIGluY29ycmVjdCBtb3VzZWxlYXZlIHRyaWdnZXIsIGxpa2Ugd2hlbiBvdmVyIGEgU0VMRUNULWxpc3QgaW4gSUUKKwkvLwlQQU5FLVNQRUNJRklDIFRJUFMgJiBNRVNTQUdFUworCSwJdGlwczogeworCQkJT3BlbjoJCQkJIk9wZW4iCQkvLyBlZzogIk9wZW4gUGFuZSIKKwkJLAlDbG9zZToJCQkJIkNsb3NlIgorCQksCVJlc2l6ZToJCQkJIlJlc2l6ZSIKKwkJLAlTbGlkZToJCQkJIlNsaWRlIE9wZW4iCisJCSwJUGluOgkJCQkiUGluIgorCQksCVVucGluOgkJCQkiVW4tUGluIgorCQksCW5vUm9vbVRvT3BlbjoJCSJOb3QgZW5vdWdoIHJvb20gdG8gc2hvdyB0aGlzIHBhbmVsLiIJLy8gYWxlcnQgaWYgdXNlciB0cmllcyB0byBvcGVuIGEgcGFuZSB0aGF0IGNhbm5vdAorCQksCW1pblNpemVXYXJuaW5nOgkJIlBhbmVsIGhhcyByZWFjaGVkIGl0cyBtaW5pbXVtIHNpemUiCS8vIGRpc3BsYXlzIGluIGJyb3dzZXIgc3RhdHVzYmFyCisJCSwJbWF4U2l6ZVdhcm5pbmc6CQkiUGFuZWwgaGFzIHJlYWNoZWQgaXRzIG1heGltdW0gc2l6ZSIJLy8gZGl0dG8KKwkJfQorCS8vCUhPVC1LRVlTICYgTUlTQworCSwJc2hvd092ZXJmbG93T25Ib3ZlcjoJZmFsc2UJCS8vIHdpbGwgYmluZCBhbGxvd092ZXJmbG93KCkgdXRpbGl0eSB0byBwYW5lLm9uTW91c2VPdmVyCisJLAllbmFibGVDdXJzb3JIb3RrZXk6CQl0cnVlCQkvLyBlbmFibGVkICdjdXJzb3InIGhvdGtleXMKKwkvLywJY3VzdG9tSG90a2V5OgkJCSIiCQkJLy8gTVVTVCBiZSBwYW5lLXNwZWNpZmljIC0gRUlUSEVSIGEgY2hhckNvZGUgT1IgYSBjaGFyYWN0ZXIKKwksCWN1c3RvbUhvdGtleU1vZGlmaWVyOgkiU0hJRlQiCQkvLyBlaXRoZXIgJ1NISUZUJywgJ0NUUkwnIG9yICdDVFJMK1NISUZUJyAtIE5PVCAnQUxUJworCS8vCVBBTkUgQU5JTUFUSU9OCisJLy8JTk9URTogZnhTc3Nfb3BlbiwgZnhTc3NfY2xvc2UgJiBmeFNzc19zaXplIG9wdGlvbnMgKGVnOiBmeE5hbWVfb3BlbikgYXJlIGF1dG8tZ2VuZXJhdGVkIGlmIG5vdCBwYXNzZWQKKwksCWZ4TmFtZToJCQkJCSJzbGlkZSIgCS8vICgnbm9uZScgb3IgYmxhbmspLCBzbGlkZSwgZHJvcCwgc2NhbGUgLS0gb25seSByZWxldmFudCB0byAnb3BlbicgJiAnY2xvc2UnLCBOT1QgJ3NpemUnCisJLAlmeFNwZWVkOgkJCQludWxsCQkvLyBzbG93LCBub3JtYWwsIGZhc3QsIDIwMCwgbm5uIC0gaWYgcGFzc2VkLCB3aWxsIE9WRVJSSURFIGZ4U2V0dGluZ3MuZHVyYXRpb24KKwksCWZ4U2V0dGluZ3M6CQkJCXt9CQkJLy8gY2FuIGJlIHBhc3NlZCwgZWc6IHsgZWFzaW5nOiAiZWFzZU91dEJvdW5jZSIsIGR1cmF0aW9uOiAxNTAwIH0KKwksCWZ4T3BhY2l0eUZpeDoJCQl0cnVlCQkvLyB0cmllcyB0byBmaXggb3BhY2l0eSBpbiBJRSB0byByZXN0b3JlIGFudGktYWxpYXNpbmcgYWZ0ZXIgYW5pbWF0aW9uCisJLAlhbmltYXRlUGFuZVNpemluZzoJCWZhbHNlCQkvLyB0cnVlID0gYW5pbWF0ZSByZXNpemluZyBhZnRlciBkcmFnZ2luZyByZXNpemVyLWJhciBPUiBzaXplUGFuZSgpIGlzIGNhbGxlZAorCS8qICBOT1RFOiBBY3Rpb24tc3BlY2lmaWMgRlggb3B0aW9ucyBhcmUgYXV0by1nZW5lcmF0ZWQgZnJvbSB0aGUgb3B0aW9ucyBhYm92ZSBpZiBub3Qgc3BlY2lmaWNhbGx5IHNldDoKKwkJZnhOYW1lX29wZW46CQkJInNsaWRlIgkJLy8gJ09wZW4nIHBhbmUgYW5pbWF0aW9uCisJCWZuTmFtZV9jbG9zZToJCQkic2xpZGUiCQkvLyAnQ2xvc2UnIHBhbmUgYW5pbWF0aW9uCisJCWZ4TmFtZV9zaXplOgkJCSJzbGlkZSIJCS8vICdTaXplJyBwYW5lIGFuaW1hdGlvbiAtIHdoZW4gYW5pbWF0ZVBhbmVTaXppbmcgPSB0cnVlCisJCWZ4U3BlZWRfb3BlbjoJCQludWxsCisJCWZ4U3BlZWRfY2xvc2U6CQkJbnVsbAorCQlmeFNwZWVkX3NpemU6CQkJbnVsbAorCQlmeFNldHRpbmdzX29wZW46CQl7fQorCQlmeFNldHRpbmdzX2Nsb3NlOgkJe30KKwkJZnhTZXR0aW5nc19zaXplOgkJe30KKwkqLworCS8vCUNISUxEL05FU1RFRCBMQVlPVVRTCisJLAljaGlsZE9wdGlvbnM6CQkJbnVsbAkJLy8gTGF5b3V0LW9wdGlvbnMgZm9yIG5lc3RlZC9jaGlsZCBsYXlvdXQgLSBldmVuIHt9IGlzIHZhbGlkIGFzIG9wdGlvbnMKKwksCWluaXRDaGlsZExheW91dDoJCXRydWUJCS8vIHRydWUgPSBjaGlsZCBsYXlvdXQgd2lsbCBiZSBjcmVhdGVkIGFzIHNvb24gYXMgX3RoaXNfIGxheW91dCBjb21wbGV0ZXMgaW5pdGlhbGl6YXRpb24KKwksCWRlc3Ryb3lDaGlsZExheW91dDoJCXRydWUJCS8vIHRydWUgPSBkZXN0cm95IGNoaWxkLWxheW91dCBpZiB0aGlzIHBhbmUgaXMgZGVzdHJveWVkCisJLAlyZXNpemVDaGlsZExheW91dDoJCXRydWUJCS8vIHRydWUgPSB0cmlnZ2VyIGNoaWxkLWxheW91dC5yZXNpemVBbGwoKSB3aGVuIHRoaXMgcGFuZSBpcyByZXNpemVkCisJLy8JRVZFTlQgVFJJR0dFUklORworCSwJdHJpZ2dlckV2ZW50c09uTG9hZDoJZmFsc2UJCS8vIHRydWUgPSB0cmlnZ2VyIG9ub3BlbiBPUiBvbmNsb3NlIGNhbGxiYWNrcyB3aGVuIGxheW91dCBpbml0aWFsaXplcworCSwJdHJpZ2dlckV2ZW50c0R1cmluZ0xpdmVSZXNpemU6IHRydWUJLy8gdHJ1ZSA9IHRyaWdnZXIgb25yZXNpemUgY2FsbGJhY2sgUkVQRUFURURMWSBpZiBsaXZlUGFuZVJlc2l6aW5nPT10cnVlCisJLy8JUEFORSBDQUxMQkFDS1MKKwksCW9uc2hvd19zdGFydDoJCQludWxsCQkvLyBDQUxMQkFDSyB3aGVuIHBhbmUgU1RBUlRTIHRvIFNob3cJLSBCRUZPUkUgb25vcGVuL29uaGlkZV9zdGFydAorCSwJb25zaG93X2VuZDoJCQkJbnVsbAkJLy8gQ0FMTEJBQ0sgd2hlbiBwYW5lIEVORFMgYmVpbmcgU2hvd24JLSBBRlRFUiAgb25vcGVuL29uaGlkZV9lbmQKKwksCW9uaGlkZV9zdGFydDoJCQludWxsCQkvLyBDQUxMQkFDSyB3aGVuIHBhbmUgU1RBUlRTIHRvIENsb3NlCS0gQkVGT1JFIG9uY2xvc2Vfc3RhcnQKKwksCW9uaGlkZV9lbmQ6CQkJCW51bGwJCS8vIENBTExCQUNLIHdoZW4gcGFuZSBFTkRTIGJlaW5nIENsb3NlZAktIEFGVEVSICBvbmNsb3NlX2VuZAorCSwJb25vcGVuX3N0YXJ0OgkJCW51bGwJCS8vIENBTExCQUNLIHdoZW4gcGFuZSBTVEFSVFMgdG8gT3BlbgorCSwJb25vcGVuX2VuZDoJCQkJbnVsbAkJLy8gQ0FMTEJBQ0sgd2hlbiBwYW5lIEVORFMgYmVpbmcgT3BlbmVkCisJLAlvbmNsb3NlX3N0YXJ0OgkJCW51bGwJCS8vIENBTExCQUNLIHdoZW4gcGFuZSBTVEFSVFMgdG8gQ2xvc2UKKwksCW9uY2xvc2VfZW5kOgkJCW51bGwJCS8vIENBTExCQUNLIHdoZW4gcGFuZSBFTkRTIGJlaW5nIENsb3NlZAorCSwJb25yZXNpemVfc3RhcnQ6CQkJbnVsbAkJLy8gQ0FMTEJBQ0sgd2hlbiBwYW5lIFNUQVJUUyBiZWluZyBSZXNpemVkICoqKkZPUiBBTlkgUkVBU09OKioqCisJLAlvbnJlc2l6ZV9lbmQ6CQkJbnVsbAkJLy8gQ0FMTEJBQ0sgd2hlbiBwYW5lIEVORFMgYmVpbmcgUmVzaXplZCAqKipGT1IgQU5ZIFJFQVNPTioqKgorCSwJb25zaXplY29udGVudF9zdGFydDoJbnVsbAkJLy8gQ0FMTEJBQ0sgd2hlbiBzaXppbmcgb2YgY29udGVudC1lbGVtZW50IFNUQVJUUworCSwJb25zaXplY29udGVudF9lbmQ6CQludWxsCQkvLyBDQUxMQkFDSyB3aGVuIHNpemluZyBvZiBjb250ZW50LWVsZW1lbnQgRU5EUworCSwJb25zd2FwX3N0YXJ0OgkJCW51bGwJCS8vIENBTExCQUNLIHdoZW4gcGFuZSBTVEFSVFMgdG8gU3dhcAorCSwJb25zd2FwX2VuZDoJCQkJbnVsbAkJLy8gQ0FMTEJBQ0sgd2hlbiBwYW5lIEVORFMgYmVpbmcgU3dhcHBlZAorCSwJb25kcmFnX3N0YXJ0OgkJCW51bGwJCS8vIENBTExCQUNLIHdoZW4gcGFuZSBTVEFSVFMgYmVpbmcgKioqTUFOVUFMTFkqKiogUmVzaXplZAorCSwJb25kcmFnX2VuZDoJCQkJbnVsbAkJLy8gQ0FMTEJBQ0sgd2hlbiBwYW5lIEVORFMgYmVpbmcgKioqTUFOVUFMTFkqKiogUmVzaXplZAorCX0KKy8qCisgKglQQU5FLVNQRUNJRklDIFNFVFRJTkdTCisgKgktIG9wdGlvbnMgbGlzdGVkIGJlbG93IE1VU1QgYmUgc3BlY2lmaWVkIHBlci1wYW5lIC0gdGhleSBDQU5OT1QgYmUgc2V0IHVuZGVyICdwYW5lcycKKyAqCS0gYWxsIG9wdGlvbnMgdW5kZXIgdGhlICdwYW5lcycga2V5IGNhbiBhbHNvIGJlIHNldCBzcGVjaWZpY2FsbHkgZm9yIGFueSBwYW5lCisgKgktIG1vc3Qgb3B0aW9ucyB1bmRlciB0aGUgJ3BhbmVzJyBrZXkgYXBwbHkgb25seSB0byAnYm9yZGVyLXBhbmVzJyAtIE5PVCB0aGUgdGhlIGNlbnRlci1wYW5lCisgKi8KKywJbm9ydGg6IHsKKwkJcGFuZVNlbGVjdG9yOgkJCSIudWktbGF5b3V0LW5vcnRoIgorCSwJc2l6ZToJCQkJCSJhdXRvIgkJLy8gZWc6ICJhdXRvIiwgIjMwJSIsIC4zMCwgMjAwCisJLAlyZXNpemVyQ3Vyc29yOgkJCSJuLXJlc2l6ZSIJLy8gY3VzdG9tID0gdXJsKG15Q3Vyc29yLmN1cikKKwksCWN1c3RvbUhvdGtleToJCQkiIgkJCS8vIEVJVEhFUiBhIGNoYXJDb2RlICg0MykgT1IgYSBjaGFyYWN0ZXIgKCJvIikKKwl9CissCXNvdXRoOiB7CisJCXBhbmVTZWxlY3RvcjoJCQkiLnVpLWxheW91dC1zb3V0aCIKKwksCXNpemU6CQkJCQkiYXV0byIKKwksCXJlc2l6ZXJDdXJzb3I6CQkJInMtcmVzaXplIgorCSwJY3VzdG9tSG90a2V5OgkJCSIiCisJfQorLAllYXN0OiB7CisJCXBhbmVTZWxlY3RvcjoJCQkiLnVpLWxheW91dC1lYXN0IgorCSwJc2l6ZToJCQkJCTIwMAorCSwJcmVzaXplckN1cnNvcjoJCQkiZS1yZXNpemUiCisJLAljdXN0b21Ib3RrZXk6CQkJIiIKKwl9CissCXdlc3Q6IHsKKwkJcGFuZVNlbGVjdG9yOgkJCSIudWktbGF5b3V0LXdlc3QiCisJLAlzaXplOgkJCQkJMjAwCisJLAlyZXNpemVyQ3Vyc29yOgkJCSJ3LXJlc2l6ZSIKKwksCWN1c3RvbUhvdGtleToJCQkiIgorCX0KKywJY2VudGVyOiB7CisJCXBhbmVTZWxlY3RvcjoJCQkiLnVpLWxheW91dC1jZW50ZXIiCisJLAltaW5XaWR0aDoJCQkJMAorCSwJbWluSGVpZ2h0OgkJCQkwCisJfQorfTsKKworJC5sYXlvdXQub3B0aW9uc01hcCA9IHsKKwkvLyBsYXlvdXQvZ2xvYmFsIG9wdGlvbnMgLSBOT1QgcGFuZS1vcHRpb25zCisJbGF5b3V0OiAoInN0YXRlTWFuYWdlbWVudCxlZmZlY3RzLHpJbmRleGVzLGVycm9ycywiCisJKwkibmFtZSx6SW5kZXgsc2Nyb2xsVG9Cb29rbWFya09uTG9hZCxzaG93RXJyb3JNZXNzYWdlcywiCisJKwkicmVzaXplV2l0aFdpbmRvdyxyZXNpemVXaXRoV2luZG93RGVsYXkscmVzaXplV2l0aFdpbmRvd01heERlbGF5LCIKKwkrCSJvbnJlc2l6ZWFsbCxvbnJlc2l6ZWFsbF9zdGFydCxvbnJlc2l6ZWFsbF9lbmQsb25sb2FkLG9udW5sb2FkIikuc3BsaXQoIiwiKQorLy8JYm9yZGVyUGFuZXM6IFsgQUxMIG9wdGlvbnMgdGhhdCBhcmUgTk9UIHNwZWNpZmllZCBhcyAnbGF5b3V0JyBdCisJLy8gZGVmYXVsdC5wYW5lcyBvcHRpb25zIHRoYXQgYXBwbHkgdG8gdGhlIGNlbnRlci1wYW5lIChtb3N0IG9wdGlvbnMgYXBwbHkgX29ubHlfIHRvIGJvcmRlci1wYW5lcykKKywJY2VudGVyOiAoInBhbmVDbGFzcyxjb250ZW50U2VsZWN0b3IsY29udGVudElnbm9yZVNlbGVjdG9yLGZpbmROZXN0ZWRDb250ZW50LGFwcGx5RGVtb1N0eWxlcyx0cmlnZ2VyRXZlbnRzT25Mb2FkLCIKKwkrCSJzaG93T3ZlcmZsb3dPbkhvdmVyLG1hc2tDb250ZW50cyxtYXNrT2JqZWN0cyxsaXZlQ29udGVudFJlc2l6aW5nLCIKKwkrCSJjaGlsZE9wdGlvbnMsaW5pdENoaWxkTGF5b3V0LHJlc2l6ZUNoaWxkTGF5b3V0LGRlc3Ryb3lDaGlsZExheW91dCwiCisJKwkib25yZXNpemUsb25yZXNpemVfc3RhcnQsb25yZXNpemVfZW5kLG9uc2l6ZWNvbnRlbnQsb25zaXplY29udGVudF9zdGFydCxvbnNpemVjb250ZW50X2VuZCIpLnNwbGl0KCIsIikKKwkvLyBvcHRpb25zIHRoYXQgTVVTVCBiZSBzcGVjaWZpY2FsbHkgc2V0ICdwZXItcGFuZScgLSBDQU5OT1Qgc2V0IGluIHRoZSBwYW5lcyAoZGVmYXVsdHMpIGtleQorLAlub0RlZmF1bHQ6ICgicGFuZVNlbGVjdG9yLHJlc2l6ZXJDdXJzb3IsY3VzdG9tSG90a2V5Iikuc3BsaXQoIiwiKQorfTsKKworLyoqCisgKiBQcm9jZXNzZXMgb3B0aW9ucyBwYXNzZWQgaW4gY29udmVydHMgZmxhdC1mb3JtYXQgZGF0YSBpbnRvIHN1YmtleSAoSlNPTikgZm9ybWF0CisgKiBJbiBmbGF0LWZvcm1hdCwgc3Via2V5cyBhcmUgX2N1cnJlbnRseV8gc2VwYXJhdGVkIHdpdGggMiB1bmRlcnNjb3JlcywgbGlrZSBub3J0aF9fb3B0TmFtZQorICogUGx1Z2lucyBtYXkgYWxzbyBjYWxsIHRoaXMgbWV0aG9kIHNvIHRoZXkgY2FuIHRyYW5zZm9ybSB0aGVpciBvd24gZGF0YQorICoKKyAqIEBwYXJhbSAgeyFPYmplY3R9CWhhc2gJRGF0YS9vcHRpb25zIHBhc3NlZCBieSB1c2VyIC0gbWF5IGJlIGEgc2luZ2xlIGxldmVsIG9yIG5lc3RlZCBsZXZlbHMKKyAqIEByZXR1cm4ge09iamVjdH0JCQkJUmV0dXJucyBoYXNoIG9mIG1pbldpZHRoICYgbWluSGVpZ2h0CisgKi8KKyQubGF5b3V0LnRyYW5zZm9ybURhdGEgPSBmdW5jdGlvbiAoaGFzaCkgeworCXZhcglqc29uID0geyBwYW5lczoge30sIGNlbnRlcjoge30gfSAvLyBpbml0IHJldHVybiBvYmplY3QKKwksCWRhdGEsIGJyYW5jaCwgb3B0S2V5LCBrZXlzLCBrZXksIHZhbCwgaSwgYzsKKworCWlmICh0eXBlb2YgaGFzaCAhPT0gIm9iamVjdCIpIHJldHVybiBqc29uOyAvLyBubyBvcHRpb25zIHBhc3NlZAorCisJLy8gY29udmVydCBhbGwgJ2ZsYXQta2V5cycgdG8gJ3N1Yi1rZXknIGZvcm1hdAorCWZvciAob3B0S2V5IGluIGhhc2gpIHsKKwkJYnJhbmNoCT0ganNvbjsKKwkJZGF0YQk9ICQubGF5b3V0Lm9wdGlvbnNNYXAubGF5b3V0OworCQl2YWwJCT0gaGFzaFsgb3B0S2V5IF07CisJCWtleXMJPSBvcHRLZXkuc3BsaXQoIl9fIik7IC8vIGVnOiB3ZXN0X19zaXplIG9yIG5vcnRoX19meFNldHRpbmdzX19kdXJhdGlvbgorCQljCQk9IGtleXMubGVuZ3RoIC0gMTsKKwkJLy8gY29udmVydCB1bmRlcnNjb3JlLWRlbGltaXRlZCB0byBzdWJrZXlzCisJCWZvciAoaT0wOyBpIDw9IGM7IGkrKykgeworCQkJa2V5ID0ga2V5c1tpXTsKKwkJCWlmIChpID09PSBjKQorCQkJCWJyYW5jaFtrZXldID0gdmFsOworCQkJZWxzZSBpZiAoIWJyYW5jaFtrZXldKQorCQkJCWJyYW5jaFtrZXldID0ge307IC8vIGNyZWF0ZSB0aGUgc3Via2V5CisJCQkvLyByZWN1cnNlIHRvIHN1Yi1rZXkgZm9yIG5leHQgbG9vcCAtIGlmIG5vdCBkb25lCisJCQlicmFuY2ggPSBicmFuY2hba2V5XTsKKwkJfQorCX0KKworCXJldHVybiBqc29uOworfTsKKworLy8gSU5URVJOQUwgQ09ORklHIERBVEEgLSBETyBOT1QgQ0hBTkdFIFRISVMhCiskLmxheW91dC5iYWNrd2FyZENvbXBhdGliaWxpdHkgPSB7CisJLy8gZGF0YSB1c2VkIGJ5IHJlbmFtZU9sZE9wdGlvbnMoKQorCW1hcDogeworCS8vCU9MRCBPcHRpb24gTmFtZToJCQlORVcgT3B0aW9uIE5hbWUKKwkJYXBwbHlEZWZhdWx0U3R5bGVzOgkJCSJhcHBseURlbW9TdHlsZXMiCisJLAlyZXNpemVOZXN0ZWRMYXlvdXQ6CQkJInJlc2l6ZUNoaWxkTGF5b3V0IgorCSwJcmVzaXplV2hpbGVEcmFnZ2luZzoJCSJsaXZlUGFuZVJlc2l6aW5nIgorCSwJcmVzaXplQ29udGVudFdoaWxlRHJhZ2dpbmc6CSJsaXZlQ29udGVudFJlc2l6aW5nIgorCSwJdHJpZ2dlckV2ZW50c1doaWxlRHJhZ2dpbmc6CSJ0cmlnZ2VyRXZlbnRzRHVyaW5nTGl2ZVJlc2l6ZSIKKwksCW1hc2tJZnJhbWVzT25SZXNpemU6CQkibWFza0NvbnRlbnRzIgorCSwJdXNlU3RhdGVDb29raWU6CQkJCSJzdGF0ZU1hbmFnZW1lbnQuZW5hYmxlZCIKKwksCSJjb29raWUuYXV0b0xvYWQiOgkJCSJzdGF0ZU1hbmFnZW1lbnQuYXV0b0xvYWQiCisJLAkiY29va2llLmF1dG9TYXZlIjoJCQkic3RhdGVNYW5hZ2VtZW50LmF1dG9TYXZlIgorCSwJImNvb2tpZS5rZXlzIjoJCQkJInN0YXRlTWFuYWdlbWVudC5zdGF0ZUtleXMiCisJLAkiY29va2llLm5hbWUiOgkJCQkic3RhdGVNYW5hZ2VtZW50LmNvb2tpZS5uYW1lIgorCSwJImNvb2tpZS5kb21haW4iOgkJCSJzdGF0ZU1hbmFnZW1lbnQuY29va2llLmRvbWFpbiIKKwksCSJjb29raWUucGF0aCI6CQkJCSJzdGF0ZU1hbmFnZW1lbnQuY29va2llLnBhdGgiCisJLAkiY29va2llLmV4cGlyZXMiOgkJCSJzdGF0ZU1hbmFnZW1lbnQuY29va2llLmV4cGlyZXMiCisJLAkiY29va2llLnNlY3VyZSI6CQkJInN0YXRlTWFuYWdlbWVudC5jb29raWUuc2VjdXJlIgorCS8vCU9MRCBMYW5ndWFnZSBvcHRpb25zCisJLAlub1Jvb21Ub09wZW5UaXA6CQkJInRpcHMubm9Sb29tVG9PcGVuIgorCSwJdG9nZ2xlclRpcF9vcGVuOgkJCSJ0aXBzLkNsb3NlIgkvLyBvcGVuICAgPSBDbG9zZQorCSwJdG9nZ2xlclRpcF9jbG9zZWQ6CQkJInRpcHMuT3BlbiIJCS8vIGNsb3NlZCA9IE9wZW4KKwksCXJlc2l6ZXJUaXA6CQkJCQkidGlwcy5SZXNpemUiCisJLAlzbGlkZXJUaXA6CQkJCQkidGlwcy5TbGlkZSIKKwl9CisKKy8qKgorKiBAcGFyYW0ge09iamVjdH0Jb3B0cworKi8KKywJcmVuYW1lT3B0aW9uczogZnVuY3Rpb24gKG9wdHMpIHsKKwkJdmFyIG1hcCA9ICQubGF5b3V0LmJhY2t3YXJkQ29tcGF0aWJpbGl0eS5tYXAKKwkJLAlvbGREYXRhLCBuZXdEYXRhLCB2YWx1ZQorCQk7CisJCWZvciAodmFyIGl0ZW1QYXRoIGluIG1hcCkgeworCQkJb2xkRGF0YQk9IGdldEJyYW5jaCggaXRlbVBhdGggKTsKKwkJCXZhbHVlCT0gb2xkRGF0YS5icmFuY2hbIG9sZERhdGEua2V5IF07CisJCQlpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgeworCQkJCW5ld0RhdGEgPSBnZXRCcmFuY2goIG1hcFtpdGVtUGF0aF0sIHRydWUgKTsKKwkJCQluZXdEYXRhLmJyYW5jaFsgbmV3RGF0YS5rZXkgXSA9IHZhbHVlOworCQkJCWRlbGV0ZSBvbGREYXRhLmJyYW5jaFsgb2xkRGF0YS5rZXkgXTsKKwkJCX0KKwkJfQorCisJCS8qKgorCQkqIEBwYXJhbSB7c3RyaW5nfQlwYXRoCisJCSogQHBhcmFtIHtib29sZWFuPX0JW2NyZWF0ZT1mYWxzZV0JQ3JlYXRlIHBhdGggaWYgZG9lcyBub3QgZXhpc3QKKwkJKi8KKwkJZnVuY3Rpb24gZ2V0QnJhbmNoIChwYXRoLCBjcmVhdGUpIHsKKwkJCXZhciBhID0gcGF0aC5zcGxpdCgiLiIpIC8vIHNwbGl0IGtleXMgaW50byBhcnJheQorCQkJLAljID0gYS5sZW5ndGggLSAxCisJCQksCUQgPSB7IGJyYW5jaDogb3B0cywga2V5OiBhW2NdIH0gLy8gaW5pdCBicmFuY2ggYXQgdG9wICYgc2V0IGtleSAobGFzdCBpdGVtKQorCQkJLAlpID0gMCwgaywgdW5kZWY7CisJCQlmb3IgKDsgaTxjOyBpKyspIHsgLy8gc2tpcCB0aGUgbGFzdCBrZXkgKGRhdGEpCisJCQkJayA9IGFbaV07CisJCQkJaWYgKEQuYnJhbmNoWyBrIF0gPT0gdW5kZWZpbmVkKSB7IC8vIGNoaWxkLWtleSBkb2VzIG5vdCBleGlzdAorCQkJCQlpZiAoY3JlYXRlKSB7CisJCQkJCQlELmJyYW5jaCA9IEQuYnJhbmNoWyBrIF0gPSB7fTsgLy8gY3JlYXRlIGNoaWxkLWJyYW5jaAorCQkJCQl9CisJCQkJCWVsc2UgLy8gY2FuJ3QgZ28gYW55IGZhcnRoZXIKKwkJCQkJCUQuYnJhbmNoID0ge307IC8vIGJyYW5jaCBpcyB1bmRlZmluZWQKKwkJCQl9CisJCQkJZWxzZQorCQkJCQlELmJyYW5jaCA9IEQuYnJhbmNoWyBrIF07IC8vIGdldCBjaGlsZC1icmFuY2gKKwkJCX0KKwkJCXJldHVybiBEOworCQl9OworCX0KKworLyoqCisqIEBwYXJhbSB7T2JqZWN0fQlvcHRzCisqLworLAlyZW5hbWVBbGxPcHRpb25zOiBmdW5jdGlvbiAob3B0cykgeworCQl2YXIgcmVuID0gJC5sYXlvdXQuYmFja3dhcmRDb21wYXRpYmlsaXR5LnJlbmFtZU9wdGlvbnM7CisJCS8vIHJlbmFtZSByb290IChsYXlvdXQpIG9wdGlvbnMKKwkJcmVuKCBvcHRzICk7CisJCS8vIHJlbmFtZSAnZGVmYXVsdHMnIHRvICdwYW5lcycKKwkJaWYgKG9wdHMuZGVmYXVsdHMpIHsKKwkJCWlmICh0eXBlb2Ygb3B0cy5wYW5lcyAhPT0gIm9iamVjdCIpCisJCQkJb3B0cy5wYW5lcyA9IHt9OworCQkJJC5leHRlbmQodHJ1ZSwgb3B0cy5wYW5lcywgb3B0cy5kZWZhdWx0cyk7CisJCQlkZWxldGUgb3B0cy5kZWZhdWx0czsKKwkJfQorCQkvLyByZW5hbWUgb3B0aW9ucyBpbiB0aGUgdGhlIG9wdGlvbnMucGFuZXMga2V5CisJCWlmIChvcHRzLnBhbmVzKSByZW4oIG9wdHMucGFuZXMgKTsKKwkJLy8gcmVuYW1lIG9wdGlvbnMgaW5zaWRlICplYWNoIHBhbmUga2V5KiwgZWc6IG9wdGlvbnMud2VzdAorCQkkLmVhY2goJC5sYXlvdXQuY29uZmlnLmFsbFBhbmVzLCBmdW5jdGlvbiAoaSwgcGFuZSkgeworCQkJaWYgKG9wdHNbcGFuZV0pIHJlbiggb3B0c1twYW5lXSApOworCQl9KTsJCisJCXJldHVybiBvcHRzOworCX0KK307CisKKworCisKKy8qCT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoJQkVHSU4gV0lER0VUOiAkKCBzZWxlY3RvciApLmxheW91dCgge29wdGlvbnN9ICk7CisgKgk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworJC5mbi5sYXlvdXQgPSBmdW5jdGlvbiAob3B0cykgeworCXZhcgorCisJLy8gbG9jYWwgYWxpYXNlcyB0byBnbG9iYWwgZGF0YQorCWJyb3dzZXIJPSAkLmxheW91dC5icm93c2VyCissCV9jCQk9ICQubGF5b3V0LmNvbmZpZworCisJLy8gbG9jYWwgYWxpYXNlcyB0byB1dGxpdHkgbWV0aG9kcworLAljc3NXCT0gJC5sYXlvdXQuY3NzV2lkdGgKKywJY3NzSAk9ICQubGF5b3V0LmNzc0hlaWdodAorLAllbERpbXMJPSAkLmxheW91dC5nZXRFbGVtZW50RGltZW5zaW9ucworLAllbENTUwk9ICQubGF5b3V0LmdldEVsZW1lbnRDU1MKKywJZXZ0T2JqCT0gJC5sYXlvdXQuZ2V0RXZlbnRPYmplY3QKKywJZXZ0UGFuZQk9ICQubGF5b3V0LnBhcnNlUGFuZU5hbWUKKworLyoqCisgKiBvcHRpb25zIC0gcG9wdWxhdGVkIGJ5IGluaXRPcHRpb25zKCkKKyAqLworLAlvcHRpb25zID0gJC5leHRlbmQodHJ1ZSwge30sICQubGF5b3V0LmRlZmF1bHRzKQorLAllZmZlY3RzCT0gb3B0aW9ucy5lZmZlY3RzID0gJC5leHRlbmQodHJ1ZSwge30sICQubGF5b3V0LmVmZmVjdHMpCisKKy8qKgorICogbGF5b3V0LXN0YXRlIG9iamVjdAorICovCissCXN0YXRlID0geworCQkvLyBnZW5lcmF0ZSB1bmlxdWUgSUQgdG8gdXNlIGZvciBldmVudC5uYW1lc3BhY2Ugc28gY2FuIHVuYmluZCBvbmx5IGV2ZW50cyBhZGRlZCBieSAndGhpcyBsYXlvdXQnCisJCWlkOgkJCSJsYXlvdXQiKyAkLm5vdygpCS8vIGNvZGUgdXNlcyBhbGlhczogc0lECisJLAlpbml0aWFsaXplZDogZmFsc2UKKwksCWNvbnRhaW5lcjoJe30gLy8gaW5pdCBhbGwga2V5cworCSwJbm9ydGg6CQl7fQorCSwJc291dGg6CQl7fQorCSwJZWFzdDoJCXt9CisJLAl3ZXN0OgkJe30KKwksCWNlbnRlcjoJCXt9CisJfQorCisvKioKKyAqIHBhcmVudC9jaGlsZC1sYXlvdXQgcG9pbnRlcnMKKyAqLworLy8sCWhhc1BhcmVudExheW91dAk9IGZhbHNlCS0gZXhpc3RzIE9OTFkgaW5zaWRlIEluc3RhbmNlIHNvIGNhbiBiZSBzZXQgZXh0ZXJuYWxseQorLAljaGlsZHJlbiA9IHsKKwkJbm9ydGg6CQludWxsCisJLAlzb3V0aDoJCW51bGwKKwksCWVhc3Q6CQludWxsCisJLAl3ZXN0OgkJbnVsbAorCSwJY2VudGVyOgkJbnVsbAorCX0KKworLyoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICogIElOVEVSTkFMIEhFTFBFUiBGVU5DVElPTlMKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICovCisKKwkvKioKKwkqIE1hbmFnZXMgYWxsIGludGVybmFsIHRpbWVycworCSovCissCXRpbWVyID0geworCQlkYXRhOgl7fQorCSwJc2V0OglmdW5jdGlvbiAocywgZm4sIG1zKSB7IHRpbWVyLmNsZWFyKHMpOyB0aW1lci5kYXRhW3NdID0gc2V0VGltZW91dChmbiwgbXMpOyB9CisJLAljbGVhcjoJZnVuY3Rpb24gKHMpIHsgdmFyIHQ9dGltZXIuZGF0YTsgaWYgKHRbc10pIHtjbGVhclRpbWVvdXQodFtzXSk7IGRlbGV0ZSB0W3NdO30gfQorCX0KKworCS8qKgorCSogQWxlcnQgb3IgY29uc29sZS5sb2cgYSBtZXNzYWdlIC0gSUYgb3B0aW9uIGlzIGVuYWJsZWQuCisJKgorCSogQHBhcmFtIHsoc3RyaW5nfCFPYmplY3QpfQltc2cJCU1lc3NhZ2UgKG9yIGRlYnVnLWRhdGEpIHRvIGRpc3BsYXkKKwkqIEBwYXJhbSB7P2Jvb2xlYW59CQkJcG9wdXAJVHJ1ZSBieSBkZWZhdWx0LCBtZWFucyAnYWxlcnQnLCBmYWxzZSBtZWFucyB1c2UgY29uc29sZS5sb2cKKwkqIEBwYXJhbSB7P2Jvb2xlYW59CQkJZGVidWcJVHJ1ZSBtZWFucyBpcyBhIHdpZGdldCBkZWJ1Z2dpbmcgbWVzc2FnZQorCSovCissCV9sb2cgPSBmdW5jdGlvbiAobXNnLCBwb3B1cCwgZGVidWcpIHsKKwkJdmFyIG8gPSBvcHRpb25zOworCQlpZiAoKG8uc2hvd0Vycm9yTWVzc2FnZXMgJiYgIWRlYnVnKSB8fCAoZGVidWcgJiYgby5zaG93RGVidWdNZXNzYWdlcykpCisJCQkkLmxheW91dC5tc2coIG8ubmFtZSArJyAvICcrIG1zZywgKHBvcHVwICE9PSBmYWxzZSkgKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qKgorCSogRXhlY3V0ZXMgYSBDYWxsYmFjayBmdW5jdGlvbiBhZnRlciBhIHRyaWdnZXIgZXZlbnQsIGxpa2UgcmVzaXplLCBvcGVuIG9yIGNsb3NlCisJKgorCSogQHBhcmFtIHtzdHJpbmd9CQkJZXZ0TmFtZQkJCU5hbWUgb2YgdGhlIGxheW91dCBjYWxsYmFjaywgZWcgIm9ucmVzaXplX3N0YXJ0IgorCSogQHBhcmFtIHs/c3RyaW5nfQkJCXBhbmUJCQlUaGlzIGlzIHBhc3NlZCBvbmx5IHNvIHdlIGNhbiBwYXNzIHRoZSAncGFuZSBvYmplY3QnIHRvIHRoZSBjYWxsYmFjaworCSogQHBhcmFtIHs/c3RyaW5nfD9ib29sZWFufQlza2lwQm91bmRFdmVudHMJVHJ1ZSA9IGRvIG5vdCBydW4gZXZlbnRzIGJvdW5kIHRvIHRoZSBlbGVtZW50cyAtIG9ubHkgdGhlIGNhbGxiYWNrcyBzZXQgaW4gb3B0aW9ucworCSovCissCV9ydW5DYWxsYmFja3MgPSBmdW5jdGlvbiAoZXZ0TmFtZSwgcGFuZSwgc2tpcEJvdW5kRXZlbnRzKSB7CisJCXZhcglwYW5lQ0IJPSBwYW5lICYmIGlzU3RyKHBhbmUpCisJCSwJcwkJPSBwYW5lQ0IgPyBzdGF0ZVtwYW5lXSA6IHN0YXRlCisJCSwJbwkJPSBwYW5lQ0IgPyBvcHRpb25zW3BhbmVdIDogb3B0aW9ucworCQksCWxOYW1lCT0gb3B0aW9ucy5uYW1lCisJCQkvLyBuYW1lcyBsaWtlIG9ub3BlbiBhbmQgb25vcGVuX2VuZCBzZXBhcmF0ZSBhcmUgaW50ZXJjaGFuZ2VhYmxlIGluIG9wdGlvbnMuLi4KKwkJLAlsbmcJCT0gZXZ0TmFtZSArIChldnROYW1lLm1hdGNoKC9fLykgPyAiIiA6ICJfZW5kIikKKwkJLAlzaHJ0CT0gbG5nLm1hdGNoKC9fZW5kJC8pID8gbG5nLnN1YnN0cigwLCBsbmcubGVuZ3RoIC0gNCkgOiAiIgorCQksCWZuCQk9IG9bbG5nXSB8fCBvW3NocnRdCisJCSwJcmV0VmFsCT0gIk5DIiAvLyBOQyA9IE5vIENhbGxiYWNrCisJCSwJYXJncwk9IFtdCisJCSwJJFAKKwkJOworCQlpZiAoICFwYW5lQ0IgJiYgJC50eXBlKHNraXBCb3VuZEV2ZW50cykgIT09ICdib29sZWFuJyApCisJCQlza2lwQm91bmRFdmVudHMgPSBwYW5lOyAvLyBhbGxvdyBwYW5lIHBhcmFtIHRvIGJlIHNraXBwZWQgZm9yIExheW91dCBjYWxsYmFjaworCisJCS8vIGZpcnN0IHRyaWdnZXIgdGhlIGNhbGxiYWNrIHNldCBpbiB0aGUgb3B0aW9ucworCQlpZiAoZm4pIHsKKwkJCXRyeSB7CisJCQkJLy8gY29udmVydCBmdW5jdGlvbiBuYW1lIChzdHJpbmcpIHRvIGZ1bmN0aW9uIG9iamVjdAorCQkJCWlmIChpc1N0ciggZm4gKSkgeworCQkJCQlpZiAoZm4ubWF0Y2goLywvKSkgeworCQkJCQkJLy8gZnVuY3Rpb24gbmFtZSBjYW5ub3QgY29udGFpbiBhIGNvbW1hLCAKKwkJCQkJCS8vIHNvIG11c3QgYmUgYSBmdW5jdGlvbiBuYW1lIEFORCBhIHBhcmFtZXRlciB0byBwYXNzCisJCQkJCQlhcmdzID0gZm4uc3BsaXQoIiwiKQorCQkJCQkJLAlmbiA9IGV2YWwoYXJnc1swXSk7CisJCQkJCX0KKwkJCQkJZWxzZSAvLyBqdXN0IHRoZSBuYW1lIG9mIGFuIGV4dGVybmFsIGZ1bmN0aW9uPworCQkJCQkJZm4gPSBldmFsKGZuKTsKKwkJCQl9CisJCQkJLy8gZXhlY3V0ZSB0aGUgY2FsbGJhY2ssIGlmIGV4aXN0cworCQkJCWlmICgkLmlzRnVuY3Rpb24oIGZuICkpIHsKKwkJCQkJaWYgKGFyZ3MubGVuZ3RoKQorCQkJCQkJcmV0VmFsID0gZm4oYXJnc1sxXSk7IC8vIHBhc3MgdGhlIGFyZ3VtZW50IHBhcnNlZCBmcm9tICdsaXN0JworCQkJCQllbHNlIGlmICggcGFuZUNCICkKKwkJCQkJCS8vIHBhc3MgZGF0YTogcGFuZS1uYW1lLCBwYW5lLWVsZW1lbnQsIHBhbmUtc3RhdGUsIHBhbmUtb3B0aW9ucywgYW5kIGxheW91dC1uYW1lCisJCQkJCQlyZXRWYWwgPSBmbiggcGFuZSwgJFBzW3BhbmVdLCBzLCBvLCBsTmFtZSApOworCQkJCQllbHNlIC8vIG11c3QgYmUgYSBsYXlvdXQvY29udGFpbmVyIGNhbGxiYWNrIC0gcGFzcyBzdWl0YWJsZSBpbmZvCisJCQkJCQlyZXRWYWwgPSBmbiggSW5zdGFuY2UsIHMsIG8sIGxOYW1lICk7CisJCQkJfQorCQkJfQorCQkJY2F0Y2ggKGV4KSB7CisJCQkJX2xvZyggb3B0aW9ucy5lcnJvcnMuY2FsbGJhY2tFcnJvci5yZXBsYWNlKC9FVkVOVC8sICQudHJpbShwYW5lICsiICIrIGxuZykpLCBmYWxzZSApOworCQkJfQorCQl9CisKKwkJLy8gdHJpZ2dlciBhZGRpdGlvbmFsIGV2ZW50cyBib3VuZCBkaXJlY3RseSB0byB0aGUgcGFuZQorCQlpZiAoIXNraXBCb3VuZEV2ZW50cyAmJiByZXRWYWwgIT09IGZhbHNlKSB7CisJCQlpZiAoIHBhbmVDQiApIHsgLy8gUEFORSBldmVudHMgY2FuIGJlIGJvdW5kIHRvIGVhY2ggcGFuZS1lbGVtZW50cworCQkJCSRQCT0gJFBzW3BhbmVdOworCQkJCW8JPSBvcHRpb25zW3BhbmVdOworCQkJCXMJPSBzdGF0ZVtwYW5lXTsKKwkJCQkkUC50cmlnZ2VySGFuZGxlcignbGF5b3V0cGFuZScrIGxuZywgWyBwYW5lLCAkUCwgcywgbywgbE5hbWUgXSk7CisJCQkJaWYgKHNocnQpCisJCQkJCSRQLnRyaWdnZXJIYW5kbGVyKCdsYXlvdXRwYW5lJysgc2hydCwgWyBwYW5lLCAkUCwgcywgbywgbE5hbWUgXSk7CisJCQl9CisJCQllbHNlIHsgLy8gTEFZT1VUIGV2ZW50cyBjYW4gYmUgYm91bmQgdG8gdGhlIGNvbnRhaW5lci1lbGVtZW50CisJCQkJJE4udHJpZ2dlckhhbmRsZXIoJ2xheW91dCcrIGxuZywgWyBJbnN0YW5jZSwgcywgbywgbE5hbWUgXSk7CisJCQkJaWYgKHNocnQpCisJCQkJCSROLnRyaWdnZXJIYW5kbGVyKCdsYXlvdXQnKyBzaHJ0LCBbIEluc3RhbmNlLCBzLCBvLCBsTmFtZSBdKTsKKwkJCX0KKwkJfQorCisJCS8vIEFMV0FZUyByZXNpemVDaGlsZExheW91dCBhZnRlciBhIHJlc2l6ZSBldmVudCAtIGV2ZW4gZHVyaW5nIGluaXRpYWxpemF0aW9uCisJCWlmIChldnROYW1lID09PSAib25yZXNpemVfZW5kIiB8fCBldnROYW1lID09PSAib25zaXplY29udGVudF9lbmQiKQorCQkJcmVzaXplQ2hpbGRMYXlvdXQocGFuZSk7IAorCisJCXJldHVybiByZXRWYWw7CisJfQorCisKKwkvKioKKwkqIGN1cmUgaWZyYW1lIGRpc3BsYXkgaXNzdWVzIGluIElFICYgb3RoZXIgYnJvd3NlcnMKKwkqLworLAlfZml4SWZyYW1lID0gZnVuY3Rpb24gKHBhbmUpIHsKKwkJaWYgKGJyb3dzZXIubW96aWxsYSkgcmV0dXJuOyAvLyBza2lwIEZpcmVGb3ggLSBpdCBhdXRvLXJlZnJlc2hlcyBpZnJhbWVzIG9uU2hvdworCQl2YXIgJFAgPSAkUHNbcGFuZV07CisJCS8vIGlmIHRoZSAncGFuZScgaXMgYW4gaWZyYW1lLCBkbyBpdAorCQlpZiAoc3RhdGVbcGFuZV0udGFnTmFtZSA9PT0gIklGUkFNRSIpCisJCQkkUC5jc3MoX2MuaGlkZGVuKS5jc3MoX2MudmlzaWJsZSk7IAorCQllbHNlIC8vIGRpdHRvIGZvciBhbnkgaWZyYW1lcyBJTlNJREUgdGhlIHBhbmUKKwkJCSRQLmZpbmQoJ0lGUkFNRScpLmNzcyhfYy5oaWRkZW4pLmNzcyhfYy52aXNpYmxlKTsKKwl9CisKKwkvKioKKwkqIEBwYXJhbSAge3N0cmluZ30JCXBhbmUJCUNhbiBhY2NlcHQgT05MWSBhICdwYW5lJyAoZWFzdCwgd2VzdCwgZXRjKQorCSogQHBhcmFtICB7bnVtYmVyPX0JCW91dGVyU2l6ZQkob3B0aW9uYWwpIENhbiBwYXNzIGEgd2lkdGgsIGFsbG93aW5nIGNhbGN1bGF0aW9ucyBCRUZPUkUgZWxlbWVudCBpcyByZXNpemVkCisJKiBAcmV0dXJuIHtudW1iZXJ9CQlSZXR1cm5zIHRoZSBpbm5lckhlaWdodC9XaWR0aCBvZiBlbCBieSBzdWJ0cmFjdGluZyBwYWRkaW5nIGFuZCBib3JkZXJzCisJKi8KKywJY3NzU2l6ZSA9IGZ1bmN0aW9uIChwYW5lLCBvdXRlclNpemUpIHsKKwkJdmFyIGZuID0gX2NbcGFuZV0uZGlyPT0iaG9yeiIgPyBjc3NIIDogY3NzVzsKKwkJcmV0dXJuIGZuKCRQc1twYW5lXSwgb3V0ZXJTaXplKTsKKwl9CisKKwkvKioKKwkqIEBwYXJhbSAge3N0cmluZ30JCXBhbmUJCUNhbiBhY2NlcHQgT05MWSBhICdwYW5lJyAoZWFzdCwgd2VzdCwgZXRjKQorCSogQHJldHVybiB7T2JqZWN0fQkJUmV0dXJucyBoYXNoIG9mIG1pbldpZHRoICYgbWluSGVpZ2h0CisJKi8KKywJY3NzTWluRGltcyA9IGZ1bmN0aW9uIChwYW5lKSB7CisJCS8vIG1pbldpZHRoL0hlaWdodCBtZWFucyBDU1Mgd2lkdGgvaGVpZ2h0ID0gMXB4CisJCXZhcgkkUAk9ICRQc1twYW5lXQorCQksCWRpcgk9IF9jW3BhbmVdLmRpcgorCQksCWQJPSB7CisJCQkJbWluV2lkdGg6CTEwMDEgLSBjc3NXKCRQLCAxMDAwKQorCQkJLAltaW5IZWlnaHQ6CTEwMDEgLSBjc3NIKCRQLCAxMDAwKQorCQkJfQorCQk7CisJCWlmIChkaXIgPT09ICJob3J6IikgZC5taW5TaXplID0gZC5taW5IZWlnaHQ7CisJCWlmIChkaXIgPT09ICJ2ZXJ0IikgZC5taW5TaXplID0gZC5taW5XaWR0aDsKKwkJcmV0dXJuIGQ7CisJfQorCisJLy8gVE9ETzogc2VlIGlmIHRoZXNlIG1ldGhvZHMgY2FuIGJlIG1hZGUgbW9yZSB1c2VmdWwuLi4KKwkvLyBUT0RPOiAqbWF5YmUqIHJldHVybiBjc3NXL0ggZnJvbSB0aGVzZSBzbyBjYWxsZXIgY2FuIHVzZSB0aGlzIGluZm8KKworCS8qKgorCSogQHBhcmFtIHsoc3RyaW5nfCFPYmplY3QpfQkJZWwKKwkqIEBwYXJhbSB7bnVtYmVyPX0JCQkJb3V0ZXJXaWR0aAorCSogQHBhcmFtIHtib29sZWFuPX0JCQkJW2F1dG9IaWRlPWZhbHNlXQorCSovCissCXNldE91dGVyV2lkdGggPSBmdW5jdGlvbiAoZWwsIG91dGVyV2lkdGgsIGF1dG9IaWRlKSB7CisJCXZhciAkRSA9IGVsLCB3OworCQlpZiAoaXNTdHIoZWwpKSAkRSA9ICRQc1tlbF07IC8vIHdlc3QKKwkJZWxzZSBpZiAoIWVsLmpxdWVyeSkgJEUgPSAkKGVsKTsKKwkJdyA9IGNzc1coJEUsIG91dGVyV2lkdGgpOworCQkkRS5jc3MoeyB3aWR0aDogdyB9KTsKKwkJaWYgKHcgPiAwKSB7CisJCQlpZiAoYXV0b0hpZGUgJiYgJEUuZGF0YSgnYXV0b0hpZGRlbicpICYmICRFLmlubmVySGVpZ2h0KCkgPiAwKSB7CisJCQkJJEUuc2hvdygpLmRhdGEoJ2F1dG9IaWRkZW4nLCBmYWxzZSk7CisJCQkJaWYgKCFicm93c2VyLm1vemlsbGEpIC8vIEZpcmVGb3ggcmVmcmVzaGVzIGlmcmFtZXMgLSBJRSBkb2VzIG5vdAorCQkJCQkvLyBtYWtlIGhpZGRlbiwgdGhlbiB2aXNpYmxlIHRvICdyZWZyZXNoJyBkaXNwbGF5IGFmdGVyIGFuaW1hdGlvbgorCQkJCQkkRS5jc3MoX2MuaGlkZGVuKS5jc3MoX2MudmlzaWJsZSk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoYXV0b0hpZGUgJiYgISRFLmRhdGEoJ2F1dG9IaWRkZW4nKSkKKwkJCSRFLmhpZGUoKS5kYXRhKCdhdXRvSGlkZGVuJywgdHJ1ZSk7CisJfQorCisJLyoqCisJKiBAcGFyYW0geyhzdHJpbmd8IU9iamVjdCl9CQllbAorCSogQHBhcmFtIHtudW1iZXI9fQkJCQlvdXRlckhlaWdodAorCSogQHBhcmFtIHtib29sZWFuPX0JCQkJW2F1dG9IaWRlPWZhbHNlXQorCSovCissCXNldE91dGVySGVpZ2h0ID0gZnVuY3Rpb24gKGVsLCBvdXRlckhlaWdodCwgYXV0b0hpZGUpIHsKKwkJdmFyICRFID0gZWwsIGg7CisJCWlmIChpc1N0cihlbCkpICRFID0gJFBzW2VsXTsgLy8gd2VzdAorCQllbHNlIGlmICghZWwuanF1ZXJ5KSAkRSA9ICQoZWwpOworCQloID0gY3NzSCgkRSwgb3V0ZXJIZWlnaHQpOworCQkkRS5jc3MoeyBoZWlnaHQ6IGgsIHZpc2liaWxpdHk6ICJ2aXNpYmxlIiB9KTsgLy8gbWF5IGhhdmUgYmVlbiAnaGlkZGVuJyBieSBzaXplQ29udGVudAorCQlpZiAoaCA+IDAgJiYgJEUuaW5uZXJXaWR0aCgpID4gMCkgeworCQkJaWYgKGF1dG9IaWRlICYmICRFLmRhdGEoJ2F1dG9IaWRkZW4nKSkgeworCQkJCSRFLnNob3coKS5kYXRhKCdhdXRvSGlkZGVuJywgZmFsc2UpOworCQkJCWlmICghYnJvd3Nlci5tb3ppbGxhKSAvLyBGaXJlRm94IHJlZnJlc2hlcyBpZnJhbWVzIC0gSUUgZG9lcyBub3QKKwkJCQkJJEUuY3NzKF9jLmhpZGRlbikuY3NzKF9jLnZpc2libGUpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKGF1dG9IaWRlICYmICEkRS5kYXRhKCdhdXRvSGlkZGVuJykpCisJCQkkRS5oaWRlKCkuZGF0YSgnYXV0b0hpZGRlbicsIHRydWUpOworCX0KKworCS8qKgorCSogQHBhcmFtIHsoc3RyaW5nfCFPYmplY3QpfQkJZWwKKwkqIEBwYXJhbSB7bnVtYmVyPX0JCQkJb3V0ZXJTaXplCisJKiBAcGFyYW0ge2Jvb2xlYW49fQkJCQlbYXV0b0hpZGU9ZmFsc2VdCisJKi8KKywJc2V0T3V0ZXJTaXplID0gZnVuY3Rpb24gKGVsLCBvdXRlclNpemUsIGF1dG9IaWRlKSB7CisJCWlmIChfY1twYW5lXS5kaXI9PSJob3J6IikgLy8gcGFuZSA9IG5vcnRoIG9yIHNvdXRoCisJCQlzZXRPdXRlckhlaWdodChlbCwgb3V0ZXJTaXplLCBhdXRvSGlkZSk7CisJCWVsc2UgLy8gcGFuZSA9IGVhc3Qgb3Igd2VzdAorCQkJc2V0T3V0ZXJXaWR0aChlbCwgb3V0ZXJTaXplLCBhdXRvSGlkZSk7CisJfQorCisKKwkvKioKKwkqIENvbnZlcnRzIGFueSAnc2l6ZScgcGFyYW1zIHRvIGEgcGl4ZWwvaW50ZWdlciBzaXplLCBpZiBub3QgYWxyZWFkeQorCSogSWYgJ2F1dG8nIG9yIGEgZGVjaW1hbC9wZXJjZW50YWdlIGlzIHBhc3NlZCBhcyAnc2l6ZScsIGEgcGl4ZWwtc2l6ZSBpcyBjYWxjdWxhdGVkCisJKgorCS8qKgorCSogQHBhcmFtICB7c3RyaW5nfQkJCQlwYW5lCisJKiBAcGFyYW0gIHsoc3RyaW5nfG51bWJlcik9fQlzaXplCisJKiBAcGFyYW0gIHtzdHJpbmc9fQkJCQlbZGlyXQorCSogQHJldHVybiB7bnVtYmVyfQorCSovCissCV9wYXJzZVNpemUgPSBmdW5jdGlvbiAocGFuZSwgc2l6ZSwgZGlyKSB7CisJCWlmICghZGlyKSBkaXIgPSBfY1twYW5lXS5kaXI7CisKKwkJaWYgKGlzU3RyKHNpemUpICYmIHNpemUubWF0Y2goLyUvKSkKKwkJCXNpemUgPSAoc2l6ZSA9PT0gJzEwMCUnKSA/IC0xIDogcGFyc2VJbnQoc2l6ZSwgMTApIC8gMTAwOyAvLyBjb252ZXJ0ICUgdG8gZGVjaW1hbAorCisJCWlmIChzaXplID09PSAwKQorCQkJcmV0dXJuIDA7CisJCWVsc2UgaWYgKHNpemUgPj0gMSkKKwkJCXJldHVybiBwYXJzZUludChzaXplLCAxMCk7CisKKwkJdmFyIG8gPSBvcHRpb25zLCBhdmFpbCA9IDA7CisJCWlmIChkaXI9PSJob3J6IikgLy8gbm9ydGggb3Igc291dGggb3IgY2VudGVyLm1pbkhlaWdodAorCQkJYXZhaWwgPSBzQy5pbm5lckhlaWdodCAtICgkUHMubm9ydGggPyBvLm5vcnRoLnNwYWNpbmdfb3BlbiA6IDApIC0gKCRQcy5zb3V0aCA/IG8uc291dGguc3BhY2luZ19vcGVuIDogMCk7CisJCWVsc2UgaWYgKGRpcj09InZlcnQiKSAvLyBlYXN0IG9yIHdlc3Qgb3IgY2VudGVyLm1pbldpZHRoCisJCQlhdmFpbCA9IHNDLmlubmVyV2lkdGggLSAoJFBzLndlc3QgPyBvLndlc3Quc3BhY2luZ19vcGVuIDogMCkgLSAoJFBzLmVhc3QgPyBvLmVhc3Quc3BhY2luZ19vcGVuIDogMCk7CisKKwkJaWYgKHNpemUgPT09IC0xKSAvLyAtMSA9PSAxMDAlCisJCQlyZXR1cm4gYXZhaWw7CisJCWVsc2UgaWYgKHNpemUgPiAwKSAvLyBwZXJjZW50YWdlLCBlZzogLjI1CisJCQlyZXR1cm4gcm91bmQoYXZhaWwgKiBzaXplKTsKKwkJZWxzZSBpZiAocGFuZT09ImNlbnRlciIpCisJCQlyZXR1cm4gMDsKKwkJZWxzZSB7IC8vIHNpemUgPCAwIHx8IHNpemU9PSdhdXRvJyB8fCBzaXplPT1NaXNzaW5nIHx8IHNpemU9PUludmFsaWQKKwkJCS8vIGF1dG8tc2l6ZSB0aGUgcGFuZQorCQkJdmFyCWRpbQk9IChkaXIgPT09ICJob3J6IiA/ICJoZWlnaHQiIDogIndpZHRoIikKKwkJCSwJJFAJPSAkUHNbcGFuZV0KKwkJCSwJJEMJPSBkaW0gPT09ICdoZWlnaHQnID8gJENzW3BhbmVdIDogZmFsc2UKKwkJCSwJdmlzCT0gJC5sYXlvdXQuc2hvd0ludmlzaWJseSgkUCkgLy8gc2hvdyBwYW5lIGludmlzaWJseSBpZiBoaWRkZW4KKwkJCSwJc3pQCT0gJFAuY3NzKGRpbSkgLy8gU0FWRSBjdXJyZW50IHBhbmUgc2l6ZQorCQkJLAlzekMJPSAkQyA/ICRDLmNzcyhkaW0pIDogMCAvLyBTQVZFIGN1cnJlbnQgY29udGVudCBzaXplCisJCQk7CisJCQkkUC5jc3MoZGltLCAiYXV0byIpOworCQkJaWYgKCRDKSAkQy5jc3MoZGltLCAiYXV0byIpOworCQkJc2l6ZSA9IChkaW0gPT09ICJoZWlnaHQiKSA/ICRQLm91dGVySGVpZ2h0KCkgOiAkUC5vdXRlcldpZHRoKCk7IC8vIE1FQVNVUkUKKwkJCSRQLmNzcyhkaW0sIHN6UCkuY3NzKHZpcyk7IC8vIFJFU0VUIHNpemUgJiB2aXNpYmlsaXR5CisJCQlpZiAoJEMpICRDLmNzcyhkaW0sIHN6Qyk7CisJCQlyZXR1cm4gc2l6ZTsKKwkJfQorCX0KKworCS8qKgorCSogQ2FsY3VsYXRlcyBjdXJyZW50ICdzaXplJyAob3V0ZXItd2lkdGggb3Igb3V0ZXItaGVpZ2h0KSBvZiBhIGJvcmRlci1wYW5lIC0gb3B0aW9uYWxseSB3aXRoICdwYW5lLXNwYWNpbmcnIGFkZGVkCisJKgorCSogQHBhcmFtICB7KHN0cmluZ3whT2JqZWN0KX0JcGFuZQorCSogQHBhcmFtICB7Ym9vbGVhbj19CQkJW2luY2xTcGFjZT1mYWxzZV0KKwkqIEByZXR1cm4ge251bWJlcn0JCQkJUmV0dXJucyBFSVRIRVIgV2lkdGggZm9yIGVhc3Qvd2VzdCBwYW5lcyBPUiBIZWlnaHQgZm9yIG5vcnRoL3NvdXRoIHBhbmVzCisJKi8KKywJZ2V0UGFuZVNpemUgPSBmdW5jdGlvbiAocGFuZSwgaW5jbFNwYWNlKSB7CisJCXZhciAKKwkJCSRQCT0gJFBzW3BhbmVdCisJCSwJbwk9IG9wdGlvbnNbcGFuZV0KKwkJLAlzCT0gc3RhdGVbcGFuZV0KKwkJLAlvU3AJPSAoaW5jbFNwYWNlID8gby5zcGFjaW5nX29wZW4gOiAwKQorCQksCWNTcAk9IChpbmNsU3BhY2UgPyBvLnNwYWNpbmdfY2xvc2VkIDogMCkKKwkJOworCQlpZiAoISRQIHx8IHMuaXNIaWRkZW4pCisJCQlyZXR1cm4gMDsKKwkJZWxzZSBpZiAocy5pc0Nsb3NlZCB8fCAocy5pc1NsaWRpbmcgJiYgaW5jbFNwYWNlKSkKKwkJCXJldHVybiBjU3A7CisJCWVsc2UgaWYgKF9jW3BhbmVdLmRpciA9PT0gImhvcnoiKQorCQkJcmV0dXJuICRQLm91dGVySGVpZ2h0KCkgKyBvU3A7CisJCWVsc2UgLy8gZGlyID09PSAidmVydCIKKwkJCXJldHVybiAkUC5vdXRlcldpZHRoKCkgKyBvU3A7CisJfQorCisJLyoqCisJKiBDYWxjdWxhdGUgbWluL21heCBwYW5lIGRpbWVuc2lvbnMgYW5kIGxpbWl0cyBmb3IgcmVzaXppbmcKKwkqCisJKiBAcGFyYW0gIHtzdHJpbmd9CQlwYW5lCisJKiBAcGFyYW0gIHtib29sZWFuPX0JW3NsaWRlPWZhbHNlXQorCSovCissCXNldFNpemVMaW1pdHMgPSBmdW5jdGlvbiAocGFuZSwgc2xpZGUpIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJdmFyIAorCQkJbwkJCQk9IG9wdGlvbnNbcGFuZV0KKwkJLAlzCQkJCT0gc3RhdGVbcGFuZV0KKwkJLAljCQkJCT0gX2NbcGFuZV0KKwkJLAlkaXIJCQkJPSBjLmRpcgorCQksCXNpZGUJCQk9IGMuc2lkZS50b0xvd2VyQ2FzZSgpCisJCSwJdHlwZQkJCT0gYy5zaXplVHlwZS50b0xvd2VyQ2FzZSgpCisJCSwJaXNTbGlkaW5nCQk9IChzbGlkZSAhPSB1bmRlZmluZWQgPyBzbGlkZSA6IHMuaXNTbGlkaW5nKSAvLyBvbmx5IG9wZW4oKSBwYXNzZXMgJ3NsaWRlJyBwYXJhbQorCQksCSRQCQkJCT0gJFBzW3BhbmVdCisJCSwJcGFuZVNwYWNpbmcJCT0gby5zcGFjaW5nX29wZW4KKwkJLy8JbWVhc3VyZSB0aGUgcGFuZSBvbiB0aGUgKm9wcG9zaXRlIHNpZGUqIGZyb20gdGhpcyBwYW5lCisJCSwJYWx0UGFuZQkJCT0gX2Mub3Bwb3NpdGVFZGdlW3BhbmVdCisJCSwJYWx0UwkJCT0gc3RhdGVbYWx0UGFuZV0KKwkJLAkkYWx0UAkJCT0gJFBzW2FsdFBhbmVdCisJCSwJYWx0UGFuZVNpemUJCT0gKCEkYWx0UCB8fCBhbHRTLmlzVmlzaWJsZT09PWZhbHNlIHx8IGFsdFMuaXNTbGlkaW5nID8gMCA6IChkaXI9PSJob3J6IiA/ICRhbHRQLm91dGVySGVpZ2h0KCkgOiAkYWx0UC5vdXRlcldpZHRoKCkpKQorCQksCWFsdFBhbmVTcGFjaW5nCT0gKCghJGFsdFAgfHwgYWx0Uy5pc0hpZGRlbiA/IDAgOiBvcHRpb25zW2FsdFBhbmVdWyBhbHRTLmlzQ2xvc2VkICE9PSBmYWxzZSA/ICJzcGFjaW5nX2Nsb3NlZCIgOiAic3BhY2luZ19vcGVuIiBdKSB8fCAwKQorCQkvLwlsaW1pdFNpemUgcHJldmVudHMgdGhpcyBwYW5lIGZyb20gJ292ZXJsYXBwaW5nJyBvcHBvc2l0ZSBwYW5lCisJCSwJY29udGFpbmVyU2l6ZQk9IChkaXI9PSJob3J6IiA/IHNDLmlubmVySGVpZ2h0IDogc0MuaW5uZXJXaWR0aCkKKwkJLAltaW5DZW50ZXJEaW1zCT0gY3NzTWluRGltcygiY2VudGVyIikKKwkJLAltaW5DZW50ZXJTaXplCT0gZGlyPT0iaG9yeiIgPyBtYXgob3B0aW9ucy5jZW50ZXIubWluSGVpZ2h0LCBtaW5DZW50ZXJEaW1zLm1pbkhlaWdodCkgOiBtYXgob3B0aW9ucy5jZW50ZXIubWluV2lkdGgsIG1pbkNlbnRlckRpbXMubWluV2lkdGgpCisJCS8vCWlmIHBhbmUgaXMgJ3NsaWRpbmcnLCB0aGVuIGlnbm9yZSBjZW50ZXIgYW5kIGFsdC1wYW5lIHNpemVzIC0gYmVjYXVzZSAnb3ZlcmxheXMnIHRoZW0KKwkJLAlsaW1pdFNpemUJCT0gKGNvbnRhaW5lclNpemUgLSBwYW5lU3BhY2luZyAtIChpc1NsaWRpbmcgPyAwIDogKF9wYXJzZVNpemUoImNlbnRlciIsIG1pbkNlbnRlclNpemUsIGRpcikgKyBhbHRQYW5lU2l6ZSArIGFsdFBhbmVTcGFjaW5nKSkpCisJCSwJbWluU2l6ZQkJCT0gcy5taW5TaXplID0gbWF4KCBfcGFyc2VTaXplKHBhbmUsIG8ubWluU2l6ZSksIGNzc01pbkRpbXMocGFuZSkubWluU2l6ZSApCisJCSwJbWF4U2l6ZQkJCT0gcy5tYXhTaXplID0gbWluKCAoby5tYXhTaXplID8gX3BhcnNlU2l6ZShwYW5lLCBvLm1heFNpemUpIDogMTAwMDAwKSwgbGltaXRTaXplICkKKwkJLAlyCQkJCT0gcy5yZXNpemVyUG9zaXRpb24gPSB7fSAvLyB1c2VkIHRvIHNldCByZXNpemluZyBsaW1pdHMKKwkJLAl0b3AJCQkJPSBzQy5pbnNldFRvcAorCQksCWxlZnQJCQk9IHNDLmluc2V0TGVmdAorCQksCVcJCQkJPSBzQy5pbm5lcldpZHRoCisJCSwJSAkJCQk9IHNDLmlubmVySGVpZ2h0CisJCSwJclcJCQkJPSBvLnNwYWNpbmdfb3BlbiAvLyBzdWJ0cmFjdCByZXNpemVyLXdpZHRoIHRvIGdldCB0b3AvbGVmdCBwb3NpdGlvbiBmb3Igc291dGgvZWFzdAorCQk7CisJCXN3aXRjaCAocGFuZSkgeworCQkJY2FzZSAibm9ydGgiOglyLm1pbiA9IHRvcCArIG1pblNpemU7CisJCQkJCQkJci5tYXggPSB0b3AgKyBtYXhTaXplOworCQkJCQkJCWJyZWFrOworCQkJY2FzZSAid2VzdCI6CXIubWluID0gbGVmdCArIG1pblNpemU7CisJCQkJCQkJci5tYXggPSBsZWZ0ICsgbWF4U2l6ZTsKKwkJCQkJCQlicmVhazsKKwkJCWNhc2UgInNvdXRoIjoJci5taW4gPSB0b3AgKyBIIC0gbWF4U2l6ZSAtIHJXOworCQkJCQkJCXIubWF4ID0gdG9wICsgSCAtIG1pblNpemUgLSByVzsKKwkJCQkJCQlicmVhazsKKwkJCWNhc2UgImVhc3QiOglyLm1pbiA9IGxlZnQgKyBXIC0gbWF4U2l6ZSAtIHJXOworCQkJCQkJCXIubWF4ID0gbGVmdCArIFcgLSBtaW5TaXplIC0gclc7CisJCQkJCQkJYnJlYWs7CisJCX07CisJfQorCisJLyoqCisJKiBSZXR1cm5zIGRhdGEgZm9yIHNldHRpbmcgdGhlIHNpemUvcG9zaXRpb24gb2YgY2VudGVyIHBhbmUuIEFsc28gdXNlZCB0byBzZXQgSGVpZ2h0IGZvciBlYXN0L3dlc3QgcGFuZXMKKwkqCisJKiBAcmV0dXJuIEpTT04gIFJldHVybnMgYSBoYXNoIG9mIGFsbCBkaW1lbnNpb25zOiB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQsIChvdXRlcikgd2lkdGggYW5kIChvdXRlcikgaGVpZ2h0CisJKi8KKywJY2FsY05ld0NlbnRlclBhbmVEaW1zID0gZnVuY3Rpb24gKCkgeworCQl2YXIgZCA9IHsKKwkJCXRvcDoJZ2V0UGFuZVNpemUoIm5vcnRoIiwgdHJ1ZSkgLy8gdHJ1ZSA9IGluY2x1ZGUgJ3NwYWNpbmcnIHZhbHVlIGZvciBwYW5lCisJCSwJYm90dG9tOglnZXRQYW5lU2l6ZSgic291dGgiLCB0cnVlKQorCQksCWxlZnQ6CWdldFBhbmVTaXplKCJ3ZXN0IiwgdHJ1ZSkKKwkJLAlyaWdodDoJZ2V0UGFuZVNpemUoImVhc3QiLCB0cnVlKQorCQksCXdpZHRoOgkwCisJCSwJaGVpZ2h0OgkwCisJCX07CisKKwkJLy8gTk9URTogc0MgPSBzdGF0ZS5jb250YWluZXIKKwkJLy8gY2FsYyBjZW50ZXItcGFuZSBvdXRlciBkaW1lbnNpb25zCisJCWQud2lkdGgJCT0gc0MuaW5uZXJXaWR0aCAtIGQubGVmdCAtIGQucmlnaHQ7ICAvLyBvdXRlcldpZHRoCisJCWQuaGVpZ2h0CT0gc0MuaW5uZXJIZWlnaHQgLSBkLmJvdHRvbSAtIGQudG9wOyAvLyBvdXRlckhlaWdodAorCQkvLyBhZGQgdGhlICdjb250YWluZXIgYm9yZGVyL3BhZGRpbmcnIHRvIGdldCBmaW5hbCBwb3NpdGlvbnMgcmVsYXRpdmUgdG8gdGhlIGNvbnRhaW5lcgorCQlkLnRvcAkJKz0gc0MuaW5zZXRUb3A7CisJCWQuYm90dG9tCSs9IHNDLmluc2V0Qm90dG9tOworCQlkLmxlZnQJCSs9IHNDLmluc2V0TGVmdDsKKwkJZC5yaWdodAkJKz0gc0MuaW5zZXRSaWdodDsKKworCQlyZXR1cm4gZDsKKwl9CisKKworCS8qKgorCSogQHBhcmFtIHshT2JqZWN0fQkJZWwKKwkqIEBwYXJhbSB7Ym9vbGVhbj19CQlbYWxsU3RhdGVzPWZhbHNlXQorCSovCissCWdldEhvdmVyQ2xhc3NlcyA9IGZ1bmN0aW9uIChlbCwgYWxsU3RhdGVzKSB7CisJCXZhcgorCQkJJEVsCQk9ICQoZWwpCisJCSwJdHlwZQk9ICRFbC5kYXRhKCJsYXlvdXRSb2xlIikKKwkJLAlwYW5lCT0gJEVsLmRhdGEoImxheW91dEVkZ2UiKQorCQksCW8JCT0gb3B0aW9uc1twYW5lXQorCQksCXJvb3QJPSBvW3R5cGUgKyJDbGFzcyJdCisJCSwJX3BhbmUJPSAiLSIrIHBhbmUgLy8gZWc6ICItd2VzdCIKKwkJLAlfb3Blbgk9ICItb3BlbiIKKwkJLAlfY2xvc2VkCT0gIi1jbG9zZWQiCisJCSwJX3NsaWRlCT0gIi1zbGlkaW5nIgorCQksCV9ob3Zlcgk9ICItaG92ZXIgIiAvLyBOT1RFIHRoZSB0cmFpbGluZyBzcGFjZQorCQksCV9zdGF0ZQk9ICRFbC5oYXNDbGFzcyhyb290K19jbG9zZWQpID8gX2Nsb3NlZCA6IF9vcGVuCisJCSwJX2FsdAk9IF9zdGF0ZSA9PT0gX2Nsb3NlZCA/IF9vcGVuIDogX2Nsb3NlZAorCQksCWNsYXNzZXMgPSAocm9vdCtfaG92ZXIpICsgKHJvb3QrX3BhbmUrX2hvdmVyKSArIChyb290K19zdGF0ZStfaG92ZXIpICsgKHJvb3QrX3BhbmUrX3N0YXRlK19ob3ZlcikKKwkJOworCQlpZiAoYWxsU3RhdGVzKSAvLyB3aGVuICdyZW1vdmluZycgY2xhc3NlcywgYWxzbyByZW1vdmUgYWx0ZXJuYXRlLXN0YXRlIGNsYXNzZXMKKwkJCWNsYXNzZXMgKz0gKHJvb3QrX2FsdCtfaG92ZXIpICsgKHJvb3QrX3BhbmUrX2FsdCtfaG92ZXIpOworCisJCWlmICh0eXBlPT0icmVzaXplciIgJiYgJEVsLmhhc0NsYXNzKHJvb3QrX3NsaWRlKSkKKwkJCWNsYXNzZXMgKz0gKHJvb3QrX3NsaWRlK19ob3ZlcikgKyAocm9vdCtfcGFuZStfc2xpZGUrX2hvdmVyKTsKKworCQlyZXR1cm4gJC50cmltKGNsYXNzZXMpOworCX0KKywJYWRkSG92ZXIJPSBmdW5jdGlvbiAoZXZ0LCBlbCkgeworCQl2YXIgJEUgPSAkKGVsIHx8IHRoaXMpOworCQlpZiAoZXZ0ICYmICRFLmRhdGEoImxheW91dFJvbGUiKSA9PT0gInRvZ2dsZXIiKQorCQkJZXZ0LnN0b3BQcm9wYWdhdGlvbigpOyAvLyBwcmV2ZW50IHRyaWdnZXJpbmcgJ3NsaWRlJyBvbiBSZXNpemVyLWJhcgorCQkkRS5hZGRDbGFzcyggZ2V0SG92ZXJDbGFzc2VzKCRFKSApOworCX0KKywJcmVtb3ZlSG92ZXIJPSBmdW5jdGlvbiAoZXZ0LCBlbCkgeworCQl2YXIgJEUgPSAkKGVsIHx8IHRoaXMpOworCQkkRS5yZW1vdmVDbGFzcyggZ2V0SG92ZXJDbGFzc2VzKCRFLCB0cnVlKSApOworCX0KKworLAlvblJlc2l6ZXJFbnRlcgk9IGZ1bmN0aW9uIChldnQpIHsgLy8gQUxTTyBjYWxsZWQgYnkgdG9nZ2xlci5tb3VzZWVudGVyCisJCWlmICgkLmZuLmRpc2FibGVTZWxlY3Rpb24pCisJCQkkKCJib2R5IikuZGlzYWJsZVNlbGVjdGlvbigpOworCX0KKywJb25SZXNpemVyTGVhdmUJPSBmdW5jdGlvbiAoZXZ0LCBlbCkgeworCQl2YXIKKwkJCWUgPSBlbCB8fCB0aGlzIC8vIGVsIGlzIG9ubHkgcGFzc2VkIHdoZW4gY2FsbGVkIGJ5IHRoZSB0aW1lcgorCQksCXBhbmUgPSAkKGUpLmRhdGEoImxheW91dEVkZ2UiKQorCQksCW5hbWUgPSBwYW5lICsiUmVzaXplckxlYXZlIgorCQk7CisJCXRpbWVyLmNsZWFyKHBhbmUrIl9vcGVuU2xpZGVyIik7IC8vIGNhbmNlbCBzbGlkZU9wZW4gdGltZXIsIGlmIHNldAorCQl0aW1lci5jbGVhcihuYW1lKTsgLy8gY2FuY2VsIGVuYWJsZVNlbGVjdGlvbiB0aW1lciAtIG1heSByZS9zZXQgYmVsb3cKKwkJLy8gdGhpcyBtZXRob2QgY2FsbHMgaXRzZWxmIG9uIGEgdGltZXIgYmVjYXVzZSBpdCBuZWVkcyB0byBhbGxvdworCQkvLyBlbm91Z2ggdGltZSBmb3IgZHJhZ2dpbmcgdG8ga2ljay1pbiBhbmQgc2V0IHRoZSBpc1Jlc2l6aW5nIGZsYWcKKwkJLy8gZHJhZ2dpbmcgaGFzIGEgMTAwbXMgZGVsYXkgc2V0LCBzbyB0aGlzIGRlbGF5IG11c3QgYmUgPjEwMAorCQlpZiAoIWVsKSAvLyAxc3QgY2FsbCAtIG1vdXNlbGVhdmUgZXZlbnQKKwkJCXRpbWVyLnNldChuYW1lLCBmdW5jdGlvbigpeyBvblJlc2l6ZXJMZWF2ZShldnQsIGUpOyB9LCAyMDApOworCQkvLyBpZiB1c2VyIGlzIHJlc2l6aW5nLCB0aGVuIGRyYWdTdG9wIHdpbGwgZW5hYmxlU2VsZWN0aW9uKCksIHNvIGNhbiBza2lwIGl0IGhlcmUKKwkJZWxzZSBpZiAoIXN0YXRlW3BhbmVdLmlzUmVzaXppbmcgJiYgJC5mbi5lbmFibGVTZWxlY3Rpb24pIC8vIDJuZCBjYWxsIC0gYnkgdGltZXIKKwkJCSQoImJvZHkiKS5lbmFibGVTZWxlY3Rpb24oKTsKKwl9CisKKy8qCisgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqICAgSU5JVElBTElaQVRJT04gTUVUSE9EUworICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKi8KKworCS8qKgorCSogSW5pdGlhbGl6ZSB0aGUgbGF5b3V0IC0gY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgYW4gaW5zdGFuY2Ugb2YgbGF5b3V0IGlzIGNyZWF0ZWQKKwkqCisJKiBAc2VlICBub25lIC0gdHJpZ2dlcmVkIG9uSW5pdAorCSogQHJldHVybiAgbWl4ZWQJdHJ1ZSA9IGZ1bGx5IGluaXRpYWxpemVkIHwgZmFsc2UgPSBwYW5lcyBub3QgaW5pdGlhbGl6ZWQgKHlldCkgfCAnY2FuY2VsJyA9IGFib3J0CisJKi8KKywJX2NyZWF0ZSA9IGZ1bmN0aW9uICgpIHsKKwkJLy8gaW5pdGlhbGl6ZSBjb25maWcvb3B0aW9ucworCQlpbml0T3B0aW9ucygpOworCQl2YXIgbyA9IG9wdGlvbnM7CisKKwkJLy8gVEVNUCBzdGF0ZSBzbyBpc0luaXRpYWxpemVkIHJldHVybnMgdHJ1ZSBkdXJpbmcgaW5pdCBwcm9jZXNzCisJCXN0YXRlLmNyZWF0aW5nTGF5b3V0ID0gdHJ1ZTsKKworCQkvLyBpbml0IHBsdWdpbnMgZm9yIHRoaXMgbGF5b3V0LCBpZiB0aGVyZSBhcmUgYW55IChlZzogc3RhdGVNYW5hZ2VtZW50KQorCQlydW5QbHVnaW5DYWxsYmFja3MoIEluc3RhbmNlLCAkLmxheW91dC5vbkNyZWF0ZSApOworCisJCS8vIG9wdGlvbnMgJiBzdGF0ZSBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQsIHNvIG5vdyBydW4gYmVmb3JlTG9hZCBjYWxsYmFjaworCQkvLyBvbmxvYWQgd2lsbCBDQU5DRUwgbGF5b3V0IGNyZWF0aW9uIGlmIGl0IHJldHVybnMgZmFsc2UKKwkJaWYgKGZhbHNlID09PSBfcnVuQ2FsbGJhY2tzKCJvbmxvYWRfc3RhcnQiKSkKKwkJCXJldHVybiAnY2FuY2VsJzsKKworCQkvLyBpbml0aWFsaXplIHRoZSBjb250YWluZXIgZWxlbWVudAorCQlfaW5pdENvbnRhaW5lcigpOworCisJCS8vIGJpbmQgaG90a2V5IGZ1bmN0aW9uIC0ga2V5RG93biAtIGlmIHJlcXVpcmVkCisJCWluaXRIb3RrZXlzKCk7CisKKwkJLy8gYmluZCB3aW5kb3cub251bmxvYWQKKwkJJCh3aW5kb3cpLmJpbmQoInVubG9hZC4iKyBzSUQsIHVubG9hZCk7CisKKwkJLy8gaW5pdCBwbHVnaW5zIGZvciB0aGlzIGxheW91dCwgaWYgdGhlcmUgYXJlIGFueSAoZWc6IGN1c3RvbUJ1dHRvbnMpCisJCXJ1blBsdWdpbkNhbGxiYWNrcyggSW5zdGFuY2UsICQubGF5b3V0Lm9uTG9hZCApOworCisJCS8vIGlmIGxheW91dCBlbGVtZW50cyBhcmUgaGlkZGVuLCB0aGVuIGxheW91dCBXSUxMIE5PVCBjb21wbGV0ZSBpbml0aWFsaXphdGlvbiEKKwkJLy8gaW5pdExheW91dEVsZW1lbnRzIHdpbGwgc2V0IGluaXRpYWxpemVkPXRydWUgYW5kIHJ1biB0aGUgb25sb2FkIGNhbGxiYWNrIElGIHN1Y2Nlc3NmdWwKKwkJaWYgKG8uaW5pdFBhbmVzKSBfaW5pdExheW91dEVsZW1lbnRzKCk7CisKKwkJZGVsZXRlIHN0YXRlLmNyZWF0aW5nTGF5b3V0OworCisJCXJldHVybiBzdGF0ZS5pbml0aWFsaXplZDsKKwl9CisKKwkvKioKKwkqIEluaXRpYWxpemUgdGhlIGxheW91dCBJRiBub3QgYWxyZWFkeQorCSoKKwkqIEBzZWUgIEFsbCBtZXRob2RzIGluIEluc3RhbmNlIHJ1biB0aGlzIHRlc3QKKwkqIEByZXR1cm4gIGJvb2xlYW4JdHJ1ZSA9IGxheW91dEVsZW1lbnRzIGhhdmUgYmVlbiBpbml0aWFsaXplZCB8IGZhbHNlID0gcGFuZXMgYXJlIG5vdCBpbml0aWFsaXplZCAoeWV0KQorCSovCissCWlzSW5pdGlhbGl6ZWQgPSBmdW5jdGlvbiAoKSB7CisJCWlmIChzdGF0ZS5pbml0aWFsaXplZCB8fCBzdGF0ZS5jcmVhdGluZ0xheW91dCkgcmV0dXJuIHRydWU7CS8vIGFscmVhZHkgaW5pdGlhbGl6ZWQKKwkJZWxzZSByZXR1cm4gX2luaXRMYXlvdXRFbGVtZW50cygpOwkvLyB0cnkgdG8gaW5pdCBwYW5lcyBOT1cKKwl9CisKKwkvKioKKwkqIEluaXRpYWxpemUgdGhlIGxheW91dCAtIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW5ldmVyIGFuIGluc3RhbmNlIG9mIGxheW91dCBpcyBjcmVhdGVkCisJKgorCSogQHNlZSAgX2NyZWF0ZSgpICYgaXNJbml0aWFsaXplZAorCSogQHJldHVybiAgQW4gb2JqZWN0IHBvaW50ZXIgdG8gdGhlIGluc3RhbmNlIGNyZWF0ZWQKKwkqLworLAlfaW5pdExheW91dEVsZW1lbnRzID0gZnVuY3Rpb24gKHJldHJ5KSB7CisJCS8vIGluaXRpYWxpemUgY29uZmlnL29wdGlvbnMKKwkJdmFyIG8gPSBvcHRpb25zOworCisJCS8vIENBTk5PVCBpbml0IHBhbmVzIGluc2lkZSBhIGhpZGRlbiBjb250YWluZXIhCisJCWlmICghJE4uaXMoIjp2aXNpYmxlIikpIHsKKwkJCS8vIGhhbmRsZSBDaHJvbWUgYnVnIHdoZXJlIHBvcHVwIHdpbmRvdyAnaGFzIG5vIGhlaWdodCcKKwkJCS8vIGlmIGxheW91dCBpcyBCT0RZIGVsZW1lbnQsIHRyeSBhZ2FpbiBpbiA1MG1zCisJCQkvLyBTRUU6IGh0dHA6Ly9sYXlvdXQuanF1ZXJ5LWRldi5uZXQvc2FtcGxlcy90ZXN0X3BvcHVwX3dpbmRvdy5odG1sCisJCQlpZiAoICFyZXRyeSAmJiBicm93c2VyLndlYmtpdCAmJiAkTlswXS50YWdOYW1lID09PSAiQk9EWSIgKQorCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsgX2luaXRMYXlvdXRFbGVtZW50cyh0cnVlKTsgfSwgNTApOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJLy8gYSBjZW50ZXIgcGFuZSBpcyByZXF1aXJlZCwgc28gbWFrZSBzdXJlIGl0IGV4aXN0cworCQlpZiAoIWdldFBhbmUoImNlbnRlciIpLmxlbmd0aCkgeworCQkJcmV0dXJuIF9sb2coIG8uZXJyb3JzLmNlbnRlclBhbmVNaXNzaW5nICk7CisJCX0KKworCQkvLyBURU1QIHN0YXRlIHNvIGlzSW5pdGlhbGl6ZWQgcmV0dXJucyB0cnVlIGR1cmluZyBpbml0IHByb2Nlc3MKKwkJc3RhdGUuY3JlYXRpbmdMYXlvdXQgPSB0cnVlOworCisJCS8vIHVwZGF0ZSBDb250YWluZXIgZGltcworCQkkLmV4dGVuZChzQywgZWxEaW1zKCAkTiApKTsKKworCQkvLyBpbml0aWFsaXplIGFsbCBsYXlvdXQgZWxlbWVudHMKKwkJaW5pdFBhbmVzKCk7CS8vIHNpemUgJiBwb3NpdGlvbiBwYW5lcyAtIGNhbGxzIGluaXRIYW5kbGVzKCkgLSB3aGljaCBjYWxscyBpbml0UmVzaXphYmxlKCkKKworCQlpZiAoby5zY3JvbGxUb0Jvb2ttYXJrT25Mb2FkKSB7CisJCQl2YXIgbCA9IHNlbGYubG9jYXRpb247CisJCQlpZiAobC5oYXNoKSBsLnJlcGxhY2UoIGwuaGFzaCApOyAvLyBzY3JvbGxUbyBCb29rbWFyaworCQl9CisKKwkJLy8gY2hlY2sgdG8gc2VlIGlmIHRoaXMgbGF5b3V0ICduZXN0ZWQnIGluc2lkZSBhIHBhbmUKKwkJaWYgKEluc3RhbmNlLmhhc1BhcmVudExheW91dCkKKwkJCW8ucmVzaXplV2l0aFdpbmRvdyA9IGZhbHNlOworCQkvLyBiaW5kIHJlc2l6ZUFsbCgpIGZvciAndGhpcyBsYXlvdXQgaW5zdGFuY2UnIHRvIHdpbmRvdy5yZXNpemUgZXZlbnQKKwkJZWxzZSBpZiAoby5yZXNpemVXaXRoV2luZG93KQorCQkJJCh3aW5kb3cpLmJpbmQoInJlc2l6ZS4iKyBzSUQsIHdpbmRvd1Jlc2l6ZSk7CisKKwkJZGVsZXRlIHN0YXRlLmNyZWF0aW5nTGF5b3V0OworCQlzdGF0ZS5pbml0aWFsaXplZCA9IHRydWU7CisKKwkJLy8gaW5pdCBwbHVnaW5zIGZvciB0aGlzIGxheW91dCwgaWYgdGhlcmUgYXJlIGFueQorCQlydW5QbHVnaW5DYWxsYmFja3MoIEluc3RhbmNlLCAkLmxheW91dC5vblJlYWR5ICk7CisKKwkJLy8gbm93IHJ1biB0aGUgb25sb2FkIGNhbGxiYWNrLCBpZiBleGlzdHMKKwkJX3J1bkNhbGxiYWNrcygib25sb2FkX2VuZCIpOworCisJCXJldHVybiB0cnVlOyAvLyBlbGVtZW50cyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkKKwl9CisKKwkvKioKKwkqIEluaXRpYWxpemUgbmVzdGVkIGxheW91dHMgLSBjYWxsZWQgd2hlbiBfaW5pdExheW91dEVsZW1lbnRzIGNvbXBsZXRlcworCSoKKwkqIE5PVCBDVVJSRU5UTFkgVVNFRAorCSoKKwkqIEBzZWUgX2luaXRMYXlvdXRFbGVtZW50cworCSogQHJldHVybiAgQW4gb2JqZWN0IHBvaW50ZXIgdG8gdGhlIGluc3RhbmNlIGNyZWF0ZWQKKwkqLworLAlfaW5pdENoaWxkTGF5b3V0cyA9IGZ1bmN0aW9uICgpIHsKKwkJJC5lYWNoKF9jLmFsbFBhbmVzLCBmdW5jdGlvbiAoaWR4LCBwYW5lKSB7CisJCQlpZiAob3B0aW9uc1twYW5lXS5pbml0Q2hpbGRMYXlvdXQpCisJCQkJY3JlYXRlQ2hpbGRMYXlvdXQoIHBhbmUgKTsKKwkJfSk7CisJfQorCisJLyoqCisJKiBJbml0aWFsaXplIG5lc3RlZCBsYXlvdXRzIGZvciBhIHNwZWNpZmljIHBhbmUgLSBjYW4gb3B0aW9uYWxseSBwYXNzIGxheW91dC1vcHRpb25zCisJKgorCSogQHNlZSBfaW5pdENoaWxkTGF5b3V0cworCSogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fQlldnRfb3JfcGFuZQlUaGUgcGFuZSBiZWluZyBvcGVuZWQsIGllOiBub3J0aCwgc291dGgsIGVhc3QsIG9yIHdlc3QKKwkqIEBwYXJhbSB7T2JqZWN0PX0JCQlbb3B0c10JCUxheW91dC1vcHRpb25zIC0gaWYgcGFzc2VkLCB3aWxsIE9WRVJSUklERSBvcHRpb25zW3BhbmVdLmNoaWxkT3B0aW9ucworCSogQHJldHVybiAgQW4gb2JqZWN0IHBvaW50ZXIgdG8gdGhlIGxheW91dCBpbnN0YW5jZSBjcmVhdGVkIC0gb3IgbnVsbAorCSovCissCWNyZWF0ZUNoaWxkTGF5b3V0ID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lLCBvcHRzKSB7CisJCXZhcglwYW5lID0gZXZ0UGFuZS5jYWxsKHRoaXMsIGV2dF9vcl9wYW5lKQorCQksCSRQCT0gJFBzW3BhbmVdCisJCSwJQwk9IGNoaWxkcmVuCisJCTsKKwkJaWYgKCRQKSB7CisJCQl2YXIJJEMJPSAkQ3NbcGFuZV0KKwkJCSwJbwk9IG9wdHMgfHwgb3B0aW9uc1twYW5lXS5jaGlsZE9wdGlvbnMKKwkJCSwJZAk9ICJsYXlvdXQiCisJCQkvLwlkZXRlcm1pbmUgd2hpY2ggZWxlbWVudCBpcyBzdXBwb3NlZCB0byBiZSB0aGUgJ2NoaWxkIGNvbnRhaW5lcicKKwkJCS8vCWlmIHBhbmUgaGFzIGEgJ2NvbnRhaW5lclNlbGVjdG9yJyBPUiBhICdjb250ZW50LWRpdicsIHVzZSB0aG9zZSBpbnN0ZWFkIG9mIHRoZSBwYW5lCisJCQksCSRDb250ID0gby5jb250YWluZXJTZWxlY3RvciA/ICRQLmZpbmQoIG8uY29udGFpbmVyU2VsZWN0b3IgKSA6ICgkQyB8fCAkUCkKKwkJCSwJY29udGFpbmVyRm91bmQgPSAkQ29udC5sZW5ndGgKKwkJCS8vCXNlZSBpZiBhIGNoaWxkLWxheW91dCBBTFJFQURZIGV4aXN0cyBvbiB0aGlzIGVsZW1lbnQKKwkJCSwJY2hpbGQgPSBjb250YWluZXJGb3VuZCA/IChDW3BhbmVdID0gJENvbnQuZGF0YShkKSB8fCBudWxsKSA6IG51bGwKKwkJCTsKKwkJCS8vIGlmIG5vIGxheW91dCBleGlzdHMsIGJ1dCBjaGlsZE9wdGlvbnMgYXJlIHNldCwgdHJ5IHRvIGNyZWF0ZSB0aGUgbGF5b3V0IG5vdworCQkJaWYgKCFjaGlsZCAmJiBjb250YWluZXJGb3VuZCAmJiBvKQorCQkJCWNoaWxkID0gQ1twYW5lXSA9ICRDb250LmVxKDApLmxheW91dChvKSB8fCBudWxsOworCQkJaWYgKGNoaWxkKQorCQkJCWNoaWxkLmhhc1BhcmVudExheW91dCA9IHRydWU7CS8vIHNldCBwYXJlbnQtZmxhZyBpbiBjaGlsZAorCQl9CisJCUluc3RhbmNlW3BhbmVdLmNoaWxkID0gQ1twYW5lXTsgLy8gQUxXQVlTIHNldCBwYW5lLW9iamVjdCBwb2ludGVyLCBldmVuIGlmIG51bGwKKwl9CisKKywJd2luZG93UmVzaXplID0gZnVuY3Rpb24gKCkgeworCQl2YXIgZGVsYXkgPSBOdW1iZXIob3B0aW9ucy5yZXNpemVXaXRoV2luZG93RGVsYXkpOworCQlpZiAoZGVsYXkgPCAxMCkgZGVsYXkgPSAxMDA7IC8vIE1VU1QgaGF2ZSBhIGRlbGF5IQorCQkvLyByZXNpemluZyB1c2VzIGEgZGVsYXktbG9vcCBiZWNhdXNlIHRoZSByZXNpemUgZXZlbnQgZmlyZXMgcmVwZWF0bHkgLSBleGNlcHQgaW4gRkYsIGJ1dCBkZWxheSBhbnl3YXkKKwkJdGltZXIuY2xlYXIoIndpblJlc2l6ZSIpOyAvLyBpZiBhbHJlYWR5IHJ1bm5pbmcKKwkJdGltZXIuc2V0KCJ3aW5SZXNpemUiLCBmdW5jdGlvbigpeworCQkJdGltZXIuY2xlYXIoIndpblJlc2l6ZSIpOworCQkJdGltZXIuY2xlYXIoIndpblJlc2l6ZVJlcGVhdGVyIik7CisJCQl2YXIgZGltcyA9IGVsRGltcyggJE4gKTsKKwkJCS8vIG9ubHkgdHJpZ2dlciByZXNpemVBbGwoKSBpZiBjb250YWluZXIgaGFzIGNoYW5nZWQgc2l6ZQorCQkJaWYgKGRpbXMuaW5uZXJXaWR0aCAhPT0gc0MuaW5uZXJXaWR0aCB8fCBkaW1zLmlubmVySGVpZ2h0ICE9PSBzQy5pbm5lckhlaWdodCkKKwkJCQlyZXNpemVBbGwoKTsKKwkJfSwgZGVsYXkpOworCQkvLyBBTFNPIHNldCBmaXhlZC1kZWxheSB0aW1lciwgaWYgbm90IGFscmVhZHkgcnVubmluZworCQlpZiAoIXRpbWVyLmRhdGFbIndpblJlc2l6ZVJlcGVhdGVyIl0pIHNldFdpbmRvd1Jlc2l6ZVJlcGVhdGVyKCk7CisJfQorCissCXNldFdpbmRvd1Jlc2l6ZVJlcGVhdGVyID0gZnVuY3Rpb24gKCkgeworCQl2YXIgZGVsYXkgPSBOdW1iZXIob3B0aW9ucy5yZXNpemVXaXRoV2luZG93TWF4RGVsYXkpOworCQlpZiAoZGVsYXkgPiAwKQorCQkJdGltZXIuc2V0KCJ3aW5SZXNpemVSZXBlYXRlciIsIGZ1bmN0aW9uKCl7IHNldFdpbmRvd1Jlc2l6ZVJlcGVhdGVyKCk7IHJlc2l6ZUFsbCgpOyB9LCBkZWxheSk7CisJfQorCissCXVubG9hZCA9IGZ1bmN0aW9uICgpIHsKKwkJdmFyIG8gPSBvcHRpb25zOworCisJCV9ydW5DYWxsYmFja3MoIm9udW5sb2FkX3N0YXJ0Iik7CisKKwkJLy8gdHJpZ2dlciBwbHVnaW4gY2FsbGFiYWNrcyBmb3IgdGhpcyBsYXlvdXQgKGVnOiBzdGF0ZU1hbmFnZW1lbnQpCisJCXJ1blBsdWdpbkNhbGxiYWNrcyggSW5zdGFuY2UsICQubGF5b3V0Lm9uVW5sb2FkICk7CisKKwkJX3J1bkNhbGxiYWNrcygib251bmxvYWRfZW5kIik7CisJfQorCisJLyoqCisJKiBWYWxpZGF0ZSBhbmQgaW5pdGlhbGl6ZSBjb250YWluZXIgQ1NTIGFuZCBldmVudHMKKwkqCisJKiBAc2VlICBfY3JlYXRlKCkKKwkqLworLAlfaW5pdENvbnRhaW5lciA9IGZ1bmN0aW9uICgpIHsKKwkJdmFyCisJCQlOCQk9ICROWzBdCisJCSwJdGFnCQk9IHNDLnRhZ05hbWUgPSBOLnRhZ05hbWUKKwkJLAlpZAkJPSBzQy5pZCA9IE4uaWQKKwkJLAljbHMJCT0gc0MuY2xhc3NOYW1lID0gTi5jbGFzc05hbWUKKwkJLAlvCQk9IG9wdGlvbnMKKwkJLAluYW1lCT0gby5uYW1lCisJCSwJZnVsbFBhZ2U9ICh0YWcgPT09ICJCT0RZIikKKwkJLAlwcm9wcwk9ICJvdmVyZmxvdyxwb3NpdGlvbixtYXJnaW4scGFkZGluZyxib3JkZXIiCisJCSwJY3NzCQk9ICJsYXlvdXRDU1MiCisJCSwJQ1NTCQk9IHt9CisJCSwJaGlkCQk9ICJoaWRkZW4iIC8vIHVzZWQgQSBMT1QhCisJCS8vCXNlZSBpZiB0aGlzIGNvbnRhaW5lciBpcyBhICdwYW5lJyBpbnNpZGUgYW4gb3V0ZXItbGF5b3V0CisJCSwJcGFyZW50CT0gJE4uZGF0YSgicGFyZW50TGF5b3V0IikJLy8gcGFyZW50LWxheW91dCBJbnN0YW5jZQorCQksCXBhbmUJPSAkTi5kYXRhKCJsYXlvdXRFZGdlIikJCS8vIHBhbmUtbmFtZSBpbiBwYXJlbnQtbGF5b3V0CisJCSwJaXNDaGlsZAk9IHBhcmVudCAmJiBwYW5lCisJCTsKKwkJLy8gc0MgLT4gc3RhdGUuY29udGFpbmVyCisJCXNDLnNlbGVjdG9yID0gJE4uc2VsZWN0b3Iuc3BsaXQoIi5zbGljZSIpWzBdOworCQlzQy5yZWYJCT0gKG8ubmFtZSA/IG8ubmFtZSArJyBsYXlvdXQgLyAnIDogJycpICsgdGFnICsgKGlkID8gIiMiK2lkIDogY2xzID8gJy5bJytjbHMrJ10nIDogJycpOyAvLyB1c2VkIGluIG1lc3NhZ2VzCisKKwkJJE4JLmRhdGEoeworCQkJCWxheW91dDogSW5zdGFuY2UKKwkJCSwJbGF5b3V0Q29udGFpbmVyOiBzSUQgLy8gRkxBRyB0byBpbmRpY2F0ZSB0aGlzIGlzIGEgbGF5b3V0LWNvbnRhaW5lciAtIGNvbnRhaW5zIHVuaXF1ZSBpbnRlcm5hbCBJRAorCQkJfSkKKwkJCS5hZGRDbGFzcyhvLmNvbnRhaW5lckNsYXNzKQorCQk7CisJCXZhciBsYXlvdXRNZXRob2RzID0geworCQkJZGVzdHJveToJJycKKwkJLAlpbml0UGFuZXM6CScnCisJCSwJcmVzaXplQWxsOgkncmVzaXplQWxsJworCQksCXJlc2l6ZToJCSdyZXNpemVBbGwnCisJCX07CisJCS8vIGxvb3AgaGFzaCBhbmQgYmluZCBhbGwgbWV0aG9kcyAtIGluY2x1ZGUgbGF5b3V0SUQgbmFtZXNwYWNpbmcKKwkJZm9yIChuYW1lIGluIGxheW91dE1ldGhvZHMpIHsKKwkJCSROLmJpbmQoImxheW91dCIrIG5hbWUudG9Mb3dlckNhc2UoKSArIi4iKyBzSUQsIEluc3RhbmNlWyBsYXlvdXRNZXRob2RzW25hbWVdIHx8IG5hbWUgXSk7CisJCX0KKworCQkvLyBpZiB0aGlzIGNvbnRhaW5lciBpcyBhbm90aGVyIGxheW91dCdzICdwYW5lJywgdGhlbiBzZXQgY2hpbGQvcGFyZW50IHBvaW50ZXJzCisJCWlmIChpc0NoaWxkKSB7CisJCQkvLyB1cGRhdGUgcGFyZW50IGZsYWcKKwkJCUluc3RhbmNlLmhhc1BhcmVudExheW91dCA9IHRydWU7CisJCQkvLyBzZXQgcG9pbnRlcnMgdG8gVEhJUyBjaGlsZC1sYXlvdXQgKEluc3RhbmNlKSBpbiBwYXJlbnQtbGF5b3V0CisJCQkvLyBOT1RFOiBwYXJlbnQuUEFORS5jaGlsZCBpcyBhbiBBTElBUyB0byBwYXJlbnQuY2hpbGRyZW4uUEFORQorCQkJcGFyZW50W3BhbmVdLmNoaWxkID0gcGFyZW50LmNoaWxkcmVuW3BhbmVdID0gJE4uZGF0YSgibGF5b3V0Iik7CisJCX0KKworCQkvLyBTQVZFIG9yaWdpbmFsIGNvbnRhaW5lciBDU1MgZm9yIHVzZSBpbiBkZXN0cm95KCkKKwkJaWYgKCEkTi5kYXRhKGNzcykpIHsKKwkJCS8vIGhhbmRsZSBwcm9wcyBsaWtlIG92ZXJmbG93IGRpZmZlcmVudCBmb3IgQk9EWSAmIEhUTUwgLSBoYXMgJ3N5c3RlbSBkZWZhdWx0JyB2YWx1ZXMKKwkJCWlmIChmdWxsUGFnZSkgeworCQkJCUNTUyA9ICQuZXh0ZW5kKCBlbENTUygkTiwgcHJvcHMpLCB7CisJCQkJCWhlaWdodDoJCSROLmNzcygiaGVpZ2h0IikKKwkJCQksCW92ZXJmbG93OgkkTi5jc3MoIm92ZXJmbG93IikKKwkJCQksCW92ZXJmbG93WDoJJE4uY3NzKCJvdmVyZmxvd1giKQorCQkJCSwJb3ZlcmZsb3dZOgkkTi5jc3MoIm92ZXJmbG93WSIpCisJCQkJfSk7CisJCQkJLy8gQUxTTyBTQVZFIDxIVE1MPiBDU1MKKwkJCQl2YXIgJEggPSAkKCJodG1sIik7CisJCQkJJEguZGF0YShjc3MsIHsKKwkJCQkJaGVpZ2h0OgkJImF1dG8iIC8vIEZGIHdvdWxkIHJldHVybiBhIGZpeGVkIHB4LXNpemUhCisJCQkJLAlvdmVyZmxvdzoJJEguY3NzKCJvdmVyZmxvdyIpCisJCQkJLAlvdmVyZmxvd1g6CSRILmNzcygib3ZlcmZsb3dYIikKKwkJCQksCW92ZXJmbG93WToJJEguY3NzKCJvdmVyZmxvd1kiKQorCQkJCX0pOworCQkJfQorCQkJZWxzZSAvLyBoYW5kbGUgcHJvcHMgbm9ybWFsbHkgZm9yIG5vbi1ib2R5IGVsZW1lbnRzCisJCQkJQ1NTID0gZWxDU1MoJE4sIHByb3BzKyIsdG9wLGJvdHRvbSxsZWZ0LHJpZ2h0LHdpZHRoLGhlaWdodCxvdmVyZmxvdyxvdmVyZmxvd1gsb3ZlcmZsb3dZIik7CisKKwkJCSROLmRhdGEoY3NzLCBDU1MpOworCQl9CisKKwkJdHJ5IHsgLy8gZm9ybWF0IGh0bWwvYm9keSBpZiB0aGlzIGlzIGEgZnVsbCBwYWdlIGxheW91dAorCQkJaWYgKGZ1bGxQYWdlKSB7CisJCQkJJCgiaHRtbCIpLmNzcyh7CisJCQkJCWhlaWdodDoJCSIxMDAlIgorCQkJCSwJb3ZlcmZsb3c6CWhpZAorCQkJCSwJb3ZlcmZsb3dYOgloaWQKKwkJCQksCW92ZXJmbG93WToJaGlkCisJCQkJfSk7CisJCQkJJCgiYm9keSIpLmNzcyh7CisJCQkJCXBvc2l0aW9uOgkicmVsYXRpdmUiCisJCQkJLAloZWlnaHQ6CQkiMTAwJSIKKwkJCQksCW92ZXJmbG93OgloaWQKKwkJCQksCW92ZXJmbG93WDoJaGlkCisJCQkJLAlvdmVyZmxvd1k6CWhpZAorCQkJCSwJbWFyZ2luOgkJMAorCQkJCSwJcGFkZGluZzoJMAkJLy8gVE9ETzogdGVzdCB3aGV0aGVyIGJvZHktcGFkZGluZyBjb3VsZCBiZSBoYW5kbGVkPworCQkJCSwJYm9yZGVyOgkJIm5vbmUiCS8vIGEgYm9keS1ib3JkZXIgY3JlYXRlcyBwcm9ibGVtcyBiZWNhdXNlIGl0IGNhbm5vdCBiZSBtZWFzdXJlZCEKKwkJCQl9KTsKKworCQkJCS8vIHNldCBjdXJyZW50IGxheW91dC1jb250YWluZXIgZGltZW5zaW9ucworCQkJCSQuZXh0ZW5kKHNDLCBlbERpbXMoICROICkpOworCQkJfQorCQkJZWxzZSB7IC8vIHNldCByZXF1aXJlZCBDU1MgZm9yIG92ZXJmbG93IGFuZCBwb3NpdGlvbgorCQkJCS8vIEVOU1VSRSBjb250YWluZXIgd2lsbCBub3QgJ3Njcm9sbCcKKwkJCQlDU1MgPSB7IG92ZXJmbG93OiBoaWQsIG92ZXJmbG93WDogaGlkLCBvdmVyZmxvd1k6IGhpZCB9CisJCQkJdmFyCisJCQkJCXAgPSAkTi5jc3MoInBvc2l0aW9uIikKKwkJCQksCWggPSAkTi5jc3MoImhlaWdodCIpCisJCQkJOworCQkJCS8vIGlmIHRoaXMgaXMgYSBORVNURUQgbGF5b3V0LCB0aGVuIGNvbnRhaW5lci9vdXRlci1wYW5lIEFMUkVBRFkgaGFzIHBvc2l0aW9uIGFuZCBoZWlnaHQKKwkJCQlpZiAoIWlzQ2hpbGQpIHsKKwkJCQkJaWYgKCFwIHx8ICFwLm1hdGNoKC9maXhlZHxhYnNvbHV0ZXxyZWxhdGl2ZS8pKQorCQkJCQkJQ1NTLnBvc2l0aW9uID0gInJlbGF0aXZlIjsgLy8gY29udGFpbmVyIE1VU1QgaGF2ZSBhICdwb3NpdGlvbicKKwkJCQkJLyoKKwkJCQkJaWYgKCFoIHx8IGg9PSJhdXRvIikKKwkJCQkJCUNTUy5oZWlnaHQgPSAiMTAwJSI7IC8vIGNvbnRhaW5lciBNVVNUIGhhdmUgYSAnaGVpZ2h0JworCQkJCQkqLworCQkJCX0KKwkJCQkkTi5jc3MoIENTUyApOworCisJCQkJLy8gc2V0IGN1cnJlbnQgbGF5b3V0LWNvbnRhaW5lciBkaW1lbnNpb25zCisJCQkJaWYgKCAkTi5pcygiOnZpc2libGUiKSApIHsKKwkJCQkJJC5leHRlbmQoc0MsIGVsRGltcyggJE4gKSk7CisJCQkJCWlmIChzQy5pbm5lckhlaWdodCA8IDEpCisJCQkJCQlfbG9nKCBvLmVycm9ycy5ub0NvbnRhaW5lckhlaWdodC5yZXBsYWNlKC9DT05UQUlORVIvLCBzQy5yZWYpICk7CisJCQkJfQorCQkJfQorCQl9IGNhdGNoIChleCkge30KKwl9CisKKwkvKioKKwkqIEJpbmQgbGF5b3V0IGhvdGtleXMgLSBpZiBvcHRpb25zIGVuYWJsZWQKKwkqCisJKiBAc2VlICBfY3JlYXRlKCkgYW5kIGFkZFBhbmUoKQorCSogQHBhcmFtIHtzdHJpbmc9fQlbcGFuZXM9IiJdCVRoZSBlZGdlKHMpIHRvIHByb2Nlc3MKKwkqLworLAlpbml0SG90a2V5cyA9IGZ1bmN0aW9uIChwYW5lcykgeworCQlwYW5lcyA9IHBhbmVzID8gcGFuZXMuc3BsaXQoIiwiKSA6IF9jLmJvcmRlclBhbmVzOworCQkvLyBiaW5kIGtleURvd24gdG8gY2FwdHVyZSBob3RrZXlzLCBpZiBvcHRpb24gZW5hYmxlZCBmb3IgQU5ZIHBhbmUKKwkJJC5lYWNoKHBhbmVzLCBmdW5jdGlvbiAoaSwgcGFuZSkgeworCQkJdmFyIG8gPSBvcHRpb25zW3BhbmVdOworCQkJaWYgKG8uZW5hYmxlQ3Vyc29ySG90a2V5IHx8IG8uY3VzdG9tSG90a2V5KSB7CisJCQkJJChkb2N1bWVudCkuYmluZCgia2V5ZG93bi4iKyBzSUQsIGtleURvd24pOyAvLyBvbmx5IG5lZWQgdG8gYmluZCB0aGlzIE9OQ0UKKwkJCQlyZXR1cm4gZmFsc2U7IC8vIEJSRUFLIC0gYmluZGluZyB3YXMgZG9uZQorCQkJfQorCQl9KTsKKwl9CisKKwkvKioKKwkqIEJ1aWxkIGZpbmFsIE9QVElPTlMgZGF0YQorCSoKKwkqIEBzZWUgIF9jcmVhdGUoKQorCSovCissCWluaXRPcHRpb25zID0gZnVuY3Rpb24gKCkgeworCQl2YXIgZGF0YSwgZCwgcGFuZSwga2V5LCB2YWwsIGksIGMsIG87CisKKwkJLy8gcmVwcm9jZXNzIHVzZXIncyBsYXlvdXQtb3B0aW9ucyB0byBoYXZlIGNvcnJlY3Qgb3B0aW9ucyBzdWIta2V5IHN0cnVjdHVyZQorCQlvcHRzID0gJC5sYXlvdXQudHJhbnNmb3JtRGF0YSggb3B0cyApOyAvLyBwYW5lcyA9IGRlZmF1bHQgc3Via2V5CisKKwkJLy8gYXV0by1yZW5hbWUgb2xkIG9wdGlvbnMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKwkJb3B0cyA9ICQubGF5b3V0LmJhY2t3YXJkQ29tcGF0aWJpbGl0eS5yZW5hbWVBbGxPcHRpb25zKCBvcHRzICk7CisKKwkJLy8gaWYgdXNlci1vcHRpb25zIGhhcyAncGFuZXMnIGtleSAocGFuZS1kZWZhdWx0cyksIGNsZWFuIGl0Li4uCisJCWlmICghJC5pc0VtcHR5T2JqZWN0KG9wdHMucGFuZXMpKSB7CisJCQkvLyBSRU1PVkUgYW55IHBhbmUtZGVmYXVsdHMgdGhhdCBNVVNUIGJlIHNldCBwZXItcGFuZQorCQkJZGF0YSA9ICQubGF5b3V0Lm9wdGlvbnNNYXAubm9EZWZhdWx0OworCQkJZm9yIChpPTAsIGM9ZGF0YS5sZW5ndGg7IGk8YzsgaSsrKSB7CisJCQkJa2V5ID0gZGF0YVtpXTsKKwkJCQlkZWxldGUgb3B0cy5wYW5lc1trZXldOyAvLyBPSyBpZiBkb2VzIG5vdCBleGlzdAorCQkJfQorCQkJLy8gUkVNT1ZFIGFueSBsYXlvdXQtb3B0aW9ucyBzcGVjaWZpZWQgdW5kZXIgb3B0cy5wYW5lcworCQkJZGF0YSA9ICQubGF5b3V0Lm9wdGlvbnNNYXAubGF5b3V0OworCQkJZm9yIChpPTAsIGM9ZGF0YS5sZW5ndGg7IGk8YzsgaSsrKSB7CisJCQkJa2V5ID0gZGF0YVtpXTsKKwkJCQlkZWxldGUgb3B0cy5wYW5lc1trZXldOyAvLyBPSyBpZiBkb2VzIG5vdCBleGlzdAorCQkJfQorCQl9CisKKwkJLy8gTU9WRSBhbnkgTk9OLWxheW91dC1vcHRpb25zIGZyb20gb3B0cy1yb290IHRvIG9wdHMucGFuZXMKKwkJZGF0YSA9ICQubGF5b3V0Lm9wdGlvbnNNYXAubGF5b3V0OworCQl2YXIgcm9vdEtleXMgPSAkLmxheW91dC5jb25maWcub3B0aW9uUm9vdEtleXM7CisJCWZvciAoa2V5IGluIG9wdHMpIHsKKwkJCXZhbCA9IG9wdHNba2V5XTsKKwkJCWlmICgkLmluQXJyYXkoa2V5LCByb290S2V5cykgPCAwICYmICQuaW5BcnJheShrZXksIGRhdGEpIDwgMCkgeworCQkJCWlmICghb3B0cy5wYW5lc1trZXldKQorCQkJCQlvcHRzLnBhbmVzW2tleV0gPSAkLmlzUGxhaW5PYmplY3QodmFsKSA/ICQuZXh0ZW5kKHRydWUsIHt9LCB2YWwpIDogdmFsOworCQkJCWRlbGV0ZSBvcHRzW2tleV0KKwkJCX0KKwkJfQorCisJCS8vIFNUQVJUIGJ5IHVwZGF0aW5nIEFMTCBvcHRpb25zIGZyb20gb3B0cworCQkkLmV4dGVuZCh0cnVlLCBvcHRpb25zLCBvcHRzKTsKKworCQkvLyBDUkVBVEUgZmluYWwgb3B0aW9ucyAoYW5kIGNvbmZpZykgZm9yIEVBQ0ggcGFuZQorCQkkLmVhY2goX2MuYWxsUGFuZXMsIGZ1bmN0aW9uIChpLCBwYW5lKSB7CisKKwkJCS8vIGFwcGx5ICdwYW5lLWRlZmF1bHRzJyB0byBDT05GSUcuW1BBTkVdCisJCQlfY1twYW5lXSA9ICQuZXh0ZW5kKHRydWUsIHt9LCBfYy5wYW5lcywgX2NbcGFuZV0pOworCisJCQlkID0gb3B0aW9ucy5wYW5lczsKKwkJCW8gPSBvcHRpb25zW3BhbmVdOworCisJCQkvLyBjZW50ZXItcGFuZSB1c2VzIFNPTUUga2V5cyBpbiBkZWZhdWx0cy5wYW5lcyBicmFuY2gKKwkJCWlmIChwYW5lID09PSAnY2VudGVyJykgeworCQkJCS8vIE9OTFkgY29weSBrZXlzIGZyb20gb3B0cy5wYW5lcyBsaXN0ZWQgaW46ICQubGF5b3V0Lm9wdGlvbnNNYXAuY2VudGVyCisJCQkJZGF0YSA9ICQubGF5b3V0Lm9wdGlvbnNNYXAuY2VudGVyOwkJLy8gbGlzdCBvZiAnY2VudGVyLXBhbmUga2V5cycKKwkJCQlmb3IgKGk9MCwgYz1kYXRhLmxlbmd0aDsgaTxjOyBpKyspIHsJLy8gbG9vcCB0aGUgbGlzdC4uLgorCQkJCQlrZXkgPSBkYXRhW2ldOworCQkJCQkvLyBvbmx5IG5lZWQgdG8gdXNlIHBhbmUtZGVmYXVsdCBpZiBwYW5lLXNwZWNpZmljIHZhbHVlIG5vdCBzZXQKKwkJCQkJaWYgKCFvcHRzLmNlbnRlcltrZXldICYmIChvcHRzLnBhbmVzW2tleV0gfHwgIW9ba2V5XSkpCisJCQkJCQlvW2tleV0gPSBkW2tleV07IC8vIHBhbmUtZGVmYXVsdAorCQkJCX0KKwkJCX0KKwkJCWVsc2UgeworCQkJCS8vIGJvcmRlci1wYW5lcyB1c2UgQUxMIGtleXMgaW4gZGVmYXVsdHMucGFuZXMgYnJhbmNoCisJCQkJbyA9IG9wdGlvbnNbcGFuZV0gPSAkLmV4dGVuZCh0cnVlLCB7fSwgZCwgbyk7IC8vIHJlLWFwcGx5IHBhbmUtc3BlY2lmaWMgb3B0cyBBRlRFUiBwYW5lLWRlZmF1bHRzCisJCQkJY3JlYXRlRnhPcHRpb25zKCBwYW5lICk7CisJCQkJLy8gZW5zdXJlIGFsbCBib3JkZXItcGFuZS1zcGVjaWZpYyBiYXNlLWNsYXNzZXMgZXhpc3QKKwkJCQlpZiAoIW8ucmVzaXplckNsYXNzKQlvLnJlc2l6ZXJDbGFzcwk9ICJ1aS1sYXlvdXQtcmVzaXplciI7CisJCQkJaWYgKCFvLnRvZ2dsZXJDbGFzcykJby50b2dnbGVyQ2xhc3MJPSAidWktbGF5b3V0LXRvZ2dsZXIiOworCQkJfQorCQkJLy8gZW5zdXJlIHdlIGhhdmUgYmFzZSBwYW5lLWNsYXNzIChBTEwgcGFuZXMpCisJCQlpZiAoIW8ucGFuZUNsYXNzKSBvLnBhbmVDbGFzcyA9ICJ1aS1sYXlvdXQtcGFuZSI7CisJCX0pOworCisJCS8vIHVwZGF0ZSBvcHRpb25zLnpJbmRleGVzIGlmIGEgekluZGV4LW9wdGlvbiBzcGVjaWZpZWQKKwkJdmFyIHpvCT0gb3B0cy56SW5kZXgKKwkJLAl6CT0gb3B0aW9ucy56SW5kZXhlczsKKwkJaWYgKHpvID4gMCkgeworCQkJei5wYW5lX25vcm1hbAkJPSB6bzsKKwkJCXouY29udGVudF9tYXNrCQk9IG1heCh6bysxLCB6LmNvbnRlbnRfbWFzayk7CS8vIE1JTiA9ICsxCisJCQl6LnJlc2l6ZXJfbm9ybWFsCT0gbWF4KHpvKzIsIHoucmVzaXplcl9ub3JtYWwpOwkvLyBNSU4gPSArMgorCQl9CisKKwkJLy8gREVMRVRFICdwYW5lcycga2V5IG5vdyB0aGF0IHdlIGFyZSBkb25lIC0gdmFsdWVzIHdlcmUgY29waWVkIHRvIEVBQ0ggcGFuZQorCQlkZWxldGUgb3B0aW9ucy5wYW5lczsKKworCisJCWZ1bmN0aW9uIGNyZWF0ZUZ4T3B0aW9ucyAoIHBhbmUgKSB7CisJCQl2YXIJbyA9IG9wdGlvbnNbcGFuZV0KKwkJCSwJZCA9IG9wdGlvbnMucGFuZXM7CisJCQkvLyBlbnN1cmUgZnhTZXR0aW5ncyBrZXkgdG8gYXZvaWQgZXJyb3JzCisJCQlpZiAoIW8uZnhTZXR0aW5ncykgby5meFNldHRpbmdzID0ge307CisJCQlpZiAoIWQuZnhTZXR0aW5ncykgZC5meFNldHRpbmdzID0ge307CisKKwkJCSQuZWFjaChbIl9vcGVuIiwiX2Nsb3NlIiwiX3NpemUiXSwgZnVuY3Rpb24gKGksbikgeyAKKwkJCQl2YXIKKwkJCQkJc05hbWUJCT0gImZ4TmFtZSIrIG4KKwkJCQksCXNTcGVlZAkJPSAiZnhTcGVlZCIrIG4KKwkJCQksCXNTZXR0aW5ncwk9ICJmeFNldHRpbmdzIisgbgorCQkJCQkvLyByZWNhbGN1bGF0ZSBmeE5hbWUgYWNjb3JkaW5nIHRvIHNwZWNpZmljaXR5IHJ1bGVzCisJCQkJLAlmeE5hbWUgPSBvW3NOYW1lXSA9CisJCQkJCQlvW3NOYW1lXQkvLyBvcHRpb25zLndlc3QuZnhOYW1lX29wZW4KKwkJCQkJfHwJZFtzTmFtZV0JLy8gb3B0aW9ucy5wYW5lcy5meE5hbWVfb3BlbgorCQkJCQl8fAlvLmZ4TmFtZQkvLyBvcHRpb25zLndlc3QuZnhOYW1lCisJCQkJCXx8CWQuZnhOYW1lCS8vIG9wdGlvbnMucGFuZXMuZnhOYW1lCisJCQkJCXx8CSJub25lIgkJLy8gTUVBTlMgJC5sYXlvdXQuZGVmYXVsdHMucGFuZXMuZnhOYW1lID09ICIiIHx8IGZhbHNlIHx8IG51bGwgfHwgMAorCQkJCTsKKwkJCQkvLyB2YWxpZGF0ZSBmeE5hbWUgdG8gZW5zdXJlIGlzIHZhbGlkIGVmZmVjdCAtIE1VU1QgaGF2ZSBlZmZlY3QtY29uZmlnIGRhdGEgaW4gb3B0aW9ucy5lZmZlY3RzCisJCQkJaWYgKGZ4TmFtZSA9PT0gIm5vbmUiIHx8ICEkLmVmZmVjdHMgfHwgISQuZWZmZWN0c1tmeE5hbWVdIHx8ICFvcHRpb25zLmVmZmVjdHNbZnhOYW1lXSkKKwkJCQkJZnhOYW1lID0gb1tzTmFtZV0gPSAibm9uZSI7IC8vIGVmZmVjdCBub3QgbG9hZGVkIE9SIHVucmVjb2duaXplZCBmeE5hbWUKKworCQkJCS8vIHNldCB2YXJzIGZvciBlZmZlY3RzIHN1YmtleXMgdG8gc2ltcGxpZnkgbG9naWMKKwkJCQl2YXIJZngJCT0gb3B0aW9ucy5lZmZlY3RzW2Z4TmFtZV0gfHwge30JLy8gZWZmZWN0cy5zbGlkZQorCQkJCSwJZnhfYWxsCT0gZnguYWxsCXx8IG51bGwJCQkJLy8gZWZmZWN0cy5zbGlkZS5hbGwKKwkJCQksCWZ4X3BhbmUJPSBmeFtwYW5lXQl8fCBudWxsCQkJCS8vIGVmZmVjdHMuc2xpZGUud2VzdAorCQkJCTsKKwkJCQkvLyBjcmVhdGUgZnhTcGVlZFtfb3BlbnxfY2xvc2V8X3NpemVdCisJCQkJb1tzU3BlZWRdID0KKwkJCQkJb1tzU3BlZWRdCQkJCS8vIG9wdGlvbnMud2VzdC5meFNwZWVkX29wZW4KKwkJCQl8fAlkW3NTcGVlZF0JCQkJLy8gb3B0aW9ucy53ZXN0LmZ4U3BlZWRfb3BlbgorCQkJCXx8CW8uZnhTcGVlZAkJCQkvLyBvcHRpb25zLndlc3QuZnhTcGVlZAorCQkJCXx8CWQuZnhTcGVlZAkJCQkvLyBvcHRpb25zLnBhbmVzLmZ4U3BlZWQKKwkJCQl8fAludWxsCQkJCQkvLyBERUZBVUxUIC0gbGV0IGZ4U2V0dGluZy5kdXJhdGlvbiBjb250cm9sIHNwZWVkCisJCQkJOworCQkJCS8vIGNyZWF0ZSBmeFNldHRpbmdzW19vcGVufF9jbG9zZXxfc2l6ZV0KKwkJCQlvW3NTZXR0aW5nc10gPSAkLmV4dGVuZCgKKwkJCQkJdHJ1ZQorCQkJCSwJe30KKwkJCQksCWZ4X2FsbAkJCQkJLy8gZWZmZWN0cy5zbGlkZS5hbGwKKwkJCQksCWZ4X3BhbmUJCQkJCS8vIGVmZmVjdHMuc2xpZGUud2VzdAorCQkJCSwJZC5meFNldHRpbmdzCQkJLy8gb3B0aW9ucy5wYW5lcy5meFNldHRpbmdzCisJCQkJLAlvLmZ4U2V0dGluZ3MJCQkvLyBvcHRpb25zLndlc3QuZnhTZXR0aW5ncworCQkJCSwJZFtzU2V0dGluZ3NdCQkJLy8gb3B0aW9ucy5wYW5lcy5meFNldHRpbmdzX29wZW4KKwkJCQksCW9bc1NldHRpbmdzXQkJCS8vIG9wdGlvbnMud2VzdC5meFNldHRpbmdzX29wZW4KKwkJCQkpOworCQkJfSk7CisKKwkJCS8vIERPTkUgY3JlYXRpbmcgYWN0aW9uLXNwZWNpZmljLXNldHRpbmdzIGZvciB0aGlzIHBhbmUsCisJCQkvLyBzbyBERUxFVEUgZ2VuZXJpYyBvcHRpb25zIC0gYXJlIG5vIGxvbmdlciBtZWFuaW5nZnVsCisJCQlkZWxldGUgby5meE5hbWU7CisJCQlkZWxldGUgby5meFNwZWVkOworCQkJZGVsZXRlIG8uZnhTZXR0aW5nczsKKwkJfQorCX0KKworCS8qKgorCSogSW5pdGlhbGl6ZSBtb2R1bGUgb2JqZWN0cywgc3R5bGluZywgc2l6ZSBhbmQgcG9zaXRpb24gZm9yIGFsbCBwYW5lcworCSoKKwkqIEBzZWUgIF9pbml0RWxlbWVudHMoKQorCSogQHBhcmFtIHtzdHJpbmd9CXBhbmUJCVRoZSBwYW5lIHRvIHByb2Nlc3MKKwkqLworLAlnZXRQYW5lID0gZnVuY3Rpb24gKHBhbmUpIHsKKwkJdmFyIHNlbCA9IG9wdGlvbnNbcGFuZV0ucGFuZVNlbGVjdG9yCisJCWlmIChzZWwuc3Vic3RyKDAsMSk9PT0iIyIpIC8vIElEIHNlbGVjdG9yCisJCQkvLyBOT1RFOiBlbGVtZW50cyBzZWxlY3RlZCAnYnkgSUQnIERPIE5PVCBoYXZlIHRvIGJlICdjaGlsZHJlbicKKwkJCXJldHVybiAkTi5maW5kKHNlbCkuZXEoMCk7CisJCWVsc2UgeyAvLyBjbGFzcyBvciBvdGhlciBzZWxlY3RvcgorCQkJdmFyICRQID0gJE4uY2hpbGRyZW4oc2VsKS5lcSgwKTsKKwkJCS8vIGxvb2sgZm9yIHRoZSBwYW5lIG5lc3RlZCBpbnNpZGUgYSAnZm9ybScgZWxlbWVudAorCQkJcmV0dXJuICRQLmxlbmd0aCA/ICRQIDogJE4uY2hpbGRyZW4oImZvcm06Zmlyc3QiKS5jaGlsZHJlbihzZWwpLmVxKDApOworCQl9CisJfQorCissCWluaXRQYW5lcyA9IGZ1bmN0aW9uIChldnQpIHsKKwkJLy8gc3RvcFByb3BhZ2F0aW9uIGlmIGNhbGxlZCBieSB0cmlnZ2VyKCJsYXlvdXRpbml0cGFuZXMiKSAtIHVzZSBldnRQYW5lIHV0aWxpdHkgCisJCWV2dFBhbmUoZXZ0KTsKKworCQkvLyBOT1RFOiBkbyBub3J0aCAmIHNvdXRoIEZJUlNUIHNvIHdlIGNhbiBtZWFzdXJlIHRoZWlyIGhlaWdodCAtIGRvIGNlbnRlciBMQVNUCisJCSQuZWFjaChfYy5hbGxQYW5lcywgZnVuY3Rpb24gKGlkeCwgcGFuZSkgeworCQkJYWRkUGFuZSggcGFuZSwgdHJ1ZSApOworCQl9KTsKKworCQkvLyBpbml0IHRoZSBwYW5lLWhhbmRsZXMgTk9XIGluIGNhc2Ugd2UgaGF2ZSB0byBoaWRlIG9yIGNsb3NlIHRoZSBwYW5lIGJlbG93CisJCWluaXRIYW5kbGVzKCk7CisKKwkJLy8gbm93IHRoYXQgYWxsIHBhbmVzIGhhdmUgYmVlbiBpbml0aWFsaXplZCBhbmQgaW5pdGlhbGx5LXNpemVkLAorCQkvLyBtYWtlIHN1cmUgdGhlcmUgaXMgcmVhbGx5IGVub3VnaCBzcGFjZSBhdmFpbGFibGUgZm9yIGVhY2ggcGFuZQorCQkkLmVhY2goX2MuYm9yZGVyUGFuZXMsIGZ1bmN0aW9uIChpLCBwYW5lKSB7CisJCQlpZiAoJFBzW3BhbmVdICYmIHN0YXRlW3BhbmVdLmlzVmlzaWJsZSkgeyAvLyBwYW5lIGlzIE9QRU4KKwkJCQlzZXRTaXplTGltaXRzKHBhbmUpOworCQkJCW1ha2VQYW5lRml0KHBhbmUpOyAvLyBwYW5lIG1heSBiZSBDbG9zZWQsIEhpZGRlbiBvciBSZXNpemVkIGJ5IG1ha2VQYW5lRml0KCkKKwkJCX0KKwkJfSk7CisJCS8vIHNpemUgY2VudGVyLXBhbmUgQUdBSU4gaW4gY2FzZSB3ZSAnY2xvc2VkJyBhIGJvcmRlci1wYW5lIGluIGxvb3AgYWJvdmUKKwkJc2l6ZU1pZFBhbmVzKCJjZW50ZXIiKTsKKworCQkvLwlDaHJvbWUvV2Via2l0IHNvbWV0aW1lcyBmaXJlcyBjYWxsYmFja3MgQkVGT1JFIGl0IGNvbXBsZXRlcyByZXNpemluZyEKKwkJLy8JQmVmb3JlIFJDMzAuMywgdGhlcmUgd2FzIGEgMTBtcyBkZWxheSBoZXJlLCBidXQgdGhhdCBjYXVzZWQgbGF5b3V0IAorCQkvLwl0byBsb2FkIGFzeW5jaHJvdXNseSwgd2hpY2ggaXMgQkFELCBzbyB0cnkgc2tpcHBpbmcgZGVsYXkgZm9yIG5vdworCisJCS8vIHByb2Nlc3MgcGFuZSBjb250ZW50cyBhbmQgY2FsbGJhY2tzLCBhbmQgaW5pdC9yZXNpemUgY2hpbGQtbGF5b3V0IGlmIGV4aXN0cworCQkkLmVhY2goX2MuYWxsUGFuZXMsIGZ1bmN0aW9uIChpLCBwYW5lKSB7CisJCQl2YXIgbyA9IG9wdGlvbnNbcGFuZV07CisJCQlpZiAoJFBzW3BhbmVdKSB7CisJCQkJaWYgKHN0YXRlW3BhbmVdLmlzVmlzaWJsZSkgeyAvLyBwYW5lIGlzIE9QRU4KKwkJCQkJc2l6ZUNvbnRlbnQocGFuZSk7CisJCQkJCS8vIHRyaWdnZXIgcGFuZS5vblJlc2l6ZSBpZiB0cmlnZ2VyRXZlbnRzT25Mb2FkID0gdHJ1ZQorCQkJCQlpZiAoby50cmlnZ2VyRXZlbnRzT25Mb2FkKQorCQkJCQkJX3J1bkNhbGxiYWNrcygib25yZXNpemVfZW5kIiwgcGFuZSk7CisJCQkJZWxzZSAvLyBhdXRvbWF0aWMgaWYgb25yZXNpemUgY2FsbGVkLCBvdGhlcndpc2UgY2FsbCBpdCBzcGVjaWZpY2FsbHkKKwkJCQkJLy8gcmVzaXplIGNoaWxkIC0gSUYgaW5uZXItbGF5b3V0IGFscmVhZHkgZXhpc3RzIChjcmVhdGVkIGJlZm9yZSB0aGlzIGxheW91dCkKKwkJCQkJcmVzaXplQ2hpbGRMYXlvdXQocGFuZSk7CisJCQkJfQorCQkJCS8vIGluaXQgY2hpbGRMYXlvdXQgLSBldmVuIGlmIHBhbmUgaXMgbm90IHZpc2libGUKKwkJCQlpZiAoby5pbml0Q2hpbGRMYXlvdXQgJiYgby5jaGlsZE9wdGlvbnMpCisJCQkJCWNyZWF0ZUNoaWxkTGF5b3V0KHBhbmUpOworCQkJfQorCQl9KTsKKwl9CisKKwkvKioKKwkqIEFkZCBhIHBhbmUgdG8gdGhlIGxheW91dCAtIHN1YnJvdXRpbmUgb2YgaW5pdFBhbmVzKCkKKwkqCisJKiBAc2VlICBpbml0UGFuZXMoKQorCSogQHBhcmFtIHtzdHJpbmd9CXBhbmUJCQlUaGUgcGFuZSB0byBwcm9jZXNzCisJKiBAcGFyYW0ge2Jvb2xlYW49fQlbZm9yY2U9ZmFsc2VdCVNpemUgY29udGVudCBhZnRlciBpbml0CisJKi8KKywJYWRkUGFuZSA9IGZ1bmN0aW9uIChwYW5lLCBmb3JjZSkgeworCQlpZiAoIWZvcmNlICYmICFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJdmFyCisJCQlvCQk9IG9wdGlvbnNbcGFuZV0KKwkJLAlzCQk9IHN0YXRlW3BhbmVdCisJCSwJYwkJPSBfY1twYW5lXQorCQksCWZ4CQk9IHMuZngKKwkJLAlkaXIJCT0gYy5kaXIKKwkJLAlzcGFjaW5nCT0gby5zcGFjaW5nX29wZW4gfHwgMAorCQksCWlzQ2VudGVyID0gKHBhbmUgPT09ICJjZW50ZXIiKQorCQksCUNTUwkJPSB7fQorCQksCSRQCQk9ICRQc1twYW5lXQorCQksCXNpemUsIG1pblNpemUsIG1heFNpemUKKwkJOworCQkvLyBpZiBwYW5lLXBvaW50ZXIgYWxyZWFkeSBleGlzdHMsIHJlbW92ZSB0aGUgb2xkIG9uZSBmaXJzdAorCQlpZiAoJFApCisJCQlyZW1vdmVQYW5lKCBwYW5lLCBmYWxzZSwgdHJ1ZSwgZmFsc2UgKTsKKwkJZWxzZQorCQkJJENzW3BhbmVdID0gZmFsc2U7IC8vIGluaXQKKworCQkkUCA9ICRQc1twYW5lXSA9IGdldFBhbmUocGFuZSk7CisJCWlmICghJFAubGVuZ3RoKSB7CisJCQkkUHNbcGFuZV0gPSBmYWxzZTsgLy8gbG9naWMKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIFNBVkUgb3JpZ2luYWwgUGFuZSBDU1MKKwkJaWYgKCEkUC5kYXRhKCJsYXlvdXRDU1MiKSkgeworCQkJdmFyIHByb3BzID0gInBvc2l0aW9uLHRvcCxsZWZ0LGJvdHRvbSxyaWdodCx3aWR0aCxoZWlnaHQsb3ZlcmZsb3csekluZGV4LGRpc3BsYXksYmFja2dyb3VuZENvbG9yLHBhZGRpbmcsbWFyZ2luLGJvcmRlciI7CisJCQkkUC5kYXRhKCJsYXlvdXRDU1MiLCBlbENTUygkUCwgcHJvcHMpKTsKKwkJfQorCisJCS8vIGNyZWF0ZSBhbGlhcyBmb3IgcGFuZSBkYXRhIGluIEluc3RhbmNlIC0gaW5pdEhhbmRsZXMgd2lsbCBhZGQgbW9yZQorCQlJbnN0YW5jZVtwYW5lXSA9IHsgbmFtZTogcGFuZSwgcGFuZTogJFBzW3BhbmVdLCBjb250ZW50OiAkQ3NbcGFuZV0sIG9wdGlvbnM6IG9wdGlvbnNbcGFuZV0sIHN0YXRlOiBzdGF0ZVtwYW5lXSwgY2hpbGQ6IGNoaWxkcmVuW3BhbmVdIH07CisKKwkJLy8gYWRkIGNsYXNzZXMsIGF0dHJpYnV0ZXMgJiBldmVudHMKKwkJJFAJLmRhdGEoeworCQkJCXBhcmVudExheW91dDoJSW5zdGFuY2UJCS8vIHBvaW50ZXIgdG8gTGF5b3V0IEluc3RhbmNlCisJCQksCWxheW91dFBhbmU6CQlJbnN0YW5jZVtwYW5lXQkvLyBORVcgcG9pbnRlciB0byBwYW5lLWFsaWFzLW9iamVjdAorCQkJLAlsYXlvdXRFZGdlOgkJcGFuZQorCQkJLAlsYXlvdXRSb2xlOgkJInBhbmUiCisJCQl9KQorCQkJLmNzcyhjLmNzc1JlcSkuY3NzKCJ6SW5kZXgiLCBvcHRpb25zLnpJbmRleGVzLnBhbmVfbm9ybWFsKQorCQkJLmNzcyhvLmFwcGx5RGVtb1N0eWxlcyA/IGMuY3NzRGVtbyA6IHt9KSAvLyBkZW1vIHN0eWxlcworCQkJLmFkZENsYXNzKCBvLnBhbmVDbGFzcyArIiAiKyBvLnBhbmVDbGFzcysiLSIrcGFuZSApIC8vIGRlZmF1bHQgPSAidWktbGF5b3V0LXBhbmUgdWktbGF5b3V0LXBhbmUtd2VzdCIgLSBtYXkgYmUgYSBkdXBlIG9mICdwYW5lU2VsZWN0b3InCisJCQkuYmluZCgibW91c2VlbnRlci4iKyBzSUQsIGFkZEhvdmVyICkKKwkJCS5iaW5kKCJtb3VzZWxlYXZlLiIrIHNJRCwgcmVtb3ZlSG92ZXIgKQorCQkJOworCQl2YXIgcGFuZU1ldGhvZHMgPSB7CisJCQkJaGlkZToJCQkJJycKKwkJCSwJc2hvdzoJCQkJJycKKwkJCSwJdG9nZ2xlOgkJCQknJworCQkJLAljbG9zZToJCQkJJycKKwkJCSwJb3BlbjoJCQkJJycKKwkJCSwJc2xpZGVPcGVuOgkJCScnCisJCQksCXNsaWRlQ2xvc2U6CQkJJycKKwkJCSwJc2xpZGVUb2dnbGU6CQknJworCQkJLAlzaXplOgkJCQknc2l6ZVBhbmUnCisJCQksCXNpemVQYW5lOgkJCSdzaXplUGFuZScKKwkJCSwJc2l6ZUNvbnRlbnQ6CQknJworCQkJLAlzaXplSGFuZGxlczoJCScnCisJCQksCWVuYWJsZUNsb3NhYmxlOgkJJycKKwkJCSwJZGlzYWJsZUNsb3NhYmxlOgknJworCQkJLAllbmFibGVTbGlkZWFibGU6CScnCisJCQksCWRpc2FibGVTbGlkZWFibGU6CScnCisJCQksCWVuYWJsZVJlc2l6YWJsZToJJycKKwkJCSwJZGlzYWJsZVJlc2l6YWJsZToJJycKKwkJCSwJc3dhcFBhbmVzOgkJCSdzd2FwUGFuZXMnCisJCQksCXN3YXA6CQkJCSdzd2FwUGFuZXMnCisJCQksCW1vdmU6CQkJCSdzd2FwUGFuZXMnCisJCQksCXJlbW92ZVBhbmU6CQkJJ3JlbW92ZVBhbmUnCisJCQksCXJlbW92ZToJCQkJJ3JlbW92ZVBhbmUnCisJCQksCWNyZWF0ZUNoaWxkTGF5b3V0OgknJworCQkJLAlyZXNpemVDaGlsZExheW91dDoJJycKKwkJCSwJcmVzaXplQWxsOgkJCSdyZXNpemVBbGwnCisJCQksCXJlc2l6ZUxheW91dDoJCSdyZXNpemVBbGwnCisJCQl9CisJCSwJbmFtZTsKKwkJLy8gbG9vcCBoYXNoIGFuZCBiaW5kIGFsbCBtZXRob2RzIC0gaW5jbHVkZSBsYXlvdXRJRCBuYW1lc3BhY2luZworCQlmb3IgKG5hbWUgaW4gcGFuZU1ldGhvZHMpIHsKKwkJCSRQLmJpbmQoImxheW91dHBhbmUiKyBuYW1lLnRvTG93ZXJDYXNlKCkgKyIuIisgc0lELCBJbnN0YW5jZVsgcGFuZU1ldGhvZHNbbmFtZV0gfHwgbmFtZSBdKTsKKwkJfQorCisJCS8vIHNlZSBpZiB0aGlzIHBhbmUgaGFzIGEgJ3Njcm9sbGluZy1jb250ZW50IGVsZW1lbnQnCisJCWluaXRDb250ZW50KHBhbmUsIGZhbHNlKTsgLy8gZmFsc2UgPSBkbyBOT1Qgc2l6ZUNvbnRlbnQoKSAtIGNhbGxlZCBsYXRlcgorCisJCWlmICghaXNDZW50ZXIpIHsKKwkJCS8vIGNhbGwgX3BhcnNlU2l6ZSBBRlRFUiBhcHBseWluZyBwYW5lIGNsYXNzZXMgJiBzdHlsZXMgLSBidXQgYmVmb3JlIG1ha2luZyB2aXNpYmxlIChpZiBoaWRkZW4pCisJCQkvLyBpZiBvLnNpemUgaXMgYXV0byBvciBub3QgdmFsaWQsIHRoZW4gTUVBU1VSRSB0aGUgcGFuZSBhbmQgdXNlIHRoYXQgYXMgaXRzICdzaXplJworCQkJc2l6ZQk9IHMuc2l6ZSA9IF9wYXJzZVNpemUocGFuZSwgby5zaXplKTsKKwkJCW1pblNpemUJPSBfcGFyc2VTaXplKHBhbmUsby5taW5TaXplKSB8fCAxOworCQkJbWF4U2l6ZQk9IF9wYXJzZVNpemUocGFuZSxvLm1heFNpemUpIHx8IDEwMDAwMDsKKwkJCWlmIChzaXplID4gMCkgc2l6ZSA9IG1heChtaW4oc2l6ZSwgbWF4U2l6ZSksIG1pblNpemUpOworCisJCQkvLyBzdGF0ZSBmb3IgYm9yZGVyLXBhbmVzCisJCQlzLmlzQ2xvc2VkICA9IGZhbHNlOyAvLyB0cnVlID0gcGFuZSBpcyBjbG9zZWQKKwkJCXMuaXNTbGlkaW5nID0gZmFsc2U7IC8vIHRydWUgPSBwYW5lIGlzIGN1cnJlbnRseSBvcGVuIGJ5ICdzbGlkaW5nJyBvdmVyIGFkamFjZW50IHBhbmVzCisJCQlzLmlzUmVzaXppbmc9IGZhbHNlOyAvLyB0cnVlID0gcGFuZSBpcyBpbiBwcm9jZXNzIG9mIGJlaW5nIHJlc2l6ZWQKKwkJCXMuaXNIaWRkZW4JPSBmYWxzZTsgLy8gdHJ1ZSA9IHBhbmUgaXMgaGlkZGVuIC0gbm8gc3BhY2luZywgcmVzaXplciBvciB0b2dnbGVyIGlzIHZpc2libGUhCisKKwkJCS8vIGFycmF5IGZvciAncGluIGJ1dHRvbnMnIHdob3NlIGNsYXNzTmFtZXMgYXJlIGF1dG8tdXBkYXRlZCBvbiBwYW5lLW9wZW4vLWNsb3NlCisJCQlpZiAoIXMucGlucykgcy5waW5zID0gW107CisJCX0KKwkJLy8Jc3RhdGVzIGNvbW1vbiB0byBBTEwgcGFuZXMKKwkJcy50YWdOYW1lCT0gJFBbMF0udGFnTmFtZTsKKwkJcy5lZGdlCQk9IHBhbmU7CQkvLyB1c2VmdWwgaWYgcGFuZSBpcyAob3IgYWJvdXQgdG8gYmUpICdzd2FwcGVkJyAtIGVhc3kgZmluZCBvdXQgd2hlcmUgaXQgaXMgKG9yIGlzIGdvaW5nKQorCQlzLm5vUm9vbQk9IGZhbHNlOwkvLyB0cnVlID0gcGFuZSAnYXV0b21hdGljYWxseScgaGlkZGVuIGR1ZSB0byBpbnN1ZmZpY2llbnQgcm9vbSAtIHdpbGwgdW5oaWRlIGF1dG9tYXRpY2FsbHkKKwkJcy5pc1Zpc2libGUJPSB0cnVlOwkJLy8gZmFsc2UgPSBwYW5lIGlzIGludmlzaWJsZSAtIGNsb3NlZCBPUiBoaWRkZW4gLSBzaW1wbGlmeSBsb2dpYworCisJCS8vIHNldCBjc3MtcG9zaXRpb24gdG8gYWNjb3VudCBmb3IgY29udGFpbmVyIGJvcmRlcnMgJiBwYWRkaW5nCisJCXN3aXRjaCAocGFuZSkgeworCQkJY2FzZSAibm9ydGgiOiAJQ1NTLnRvcCAJPSBzQy5pbnNldFRvcDsKKwkJCQkJCQlDU1MubGVmdCAJPSBzQy5pbnNldExlZnQ7CisJCQkJCQkJQ1NTLnJpZ2h0CT0gc0MuaW5zZXRSaWdodDsKKwkJCQkJCQlicmVhazsKKwkJCWNhc2UgInNvdXRoIjogCUNTUy5ib3R0b20JPSBzQy5pbnNldEJvdHRvbTsKKwkJCQkJCQlDU1MubGVmdCAJPSBzQy5pbnNldExlZnQ7CisJCQkJCQkJQ1NTLnJpZ2h0IAk9IHNDLmluc2V0UmlnaHQ7CisJCQkJCQkJYnJlYWs7CisJCQljYXNlICJ3ZXN0IjogCUNTUy5sZWZ0IAk9IHNDLmluc2V0TGVmdDsgLy8gdG9wLCBib3R0b20gJiBoZWlnaHQgc2V0IGJ5IHNpemVNaWRQYW5lcygpCisJCQkJCQkJYnJlYWs7CisJCQljYXNlICJlYXN0IjogCUNTUy5yaWdodCAJPSBzQy5pbnNldFJpZ2h0OyAvLyBkaXR0bworCQkJCQkJCWJyZWFrOworCQkJY2FzZSAiY2VudGVyIjoJLy8gdG9wLCBsZWZ0LCB3aWR0aCAmIGhlaWdodCBzZXQgYnkgc2l6ZU1pZFBhbmVzKCkKKwkJfQorCisJCWlmIChkaXIgPT09ICJob3J6IikgLy8gbm9ydGggb3Igc291dGggcGFuZQorCQkJQ1NTLmhlaWdodCA9IGNzc0goJFAsIHNpemUpOworCQllbHNlIGlmIChkaXIgPT09ICJ2ZXJ0IikgLy8gZWFzdCBvciB3ZXN0IHBhbmUKKwkJCUNTUy53aWR0aCA9IGNzc1coJFAsIHNpemUpOworCQkvL2Vsc2UgaWYgKGlzQ2VudGVyKSB7fQorCisJCSRQLmNzcyhDU1MpOyAvLyBhcHBseSBzaXplIC0tIHRvcCwgYm90dG9tICYgaGVpZ2h0IHdpbGwgYmUgc2V0IGJ5IHNpemVNaWRQYW5lcworCQlpZiAoZGlyICE9ICJob3J6Iikgc2l6ZU1pZFBhbmVzKHBhbmUsIHRydWUpOyAvLyB0cnVlID0gc2tpcENhbGxiYWNrCisKKwkJLy8gY2xvc2Ugb3IgaGlkZSB0aGUgcGFuZSBpZiBzcGVjaWZpZWQgaW4gc2V0dGluZ3MKKwkJaWYgKG8uaW5pdENsb3NlZCAmJiBvLmNsb3NhYmxlICYmICFvLmluaXRIaWRkZW4pCisJCQljbG9zZShwYW5lLCB0cnVlLCB0cnVlKTsgLy8gdHJ1ZSwgdHJ1ZSA9IGZvcmNlLCBub0FuaW1hdGlvbgorCQllbHNlIGlmIChvLmluaXRIaWRkZW4gfHwgby5pbml0Q2xvc2VkKQorCQkJaGlkZShwYW5lKTsgLy8gd2lsbCBiZSBjb21wbGV0ZWx5IGludmlzaWJsZSAtIG5vIHJlc2l6ZXIgb3Igc3BhY2luZworCQllbHNlIGlmICghcy5ub1Jvb20pCisJCQkvLyBtYWtlIHRoZSBwYW5lIHZpc2libGUgLSBpbiBjYXNlIHdhcyBpbml0aWFsbHkgaGlkZGVuCisJCQkkUC5jc3MoImRpc3BsYXkiLCJibG9jayIpOworCQkvLyBFTFNFIHNldEFzT3BlbigpIC0gY2FsbGVkIGxhdGVyIGJ5IGluaXRIYW5kbGVzKCkKKworCQkvLyBSRVNFVCB2aXNpYmlsaXR5IG5vdyAtIHBhbmUgd2lsbCBhcHBlYXIgSUYgZGlzcGxheTpibG9jaworCQkkUC5jc3MoInZpc2liaWxpdHkiLCJ2aXNpYmxlIik7CisKKwkJLy8gY2hlY2sgb3B0aW9uIGZvciBhdXRvLWhhbmRsaW5nIG9mIHBvcC11cHMgJiBkcm9wLWRvd25zCisJCWlmIChvLnNob3dPdmVyZmxvd09uSG92ZXIpCisJCQkkUC5ob3ZlciggYWxsb3dPdmVyZmxvdywgcmVzZXRPdmVyZmxvdyApOworCisJCS8vIGlmIG1hbnVhbGx5IGFkZGluZyBhIHBhbmUgQUZURVIgbGF5b3V0IGluaXRpYWxpemF0aW9uLCB0aGVuLi4uCisJCWlmIChzdGF0ZS5pbml0aWFsaXplZCkgeworCQkJaW5pdEhhbmRsZXMoIHBhbmUgKTsKKwkJCWluaXRIb3RrZXlzKCBwYW5lICk7CisJCQlyZXNpemVBbGwoKTsgLy8gd2lsbCBzaXplQ29udGVudCBpZiBwYW5lIGlzIHZpc2libGUKKwkJCWlmIChzLmlzVmlzaWJsZSkgeyAvLyBwYW5lIGlzIE9QRU4KKwkJCQlpZiAoby50cmlnZ2VyRXZlbnRzT25Mb2FkKQorCQkJCQlfcnVuQ2FsbGJhY2tzKCJvbnJlc2l6ZV9lbmQiLCBwYW5lKTsKKwkJCQllbHNlIC8vIGF1dG9tYXRpYyBpZiBvbnJlc2l6ZSBjYWxsZWQsIG90aGVyd2lzZSBjYWxsIGl0IHNwZWNpZmljYWxseQorCQkJCQkvLyByZXNpemUgY2hpbGQgLSBJRiBpbm5lci1sYXlvdXQgYWxyZWFkeSBleGlzdHMgKGNyZWF0ZWQgYmVmb3JlIHRoaXMgbGF5b3V0KQorCQkJCQlyZXNpemVDaGlsZExheW91dChwYW5lKTsgLy8gYSBwcmV2aW91c2x5IGV4aXN0aW5nIGNoaWxkTGF5b3V0CisJCQl9CisJCQlpZiAoby5pbml0Q2hpbGRMYXlvdXQgJiYgby5jaGlsZE9wdGlvbnMpCisJCQkJY3JlYXRlQ2hpbGRMYXlvdXQocGFuZSk7CisJCX0KKwl9CisKKwkvKioKKwkqIEluaXRpYWxpemUgbW9kdWxlIG9iamVjdHMsIHN0eWxpbmcsIHNpemUgYW5kIHBvc2l0aW9uIGZvciBhbGwgcmVzaXplIGJhcnMgYW5kIHRvZ2dsZXIgYnV0dG9ucworCSoKKwkqIEBzZWUgIF9jcmVhdGUoKQorCSogQHBhcmFtIHtzdHJpbmc9fQlbcGFuZXM9IiJdCVRoZSBlZGdlKHMpIHRvIHByb2Nlc3MKKwkqLworLAlpbml0SGFuZGxlcyA9IGZ1bmN0aW9uIChwYW5lcykgeworCQlwYW5lcyA9IHBhbmVzID8gcGFuZXMuc3BsaXQoIiwiKSA6IF9jLmJvcmRlclBhbmVzOworCisJCS8vIGNyZWF0ZSB0b2dnbGVyIERJVnMgZm9yIGVhY2ggcGFuZSwgYW5kIHNldCBvYmplY3QgcG9pbnRlcnMgZm9yIHRoZW0sIGVnOiAkUi5ub3J0aCA9IG5vcnRoIHRvZ2dsZXIgRElWCisJCSQuZWFjaChwYW5lcywgZnVuY3Rpb24gKGksIHBhbmUpIHsKKwkJCXZhciAkUAkJPSAkUHNbcGFuZV07CisJCQkkUnNbcGFuZV0JPSBmYWxzZTsgLy8gSU5JVAorCQkJJFRzW3BhbmVdCT0gZmFsc2U7CisJCQlpZiAoISRQKSByZXR1cm47IC8vIHBhbmUgZG9lcyBub3QgZXhpc3QgLSBza2lwCisKKwkJCXZhciAKKwkJCQlvCQk9IG9wdGlvbnNbcGFuZV0KKwkJCSwJcwkJPSBzdGF0ZVtwYW5lXQorCQkJLAljCQk9IF9jW3BhbmVdCisJCQksCXBhbmVJZAk9IG8ucGFuZVNlbGVjdG9yLnN1YnN0cigwLDEpID09PSAiIyIgPyBvLnBhbmVTZWxlY3Rvci5zdWJzdHIoMSkgOiAiIgorCQkJLAlyQ2xhc3MJPSBvLnJlc2l6ZXJDbGFzcworCQkJLAl0Q2xhc3MJPSBvLnRvZ2dsZXJDbGFzcworCQkJLAlzaWRlCT0gYy5zaWRlLnRvTG93ZXJDYXNlKCkKKwkJCSwJc3BhY2luZwk9IChzLmlzVmlzaWJsZSA/IG8uc3BhY2luZ19vcGVuIDogby5zcGFjaW5nX2Nsb3NlZCkKKwkJCSwJX3BhbmUJPSAiLSIrIHBhbmUgLy8gdXNlZCBmb3IgY2xhc3NOYW1lcworCQkJLAlfc3RhdGUJPSAocy5pc1Zpc2libGUgPyAiLW9wZW4iIDogIi1jbG9zZWQiKSAvLyB1c2VkIGZvciBjbGFzc05hbWVzCisJCQksCUkJCT0gSW5zdGFuY2VbcGFuZV0KKwkJCQkvLyBJTklUIFJFU0laRVIgQkFSCisJCQksCSRSCQk9IEkucmVzaXplciA9ICRSc1twYW5lXSA9ICQoIjxkaXY+PC9kaXY+IikKKwkJCQkvLyBJTklUIFRPR0dMRVIgQlVUVE9OCisJCQksCSRUCQk9IEkudG9nZ2xlciA9IChvLmNsb3NhYmxlID8gJFRzW3BhbmVdID0gJCgiPGRpdj48L2Rpdj4iKSA6IGZhbHNlKQorCQkJOworCisJCQkvL2lmIChzLmlzVmlzaWJsZSAmJiBvLnJlc2l6YWJsZSkgLi4uIGhhbmRsZWQgYnkgaW5pdFJlc2l6YWJsZQorCQkJaWYgKCFzLmlzVmlzaWJsZSAmJiBvLnNsaWRhYmxlKQorCQkJCSRSLmF0dHIoInRpdGxlIiwgby50aXBzLlNsaWRlKS5jc3MoImN1cnNvciIsIG8uc2xpZGVyQ3Vyc29yKTsKKworCQkJJFIJLy8gaWYgcGFuZVNlbGVjdG9yIGlzIGFuIElELCB0aGVuIGNyZWF0ZSBhIG1hdGNoaW5nIElEIGZvciB0aGUgcmVzaXplciwgZWc6ICIjcGFuZUxlZnQiID0+ICJwYW5lTGVmdC1yZXNpemVyIgorCQkJCS5hdHRyKCJpZCIsIHBhbmVJZCA/IHBhbmVJZCArIi1yZXNpemVyIiA6ICIiICkKKwkJCQkuZGF0YSh7CisJCQkJCXBhcmVudExheW91dDoJSW5zdGFuY2UKKwkJCQksCWxheW91dFBhbmU6CQlJbnN0YW5jZVtwYW5lXQkvLyBORVcgcG9pbnRlciB0byBwYW5lLWFsaWFzLW9iamVjdAorCQkJCSwJbGF5b3V0RWRnZToJCXBhbmUKKwkJCQksCWxheW91dFJvbGU6CQkicmVzaXplciIKKwkJCQl9KQorCQkJCS5jc3MoX2MucmVzaXplcnMuY3NzUmVxKS5jc3MoInpJbmRleCIsIG9wdGlvbnMuekluZGV4ZXMucmVzaXplcl9ub3JtYWwpCisJCQkJLmNzcyhvLmFwcGx5RGVtb1N0eWxlcyA/IF9jLnJlc2l6ZXJzLmNzc0RlbW8gOiB7fSkgLy8gYWRkIGRlbW8gc3R5bGVzCisJCQkJLmFkZENsYXNzKHJDbGFzcyArIiAiKyByQ2xhc3MrX3BhbmUpCisJCQkJLmhvdmVyKGFkZEhvdmVyLCByZW1vdmVIb3ZlcikgLy8gQUxXQVlTIGFkZCBob3Zlci1jbGFzc2VzLCBldmVuIGlmIHJlc2l6aW5nIGlzIG5vdCBlbmFibGVkIC0gaGFuZGxlIHdpdGggQ1NTIGluc3RlYWQKKwkJCQkuaG92ZXIob25SZXNpemVyRW50ZXIsIG9uUmVzaXplckxlYXZlKSAvLyBBTFdBWVMgTkVFRCByZXNpemVyLm1vdXNlbGVhdmUgdG8gYmFsYW5jZSB0b2dnbGVyLm1vdXNlZW50ZXIKKwkJCQkuYXBwZW5kVG8oJE4pIC8vIGFwcGVuZCBESVYgdG8gY29udGFpbmVyCisJCQk7CisKKwkJCWlmICgkVCkgeworCQkJCSRUCS8vIGlmIHBhbmVTZWxlY3RvciBpcyBhbiBJRCwgdGhlbiBjcmVhdGUgYSBtYXRjaGluZyBJRCBmb3IgdGhlIHJlc2l6ZXIsIGVnOiAiI3BhbmVMZWZ0IiA9PiAiI3BhbmVMZWZ0LXRvZ2dsZXIiCisJCQkJCS5hdHRyKCJpZCIsIHBhbmVJZCA/IHBhbmVJZCArIi10b2dnbGVyIiA6ICIiICkKKwkJCQkJLmRhdGEoeworCQkJCQkJcGFyZW50TGF5b3V0OglJbnN0YW5jZQorCQkJCQksCWxheW91dFBhbmU6CQlJbnN0YW5jZVtwYW5lXQkvLyBORVcgcG9pbnRlciB0byBwYW5lLWFsaWFzLW9iamVjdAorCQkJCQksCWxheW91dEVkZ2U6CQlwYW5lCisJCQkJCSwJbGF5b3V0Um9sZToJCSJ0b2dnbGVyIgorCQkJCQl9KQorCQkJCQkuY3NzKF9jLnRvZ2dsZXJzLmNzc1JlcSkgLy8gYWRkIGJhc2UvcmVxdWlyZWQgc3R5bGVzCisJCQkJCS5jc3Moby5hcHBseURlbW9TdHlsZXMgPyBfYy50b2dnbGVycy5jc3NEZW1vIDoge30pIC8vIGFkZCBkZW1vIHN0eWxlcworCQkJCQkuYWRkQ2xhc3ModENsYXNzICsiICIrIHRDbGFzcytfcGFuZSkKKwkJCQkJLmhvdmVyKGFkZEhvdmVyLCByZW1vdmVIb3ZlcikgLy8gQUxXQVlTIGFkZCBob3Zlci1jbGFzc2VzLCBldmVuIGlmIHRvZ2dsaW5nIGlzIG5vdCBlbmFibGVkIC0gaGFuZGxlIHdpdGggQ1NTIGluc3RlYWQKKwkJCQkJLmJpbmQoIm1vdXNlZW50ZXIiLCBvblJlc2l6ZXJFbnRlcikgLy8gTkVFRCB0b2dnbGVyLm1vdXNlZW50ZXIgYmVjYXVzZSBtb3VzZWVudGVyIE1BWSBOT1QgZmlyZSBvbiByZXNpemVyCisJCQkJCS5hcHBlbmRUbygkUikgLy8gYXBwZW5kIFNQQU4gdG8gcmVzaXplciBESVYKKwkJCQk7CisJCQkJLy8gQUREIElOTkVSLVNQQU5TIFRPIFRPR0dMRVIKKwkJCQlpZiAoby50b2dnbGVyQ29udGVudF9vcGVuKSAvLyB1aS1sYXlvdXQtb3BlbgorCQkJCQkkKCI8c3Bhbj4iKyBvLnRvZ2dsZXJDb250ZW50X29wZW4gKyI8L3NwYW4+IikKKwkJCQkJCS5kYXRhKHsKKwkJCQkJCQlsYXlvdXRFZGdlOgkJcGFuZQorCQkJCQkJLAlsYXlvdXRSb2xlOgkJInRvZ2dsZXJDb250ZW50IgorCQkJCQkJfSkKKwkJCQkJCS5kYXRhKCJsYXlvdXRSb2xlIiwgInRvZ2dsZXJDb250ZW50IikKKwkJCQkJCS5kYXRhKCJsYXlvdXRFZGdlIiwgcGFuZSkKKwkJCQkJCS5hZGRDbGFzcygiY29udGVudCBjb250ZW50LW9wZW4iKQorCQkJCQkJLmNzcygiZGlzcGxheSIsIm5vbmUiKQorCQkJCQkJLmFwcGVuZFRvKCAkVCApCisJCQkJCQkvLy5ob3ZlciggYWRkSG92ZXIsIHJlbW92ZUhvdmVyICkgLy8gdXNlIHVpLWxheW91dC10b2dnbGVyLXdlc3QtaG92ZXIgLmNvbnRlbnQtb3BlbiBpbnN0ZWFkIQorCQkJCQk7CisJCQkJaWYgKG8udG9nZ2xlckNvbnRlbnRfY2xvc2VkKSAvLyB1aS1sYXlvdXQtY2xvc2VkCisJCQkJCSQoIjxzcGFuPiIrIG8udG9nZ2xlckNvbnRlbnRfY2xvc2VkICsiPC9zcGFuPiIpCisJCQkJCQkuZGF0YSh7CisJCQkJCQkJbGF5b3V0RWRnZToJCXBhbmUKKwkJCQkJCSwJbGF5b3V0Um9sZToJCSJ0b2dnbGVyQ29udGVudCIKKwkJCQkJCX0pCisJCQkJCQkuYWRkQ2xhc3MoImNvbnRlbnQgY29udGVudC1jbG9zZWQiKQorCQkJCQkJLmNzcygiZGlzcGxheSIsIm5vbmUiKQorCQkJCQkJLmFwcGVuZFRvKCAkVCApCisJCQkJCQkvLy5ob3ZlciggYWRkSG92ZXIsIHJlbW92ZUhvdmVyICkgLy8gdXNlIHVpLWxheW91dC10b2dnbGVyLXdlc3QtaG92ZXIgLmNvbnRlbnQtY2xvc2VkIGluc3RlYWQhCisJCQkJCTsKKwkJCQkvLyBBREQgVE9HR0xFUi5jbGljay8uaG92ZXIKKwkJCQllbmFibGVDbG9zYWJsZShwYW5lKTsKKwkJCX0KKworCQkJLy8gYWRkIERyYWdnYWJsZSBldmVudHMKKwkJCWluaXRSZXNpemFibGUocGFuZSk7CisKKwkJCS8vIEFERCBDTEFTU05BTUVTICYgU0xJREUtQklORElOR1MgLSBlZzogY2xhc3M9InJlc2l6ZXIgcmVzaXplci13ZXN0IHJlc2l6ZXItb3BlbiIKKwkJCWlmIChzLmlzVmlzaWJsZSkKKwkJCQlzZXRBc09wZW4ocGFuZSk7CS8vIG9uT3BlbiB3aWxsIGJlIGNhbGxlZCwgYnV0IE5PVCBvblJlc2l6ZQorCQkJZWxzZSB7CisJCQkJc2V0QXNDbG9zZWQocGFuZSk7CS8vIG9uQ2xvc2Ugd2lsbCBiZSBjYWxsZWQKKwkJCQliaW5kU3RhcnRTbGlkaW5nRXZlbnQocGFuZSwgdHJ1ZSk7IC8vIHdpbGwgZW5hYmxlIGV2ZW50cyBJRiBvcHRpb24gaXMgc2V0CisJCQl9CisKKwkJfSk7CisKKwkJLy8gU0VUIEFMTCBIQU5ETEUgRElNRU5TSU9OUworCQlzaXplSGFuZGxlcygpOworCX0KKworCisJLyoqCisJKiBJbml0aWFsaXplIHNjcm9sbGluZyB1aS1sYXlvdXQtY29udGVudCBkaXYgLSBpZiBleGlzdHMKKwkqCisJKiBAc2VlICBpbml0UGFuZSgpIC0gb3IgZXh0ZXJuYWxseSBhZnRlciBhbiBBamF4IGluamVjdGlvbgorCSogQHBhcmFtIHtzdHJpbmd9CVtwYW5lXQkJCVRoZSBwYW5lIHRvIHByb2Nlc3MKKwkqIEBwYXJhbSB7Ym9vbGVhbj19CVtyZXNpemU9dHJ1ZV0JU2l6ZSBjb250ZW50IGFmdGVyIGluaXQKKwkqLworLAlpbml0Q29udGVudCA9IGZ1bmN0aW9uIChwYW5lLCByZXNpemUpIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJdmFyIAorCQkJbwk9IG9wdGlvbnNbcGFuZV0KKwkJLAlzZWwJPSBvLmNvbnRlbnRTZWxlY3RvcgorCQksCUkJPSBJbnN0YW5jZVtwYW5lXQorCQksCSRQCT0gJFBzW3BhbmVdCisJCSwJJEMKKwkJOworCQlpZiAoc2VsKSAkQyA9IEkuY29udGVudCA9ICRDc1twYW5lXSA9IChvLmZpbmROZXN0ZWRDb250ZW50KQorCQkJPyAkUC5maW5kKHNlbCkuZXEoMCkgLy8gbWF0Y2ggMS1lbGVtZW50IG9ubHkKKwkJCTogJFAuY2hpbGRyZW4oc2VsKS5lcSgwKQorCQk7CisJCWlmICgkQyAmJiAkQy5sZW5ndGgpIHsKKwkJCSRDLmRhdGEoImxheW91dFJvbGUiLCAiY29udGVudCIpOworCQkJLy8gU0FWRSBvcmlnaW5hbCBQYW5lIENTUworCQkJaWYgKCEkQy5kYXRhKCJsYXlvdXRDU1MiKSkKKwkJCQkkQy5kYXRhKCJsYXlvdXRDU1MiLCBlbENTUygkQywgImhlaWdodCIpKTsKKwkJCSRDLmNzcyggX2MuY29udGVudC5jc3NSZXEgKTsKKwkJCWlmIChvLmFwcGx5RGVtb1N0eWxlcykgeworCQkJCSRDLmNzcyggX2MuY29udGVudC5jc3NEZW1vICk7IC8vIGFkZCBwYWRkaW5nICYgb3ZlcmZsb3c6IGF1dG8gdG8gY29udGVudC1kaXYKKwkJCQkkUC5jc3MoIF9jLmNvbnRlbnQuY3NzRGVtb1BhbmUgKTsgLy8gUkVNT1ZFIHBhZGRpbmcvc2Nyb2xsaW5nIGZyb20gcGFuZQorCQkJfQorCQkJc3RhdGVbcGFuZV0uY29udGVudCA9IHt9OyAvLyBpbml0IGNvbnRlbnQgc3RhdGUKKwkJCWlmIChyZXNpemUgIT09IGZhbHNlKSBzaXplQ29udGVudChwYW5lKTsKKwkJCS8vIHNpemVDb250ZW50KCkgaXMgY2FsbGVkIEFGVEVSIGluaXQgb2YgYWxsIGVsZW1lbnRzCisJCX0KKwkJZWxzZQorCQkJSS5jb250ZW50ID0gJENzW3BhbmVdID0gZmFsc2U7CisJfQorCisKKwkvKioKKwkqIEFkZCByZXNpemUtYmFycyB0byBhbGwgcGFuZXMgdGhhdCBzcGVjaWZ5IGl0IGluIG9wdGlvbnMKKwkqIC1kZXBlbmRhbmN5OiAkLmZuLnJlc2l6YWJsZSAtIHdpbGwgc2tpcCBpZiBub3QgZm91bmQKKwkqCisJKiBAc2VlICBfY3JlYXRlKCkKKwkqIEBwYXJhbSB7c3RyaW5nPX0JW3BhbmVzPSIiXQlUaGUgZWRnZShzKSB0byBwcm9jZXNzCisJKi8KKywJaW5pdFJlc2l6YWJsZSA9IGZ1bmN0aW9uIChwYW5lcykgeworCQl2YXIJZHJhZ2dpbmdBdmFpbGFibGUgPSAkLmxheW91dC5wbHVnaW5zLmRyYWdnYWJsZQorCQksCXNpZGUgLy8gc2V0IGluIHN0YXJ0KCkKKwkJOworCQlwYW5lcyA9IHBhbmVzID8gcGFuZXMuc3BsaXQoIiwiKSA6IF9jLmJvcmRlclBhbmVzOworCisJCSQuZWFjaChwYW5lcywgZnVuY3Rpb24gKGlkeCwgcGFuZSkgeworCQkJdmFyIG8gPSBvcHRpb25zW3BhbmVdOworCQkJaWYgKCFkcmFnZ2luZ0F2YWlsYWJsZSB8fCAhJFBzW3BhbmVdIHx8ICFvLnJlc2l6YWJsZSkgeworCQkJCW8ucmVzaXphYmxlID0gZmFsc2U7CisJCQkJcmV0dXJuIHRydWU7IC8vIHNraXAgdG8gbmV4dAorCQkJfQorCisJCQl2YXIgcwkJPSBzdGF0ZVtwYW5lXQorCQkJLAl6CQk9IG9wdGlvbnMuekluZGV4ZXMKKwkJCSwJYwkJPSBfY1twYW5lXQorCQkJLAlzaWRlCT0gYy5kaXI9PSJob3J6IiA/ICJ0b3AiIDogImxlZnQiCisJCQksCW9wRWRnZQk9IF9jLm9wcG9zaXRlRWRnZVtwYW5lXQorCQkJLAltYXNrcwk9ICBwYW5lICsiLGNlbnRlciwiKyBvcEVkZ2UgKyAoYy5kaXI9PSJob3J6IiA/ICIsd2VzdCxlYXN0IiA6ICIiKQorCQkJLAkkUCAJCT0gJFBzW3BhbmVdCisJCQksCSRSCQk9ICRSc1twYW5lXQorCQkJLAliYXNlCT0gby5yZXNpemVyQ2xhc3MKKwkJCSwJbGFzdFBvcwk9IDAgLy8gdXNlZCB3aGVuIGxpdmUtcmVzaXppbmcKKwkJCSwJciwgbGl2ZSAvLyBzZXQgaW4gc3RhcnQgYmVjYXVzZSBtYXkgY2hhbmdlCisJCQkvLwknZHJhZycgY2xhc3NlcyBhcmUgYXBwbGllZCB0byB0aGUgT1JJR0lOQUwgcmVzaXplci1iYXIgd2hpbGUgZHJhZ2dpbmcgaXMgaW4gcHJvY2VzcworCQkJLAlyZXNpemVyQ2xhc3MJCT0gYmFzZSsiLWRyYWciCQkJCS8vIHJlc2l6ZXItZHJhZworCQkJLAlyZXNpemVyUGFuZUNsYXNzCT0gYmFzZSsiLSIrcGFuZSsiLWRyYWciCQkvLyByZXNpemVyLW5vcnRoLWRyYWcKKwkJCS8vCSdoZWxwZXInIGNsYXNzIGlzIGFwcGxpZWQgdG8gdGhlIENMT05FRCByZXNpemVyLWJhciB3aGlsZSBpdCBpcyBiZWluZyBkcmFnZ2VkCisJCQksCWhlbHBlckNsYXNzCQkJPSBiYXNlKyItZHJhZ2dpbmciCQkJLy8gcmVzaXplci1kcmFnZ2luZworCQkJLAloZWxwZXJQYW5lQ2xhc3MJCT0gYmFzZSsiLSIrcGFuZSsiLWRyYWdnaW5nIiAvLyByZXNpemVyLW5vcnRoLWRyYWdnaW5nCisJCQksCWhlbHBlckxpbWl0Q2xhc3MJPSBiYXNlKyItZHJhZ2dpbmctbGltaXQiCS8vIHJlc2l6ZXItZHJhZworCQkJLAloZWxwZXJQYW5lTGltaXRDbGFzcyA9IGJhc2UrIi0iK3BhbmUrIi1kcmFnZ2luZy1saW1pdCIJLy8gcmVzaXplci1ub3J0aC1kcmFnCisJCQksCWhlbHBlckNsYXNzZXNTZXQJPSBmYWxzZSAJCQkJCS8vIGxvZ2ljIHZhcgorCQkJOworCisJCQlpZiAoIXMuaXNDbG9zZWQpCisJCQkJJFIuYXR0cigidGl0bGUiLCBvLnRpcHMuUmVzaXplKQorCQkJCSAgLmNzcygiY3Vyc29yIiwgby5yZXNpemVyQ3Vyc29yKTsgLy8gbi1yZXNpemUsIHMtcmVzaXplLCBldGMKKworCQkJJFIuZHJhZ2dhYmxlKHsKKwkJCQljb250YWlubWVudDoJJE5bMF0gLy8gbGltaXQgcmVzaXppbmcgdG8gbGF5b3V0IGNvbnRhaW5lcgorCQkJLAlheGlzOgkJCShjLmRpcj09ImhvcnoiID8gInkiIDogIngiKSAvLyBsaW1pdCByZXNpemluZyB0byBob3J6IG9yIHZlcnQgYXhpcworCQkJLAlkZWxheToJCQkwCisJCQksCWRpc3RhbmNlOgkJMQorCQkJLAlncmlkOgkJCW8ucmVzaXppbmdHcmlkCisJCQkvLwliYXNpYyBmb3JtYXQgZm9yIGhlbHBlciAtIHN0eWxlIGl0IHVzaW5nIGNsYXNzOiAudWktZHJhZ2dhYmxlLWRyYWdnaW5nCisJCQksCWhlbHBlcjoJCQkiY2xvbmUiCisJCQksCW9wYWNpdHk6CQlvLnJlc2l6ZXJEcmFnT3BhY2l0eQorCQkJLAlhZGRDbGFzc2VzOgkJZmFsc2UgLy8gYXZvaWQgdWktc3RhdGUtZGlzYWJsZWQgY2xhc3Mgd2hlbiBkaXNhYmxlZAorCQkJLy8sCWlmcmFtZUZpeDoJCW8uZHJhZ2dhYmxlSWZyYW1lRml4IC8vIFRPRE86IGNvbnNpZGVyIHVzaW5nIHdoZW4gYnVnIGlzIGZpeGVkCisJCQksCXpJbmRleDoJCQl6LnJlc2l6ZXJfZHJhZworCisJCQksCXN0YXJ0OiBmdW5jdGlvbiAoZSwgdWkpIHsKKwkJCQkJLy8gUkVGUkVTSCBvcHRpb25zICYgc3RhdGUgcG9pbnRlcnMgaW4gY2FzZSB3ZSB1c2VkIHN3YXBQYW5lcworCQkJCQlvID0gb3B0aW9uc1twYW5lXTsKKwkJCQkJcyA9IHN0YXRlW3BhbmVdOworCQkJCQkvLyByZS1yZWFkIG9wdGlvbnMKKwkJCQkJbGl2ZSA9IG8ubGl2ZVBhbmVSZXNpemluZzsKKworCQkJCQkvLyBvbmRyYWdfc3RhcnQgY2FsbGJhY2sgLSB3aWxsIENBTkNFTCBoaWRlIGlmIHJldHVybnMgZmFsc2UKKwkJCQkJLy8gVE9ETzogZHJhZ2dpbmcgQ0FOTk9UIGJlIGNhbmNlbGxlZCBsaWtlIHRoaXMsIHNvIHNlZSBpZiB0aGVyZSBpcyBhIHdheT8KKwkJCQkJaWYgKGZhbHNlID09PSBfcnVuQ2FsbGJhY2tzKCJvbmRyYWdfc3RhcnQiLCBwYW5lKSkgcmV0dXJuIGZhbHNlOworCisJCQkJCXMuaXNSZXNpemluZwk9IHRydWU7IC8vIHByZXZlbnQgcGFuZSBmcm9tIGNsb3Npbmcgd2hpbGUgcmVzaXppbmcKKwkJCQkJdGltZXIuY2xlYXIocGFuZSsiX2Nsb3NlU2xpZGVyIik7IC8vIGp1c3QgaW4gY2FzZSBhbHJlYWR5IHRyaWdnZXJlZAorCisJCQkJCS8vIFNFVCBSRVNJWkVSIExJTUlUUyAtIHVzZWQgaW4gZHJhZygpCisJCQkJCXNldFNpemVMaW1pdHMocGFuZSk7IC8vIHVwZGF0ZSBwYW5lL3Jlc2l6ZXIgc3RhdGUKKwkJCQkJciA9IHMucmVzaXplclBvc2l0aW9uOworCQkJCQlsYXN0UG9zID0gdWkucG9zaXRpb25bIHNpZGUgXQorCisJCQkJCSRSLmFkZENsYXNzKCByZXNpemVyQ2xhc3MgKyIgIisgcmVzaXplclBhbmVDbGFzcyApOyAvLyBhZGQgZHJhZyBjbGFzc2VzCisJCQkJCWhlbHBlckNsYXNzZXNTZXQgPSBmYWxzZTsgLy8gcmVzZXQgbG9naWMgdmFyIC0gc2VlIGRyYWcoKQorCisJCQkJCS8vIERJU0FCTEUgVEVYVCBTRUxFQ1RJT04gKHByb2JhYmx5IGFscmVhZHkgZG9uZSBieSByZXNpemVyLm1vdXNlT3ZlcikKKwkJCQkJJCgnYm9keScpLmRpc2FibGVTZWxlY3Rpb24oKTsgCisKKwkJCQkJLy8gTUFTSyBQQU5FUyBDT05UQUlOSU5HIElGUkFNRVMsIEFQUExFVFMgT1IgT1RIRVIgVFJPVUJMRVNPTUUgRUxFTUVOVFMKKwkJCQkJc2hvd01hc2tzKCBtYXNrcyApOworCQkJCX0KKworCQkJLAlkcmFnOiBmdW5jdGlvbiAoZSwgdWkpIHsKKwkJCQkJaWYgKCFoZWxwZXJDbGFzc2VzU2V0KSB7IC8vIGNhbiBvbmx5IGFkZCBjbGFzc2VzIGFmdGVyIGNsb25lIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBET00KKwkJCQkJCS8vJCgiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpCisJCQkJCQl1aS5oZWxwZXIKKwkJCQkJCQkuYWRkQ2xhc3MoIGhlbHBlckNsYXNzICsiICIrIGhlbHBlclBhbmVDbGFzcyApIC8vIGFkZCBoZWxwZXIgY2xhc3NlcworCQkJCQkJCS5jc3MoeyByaWdodDogImF1dG8iLCBib3R0b206ICJhdXRvIiB9KQkvLyBmaXggZGlyPSJydGwiIGlzc3VlCisJCQkJCQkJLmNoaWxkcmVuKCkuY3NzKCJ2aXNpYmlsaXR5IiwiaGlkZGVuIikJLy8gaGlkZSB0b2dnbGVyIGluc2lkZSBkcmFnZ2VkIHJlc2l6ZXItYmFyCisJCQkJCQk7CisJCQkJCQloZWxwZXJDbGFzc2VzU2V0ID0gdHJ1ZTsKKwkJCQkJCS8vIGRyYWdnYWJsZSBidWchPyBSRS1TRVQgekluZGV4IHRvIHByZXZlbnQgRS9XIHJlc2l6ZS1iYXIgc2hvd2luZyB0aHJvdWdoIE4vUyBwYW5lIQorCQkJCQkJaWYgKHMuaXNTbGlkaW5nKSAkUHNbcGFuZV0uY3NzKCJ6SW5kZXgiLCB6LnBhbmVfc2xpZGluZyk7CisJCQkJCX0KKwkJCQkJLy8gQ09OVEFJTiBSRVNJWkVSLUJBUiBUTyBSRVNJWklORyBMSU1JVFMKKwkJCQkJdmFyIGxpbWl0ID0gMDsKKwkJCQkJaWYgKHVpLnBvc2l0aW9uW3NpZGVdIDwgci5taW4pIHsKKwkJCQkJCXVpLnBvc2l0aW9uW3NpZGVdID0gci5taW47CisJCQkJCQlsaW1pdCA9IC0xOworCQkJCQl9CisJCQkJCWVsc2UgaWYgKHVpLnBvc2l0aW9uW3NpZGVdID4gci5tYXgpIHsKKwkJCQkJCXVpLnBvc2l0aW9uW3NpZGVdID0gci5tYXg7CisJCQkJCQlsaW1pdCA9IDE7CisJCQkJCX0KKwkJCQkJLy8gQUREL1JFTU9WRSBkcmFnZ2luZy1saW1pdCBDTEFTUworCQkJCQlpZiAobGltaXQpIHsKKwkJCQkJCXVpLmhlbHBlci5hZGRDbGFzcyggaGVscGVyTGltaXRDbGFzcyArIiAiKyBoZWxwZXJQYW5lTGltaXRDbGFzcyApOyAvLyBhdCBkcmFnZ2luZy1saW1pdAorCQkJCQkJd2luZG93LmRlZmF1bHRTdGF0dXMgPSAobGltaXQ+MCAmJiBwYW5lLm1hdGNoKC8obm9ydGh8d2VzdCkvKSkgfHwgKGxpbWl0PDAgJiYgcGFuZS5tYXRjaCgvKHNvdXRofGVhc3QpLykpID8gby50aXBzLm1heFNpemVXYXJuaW5nIDogby50aXBzLm1pblNpemVXYXJuaW5nOworCQkJCQl9CisJCQkJCWVsc2UgeworCQkJCQkJdWkuaGVscGVyLnJlbW92ZUNsYXNzKCBoZWxwZXJMaW1pdENsYXNzICsiICIrIGhlbHBlclBhbmVMaW1pdENsYXNzICk7IC8vIG5vdCBhdCBkcmFnZ2luZy1saW1pdAorCQkJCQkJd2luZG93LmRlZmF1bHRTdGF0dXMgPSAiIjsKKwkJCQkJfQorCQkJCQkvLyBEWU5BTUlDQUxMWSBSRVNJWkUgUEFORVMgSUYgT1BUSU9OIEVOQUJMRUQKKwkJCQkJLy8gd29uJ3QgdHJpZ2dlciB1bmxlc3MgcmVzaXplciBoYXMgYWN0dWFsbHkgbW92ZWQhCisJCQkJCWlmIChsaXZlICYmIE1hdGguYWJzKHVpLnBvc2l0aW9uW3NpZGVdIC0gbGFzdFBvcykgPj0gby5saXZlUmVzaXppbmdUb2xlcmFuY2UpIHsKKwkJCQkJCWxhc3RQb3MgPSB1aS5wb3NpdGlvbltzaWRlXTsKKwkJCQkJCXJlc2l6ZVBhbmVzKGUsIHVpLCBwYW5lKQorCQkJCQl9CisJCQkJfQorCisJCQksCXN0b3A6IGZ1bmN0aW9uIChlLCB1aSkgeworCQkJCQkkKCdib2R5JykuZW5hYmxlU2VsZWN0aW9uKCk7IC8vIFJFLUVOQUJMRSBURVhUIFNFTEVDVElPTgorCQkJCQl3aW5kb3cuZGVmYXVsdFN0YXR1cyA9ICIiOyAvLyBjbGVhciAncmVzaXppbmcgbGltaXQnIG1lc3NhZ2UgZnJvbSBzdGF0dXNiYXIKKwkJCQkJJFIucmVtb3ZlQ2xhc3MoIHJlc2l6ZXJDbGFzcyArIiAiKyByZXNpemVyUGFuZUNsYXNzICk7IC8vIHJlbW92ZSBkcmFnIGNsYXNzZXMgZnJvbSBSZXNpemVyCisJCQkJCXMuaXNSZXNpemluZyA9IGZhbHNlOworCQkJCQlyZXNpemVQYW5lcyhlLCB1aSwgcGFuZSwgdHJ1ZSwgbWFza3MpOyAvLyB0cnVlID0gcmVzaXppbmdEb25lCisJCQkJfQorCisJCQl9KTsKKwkJfSk7CisKKwkJLyoqCisJCSogcmVzaXplUGFuZXMKKwkJKgorCQkqIFN1Yi1yb3V0aW5lIGNhbGxlZCBmcm9tIHN0b3AoKSAtIGFuZCBkcmFnKCkgaWYgbGl2ZVBhbmVSZXNpemluZworCQkqCisJCSogQHBhcmFtIHshT2JqZWN0fQkJZXZ0CisJCSogQHBhcmFtIHshT2JqZWN0fQkJdWkKKwkJKiBAcGFyYW0ge3N0cmluZ30JCXBhbmUKKwkJKiBAcGFyYW0ge2Jvb2xlYW49fQkJW3Jlc2l6aW5nRG9uZT1mYWxzZV0KKwkJKi8KKwkJdmFyIHJlc2l6ZVBhbmVzID0gZnVuY3Rpb24gKGV2dCwgdWksIHBhbmUsIHJlc2l6aW5nRG9uZSwgbWFza3MpIHsKKwkJCXZhcglkcmFnUG9zCT0gdWkucG9zaXRpb24KKwkJCSwJYwkJPSBfY1twYW5lXQorCQkJLAlvCQk9IG9wdGlvbnNbcGFuZV0KKwkJCSwJcwkJPSBzdGF0ZVtwYW5lXQorCQkJLAlyZXNpemVyUG9zCisJCQk7CisJCQlzd2l0Y2ggKHBhbmUpIHsKKwkJCQljYXNlICJub3J0aCI6CXJlc2l6ZXJQb3MgPSBkcmFnUG9zLnRvcDsgYnJlYWs7CisJCQkJY2FzZSAid2VzdCI6CXJlc2l6ZXJQb3MgPSBkcmFnUG9zLmxlZnQ7IGJyZWFrOworCQkJCWNhc2UgInNvdXRoIjoJcmVzaXplclBvcyA9IHNDLm9mZnNldEhlaWdodCAtIGRyYWdQb3MudG9wICAtIG8uc3BhY2luZ19vcGVuOyBicmVhazsKKwkJCQljYXNlICJlYXN0IjoJcmVzaXplclBvcyA9IHNDLm9mZnNldFdpZHRoICAtIGRyYWdQb3MubGVmdCAtIG8uc3BhY2luZ19vcGVuOyBicmVhazsKKwkJCX07CisJCQkvLyByZW1vdmUgY29udGFpbmVyIG1hcmdpbiBmcm9tIHJlc2l6ZXIgcG9zaXRpb24gdG8gZ2V0IHRoZSBwYW5lIHNpemUKKwkJCXZhciBuZXdTaXplID0gcmVzaXplclBvcyAtIHNDWyJpbnNldCIrIGMuc2lkZV07CisKKwkJCS8vIERpc2FibGUgT1IgUmVzaXplIE1hc2socykgY3JlYXRlZCBpbiBkcmFnLnN0YXJ0CisJCQlpZiAoIXJlc2l6aW5nRG9uZSkgeworCQkJCS8vIGVuc3VyZSB3ZSBtZWV0IGxpdmVSZXNpemluZ1RvbGVyYW5jZSBjcml0ZXJpYQorCQkJCWlmIChNYXRoLmFicyhuZXdTaXplIC0gcy5zaXplKSA8IG8ubGl2ZVJlc2l6aW5nVG9sZXJhbmNlKQorCQkJCQlyZXR1cm47IC8vIFNLSVAgcmVzaXplIHRoaXMgdGltZQorCQkJCS8vIHJlc2l6ZSB0aGUgcGFuZQorCQkJCW1hbnVhbFNpemVQYW5lKHBhbmUsIG5ld1NpemUsIGZhbHNlLCB0cnVlKTsgLy8gdHJ1ZSA9IG5vQW5pbWF0aW9uCisJCQkJc2l6ZU1hc2tzKCk7IC8vIHJlc2l6ZSBhbGwgdmlzaWJsZSBtYXNrcworCQkJfQorCQkJZWxzZSB7IC8vIHJlc2l6aW5nRG9uZQorCQkJCS8vIG9uZHJhZ19lbmQgY2FsbGJhY2sKKwkJCQlpZiAoZmFsc2UgIT09IF9ydW5DYWxsYmFja3MoIm9uZHJhZ19lbmQiLCBwYW5lKSkKKwkJCQkJbWFudWFsU2l6ZVBhbmUocGFuZSwgbmV3U2l6ZSwgZmFsc2UsIHRydWUpOyAvLyB0cnVlID0gbm9BbmltYXRpb24KKwkJCQloaWRlTWFza3MoKTsgLy8gaGlkZSBhbGwgbWFza3MsIHdoaWNoIGluY2x1ZGUgcGFuZXMgd2l0aCAnY29udGVudC9pZnJhbWUtbWFza3MnCisJCQkJaWYgKHMuaXNTbGlkaW5nICYmIG1hc2tzKSAvLyBSRS1TSE9XIG9ubHkgJ29iamVjdC1tYXNrcycgc28gb2JqZWN0cyB3b24ndCBzaG93IHRocm91Z2ggc2xpZGluZyBwYW5lCisJCQkJCXNob3dNYXNrcyggbWFza3MsIHRydWUgKTsgLy8gdHJ1ZSA9IG9ubHlGb3JPYmplY3RzCisJCQl9CisJCX07CisJfQorCisJLyoqCisJICoJc2l6ZU1hc2sKKwkgKgorCSAqCU5lZWRlZCB0byBvdmVybGF5IGEgRElWIG92ZXIgYW4gSUZSQU1FLXBhbmUgYmVjYXVzZSBtYXNrIENBTk5PVCBiZSAqaW5zaWRlKiB0aGUgcGFuZQorCSAqCUNhbGxlZCB3aGVuIG1hc2sgY3JlYXRlZCwgYW5kIGR1cmluZyBsaXZlUGFuZVJlc2l6aW5nCisJICovCissCXNpemVNYXNrID0gZnVuY3Rpb24gKCkgeworCQl2YXIgJE0JCT0gJCh0aGlzKQorCQksCXBhbmUJPSAkTS5kYXRhKCJsYXlvdXRNYXNrIikgLy8gZWc6ICJ3ZXN0IgorCQksCXMJCT0gc3RhdGVbcGFuZV0KKwkJOworCQkvLyBvbmx5IG1hc2tzIG92ZXIgYW4gSUZSQU1FLXBhbmUgbmVlZCBtYW51YWwgcmVzaXppbmcKKwkJaWYgKHMudGFnTmFtZSA9PSAiSUZSQU1FIiAmJiBzLmlzVmlzaWJsZSkgLy8gbm8gbmVlZCB0byBtYXNrIGNsb3NlZC9oaWRkZW4gcGFuZXMKKwkJCSRNLmNzcyh7CisJCQkJdG9wOglzLm9mZnNldFRvcAorCQkJLAlsZWZ0OglzLm9mZnNldExlZnQKKwkJCSwJd2lkdGg6CXMub3V0ZXJXaWR0aAorCQkJLAloZWlnaHQ6CXMub3V0ZXJIZWlnaHQKKwkJCX0pOworCQkvKiBBTFQgTWV0aG9kLi4uCisJCXZhciAkUCA9ICRQc1twYW5lXTsKKwkJJE0uY3NzKCAkUC5wb3NpdGlvbigpICkuY3NzKHsgd2lkdGg6ICRQWzBdLm9mZnNldFdpZHRoLCBoZWlnaHQ6ICRQWzBdLm9mZnNldEhlaWdodCB9KTsKKwkJKi8KKwl9CissCXNpemVNYXNrcyA9IGZ1bmN0aW9uICgpIHsKKwkJJE1zLmVhY2goIHNpemVNYXNrICk7IC8vIHJlc2l6ZSBhbGwgJ3Zpc2libGUnIG1hc2tzCisJfQorCissCXNob3dNYXNrcyA9IGZ1bmN0aW9uIChwYW5lcywgb25seUZvck9iamVjdHMpIHsKKwkJdmFyIGEJPSBwYW5lcyA/IHBhbmVzLnNwbGl0KCIsIikgOiAkLmxheW91dC5jb25maWcuYWxsUGFuZXMKKwkJLAl6CT0gb3B0aW9ucy56SW5kZXhlcworCQksCW8sIHM7CisJCSQuZWFjaChhLCBmdW5jdGlvbihpLHApeworCQkJcyA9IHN0YXRlW3BdOworCQkJbyA9IG9wdGlvbnNbcF07CisJCQlpZiAocy5pc1Zpc2libGUgJiYgKCAoIW9ubHlGb3JPYmplY3RzICYmIG8ubWFza0NvbnRlbnRzKSB8fCBvLm1hc2tPYmplY3RzICkpIHsKKwkJCQlnZXRNYXNrcyhwKS5lYWNoKGZ1bmN0aW9uKCl7CisJCQkJCXNpemVNYXNrLmNhbGwodGhpcyk7CisJCQkJCXRoaXMuc3R5bGUuekluZGV4ID0gcy5pc1NsaWRpbmcgPyB6LnBhbmVfc2xpZGluZysxIDogei5wYW5lX25vcm1hbCsxCisJCQkJCXRoaXMuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisJCQkJfSk7CisJCQl9CisJCX0pOworCX0KKworLAloaWRlTWFza3MgPSBmdW5jdGlvbiAoKSB7CisJCS8vIGVuc3VyZSBubyBwYW5lIGlzIHJlc2l6aW5nIC0gY291bGQgYmUgYSB0aW1pbmcgaXNzdWUKKwkJdmFyIHNraXA7CisJCSQuZWFjaCggJC5sYXlvdXQuY29uZmlnLmJvcmRlclBhbmVzLCBmdW5jdGlvbihpLHApeworCQkJaWYgKHN0YXRlW3BdLmlzUmVzaXppbmcpIHsKKwkJCQlza2lwID0gdHJ1ZTsKKwkJCQlyZXR1cm4gZmFsc2U7IC8vIEJSRUFLCisJCQl9CisJCX0pOworCQlpZiAoIXNraXApCisJCQkkTXMuaGlkZSgpOyAvLyBoaWRlIEFMTCBtYXNrcworCX0KKworLAlnZXRNYXNrcyA9IGZ1bmN0aW9uIChwYW5lKSB7CisJCXZhciAkTWFza3MJPSAkKFtdKQorCQksCSRNLCBpID0gMCwgYyA9ICRNcy5sZW5ndGgKKwkJOworCQlmb3IgKDsgaTxjOyBpKyspIHsKKwkJCSRNID0gJE1zLmVxKGkpOworCQkJaWYgKCRNLmRhdGEoImxheW91dE1hc2siKSA9PT0gcGFuZSkKKwkJCQkkTWFza3MgPSAkTWFza3MuYWRkKCAkTSApOworCQl9CisJCWlmICgkTWFza3MubGVuZ3RoKQorCQkJcmV0dXJuICRNYXNrczsKKwkJZWxzZQorCQkJcmV0dXJuIGNyZWF0ZU1hc2tzKHBhbmUpOworCX0KKworCS8qKgorCSAqCWNyZWF0ZU1hc2tzCisJICoKKwkgKglHZW5lcmF0ZXMgYm90aCBESVYgKEFMV0FZUyB1c2VkKSBhbmQgSUZSQU1FIChvcHRpb25hbCkgZWxlbWVudHMgYXMgbWFza3MKKwkgKglBbiBJRlJBTUUgbWFzayBpcyBjcmVhdGVkICp1bmRlciogdGhlIERJViB3aGVuIG1hc2tPYmplY3RzPXRydWUsIGJlY2F1c2UgYSBESVYgY2Fubm90IG1hc2sgYW4gYXBwbGV0CisJICovCissCWNyZWF0ZU1hc2tzID0gZnVuY3Rpb24gKHBhbmUpIHsKKwkJdmFyCisJCQkkUAkJPSAkUHNbcGFuZV0KKwkJLAlzCQk9IHN0YXRlW3BhbmVdCisJCSwJbwkJPSBvcHRpb25zW3BhbmVdCisJCSwJegkJPSBvcHRpb25zLnpJbmRleGVzCisJCS8vLAlvYmpNYXNrCT0gby5tYXNrT2JqZWN0cyAmJiBzLnRhZ05hbWUgIT0gIklGUkFNRSIgLy8gY2hlY2sgZm9yIG9wdGlvbgorCQksCSRNYXNrcwk9ICQoW10pCisJCSwJaXNJZnJhbWUsIGVsLCAkTSwgY3NzLCBpCisJCTsKKwkJaWYgKCFvLm1hc2tDb250ZW50cyAmJiAhby5tYXNrT2JqZWN0cykgcmV0dXJuICRNYXNrczsKKwkJLy8gaWYgby5tYXNrT2JqZWN0cz10cnVlLCB0aGVuIGxvb3AgVFdJQ0UgdG8gY3JlYXRlIEJPVEgga2luZHMgb2YgbWFzaywgZWxzZSBvbmx5IGNyZWF0ZSBhIERJVgorCQlmb3IgKGk9MDsgaSA8IChvLm1hc2tPYmplY3RzID8gMiA6IDEpOyBpKyspIHsKKwkJCWlzSWZyYW1lID0gby5tYXNrT2JqZWN0cyAmJiBpPT0wOworCQkJZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBpc0lmcmFtZSA/ICJpZnJhbWUiIDogImRpdiIgKTsKKwkJCSRNID0gJChlbCkuZGF0YSgibGF5b3V0TWFzayIsIHBhbmUpOyAvLyBhZGQgZGF0YSB0byByZWxhdGUgbWFzayB0byBwYW5lCisJCQllbC5jbGFzc05hbWUgPSAidWktbGF5b3V0LW1hc2sgdWktbGF5b3V0LW1hc2stIisgcGFuZTsgLy8gZm9yIHVzZXIgc3R5bGluZworCQkJY3NzID0gZWwuc3R5bGU7CisJCQkvLyBzdHlsZXMgY29tbW9uIHRvIGJvdGggRElWcyBhbmQgSUZSQU1FUworCQkJY3NzLmRpc3BsYXkJCT0gImJsb2NrIjsKKwkJCWNzcy5wb3NpdGlvbgk9ICJhYnNvbHV0ZSI7CisJCQlpZiAoaXNJZnJhbWUpIHsgLy8gSUZSQU1FLW9ubHkgcHJvcHMKKwkJCQllbC5mcmFtZWJvcmRlciA9IDA7CisJCQkJZWwuc3JjCQk9ICJhYm91dDpibGFuayI7CisJCQkJY3NzLm9wYWNpdHkJPSAwOworCQkJCWNzcy5maWx0ZXIJPSAiQWxwaGEoT3BhY2l0eT0nMCcpIjsKKwkJCQljc3MuYm9yZGVyCT0gMDsKKwkJCX0KKwkJCS8vIGlmIHBhbmUgaXMgYW4gSUZSQU1FLCB0aGVuIG11c3QgbWFzayB0aGUgcGFuZSBpdHNlbGYKKwkJCWlmIChzLnRhZ05hbWUgPT0gIklGUkFNRSIpIHsKKwkJCQkvLyBOT1RFIHNpemluZyBkb25lIGJ5IGEgc3Vicm91dGluZSBzbyBjYW4gYmUgY2FsbGVkIGR1cmluZyBsaXZlLXJlc2l6aW5nCisJCQkJY3NzLnpJbmRleAk9IHoucGFuZV9ub3JtYWwrMTsgLy8gMS1oaWdoZXIgdGhhbiBwYW5lCisJCQkJJE4uYXBwZW5kKCBlbCApOyAvLyBhcHBlbmQgdG8gTEFZT1VUIENPTlRBSU5FUgorCQkJfQorCQkJLy8gb3RoZXJ3aXNlIHB1dCBtYXNrcyAqaW5zaWRlIHRoZSBwYW5lKiB0byBtYXNrIGl0cyBjb250ZW50cworCQkJZWxzZSB7CisJCQkJJE0uYWRkQ2xhc3MoInVpLWxheW91dC1tYXNrLWluc2lkZS1wYW5lIik7CisJCQkJY3NzLnpJbmRleAk9IG8ubWFza1ppbmRleCB8fCB6LmNvbnRlbnRfbWFzazsgLy8gdXN1YWxseSAxLCBidXQgY3VzdG9taXphYmxlCisJCQkJY3NzLnRvcAkJPSAwOworCQkJCWNzcy5sZWZ0CT0gMDsKKwkJCQljc3Mud2lkdGgJPSAiMTAwJSI7CisJCQkJY3NzLmhlaWdodAk9ICIxMDAlIjsKKwkJCQkkUC5hcHBlbmQoIGVsICk7IC8vIGFwcGVuZCBJTlNJREUgcGFuZSBlbGVtZW50CisJCQl9CisJCQkvLyBhZGQgdG8gcmV0dXJuIG9iamVjdAorCQkJJE1hc2tzID0gJE1hc2tzLmFkZCggZWwgKTsKKwkJCS8vIGFkZCBNYXNrIHRvIGNhY2hlZCBhcnJheSBzbyBjYW4gYmUgcmVzaXplZCAmIHJldXNlZAorCQkJJE1zID0gJE1zLmFkZCggZWwgKTsKKwkJfQorCQlyZXR1cm4gJE1hc2tzOworCX0KKworCisJLyoqCisJKiBEZXN0cm95IHRoaXMgbGF5b3V0IGFuZCByZXNldCBhbGwgZWxlbWVudHMKKwkqCisJKiBAcGFyYW0ge2Jvb2xlYW49fQlbZGVzdHJveUNoaWxkcmVuPWZhbHNlXQkJRGVzdG9yeSBDaGlsZC1MYXlvdXRzIGZpcnN0PworCSovCissCWRlc3Ryb3kgPSBmdW5jdGlvbiAoZXZ0X29yX2Rlc3Ryb3lDaGlsZHJlbiwgZGVzdHJveUNoaWxkcmVuKSB7CisJCS8vIFVOQklORCBsYXlvdXQgZXZlbnRzIGFuZCByZW1vdmUgZ2xvYmFsIG9iamVjdAorCQkkKHdpbmRvdykudW5iaW5kKCIuIisgc0lEKTsJCS8vIHJlc2l6ZSAmIHVubG9hZAorCQkkKGRvY3VtZW50KS51bmJpbmQoIi4iKyBzSUQpOwkvLyBrZXlEb3duIChob3RrZXlzKQorCisJCWlmICh0eXBlb2YgZXZ0X29yX2Rlc3Ryb3lDaGlsZHJlbiA9PT0gIm9iamVjdCIpCisJCQkvLyBzdG9wUHJvcGFnYXRpb24gaWYgY2FsbGVkIGJ5IHRyaWdnZXIoImxheW91dGRlc3Ryb3kiKSAtIHVzZSBldnRQYW5lIHV0aWxpdHkgCisJCQlldnRQYW5lKGV2dF9vcl9kZXN0cm95Q2hpbGRyZW4pOworCQllbHNlIC8vIG5vIGV2ZW50LCBzbyB0cmFuc2ZlciAxc3QgcGFyYW0gdG8gZGVzdHJveUNoaWxkcmVuIHBhcmFtCisJCQlkZXN0cm95Q2hpbGRyZW4gPSBldnRfb3JfZGVzdHJveUNoaWxkcmVuOworCisJCS8vIG5lZWQgdG8gbG9vayBmb3IgcGFyZW50IGxheW91dCBCRUZPUkUgd2UgcmVtb3ZlIHRoZSBjb250YWluZXIgZGF0YSwgZWxzZSBza2lwcyBhIGxldmVsCisJCS8vdmFyIHBhcmVudFBhbmUgPSBJbnN0YW5jZS5oYXNQYXJlbnRMYXlvdXQgPyAkLmxheW91dC5nZXRQYXJlbnRQYW5lSW5zdGFuY2UoICROICkgOiBudWxsOworCisJCS8vIHJlc2V0IGxheW91dC1jb250YWluZXIKKwkJJE4JLmNsZWFyUXVldWUoKQorCQkJLnJlbW92ZURhdGEoImxheW91dCIpCisJCQkucmVtb3ZlRGF0YSgibGF5b3V0Q29udGFpbmVyIikKKwkJCS5yZW1vdmVDbGFzcyhvcHRpb25zLmNvbnRhaW5lckNsYXNzKQorCQkJLnVuYmluZCgiLiIrIHNJRCkgLy8gcmVtb3ZlIEFMTCBMYXlvdXQgZXZlbnRzCisJCTsKKworCQkvLyByZW1vdmUgYWxsIG1hc2sgZWxlbWVudHMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZAorCQkkTXMucmVtb3ZlKCk7CisKKwkJLy8gbG9vcCBhbGwgcGFuZXMgdG8gcmVtb3ZlIGxheW91dCBjbGFzc2VzLCBhdHRyaWJ1dGVzIGFuZCBiaW5kaW5ncworCQkkLmVhY2goX2MuYWxsUGFuZXMsIGZ1bmN0aW9uIChpLCBwYW5lKSB7CisJCQlyZW1vdmVQYW5lKCBwYW5lLCBmYWxzZSwgdHJ1ZSwgZGVzdHJveUNoaWxkcmVuICk7IC8vIHRydWUgPSBza2lwUmVzaXplCisJCX0pOworCisJCS8vIGRvIE5PVCByZXNldCBjb250YWluZXIgQ1NTIGlmIGlzIGEgJ3BhbmUnIChvciAnY29udGVudCcpIGluIGFuIG91dGVyLWxheW91dCAtIGllLCBUSElTIGxheW91dCBpcyAnbmVzdGVkJworCQl2YXIgY3NzID0gImxheW91dENTUyI7CisJCWlmICgkTi5kYXRhKGNzcykgJiYgISROLmRhdGEoImxheW91dFJvbGUiKSkgLy8gUkVTRVQgQ1NTCisJCQkkTi5jc3MoICROLmRhdGEoY3NzKSApLnJlbW92ZURhdGEoY3NzKTsKKworCQkvLyBmb3IgZnVsbC1wYWdlIGxheW91dHMsIGFsc28gcmVzZXQgdGhlIDxIVE1MPiBDU1MKKwkJaWYgKHNDLnRhZ05hbWUgPT09ICJCT0RZIiAmJiAoJE4gPSAkKCJodG1sIikpLmRhdGEoY3NzKSkgLy8gUkVTRVQgPEhUTUw+IENTUworCQkJJE4uY3NzKCAkTi5kYXRhKGNzcykgKS5yZW1vdmVEYXRhKGNzcyk7CisKKwkJLy8gdHJpZ2dlciBwbHVnaW5zIGZvciB0aGlzIGxheW91dCwgaWYgdGhlcmUgYXJlIGFueQorCQlydW5QbHVnaW5DYWxsYmFja3MoIEluc3RhbmNlLCAkLmxheW91dC5vbkRlc3Ryb3kgKTsKKworCQkvLyB0cmlnZ2VyIHN0YXRlLW1hbmFnZW1lbnQgYW5kIG9udW5sb2FkIGNhbGxiYWNrCisJCXVubG9hZCgpOworCisJCS8vIGNsZWFyIHRoZSBJbnN0YW5jZSBvZiBldmVyeXRoaW5nIGV4Y2VwdCBmb3IgY29udGFpbmVyICYgb3B0aW9ucyAoc28gY291bGQgcmVjcmVhdGUpCisJCS8vIFJFLUNSRUFURTogbXlMYXlvdXQgPSBteUxheW91dC5jb250YWluZXIubGF5b3V0KCBteUxheW91dC5vcHRpb25zICk7CisJCWZvciAobiBpbiBJbnN0YW5jZSkKKwkJCWlmICghbi5tYXRjaCgvXihjb250YWluZXJ8b3B0aW9ucykkLykpIGRlbGV0ZSBJbnN0YW5jZVsgbiBdOworCQkvLyBhZGQgYSAnZGVzdHJveWVkJyBmbGFnIHRvIG1ha2UgaXQgZWFzeSB0byBjaGVjaworCQlJbnN0YW5jZS5kZXN0cm95ZWQgPSB0cnVlOworCisJCS8vIGlmIHRoaXMgaXMgYSBjaGlsZCBsYXlvdXQsIENMRUFSIHRoZSBjaGlsZC1wb2ludGVyIGluIHRoZSBwYXJlbnQKKwkJLyogZm9yIG5vdyB0aGUgcG9pbnRlciBSRU1BSU5TLCBidXQgd2l0aCBvbmx5IGNvbnRhaW5lciwgb3B0aW9ucyBhbmQgZGVzdHJveWVkIGtleXMKKwkJaWYgKHBhcmVudFBhbmUpIHsKKwkJCXZhciBsYXlvdXQgPSBwYXJlbnRQYW5lLnBhbmUuZGF0YSgicGFyZW50TGF5b3V0Iik7CisJCQlwYXJlbnRQYW5lLmNoaWxkID0gbGF5b3V0LmNoaWxkcmVuWyBwYXJlbnRQYW5lLm5hbWUgXSA9IG51bGw7CisJCX0KKwkJKi8KKworCQlyZXR1cm4gSW5zdGFuY2U7IC8vIGZvciBjb2RpbmcgY29udmVuaWVuY2UKKwl9CisKKwkvKioKKwkqIFJlbW92ZSBhIHBhbmUgZnJvbSB0aGUgbGF5b3V0IC0gc3Vicm91dGluZSBvZiBkZXN0cm95KCkKKwkqCisJKiBAc2VlICBkZXN0cm95KCkKKwkqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0JZXZ0X29yX3BhbmUJCQlUaGUgcGFuZSB0byBwcm9jZXNzCisJKiBAcGFyYW0ge2Jvb2xlYW49fQkJCVtyZW1vdmU9ZmFsc2VdCQlSZW1vdmUgdGhlIERPTSBlbGVtZW50PworCSogQHBhcmFtIHtib29sZWFuPX0JCQlbc2tpcFJlc2l6ZT1mYWxzZV0JU2tpcCBjYWxsaW5nIHJlc2l6ZUFsbCgpPworCSogQHBhcmFtIHtib29sZWFuPX0JCQlbZGVzdHJveUNoaWxkPXRydWVdCURlc3Ryb3kgQ2hpbGQtbGF5b3V0cz8gSWYgbm90IHBhc3NlZCwgb2JleXMgb3B0aW9ucyBzZXR0aW5nCisJKi8KKywJcmVtb3ZlUGFuZSA9IGZ1bmN0aW9uIChldnRfb3JfcGFuZSwgcmVtb3ZlLCBza2lwUmVzaXplLCBkZXN0cm95Q2hpbGQpIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJdmFyCXBhbmUgPSBldnRQYW5lLmNhbGwodGhpcywgZXZ0X29yX3BhbmUpCisJCSwJJFAJPSAkUHNbcGFuZV0KKwkJLAkkQwk9ICRDc1twYW5lXQorCQksCSRSCT0gJFJzW3BhbmVdCisJCSwJJFQJPSAkVHNbcGFuZV0KKwkJOworCQkvLyBOT1RFOiBlbGVtZW50cyBjYW4gc3RpbGwgZXhpc3QgZXZlbiBhZnRlciByZW1vdmUoKQorCQkvLwkJc28gY2hlY2sgZm9yIG1pc3NpbmcgZGF0YSgpLCB3aGljaCBpcyBjbGVhcmVkIGJ5IHJlbW92ZWQoKQorCQlpZiAoJFAgJiYgJC5pc0VtcHR5T2JqZWN0KCAkUC5kYXRhKCkgKSkgJFAgPSBmYWxzZTsKKwkJaWYgKCRDICYmICQuaXNFbXB0eU9iamVjdCggJEMuZGF0YSgpICkpICRDID0gZmFsc2U7CisJCWlmICgkUiAmJiAkLmlzRW1wdHlPYmplY3QoICRSLmRhdGEoKSApKSAkUiA9IGZhbHNlOworCQlpZiAoJFQgJiYgJC5pc0VtcHR5T2JqZWN0KCAkVC5kYXRhKCkgKSkgJFQgPSBmYWxzZTsKKworCQlpZiAoJFApICRQLnN0b3AodHJ1ZSwgdHJ1ZSk7CisKKwkJLy8JY2hlY2sgZm9yIGEgY2hpbGQgbGF5b3V0CisJCXZhcglvCT0gb3B0aW9uc1twYW5lXQorCQksCXMJPSBzdGF0ZVtwYW5lXQorCQksCWQJPSAibGF5b3V0IgorCQksCWNzcwk9ICJsYXlvdXRDU1MiCisJCSwJY2hpbGQJPSBjaGlsZHJlbltwYW5lXSB8fCAoJFAgPyAkUC5kYXRhKGQpIDogMCkgfHwgKCRDID8gJEMuZGF0YShkKSA6IDApIHx8IG51bGwKKwkJLAlkZXN0cm95CT0gZGVzdHJveUNoaWxkICE9PSB1bmRlZmluZWQgPyBkZXN0cm95Q2hpbGQgOiBvLmRlc3Ryb3lDaGlsZExheW91dAorCQk7CisKKwkJLy8gRklSU1QgZGVzdHJveSB0aGUgY2hpbGQtbGF5b3V0KHMpCisJCWlmIChkZXN0cm95ICYmIGNoaWxkICYmICFjaGlsZC5kZXN0cm95ZWQpIHsKKwkJCWNoaWxkLmRlc3Ryb3kodHJ1ZSk7CS8vIHRlbGwgY2hpbGQtbGF5b3V0IHRvIGRlc3Ryb3kgQUxMIGl0cyBjaGlsZC1sYXlvdXRzIHRvbworCQkJaWYgKGNoaWxkLmRlc3Ryb3llZCkJLy8gZGVzdHJveSB3YXMgc3VjY2Vzc2Z1bAorCQkJCWNoaWxkID0gbnVsbDsJCS8vIGNsZWFyIHBvaW50ZXIgZm9yIGxvZ2ljIGJlbG93IAorCQl9CisKKwkJaWYgKCRQICYmIHJlbW92ZSAmJiAhY2hpbGQpCisJCQkkUC5yZW1vdmUoKTsKKwkJZWxzZSBpZiAoJFAgJiYgJFBbMF0pIHsKKwkJCS8vCWNyZWF0ZSBsaXN0IG9mIEFMTCBwYW5lLWNsYXNzZXMgdGhhdCBuZWVkIHRvIGJlIHJlbW92ZWQKKwkJCXZhcglyb290CT0gby5wYW5lQ2xhc3MgLy8gZGVmYXVsdD0idWktbGF5b3V0LXBhbmUiCisJCQksCXBSb290CT0gcm9vdCArIi0iKyBwYW5lIC8vIGVnOiAidWktbGF5b3V0LXBhbmUtd2VzdCIKKwkJCSwJX29wZW4JPSAiLW9wZW4iCisJCQksCV9zbGlkaW5nPSAiLXNsaWRpbmciCisJCQksCV9jbG9zZWQJPSAiLWNsb3NlZCIKKwkJCSwJY2xhc3Nlcwk9IFsJcm9vdCwgcm9vdCtfb3Blbiwgcm9vdCtfY2xvc2VkLCByb290K19zbGlkaW5nLAkJLy8gZ2VuZXJpYyBjbGFzc2VzCisJCQkJCQkJcFJvb3QsIHBSb290K19vcGVuLCBwUm9vdCtfY2xvc2VkLCBwUm9vdCtfc2xpZGluZyBdCS8vIHBhbmUtc3BlY2lmaWMgY2xhc3NlcworCQkJOworCQkJJC5tZXJnZShjbGFzc2VzLCBnZXRIb3ZlckNsYXNzZXMoJFAsIHRydWUpKTsgLy8gQUREIGhvdmVyLWNsYXNzZXMKKwkJCS8vIHJlbW92ZSBhbGwgTGF5b3V0IGNsYXNzZXMgZnJvbSBwYW5lLWVsZW1lbnQKKwkJCSRQCS5yZW1vdmVDbGFzcyggY2xhc3Nlcy5qb2luKCIgIikgKSAvLyByZW1vdmUgQUxMIHBhbmUtY2xhc3NlcworCQkJCS5yZW1vdmVEYXRhKCJwYXJlbnRMYXlvdXQiKQorCQkJCS5yZW1vdmVEYXRhKCJsYXlvdXRQYW5lIikKKwkJCQkucmVtb3ZlRGF0YSgibGF5b3V0Um9sZSIpCisJCQkJLnJlbW92ZURhdGEoImxheW91dEVkZ2UiKQorCQkJCS5yZW1vdmVEYXRhKCJhdXRvSGlkZGVuIikJLy8gaW4gY2FzZSBzZXQKKwkJCQkudW5iaW5kKCIuIisgc0lEKSAvLyByZW1vdmUgQUxMIExheW91dCBldmVudHMKKwkJCQkvLyBUT0RPOiByZW1vdmUgdGhlc2UgZXh0cmEgdW5iaW5kIGNvbW1hbmRzIHdoZW4galF1ZXJ5IGlzIGZpeGVkCisJCQkJLy8udW5iaW5kKCJtb3VzZWVudGVyIisgc0lEKQorCQkJCS8vLnVuYmluZCgibW91c2VsZWF2ZSIrIHNJRCkKKwkJCTsKKwkJCS8vIGRvIE5PVCByZXNldCBDU1MgaWYgdGhpcyBwYW5lL2NvbnRlbnQgaXMgU1RJTEwgdGhlIGNvbnRhaW5lciBvZiBhIG5lc3RlZCBsYXlvdXQhCisJCQkvLyB0aGUgbmVzdGVkIGxheW91dCB3aWxsIHJlc2V0IGl0cyAnY29udGFpbmVyJyBDU1Mgd2hlbi9pZiBpdCBpcyBkZXN0cm95ZWQKKwkJCWlmICgkQyAmJiAkQy5kYXRhKGQpKSB7CisJCQkJLy8gYSBjb250ZW50LWRpdiBtYXkgbm90IGhhdmUgYSBzcGVjaWZpYyB3aWR0aCwgc28gZ2l2ZSBpdCBvbmUgdG8gY29udGFpbiB0aGUgTGF5b3V0CisJCQkJJEMud2lkdGgoICRDLndpZHRoKCkgKTsKKwkJCQljaGlsZC5yZXNpemVBbGwoKTsgLy8gbm93IHJlc2l6ZSB0aGUgTGF5b3V0CisJCQl9CisJCQllbHNlIGlmICgkQykKKwkJCQkkQy5jc3MoICRDLmRhdGEoY3NzKSApLnJlbW92ZURhdGEoY3NzKS5yZW1vdmVEYXRhKCJsYXlvdXRSb2xlIik7CisJCQkvLyByZW1vdmUgcGFuZSBBRlRFUiBjb250ZW50IGluIGNhc2UgdGhlcmUgd2FzIGEgbmVzdGVkIGxheW91dAorCQkJaWYgKCEkUC5kYXRhKGQpKQorCQkJCSRQLmNzcyggJFAuZGF0YShjc3MpICkucmVtb3ZlRGF0YShjc3MpOworCQl9CisKKwkJLy8gUkVNT1ZFIHBhbmUgcmVzaXplciBhbmQgdG9nZ2xlciBlbGVtZW50cworCQlpZiAoJFQpICRULnJlbW92ZSgpOworCQlpZiAoJFIpICRSLnJlbW92ZSgpOworCisJCS8vIENMRUFSIGFsbCBwb2ludGVycyBhbmQgc3RhdGUgZGF0YQorCQlJbnN0YW5jZVtwYW5lXSA9ICRQc1twYW5lXSA9ICRDc1twYW5lXSA9ICRSc1twYW5lXSA9ICRUc1twYW5lXSA9IGNoaWxkcmVuW3BhbmVdID0gZmFsc2U7CisJCXMgPSB7IHJlbW92ZWQ6IHRydWUgfTsKKworCQlpZiAoIXNraXBSZXNpemUpCisJCQlyZXNpemVBbGwoKTsKKwl9CisKKworLyoKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoJICAgQUNUSU9OIE1FVEhPRFMKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICovCisKKywJX2hpZGVQYW5lID0gZnVuY3Rpb24gKHBhbmUpIHsKKwkJdmFyICRQCT0gJFBzW3BhbmVdCisJCSwJbwk9IG9wdGlvbnNbcGFuZV0KKwkJLAlzCT0gJFBbMF0uc3R5bGUKKwkJOworCQlpZiAoby51c2VPZmZzY3JlZW5DbG9zZSkgeworCQkJaWYgKCEkUC5kYXRhKF9jLm9mZnNjcmVlblJlc2V0KSkKKwkJCQkkUC5kYXRhKF9jLm9mZnNjcmVlblJlc2V0LCB7IGxlZnQ6IHMubGVmdCwgcmlnaHQ6IHMucmlnaHQgfSk7CisJCQkkUC5jc3MoIF9jLm9mZnNjcmVlbkNTUyApOworCQl9CisJCWVsc2UKKwkJCSRQLmhpZGUoKS5yZW1vdmVEYXRhKF9jLm9mZnNjcmVlblJlc2V0KTsKKwl9CisKKywJX3Nob3dQYW5lID0gZnVuY3Rpb24gKHBhbmUpIHsKKwkJdmFyICRQCT0gJFBzW3BhbmVdCisJCSwJbwk9IG9wdGlvbnNbcGFuZV0KKwkJLAlvZmYJPSBfYy5vZmZzY3JlZW5DU1MKKwkJLAlvbGQJPSAkUC5kYXRhKF9jLm9mZnNjcmVlblJlc2V0KQorCQksCXMJPSAkUFswXS5zdHlsZQorCQk7CisJCSRQCS5zaG93KCkgLy8gQUxXQVlTIHNob3csIGp1c3QgaW4gY2FzZQorCQkJLnJlbW92ZURhdGEoX2Mub2Zmc2NyZWVuUmVzZXQpOworCQlpZiAoby51c2VPZmZzY3JlZW5DbG9zZSAmJiBvbGQpIHsKKwkJCWlmIChzLmxlZnQgPT0gb2ZmLmxlZnQpCisJCQkJcy5sZWZ0ID0gb2xkLmxlZnQ7CisJCQlpZiAocy5yaWdodCA9PSBvZmYucmlnaHQpCisJCQkJcy5yaWdodCA9IG9sZC5yaWdodDsKKwkJfQorCX0KKworCisJLyoqCisJKiBDb21wbGV0ZWx5ICdoaWRlcycgYSBwYW5lLCBpbmNsdWRpbmcgaXRzIHNwYWNpbmcgLSBhcyBpZiBpdCBkb2VzIG5vdCBleGlzdAorCSogVGhlIHBhbmUgaXMgbm90IGFjdHVhbGx5ICdyZW1vdmVkJyBmcm9tIHRoZSBzb3VyY2UsIHNvIGNhbiB1c2UgJ3Nob3cnIHRvIHVuLWhpZGUgaXQKKwkqCisJKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9CWV2dF9vcl9wYW5lCQkJVGhlIHBhbmUgYmVpbmcgaGlkZGVuLCBpZTogbm9ydGgsIHNvdXRoLCBlYXN0LCBvciB3ZXN0CisJKiBAcGFyYW0ge2Jvb2xlYW49fQkJCVtub0FuaW1hdGlvbj1mYWxzZV0JCisJKi8KKywJaGlkZSA9IGZ1bmN0aW9uIChldnRfb3JfcGFuZSwgbm9BbmltYXRpb24pIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJdmFyCXBhbmUgPSBldnRQYW5lLmNhbGwodGhpcywgZXZ0X29yX3BhbmUpCisJCSwJbwk9IG9wdGlvbnNbcGFuZV0KKwkJLAlzCT0gc3RhdGVbcGFuZV0KKwkJLAkkUAk9ICRQc1twYW5lXQorCQksCSRSCT0gJFJzW3BhbmVdCisJCTsKKwkJaWYgKCEkUCB8fCBzLmlzSGlkZGVuKSByZXR1cm47IC8vIHBhbmUgZG9lcyBub3QgZXhpc3QgT1IgaXMgYWxyZWFkeSBoaWRkZW4KKworCQkvLyBvbmhpZGVfc3RhcnQgY2FsbGJhY2sgLSB3aWxsIENBTkNFTCBoaWRlIGlmIHJldHVybnMgZmFsc2UKKwkJaWYgKHN0YXRlLmluaXRpYWxpemVkICYmIGZhbHNlID09PSBfcnVuQ2FsbGJhY2tzKCJvbmhpZGVfc3RhcnQiLCBwYW5lKSkgcmV0dXJuOworCisJCXMuaXNTbGlkaW5nID0gZmFsc2U7IC8vIGp1c3QgaW4gY2FzZQorCisJCS8vIG5vdyBoaWRlIHRoZSBlbGVtZW50cworCQlpZiAoJFIpICRSLmhpZGUoKTsgLy8gaGlkZSByZXNpemVyLWJhcgorCQlpZiAoIXN0YXRlLmluaXRpYWxpemVkIHx8IHMuaXNDbG9zZWQpIHsKKwkJCXMuaXNDbG9zZWQgPSB0cnVlOyAvLyB0byB0cmlnZ2VyIG9wZW4tYW5pbWF0aW9uIG9uIHNob3coKQorCQkJcy5pc0hpZGRlbiAgPSB0cnVlOworCQkJcy5pc1Zpc2libGUgPSBmYWxzZTsKKwkJCWlmICghc3RhdGUuaW5pdGlhbGl6ZWQpCisJCQkJX2hpZGVQYW5lKHBhbmUpOyAvLyBubyBhbmltYXRpb24gd2hlbiBsb2FkaW5nIHBhZ2UKKwkJCXNpemVNaWRQYW5lcyhfY1twYW5lXS5kaXIgPT09ICJob3J6IiA/ICIiIDogImNlbnRlciIpOworCQkJaWYgKHN0YXRlLmluaXRpYWxpemVkIHx8IG8udHJpZ2dlckV2ZW50c09uTG9hZCkKKwkJCQlfcnVuQ2FsbGJhY2tzKCJvbmhpZGVfZW5kIiwgcGFuZSk7CisJCX0KKwkJZWxzZSB7CisJCQlzLmlzSGlkaW5nID0gdHJ1ZTsgLy8gdXNlZCBieSBvbmNsb3NlCisJCQljbG9zZShwYW5lLCBmYWxzZSwgbm9BbmltYXRpb24pOyAvLyBhZGp1c3QgYWxsIHBhbmVzIHRvIGZpdAorCQl9CisJfQorCisJLyoqCisJKiBTaG93IGEgaGlkZGVuIHBhbmUgLSBzaG93IGFzICdjbG9zZWQnIGJ5IGRlZmF1bHQgdW5sZXNzIG9wZW5QYW5lID0gdHJ1ZQorCSoKKwkqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0JZXZ0X29yX3BhbmUJCQlUaGUgcGFuZSBiZWluZyBvcGVuZWQsIGllOiBub3J0aCwgc291dGgsIGVhc3QsIG9yIHdlc3QKKwkqIEBwYXJhbSB7Ym9vbGVhbj19CQkJW29wZW5QYW5lPWZhbHNlXQorCSogQHBhcmFtIHtib29sZWFuPX0JCQlbbm9BbmltYXRpb249ZmFsc2VdCisJKiBAcGFyYW0ge2Jvb2xlYW49fQkJCVtub0FsZXJ0PWZhbHNlXQorCSovCissCXNob3cgPSBmdW5jdGlvbiAoZXZ0X29yX3BhbmUsIG9wZW5QYW5lLCBub0FuaW1hdGlvbiwgbm9BbGVydCkgeworCQlpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgcmV0dXJuOworCQl2YXIJcGFuZSA9IGV2dFBhbmUuY2FsbCh0aGlzLCBldnRfb3JfcGFuZSkKKwkJLAlvCT0gb3B0aW9uc1twYW5lXQorCQksCXMJPSBzdGF0ZVtwYW5lXQorCQksCSRQCT0gJFBzW3BhbmVdCisJCSwJJFIJPSAkUnNbcGFuZV0KKwkJOworCQlpZiAoISRQIHx8ICFzLmlzSGlkZGVuKSByZXR1cm47IC8vIHBhbmUgZG9lcyBub3QgZXhpc3QgT1IgaXMgbm90IGhpZGRlbgorCisJCS8vIG9uc2hvd19zdGFydCBjYWxsYmFjayAtIHdpbGwgQ0FOQ0VMIHNob3cgaWYgcmV0dXJucyBmYWxzZQorCQlpZiAoZmFsc2UgPT09IF9ydW5DYWxsYmFja3MoIm9uc2hvd19zdGFydCIsIHBhbmUpKSByZXR1cm47CisKKwkJcy5pc1NsaWRpbmcgPSBmYWxzZTsgLy8ganVzdCBpbiBjYXNlCisJCXMuaXNTaG93aW5nID0gdHJ1ZTsgLy8gdXNlZCBieSBvbm9wZW4vb25jbG9zZQorCQkvL3MuaXNIaWRkZW4gID0gZmFsc2U7IC0gd2lsbCBiZSBzZXQgYnkgb3Blbi9jbG9zZSAtIGlmIG5vdCBjYW5jZWxsZWQKKworCQkvLyBub3cgc2hvdyB0aGUgZWxlbWVudHMKKwkJLy9pZiAoJFIpICRSLnNob3coKTsgLSB3aWxsIGJlIHNob3duIGJ5IG9wZW4vY2xvc2UKKwkJaWYgKG9wZW5QYW5lID09PSBmYWxzZSkKKwkJCWNsb3NlKHBhbmUsIHRydWUpOyAvLyB0cnVlID0gZm9yY2UKKwkJZWxzZQorCQkJb3BlbihwYW5lLCBmYWxzZSwgbm9BbmltYXRpb24sIG5vQWxlcnQpOyAvLyBhZGp1c3QgYWxsIHBhbmVzIHRvIGZpdAorCX0KKworCisJLyoqCisJKiBUb2dnbGVzIGEgcGFuZSBvcGVuL2Nsb3NlZCBieSBjYWxsaW5nIGVpdGhlciBvcGVuIG9yIGNsb3NlCisJKgorCSogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fQlldnRfb3JfcGFuZQkJVGhlIHBhbmUgYmVpbmcgdG9nZ2xlZCwgaWU6IG5vcnRoLCBzb3V0aCwgZWFzdCwgb3Igd2VzdAorCSogQHBhcmFtIHtib29sZWFuPX0JCQlbc2xpZGU9ZmFsc2VdCisJKi8KKywJdG9nZ2xlID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lLCBzbGlkZSkgeworCQlpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgcmV0dXJuOworCQl2YXIJZXZ0CQk9IGV2dE9iaihldnRfb3JfcGFuZSkKKwkJLAlwYW5lCT0gZXZ0UGFuZS5jYWxsKHRoaXMsIGV2dF9vcl9wYW5lKQorCQksCXMJCT0gc3RhdGVbcGFuZV0KKwkJOworCQlpZiAoZXZ0KSAvLyBjYWxsZWQgZnJvbSB0byAkUi5kYmxjbGljayBPUiB0cmlnZ2VyUGFuZUV2ZW50CisJCQlldnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CisJCWlmIChzLmlzSGlkZGVuKQorCQkJc2hvdyhwYW5lKTsgLy8gd2lsbCBjYWxsICdvcGVuJyBhZnRlciB1bmhpZGluZyBpdAorCQllbHNlIGlmIChzLmlzQ2xvc2VkKQorCQkJb3BlbihwYW5lLCAhIXNsaWRlKTsKKwkJZWxzZQorCQkJY2xvc2UocGFuZSk7CisJfQorCisKKwkvKioKKwkqIFV0aWxpdHkgbWV0aG9kIHVzZWQgZHVyaW5nIGluaXQgb3Igb3RoZXIgYXV0by1wcm9jZXNzZXMKKwkqCisJKiBAcGFyYW0ge3N0cmluZ30JcGFuZSAgIFRoZSBwYW5lIGJlaW5nIGNsb3NlZAorCSogQHBhcmFtIHtib29sZWFuPX0JW3NldEhhbmRsZXM9ZmFsc2VdCisJKi8KKywJX2Nsb3NlUGFuZSA9IGZ1bmN0aW9uIChwYW5lLCBzZXRIYW5kbGVzKSB7CisJCXZhcgorCQkJJFAJPSAkUHNbcGFuZV0KKwkJLAlzCT0gc3RhdGVbcGFuZV0KKwkJOworCQlfaGlkZVBhbmUocGFuZSk7CisJCXMuaXNDbG9zZWQgPSB0cnVlOworCQlzLmlzVmlzaWJsZSA9IGZhbHNlOworCQkvLyBVTlVTRUQ6IGlmIChzZXRIYW5kbGVzKSBzZXRBc0Nsb3NlZChwYW5lLCB0cnVlKTsgLy8gdHJ1ZSA9IGZvcmNlCisJfQorCisJLyoqCisJKiBDbG9zZSB0aGUgc3BlY2lmaWVkIHBhbmUgKGFuaW1hdGlvbiBvcHRpb25hbCksIGFuZCByZXNpemUgYWxsIG90aGVyIHBhbmVzIGFzIG5lZWRlZAorCSoKKwkqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0JZXZ0X29yX3BhbmUJCQlUaGUgcGFuZSBiZWluZyBjbG9zZWQsIGllOiBub3J0aCwgc291dGgsIGVhc3QsIG9yIHdlc3QKKwkqIEBwYXJhbSB7Ym9vbGVhbj19CQkJW2ZvcmNlPWZhbHNlXQorCSogQHBhcmFtIHtib29sZWFuPX0JCQlbbm9BbmltYXRpb249ZmFsc2VdCisJKiBAcGFyYW0ge2Jvb2xlYW49fQkJCVtza2lwQ2FsbGJhY2s9ZmFsc2VdCisJKi8KKywJY2xvc2UgPSBmdW5jdGlvbiAoZXZ0X29yX3BhbmUsIGZvcmNlLCBub0FuaW1hdGlvbiwgc2tpcENhbGxiYWNrKSB7CisJCXZhcglwYW5lID0gZXZ0UGFuZS5jYWxsKHRoaXMsIGV2dF9vcl9wYW5lKTsKKwkJLy8gaWYgcGFuZSBoYXMgYmVlbiBpbml0aWFsaXplZCwgYnV0IE5PVCB0aGUgY29tcGxldGUgbGF5b3V0LCBjbG9zZSBwYW5lIGluc3RhbnRseQorCQlpZiAoIXN0YXRlLmluaXRpYWxpemVkICYmICRQc1twYW5lXSkgeworCQkJX2Nsb3NlUGFuZShwYW5lKTsgLy8gSU5JVCBwYW5lIGFzIGNsb3NlZAorCQkJcmV0dXJuOworCQl9CisJCWlmICghaXNJbml0aWFsaXplZCgpKSByZXR1cm47CisKKwkJdmFyCisJCQkkUAk9ICRQc1twYW5lXQorCQksCSRSCT0gJFJzW3BhbmVdCisJCSwJJFQJPSAkVHNbcGFuZV0KKwkJLAlvCT0gb3B0aW9uc1twYW5lXQorCQksCXMJPSBzdGF0ZVtwYW5lXQorCQksCWMJPSBfY1twYW5lXQorCQksCWRvRlgsIGlzU2hvd2luZywgaXNIaWRpbmcsIHdhc1NsaWRpbmc7CisKKwkJLy8gUVVFVUUgaW4gY2FzZSBhbm90aGVyIGFjdGlvbi9hbmltYXRpb24gaXMgaW4gcHJvZ3Jlc3MKKwkJJE4ucXVldWUoZnVuY3Rpb24oIHF1ZXVlTmV4dCApeworCQorCQkJaWYgKCAhJFAKKwkJCXx8CSghby5jbG9zYWJsZSAmJiAhcy5pc1Nob3dpbmcgJiYgIXMuaXNIaWRpbmcpCS8vIGludmFsaWQgcmVxdWVzdCAvLyAoIW8ucmVzaXphYmxlICYmICFvLmNsb3NhYmxlKSA/Pz8KKwkJCXx8CSghZm9yY2UgJiYgcy5pc0Nsb3NlZCAmJiAhcy5pc1Nob3dpbmcpCQkJLy8gYWxyZWFkeSBjbG9zZWQKKwkJCSkgcmV0dXJuIHF1ZXVlTmV4dCgpOworCisJCQkvLyBvbmNsb3NlX3N0YXJ0IGNhbGxiYWNrIC0gd2lsbCBDQU5DRUwgaGlkZSBpZiByZXR1cm5zIGZhbHNlCisJCQkvLyBTS0lQIGlmIGp1c3QgJ3Nob3dpbmcnIGEgaGlkZGVuIHBhbmUgYXMgJ2Nsb3NlZCcKKwkJCXZhciBhYm9ydCA9ICFzLmlzU2hvd2luZyAmJiBmYWxzZSA9PT0gX3J1bkNhbGxiYWNrcygib25jbG9zZV9zdGFydCIsIHBhbmUpOworCisJCQkvLyB0cmFuc2ZlciBsb2dpYyB2YXJzIHRvIHRlbXAgdmFycworCQkJaXNTaG93aW5nCT0gcy5pc1Nob3dpbmc7CisJCQlpc0hpZGluZwk9IHMuaXNIaWRpbmc7CisJCQl3YXNTbGlkaW5nCT0gcy5pc1NsaWRpbmc7CisJCQkvLyBub3cgY2xlYXIgdGhlIGxvZ2ljIHZhcnMgKFJFUVVJUkVEIGJlZm9yZSBhYm9ydGluZykKKwkJCWRlbGV0ZSBzLmlzU2hvd2luZzsKKwkJCWRlbGV0ZSBzLmlzSGlkaW5nOworCisJCQlpZiAoYWJvcnQpIHJldHVybiBxdWV1ZU5leHQoKTsKKworCQkJZG9GWAkJPSAhbm9BbmltYXRpb24gJiYgIXMuaXNDbG9zZWQgJiYgKG8uZnhOYW1lX2Nsb3NlICE9ICJub25lIik7CisJCQlzLmlzTW92aW5nCT0gdHJ1ZTsKKwkJCXMuaXNDbG9zZWQJPSB0cnVlOworCQkJcy5pc1Zpc2libGUJPSBmYWxzZTsKKwkJCS8vIHVwZGF0ZSBpc0hpZGRlbiBCRUZPUkUgc2l6aW5nIHBhbmVzCisJCQlpZiAoaXNIaWRpbmcpIHMuaXNIaWRkZW4gPSB0cnVlOworCQkJZWxzZSBpZiAoaXNTaG93aW5nKSBzLmlzSGlkZGVuID0gZmFsc2U7CisKKwkJCWlmIChzLmlzU2xpZGluZykgLy8gcGFuZSBpcyBiZWluZyBjbG9zZWQsIHNvIFVOQklORCB0cmlnZ2VyIGV2ZW50cworCQkJCWJpbmRTdG9wU2xpZGluZ0V2ZW50cyhwYW5lLCBmYWxzZSk7IC8vIHdpbGwgc2V0IGlzU2xpZGluZz1mYWxzZQorCQkJZWxzZSAvLyByZXNpemUgcGFuZXMgYWRqYWNlbnQgdG8gdGhpcyBvbmUKKwkJCQlzaXplTWlkUGFuZXMoX2NbcGFuZV0uZGlyID09PSAiaG9yeiIgPyAiIiA6ICJjZW50ZXIiLCBmYWxzZSk7IC8vIGZhbHNlID0gTk9UIHNraXBDYWxsYmFjaworCisJCQkvLyBpZiB0aGlzIHBhbmUgaGFzIGEgcmVzaXplciBiYXIsIG1vdmUgaXQgTk9XIC0gYmVmb3JlIGFuaW1hdGlvbgorCQkJc2V0QXNDbG9zZWQocGFuZSk7CisKKwkJCS8vIENMT1NFIFRIRSBQQU5FCisJCQlpZiAoZG9GWCkgeyAvLyBhbmltYXRlIHRoZSBjbG9zZQorCQkJCS8vIG1hc2sgcGFuZXMgd2l0aCBvYmplY3RzCisJCQkJdmFyIG1hc2tzID0gImNlbnRlciIrIChjLmRpcj09ImhvcnoiID8gIix3ZXN0LGVhc3QiIDogIiIpOworCQkJCXNob3dNYXNrcyggbWFza3MsIHRydWUgKTsJLy8gdHJ1ZSA9IE9OTFkgbWFzayBwYW5lcyB3aXRoIG1hc2tPYmplY3RzPXRydWUKKwkJCQlsb2NrUGFuZUZvckZYKHBhbmUsIHRydWUpOwkvLyBuZWVkIHRvIHNldCBsZWZ0L3RvcCBzbyBhbmltYXRpb24gd2lsbCB3b3JrCisJCQkJJFAuaGlkZSggby5meE5hbWVfY2xvc2UsIG8uZnhTZXR0aW5nc19jbG9zZSwgby5meFNwZWVkX2Nsb3NlLCBmdW5jdGlvbiAoKSB7CisJCQkJCWxvY2tQYW5lRm9yRlgocGFuZSwgZmFsc2UpOyAvLyB1bmRvCisJCQkJCWlmIChzLmlzQ2xvc2VkKSBjbG9zZV8yKCk7CisJCQkJCXF1ZXVlTmV4dCgpOworCQkJCX0pOworCQkJfQorCQkJZWxzZSB7IC8vIGhpZGUgdGhlIHBhbmUgd2l0aG91dCBhbmltYXRpb24KKwkJCQlfaGlkZVBhbmUocGFuZSk7CisJCQkJY2xvc2VfMigpOworCQkJCXF1ZXVlTmV4dCgpOworCQkJfTsKKwkJfSk7CisKKwkJLy8gU1VCUk9VVElORQorCQlmdW5jdGlvbiBjbG9zZV8yICgpIHsKKwkJCXMuaXNNb3ZpbmcJPSBmYWxzZTsKKwkJCWJpbmRTdGFydFNsaWRpbmdFdmVudChwYW5lLCB0cnVlKTsgLy8gd2lsbCBlbmFibGUgaWYgby5zbGlkYWJsZSA9IHRydWUKKworCQkJLy8gaWYgb3Bwb3NpdGUtcGFuZSB3YXMgYXV0b0Nsb3NlZCwgc2VlIGlmIGl0IGNhbiBiZSBhdXRvT3BlbmVkIG5vdworCQkJdmFyIGFsdFBhbmUgPSBfYy5vcHBvc2l0ZUVkZ2VbcGFuZV07CisJCQlpZiAoc3RhdGVbIGFsdFBhbmUgXS5ub1Jvb20pIHsKKwkJCQlzZXRTaXplTGltaXRzKCBhbHRQYW5lICk7CisJCQkJbWFrZVBhbmVGaXQoIGFsdFBhbmUgKTsKKwkJCX0KKworCQkJLy8gaGlkZSBhbnkgbWFza3Mgc2hvd24gd2hpbGUgY2xvc2luZworCQkJaGlkZU1hc2tzKCk7CisKKwkJCWlmICghc2tpcENhbGxiYWNrICYmIChzdGF0ZS5pbml0aWFsaXplZCB8fCBvLnRyaWdnZXJFdmVudHNPbkxvYWQpKSB7CisJCQkJLy8gb25jbG9zZSBjYWxsYmFjayAtIFVOTEVTUyBqdXN0ICdzaG93aW5nJyBhIGhpZGRlbiBwYW5lIGFzICdjbG9zZWQnCisJCQkJaWYgKCFpc1Nob3dpbmcpCV9ydW5DYWxsYmFja3MoIm9uY2xvc2VfZW5kIiwgcGFuZSk7CisJCQkJLy8gb25oaWRlIE9SIG9uc2hvdyBjYWxsYmFjaworCQkJCWlmIChpc1Nob3dpbmcpCV9ydW5DYWxsYmFja3MoIm9uc2hvd19lbmQiLCBwYW5lKTsKKwkJCQlpZiAoaXNIaWRpbmcpCV9ydW5DYWxsYmFja3MoIm9uaGlkZV9lbmQiLCBwYW5lKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSogQHBhcmFtIHtzdHJpbmd9CXBhbmUJVGhlIHBhbmUganVzdCBjbG9zZWQsIGllOiBub3J0aCwgc291dGgsIGVhc3QsIG9yIHdlc3QKKwkqLworLAlzZXRBc0Nsb3NlZCA9IGZ1bmN0aW9uIChwYW5lKSB7CisJCXZhcgorCQkJJFAJCT0gJFBzW3BhbmVdCisJCSwJJFIJCT0gJFJzW3BhbmVdCisJCSwJJFQJCT0gJFRzW3BhbmVdCisJCSwJbwkJPSBvcHRpb25zW3BhbmVdCisJCSwJcwkJPSBzdGF0ZVtwYW5lXQorCQksCXNpZGUJPSBfY1twYW5lXS5zaWRlLnRvTG93ZXJDYXNlKCkKKwkJLAlpbnNldAk9ICJpbnNldCIrIF9jW3BhbmVdLnNpZGUKKwkJLAlyQ2xhc3MJPSBvLnJlc2l6ZXJDbGFzcworCQksCXRDbGFzcwk9IG8udG9nZ2xlckNsYXNzCisJCSwJX3BhbmUJPSAiLSIrIHBhbmUgLy8gdXNlZCBmb3IgY2xhc3NOYW1lcworCQksCV9vcGVuCT0gIi1vcGVuIgorCQksCV9zbGlkaW5nPSAiLXNsaWRpbmciCisJCSwJX2Nsb3NlZAk9ICItY2xvc2VkIgorCQk7CisJCSRSCisJCQkuY3NzKHNpZGUsIHNDW2luc2V0XSkgLy8gbW92ZSB0aGUgcmVzaXplcgorCQkJLnJlbW92ZUNsYXNzKCByQ2xhc3MrX29wZW4gKyIgIisgckNsYXNzK19wYW5lK19vcGVuICkKKwkJCS5yZW1vdmVDbGFzcyggckNsYXNzK19zbGlkaW5nICsiICIrIHJDbGFzcytfcGFuZStfc2xpZGluZyApCisJCQkuYWRkQ2xhc3MoIHJDbGFzcytfY2xvc2VkICsiICIrIHJDbGFzcytfcGFuZStfY2xvc2VkICkKKwkJCS51bmJpbmQoImRibGNsaWNrLiIrIHNJRCkKKwkJOworCQkvLyBESVNBQkxFICdyZXNpemluZycgd2hlbiBjbG9zZWQgLSBkbyB0aGlzIEJFRk9SRSBiaW5kU3RhcnRTbGlkaW5nRXZlbnQ/CisJCWlmIChvLnJlc2l6YWJsZSAmJiAkLmxheW91dC5wbHVnaW5zLmRyYWdnYWJsZSkKKwkJCSRSCisJCQkJLmRyYWdnYWJsZSgiZGlzYWJsZSIpCisJCQkJLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpIC8vIGRvIE5PVCBhcHBseSBkaXNhYmxlZCBzdHlsaW5nIC0gbm90IHN1aXRhYmxlIGhlcmUKKwkJCQkuY3NzKCJjdXJzb3IiLCAiZGVmYXVsdCIpCisJCQkJLmF0dHIoInRpdGxlIiwiIikKKwkJCTsKKworCQkvLyBpZiBwYW5lIGhhcyBhIHRvZ2dsZXIgYnV0dG9uLCBhZGp1c3QgdGhhdCB0b28KKwkJaWYgKCRUKSB7CisJCQkkVAorCQkJCS5yZW1vdmVDbGFzcyggdENsYXNzK19vcGVuICsiICIrIHRDbGFzcytfcGFuZStfb3BlbiApCisJCQkJLmFkZENsYXNzKCB0Q2xhc3MrX2Nsb3NlZCArIiAiKyB0Q2xhc3MrX3BhbmUrX2Nsb3NlZCApCisJCQkJLmF0dHIoInRpdGxlIiwgby50aXBzLk9wZW4pIC8vIG1heSBiZSBibGFuaworCQkJOworCQkJLy8gdG9nZ2xlci1jb250ZW50IC0gaWYgZXhpc3RzCisJCQkkVC5jaGlsZHJlbigiLmNvbnRlbnQtb3BlbiIpLmhpZGUoKTsKKwkJCSRULmNoaWxkcmVuKCIuY29udGVudC1jbG9zZWQiKS5jc3MoImRpc3BsYXkiLCJibG9jayIpOworCQl9CisKKwkJLy8gc3luYyBhbnkgJ3BpbiBidXR0b25zJworCQlzeW5jUGluQnRucyhwYW5lLCBmYWxzZSk7CisKKwkJaWYgKHN0YXRlLmluaXRpYWxpemVkKSB7CisJCQkvLyByZXNpemUgJ2xlbmd0aCcgYW5kIHBvc2l0aW9uIHRvZ2dsZXJzIGZvciBhZGphY2VudCBwYW5lcworCQkJc2l6ZUhhbmRsZXMoKTsKKwkJfQorCX0KKworCS8qKgorCSogT3BlbiB0aGUgc3BlY2lmaWVkIHBhbmUgKGFuaW1hdGlvbiBvcHRpb25hbCksIGFuZCByZXNpemUgYWxsIG90aGVyIHBhbmVzIGFzIG5lZWRlZAorCSoKKwkqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0JZXZ0X29yX3BhbmUJCQlUaGUgcGFuZSBiZWluZyBvcGVuZWQsIGllOiBub3J0aCwgc291dGgsIGVhc3QsIG9yIHdlc3QKKwkqIEBwYXJhbSB7Ym9vbGVhbj19CQkJW3NsaWRlPWZhbHNlXQorCSogQHBhcmFtIHtib29sZWFuPX0JCQlbbm9BbmltYXRpb249ZmFsc2VdCisJKiBAcGFyYW0ge2Jvb2xlYW49fQkJCVtub0FsZXJ0PWZhbHNlXQorCSovCissCW9wZW4gPSBmdW5jdGlvbiAoZXZ0X29yX3BhbmUsIHNsaWRlLCBub0FuaW1hdGlvbiwgbm9BbGVydCkgeworCQlpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgcmV0dXJuOworCQl2YXIJcGFuZSA9IGV2dFBhbmUuY2FsbCh0aGlzLCBldnRfb3JfcGFuZSkKKwkJLAkkUAk9ICRQc1twYW5lXQorCQksCSRSCT0gJFJzW3BhbmVdCisJCSwJJFQJPSAkVHNbcGFuZV0KKwkJLAlvCT0gb3B0aW9uc1twYW5lXQorCQksCXMJPSBzdGF0ZVtwYW5lXQorCQksCWMJPSBfY1twYW5lXQorCQksCWRvRlgsIGlzU2hvd2luZworCQk7CisJCS8vIFFVRVVFIGluIGNhc2UgYW5vdGhlciBhY3Rpb24vYW5pbWF0aW9uIGlzIGluIHByb2dyZXNzCisJCSROLnF1ZXVlKGZ1bmN0aW9uKCBxdWV1ZU5leHQgKXsKKworCQkJaWYgKCAhJFAKKwkJCXx8CSghby5yZXNpemFibGUgJiYgIW8uY2xvc2FibGUgJiYgIXMuaXNTaG93aW5nKQkvLyBpbnZhbGlkIHJlcXVlc3QKKwkJCXx8CShzLmlzVmlzaWJsZSAmJiAhcy5pc1NsaWRpbmcpCQkJCQkvLyBhbHJlYWR5IG9wZW4KKwkJCSkgcmV0dXJuIHF1ZXVlTmV4dCgpOworCisJCQkvLyBwYW5lIGNhbiBBTFNPIGJlIHVuaGlkZGVuIGJ5IGp1c3QgY2FsbGluZyBzaG93KCksIHNvIGhhbmRsZSB0aGlzIHNjZW5hcmlvCisJCQlpZiAocy5pc0hpZGRlbiAmJiAhcy5pc1Nob3dpbmcpIHsKKwkJCQlxdWV1ZU5leHQoKTsgLy8gY2FsbCBiZWZvcmUgc2hvdygpIGJlY2F1c2UgaXQgbmVlZHMgdGhlIHF1ZXVlIGZyZWUKKwkJCQlzaG93KHBhbmUsIHRydWUpOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJaWYgKG8uYXV0b1Jlc2l6ZSAmJiBzLnNpemUgIT0gby5zaXplKSAvLyByZXNpemUgcGFuZSB0byBvcmlnaW5hbCBzaXplIHNldCBpbiBvcHRpb25zCisJCQkJc2l6ZVBhbmUocGFuZSwgby5zaXplLCB0cnVlLCB0cnVlLCB0cnVlKTsgLy8gdHJ1ZT1za2lwQ2FsbGJhY2svZm9yY2VSZXNpemUvbm9BbmltYXRpb24KKwkJCWVsc2UKKwkJCQkvLyBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGF2YWlsYWJsZSB0byBvcGVuIHRoZSBwYW5lCisJCQkJc2V0U2l6ZUxpbWl0cyhwYW5lLCBzbGlkZSk7CisKKwkJCS8vIG9ub3Blbl9zdGFydCBjYWxsYmFjayAtIHdpbGwgQ0FOQ0VMIG9wZW4gaWYgcmV0dXJucyBmYWxzZQorCQkJdmFyIGNiUmV0dXJuID0gX3J1bkNhbGxiYWNrcygib25vcGVuX3N0YXJ0IiwgcGFuZSk7CisKKwkJCWlmIChjYlJldHVybiA9PT0gImFib3J0IikKKwkJCQlyZXR1cm4gcXVldWVOZXh0KCk7CisKKwkJCS8vIHVwZGF0ZSBwYW5lLXN0YXRlIGFnYWluIGluIGNhc2Ugb3B0aW9ucyB3ZXJlIGNoYW5nZWQgaW4gb25vcGVuX3N0YXJ0CisJCQlpZiAoY2JSZXR1cm4gIT09ICJOQyIpIC8vIE5DID0gIk5vIENhbGxiYWNrIgorCQkJCXNldFNpemVMaW1pdHMocGFuZSwgc2xpZGUpOworCisJCQlpZiAocy5taW5TaXplID4gcy5tYXhTaXplKSB7IC8vIElOU1VGRklDSUVOVCBST09NIEZPUiBQQU5FIFRPIE9QRU4hCisJCQkJc3luY1BpbkJ0bnMocGFuZSwgZmFsc2UpOyAvLyBtYWtlIHN1cmUgcGluLWJ1dHRvbnMgYXJlIHJlc2V0CisJCQkJaWYgKCFub0FsZXJ0ICYmIG8udGlwcy5ub1Jvb21Ub09wZW4pCisJCQkJCWFsZXJ0KG8udGlwcy5ub1Jvb21Ub09wZW4pOworCQkJCXJldHVybiBxdWV1ZU5leHQoKTsgLy8gQUJPUlQKKwkJCX0KKworCQkJaWYgKHNsaWRlKSAvLyBTVEFSVCBTbGlkaW5nIC0gd2lsbCBzZXQgaXNTbGlkaW5nPXRydWUKKwkJCQliaW5kU3RvcFNsaWRpbmdFdmVudHMocGFuZSwgdHJ1ZSk7IC8vIEJJTkQgdHJpZ2dlciBldmVudHMgdG8gY2xvc2Ugc2xpZGluZy1wYW5lCisJCQllbHNlIGlmIChzLmlzU2xpZGluZykgLy8gUElOIFBBTkUgKHN0b3Agc2xpZGluZykgLSBvcGVuIHBhbmUgJ25vcm1hbGx5JyBpbnN0ZWFkCisJCQkJYmluZFN0b3BTbGlkaW5nRXZlbnRzKHBhbmUsIGZhbHNlKTsgLy8gVU5CSU5EIHRyaWdnZXIgZXZlbnRzIC0gd2lsbCBzZXQgaXNTbGlkaW5nPWZhbHNlCisJCQllbHNlIGlmIChvLnNsaWRhYmxlKQorCQkJCWJpbmRTdGFydFNsaWRpbmdFdmVudChwYW5lLCBmYWxzZSk7IC8vIFVOQklORCB0cmlnZ2VyIGV2ZW50cworCisJCQlzLm5vUm9vbSA9IGZhbHNlOyAvLyB3aWxsIGJlIHJlc2V0IGJ5IG1ha2VQYW5lRml0IGlmICdub1Jvb20nCisJCQltYWtlUGFuZUZpdChwYW5lKTsKKworCQkJLy8gdHJhbnNmZXIgbG9naWMgdmFyIHRvIHRlbXAgdmFyCisJCQlpc1Nob3dpbmcgPSBzLmlzU2hvd2luZzsKKwkJCS8vIG5vdyBjbGVhciB0aGUgbG9naWMgdmFyCisJCQlkZWxldGUgcy5pc1Nob3dpbmc7CisKKwkJCWRvRlgJCT0gIW5vQW5pbWF0aW9uICYmIHMuaXNDbG9zZWQgJiYgKG8uZnhOYW1lX29wZW4gIT0gIm5vbmUiKTsKKwkJCXMuaXNNb3ZpbmcJPSB0cnVlOworCQkJcy5pc1Zpc2libGUJPSB0cnVlOworCQkJcy5pc0Nsb3NlZAk9IGZhbHNlOworCQkJLy8gdXBkYXRlIGlzSGlkZGVuIEJFRk9SRSBzaXppbmcgcGFuZXMgLSBXSFk/Pz8gT2xkPworCQkJaWYgKGlzU2hvd2luZykgcy5pc0hpZGRlbiA9IGZhbHNlOworCisJCQlpZiAoZG9GWCkgeyAvLyBBTklNQVRFCisJCQkJLy8gbWFzayBwYW5lcyB3aXRoIG9iamVjdHMKKwkJCQl2YXIgbWFza3MgPSAiY2VudGVyIisgKGMuZGlyPT0iaG9yeiIgPyAiLHdlc3QsZWFzdCIgOiAiIik7CisJCQkJaWYgKHMuaXNTbGlkaW5nKSBtYXNrcyArPSAiLCIrIF9jLm9wcG9zaXRlRWRnZVtwYW5lXTsKKwkJCQlzaG93TWFza3MoIG1hc2tzLCB0cnVlICk7CS8vIHRydWUgPSBPTkxZIG1hc2sgcGFuZXMgd2l0aCBtYXNrT2JqZWN0cz10cnVlCisJCQkJbG9ja1BhbmVGb3JGWChwYW5lLCB0cnVlKTsJLy8gbmVlZCB0byBzZXQgbGVmdC90b3Agc28gYW5pbWF0aW9uIHdpbGwgd29yaworCQkJCSRQLnNob3coIG8uZnhOYW1lX29wZW4sIG8uZnhTZXR0aW5nc19vcGVuLCBvLmZ4U3BlZWRfb3BlbiwgZnVuY3Rpb24oKSB7CisJCQkJCWxvY2tQYW5lRm9yRlgocGFuZSwgZmFsc2UpOyAvLyB1bmRvCisJCQkJCWlmIChzLmlzVmlzaWJsZSkgb3Blbl8yKCk7IC8vIGNvbnRpbnVlCisJCQkJCXF1ZXVlTmV4dCgpOworCQkJCX0pOworCQkJfQorCQkJZWxzZSB7IC8vIG5vIGFuaW1hdGlvbgorCQkJCV9zaG93UGFuZShwYW5lKTsvLyBqdXN0IHNob3cgcGFuZSBhbmQuLi4KKwkJCQlvcGVuXzIoKTsJCS8vIGNvbnRpbnVlCisJCQkJcXVldWVOZXh0KCk7CisJCQl9OworCQl9KTsKKworCQkvLyBTVUJST1VUSU5FCisJCWZ1bmN0aW9uIG9wZW5fMiAoKSB7CisJCQlzLmlzTW92aW5nCT0gZmFsc2U7CisKKwkJCS8vIGN1cmUgaWZyYW1lIGRpc3BsYXkgaXNzdWVzCisJCQlfZml4SWZyYW1lKHBhbmUpOworCisJCQkvLyBOT1RFOiBpZiBpc1NsaWRpbmcsIHRoZW4gb3RoZXIgcGFuZXMgYXJlIE5PVCAncmVzaXplZCcKKwkJCWlmICghcy5pc1NsaWRpbmcpIHsgLy8gcmVzaXplIGFsbCBwYW5lcyBhZGphY2VudCB0byB0aGlzIG9uZQorCQkJCWhpZGVNYXNrcygpOyAvLyByZW1vdmUgYW55IG1hc2tzIHNob3duIHdoaWxlIG9wZW5pbmcKKwkJCQlzaXplTWlkUGFuZXMoX2NbcGFuZV0uZGlyPT0idmVydCIgPyAiY2VudGVyIiA6ICIiLCBmYWxzZSk7IC8vIGZhbHNlID0gTk9UIHNraXBDYWxsYmFjaworCQkJfQorCisJCQkvLyBzZXQgY2xhc3NlcywgcG9zaXRpb24gaGFuZGxlcyBhbmQgZXhlY3V0ZSBjYWxsYmFja3MuLi4KKwkJCXNldEFzT3BlbihwYW5lKTsKKwkJfTsKKwkKKwl9CisKKwkvKioKKwkqIEBwYXJhbSB7c3RyaW5nfQlwYW5lCQlUaGUgcGFuZSBqdXN0IG9wZW5lZCwgaWU6IG5vcnRoLCBzb3V0aCwgZWFzdCwgb3Igd2VzdAorCSogQHBhcmFtIHtib29sZWFuPX0JW3NraXBDYWxsYmFjaz1mYWxzZV0KKwkqLworLAlzZXRBc09wZW4gPSBmdW5jdGlvbiAocGFuZSwgc2tpcENhbGxiYWNrKSB7CisJCXZhciAKKwkJCSRQCQk9ICRQc1twYW5lXQorCQksCSRSCQk9ICRSc1twYW5lXQorCQksCSRUCQk9ICRUc1twYW5lXQorCQksCW8JCT0gb3B0aW9uc1twYW5lXQorCQksCXMJCT0gc3RhdGVbcGFuZV0KKwkJLAlzaWRlCT0gX2NbcGFuZV0uc2lkZS50b0xvd2VyQ2FzZSgpCisJCSwJaW5zZXQJPSAiaW5zZXQiKyBfY1twYW5lXS5zaWRlCisJCSwJckNsYXNzCT0gby5yZXNpemVyQ2xhc3MKKwkJLAl0Q2xhc3MJPSBvLnRvZ2dsZXJDbGFzcworCQksCV9wYW5lCT0gIi0iKyBwYW5lIC8vIHVzZWQgZm9yIGNsYXNzTmFtZXMKKwkJLAlfb3Blbgk9ICItb3BlbiIKKwkJLAlfY2xvc2VkCT0gIi1jbG9zZWQiCisJCSwJX3NsaWRpbmc9ICItc2xpZGluZyIKKwkJOworCQkkUgorCQkJLmNzcyhzaWRlLCBzQ1tpbnNldF0gKyBnZXRQYW5lU2l6ZShwYW5lKSkgLy8gbW92ZSB0aGUgcmVzaXplcgorCQkJLnJlbW92ZUNsYXNzKCByQ2xhc3MrX2Nsb3NlZCArIiAiKyByQ2xhc3MrX3BhbmUrX2Nsb3NlZCApCisJCQkuYWRkQ2xhc3MoIHJDbGFzcytfb3BlbiArIiAiKyByQ2xhc3MrX3BhbmUrX29wZW4gKQorCQk7CisJCWlmIChzLmlzU2xpZGluZykKKwkJCSRSLmFkZENsYXNzKCByQ2xhc3MrX3NsaWRpbmcgKyIgIisgckNsYXNzK19wYW5lK19zbGlkaW5nICkKKwkJZWxzZSAvLyBpbiBjYXNlICd3YXMgc2xpZGluZycKKwkJCSRSLnJlbW92ZUNsYXNzKCByQ2xhc3MrX3NsaWRpbmcgKyIgIisgckNsYXNzK19wYW5lK19zbGlkaW5nICkKKworCQlpZiAoby5yZXNpemVyRGJsQ2xpY2tUb2dnbGUpCisJCQkkUi5iaW5kKCJkYmxjbGljayIsIHRvZ2dsZSApOworCQlyZW1vdmVIb3ZlciggMCwgJFIgKTsgLy8gcmVtb3ZlIGhvdmVyIGNsYXNzZXMKKwkJaWYgKG8ucmVzaXphYmxlICYmICQubGF5b3V0LnBsdWdpbnMuZHJhZ2dhYmxlKQorCQkJJFIJLmRyYWdnYWJsZSgiZW5hYmxlIikKKwkJCQkuY3NzKCJjdXJzb3IiLCBvLnJlc2l6ZXJDdXJzb3IpCisJCQkJLmF0dHIoInRpdGxlIiwgby50aXBzLlJlc2l6ZSk7CisJCWVsc2UgaWYgKCFzLmlzU2xpZGluZykKKwkJCSRSLmNzcygiY3Vyc29yIiwgImRlZmF1bHQiKTsgLy8gbi1yZXNpemUsIHMtcmVzaXplLCBldGMKKworCQkvLyBpZiBwYW5lIGFsc28gaGFzIGEgdG9nZ2xlciBidXR0b24sIGFkanVzdCB0aGF0IHRvbworCQlpZiAoJFQpIHsKKwkJCSRUCS5yZW1vdmVDbGFzcyggdENsYXNzK19jbG9zZWQgKyIgIisgdENsYXNzK19wYW5lK19jbG9zZWQgKQorCQkJCS5hZGRDbGFzcyggdENsYXNzK19vcGVuICsiICIrIHRDbGFzcytfcGFuZStfb3BlbiApCisJCQkJLmF0dHIoInRpdGxlIiwgby50aXBzLkNsb3NlKTsgLy8gbWF5IGJlIGJsYW5rCisJCQlyZW1vdmVIb3ZlciggMCwgJFQgKTsgLy8gcmVtb3ZlIGhvdmVyIGNsYXNzZXMKKwkJCS8vIHRvZ2dsZXItY29udGVudCAtIGlmIGV4aXN0cworCQkJJFQuY2hpbGRyZW4oIi5jb250ZW50LWNsb3NlZCIpLmhpZGUoKTsKKwkJCSRULmNoaWxkcmVuKCIuY29udGVudC1vcGVuIikuY3NzKCJkaXNwbGF5IiwiYmxvY2siKTsKKwkJfQorCisJCS8vIHN5bmMgYW55ICdwaW4gYnV0dG9ucycKKwkJc3luY1BpbkJ0bnMocGFuZSwgIXMuaXNTbGlkaW5nKTsKKworCQkvLyB1cGRhdGUgcGFuZS1zdGF0ZSBkaW1lbnNpb25zIC0gQkVGT1JFIHJlc2l6aW5nIGNvbnRlbnQKKwkJJC5leHRlbmQocywgZWxEaW1zKCRQKSk7CisKKwkJaWYgKHN0YXRlLmluaXRpYWxpemVkKSB7CisJCQkvLyByZXNpemUgcmVzaXplciAmIHRvZ2dsZXIgc2l6ZXMgZm9yIGFsbCBwYW5lcworCQkJc2l6ZUhhbmRsZXMoKTsKKwkJCS8vIHJlc2l6ZSBjb250ZW50IGV2ZXJ5IHRpbWUgcGFuZSBvcGVucyAtIHRvIGJlIHN1cmUKKwkJCXNpemVDb250ZW50KHBhbmUsIHRydWUpOyAvLyB0cnVlID0gcmVtZWFzdXJlIGhlYWRlcnMvZm9vdGVycywgZXZlbiBpZiAncGFuZS5pc01vdmluZycKKwkJfQorCisJCWlmICghc2tpcENhbGxiYWNrICYmIChzdGF0ZS5pbml0aWFsaXplZCB8fCBvLnRyaWdnZXJFdmVudHNPbkxvYWQpICYmICRQLmlzKCI6dmlzaWJsZSIpKSB7CisJCQkvLyBvbm9wZW4gY2FsbGJhY2sKKwkJCV9ydW5DYWxsYmFja3MoIm9ub3Blbl9lbmQiLCBwYW5lKTsKKwkJCS8vIG9uc2hvdyBjYWxsYmFjayAtIFRPRE86IHNob3VsZCB0aGlzIGJlIGhlcmU/CisJCQlpZiAocy5pc1Nob3dpbmcpIF9ydW5DYWxsYmFja3MoIm9uc2hvd19lbmQiLCBwYW5lKTsKKworCQkJLy8gQUxTTyBjYWxsIG9ucmVzaXplIGJlY2F1c2UgbGF5b3V0LXNpemUgKm1heSogaGF2ZSBjaGFuZ2VkIHdoaWxlIHBhbmUgd2FzIGNsb3NlZAorCQkJaWYgKHN0YXRlLmluaXRpYWxpemVkKQorCQkJCV9ydW5DYWxsYmFja3MoIm9ucmVzaXplX2VuZCIsIHBhbmUpOworCQl9CisKKwkJLy8gVE9ETzogU29tZWhvdyBzaXplUGFuZSgibm9ydGgiKSBpcyBiZWluZyBjYWxsZWQgYWZ0ZXIgdGhpcyBwb2ludD8/PworCX0KKworCisJLyoqCisJKiBzbGlkZU9wZW4gLyBzbGlkZUNsb3NlIC8gc2xpZGVUb2dnbGUKKwkqCisJKiBQYXNzLXRob3VnaCBtZXRob2RzIGZvciBzbGlkaW5nCisJKi8KKywJc2xpZGVPcGVuID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lKSB7CisJCWlmICghaXNJbml0aWFsaXplZCgpKSByZXR1cm47CisJCXZhcglldnQJCT0gZXZ0T2JqKGV2dF9vcl9wYW5lKQorCQksCXBhbmUJPSBldnRQYW5lLmNhbGwodGhpcywgZXZ0X29yX3BhbmUpCisJCSwJcwkJPSBzdGF0ZVtwYW5lXQorCQksCWRlbGF5CT0gb3B0aW9uc1twYW5lXS5zbGlkZURlbGF5X29wZW4KKwkJOworCQkvLyBwcmV2ZW50IGV2ZW50IGZyb20gdHJpZ2dlcmluZyBvbiBORVcgcmVzaXplciBiaW5kaW5nIGNyZWF0ZWQgYmVsb3cKKwkJaWYgKGV2dCkgZXZ0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOworCisJCWlmIChzLmlzQ2xvc2VkICYmIGV2dCAmJiBldnQudHlwZSA9PT0gIm1vdXNlZW50ZXIiICYmIGRlbGF5ID4gMCkKKwkJCS8vIHRyaWdnZXIgPSBtb3VzZWVudGVyIC0gdXNlIGEgZGVsYXkKKwkJCXRpbWVyLnNldChwYW5lKyJfb3BlblNsaWRlciIsIG9wZW5fTk9XLCBkZWxheSk7CisJCWVsc2UKKwkJCW9wZW5fTk9XKCk7IC8vIHdpbGwgdW5iaW5kIGV2ZW50cyBpZiBpcyBhbHJlYWR5IG9wZW4KKworCQkvKioKKwkJKiBTVUJST1VUSU5FIGZvciB0aW1lZCBvcGVuCisJCSovCisJCWZ1bmN0aW9uIG9wZW5fTk9XICgpIHsKKwkJCWlmICghcy5pc0Nsb3NlZCkgLy8gc2tpcCBpZiBubyBsb25nZXIgY2xvc2VkIQorCQkJCWJpbmRTdG9wU2xpZGluZ0V2ZW50cyhwYW5lLCB0cnVlKTsgLy8gQklORCB0cmlnZ2VyIGV2ZW50cyB0byBjbG9zZSBzbGlkaW5nLXBhbmUKKwkJCWVsc2UgaWYgKCFzLmlzTW92aW5nKQorCQkJCW9wZW4ocGFuZSwgdHJ1ZSk7IC8vIHRydWUgPSBzbGlkZSAtIG9wZW4oKSB3aWxsIGhhbmRsZSBiaW5kaW5nCisJCX07CisJfQorCissCXNsaWRlQ2xvc2UgPSBmdW5jdGlvbiAoZXZ0X29yX3BhbmUpIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJdmFyCWV2dAkJPSBldnRPYmooZXZ0X29yX3BhbmUpCisJCSwJcGFuZQk9IGV2dFBhbmUuY2FsbCh0aGlzLCBldnRfb3JfcGFuZSkKKwkJLAlvCQk9IG9wdGlvbnNbcGFuZV0KKwkJLAlzCQk9IHN0YXRlW3BhbmVdCisJCSwJZGVsYXkJPSBzLmlzTW92aW5nID8gMTAwMCA6IDMwMCAvLyBNSU5JTVVNIGRlbGF5IC0gb3B0aW9uIG1heSBvdmVycmlkZQorCQk7CisJCWlmIChzLmlzQ2xvc2VkIHx8IHMuaXNSZXNpemluZykKKwkJCXJldHVybjsgLy8gc2tpcCBpZiBhbHJlYWR5IGNsb3NlZCBPUiBpbiBwcm9jZXNzIG9mIHJlc2l6aW5nCisJCWVsc2UgaWYgKG8uc2xpZGVUcmlnZ2VyX2Nsb3NlID09PSAiY2xpY2siKQorCQkJY2xvc2VfTk9XKCk7IC8vIGNsb3NlIGltbWVkaWF0ZWx5IG9uQ2xpY2sKKwkJZWxzZSBpZiAoby5wcmV2ZW50UXVpY2tTbGlkZUNsb3NlICYmIHMuaXNNb3ZpbmcpCisJCQlyZXR1cm47IC8vIGhhbmRsZSBDaHJvbWUgcXVpY2stY2xvc2Ugb24gc2xpZGUtb3BlbgorCQllbHNlIGlmIChvLnByZXZlbnRQcmVtYXR1cmVTbGlkZUNsb3NlICYmIGV2dCAmJiAkLmxheW91dC5pc01vdXNlT3ZlckVsZW0oZXZ0LCAkUHNbcGFuZV0pKQorCQkJcmV0dXJuOyAvLyBoYW5kbGUgaW5jb3JyZWN0IG1vdXNlbGVhdmUgdHJpZ2dlciwgbGlrZSB3aGVuIG92ZXIgYSBTRUxFQ1QtbGlzdCBpbiBJRQorCQllbHNlIGlmIChldnQpIC8vIHRyaWdnZXIgPSBtb3VzZWxlYXZlIC0gdXNlIGEgZGVsYXkKKwkJCS8vIDEgc2VjIGRlbGF5IGlmICdvcGVuaW5nJywgZWxzZSAuMyBzZWMKKwkJCXRpbWVyLnNldChwYW5lKyJfY2xvc2VTbGlkZXIiLCBjbG9zZV9OT1csIG1heChvLnNsaWRlRGVsYXlfY2xvc2UsIGRlbGF5KSk7CisJCWVsc2UgLy8gY2FsbGVkIHByb2dyYW1pY2FsbHkKKwkJCWNsb3NlX05PVygpOworCisJCS8qKgorCQkqIFNVQlJPVVRJTkUgZm9yIHRpbWVkIGNsb3NlCisJCSovCisJCWZ1bmN0aW9uIGNsb3NlX05PVyAoKSB7CisJCQlpZiAocy5pc0Nsb3NlZCkgLy8gc2tpcCAnY2xvc2UnIGlmIGFscmVhZHkgY2xvc2VkIQorCQkJCWJpbmRTdG9wU2xpZGluZ0V2ZW50cyhwYW5lLCBmYWxzZSk7IC8vIFVOQklORCB0cmlnZ2VyIGV2ZW50cyAtIFRPRE86IGlzIHRoaXMgbmVlZGVkIGhlcmU/CisJCQllbHNlIGlmICghcy5pc01vdmluZykKKwkJCQljbG9zZShwYW5lKTsgLy8gY2xvc2Ugd2lsbCBoYW5kbGUgdW5iaW5kaW5nCisJCX07CisJfQorCisJLyoqCisJKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9CWV2dF9vcl9wYW5lCQlUaGUgcGFuZSBiZWluZyBvcGVuZWQsIGllOiBub3J0aCwgc291dGgsIGVhc3QsIG9yIHdlc3QKKwkqLworLAlzbGlkZVRvZ2dsZSA9IGZ1bmN0aW9uIChldnRfb3JfcGFuZSkgeworCQl2YXIgcGFuZSA9IGV2dFBhbmUuY2FsbCh0aGlzLCBldnRfb3JfcGFuZSk7CisJCXRvZ2dsZShwYW5lLCB0cnVlKTsKKwl9CisKKworCS8qKgorCSogTXVzdCBzZXQgbGVmdC90b3Agb24gRWFzdC9Tb3V0aCBwYW5lcyBzbyBhbmltYXRpb24gd2lsbCB3b3JrIHByb3Blcmx5CisJKgorCSogQHBhcmFtIHtzdHJpbmd9CXBhbmUJVGhlIHBhbmUgdG8gbG9jaywgJ2Vhc3QnIG9yICdzb3V0aCcgLSBhbnkgb3RoZXIgaXMgaWdub3JlZCEKKwkqIEBwYXJhbSB7Ym9vbGVhbn0JZG9Mb2NrICB0cnVlID0gc2V0IGxlZnQvdG9wLCBmYWxzZSA9IHJlbW92ZQorCSovCissCWxvY2tQYW5lRm9yRlggPSBmdW5jdGlvbiAocGFuZSwgZG9Mb2NrKSB7CisJCXZhciAkUAk9ICRQc1twYW5lXQorCQksCXMJPSBzdGF0ZVtwYW5lXQorCQksCW8JPSBvcHRpb25zW3BhbmVdCisJCSwJegk9IG9wdGlvbnMuekluZGV4ZXMKKwkJOworCQlpZiAoZG9Mb2NrKSB7CisJCQkkUC5jc3MoeyB6SW5kZXg6IHoucGFuZV9hbmltYXRlIH0pOyAvLyBvdmVybGF5IGFsbCBlbGVtZW50cyBkdXJpbmcgYW5pbWF0aW9uCisJCQlpZiAocGFuZT09InNvdXRoIikKKwkJCQkkUC5jc3MoeyB0b3A6IHNDLmluc2V0VG9wICsgc0MuaW5uZXJIZWlnaHQgLSAkUC5vdXRlckhlaWdodCgpIH0pOworCQkJZWxzZSBpZiAocGFuZT09ImVhc3QiKQorCQkJCSRQLmNzcyh7IGxlZnQ6IHNDLmluc2V0TGVmdCArIHNDLmlubmVyV2lkdGggLSAkUC5vdXRlcldpZHRoKCkgfSk7CisJCX0KKwkJZWxzZSB7IC8vIGFuaW1hdGlvbiBET05FIC0gUkVTRVQgQ1NTCisJCQkvLyBUT0RPOiBzZWUgaWYgdGhpcyBjYW4gYmUgZGVsZXRlZC4gSXQgY2F1c2VzIGEgcXVpY2stY2xvc2Ugd2hlbiBzbGlkaW5nIGluIENocm9tZQorCQkJJFAuY3NzKHsgekluZGV4OiAocy5pc1NsaWRpbmcgPyB6LnBhbmVfc2xpZGluZyA6IHoucGFuZV9ub3JtYWwpIH0pOworCQkJaWYgKHBhbmU9PSJzb3V0aCIpCisJCQkJJFAuY3NzKHsgdG9wOiAiYXV0byIgfSk7CisJCQkvLyBpZiBwYW5lIGlzIHBvc2l0aW9uZWQgJ29mZi1zY3JlZW4nLCB0aGVuIERPIE5PVCBzY3JldyB3aXRoIGl0IQorCQkJZWxzZSBpZiAocGFuZT09ImVhc3QiICYmICEkUC5jc3MoImxlZnQiKS5tYXRjaCgvXC05OTk5OS8pKQorCQkJCSRQLmNzcyh7IGxlZnQ6ICJhdXRvIiB9KTsKKwkJCS8vIGZpeCBhbnRpLWFsaWFzaW5nIGluIElFIC0gb25seSBuZWVkZWQgZm9yIGFuaW1hdGlvbnMgdGhhdCBjaGFuZ2Ugb3BhY2l0eQorCQkJaWYgKGJyb3dzZXIubXNpZSAmJiBvLmZ4T3BhY2l0eUZpeCAmJiBvLmZ4TmFtZV9vcGVuICE9ICJzbGlkZSIgJiYgJFAuY3NzKCJmaWx0ZXIiKSAmJiAkUC5jc3MoIm9wYWNpdHkiKSA9PSAxKQorCQkJCSRQWzBdLnN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnZmlsdGVyJyk7CisJCX0KKwl9CisKKworCS8qKgorCSogVG9nZ2xlIHNsaWRpbmcgZnVuY3Rpb25hbGl0eSBvZiBhIHNwZWNpZmljIHBhbmUgb24vb2ZmIGJ5IGFkZGluZyByZW1vdmluZyAnc2xpZGUgb3BlbicgdHJpZ2dlcgorCSoKKwkqIEBzZWUgIG9wZW4oKSwgY2xvc2UoKQorCSogQHBhcmFtIHtzdHJpbmd9CXBhbmUJVGhlIHBhbmUgdG8gZW5hYmxlL2Rpc2FibGUsICdub3J0aCcsICdzb3V0aCcsIGV0Yy4KKwkqIEBwYXJhbSB7Ym9vbGVhbn0JZW5hYmxlCUVuYWJsZSBvciBEaXNhYmxlIHNsaWRpbmc/CisJKi8KKywJYmluZFN0YXJ0U2xpZGluZ0V2ZW50ID0gZnVuY3Rpb24gKHBhbmUsIGVuYWJsZSkgeworCQl2YXIgbwkJPSBvcHRpb25zW3BhbmVdCisJCSwJJFAJCT0gJFBzW3BhbmVdCisJCSwJJFIJCT0gJFJzW3BhbmVdCisJCSwJZXZ0TmFtZQk9IG8uc2xpZGVUcmlnZ2VyX29wZW4udG9Mb3dlckNhc2UoKQorCQk7CisJCWlmICghJFIgfHwgKGVuYWJsZSAmJiAhby5zbGlkYWJsZSkpIHJldHVybjsKKworCQkvLyBtYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIGV2ZW50CisJCWlmIChldnROYW1lLm1hdGNoKC9tb3VzZW92ZXIvKSkKKwkJCWV2dE5hbWUgPSBvLnNsaWRlVHJpZ2dlcl9vcGVuID0gIm1vdXNlZW50ZXIiOworCQllbHNlIGlmICghZXZ0TmFtZS5tYXRjaCgvKGNsaWNrfGRibGNsaWNrfG1vdXNlZW50ZXIpLykpIAorCQkJZXZ0TmFtZSA9IG8uc2xpZGVUcmlnZ2VyX29wZW4gPSAiY2xpY2siOworCisJCSRSCisJCQkvLyBhZGQgb3IgcmVtb3ZlIGV2ZW50CisJCQlbZW5hYmxlID8gImJpbmQiIDogInVuYmluZCJdKGV2dE5hbWUgKycuJysgc0lELCBzbGlkZU9wZW4pCisJCQkvLyBzZXQgdGhlIGFwcHJvcHJpYXRlIGN1cnNvciAmIHRpdGxlL3RpcAorCQkJLmNzcygiY3Vyc29yIiwgZW5hYmxlID8gby5zbGlkZXJDdXJzb3IgOiAiZGVmYXVsdCIpCisJCQkuYXR0cigidGl0bGUiLCBlbmFibGUgPyBvLnRpcHMuU2xpZGUgOiAiIikKKwkJOworCX0KKworCS8qKgorCSogQWRkIG9yIHJlbW92ZSAnbW91c2VsZWF2ZScgZXZlbnRzIHRvICdzbGlkZSBjbG9zZScgd2hlbiBwYW5lIGlzICdzbGlkaW5nJyBvcGVuIG9yIGNsb3NlZAorCSogQWxzbyBpbmNyZWFzZXMgekluZGV4IHdoZW4gcGFuZSBpcyBzbGlkaW5nIG9wZW4KKwkqIFNlZSBiaW5kU3RhcnRTbGlkaW5nRXZlbnQgZm9yIGNvZGUgdG8gY29udHJvbCAnc2xpZGUgb3BlbicKKwkqCisJKiBAc2VlICBzbGlkZU9wZW4oKSwgc2xpZGVDbG9zZSgpCisJKiBAcGFyYW0ge3N0cmluZ30JcGFuZQlUaGUgcGFuZSB0byBwcm9jZXNzLCAnbm9ydGgnLCAnc291dGgnLCBldGMuCisJKiBAcGFyYW0ge2Jvb2xlYW59CWVuYWJsZQlFbmFibGUgb3IgRGlzYWJsZSBldmVudHM/CisJKi8KKywJYmluZFN0b3BTbGlkaW5nRXZlbnRzID0gZnVuY3Rpb24gKHBhbmUsIGVuYWJsZSkgeworCQl2YXIJbwkJPSBvcHRpb25zW3BhbmVdCisJCSwJcwkJPSBzdGF0ZVtwYW5lXQorCQksCWMJCT0gX2NbcGFuZV0KKwkJLAl6CQk9IG9wdGlvbnMuekluZGV4ZXMKKwkJLAlldnROYW1lCT0gby5zbGlkZVRyaWdnZXJfY2xvc2UudG9Mb3dlckNhc2UoKQorCQksCWFjdGlvbgk9IChlbmFibGUgPyAiYmluZCIgOiAidW5iaW5kIikKKwkJLAkkUAkJPSAkUHNbcGFuZV0KKwkJLAkkUgkJPSAkUnNbcGFuZV0KKwkJOworCQlzLmlzU2xpZGluZyA9IGVuYWJsZTsgLy8gbG9naWMKKwkJdGltZXIuY2xlYXIocGFuZSsiX2Nsb3NlU2xpZGVyIik7IC8vIGp1c3QgaW4gY2FzZQorCisJCS8vIHJlbW92ZSAnc2xpZGVPcGVuJyBldmVudCBmcm9tIHJlc2l6ZXIKKwkJLy8gQUxTTyB3aWxsIHJhaXNlIHRoZSB6SW5kZXggb2YgdGhlIHBhbmUgJiByZXNpemVyCisJCWlmIChlbmFibGUpIGJpbmRTdGFydFNsaWRpbmdFdmVudChwYW5lLCBmYWxzZSk7CisKKwkJLy8gUkUvU0VUIHpJbmRleCAtIGluY3JlYXNlcyB3aGVuIHBhbmUgaXMgc2xpZGluZy1vcGVuLCByZXNldHMgdG8gbm9ybWFsIHdoZW4gbm90CisJCSRQLmNzcygiekluZGV4IiwgZW5hYmxlID8gei5wYW5lX3NsaWRpbmcgOiB6LnBhbmVfbm9ybWFsKTsKKwkJJFIuY3NzKCJ6SW5kZXgiLCBlbmFibGUgPyB6LnBhbmVfc2xpZGluZysyIDogei5yZXNpemVyX25vcm1hbCk7IC8vIE5PVEU6IG1hc2sgPSBwYW5lX3NsaWRpbmcrMQorCisJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgdmFsaWQgZXZlbnQKKwkJaWYgKCFldnROYW1lLm1hdGNoKC8oY2xpY2t8bW91c2VsZWF2ZSkvKSkKKwkJCWV2dE5hbWUgPSBvLnNsaWRlVHJpZ2dlcl9jbG9zZSA9ICJtb3VzZWxlYXZlIjsgLy8gYWxzbyBjYXRjaGVzICdtb3VzZW91dCcKKworCQkvLyBhZGQvcmVtb3ZlIHNsaWRlIHRyaWdnZXJzCisJCSRSW2FjdGlvbl0oZXZ0TmFtZSwgc2xpZGVDbG9zZSk7IC8vIGJhc2UgZXZlbnQgb24gcmVzaXplCisJCS8vIG5lZWQgZXh0cmEgZXZlbnRzIGZvciBtb3VzZWxlYXZlCisJCWlmIChldnROYW1lID09PSAibW91c2VsZWF2ZSIpIHsKKwkJCS8vIGFsc28gY2xvc2Ugb24gcGFuZS5tb3VzZWxlYXZlCisJCQkkUFthY3Rpb25dKCJtb3VzZWxlYXZlLiIrIHNJRCwgc2xpZGVDbG9zZSk7CisJCQkvLyBjYW5jZWwgdGltZXIgd2hlbiBtb3VzZSBtb3ZlcyBiZXR3ZWVuICdwYW5lJyBhbmQgJ3Jlc2l6ZXInCisJCQkkUlthY3Rpb25dKCJtb3VzZWVudGVyLiIrIHNJRCwgY2FuY2VsTW91c2VPdXQpOworCQkJJFBbYWN0aW9uXSgibW91c2VlbnRlci4iKyBzSUQsIGNhbmNlbE1vdXNlT3V0KTsKKwkJfQorCisJCWlmICghZW5hYmxlKQorCQkJdGltZXIuY2xlYXIocGFuZSsiX2Nsb3NlU2xpZGVyIik7CisJCWVsc2UgaWYgKGV2dE5hbWUgPT09ICJjbGljayIgJiYgIW8ucmVzaXphYmxlKSB7CisJCQkvLyBJRiBwYW5lIGlzIG5vdCByZXNpemFibGUgKHdoaWNoIGFscmVhZHkgaGFzIGEgY3Vyc29yIGFuZCB0aXApIAorCQkJLy8gdGhlbiBzZXQgdGhlIGEgY3Vyc29yICYgdGl0bGUvdGlwIG9uIHJlc2l6ZXIgd2hlbiBzbGlkaW5nCisJCQkkUi5jc3MoImN1cnNvciIsIGVuYWJsZSA/IG8uc2xpZGVyQ3Vyc29yIDogImRlZmF1bHQiKTsKKwkJCSRSLmF0dHIoInRpdGxlIiwgZW5hYmxlID8gby50aXBzLkNsb3NlIDogIiIpOyAvLyB1c2UgVG9nZ2xlci10aXAsIGVnOiAiQ2xvc2UgUGFuZSIKKwkJfQorCisJCS8vIFNVQlJPVVRJTkUgZm9yIG1vdXNlbGVhdmUgdGltZXIgY2xlYXJpbmcKKwkJZnVuY3Rpb24gY2FuY2VsTW91c2VPdXQgKGV2dCkgeworCQkJdGltZXIuY2xlYXIocGFuZSsiX2Nsb3NlU2xpZGVyIik7CisJCQlldnQuc3RvcFByb3BhZ2F0aW9uKCk7CisJCX0KKwl9CisKKworCS8qKgorCSogSGlkZXMvY2xvc2VzIGEgcGFuZSBpZiB0aGVyZSBpcyBpbnN1ZmZpY2llbnQgcm9vbSAtIHJldmVyc2VzIHRoaXMgd2hlbiB0aGVyZSBpcyByb29tIGFnYWluCisJKiBNVVNUIGhhdmUgYWxyZWFkeSBjYWxsZWQgc2V0U2l6ZUxpbWl0cygpIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kCisJKgorCSogQHBhcmFtIHtzdHJpbmd9CXBhbmUJCQkJCVRoZSBwYW5lIGJlaW5nIHJlc2l6ZWQKKwkqIEBwYXJhbSB7Ym9vbGVhbj19CVtpc09wZW5pbmc9ZmFsc2VdCQlDYWxsZWQgZnJvbSBvbk9wZW4/CisJKiBAcGFyYW0ge2Jvb2xlYW49fQlbc2tpcENhbGxiYWNrPWZhbHNlXQlTaG91bGQgdGhlIG9ucmVzaXplIGNhbGxiYWNrIGJlIHJ1bj8KKwkqIEBwYXJhbSB7Ym9vbGVhbj19CVtmb3JjZT1mYWxzZV0KKwkqLworLAltYWtlUGFuZUZpdCA9IGZ1bmN0aW9uIChwYW5lLCBpc09wZW5pbmcsIHNraXBDYWxsYmFjaywgZm9yY2UpIHsKKwkJdmFyCisJCQlvCT0gb3B0aW9uc1twYW5lXQorCQksCXMJPSBzdGF0ZVtwYW5lXQorCQksCWMJPSBfY1twYW5lXQorCQksCSRQCT0gJFBzW3BhbmVdCisJCSwJJFIJPSAkUnNbcGFuZV0KKwkJLAlpc1NpZGVQYW5lIAk9IGMuZGlyPT09InZlcnQiCisJCSwJaGFzUm9vbQkJPSBmYWxzZQorCQk7CisJCS8vIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGNlbnRlciAmIGVhc3Qvd2VzdCBwYW5lcworCQlpZiAocGFuZSA9PT0gImNlbnRlciIgfHwgKGlzU2lkZVBhbmUgJiYgcy5ub1ZlcnRpY2FsUm9vbSkpIHsKKwkJCS8vIHNlZSBpZiB0aGVyZSBpcyBlbm91Z2ggcm9vbSB0byBkaXNwbGF5IHRoZSBwYW5lCisJCQkvLyBFUlJPUjogaGFzUm9vbSA9IHMubWluSGVpZ2h0IDw9IHMubWF4SGVpZ2h0ICYmIChpc1NpZGVQYW5lIHx8IHMubWluV2lkdGggPD0gcy5tYXhXaWR0aCk7CisJCQloYXNSb29tID0gKHMubWF4SGVpZ2h0ID49IDApOworCQkJaWYgKGhhc1Jvb20gJiYgcy5ub1Jvb20pIHsgLy8gcHJldmlvdXNseSBoaWRkZW4gZHVlIHRvIG5vUm9vbSwgc28gc2hvdyBub3cKKwkJCQlfc2hvd1BhbmUocGFuZSk7CisJCQkJaWYgKCRSKSAkUi5zaG93KCk7CisJCQkJcy5pc1Zpc2libGUgPSB0cnVlOworCQkJCXMubm9Sb29tID0gZmFsc2U7CisJCQkJaWYgKGlzU2lkZVBhbmUpIHMubm9WZXJ0aWNhbFJvb20gPSBmYWxzZTsKKwkJCQlfZml4SWZyYW1lKHBhbmUpOworCQkJfQorCQkJZWxzZSBpZiAoIWhhc1Jvb20gJiYgIXMubm9Sb29tKSB7IC8vIG5vdCBjdXJyZW50bHkgaGlkZGVuLCBzbyBoaWRlIG5vdworCQkJCV9oaWRlUGFuZShwYW5lKTsKKwkJCQlpZiAoJFIpICRSLmhpZGUoKTsKKwkJCQlzLmlzVmlzaWJsZSA9IGZhbHNlOworCQkJCXMubm9Sb29tID0gdHJ1ZTsKKwkJCX0KKwkJfQorCisJCS8vIHNlZSBpZiB0aGVyZSBpcyBlbm91Z2ggcm9vbSB0byBmaXQgdGhlIGJvcmRlci1wYW5lCisJCWlmIChwYW5lID09PSAiY2VudGVyIikgeworCQkJLy8gaWdub3JlIGNlbnRlciBpbiB0aGlzIGJsb2NrCisJCX0KKwkJZWxzZSBpZiAocy5taW5TaXplIDw9IHMubWF4U2l6ZSkgeyAvLyBwYW5lIENBTiBmaXQKKwkJCWhhc1Jvb20gPSB0cnVlOworCQkJaWYgKHMuc2l6ZSA+IHMubWF4U2l6ZSkgLy8gcGFuZSBpcyB0b28gYmlnIC0gc2hyaW5rIGl0CisJCQkJc2l6ZVBhbmUocGFuZSwgcy5tYXhTaXplLCBza2lwQ2FsbGJhY2ssIGZvcmNlLCB0cnVlKTsgLy8gdHJ1ZSA9IG5vQW5pbWF0aW9uCisJCQllbHNlIGlmIChzLnNpemUgPCBzLm1pblNpemUpIC8vIHBhbmUgaXMgdG9vIHNtYWxsIC0gZW5sYXJnZSBpdAorCQkJCXNpemVQYW5lKHBhbmUsIHMubWluU2l6ZSwgc2tpcENhbGxiYWNrLCBmb3JjZSwgdHJ1ZSk7CisJCQkvLyBuZWVkIHMuaXNWaXNpYmxlIGJlY2F1c2UgbmV3IHBzZXVkb0Nsb3NlIG1ldGhvZCBrZWVwcyBwYW5lIHZpc2libGUsIGJ1dCBvZmYtc2NyZWVuCisJCQllbHNlIGlmICgkUiAmJiBzLmlzVmlzaWJsZSAmJiAkUC5pcygiOnZpc2libGUiKSkgeworCQkJCS8vIG1ha2Ugc3VyZSByZXNpemVyLWJhciBpcyBwb3NpdGlvbmVkIGNvcnJlY3RseQorCQkJCS8vIGhhbmRsZXMgc2l0dWF0aW9uIHdoZXJlIG5lc3RlZCBsYXlvdXQgd2FzICdoaWRkZW4nIHdoZW4gaW5pdGlhbGl6ZWQKKwkJCQl2YXIJc2lkZSA9IGMuc2lkZS50b0xvd2VyQ2FzZSgpCisJCQkJLAlwb3MgID0gcy5zaXplICsgc0NbImluc2V0IisgYy5zaWRlXQorCQkJCTsKKwkJCQlpZiAoJC5sYXlvdXQuY3NzTnVtKCRSLCBzaWRlKSAhPSBwb3MpICRSLmNzcyggc2lkZSwgcG9zICk7CisJCQl9CisKKwkJCS8vIGlmIHdhcyBwcmV2aW91c2x5IGhpZGRlbiBkdWUgdG8gbm9Sb29tLCB0aGVuIFJFU0VUIGJlY2F1c2UgTk9XIHRoZXJlIGlzIHJvb20KKwkJCWlmIChzLm5vUm9vbSkgeworCQkJCS8vIHMubm9Sb29tIHN0YXRlIHdpbGwgYmUgc2V0IGJ5IG9wZW4gb3Igc2hvdworCQkJCWlmIChzLndhc09wZW4gJiYgby5jbG9zYWJsZSkgeworCQkJCQlpZiAoby5hdXRvUmVvcGVuKQorCQkJCQkJb3BlbihwYW5lLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSk7IC8vIHRydWUgPSBub0FuaW1hdGlvbiwgdHJ1ZSA9IG5vQWxlcnQKKwkJCQkJZWxzZSAvLyBsZWF2ZSB0aGUgcGFuZSBjbG9zZWQsIHNvIGp1c3QgdXBkYXRlIHN0YXRlCisJCQkJCQlzLm5vUm9vbSA9IGZhbHNlOworCQkJCX0KKwkJCQllbHNlCisJCQkJCXNob3cocGFuZSwgcy53YXNPcGVuLCB0cnVlLCB0cnVlKTsgLy8gdHJ1ZSA9IG5vQW5pbWF0aW9uLCB0cnVlID0gbm9BbGVydAorCQkJfQorCQl9CisJCWVsc2UgeyAvLyAhaGFzUm9vbSAtIHBhbmUgQ0FOTk9UIGZpdAorCQkJaWYgKCFzLm5vUm9vbSkgeyAvLyBwYW5lIG5vdCBzZXQgYXMgbm9Sb29tIHlldCwgc28gaGlkZSBvciBjbG9zZSBpdCBub3cuLi4KKwkJCQlzLm5vUm9vbSA9IHRydWU7IC8vIHVwZGF0ZSBzdGF0ZQorCQkJCXMud2FzT3BlbiA9ICFzLmlzQ2xvc2VkICYmICFzLmlzU2xpZGluZzsKKwkJCQlpZiAocy5pc0Nsb3NlZCl7fSAvLyBTS0lQCisJCQkJZWxzZSBpZiAoby5jbG9zYWJsZSkgLy8gJ2Nsb3NlJyBpZiBwb3NzaWJsZQorCQkJCQljbG9zZShwYW5lLCB0cnVlLCB0cnVlKTsgLy8gdHJ1ZSA9IGZvcmNlLCB0cnVlID0gbm9BbmltYXRpb24KKwkJCQllbHNlIC8vICdoaWRlJyBwYW5lIGlmIGNhbm5vdCBqdXN0IGJlIGNsb3NlZAorCQkJCQloaWRlKHBhbmUsIHRydWUpOyAvLyB0cnVlID0gbm9BbmltYXRpb24KKwkJCX0KKwkJfQorCX0KKworCisJLyoqCisJKiBzaXplUGFuZSAvIG1hbnVhbFNpemVQYW5lCisJKiBzaXplUGFuZSBpcyBjYWxsZWQgb25seSBieSBpbnRlcm5hbCBtZXRob2RzIHdoZW5ldmVyIGEgcGFuZSBuZWVkcyB0byBiZSByZXNpemVkCisJKiBtYW51YWxTaXplUGFuZSBpcyBhbiBleHBvc2VkIGZsb3ctdGhyb3VnaCBtZXRob2QgYWxsb3dpbmcgZXh0cmEgY29kZSB3aGVuIHBhbmUgaXMgJ21hbnVhbGx5IHJlc2l6ZWQnCisJKgorCSogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fQlldnRfb3JfcGFuZQkJCQlUaGUgcGFuZSBiZWluZyByZXNpemVkCisJKiBAcGFyYW0ge251bWJlcn0JCQlzaXplCQkJCQlUaGUgKmRlc2lyZWQqIG5ldyBzaXplIGZvciB0aGlzIHBhbmUgLSB3aWxsIGJlIHZhbGlkYXRlZAorCSogQHBhcmFtIHtib29sZWFuPX0JCQlbc2tpcENhbGxiYWNrPWZhbHNlXQlTaG91bGQgdGhlIG9ucmVzaXplIGNhbGxiYWNrIGJlIHJ1bj8KKwkqIEBwYXJhbSB7Ym9vbGVhbj19CQkJW25vQW5pbWF0aW9uPWZhbHNlXQorCSovCissCW1hbnVhbFNpemVQYW5lID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lLCBzaXplLCBza2lwQ2FsbGJhY2ssIG5vQW5pbWF0aW9uKSB7CisJCWlmICghaXNJbml0aWFsaXplZCgpKSByZXR1cm47CisJCXZhcglwYW5lID0gZXZ0UGFuZS5jYWxsKHRoaXMsIGV2dF9vcl9wYW5lKQorCQksCW8JPSBvcHRpb25zW3BhbmVdCisJCSwJcwk9IHN0YXRlW3BhbmVdCisJCS8vCWlmIHJlc2l6aW5nIGNhbGxiYWNrcyBoYXZlIGJlZW4gZGVsYXllZCBhbmQgcmVzaXppbmcgaXMgbm93IERPTkUsIGZvcmNlIHJlc2l6aW5nIHRvIGNvbXBsZXRlLi4uCisJCSwJZm9yY2VSZXNpemUgPSBvLmxpdmVQYW5lUmVzaXppbmcgJiYgIXMuaXNSZXNpemluZworCQk7CisJCS8vIEFOWSBjYWxsIHRvIG1hbnVhbFNpemVQYW5lIGRpc2FibGVzIGF1dG9SZXNpemUgLSBpZSwgcGVyY2VudGFnZSBzaXppbmcKKwkJby5hdXRvUmVzaXplID0gZmFsc2U7CisJCS8vIGZsb3ctdGhyb3VnaC4uLgorCQlzaXplUGFuZShwYW5lLCBzaXplLCBza2lwQ2FsbGJhY2ssIGZvcmNlUmVzaXplLCBub0FuaW1hdGlvbik7IC8vIHdpbGwgYW5pbWF0ZSByZXNpemUgaWYgb3B0aW9uIGVuYWJsZWQKKwl9CisKKwkvKioKKwkqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0JZXZ0X29yX3BhbmUJCQkJVGhlIHBhbmUgYmVpbmcgcmVzaXplZAorCSogQHBhcmFtIHtudW1iZXJ9CQkJc2l6ZQkJCQkJVGhlICpkZXNpcmVkKiBuZXcgc2l6ZSBmb3IgdGhpcyBwYW5lIC0gd2lsbCBiZSB2YWxpZGF0ZWQKKwkqIEBwYXJhbSB7Ym9vbGVhbj19CQkJW3NraXBDYWxsYmFjaz1mYWxzZV0JU2hvdWxkIHRoZSBvbnJlc2l6ZSBjYWxsYmFjayBiZSBydW4/CisJKiBAcGFyYW0ge2Jvb2xlYW49fQkJCVtmb3JjZT1mYWxzZV0JCQlGb3JjZSByZXNpemluZyBldmVuIGlmIGRvZXMgbm90IHNlZW0gbmVjZXNzYXJ5CisJKiBAcGFyYW0ge2Jvb2xlYW49fQkJCVtub0FuaW1hdGlvbj1mYWxzZV0KKwkqLworLAlzaXplUGFuZSA9IGZ1bmN0aW9uIChldnRfb3JfcGFuZSwgc2l6ZSwgc2tpcENhbGxiYWNrLCBmb3JjZSwgbm9BbmltYXRpb24pIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJdmFyCXBhbmUJPSBldnRQYW5lLmNhbGwodGhpcywgZXZ0X29yX3BhbmUpIC8vIHByb2JhYmx5IE5FVkVSIGNhbGxlZCBmcm9tIGV2ZW50PworCQksCW8JCT0gb3B0aW9uc1twYW5lXQorCQksCXMJCT0gc3RhdGVbcGFuZV0KKwkJLAkkUAkJPSAkUHNbcGFuZV0KKwkJLAkkUgkJPSAkUnNbcGFuZV0KKwkJLAlzaWRlCT0gX2NbcGFuZV0uc2lkZS50b0xvd2VyQ2FzZSgpCisJCSwJZGltTmFtZQk9IF9jW3BhbmVdLnNpemVUeXBlLnRvTG93ZXJDYXNlKCkKKwkJLAlpbnNldAk9ICJpbnNldCIrIF9jW3BhbmVdLnNpZGUKKwkJLAlza2lwUmVzaXplV2hpbGVEcmFnZ2luZyA9IHMuaXNSZXNpemluZyAmJiAhby50cmlnZ2VyRXZlbnRzRHVyaW5nTGl2ZVJlc2l6ZQorCQksCWRvRlgJPSBub0FuaW1hdGlvbiAhPT0gdHJ1ZSAmJiBvLmFuaW1hdGVQYW5lU2l6aW5nCisJCSwJb2xkU2l6ZSwgbmV3U2l6ZQorCQk7CisJCS8vIFFVRVVFIGluIGNhc2UgYW5vdGhlciBhY3Rpb24vYW5pbWF0aW9uIGlzIGluIHByb2dyZXNzCisJCSROLnF1ZXVlKGZ1bmN0aW9uKCBxdWV1ZU5leHQgKXsKKwkJCS8vIGNhbGN1bGF0ZSAnY3VycmVudCcgbWluL21heCBzaXplcworCQkJc2V0U2l6ZUxpbWl0cyhwYW5lKTsgLy8gdXBkYXRlIHBhbmUtc3RhdGUKKwkJCW9sZFNpemUgPSBzLnNpemU7CisJCQlzaXplID0gX3BhcnNlU2l6ZShwYW5lLCBzaXplKTsgLy8gaGFuZGxlIHBlcmNlbnRhZ2VzICYgYXV0bworCQkJc2l6ZSA9IG1heChzaXplLCBfcGFyc2VTaXplKHBhbmUsIG8ubWluU2l6ZSkpOworCQkJc2l6ZSA9IG1pbihzaXplLCBzLm1heFNpemUpOworCQkJaWYgKHNpemUgPCBzLm1pblNpemUpIHsgLy8gbm90IGVub3VnaCByb29tIGZvciBwYW5lIQorCQkJCXF1ZXVlTmV4dCgpOyAvLyBjYWxsIGJlZm9yZSBtYWtlUGFuZUZpdCgpIGJlY2F1c2UgaXQgbmVlZHMgdGhlIHF1ZXVlIGZyZWUKKwkJCQltYWtlUGFuZUZpdChwYW5lLCBmYWxzZSwgc2tpcENhbGxiYWNrKTsJLy8gd2lsbCBoaWRlIG9yIGNsb3NlIHBhbmUKKwkJCQlyZXR1cm47CisJCQl9CisKKwkJCS8vIElGIG5ld1NpemUgaXMgc2FtZSBhcyBvbGRTaXplLCB0aGVuIG5vdGhpbmcgdG8gZG8gLSBhYm9ydAorCQkJaWYgKCFmb3JjZSAmJiBzaXplID09PSBvbGRTaXplKQorCQkJCXJldHVybiBxdWV1ZU5leHQoKTsKKworCQkJLy8gb25yZXNpemVfc3RhcnQgY2FsbGJhY2sgQ0FOTk9UIGNhbmNlbCByZXNpemluZyBiZWNhdXNlIHRoaXMgd291bGQgYnJlYWsgdGhlIGxheW91dCEKKwkJCWlmICghc2tpcENhbGxiYWNrICYmIHN0YXRlLmluaXRpYWxpemVkICYmIHMuaXNWaXNpYmxlKQorCQkJCV9ydW5DYWxsYmFja3MoIm9ucmVzaXplX3N0YXJ0IiwgcGFuZSk7CisKKwkJCS8vIHJlc2l6ZSB0aGUgcGFuZSwgYW5kIG1ha2Ugc3VyZSBpdHMgdmlzaWJsZQorCQkJbmV3U2l6ZSA9IGNzc1NpemUocGFuZSwgc2l6ZSk7CisKKwkJCWlmIChkb0ZYICYmICRQLmlzKCI6dmlzaWJsZSIpKSB7IC8vIEFOSU1BVEUKKwkJCQl2YXIgZngJCT0gJC5sYXlvdXQuZWZmZWN0cy5zaXplW3BhbmVdIHx8ICQubGF5b3V0LmVmZmVjdHMuc2l6ZS5hbGwKKwkJCQksCWVhc2luZwk9IG8uZnhTZXR0aW5nc19zaXplLmVhc2luZyB8fCBmeC5lYXNpbmcKKwkJCQksCXoJCT0gb3B0aW9ucy56SW5kZXhlcworCQkJCSwJcHJvcHMJPSB7fTsKKwkJCQlwcm9wc1sgZGltTmFtZSBdID0gbmV3U2l6ZSArJ3B4JzsKKwkJCQlzLmlzTW92aW5nID0gdHJ1ZTsKKwkJCQkvLyBvdmVybGF5IGFsbCBlbGVtZW50cyBkdXJpbmcgYW5pbWF0aW9uCisJCQkJJFAuY3NzKHsgekluZGV4OiB6LnBhbmVfYW5pbWF0ZSB9KQorCQkJCSAgLnNob3coKS5hbmltYXRlKCBwcm9wcywgby5meFNwZWVkX3NpemUsIGVhc2luZywgZnVuY3Rpb24oKXsKKwkJCQkJLy8gcmVzZXQgekluZGV4IGFmdGVyIGFuaW1hdGlvbgorCQkJCQkkUC5jc3MoeyB6SW5kZXg6IChzLmlzU2xpZGluZyA/IHoucGFuZV9zbGlkaW5nIDogei5wYW5lX25vcm1hbCkgfSk7CisJCQkJCXMuaXNNb3ZpbmcgPSBmYWxzZTsKKwkJCQkJc2l6ZVBhbmVfMigpOyAvLyBjb250aW51ZQorCQkJCQlxdWV1ZU5leHQoKTsKKwkJCQl9KTsKKwkJCX0KKwkJCWVsc2UgeyAvLyBubyBhbmltYXRpb24KKwkJCQkkUC5jc3MoIGRpbU5hbWUsIG5ld1NpemUgKTsJLy8gcmVzaXplIHBhbmUKKwkJCQkvLyBpZiBwYW5lIGlzIHZpc2libGUsIHRoZW4gCisJCQkJaWYgKCRQLmlzKCI6dmlzaWJsZSIpKQorCQkJCQlzaXplUGFuZV8yKCk7IC8vIGNvbnRpbnVlCisJCQkJZWxzZSB7CisJCQkJCS8vIHBhbmUgaXMgTk9UIFZJU0lCTEUsIHNvIGp1c3QgdXBkYXRlIHN0YXRlIGRhdGEuLi4KKwkJCQkJLy8gd2hlbiBwYW5lIGlzICpuZXh0IG9wZW5lZCosIGl0IHdpbGwgaGF2ZSB0aGUgbmV3IHNpemUKKwkJCQkJcy5zaXplID0gc2l6ZTsJCQkJLy8gdXBkYXRlIHN0YXRlLnNpemUKKwkJCQkJJC5leHRlbmQocywgZWxEaW1zKCRQKSk7CS8vIHVwZGF0ZSBzdGF0ZSBkaW1lbnNpb25zCisJCQkJfQorCQkJCXF1ZXVlTmV4dCgpOworCQkJfTsKKworCQl9KTsKKworCQkvLyBTVUJST1VUSU5FCisJCWZ1bmN0aW9uIHNpemVQYW5lXzIgKCkgeworCQkJLyoJUGFuZXMgYXJlIHNvbWV0aW1lcyBub3Qgc2l6ZWQgcHJlY2lzZWx5IGluIHNvbWUgYnJvd3NlcnMhPworCQkJICoJVGhpcyBjb2RlIHdpbGwgcmVzaXplIHRoZSBwYW5lIHVwIHRvIDMgdGltZXMgdG8gbnVkZ2UgdGhlIHBhbmUgdG8gdGhlIGNvcnJlY3Qgc2l6ZQorCQkJICovCisJCQl2YXIJYWN0dWFsCT0gZGltTmFtZT09PSd3aWR0aCcgPyAkUC5vdXRlcldpZHRoKCkgOiAkUC5vdXRlckhlaWdodCgpCisJCQksCXRyaWVzCT0gW3sKKwkJCQkJCSAgIAlwYW5lOgkJcGFuZQorCQkJCQkJLAljb3VudDoJCTEKKwkJCQkJCSwJdGFyZ2V0OgkJc2l6ZQorCQkJCQkJLAlhY3R1YWw6CQlhY3R1YWwKKwkJCQkJCSwJY29ycmVjdDoJKHNpemUgPT09IGFjdHVhbCkKKwkJCQkJCSwJYXR0ZW1wdDoJc2l6ZQorCQkJCQkJLAljc3NTaXplOgluZXdTaXplCisJCQkJCQl9XQorCQkJLAlsYXN0VHJ5ID0gdHJpZXNbMF0KKwkJCSwJdGhpc1RyeQk9IHt9CisJCQksCW1zZwkJPSAnSW5hY2N1cmF0ZSBzaXplIGFmdGVyIHJlc2l6aW5nIHRoZSAnKyBwYW5lICsnLXBhbmUuJworCQkJOworCQkJd2hpbGUgKCAhbGFzdFRyeS5jb3JyZWN0ICkgeworCQkJCXRoaXNUcnkgPSB7IHBhbmU6IHBhbmUsIGNvdW50OiBsYXN0VHJ5LmNvdW50KzEsIHRhcmdldDogc2l6ZSB9OworCisJCQkJaWYgKGxhc3RUcnkuYWN0dWFsID4gc2l6ZSkKKwkJCQkJdGhpc1RyeS5hdHRlbXB0ID0gbWF4KDAsIGxhc3RUcnkuYXR0ZW1wdCAtIChsYXN0VHJ5LmFjdHVhbCAtIHNpemUpKTsKKwkJCQllbHNlIC8vIGxhc3RUcnkuYWN0dWFsIDwgc2l6ZQorCQkJCQl0aGlzVHJ5LmF0dGVtcHQgPSBtYXgoMCwgbGFzdFRyeS5hdHRlbXB0ICsgKHNpemUgLSBsYXN0VHJ5LmFjdHVhbCkpOworCisJCQkJdGhpc1RyeS5jc3NTaXplID0gY3NzU2l6ZShwYW5lLCB0aGlzVHJ5LmF0dGVtcHQpOworCQkJCSRQLmNzcyggZGltTmFtZSwgdGhpc1RyeS5jc3NTaXplICk7CisKKwkJCQl0aGlzVHJ5LmFjdHVhbAk9IGRpbU5hbWU9PSd3aWR0aCcgPyAkUC5vdXRlcldpZHRoKCkgOiAkUC5vdXRlckhlaWdodCgpOworCQkJCXRoaXNUcnkuY29ycmVjdAk9IChzaXplID09PSB0aGlzVHJ5LmFjdHVhbCk7CisKKwkJCQkvLyBsb2cgYXR0ZW1wdHMgYW5kIGFsZXJ0IHRoZSB1c2VyIG9mIHRoaXMgKm5vbi1mYXRhbCBlcnJvciogKGlmIHNob3dEZWJ1Z01lc3NhZ2VzKQorCQkJCWlmICggdHJpZXMubGVuZ3RoID09PSAxKSB7CisJCQkJCV9sb2cobXNnLCBmYWxzZSwgdHJ1ZSk7CisJCQkJCV9sb2cobGFzdFRyeSwgZmFsc2UsIHRydWUpOworCQkJCX0KKwkJCQlfbG9nKHRoaXNUcnksIGZhbHNlLCB0cnVlKTsKKwkJCQkvLyBhZnRlciA0IHRyaWVzLCBpcyBhcyBjbG9zZSBhcyBpdHMgZ29ubmEgZ2V0IQorCQkJCWlmICh0cmllcy5sZW5ndGggPiAzKSBicmVhazsKKworCQkJCXRyaWVzLnB1c2goIHRoaXNUcnkgKTsKKwkJCQlsYXN0VHJ5ID0gdHJpZXNbIHRyaWVzLmxlbmd0aCAtIDEgXTsKKwkJCX0KKwkJCS8vIEVORCBURVNUSU5HIENPREUKKworCQkJLy8gdXBkYXRlIHBhbmUtc3RhdGUgZGltZW5zaW9ucworCQkJcy5zaXplCT0gc2l6ZTsKKwkJCSQuZXh0ZW5kKHMsIGVsRGltcygkUCkpOworCisJCQlpZiAocy5pc1Zpc2libGUgJiYgJFAuaXMoIjp2aXNpYmxlIikpIHsKKwkJCQkvLyByZXBvc2l0aW9uIHRoZSByZXNpemVyLWJhcgorCQkJCWlmICgkUikgJFIuY3NzKCBzaWRlLCBzaXplICsgc0NbaW5zZXRdICk7CisJCQkJLy8gcmVzaXplIHRoZSBjb250ZW50LWRpdgorCQkJCXNpemVDb250ZW50KHBhbmUpOworCQkJfQorCisJCQlpZiAoIXNraXBDYWxsYmFjayAmJiAhc2tpcFJlc2l6ZVdoaWxlRHJhZ2dpbmcgJiYgc3RhdGUuaW5pdGlhbGl6ZWQgJiYgcy5pc1Zpc2libGUpCisJCQkJX3J1bkNhbGxiYWNrcygib25yZXNpemVfZW5kIiwgcGFuZSk7CisKKwkJCS8vIHJlc2l6ZSBhbGwgdGhlIGFkamFjZW50IHBhbmVzLCBhbmQgYWRqdXN0IHRoZWlyIHRvZ2dsZXIgYnV0dG9ucworCQkJLy8gd2hlbiBza2lwQ2FsbGJhY2sgcGFzc2VkLCBpdCBtZWFucyB0aGUgY29udHJvbGxpbmcgbWV0aG9kIHdpbGwgaGFuZGxlICdvdGhlciBwYW5lcycKKwkJCWlmICghc2tpcENhbGxiYWNrKSB7CisJCQkJLy8gYWxzbyBubyBjYWxsYmFjayBpZiBsaXZlLXJlc2l6ZSBpcyBpbiBwcm9ncmVzcyBhbmQgTk9UIHRyaWdnZXJFdmVudHNEdXJpbmdMaXZlUmVzaXplCisJCQkJaWYgKCFzLmlzU2xpZGluZykgc2l6ZU1pZFBhbmVzKF9jW3BhbmVdLmRpcj09ImhvcnoiID8gIiIgOiAiY2VudGVyIiwgc2tpcFJlc2l6ZVdoaWxlRHJhZ2dpbmcsIGZvcmNlKTsKKwkJCQlzaXplSGFuZGxlcygpOworCQkJfQorCisJCQkvLyBpZiBvcHBvc2l0ZS1wYW5lIHdhcyBhdXRvQ2xvc2VkLCBzZWUgaWYgaXQgY2FuIGJlIGF1dG9PcGVuZWQgbm93CisJCQl2YXIgYWx0UGFuZSA9IF9jLm9wcG9zaXRlRWRnZVtwYW5lXTsKKwkJCWlmIChzaXplIDwgb2xkU2l6ZSAmJiBzdGF0ZVsgYWx0UGFuZSBdLm5vUm9vbSkgeworCQkJCXNldFNpemVMaW1pdHMoIGFsdFBhbmUgKTsKKwkJCQltYWtlUGFuZUZpdCggYWx0UGFuZSwgZmFsc2UsIHNraXBDYWxsYmFjayApOworCQkJfQorCisJCQkvLyBERUJVRyAtIEFMRVJUIHVzZXIvZGV2ZWxvcGVyIHNvIHRoZXkga25vdyB0aGVyZSB3YXMgYSBzaXppbmcgcHJvYmxlbQorCQkJaWYgKHRyaWVzLmxlbmd0aCA+IDEpCisJCQkJX2xvZyhtc2cgKydcblNlZSB0aGUgRXJyb3IgQ29uc29sZSBmb3IgZGV0YWlscy4nLCB0cnVlLCB0cnVlKTsKKwkJfQorCX0KKworCS8qKgorCSogQHNlZSAgaW5pdFBhbmVzKCksIHNpemVQYW5lKCksIHJlc2l6ZUFsbCgpLCBvcGVuKCksIGNsb3NlKCksIGhpZGUoKQorCSogQHBhcmFtIHtBcnJheS48c3RyaW5nPnxzdHJpbmd9IHBhbmVzCQkJCQlUaGUgcGFuZShzKSBiZWluZyByZXNpemVkLCBjb21tYS1kZWxtaXRlZCBzdHJpbmcKKwkqIEBwYXJhbSB7Ym9vbGVhbj19CQkJCVtza2lwQ2FsbGJhY2s9ZmFsc2VdCVNob3VsZCB0aGUgb25yZXNpemUgY2FsbGJhY2sgYmUgcnVuPworCSogQHBhcmFtIHtib29sZWFuPX0JCQkJW2ZvcmNlPWZhbHNlXQorCSovCissCXNpemVNaWRQYW5lcyA9IGZ1bmN0aW9uIChwYW5lcywgc2tpcENhbGxiYWNrLCBmb3JjZSkgeworCQlwYW5lcyA9IChwYW5lcyA/IHBhbmVzIDogImVhc3Qsd2VzdCxjZW50ZXIiKS5zcGxpdCgiLCIpOworCisJCSQuZWFjaChwYW5lcywgZnVuY3Rpb24gKGksIHBhbmUpIHsKKwkJCWlmICghJFBzW3BhbmVdKSByZXR1cm47IC8vIE5PIFBBTkUgLSBza2lwCisJCQl2YXIgCisJCQkJbwkJPSBvcHRpb25zW3BhbmVdCisJCQksCXMJCT0gc3RhdGVbcGFuZV0KKwkJCSwJJFAJCT0gJFBzW3BhbmVdCisJCQksCSRSCQk9ICRSc1twYW5lXQorCQkJLAlpc0NlbnRlcj0gKHBhbmU9PSJjZW50ZXIiKQorCQkJLAloYXNSb29tCT0gdHJ1ZQorCQkJLAlDU1MJCT0ge30KKwkJCSwJbmV3Q2VudGVyCT0gY2FsY05ld0NlbnRlclBhbmVEaW1zKCkKKwkJCTsKKwkJCS8vIHVwZGF0ZSBwYW5lLXN0YXRlIGRpbWVuc2lvbnMKKwkJCSQuZXh0ZW5kKHMsIGVsRGltcygkUCkpOworCisJCQlpZiAocGFuZSA9PT0gImNlbnRlciIpIHsKKwkJCQlpZiAoIWZvcmNlICYmIHMuaXNWaXNpYmxlICYmIG5ld0NlbnRlci53aWR0aCA9PT0gcy5vdXRlcldpZHRoICYmIG5ld0NlbnRlci5oZWlnaHQgPT09IHMub3V0ZXJIZWlnaHQpCisJCQkJCXJldHVybiB0cnVlOyAvLyBTS0lQIC0gcGFuZSBhbHJlYWR5IHRoZSBjb3JyZWN0IHNpemUKKwkJCQkvLyBzZXQgc3RhdGUgZm9yIG1ha2VQYW5lRml0KCkgbG9naWMKKwkJCQkkLmV4dGVuZChzLCBjc3NNaW5EaW1zKHBhbmUpLCB7CisJCQkJCW1heFdpZHRoOgluZXdDZW50ZXIud2lkdGgKKwkJCQksCW1heEhlaWdodDoJbmV3Q2VudGVyLmhlaWdodAorCQkJCX0pOworCQkJCUNTUyA9IG5ld0NlbnRlcjsKKwkJCQkvLyBjb252ZXJ0IE9VVEVSIHdpZHRoL2hlaWdodCB0byBDU1Mgd2lkdGgvaGVpZ2h0IAorCQkJCUNTUy53aWR0aAk9IGNzc1coJFAsIENTUy53aWR0aCk7CisJCQkJLy8gTkVXIC0gYWxsb3cgcGFuZSB0byBleHRlbmQgJ2JlbG93JyB2aXNpYmxlIGFyZWEgcmF0aGVyIHRoYW4gaGlkZSBpdAorCQkJCUNTUy5oZWlnaHQJPSBjc3NIKCRQLCBDU1MuaGVpZ2h0KTsKKwkJCQloYXNSb29tCQk9IENTUy53aWR0aCA+PSAwICYmIENTUy5oZWlnaHQgPj0gMDsgLy8gaGVpZ2h0ID49IDAgPSBBTFdBWVMgVFJVRSBOT1cKKwkJCQkvLyBkdXJpbmcgbGF5b3V0IGluaXQsIHRyeSB0byBzaHJpbmsgZWFzdC93ZXN0IHBhbmVzIHRvIG1ha2Ugcm9vbSBmb3IgY2VudGVyCisJCQkJaWYgKCFzdGF0ZS5pbml0aWFsaXplZCAmJiBvLm1pbldpZHRoID4gcy5vdXRlcldpZHRoKSB7CisJCQkJCXZhcgorCQkJCQkJcmVxUHgJPSBvLm1pbldpZHRoIC0gcy5vdXRlcldpZHRoCisJCQkJCSwJbWluRQk9IG9wdGlvbnMuZWFzdC5taW5TaXplIHx8IDAKKwkJCQkJLAltaW5XCT0gb3B0aW9ucy53ZXN0Lm1pblNpemUgfHwgMAorCQkJCQksCXNpemVFCT0gc3RhdGUuZWFzdC5zaXplCisJCQkJCSwJc2l6ZVcJPSBzdGF0ZS53ZXN0LnNpemUKKwkJCQkJLAluZXdFCT0gc2l6ZUUKKwkJCQkJLAluZXdXCT0gc2l6ZVcKKwkJCQkJOworCQkJCQlpZiAocmVxUHggPiAwICYmIHN0YXRlLmVhc3QuaXNWaXNpYmxlICYmIHNpemVFID4gbWluRSkgeworCQkJCQkJbmV3RSA9IG1heCggc2l6ZUUtbWluRSwgc2l6ZUUtcmVxUHggKTsKKwkJCQkJCXJlcVB4IC09IHNpemVFLW5ld0U7CisJCQkJCX0KKwkJCQkJaWYgKHJlcVB4ID4gMCAmJiBzdGF0ZS53ZXN0LmlzVmlzaWJsZSAmJiBzaXplVyA+IG1pblcpIHsKKwkJCQkJCW5ld1cgPSBtYXgoIHNpemVXLW1pblcsIHNpemVXLXJlcVB4ICk7CisJCQkJCQlyZXFQeCAtPSBzaXplVy1uZXdXOworCQkJCQl9CisJCQkJCS8vIElGIHdlIGZvdW5kIGVub3VnaCBleHRyYSBzcGFjZSwgdGhlbiByZXNpemUgdGhlIGJvcmRlciBwYW5lcyBhcyBjYWxjdWxhdGVkCisJCQkJCWlmIChyZXFQeCA9PT0gMCkgeworCQkJCQkJaWYgKHNpemVFICYmIHNpemVFICE9IG1pbkUpCisJCQkJCQkJc2l6ZVBhbmUoJ2Vhc3QnLCBuZXdFLCB0cnVlLCBmb3JjZSwgdHJ1ZSk7IC8vIHRydWUgPSBza2lwQ2FsbGJhY2svbm9BbmltYXRpb24gLSBpbml0UGFuZXMgd2lsbCBoYW5kbGUgd2hlbiBkb25lCisJCQkJCQlpZiAoc2l6ZVcgJiYgc2l6ZVcgIT0gbWluVykKKwkJCQkJCQlzaXplUGFuZSgnd2VzdCcsIG5ld1csIHRydWUsIGZvcmNlLCB0cnVlKTsKKwkJCQkJCS8vIG5vdyBzdGFydCBvdmVyIQorCQkJCQkJc2l6ZU1pZFBhbmVzKCdjZW50ZXInLCBza2lwQ2FsbGJhY2ssIGZvcmNlKTsKKwkJCQkJCXJldHVybjsgLy8gYWJvcnQgdGhpcyBsb29wCisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNlIHsgLy8gZm9yIGVhc3QgYW5kIHdlc3QsIHNldCBvbmx5IHRoZSBoZWlnaHQsIHdoaWNoIGlzIHNhbWUgYXMgY2VudGVyIGhlaWdodAorCQkJCS8vIHNldCBzdGF0ZS5taW4vbWF4V2lkdGgvSGVpZ2h0IGZvciBtYWtlUGFuZUZpdCgpIGxvZ2ljCisJCQkJaWYgKHMuaXNWaXNpYmxlICYmICFzLm5vVmVydGljYWxSb29tKQorCQkJCQkkLmV4dGVuZChzLCBlbERpbXMoJFApLCBjc3NNaW5EaW1zKHBhbmUpKQorCQkJCWlmICghZm9yY2UgJiYgIXMubm9WZXJ0aWNhbFJvb20gJiYgbmV3Q2VudGVyLmhlaWdodCA9PT0gcy5vdXRlckhlaWdodCkKKwkJCQkJcmV0dXJuIHRydWU7IC8vIFNLSVAgLSBwYW5lIGFscmVhZHkgdGhlIGNvcnJlY3Qgc2l6ZQorCQkJCS8vIGVhc3Qvd2VzdCBoYXZlIHNhbWUgdG9wLCBib3R0b20gJiBoZWlnaHQgYXMgY2VudGVyCisJCQkJQ1NTLnRvcAkJPSBuZXdDZW50ZXIudG9wOworCQkJCUNTUy5ib3R0b20JPSBuZXdDZW50ZXIuYm90dG9tOworCQkJCS8vIE5FVyAtIGFsbG93IHBhbmUgdG8gZXh0ZW5kICdiZWxvdycgdmlzaWJsZSBhcmVhIHJhdGhlciB0aGFuIGhpZGUgaXQKKwkJCQlDU1MuaGVpZ2h0CT0gY3NzSCgkUCwgbmV3Q2VudGVyLmhlaWdodCk7CisJCQkJcy5tYXhIZWlnaHQJPSBDU1MuaGVpZ2h0OworCQkJCWhhc1Jvb20JCT0gKHMubWF4SGVpZ2h0ID49IDApOyAvLyBBTFdBWVMgVFJVRSBOT1cKKwkJCQlpZiAoIWhhc1Jvb20pIHMubm9WZXJ0aWNhbFJvb20gPSB0cnVlOyAvLyBtYWtlUGFuZUZpdCgpIGxvZ2ljCisJCQl9CisKKwkJCWlmIChoYXNSb29tKSB7CisJCQkJLy8gcmVzaXplQWxsIHBhc3NlcyBza2lwQ2FsbGJhY2sgYmVjYXVzZSBpdCB0cmlnZ2VycyBjYWxsYmFja3MgYWZ0ZXIgQUxMIHBhbmVzIGFyZSByZXNpemVkCisJCQkJaWYgKCFza2lwQ2FsbGJhY2sgJiYgc3RhdGUuaW5pdGlhbGl6ZWQpCisJCQkJCV9ydW5DYWxsYmFja3MoIm9ucmVzaXplX3N0YXJ0IiwgcGFuZSk7CisKKwkJCQkkUC5jc3MoQ1NTKTsgLy8gYXBwbHkgdGhlIENTUyB0byBwYW5lCisJCQkJaWYgKHBhbmUgIT09ICJjZW50ZXIiKQorCQkJCQlzaXplSGFuZGxlcyhwYW5lKTsgLy8gYWxzbyB1cGRhdGUgcmVzaXplciBsZW5ndGgKKwkJCQlpZiAocy5ub1Jvb20gJiYgIXMuaXNDbG9zZWQgJiYgIXMuaXNIaWRkZW4pCisJCQkJCW1ha2VQYW5lRml0KHBhbmUpOyAvLyB3aWxsIHJlLW9wZW4vc2hvdyBhdXRvLWNsb3NlZC9oaWRkZW4gcGFuZQorCQkJCWlmIChzLmlzVmlzaWJsZSkgeworCQkJCQkkLmV4dGVuZChzLCBlbERpbXMoJFApKTsgLy8gdXBkYXRlIHBhbmUgZGltZW5zaW9ucworCQkJCQlpZiAoc3RhdGUuaW5pdGlhbGl6ZWQpIHNpemVDb250ZW50KHBhbmUpOyAvLyBhbHNvIHJlc2l6ZSB0aGUgY29udGVudHMsIGlmIGV4aXN0cworCQkJCX0KKwkJCX0KKwkJCWVsc2UgaWYgKCFzLm5vUm9vbSAmJiBzLmlzVmlzaWJsZSkgLy8gbm8gcm9vbSBmb3IgcGFuZQorCQkJCW1ha2VQYW5lRml0KHBhbmUpOyAvLyB3aWxsIGhpZGUgb3IgY2xvc2UgcGFuZQorCisJCQlpZiAoIXMuaXNWaXNpYmxlKQorCQkJCXJldHVybiB0cnVlOyAvLyBET05FIC0gbmV4dCBwYW5lCisKKwkJCS8qCisJCQkqIEV4dHJhIENTUyBmb3IgSUU2IG9yIElFNyBpbiBRdWlya3MtbW9kZSAtIGFkZCAnd2lkdGgnIHRvIE5PUlRIL1NPVVRIIHBhbmVzCisJCQkqIE5vcm1hbGx5IHRoZXNlIHBhbmVzIGhhdmUgb25seSAnbGVmdCcgJiAncmlnaHQnIHBvc2l0aW9ucyBzbyBwYW5lIGF1dG8tc2l6ZXMKKwkJCSogQUxTTyByZXF1aXJlZCB3aGVuIHBhbmUgaXMgYW4gSUZSQU1FIGJlY2F1c2Ugd2lsbCBOT1QgZGVmYXVsdCB0byAnZnVsbCB3aWR0aCcKKwkJCSoJVE9ETzogQ2FuIEkgdXNlIHdpZHRoOjEwMCUgZm9yIGEgbm9ydGgvc291dGggaWZyYW1lPworCQkJKglUT0RPOiBTb3VuZHMgbGlrZSBhIGpvYiBmb3IgJFAub3V0ZXJXaWR0aCggc0MuaW5uZXJXaWR0aCApIFNFVFRFUiBNRVRIT0QKKwkJCSovCisJCQlpZiAocGFuZSA9PT0gImNlbnRlciIpIHsgLy8gZmluaXNoZWQgcHJvY2Vzc2luZyBtaWRQYW5lcworCQkJCXZhciBmaXggPSBicm93c2VyLmlzSUU2IHx8ICFicm93c2VyLmJveE1vZGVsOworCQkJCWlmICgkUHMubm9ydGggJiYgKGZpeCB8fCBzdGF0ZS5ub3J0aC50YWdOYW1lPT0iSUZSQU1FIikpIAorCQkJCQkkUHMubm9ydGguY3NzKCJ3aWR0aCIsIGNzc1coJFBzLm5vcnRoLCBzQy5pbm5lcldpZHRoKSk7CisJCQkJaWYgKCRQcy5zb3V0aCAmJiAoZml4IHx8IHN0YXRlLnNvdXRoLnRhZ05hbWU9PSJJRlJBTUUiKSkKKwkJCQkJJFBzLnNvdXRoLmNzcygid2lkdGgiLCBjc3NXKCRQcy5zb3V0aCwgc0MuaW5uZXJXaWR0aCkpOworCQkJfQorCisJCQkvLyByZXNpemVBbGwgcGFzc2VzIHNraXBDYWxsYmFjayBiZWNhdXNlIGl0IHRyaWdnZXJzIGNhbGxiYWNrcyBhZnRlciBBTEwgcGFuZXMgYXJlIHJlc2l6ZWQKKwkJCWlmICghc2tpcENhbGxiYWNrICYmIHN0YXRlLmluaXRpYWxpemVkKQorCQkJCV9ydW5DYWxsYmFja3MoIm9ucmVzaXplX2VuZCIsIHBhbmUpOworCQl9KTsKKwl9CisKKworCS8qKgorCSogQHNlZSAgd2luZG93Lm9ucmVzaXplKCksIGNhbGxiYWNrcyBvciBjdXN0b20gY29kZQorCSovCissCXJlc2l6ZUFsbCA9IGZ1bmN0aW9uIChldnQpIHsKKwkJLy8gc3RvcFByb3BhZ2F0aW9uIGlmIGNhbGxlZCBieSB0cmlnZ2VyKCJsYXlvdXRkZXN0cm95IikgLSB1c2UgZXZ0UGFuZSB1dGlsaXR5IAorCQlldnRQYW5lKGV2dCk7CisKKwkJaWYgKCFzdGF0ZS5pbml0aWFsaXplZCkgeworCQkJX2luaXRMYXlvdXRFbGVtZW50cygpOworCQkJcmV0dXJuOyAvLyBubyBuZWVkIHRvIHJlc2l6ZSBzaW5jZSB3ZSBqdXN0IGluaXRpYWxpemVkIQorCQl9CisJCXZhcglvbGRXCT0gc0MuaW5uZXJXaWR0aAorCQksCW9sZEgJPSBzQy5pbm5lckhlaWdodAorCQk7CisJCS8vIGNhbm5vdCBzaXplIGxheW91dCB3aGVuICdjb250YWluZXInIGlzIGhpZGRlbiBvciBjb2xsYXBzZWQKKwkJaWYgKCEkTi5pcygiOnZpc2libGUiKSApIHJldHVybjsKKwkJJC5leHRlbmQoc3RhdGUuY29udGFpbmVyLCBlbERpbXMoICROICkpOyAvLyBVUERBVEUgY29udGFpbmVyIGRpbWVuc2lvbnMKKwkJaWYgKCFzQy5vdXRlckhlaWdodCkgcmV0dXJuOworCisJCS8vIG9ucmVzaXplYWxsX3N0YXJ0IHdpbGwgQ0FOQ0VMIHJlc2l6aW5nIGlmIHJldHVybnMgZmFsc2UKKwkJLy8gc3RhdGUuY29udGFpbmVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0LCBzbyB1c2VyIGNhbiBhY2Nlc3MgdGhpcyBpbmZvIGZvciBjYWxjdWF0aW9ucworCQlpZiAoZmFsc2UgPT09IF9ydW5DYWxsYmFja3MoIm9ucmVzaXplYWxsX3N0YXJ0IikpIHJldHVybiBmYWxzZTsKKworCQl2YXIJLy8gc2VlIGlmIGNvbnRhaW5lciBpcyBub3cgJ3NtYWxsZXInIHRoYW4gYmVmb3JlCisJCQlzaHJ1bmtICT0gKHNDLmlubmVySGVpZ2h0IDwgb2xkSCkKKwkJLAlzaHJ1bmtXCT0gKHNDLmlubmVyV2lkdGggPCBvbGRXKQorCQksCSRQLCBvLCBzLCBkaXIKKwkJOworCQkvLyBOT1RFIHNwZWNpYWwgb3JkZXIgZm9yIHNpemluZzogUy1OLUUtVworCQkkLmVhY2goWyJzb3V0aCIsIm5vcnRoIiwiZWFzdCIsIndlc3QiXSwgZnVuY3Rpb24gKGksIHBhbmUpIHsKKwkJCWlmICghJFBzW3BhbmVdKSByZXR1cm47IC8vIG5vIHBhbmUgLSBTS0lQCisJCQlzCT0gc3RhdGVbcGFuZV07CisJCQlvCT0gb3B0aW9uc1twYW5lXTsKKwkJCWRpcgk9IF9jW3BhbmVdLmRpcjsKKworCQkJaWYgKG8uYXV0b1Jlc2l6ZSAmJiBzLnNpemUgIT0gby5zaXplKSAvLyByZXNpemUgcGFuZSB0byBvcmlnaW5hbCBzaXplIHNldCBpbiBvcHRpb25zCisJCQkJc2l6ZVBhbmUocGFuZSwgby5zaXplLCB0cnVlLCB0cnVlLCB0cnVlKTsgLy8gdHJ1ZT1za2lwQ2FsbGJhY2svZm9yY2VSZXNpemUvbm9BbmltYXRpb24KKwkJCWVsc2UgeworCQkJCXNldFNpemVMaW1pdHMocGFuZSk7CisJCQkJbWFrZVBhbmVGaXQocGFuZSwgZmFsc2UsIHRydWUsIHRydWUpOyAvLyB0cnVlPXNraXBDYWxsYmFjay9mb3JjZVJlc2l6ZQorCQkJfQorCQl9KTsKKworCQlzaXplTWlkUGFuZXMoIiIsIHRydWUsIHRydWUpOyAvLyB0cnVlPXNraXBDYWxsYmFjaywgdHJ1ZT1mb3JjZVJlc2l6ZQorCQlzaXplSGFuZGxlcygpOyAvLyByZXBvc2l0aW9uIHRoZSB0b2dnbGVyIGVsZW1lbnRzCisKKwkJLy8gdHJpZ2dlciBhbGwgaW5kaXZpZHVhbCBwYW5lIGNhbGxiYWNrcyBBRlRFUiBsYXlvdXQgaGFzIGZpbmlzaGVkIHJlc2l6aW5nCisJCW8gPSBvcHRpb25zOyAvLyByZXVzZSBhbGlhcworCQkkLmVhY2goX2MuYWxsUGFuZXMsIGZ1bmN0aW9uIChpLCBwYW5lKSB7CisJCQkkUCA9ICRQc1twYW5lXTsKKwkJCWlmICghJFApIHJldHVybjsgLy8gU0tJUAorCQkJaWYgKHN0YXRlW3BhbmVdLmlzVmlzaWJsZSkgLy8gdW5kZWZpbmVkIGZvciBub24tZXhpc3RlbnQgcGFuZXMKKwkJCQlfcnVuQ2FsbGJhY2tzKCJvbnJlc2l6ZV9lbmQiLCBwYW5lKTsgLy8gY2FsbGJhY2sgLSBpZiBleGlzdHMKKwkJfSk7CisKKwkJX3J1bkNhbGxiYWNrcygib25yZXNpemVhbGxfZW5kIik7CisJCS8vX3RyaWdnZXJMYXlvdXRFdmVudChwYW5lLCAncmVzaXplYWxsJyk7CisJfQorCisJLyoqCisJKiBXaGVuZXZlciBhIHBhbmUgcmVzaXplcyBvciBvcGVucyB0aGF0IGhhcyBhIG5lc3RlZCBsYXlvdXQsIHRyaWdnZXIgcmVzaXplQWxsCisJKgorCSogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fQlldnRfb3JfcGFuZQkJVGhlIHBhbmUganVzdCByZXNpemVkIG9yIG9wZW5lZAorCSovCissCXJlc2l6ZUNoaWxkTGF5b3V0ID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lKSB7CisJCXZhcglwYW5lID0gZXZ0UGFuZS5jYWxsKHRoaXMsIGV2dF9vcl9wYW5lKTsKKwkJaWYgKCFvcHRpb25zW3BhbmVdLnJlc2l6ZUNoaWxkTGF5b3V0KSByZXR1cm47CisJCXZhcgkkUAk9ICRQc1twYW5lXQorCQksCSRDCT0gJENzW3BhbmVdCisJCSwJZAk9ICJsYXlvdXQiCisJCSwJUAk9IEluc3RhbmNlW3BhbmVdCisJCSwJTAk9IGNoaWxkcmVuW3BhbmVdCisJCTsKKwkJLy8gdXNlciBtYXkgaGF2ZSBtYW51YWxseSBzZXQgRUlUSEVSIGluc3RhbmNlIHBvaW50ZXIsIHNvIGhhbmRsZSB0aGF0CisJCWlmIChQLmNoaWxkICYmICFMKSB7CisJCQkvLyBoYXZlIHRvIHJldmVyc2UgdGhlIHBvaW50ZXJzIQorCQkJdmFyIGVsID0gUC5jaGlsZC5jb250YWluZXI7CisJCQlMID0gY2hpbGRyZW5bcGFuZV0gPSAoZWwgPyBlbC5kYXRhKGQpIDogMCkgfHwgbnVsbDsgLy8gc2V0IHBvaW50ZXIgX2RpcmVjdGx5XyB0byBsYXlvdXQgaW5zdGFuY2UKKwkJfQorCisJCS8vIGlmIGEgbGF5b3V0LXBvaW50ZXIgZXhpc3RzLCBzZWUgaWYgY2hpbGQgaGFzIGJlZW4gZGVzdHJveWVkCisJCWlmIChMICYmIEwuZGVzdHJveWVkKQorCQkJTCA9IGNoaWxkcmVuW3BhbmVdID0gbnVsbDsgLy8gY2xlYXIgY2hpbGQgcG9pbnRlcnMKKwkJLy8gbm8gY2hpbGQgbGF5b3V0IHBvaW50ZXIgaXMgc2V0IC0gc2VlIGlmIHRoZXJlIGlzIGEgY2hpbGQgbGF5b3V0IE5PVworCQlpZiAoIUwpCUwgPSBjaGlsZHJlbltwYW5lXSA9ICRQLmRhdGEoZCkgfHwgKCRDID8gJEMuZGF0YShkKSA6IDApIHx8IG51bGw7IC8vIHNldC91cGRhdGUgY2hpbGQgcG9pbnRlcnMKKworCQkvLyBBTFdBWVMgcmVmcmVzaCB0aGUgcGFuZS5jaGlsZCBhbGlhcworCQlQLmNoaWxkID0gY2hpbGRyZW5bcGFuZV07CisKKwkJaWYgKEwpIEwucmVzaXplQWxsKCk7CisJfQorCisKKwkvKioKKwkqIElGIHBhbmUgaGFzIGEgY29udGVudC1kaXYsIHRoZW4gcmVzaXplIGFsbCBlbGVtZW50cyBpbnNpZGUgcGFuZSB0byBmaXQgcGFuZS1oZWlnaHQKKwkqCisJKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9CWV2dF9vcl9wYW5lcwkJVGhlIHBhbmUocykgYmVpbmcgcmVzaXplZAorCSogQHBhcmFtIHtib29sZWFuPX0JCQlbcmVtZWFzdXJlPWZhbHNlXQlTaG91bGQgdGhlIGNvbnRlbnQgKGhlYWRlci9mb290ZXIpIGJlIHJlbWVhc3VyZWQ/CisJKi8KKywJc2l6ZUNvbnRlbnQgPSBmdW5jdGlvbiAoZXZ0X29yX3BhbmVzLCByZW1lYXN1cmUpIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKworCQl2YXIgcGFuZXMgPSBldnRQYW5lLmNhbGwodGhpcywgZXZ0X29yX3BhbmVzKTsKKwkJcGFuZXMgPSBwYW5lcyA/IHBhbmVzLnNwbGl0KCIsIikgOiBfYy5hbGxQYW5lczsKKworCQkkLmVhY2gocGFuZXMsIGZ1bmN0aW9uIChpZHgsIHBhbmUpIHsKKwkJCXZhcgorCQkJCSRQCT0gJFBzW3BhbmVdCisJCQksCSRDCT0gJENzW3BhbmVdCisJCQksCW8JPSBvcHRpb25zW3BhbmVdCisJCQksCXMJPSBzdGF0ZVtwYW5lXQorCQkJLAltCT0gcy5jb250ZW50IC8vIG0gPSBtZWFzdXJlbWVudHMKKwkJCTsKKwkJCWlmICghJFAgfHwgISRDIHx8ICEkUC5pcygiOnZpc2libGUiKSkgcmV0dXJuIHRydWU7IC8vIE5PVCBWSVNJQkxFIC0gc2tpcAorCisJCQkvLyBpZiBjb250ZW50LWVsZW1lbnQgd2FzIFJFTU9WRUQsIHVwZGF0ZSBPUiByZW1vdmUgdGhlIHBvaW50ZXIKKwkJCWlmICghJEMubGVuZ3RoKSB7CisJCQkJaW5pdENvbnRlbnQocGFuZSwgZmFsc2UpOwkvLyBmYWxzZSA9IGRvIE5PVCBzaXplQ29udGVudCgpIC0gYWxyZWFkeSB0aGVyZSEKKwkJCQlpZiAoISRDKSByZXR1cm47CQkJLy8gbm8gcmVwbGFjZW1lbnQgZWxlbWVudCBmb3VuZCAtIHBvaW50ZXIgaGF2ZSBiZWVuIHJlbW92ZWQKKwkJCX0KKworCQkJLy8gb25zaXplY29udGVudF9zdGFydCB3aWxsIENBTkNFTCByZXNpemluZyBpZiByZXR1cm5zIGZhbHNlCisJCQlpZiAoZmFsc2UgPT09IF9ydW5DYWxsYmFja3MoIm9uc2l6ZWNvbnRlbnRfc3RhcnQiLCBwYW5lKSkgcmV0dXJuOworCisJCQkvLyBza2lwIHJlLW1lYXN1cmluZyBvZmZzZXRzIGlmIGxpdmUtcmVzaXppbmcKKwkJCWlmICgoIXMuaXNNb3ZpbmcgJiYgIXMuaXNSZXNpemluZykgfHwgby5saXZlQ29udGVudFJlc2l6aW5nIHx8IHJlbWVhc3VyZSB8fCBtLnRvcCA9PSB1bmRlZmluZWQpIHsKKwkJCQlfbWVhc3VyZSgpOworCQkJCS8vIGlmIGFueSBmb290ZXJzIGFyZSBiZWxvdyBwYW5lLWJvdHRvbSwgdGhleSBtYXkgbm90IG1lYXN1cmUgY29ycmVjdGx5LAorCQkJCS8vIHNvIGFsbG93IHBhbmUgb3ZlcmZsb3cgYW5kIHJlLW1lYXN1cmUKKwkJCQlpZiAobS5oaWRkZW5Gb290ZXJzID4gMCAmJiAkUC5jc3MoIm92ZXJmbG93IikgPT09ICJoaWRkZW4iKSB7CisJCQkJCSRQLmNzcygib3ZlcmZsb3ciLCAidmlzaWJsZSIpOworCQkJCQlfbWVhc3VyZSgpOyAvLyByZW1lYXN1cmUgd2hpbGUgb3ZlcmZsb3dpbmcKKwkJCQkJJFAuY3NzKCJvdmVyZmxvdyIsICJoaWRkZW4iKTsKKwkJCQl9CisJCQl9CisJCQkvLyBOT1RFOiBzcGFjZUFib3ZlL0JlbG93ICppbmNsdWRlcyogdGhlIHBhbmUgcGFkZGluZ1RvcC9Cb3R0b20sIGJ1dCBub3QgcGFuZS5ib3JkZXJzCisJCQl2YXIgbmV3SCA9IHMuaW5uZXJIZWlnaHQgLSAobS5zcGFjZUFib3ZlIC0gcy5jc3MucGFkZGluZ1RvcCkgLSAobS5zcGFjZUJlbG93IC0gcy5jc3MucGFkZGluZ0JvdHRvbSk7CisKKwkJCWlmICghJEMuaXMoIjp2aXNpYmxlIikgfHwgbS5oZWlnaHQgIT0gbmV3SCkgeworCQkJCS8vIHNpemUgdGhlIENvbnRlbnQgZWxlbWVudCB0byBmaXQgbmV3IHBhbmUtc2l6ZSAtIHdpbGwgYXV0b0hpZGUgaWYgbm90IGVub3VnaCByb29tCisJCQkJc2V0T3V0ZXJIZWlnaHQoJEMsIG5ld0gsIHRydWUpOyAvLyB0cnVlPWF1dG9IaWRlCisJCQkJbS5oZWlnaHQgPSBuZXdIOyAvLyBzYXZlIG5ldyBoZWlnaHQKKwkJCX07CisKKwkJCWlmIChzdGF0ZS5pbml0aWFsaXplZCkKKwkJCQlfcnVuQ2FsbGJhY2tzKCJvbnNpemVjb250ZW50X2VuZCIsIHBhbmUpOworCisJCQlmdW5jdGlvbiBfYmVsb3cgKCRFKSB7CisJCQkJcmV0dXJuIG1heChzLmNzcy5wYWRkaW5nQm90dG9tLCAocGFyc2VJbnQoJEUuY3NzKCJtYXJnaW5Cb3R0b20iKSwgMTApIHx8IDApKTsKKwkJCX07CisKKwkJCWZ1bmN0aW9uIF9tZWFzdXJlICgpIHsKKwkJCQl2YXIKKwkJCQkJaWdub3JlCT0gb3B0aW9uc1twYW5lXS5jb250ZW50SWdub3JlU2VsZWN0b3IKKwkJCQksCSRGcwkJPSAkQy5uZXh0QWxsKCkubm90KGlnbm9yZSB8fCAnOmx0KDApJykgLy8gbm90IDpsdCgwKSA9IEFMTAorCQkJCSwJJEZzX3Zpcwk9ICRGcy5maWx0ZXIoJzp2aXNpYmxlJykKKwkJCQksCSRGCQk9ICRGc192aXMuZmlsdGVyKCc6bGFzdCcpCisJCQkJOworCQkJCW0gPSB7CisJCQkJCXRvcDoJCQkkQ1swXS5vZmZzZXRUb3AKKwkJCQksCWhlaWdodDoJCQkkQy5vdXRlckhlaWdodCgpCisJCQkJLAludW1Gb290ZXJzOgkJJEZzLmxlbmd0aAorCQkJCSwJaGlkZGVuRm9vdGVyczoJJEZzLmxlbmd0aCAtICRGc192aXMubGVuZ3RoCisJCQkJLAlzcGFjZUJlbG93OgkJMCAvLyBjb3JyZWN0IGlmIG5vIGNvbnRlbnQgZm9vdGVyICgkRSkKKwkJCQl9CisJCQkJCW0uc3BhY2VBYm92ZQk9IG0udG9wOyAvLyBqdXN0IGZvciBzdGF0ZSAtIG5vdCB1c2VkIGluIGNhbGMKKwkJCQkJbS5ib3R0b20JCT0gbS50b3AgKyBtLmhlaWdodDsKKwkJCQlpZiAoJEYubGVuZ3RoKQorCQkJCQkvL3NwYWNlQmVsb3cgPSAoTGFzdEZvb3Rlci50b3AgKyBMYXN0Rm9vdGVyLmhlaWdodCkgW2Zvb3RlckJvdHRvbV0gLSBDb250ZW50LmJvdHRvbSArIG1heChMYXN0Rm9vdGVyLm1hcmdpbkJvdHRvbSwgcGFuZS5wYWRkaW5nQm90b20pCisJCQkJCW0uc3BhY2VCZWxvdyA9ICgkRlswXS5vZmZzZXRUb3AgKyAkRi5vdXRlckhlaWdodCgpKSAtIG0uYm90dG9tICsgX2JlbG93KCRGKTsKKwkJCQllbHNlIC8vIG5vIGZvb3RlciAtIGNoZWNrIG1hcmdpbkJvdHRvbSBvbiBDb250ZW50IGVsZW1lbnQgaXRzZWxmCisJCQkJCW0uc3BhY2VCZWxvdyA9IF9iZWxvdygkQyk7CisJCQl9OworCQl9KTsKKwl9CisKKworCS8qKgorCSogQ2FsbGVkIGV2ZXJ5IHRpbWUgYSBwYW5lIGlzIG9wZW5lZCwgY2xvc2VkLCBvciByZXNpemVkIHRvIHNsaWRlIHRoZSB0b2dnbGVycyB0byAnY2VudGVyJyBhbmQgYWRqdXN0IHRoZWlyIGxlbmd0aCBpZiBuZWNlc3NhcnkKKwkqCisJKiBAc2VlICBpbml0SGFuZGxlcygpLCBvcGVuKCksIGNsb3NlKCksIHJlc2l6ZUFsbCgpCisJKiBAcGFyYW0ge3N0cmluZ3xPYmplY3R9CWV2dF9vcl9wYW5lcwkJVGhlIHBhbmUocykgYmVpbmcgcmVzaXplZAorCSovCissCXNpemVIYW5kbGVzID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lcykgeworCQl2YXIgcGFuZXMgPSBldnRQYW5lLmNhbGwodGhpcywgZXZ0X29yX3BhbmVzKQorCQlwYW5lcyA9IHBhbmVzID8gcGFuZXMuc3BsaXQoIiwiKSA6IF9jLmJvcmRlclBhbmVzOworCisJCSQuZWFjaChwYW5lcywgZnVuY3Rpb24gKGksIHBhbmUpIHsKKwkJCXZhciAKKwkJCQlvCT0gb3B0aW9uc1twYW5lXQorCQkJLAlzCT0gc3RhdGVbcGFuZV0KKwkJCSwJJFAJPSAkUHNbcGFuZV0KKwkJCSwJJFIJPSAkUnNbcGFuZV0KKwkJCSwJJFQJPSAkVHNbcGFuZV0KKwkJCSwJJFRDCisJCQk7CisJCQlpZiAoISRQIHx8ICEkUikgcmV0dXJuOworCisJCQl2YXIKKwkJCQlkaXIJCQk9IF9jW3BhbmVdLmRpcgorCQkJLAlfc3RhdGUJCT0gKHMuaXNDbG9zZWQgPyAiX2Nsb3NlZCIgOiAiX29wZW4iKQorCQkJLAlzcGFjaW5nCQk9IG9bInNwYWNpbmciKyBfc3RhdGVdCisJCQksCXRvZ0FsaWduCT0gb1sidG9nZ2xlckFsaWduIisgX3N0YXRlXQorCQkJLAl0b2dMZW4JCT0gb1sidG9nZ2xlckxlbmd0aCIrIF9zdGF0ZV0KKwkJCSwJcGFuZUxlbgorCQkJLAlsZWZ0CisJCQksCW9mZnNldAorCQkJLAlDU1MgPSB7fQorCQkJOworCisJCQlpZiAoc3BhY2luZyA9PT0gMCkgeworCQkJCSRSLmhpZGUoKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQllbHNlIGlmICghcy5ub1Jvb20gJiYgIXMuaXNIaWRkZW4pIC8vIHNraXAgaWYgcmVzaXplciB3YXMgaGlkZGVuIGZvciBhbnkgcmVhc29uCisJCQkJJFIuc2hvdygpOyAvLyBpbiBjYXNlIHdhcyBwcmV2aW91c2x5IGhpZGRlbgorCisJCQkvLyBSZXNpemVyIEJhciBpcyBBTFdBWVMgc2FtZSB3aWR0aC9oZWlnaHQgb2YgcGFuZSBpdCBpcyBhdHRhY2hlZCB0bworCQkJaWYgKGRpciA9PT0gImhvcnoiKSB7IC8vIG5vcnRoL3NvdXRoCisJCQkJLy9wYW5lTGVuID0gJFAub3V0ZXJXaWR0aCgpOyAvLyBzLm91dGVyV2lkdGggfHwgCisJCQkJcGFuZUxlbiA9IHNDLmlubmVyV2lkdGg7IC8vIGhhbmRsZSBvZmZzY3JlZW4tcGFuZXMKKwkJCQlzLnJlc2l6ZXJMZW5ndGggPSBwYW5lTGVuOworCQkJCWxlZnQgPSAkLmxheW91dC5jc3NOdW0oJFAsICJsZWZ0IikKKwkJCQkkUi5jc3MoeworCQkJCQl3aWR0aDoJY3NzVygkUiwgcGFuZUxlbikgLy8gYWNjb3VudCBmb3IgYm9yZGVycyAmIHBhZGRpbmcKKwkJCQksCWhlaWdodDoJY3NzSCgkUiwgc3BhY2luZykgLy8gZGl0dG8KKwkJCQksCWxlZnQ6CWxlZnQgPiAtOTk5OSA/IGxlZnQgOiBzQy5pbnNldExlZnQgLy8gaGFuZGxlIG9mZnNjcmVlbi1wYW5lcworCQkJCX0pOworCQkJfQorCQkJZWxzZSB7IC8vIGVhc3Qvd2VzdAorCQkJCXBhbmVMZW4gPSAkUC5vdXRlckhlaWdodCgpOyAvLyBzLm91dGVySGVpZ2h0IHx8IAorCQkJCXMucmVzaXplckxlbmd0aCA9IHBhbmVMZW47CisJCQkJJFIuY3NzKHsKKwkJCQkJaGVpZ2h0Ogljc3NIKCRSLCBwYW5lTGVuKSAvLyBhY2NvdW50IGZvciBib3JkZXJzICYgcGFkZGluZworCQkJCSwJd2lkdGg6CWNzc1coJFIsIHNwYWNpbmcpIC8vIGRpdHRvCisJCQkJLAl0b3A6CXNDLmluc2V0VG9wICsgZ2V0UGFuZVNpemUoIm5vcnRoIiwgdHJ1ZSkgLy8gVE9ETzogd2hhdCBpZiBubyBOb3J0aCBwYW5lPworCQkJCS8vLAl0b3A6CSQubGF5b3V0LmNzc051bSgkUHNbImNlbnRlciJdLCAidG9wIikKKwkJCQl9KTsKKwkJCX0KKworCQkJLy8gcmVtb3ZlIGhvdmVyIGNsYXNzZXMKKwkJCXJlbW92ZUhvdmVyKCBvLCAkUiApOworCisJCQlpZiAoJFQpIHsKKwkJCQlpZiAodG9nTGVuID09PSAwIHx8IChzLmlzU2xpZGluZyAmJiBvLmhpZGVUb2dnbGVyT25TbGlkZSkpIHsKKwkJCQkJJFQuaGlkZSgpOyAvLyBhbHdheXMgSElERSB0aGUgdG9nZ2xlciB3aGVuICdzbGlkaW5nJworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJJFQuc2hvdygpOyAvLyBpbiBjYXNlIHdhcyBwcmV2aW91c2x5IGhpZGRlbgorCisJCQkJaWYgKCEodG9nTGVuID4gMCkgfHwgdG9nTGVuID09PSAiMTAwJSIgfHwgdG9nTGVuID4gcGFuZUxlbikgeworCQkJCQl0b2dMZW4gPSBwYW5lTGVuOworCQkJCQlvZmZzZXQgPSAwOworCQkJCX0KKwkJCQllbHNlIHsgLy8gY2FsY3VsYXRlICdvZmZzZXQnIGJhc2VkIG9uIG9wdGlvbnMuUEFORS50b2dnbGVyQWxpZ25fb3Blbi9jbG9zZWQKKwkJCQkJaWYgKGlzU3RyKHRvZ0FsaWduKSkgeworCQkJCQkJc3dpdGNoICh0b2dBbGlnbikgeworCQkJCQkJCWNhc2UgInRvcCI6CisJCQkJCQkJY2FzZSAibGVmdCI6CW9mZnNldCA9IDA7CisJCQkJCQkJCQkJCWJyZWFrOworCQkJCQkJCWNhc2UgImJvdHRvbSI6CisJCQkJCQkJY2FzZSAicmlnaHQiOglvZmZzZXQgPSBwYW5lTGVuIC0gdG9nTGVuOworCQkJCQkJCQkJCQlicmVhazsKKwkJCQkJCQljYXNlICJtaWRkbGUiOgorCQkJCQkJCWNhc2UgImNlbnRlciI6CisJCQkJCQkJZGVmYXVsdDoJCW9mZnNldCA9IHJvdW5kKChwYW5lTGVuIC0gdG9nTGVuKSAvIDIpOyAvLyAnZGVmYXVsdCcgY2F0Y2hlcyB0eXBvcworCQkJCQkJfQorCQkJCQl9CisJCQkJCWVsc2UgeyAvLyB0b2dBbGlnbiA9IG51bWJlcgorCQkJCQkJdmFyIHggPSBwYXJzZUludCh0b2dBbGlnbiwgMTApOyAvLworCQkJCQkJaWYgKHRvZ0FsaWduID49IDApIG9mZnNldCA9IHg7CisJCQkJCQllbHNlIG9mZnNldCA9IHBhbmVMZW4gLSB0b2dMZW4gKyB4OyAvLyBOT1RFOiB4IGlzIG5lZ2F0aXZlIQorCQkJCQl9CisJCQkJfQorCisJCQkJaWYgKGRpciA9PT0gImhvcnoiKSB7IC8vIG5vcnRoL3NvdXRoCisJCQkJCXZhciB3aWR0aCA9IGNzc1coJFQsIHRvZ0xlbik7CisJCQkJCSRULmNzcyh7CisJCQkJCQl3aWR0aDoJd2lkdGggIC8vIGFjY291bnQgZm9yIGJvcmRlcnMgJiBwYWRkaW5nCisJCQkJCSwJaGVpZ2h0Ogljc3NIKCRULCBzcGFjaW5nKSAvLyBkaXR0bworCQkJCQksCWxlZnQ6CW9mZnNldCAvLyBUT0RPOiBWRVJJRlkgdGhhdCB0b2dnbGVyICBwb3NpdGlvbnMgY29ycmVjdGx5IGZvciBBTEwgdmFsdWVzCisJCQkJCSwJdG9wOgkwCisJCQkJCX0pOworCQkJCQkvLyBDRU5URVIgdGhlIHRvZ2dsZXIgY29udGVudCBTUEFOCisJCQkJCSRULmNoaWxkcmVuKCIuY29udGVudCIpLmVhY2goZnVuY3Rpb24oKXsKKwkJCQkJCSRUQyA9ICQodGhpcyk7CisJCQkJCQkkVEMuY3NzKCJtYXJnaW5MZWZ0Iiwgcm91bmQoKHdpZHRoLSRUQy5vdXRlcldpZHRoKCkpLzIpKTsgLy8gY291bGQgYmUgbmVnYXRpdmUKKwkJCQkJfSk7CisJCQkJfQorCQkJCWVsc2UgeyAvLyBlYXN0L3dlc3QKKwkJCQkJdmFyIGhlaWdodCA9IGNzc0goJFQsIHRvZ0xlbik7CisJCQkJCSRULmNzcyh7CisJCQkJCQloZWlnaHQ6CWhlaWdodCAvLyBhY2NvdW50IGZvciBib3JkZXJzICYgcGFkZGluZworCQkJCQksCXdpZHRoOgljc3NXKCRULCBzcGFjaW5nKSAvLyBkaXR0bworCQkJCQksCXRvcDoJb2Zmc2V0IC8vIFBPU0lUSU9OIHRoZSB0b2dnbGVyCisJCQkJCSwJbGVmdDoJMAorCQkJCQl9KTsKKwkJCQkJLy8gQ0VOVEVSIHRoZSB0b2dnbGVyIGNvbnRlbnQgU1BBTgorCQkJCQkkVC5jaGlsZHJlbigiLmNvbnRlbnQiKS5lYWNoKGZ1bmN0aW9uKCl7CisJCQkJCQkkVEMgPSAkKHRoaXMpOworCQkJCQkJJFRDLmNzcygibWFyZ2luVG9wIiwgcm91bmQoKGhlaWdodC0kVEMub3V0ZXJIZWlnaHQoKSkvMikpOyAvLyBjb3VsZCBiZSBuZWdhdGl2ZQorCQkJCQl9KTsKKwkJCQl9CisKKwkJCQkvLyByZW1vdmUgQUxMIGhvdmVyIGNsYXNzZXMKKwkJCQlyZW1vdmVIb3ZlciggMCwgJFQgKTsKKwkJCX0KKworCQkJLy8gRE9ORSBtZWFzdXJpbmcgYW5kIHNpemluZyB0aGlzIHJlc2l6ZXIvdG9nZ2xlciwgc28gY2FuIGJlICdoaWRkZW4nIG5vdworCQkJaWYgKCFzdGF0ZS5pbml0aWFsaXplZCAmJiAoby5pbml0SGlkZGVuIHx8IHMubm9Sb29tKSkgeworCQkJCSRSLmhpZGUoKTsKKwkJCQlpZiAoJFQpICRULmhpZGUoKTsKKwkJCX0KKwkJfSk7CisJfQorCisKKwkvKioKKwkqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0JZXZ0X29yX3BhbmUKKwkqLworLAllbmFibGVDbG9zYWJsZSA9IGZ1bmN0aW9uIChldnRfb3JfcGFuZSkgeworCQlpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgcmV0dXJuOworCQl2YXIJcGFuZSA9IGV2dFBhbmUuY2FsbCh0aGlzLCBldnRfb3JfcGFuZSkKKwkJLAkkVAk9ICRUc1twYW5lXQorCQksCW8JPSBvcHRpb25zW3BhbmVdCisJCTsKKwkJaWYgKCEkVCkgcmV0dXJuOworCQlvLmNsb3NhYmxlID0gdHJ1ZTsKKwkJJFQJLmJpbmQoImNsaWNrLiIrIHNJRCwgZnVuY3Rpb24oZXZ0KXsgZXZ0LnN0b3BQcm9wYWdhdGlvbigpOyB0b2dnbGUocGFuZSk7IH0pCisJCQkuY3NzKCJ2aXNpYmlsaXR5IiwgInZpc2libGUiKQorCQkJLmNzcygiY3Vyc29yIiwgInBvaW50ZXIiKQorCQkJLmF0dHIoInRpdGxlIiwgc3RhdGVbcGFuZV0uaXNDbG9zZWQgPyBvLnRpcHMuT3BlbiA6IG8udGlwcy5DbG9zZSkgLy8gbWF5IGJlIGJsYW5rCisJCQkuc2hvdygpOworCX0KKwkvKioKKwkqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0JZXZ0X29yX3BhbmUKKwkqIEBwYXJhbSB7Ym9vbGVhbj19CQkJW2hpZGU9ZmFsc2VdCisJKi8KKywJZGlzYWJsZUNsb3NhYmxlID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lLCBoaWRlKSB7CisJCWlmICghaXNJbml0aWFsaXplZCgpKSByZXR1cm47CisJCXZhcglwYW5lID0gZXZ0UGFuZS5jYWxsKHRoaXMsIGV2dF9vcl9wYW5lKQorCQksCSRUCT0gJFRzW3BhbmVdCisJCTsKKwkJaWYgKCEkVCkgcmV0dXJuOworCQlvcHRpb25zW3BhbmVdLmNsb3NhYmxlID0gZmFsc2U7CisJCS8vIGlzIGNsb3NhYmxlIGlzIGRpc2FibGUsIHRoZW4gcGFuZSBNVVNUIGJlIG9wZW4hCisJCWlmIChzdGF0ZVtwYW5lXS5pc0Nsb3NlZCkgb3BlbihwYW5lLCBmYWxzZSwgdHJ1ZSk7CisJCSRUCS51bmJpbmQoIi4iKyBzSUQpCisJCQkuY3NzKCJ2aXNpYmlsaXR5IiwgaGlkZSA/ICJoaWRkZW4iIDogInZpc2libGUiKSAvLyBpbnN0ZWFkIG9mIGhpZGUoKSwgd2hpY2ggY3JlYXRlcyBsb2dpYyBpc3N1ZXMKKwkJCS5jc3MoImN1cnNvciIsICJkZWZhdWx0IikKKwkJCS5hdHRyKCJ0aXRsZSIsICIiKTsKKwl9CisKKworCS8qKgorCSogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fQlldnRfb3JfcGFuZQorCSovCissCWVuYWJsZVNsaWRhYmxlID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lKSB7CisJCWlmICghaXNJbml0aWFsaXplZCgpKSByZXR1cm47CisJCXZhcglwYW5lID0gZXZ0UGFuZS5jYWxsKHRoaXMsIGV2dF9vcl9wYW5lKQorCQksCSRSCT0gJFJzW3BhbmVdCisJCTsKKwkJaWYgKCEkUiB8fCAhJFIuZGF0YSgnZHJhZ2dhYmxlJykpIHJldHVybjsKKwkJb3B0aW9uc1twYW5lXS5zbGlkYWJsZSA9IHRydWU7IAorCQlpZiAoc3RhdGVbcGFuZV0uaXNDbG9zZWQpCisJCQliaW5kU3RhcnRTbGlkaW5nRXZlbnQocGFuZSwgdHJ1ZSk7CisJfQorCS8qKgorCSogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fQlldnRfb3JfcGFuZQorCSovCissCWRpc2FibGVTbGlkYWJsZSA9IGZ1bmN0aW9uIChldnRfb3JfcGFuZSkgeworCQlpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgcmV0dXJuOworCQl2YXIJcGFuZSA9IGV2dFBhbmUuY2FsbCh0aGlzLCBldnRfb3JfcGFuZSkKKwkJLAkkUgk9ICRSc1twYW5lXQorCQk7CisJCWlmICghJFIpIHJldHVybjsKKwkJb3B0aW9uc1twYW5lXS5zbGlkYWJsZSA9IGZhbHNlOyAKKwkJaWYgKHN0YXRlW3BhbmVdLmlzU2xpZGluZykKKwkJCWNsb3NlKHBhbmUsIGZhbHNlLCB0cnVlKTsKKwkJZWxzZSB7CisJCQliaW5kU3RhcnRTbGlkaW5nRXZlbnQocGFuZSwgZmFsc2UpOworCQkJJFIJLmNzcygiY3Vyc29yIiwgImRlZmF1bHQiKQorCQkJCS5hdHRyKCJ0aXRsZSIsICIiKTsKKwkJCXJlbW92ZUhvdmVyKG51bGwsICRSWzBdKTsgLy8gaW4gY2FzZSBjdXJyZW50bHkgaG92ZXJlZAorCQl9CisJfQorCisKKwkvKioKKwkqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0JZXZ0X29yX3BhbmUKKwkqLworLAllbmFibGVSZXNpemFibGUgPSBmdW5jdGlvbiAoZXZ0X29yX3BhbmUpIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJdmFyCXBhbmUgPSBldnRQYW5lLmNhbGwodGhpcywgZXZ0X29yX3BhbmUpCisJCSwJJFIJPSAkUnNbcGFuZV0KKwkJLAlvCT0gb3B0aW9uc1twYW5lXQorCQk7CisJCWlmICghJFIgfHwgISRSLmRhdGEoJ2RyYWdnYWJsZScpKSByZXR1cm47CisJCW8ucmVzaXphYmxlID0gdHJ1ZTsgCisJCSRSLmRyYWdnYWJsZSgiZW5hYmxlIik7CisJCWlmICghc3RhdGVbcGFuZV0uaXNDbG9zZWQpCisJCQkkUgkuY3NzKCJjdXJzb3IiLCBvLnJlc2l6ZXJDdXJzb3IpCisJCQkgCS5hdHRyKCJ0aXRsZSIsIG8udGlwcy5SZXNpemUpOworCX0KKwkvKioKKwkqIEBwYXJhbSB7c3RyaW5nfE9iamVjdH0JZXZ0X29yX3BhbmUKKwkqLworLAlkaXNhYmxlUmVzaXphYmxlID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lKSB7CisJCWlmICghaXNJbml0aWFsaXplZCgpKSByZXR1cm47CisJCXZhcglwYW5lID0gZXZ0UGFuZS5jYWxsKHRoaXMsIGV2dF9vcl9wYW5lKQorCQksCSRSCT0gJFJzW3BhbmVdCisJCTsKKwkJaWYgKCEkUiB8fCAhJFIuZGF0YSgnZHJhZ2dhYmxlJykpIHJldHVybjsKKwkJb3B0aW9uc1twYW5lXS5yZXNpemFibGUgPSBmYWxzZTsgCisJCSRSCS5kcmFnZ2FibGUoImRpc2FibGUiKQorCQkJLmNzcygiY3Vyc29yIiwgImRlZmF1bHQiKQorCQkJLmF0dHIoInRpdGxlIiwgIiIpOworCQlyZW1vdmVIb3ZlcihudWxsLCAkUlswXSk7IC8vIGluIGNhc2UgY3VycmVudGx5IGhvdmVyZWQKKwl9CisKKworCS8qKgorCSogTW92ZSBhIHBhbmUgZnJvbSBzb3VyY2Utc2lkZSAoZWcsIHdlc3QpIHRvIHRhcmdldC1zaWRlIChlZywgZWFzdCkKKwkqIElmIHBhbmUgZXhpc3RzIG9uIHRhcmdldC1zaWRlLCBtb3ZlIHRoYXQgdG8gc291cmNlLXNpZGUsIGllLCAnc3dhcCcgdGhlIHBhbmVzCisJKgorCSogQHBhcmFtIHtzdHJpbmd8T2JqZWN0fQlldnRfb3JfcGFuZTEJVGhlIHBhbmUvZWRnZSBiZWluZyBzd2FwcGVkCisJKiBAcGFyYW0ge3N0cmluZ30JCQlwYW5lMgkJCWRpdHRvCisJKi8KKywJc3dhcFBhbmVzID0gZnVuY3Rpb24gKGV2dF9vcl9wYW5lMSwgcGFuZTIpIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJdmFyIHBhbmUxID0gZXZ0UGFuZS5jYWxsKHRoaXMsIGV2dF9vcl9wYW5lMSk7CisJCS8vIGNoYW5nZSBzdGF0ZS5lZGdlIE5PVyBzbyBjYWxsYmFja3MgY2FuIGtub3cgd2hlcmUgcGFuZSBpcyBoZWFkZWQuLi4KKwkJc3RhdGVbcGFuZTFdLmVkZ2UgPSBwYW5lMjsKKwkJc3RhdGVbcGFuZTJdLmVkZ2UgPSBwYW5lMTsKKwkJLy8gcnVuIHRoZXNlIGV2ZW4gaWYgTk9UIHN0YXRlLmluaXRpYWxpemVkCisJCWlmIChmYWxzZSA9PT0gX3J1bkNhbGxiYWNrcygib25zd2FwX3N0YXJ0IiwgcGFuZTEpCisJCSB8fAlmYWxzZSA9PT0gX3J1bkNhbGxiYWNrcygib25zd2FwX3N0YXJ0IiwgcGFuZTIpCisJCSkgeworCQkJc3RhdGVbcGFuZTFdLmVkZ2UgPSBwYW5lMTsgLy8gcmVzZXQKKwkJCXN0YXRlW3BhbmUyXS5lZGdlID0gcGFuZTI7CisJCQlyZXR1cm47CisJCX0KKworCQl2YXIKKwkJCW9QYW5lMQk9IGNvcHkoIHBhbmUxICkKKwkJLAlvUGFuZTIJPSBjb3B5KCBwYW5lMiApCisJCSwJc2l6ZXMJPSB7fQorCQk7CisJCXNpemVzW3BhbmUxXSA9IG9QYW5lMSA/IG9QYW5lMS5zdGF0ZS5zaXplIDogMDsKKwkJc2l6ZXNbcGFuZTJdID0gb1BhbmUyID8gb1BhbmUyLnN0YXRlLnNpemUgOiAwOworCisJCS8vIGNsZWFyIHBvaW50ZXJzICYgc3RhdGUKKwkJJFBzW3BhbmUxXSA9IGZhbHNlOyAKKwkJJFBzW3BhbmUyXSA9IGZhbHNlOworCQlzdGF0ZVtwYW5lMV0gPSB7fTsKKwkJc3RhdGVbcGFuZTJdID0ge307CisJCQorCQkvLyBBTFdBWVMgcmVtb3ZlIHRoZSByZXNpemVyICYgdG9nZ2xlciBlbGVtZW50cworCQlpZiAoJFRzW3BhbmUxXSkgJFRzW3BhbmUxXS5yZW1vdmUoKTsKKwkJaWYgKCRUc1twYW5lMl0pICRUc1twYW5lMl0ucmVtb3ZlKCk7CisJCWlmICgkUnNbcGFuZTFdKSAkUnNbcGFuZTFdLnJlbW92ZSgpOworCQlpZiAoJFJzW3BhbmUyXSkgJFJzW3BhbmUyXS5yZW1vdmUoKTsKKwkJJFJzW3BhbmUxXSA9ICRSc1twYW5lMl0gPSAkVHNbcGFuZTFdID0gJFRzW3BhbmUyXSA9IGZhbHNlOworCisJCS8vIHRyYW5zZmVyIGVsZW1lbnQgcG9pbnRlcnMgYW5kIGRhdGEgdG8gTkVXIExheW91dCBrZXlzCisJCW1vdmUoIG9QYW5lMSwgcGFuZTIgKTsKKwkJbW92ZSggb1BhbmUyLCBwYW5lMSApOworCisJCS8vIGNsZWFudXAgb2JqZWN0cworCQlvUGFuZTEgPSBvUGFuZTIgPSBzaXplcyA9IG51bGw7CisKKwkJLy8gbWFrZSBwYW5lcyAndmlzaWJsZScgYWdhaW4KKwkJaWYgKCRQc1twYW5lMV0pICRQc1twYW5lMV0uY3NzKF9jLnZpc2libGUpOworCQlpZiAoJFBzW3BhbmUyXSkgJFBzW3BhbmUyXS5jc3MoX2MudmlzaWJsZSk7CisKKwkJLy8gZml4IGFueSBzaXplIGRpc2NyZXBhbmNpZXMgY2F1c2VkIGJ5IHN3YXAKKwkJcmVzaXplQWxsKCk7CisKKwkJLy8gcnVuIHRoZXNlIGV2ZW4gaWYgTk9UIHN0YXRlLmluaXRpYWxpemVkCisJCV9ydW5DYWxsYmFja3MoIm9uc3dhcF9lbmQiLCBwYW5lMSk7CisJCV9ydW5DYWxsYmFja3MoIm9uc3dhcF9lbmQiLCBwYW5lMik7CisKKwkJcmV0dXJuOworCisJCWZ1bmN0aW9uIGNvcHkgKG4pIHsgLy8gbiA9IHBhbmUKKwkJCXZhcgorCQkJCSRQCT0gJFBzW25dCisJCQksCSRDCT0gJENzW25dCisJCQk7CisJCQlyZXR1cm4gISRQID8gZmFsc2UgOiB7CisJCQkJcGFuZToJCW4KKwkJCSwJUDoJCQkkUCA/ICRQWzBdIDogZmFsc2UKKwkJCSwJQzoJCQkkQyA/ICRDWzBdIDogZmFsc2UKKwkJCSwJc3RhdGU6CQkkLmV4dGVuZCh0cnVlLCB7fSwgc3RhdGVbbl0pCisJCQksCW9wdGlvbnM6CSQuZXh0ZW5kKHRydWUsIHt9LCBvcHRpb25zW25dKQorCQkJfQorCQl9OworCisJCWZ1bmN0aW9uIG1vdmUgKG9QYW5lLCBwYW5lKSB7CisJCQlpZiAoIW9QYW5lKSByZXR1cm47CisJCQl2YXIKKwkJCQlQCQk9IG9QYW5lLlAKKwkJCSwJQwkJPSBvUGFuZS5DCisJCQksCW9sZFBhbmUgPSBvUGFuZS5wYW5lCisJCQksCWMJCT0gX2NbcGFuZV0KKwkJCSwJc2lkZQk9IGMuc2lkZS50b0xvd2VyQ2FzZSgpCisJCQksCWluc2V0CT0gImluc2V0IisgYy5zaWRlCisJCQkvLwlzYXZlIHBhbmUtb3B0aW9ucyB0aGF0IHNob3VsZCBiZSByZXRhaW5lZAorCQkJLAlzCQk9ICQuZXh0ZW5kKHRydWUsIHt9LCBzdGF0ZVtwYW5lXSkKKwkJCSwJbwkJPSBvcHRpb25zW3BhbmVdCisJCQkvLwlSRVRBSU4gc2lkZS1zcGVjaWZpYyBGWCBTZXR0aW5ncyAtIG1vcmUgYmVsb3cKKwkJCSwJZngJCT0geyByZXNpemVyQ3Vyc29yOiBvLnJlc2l6ZXJDdXJzb3IgfQorCQkJLAlyZSwgc2l6ZSwgcG9zCisJCQk7CisJCQkkLmVhY2goImZ4TmFtZSxmeFNwZWVkLGZ4U2V0dGluZ3MiLnNwbGl0KCIsIiksIGZ1bmN0aW9uIChpLCBrKSB7CisJCQkJZnhbayArIl9vcGVuIl0gID0gb1trICsiX29wZW4iXTsKKwkJCQlmeFtrICsiX2Nsb3NlIl0gPSBvW2sgKyJfY2xvc2UiXTsKKwkJCQlmeFtrICsiX3NpemUiXSAgPSBvW2sgKyJfc2l6ZSJdOworCQkJfSk7CisKKwkJCS8vIHVwZGF0ZSBvYmplY3QgcG9pbnRlcnMgYW5kIGF0dHJpYnV0ZXMKKwkJCSRQc1twYW5lXSA9ICQoUCkKKwkJCQkuZGF0YSh7CisJCQkJCWxheW91dFBhbmU6CQlJbnN0YW5jZVtwYW5lXQkvLyBORVcgcG9pbnRlciB0byBwYW5lLWFsaWFzLW9iamVjdAorCQkJCSwJbGF5b3V0RWRnZToJCXBhbmUKKwkJCQl9KQorCQkJCS5jc3MoX2MuaGlkZGVuKQorCQkJCS5jc3MoYy5jc3NSZXEpCisJCQk7CisJCQkkQ3NbcGFuZV0gPSBDID8gJChDKSA6IGZhbHNlOworCisJCQkvLyBzZXQgb3B0aW9ucyBhbmQgc3RhdGUKKwkJCW9wdGlvbnNbcGFuZV0JPSAkLmV4dGVuZCh0cnVlLCB7fSwgb1BhbmUub3B0aW9ucywgZngpOworCQkJc3RhdGVbcGFuZV0JCT0gJC5leHRlbmQodHJ1ZSwge30sIG9QYW5lLnN0YXRlKTsKKworCQkJLy8gY2hhbmdlIGNsYXNzTmFtZXMgb24gdGhlIHBhbmUsIGVnOiB1aS1sYXlvdXQtcGFuZS1lYXN0ID09PiB1aS1sYXlvdXQtcGFuZS13ZXN0CisJCQlyZSA9IG5ldyBSZWdFeHAoby5wYW5lQ2xhc3MgKyItIisgb2xkUGFuZSwgImciKTsKKwkJCVAuY2xhc3NOYW1lID0gUC5jbGFzc05hbWUucmVwbGFjZShyZSwgby5wYW5lQ2xhc3MgKyItIisgcGFuZSk7CisKKwkJCS8vIEFMV0FZUyByZWdlbmVyYXRlIHRoZSByZXNpemVyICYgdG9nZ2xlciBlbGVtZW50cworCQkJaW5pdEhhbmRsZXMocGFuZSk7IC8vIGNyZWF0ZSB0aGUgcmVxdWlyZWQgcmVzaXplciAmIHRvZ2dsZXIKKworCQkJLy8gaWYgbW92aW5nIHRvIGRpZmZlcmVudCBvcmllbnRhdGlvbiwgdGhlbiBrZWVwICd0YXJnZXQnIHBhbmUgc2l6ZQorCQkJaWYgKGMuZGlyICE9IF9jW29sZFBhbmVdLmRpcikgeworCQkJCXNpemUgPSBzaXplc1twYW5lXSB8fCAwOworCQkJCXNldFNpemVMaW1pdHMocGFuZSk7IC8vIHVwZGF0ZSBwYW5lLXN0YXRlCisJCQkJc2l6ZSA9IG1heChzaXplLCBzdGF0ZVtwYW5lXS5taW5TaXplKTsKKwkJCQkvLyB1c2UgbWFudWFsU2l6ZVBhbmUgdG8gZGlzYWJsZSBhdXRvUmVzaXplIC0gbm90IHVzZWZ1bCBhZnRlciBwYW5lcyBhcmUgc3dhcHBlZAorCQkJCW1hbnVhbFNpemVQYW5lKHBhbmUsIHNpemUsIHRydWUsIHRydWUpOyAvLyB0cnVlL3RydWUgPSBza2lwQ2FsbGJhY2svbm9BbmltYXRpb24KKwkJCX0KKwkJCWVsc2UgLy8gbW92ZSB0aGUgcmVzaXplciBoZXJlCisJCQkJJFJzW3BhbmVdLmNzcyhzaWRlLCBzQ1tpbnNldF0gKyAoc3RhdGVbcGFuZV0uaXNWaXNpYmxlID8gZ2V0UGFuZVNpemUocGFuZSkgOiAwKSk7CisKKworCQkJLy8gQUREIENMQVNTTkFNRVMgJiBTTElERS1CSU5ESU5HUworCQkJaWYgKG9QYW5lLnN0YXRlLmlzVmlzaWJsZSAmJiAhcy5pc1Zpc2libGUpCisJCQkJc2V0QXNPcGVuKHBhbmUsIHRydWUpOyAvLyB0cnVlID0gc2tpcENhbGxiYWNrCisJCQllbHNlIHsKKwkJCQlzZXRBc0Nsb3NlZChwYW5lKTsKKwkJCQliaW5kU3RhcnRTbGlkaW5nRXZlbnQocGFuZSwgdHJ1ZSk7IC8vIHdpbGwgZW5hYmxlIGV2ZW50cyBJRiBvcHRpb24gaXMgc2V0CisJCQl9CisKKwkJCS8vIERFU1RST1kgdGhlIG9iamVjdAorCQkJb1BhbmUgPSBudWxsOworCQl9OworCX0KKworCisJLyoqCisJKiBJTlRFUk5BTCBtZXRob2QgdG8gc3luYyBwaW4tYnV0dG9ucyB3aGVuIHBhbmUgaXMgb3BlbmVkIG9yIGNsb3NlZAorCSogVW5waW5uZWQgbWVhbnMgdGhlIHBhbmUgaXMgJ3NsaWRpbmcnIC0gaWUsIG92ZXItdG9wIG9mIHRoZSBhZGphY2VudCBwYW5lcworCSoKKwkqIEBzZWUgIG9wZW4oKSwgc2V0QXNPcGVuKCksIHNldEFzQ2xvc2VkKCkKKwkqIEBwYXJhbSB7c3RyaW5nfQlwYW5lICAgVGhlc2UgYXJlIHRoZSBwYXJhbXMgcmV0dXJuZWQgdG8gY2FsbGJhY2tzIGJ5IGxheW91dCgpCisJKiBAcGFyYW0ge2Jvb2xlYW59CWRvUGluICBUcnVlIG1lYW5zIHNldCB0aGUgcGluICdkb3duJywgRmFsc2UgbWVhbnMgJ3VwJworCSovCissCXN5bmNQaW5CdG5zID0gZnVuY3Rpb24gKHBhbmUsIGRvUGluKSB7CisJCWlmICgkLmxheW91dC5wbHVnaW5zLmJ1dHRvbnMpCisJCQkkLmVhY2goc3RhdGVbcGFuZV0ucGlucywgZnVuY3Rpb24gKGksIHNlbGVjdG9yKSB7CisJCQkJJC5sYXlvdXQuYnV0dG9ucy5zZXRQaW5TdGF0ZShJbnN0YW5jZSwgJChzZWxlY3RvciksIHBhbmUsIGRvUGluKTsKKwkJCX0pOworCX0KKworOwkvLyBFTkQgdmFyIERFQ0xBUkFUSU9OUworCisJLyoqCisJKiBDYXB0dXJlIGtleXMgd2hlbiBlbmFibGVDdXJzb3JIb3RrZXkgLSB0b2dnbGUgcGFuZSBpZiBob3RrZXkgcHJlc3NlZAorCSoKKwkqIEBzZWUgIGRvY3VtZW50LmtleWRvd24oKQorCSovCisJZnVuY3Rpb24ga2V5RG93biAoZXZ0KSB7CisJCWlmICghZXZ0KSByZXR1cm4gdHJ1ZTsKKwkJdmFyIGNvZGUgPSBldnQua2V5Q29kZTsKKwkJaWYgKGNvZGUgPCAzMykgcmV0dXJuIHRydWU7IC8vIGlnbm9yZSBzcGVjaWFsIGtleXM6IEVOVEVSLCBUQUIsIGV0YworCisJCXZhcgorCQkJUEFORSA9IHsKKwkJCQkzODogIm5vcnRoIiAvLyBVcCBDdXJzb3IJLSAkLnVpLmtleUNvZGUuVVAKKwkJCSwJNDA6ICJzb3V0aCIgLy8gRG93biBDdXJzb3IJLSAkLnVpLmtleUNvZGUuRE9XTgorCQkJLAkzNzogIndlc3QiICAvLyBMZWZ0IEN1cnNvcgktICQudWkua2V5Q29kZS5MRUZUCisJCQksCTM5OiAiZWFzdCIgIC8vIFJpZ2h0IEN1cnNvcgktICQudWkua2V5Q29kZS5SSUdIVAorCQkJfQorCQksCUFMVAkJPSBldnQuYWx0S2V5IC8vIG5vIHdvcmt5IQorCQksCVNISUZUCT0gZXZ0LnNoaWZ0S2V5CisJCSwJQ1RSTAk9IGV2dC5jdHJsS2V5CisJCSwJQ1VSU09SCT0gKENUUkwgJiYgY29kZSA+PSAzNyAmJiBjb2RlIDw9IDQwKQorCQksCW8sIGssIG0sIHBhbmUKKwkJOworCisJCWlmIChDVVJTT1IgJiYgb3B0aW9uc1tQQU5FW2NvZGVdXS5lbmFibGVDdXJzb3JIb3RrZXkpIC8vIHZhbGlkIGN1cnNvci1ob3RrZXkKKwkJCXBhbmUgPSBQQU5FW2NvZGVdOworCQllbHNlIGlmIChDVFJMIHx8IFNISUZUKSAvLyBjaGVjayB0byBzZWUgaWYgdGhpcyBtYXRjaGVzIGEgY3VzdG9tLWhvdGtleQorCQkJJC5lYWNoKF9jLmJvcmRlclBhbmVzLCBmdW5jdGlvbiAoaSwgcCkgeyAvLyBsb29wIGVhY2ggcGFuZSB0byBjaGVjayBpdHMgaG90a2V5CisJCQkJbyA9IG9wdGlvbnNbcF07CisJCQkJayA9IG8uY3VzdG9tSG90a2V5OworCQkJCW0gPSBvLmN1c3RvbUhvdGtleU1vZGlmaWVyOyAvLyBpZiBtaXNzaW5nIG9yIGludmFsaWQsIHRyZWF0ZWQgYXMgIkNUUkwrU0hJRlQiCisJCQkJaWYgKChTSElGVCAmJiBtPT0iU0hJRlQiKSB8fCAoQ1RSTCAmJiBtPT0iQ1RSTCIpIHx8IChDVFJMICYmIFNISUZUKSkgeyAvLyBNb2RpZmllciBtYXRjaGVzCisJCQkJCWlmIChrICYmIGNvZGUgPT09IChpc05hTihrKSB8fCBrIDw9IDkgPyBrLnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKSA6IGspKSB7IC8vIEtleSBtYXRjaGVzCisJCQkJCQlwYW5lID0gcDsKKwkJCQkJCXJldHVybiBmYWxzZTsgLy8gQlJFQUsKKwkJCQkJfQorCQkJCX0KKwkJCX0pOworCisJCS8vIHZhbGlkYXRlIHBhbmUKKwkJaWYgKCFwYW5lIHx8ICEkUHNbcGFuZV0gfHwgIW9wdGlvbnNbcGFuZV0uY2xvc2FibGUgfHwgc3RhdGVbcGFuZV0uaXNIaWRkZW4pCisJCQlyZXR1cm4gdHJ1ZTsKKworCQl0b2dnbGUocGFuZSk7CisKKwkJZXZ0LnN0b3BQcm9wYWdhdGlvbigpOworCQlldnQucmV0dXJuVmFsdWUgPSBmYWxzZTsgLy8gQ0FOQ0VMIGtleQorCQlyZXR1cm4gZmFsc2U7CisJfTsKKworCisvKgorICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqCVVUSUxJVFkgTUVUSE9EUworICoJY2FsbGVkIGV4dGVybmFsbHkgb3IgYnkgaW5pdEJ1dHRvbnMKKyAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKi8KKworCS8qKgorCSogQ2hhbmdlL3Jlc2V0IGEgcGFuZSBvdmVyZmxvdyBzZXR0aW5nICYgekluZGV4IHRvIGFsbG93IHBvcHVwcy9kcm9wLWRvd25zIHRvIHdvcmsKKwkqCisJKiBAcGFyYW0ge09iamVjdD19ICAgW2VsXQkob3B0aW9uYWwpIENhbiBhbHNvIGJlICdib3VuZCcgdG8gYSBjbGljaywgbW91c2VPdmVyLCBvciBvdGhlciBldmVudAorCSovCisJZnVuY3Rpb24gYWxsb3dPdmVyZmxvdyAoZWwpIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJaWYgKHRoaXMgJiYgdGhpcy50YWdOYW1lKSBlbCA9IHRoaXM7IC8vIEJPVU5EIHRvIGVsZW1lbnQKKwkJdmFyICRQOworCQlpZiAoaXNTdHIoZWwpKQorCQkJJFAgPSAkUHNbZWxdOworCQllbHNlIGlmICgkKGVsKS5kYXRhKCJsYXlvdXRSb2xlIikpCisJCQkkUCA9ICQoZWwpOworCQllbHNlCisJCQkkKGVsKS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpeworCQkJCWlmICgkKHRoaXMpLmRhdGEoImxheW91dFJvbGUiKSkgeworCQkJCQkkUCA9ICQodGhpcyk7CisJCQkJCXJldHVybiBmYWxzZTsgLy8gQlJFQUsKKwkJCQl9CisJCQl9KTsKKwkJaWYgKCEkUCB8fCAhJFAubGVuZ3RoKSByZXR1cm47IC8vIElOVkFMSUQKKworCQl2YXIKKwkJCXBhbmUJPSAkUC5kYXRhKCJsYXlvdXRFZGdlIikKKwkJLAlzCQk9IHN0YXRlW3BhbmVdCisJCTsKKworCQkvLyBpZiBwYW5lIGlzIGFscmVhZHkgcmFpc2VkLCB0aGVuIHJlc2V0IGl0IGJlZm9yZSBkb2luZyBpdCBhZ2FpbiEKKwkJLy8gdGhpcyB3b3VsZCBoYXBwZW4gaWYgYWxsb3dPdmVyZmxvdyBpcyBhdHRhY2hlZCB0byBCT1RIIHRoZSBwYW5lIGFuZCBhbiBlbGVtZW50IAorCQlpZiAocy5jc3NTYXZlZCkKKwkJCXJlc2V0T3ZlcmZsb3cocGFuZSk7IC8vIHJlc2V0IHByZXZpb3VzIENTUyBiZWZvcmUgY29udGludWluZworCisJCS8vIGlmIHBhbmUgaXMgcmFpc2VkIGJ5IHNsaWRpbmcgb3IgcmVzaXppbmcsIG9yIGl0cyBjbG9zZWQsIHRoZW4gYWJvcnQKKwkJaWYgKHMuaXNTbGlkaW5nIHx8IHMuaXNSZXNpemluZyB8fCBzLmlzQ2xvc2VkKSB7CisJCQlzLmNzc1NhdmVkID0gZmFsc2U7CisJCQlyZXR1cm47CisJCX0KKworCQl2YXIKKwkJCW5ld0NTUwk9IHsgekluZGV4OiAob3B0aW9ucy56SW5kZXhlcy5yZXNpemVyX25vcm1hbCArIDEpIH0KKwkJLAljdXJDU1MJPSB7fQorCQksCW9mCQk9ICRQLmNzcygib3ZlcmZsb3ciKQorCQksCW9mWAkJPSAkUC5jc3MoIm92ZXJmbG93WCIpCisJCSwJb2ZZCQk9ICRQLmNzcygib3ZlcmZsb3dZIikKKwkJOworCQkvLyBkZXRlcm1pbmUgd2hpY2gsIGlmIGFueSwgb3ZlcmZsb3cgc2V0dGluZ3MgbmVlZCB0byBiZSBjaGFuZ2VkCisJCWlmIChvZiAhPSAidmlzaWJsZSIpIHsKKwkJCWN1ckNTUy5vdmVyZmxvdyA9IG9mOworCQkJbmV3Q1NTLm92ZXJmbG93ID0gInZpc2libGUiOworCQl9CisJCWlmIChvZlggJiYgIW9mWC5tYXRjaCgvKHZpc2libGV8YXV0bykvKSkgeworCQkJY3VyQ1NTLm92ZXJmbG93WCA9IG9mWDsKKwkJCW5ld0NTUy5vdmVyZmxvd1ggPSAidmlzaWJsZSI7CisJCX0KKwkJaWYgKG9mWSAmJiAhb2ZZLm1hdGNoKC8odmlzaWJsZXxhdXRvKS8pKSB7CisJCQljdXJDU1Mub3ZlcmZsb3dZID0gb2ZYOworCQkJbmV3Q1NTLm92ZXJmbG93WSA9ICJ2aXNpYmxlIjsKKwkJfQorCisJCS8vIHNhdmUgdGhlIGN1cnJlbnQgb3ZlcmZsb3cgc2V0dGluZ3MgLSBldmVuIGlmIGJsYW5rIQorCQlzLmNzc1NhdmVkID0gY3VyQ1NTOworCisJCS8vIGFwcGx5IG5ldyBDU1MgdG8gcmFpc2UgekluZGV4IGFuZCwgaWYgbmVjZXNzYXJ5LCBtYWtlIG92ZXJmbG93ICd2aXNpYmxlJworCQkkUC5jc3MoIG5ld0NTUyApOworCisJCS8vIG1ha2Ugc3VyZSB0aGUgekluZGV4IG9mIGFsbCBvdGhlciBwYW5lcyBpcyBub3JtYWwKKwkJJC5lYWNoKF9jLmFsbFBhbmVzLCBmdW5jdGlvbihpLCBwKSB7CisJCQlpZiAocCAhPSBwYW5lKSByZXNldE92ZXJmbG93KHApOworCQl9KTsKKworCX07CisJLyoqCisJKiBAcGFyYW0ge09iamVjdD19ICAgW2VsXQkob3B0aW9uYWwpIENhbiBhbHNvIGJlICdib3VuZCcgdG8gYSBjbGljaywgbW91c2VPdmVyLCBvciBvdGhlciBldmVudAorCSovCisJZnVuY3Rpb24gcmVzZXRPdmVyZmxvdyAoZWwpIHsKKwkJaWYgKCFpc0luaXRpYWxpemVkKCkpIHJldHVybjsKKwkJaWYgKHRoaXMgJiYgdGhpcy50YWdOYW1lKSBlbCA9IHRoaXM7IC8vIEJPVU5EIHRvIGVsZW1lbnQKKwkJdmFyICRQOworCQlpZiAoaXNTdHIoZWwpKQorCQkJJFAgPSAkUHNbZWxdOworCQllbHNlIGlmICgkKGVsKS5kYXRhKCJsYXlvdXRSb2xlIikpCisJCQkkUCA9ICQoZWwpOworCQllbHNlCisJCQkkKGVsKS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpeworCQkJCWlmICgkKHRoaXMpLmRhdGEoImxheW91dFJvbGUiKSkgeworCQkJCQkkUCA9ICQodGhpcyk7CisJCQkJCXJldHVybiBmYWxzZTsgLy8gQlJFQUsKKwkJCQl9CisJCQl9KTsKKwkJaWYgKCEkUCB8fCAhJFAubGVuZ3RoKSByZXR1cm47IC8vIElOVkFMSUQKKworCQl2YXIKKwkJCXBhbmUJPSAkUC5kYXRhKCJsYXlvdXRFZGdlIikKKwkJLAlzCQk9IHN0YXRlW3BhbmVdCisJCSwJQ1NTCQk9IHMuY3NzU2F2ZWQgfHwge30KKwkJOworCQkvLyByZXNldCB0aGUgekluZGV4CisJCWlmICghcy5pc1NsaWRpbmcgJiYgIXMuaXNSZXNpemluZykKKwkJCSRQLmNzcygiekluZGV4Iiwgb3B0aW9ucy56SW5kZXhlcy5wYW5lX25vcm1hbCk7CisKKwkJLy8gcmVzZXQgT3ZlcmZsb3cgLSBpZiBuZWNlc3NhcnkKKwkJJFAuY3NzKCBDU1MgKTsKKworCQkvLyBjbGVhciB2YXIKKwkJcy5jc3NTYXZlZCA9IGZhbHNlOworCX07CisKKy8qCisgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqIENSRUFURS9SRVRVUk4gTEFZT1VUCisgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqLworCisJLy8gdmFsaWRhdGUgdGhhdCBjb250YWluZXIgZXhpc3RzCisJdmFyICROID0gJCh0aGlzKS5lcSgwKTsgLy8gRklSU1QgbWF0Y2hpbmcgQ29udGFpbmVyIGVsZW1lbnQKKwlpZiAoISROLmxlbmd0aCkgeworCQlyZXR1cm4gX2xvZyggb3B0aW9ucy5lcnJvcnMuY29udGFpbmVyTWlzc2luZyApOworCX07CisKKwkvLyBVc2VycyByZXRyaWV2ZSBJbnN0YW5jZSBvZiBhIGxheW91dCB3aXRoOiAkTi5sYXlvdXQoKSBPUiAkTi5kYXRhKCJsYXlvdXQiKQorCS8vIHJldHVybiB0aGUgSW5zdGFuY2UtcG9pbnRlciBpZiBsYXlvdXQgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZAorCWlmICgkTi5kYXRhKCJsYXlvdXRDb250YWluZXIiKSAmJiAkTi5kYXRhKCJsYXlvdXQiKSkKKwkJcmV0dXJuICROLmRhdGEoImxheW91dCIpOyAvLyBjYWNoZWQgcG9pbnRlcgorCisJLy8gaW5pdCBnbG9iYWwgdmFycworCXZhciAKKwkJJFBzCT0ge30JLy8gUGFuZXMgeDUJCS0gc2V0IGluIGluaXRQYW5lcygpCisJLAkkQ3MJPSB7fQkvLyBDb250ZW50IHg1CS0gc2V0IGluIGluaXRQYW5lcygpCisJLAkkUnMJPSB7fQkvLyBSZXNpemVycyB4NAktIHNldCBpbiBpbml0SGFuZGxlcygpCisJLAkkVHMJPSB7fQkvLyBUb2dnbGVycyB4NAktIHNldCBpbiBpbml0SGFuZGxlcygpCisJLAkkTXMJPSAkKFtdKQkvLyBNYXNrcyAtIHVwIHRvIDIgbWFza3MgcGVyIHBhbmUgKElGUkFNRSArIERJVikKKwkvLwlhbGlhc2VzIGZvciBjb2RlIGJyZXZpdHkKKwksCXNDCT0gc3RhdGUuY29udGFpbmVyIC8vIGFsaWFzIGZvciBlYXN5IGFjY2VzcyB0byAnY29udGFpbmVyIGRpbWVuc2lvbnMnCisJLAlzSUQJPSBzdGF0ZS5pZCAvLyBhbGlhcyBmb3IgdW5pcXVlIGxheW91dCBJRC9uYW1lc3BhY2UgLSBlZzogImxheW91dDQzNSIKKwk7CisKKwkvLyBjcmVhdGUgSW5zdGFuY2Ugb2JqZWN0IHRvIGV4cG9zZSBkYXRhICYgb3B0aW9uIFByb3BlcnRpZXMsIGFuZCBwcmltYXJ5IGFjdGlvbiBNZXRob2RzCisJdmFyIEluc3RhbmNlID0geworCS8vCWxheW91dCBkYXRhCisJCW9wdGlvbnM6CQkJb3B0aW9ucwkJCS8vIHByb3BlcnR5IC0gb3B0aW9ucyBoYXNoCisJLAlzdGF0ZToJCQkJc3RhdGUJCQkvLyBwcm9wZXJ0eSAtIGRpbWVuc2lvbnMgaGFzaAorCS8vCW9iamVjdCBwb2ludGVycworCSwJY29udGFpbmVyOgkJCSROCQkJCS8vIHByb3BlcnR5IC0gb2JqZWN0IHBvaW50ZXJzIGZvciBsYXlvdXQgY29udGFpbmVyCisJLAlwYW5lczoJCQkJJFBzCQkJCS8vIHByb3BlcnR5IC0gb2JqZWN0IHBvaW50ZXJzIGZvciBBTEwgUGFuZXM6IHBhbmVzLm5vcnRoLCBwYW5lcy5jZW50ZXIKKwksCWNvbnRlbnRzOgkJCSRDcwkJCQkvLyBwcm9wZXJ0eSAtIG9iamVjdCBwb2ludGVycyBmb3IgQUxMIENvbnRlbnQ6IGNvbnRlbnRzLm5vcnRoLCBjb250ZW50cy5jZW50ZXIKKwksCXJlc2l6ZXJzOgkJCSRScwkJCQkvLyBwcm9wZXJ0eSAtIG9iamVjdCBwb2ludGVycyBmb3IgQUxMIFJlc2l6ZXJzLCBlZzogcmVzaXplcnMubm9ydGgKKwksCXRvZ2dsZXJzOgkJCSRUcwkJCQkvLyBwcm9wZXJ0eSAtIG9iamVjdCBwb2ludGVycyBmb3IgQUxMIFRvZ2dsZXJzLCBlZzogdG9nZ2xlcnMubm9ydGgKKwkvLwlib3JkZXItcGFuZSBvcGVuL2Nsb3NlCisJLAloaWRlOgkJCQloaWRlCQkJLy8gbWV0aG9kIC0gZGl0dG8KKwksCXNob3c6CQkJCXNob3cJCQkvLyBtZXRob2QgLSBkaXR0bworCSwJdG9nZ2xlOgkJCQl0b2dnbGUJCQkvLyBtZXRob2QgLSBwYXNzIGEgJ3BhbmUnICgibm9ydGgiLCAid2VzdCIsIGV0YykKKwksCW9wZW46CQkJCW9wZW4JCQkvLyBtZXRob2QgLSBkaXR0bworCSwJY2xvc2U6CQkJCWNsb3NlCQkJLy8gbWV0aG9kIC0gZGl0dG8KKwksCXNsaWRlT3BlbjoJCQlzbGlkZU9wZW4JCS8vIG1ldGhvZCAtIGRpdHRvCisJLAlzbGlkZUNsb3NlOgkJCXNsaWRlQ2xvc2UJCS8vIG1ldGhvZCAtIGRpdHRvCisJLAlzbGlkZVRvZ2dsZToJCXNsaWRlVG9nZ2xlCQkvLyBtZXRob2QgLSBkaXR0bworCS8vCXBhbmUgYWN0aW9ucworCSwJc2V0U2l6ZUxpbWl0czoJCXNldFNpemVMaW1pdHMJLy8gbWV0aG9kIC0gcGFzcyBhICdwYW5lJyAtIHVwZGF0ZSBzdGF0ZSBtaW4vbWF4IGRhdGEKKwksCV9zaXplUGFuZToJCQlzaXplUGFuZQkJLy8gbWV0aG9kIC1pbnRlbmRlZCBmb3IgdXNlciBieSBwbHVnaW5zIG9ubHkhCisJLAlzaXplUGFuZToJCQltYW51YWxTaXplUGFuZQkvLyBtZXRob2QgLSBwYXNzIGEgJ3BhbmUnIEFORCBhbiAnb3V0ZXItc2l6ZScgaW4gcGl4ZWxzIG9yIHBlcmNlbnQsIG9yICdhdXRvJworCSwJc2l6ZUNvbnRlbnQ6CQlzaXplQ29udGVudAkJLy8gbWV0aG9kIC0gcGFzcyBhICdwYW5lJworCSwJc3dhcFBhbmVzOgkJCXN3YXBQYW5lcwkJLy8gbWV0aG9kIC0gcGFzcyBUV08gJ3BhbmVzJyAtIHdpbGwgc3dhcCB0aGVtCisJLAlzaG93TWFza3M6CQkJc2hvd01hc2tzCQkvLyBtZXRob2QgLSBwYXNzIGEgJ3BhbmUnIE9SIGxpc3Qgb2YgcGFuZXMgLSBkZWZhdWx0ID0gYWxsIHBhbmVzIHdpdGggbWFzayBvcHRpb24gc2V0CisJLAloaWRlTWFza3M6CQkJaGlkZU1hc2tzCQkvLyBtZXRob2QgLSBkaXR0bycKKwkvLwlwYW5lIGVsZW1lbnQgbWV0aG9kcworCSwJaW5pdENvbnRlbnQ6CQlpbml0Q29udGVudAkJLy8gbWV0aG9kIC0gZGl0dG8KKwksCWFkZFBhbmU6CQkJYWRkUGFuZQkJCS8vIG1ldGhvZCAtIHBhc3MgYSAncGFuZScKKwksCXJlbW92ZVBhbmU6CQkJcmVtb3ZlUGFuZQkJLy8gbWV0aG9kIC0gcGFzcyBhICdwYW5lJyB0byByZW1vdmUgZnJvbSBsYXlvdXQsIGFkZCAndHJ1ZScgdG8gZGVsZXRlIHRoZSBwYW5lLWVsZW0KKwksCWNyZWF0ZUNoaWxkTGF5b3V0OgljcmVhdGVDaGlsZExheW91dC8vIG1ldGhvZCAtIHBhc3MgYSAncGFuZScgYW5kIChvcHRpb25hbCkgbGF5b3V0LW9wdGlvbnMgKE9WRVJSSURFUyBvcHRpb25zW3BhbmVdLmNoaWxkT3B0aW9ucworCS8vCXNwZWNpYWwgcGFuZSBvcHRpb24gc2V0dGluZworCSwJZW5hYmxlQ2xvc2FibGU6CQllbmFibGVDbG9zYWJsZQkvLyBtZXRob2QgLSBwYXNzIGEgJ3BhbmUnCisJLAlkaXNhYmxlQ2xvc2FibGU6CWRpc2FibGVDbG9zYWJsZQkvLyBtZXRob2QgLSBkaXR0bworCSwJZW5hYmxlU2xpZGFibGU6CQllbmFibGVTbGlkYWJsZQkvLyBtZXRob2QgLSBkaXR0bworCSwJZGlzYWJsZVNsaWRhYmxlOglkaXNhYmxlU2xpZGFibGUJLy8gbWV0aG9kIC0gZGl0dG8KKwksCWVuYWJsZVJlc2l6YWJsZToJZW5hYmxlUmVzaXphYmxlCS8vIG1ldGhvZCAtIGRpdHRvCisJLAlkaXNhYmxlUmVzaXphYmxlOglkaXNhYmxlUmVzaXphYmxlLy8gbWV0aG9kIC0gZGl0dG8KKwkvLwl1dGlsaXR5IG1ldGhvZHMgZm9yIHBhbmVzCisJLAlhbGxvd092ZXJmbG93OgkJYWxsb3dPdmVyZmxvdwkvLyB1dGlsaXR5IC0gcGFzcyBjYWxsaW5nIGVsZW1lbnQgKHRoaXMpCisJLAlyZXNldE92ZXJmbG93OgkJcmVzZXRPdmVyZmxvdwkvLyB1dGlsaXR5IC0gZGl0dG8KKwkvLwlsYXlvdXQgY29udHJvbAorCSwJZGVzdHJveToJCQlkZXN0cm95CQkJLy8gbWV0aG9kIC0gbm8gcGFyYW1ldGVycworCSwJaW5pdFBhbmVzOgkJCWlzSW5pdGlhbGl6ZWQJLy8gbWV0aG9kIC0gbm8gcGFyYW1ldGVycworCSwJcmVzaXplQWxsOgkJCXJlc2l6ZUFsbAkJLy8gbWV0aG9kIC0gbm8gcGFyYW1ldGVycworCS8vCWNhbGxiYWNrIHRyaWdnZXJpbmcKKwksCXJ1bkNhbGxiYWNrczoJCV9ydW5DYWxsYmFja3MJLy8gbWV0aG9kIC0gcGFzcyBldnROYW1lICYgcGFuZSAoaWYgYSBwYW5lLWV2ZW50KSwgZWc6IHRyaWdnZXIoIm9ub3BlbiIsICJ3ZXN0IikKKwkvLwlhbGlhcyBjb2xsZWN0aW9ucyBvZiBvcHRpb25zLCBzdGF0ZSBhbmQgY2hpbGRyZW4gLSBjcmVhdGVkIGluIGFkZFBhbmUgYW5kIGV4dGVuZGVkIGVsc2V3aGVyZQorCSwJaGFzUGFyZW50TGF5b3V0OglmYWxzZQkJCS8vIHNldCBieSBpbml0Q29udGFpbmVyKCkKKwksCWNoaWxkcmVuOgkJCWNoaWxkcmVuCQkvLyBwb2ludGVycyB0byBjaGlsZC1sYXlvdXRzLCBlZzogSW5zdGFuY2UuY2hpbGRyZW5bIndlc3QiXQorCSwJbm9ydGg6CQkJCWZhbHNlCQkJLy8gYWxpYXMgZ3JvdXA6IHsgbmFtZTogcGFuZSwgcGFuZTogJFBzW3BhbmVdLCBvcHRpb25zOiBvcHRpb25zW3BhbmVdLCBzdGF0ZTogc3RhdGVbcGFuZV0sIGNoaWxkOiBjaGlsZHJlbltwYW5lXSB9CisJLAlzb3V0aDoJCQkJZmFsc2UJCQkvLyBkaXR0bworCSwJd2VzdDoJCQkJZmFsc2UJCQkvLyBkaXR0bworCSwJZWFzdDoJCQkJZmFsc2UJCQkvLyBkaXR0bworCSwJY2VudGVyOgkJCQlmYWxzZQkJCS8vIGRpdHRvCisJfTsKKworCS8vIGNyZWF0ZSB0aGUgYm9yZGVyIGxheW91dCBOT1cKKwlpZiAoX2NyZWF0ZSgpID09PSAnY2FuY2VsJykgLy8gb25sb2FkX3N0YXJ0IGNhbGxiYWNrIHJldHVybmVkIGZhbHNlIHRvIENBTkNFTCBsYXlvdXQgY3JlYXRpb24KKwkJcmV0dXJuIG51bGw7CisJZWxzZSAvLyB0cnVlIE9SIGZhbHNlIC0tIGlmIGxheW91dC1lbGVtZW50cyBkaWQgTk9UIGluaXQgKGhpZGRlbiBvciBkbyBub3QgZXhpc3QpLCBjYW4gYXV0by1pbml0IGxhdGVyCisJCXJldHVybiBJbnN0YW5jZTsgLy8gcmV0dXJuIHRoZSBJbnN0YW5jZSBvYmplY3QKKworfQorCisKKy8qCU9MRCB2ZXJzaW9ucyBvZiBqUXVlcnkgb25seSBzZXQgJC5zdXBwb3J0LmJveE1vZGVsIGFmdGVyIHBhZ2UgaXMgbG9hZGVkCisgKglzbyBpZiB0aGlzIGlzIElFLCB1c2Ugc3VwcG9ydC5ib3hNb2RlbCB0byB0ZXN0IGZvciBxdWlya3MtbW9kZSAoT05MWSBJRSBjaGFuZ2VzIGJveE1vZGVsKS4KKyAqLworJChmdW5jdGlvbigpeworCXZhciBiID0gJC5sYXlvdXQuYnJvd3NlcjsKKwlpZiAoYi5tc2llKSBiLmJveE1vZGVsID0gJC5zdXBwb3J0LmJveE1vZGVsOworfSk7CisKKworLyoqCisgKiBqcXVlcnkubGF5b3V0LnN0YXRlIDEuMAorICogJERhdGU6IDIwMTEtMDctMTYgMDg6MDA6MDAgKFNhdCwgMTYgSnVseSAyMDExKSAkCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIAorICogICBLZXZpbiBEYWxtYW4gKGh0dHA6Ly9hbGxwcm8ubmV0KQorICoKKyAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCAoaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sKQorICogYW5kIE1JVCAoaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHApIGxpY2Vuc2VzLgorICoKKyAqIEBkZXBlbmRhbmNpZXM6IFVJIExheW91dCAxLjMuMC5yYzMwLjEgb3IgaGlnaGVyCisgKiBAZGVwZW5kYW5jaWVzOiAkLnVpLmNvb2tpZSAoYWJvdmUpCisgKgorICogQHN1cHBvcnQ6IGh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9qcXVlcnktdWktbGF5b3V0CisgKi8KKy8qCisgKglTdGF0ZS1tYW5hZ2VtZW50IG9wdGlvbnMgc3RvcmVkIGluIG9wdGlvbnMuc3RhdGVNYW5hZ2VtZW50LCB3aGljaCBpbmNsdWRlcyBhIC5jb29raWUgaGFzaAorICoJRGVmYXVsdCBvcHRpb25zIHNhdmVzIEFMTCBLRVlTIGZvciBBTEwgUEFORVMsIGllOiBwYW5lLnNpemUsIHBhbmUuaXNDbG9zZWQsIHBhbmUuaXNIaWRkZW4KKyAqCisgKgkvLyBTVEFURS9DT09LSUUgT1BUSU9OUworICoJQGV4YW1wbGUgJChlbCkubGF5b3V0KHsKKwkJCQlzdGF0ZU1hbmFnZW1lbnQ6IHsKKwkJCQkJZW5hYmxlZDoJdHJ1ZQorCQkJCSwJc3RhdGVLZXlzOgkiZWFzdC5zaXplLHdlc3Quc2l6ZSxlYXN0LmlzQ2xvc2VkLHdlc3QuaXNDbG9zZWQiCisJCQkJLAljb29raWU6CQl7IG5hbWU6ICJhcHBMYXlvdXQiLCBwYXRoOiAiLyIgfQorCQkJCX0KKwkJCX0pCisgKglAZXhhbXBsZSAkKGVsKS5sYXlvdXQoeyBzdGF0ZU1hbmFnZW1lbnRfX2VuYWJsZWQ6IHRydWUgfSkgLy8gZW5hYmxlIGF1dG8tc3RhdGUtbWFuYWdlbWVudCB1c2luZyBjb29raWVzCisgKglAZXhhbXBsZSAkKGVsKS5sYXlvdXQoeyBzdGF0ZU1hbmFnZW1lbnRfX2Nvb2tpZTogeyBuYW1lOiAiYXBwTGF5b3V0IiwgcGF0aDogIi8iIH0gfSkKKyAqCUBleGFtcGxlICQoZWwpLmxheW91dCh7IHN0YXRlTWFuYWdlbWVudF9fY29va2llX19uYW1lOiAiYXBwTGF5b3V0Iiwgc3RhdGVNYW5hZ2VtZW50X19jb29raWVfX3BhdGg6ICIvIiB9KQorICoKKyAqCS8vIFNUQVRFL0NPT0tJRSBNRVRIT0RTCisgKglAZXhhbXBsZSBteUxheW91dC5zYXZlQ29va2llKCAid2VzdC5pc0Nsb3NlZCxub3J0aC5zaXplLHNvdXRoLmlzSGlkZGVuIiwge2V4cGlyZXM6IDd9ICk7CisgKglAZXhhbXBsZSBteUxheW91dC5sb2FkQ29va2llKCk7CisgKglAZXhhbXBsZSBteUxheW91dC5kZWxldGVDb29raWUoKTsKKyAqCUBleGFtcGxlIHZhciBKU09OID0gbXlMYXlvdXQucmVhZFN0YXRlKCk7CS8vIENVUlJFTlQgTGF5b3V0IFN0YXRlCisgKglAZXhhbXBsZSB2YXIgSlNPTiA9IG15TGF5b3V0LnJlYWRDb29raWUoKTsJLy8gU0FWRUQgTGF5b3V0IFN0YXRlIChmcm9tIGNvb2tpZSkKKyAqCUBleGFtcGxlIHZhciBKU09OID0gbXlMYXlvdXQuc3RhdGUuc3RhdGVEYXRhOwkvLyBMQVNUIExPQURFRCBMYXlvdXQgU3RhdGUgKGNvb2tpZSBzYXZlZCBpbiBsYXlvdXQuc3RhdGUgaGFzaCkKKyAqCisgKglDVVNUT00gU1RBVEUtTUFOQUdFTUVOVCAoZWcsIHNhdmVkIGluIGEgZGF0YWJhc2UpCisgKglAZXhhbXBsZSB2YXIgSlNPTiA9IG15TGF5b3V0LnJlYWRTdGF0ZSggIndlc3QuaXNDbG9zZWQsbm9ydGguc2l6ZSxzb3V0aC5pc0hpZGRlbiIgKTsKKyAqCUBleGFtcGxlIG15TGF5b3V0LmxvYWRTdGF0ZSggSlNPTiApOworICovCisKKy8qKgorICoJVUkgQ09PS0lFIFVUSUxJVFkKKyAqCisgKglBICQuY29va2llIE9SICQudWkuY29va2llIG5hbWVzcGFjZSAqc2hvdWxkIGJlIHN0YW5kYXJkKiwgYnV0IHVudGlsIHRoZW4uLi4KKyAqCVRoaXMgY3JlYXRlcyAkLnVpLmNvb2tpZSBzbyBMYXlvdXQgZG9lcyBub3QgbmVlZCB0aGUgY29va2llLmpxdWVyeS5qcyBwbHVnaW4KKyAqCU5PVEU6IFRoaXMgdXRpbGl0eSBpcyBSRVFVSVJFRCBieSB0aGUgbGF5b3V0LnN0YXRlIHBsdWdpbgorICoKKyAqCUNvb2tpZSBtZXRob2RzIGluIExheW91dCBhcmUgY3JlYXRlZCBhcyBwYXJ0IG9mIFN0YXRlIE1hbmFnZW1lbnQgCisgKi8KK2lmICghJC51aSkgJC51aSA9IHt9OworJC51aS5jb29raWUgPSB7CisKKwkvLyBjb29raWVFbmFibGVkIGlzIG5vdCBpbiBET00gc3BlY3MsIGJ1dCBET0VTIHdvcmtzIGluIGFsbCBicm93c2VycyxpbmNsdWRpbmcgSUU2CisJYWNjZXB0c0Nvb2tpZXM6ICEhbmF2aWdhdG9yLmNvb2tpZUVuYWJsZWQKKworLAlyZWFkOiBmdW5jdGlvbiAobmFtZSkgeworCQl2YXIKKwkJCWMJCT0gZG9jdW1lbnQuY29va2llCisJCSwJY3MJCT0gYyA/IGMuc3BsaXQoJzsnKSA6IFtdCisJCSwJcGFpcgkvLyBsb29wIHZhcgorCQk7CisJCWZvciAodmFyIGk9MCwgbj1jcy5sZW5ndGg7IGkgPCBuOyBpKyspIHsKKwkJCXBhaXIgPSAkLnRyaW0oY3NbaV0pLnNwbGl0KCc9Jyk7IC8vIG5hbWU9dmFsdWUgcGFpcgorCQkJaWYgKHBhaXJbMF0gPT0gbmFtZSkgLy8gZm91bmQgdGhlIGxheW91dCBjb29raWUKKwkJCQlyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMV0pOworCisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCissCXdyaXRlOiBmdW5jdGlvbiAobmFtZSwgdmFsLCBjb29raWVPcHRzKSB7CisJCXZhcgorCQkJcGFyYW1zCT0gJycKKwkJLAlkYXRlCT0gJycKKwkJLAljbGVhcgk9IGZhbHNlCisJCSwJbwkJPSBjb29raWVPcHRzIHx8IHt9CisJCSwJeAkJPSBvLmV4cGlyZXMKKwkJOworCQlpZiAoeCAmJiB4LnRvVVRDU3RyaW5nKQorCQkJZGF0ZSA9IHg7CisJCWVsc2UgaWYgKHggPT09IG51bGwgfHwgdHlwZW9mIHggPT09ICdudW1iZXInKSB7CisJCQlkYXRlID0gbmV3IERhdGUoKTsKKwkJCWlmICh4ID4gMCkKKwkJCQlkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyB4KTsKKwkJCWVsc2UgeworCQkJCWRhdGUuc2V0RnVsbFllYXIoMTk3MCk7CisJCQkJY2xlYXIgPSB0cnVlOworCQkJfQorCQl9CisJCWlmIChkYXRlKQkJcGFyYW1zICs9ICc7ZXhwaXJlcz0nKyBkYXRlLnRvVVRDU3RyaW5nKCk7CisJCWlmIChvLnBhdGgpCQlwYXJhbXMgKz0gJztwYXRoPScrIG8ucGF0aDsKKwkJaWYgKG8uZG9tYWluKQlwYXJhbXMgKz0gJztkb21haW49Jysgby5kb21haW47CisJCWlmIChvLnNlY3VyZSkJcGFyYW1zICs9ICc7c2VjdXJlJzsKKwkJZG9jdW1lbnQuY29va2llID0gbmFtZSArJz0nKyAoY2xlYXIgPyAiIiA6IGVuY29kZVVSSUNvbXBvbmVudCggdmFsICkpICsgcGFyYW1zOyAvLyB3cml0ZSBvciBjbGVhciBjb29raWUKKwl9CisKKywJY2xlYXI6IGZ1bmN0aW9uIChuYW1lKSB7CisJCSQudWkuY29va2llLndyaXRlKG5hbWUsICcnLCB7ZXhwaXJlczogLTF9KTsKKwl9CisKK307CisvLyBpZiBjb29raWUuanF1ZXJ5LmpzIGlzIG5vdCBsb2FkZWQsIGNyZWF0ZSBhbiBhbGlhcyB0byByZXBsaWNhdGUgaXQKKy8vIHRoaXMgbWF5IGJlIHVzZWZ1bCB0byBvdGhlciBwbHVnaW5zIG9yIGNvZGUgZGVwZW5kZW50IG9uIHRoYXQgcGx1Z2luCitpZiAoISQuY29va2llKSAkLmNvb2tpZSA9IGZ1bmN0aW9uIChrLCB2LCBvKSB7CisJdmFyIEMgPSAkLnVpLmNvb2tpZTsKKwlpZiAodiA9PT0gbnVsbCkKKwkJQy5jbGVhcihrKTsKKwllbHNlIGlmICh2ID09PSB1bmRlZmluZWQpCisJCXJldHVybiBDLnJlYWQoayk7CisJZWxzZQorCQlDLndyaXRlKGssIHYsIG8pOworfTsKKworCisvLyB0ZWxsIExheW91dCB0aGF0IHRoZSBzdGF0ZSBwbHVnaW4gaXMgYXZhaWxhYmxlCiskLmxheW91dC5wbHVnaW5zLnN0YXRlTWFuYWdlbWVudCA9IHRydWU7CisKKy8vCUFkZCBTdGF0ZS1NYW5hZ2VtZW50IG9wdGlvbnMgdG8gbGF5b3V0LmRlZmF1bHRzCiskLmxheW91dC5jb25maWcub3B0aW9uUm9vdEtleXMucHVzaCgic3RhdGVNYW5hZ2VtZW50Iik7CiskLmxheW91dC5kZWZhdWx0cy5zdGF0ZU1hbmFnZW1lbnQgPSB7CisJZW5hYmxlZDoJZmFsc2UJLy8gdHJ1ZSA9IGVuYWJsZSBzdGF0ZS1tYW5hZ2VtZW50LCBldmVuIGlmIG5vdCB1c2luZyBjb29raWVzCissCWF1dG9TYXZlOgl0cnVlCS8vIFNhdmUgYSBzdGF0ZS1jb29raWUgd2hlbiBwYWdlIGV4aXRzPworLAlhdXRvTG9hZDoJdHJ1ZQkvLyBMb2FkIHRoZSBzdGF0ZS1jb29raWUgd2hlbiBMYXlvdXQgaW5pdHM/CisJLy8gTGlzdCBzdGF0ZS1kYXRhIHRvIHNhdmUgLSBtdXN0IGJlIHBhbmUtc3BlY2lmaWMKKywJc3RhdGVLZXlzOgkibm9ydGguc2l6ZSxzb3V0aC5zaXplLGVhc3Quc2l6ZSx3ZXN0LnNpemUsIisKKwkJCQkibm9ydGguaXNDbG9zZWQsc291dGguaXNDbG9zZWQsZWFzdC5pc0Nsb3NlZCx3ZXN0LmlzQ2xvc2VkLCIrCisJCQkJIm5vcnRoLmlzSGlkZGVuLHNvdXRoLmlzSGlkZGVuLGVhc3QuaXNIaWRkZW4sd2VzdC5pc0hpZGRlbiIKKywJY29va2llOiB7CisJCW5hbWU6CSIiCS8vIElmIG5vdCBzcGVjaWZpZWQsIHdpbGwgdXNlIExheW91dC5uYW1lLCBlbHNlIGp1c3QgIkxheW91dCIKKwksCWRvbWFpbjoJIiIJLy8gYmxhbmsgPSBjdXJyZW50IGRvbWFpbgorCSwJcGF0aDoJIiIJLy8gYmxhbmsgPSBjdXJyZW50IHBhZ2UsICcvJyA9IGVudGlyZSB3ZWJzaXRlCisJLAlleHBpcmVzOiAiIgkvLyAnZGF5cycgdG8ga2VlcCBjb29raWUgLSBsZWF2ZSBibGFuayBmb3IgJ3Nlc3Npb24gY29va2llJworCSwJc2VjdXJlOglmYWxzZQorCX0KK307CisvLyBTZXQgc3RhdGVNYW5hZ2VtZW50IGFzIGEgbGF5b3V0LW9wdGlvbiwgTk9UIGEgcGFuZS1vcHRpb24KKyQubGF5b3V0Lm9wdGlvbnNNYXAubGF5b3V0LnB1c2goInN0YXRlTWFuYWdlbWVudCIpOworCisvKgorICoJU3RhdGUgTWFuYWdlbWVudCBtZXRob2RzCisgKi8KKyQubGF5b3V0LnN0YXRlID0geworCisJLyoqCisJICogR2V0IHRoZSBjdXJyZW50IGxheW91dCBzdGF0ZSBhbmQgc2F2ZSBpdCB0byBhIGNvb2tpZQorCSAqCisJICogbXlMYXlvdXQuc2F2ZUNvb2tpZSgga2V5cywgY29va2llT3B0cyApCisJICoKKwkgKiBAcGFyYW0ge09iamVjdH0JCQlpbnN0CisJICogQHBhcmFtIHsoc3RyaW5nfEFycmF5KT19CWtleXMKKwkgKiBAcGFyYW0ge09iamVjdD19CQkJY29va2llT3B0cworCSAqLworCXNhdmVDb29raWU6IGZ1bmN0aW9uIChpbnN0LCBrZXlzLCBjb29raWVPcHRzKSB7CisJCXZhciBvCT0gaW5zdC5vcHRpb25zCisJCSwJb1MJPSBvLnN0YXRlTWFuYWdlbWVudAorCQksCW9DCT0gJC5leHRlbmQodHJ1ZSwge30sIG9TLmNvb2tpZSwgY29va2llT3B0cyB8fCBudWxsKQorCQksCWRhdGEgPSBpbnN0LnN0YXRlLnN0YXRlRGF0YSA9IGluc3QucmVhZFN0YXRlKCBrZXlzIHx8IG9TLnN0YXRlS2V5cyApIC8vIHJlYWQgY3VycmVudCBwYW5lcy1zdGF0ZQorCQk7CisJCSQudWkuY29va2llLndyaXRlKCBvQy5uYW1lIHx8IG8ubmFtZSB8fCAiTGF5b3V0IiwgJC5sYXlvdXQuc3RhdGUuZW5jb2RlSlNPTihkYXRhKSwgb0MgKTsKKwkJcmV0dXJuICQuZXh0ZW5kKHRydWUsIHt9LCBkYXRhKTsgLy8gcmV0dXJuIENPUFkgb2Ygc3RhdGUuc3RhdGVEYXRhIGRhdGEKKwl9CisKKwkvKioKKwkgKiBSZW1vdmUgdGhlIHN0YXRlIGNvb2tpZQorCSAqCisJICogQHBhcmFtIHtPYmplY3R9CWluc3QKKwkgKi8KKywJZGVsZXRlQ29va2llOiBmdW5jdGlvbiAoaW5zdCkgeworCQl2YXIgbyA9IGluc3Qub3B0aW9uczsKKwkJJC51aS5jb29raWUuY2xlYXIoIG8uc3RhdGVNYW5hZ2VtZW50LmNvb2tpZS5uYW1lIHx8IG8ubmFtZSB8fCAiTGF5b3V0IiApOworCX0KKworCS8qKgorCSAqIFJlYWQgJiByZXR1cm4gZGF0YSBmcm9tIHRoZSBjb29raWUgLSBhcyBKU09OCisJICoKKwkgKiBAcGFyYW0ge09iamVjdH0JaW5zdAorCSAqLworLAlyZWFkQ29va2llOiBmdW5jdGlvbiAoaW5zdCkgeworCQl2YXIgbyA9IGluc3Qub3B0aW9uczsKKwkJdmFyIGMgPSAkLnVpLmNvb2tpZS5yZWFkKCBvLnN0YXRlTWFuYWdlbWVudC5jb29raWUubmFtZSB8fCBvLm5hbWUgfHwgIkxheW91dCIgKTsKKwkJLy8gY29udmVydCBjb29raWUgc3RyaW5nIGJhY2sgdG8gYSBoYXNoIGFuZCByZXR1cm4gaXQKKwkJcmV0dXJuIGMgPyAkLmxheW91dC5zdGF0ZS5kZWNvZGVKU09OKGMpIDoge307CisJfQorCisJLyoqCisJICogR2V0IGRhdGEgZnJvbSB0aGUgY29va2llIGFuZCBVU0UgSVQgdG8gbG9hZFN0YXRlCisJICoKKwkgKiBAcGFyYW0ge09iamVjdH0JaW5zdAorCSAqLworLAlsb2FkQ29va2llOiBmdW5jdGlvbiAoaW5zdCkgeworCQl2YXIgYyA9ICQubGF5b3V0LnN0YXRlLnJlYWRDb29raWUoaW5zdCk7IC8vIFJFQUQgdGhlIGNvb2tpZQorCQlpZiAoYykgeworCQkJaW5zdC5zdGF0ZS5zdGF0ZURhdGEgPSAkLmV4dGVuZCh0cnVlLCB7fSwgYyk7IC8vIFNFVCBzdGF0ZS5zdGF0ZURhdGEKKwkJCWluc3QubG9hZFN0YXRlKGMpOyAvLyBMT0FEIHRoZSByZXRyaWV2ZWQgc3RhdGUKKwkJfQorCQlyZXR1cm4gYzsKKwl9CisJCisJLyoqCisJICogVXBkYXRlIGxheW91dCBvcHRpb25zIGZyb20gdGhlIGNvb2tpZSwgaWYgb25lIGV4aXN0cworCSAqCisJICogQHBhcmFtIHtPYmplY3R9CQlpbnN0CisJICogQHBhcmFtIHtPYmplY3Q9fQkJc3RhdGVEYXRhCisJICogQHBhcmFtIHtib29sZWFuPX0JYW5pbWF0ZQorCSAqLworLAlsb2FkU3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBzdGF0ZURhdGEsIGFuaW1hdGUpIHsKKwkJc3RhdGVEYXRhID0gJC5sYXlvdXQudHJhbnNmb3JtRGF0YSggc3RhdGVEYXRhICk7IC8vIHBhbmVzID0gZGVmYXVsdCBzdWJrZXkKKwkJaWYgKCQuaXNFbXB0eU9iamVjdCggc3RhdGVEYXRhICkpIHJldHVybjsKKwkJJC5leHRlbmQodHJ1ZSwgaW5zdC5vcHRpb25zLCBzdGF0ZURhdGEpOyAvLyB1cGRhdGUgbGF5b3V0IG9wdGlvbnMKKwkJLy8gaWYgbGF5b3V0IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQsIHRoZW4gVVBEQVRFIGxheW91dCBzdGF0ZQorCQlpZiAoaW5zdC5zdGF0ZS5pbml0aWFsaXplZCkgeworCQkJdmFyIHBhbmUsIHZpcywgbywgcywgaCwgYworCQkJLAlub0FuaW1hdGUgPSAoYW5pbWF0ZT09PWZhbHNlKQorCQkJOworCQkJJC5lYWNoKCQubGF5b3V0LmNvbmZpZy5ib3JkZXJQYW5lcywgZnVuY3Rpb24gKGlkeCwgcGFuZSkgeworCQkJCXN0YXRlID0gaW5zdC5zdGF0ZVtwYW5lXTsKKwkJCQlvID0gc3RhdGVEYXRhWyBwYW5lIF07CisJCQkJaWYgKHR5cGVvZiBvICE9ICdvYmplY3QnKSByZXR1cm47IC8vIG5vIGtleSwgY29udGludWUKKwkJCQlzCT0gby5zaXplOworCQkJCWMJPSBvLmluaXRDbG9zZWQ7CisJCQkJaAk9IG8uaW5pdEhpZGRlbjsKKwkJCQl2aXMJPSBzdGF0ZS5pc1Zpc2libGU7CisJCQkJLy8gcmVzaXplIEJFRk9SRSBvcGVuaW5nCisJCQkJaWYgKCF2aXMpCisJCQkJCWluc3Quc2l6ZVBhbmUocGFuZSwgcywgZmFsc2UsIGZhbHNlKTsKKwkJCQlpZiAoaCA9PT0gdHJ1ZSkJCQlpbnN0LmhpZGUocGFuZSwgbm9BbmltYXRlKTsKKwkJCQllbHNlIGlmIChjID09PSBmYWxzZSkJaW5zdC5vcGVuIChwYW5lLCBmYWxzZSwgbm9BbmltYXRlKTsKKwkJCQllbHNlIGlmIChjID09PSB0cnVlKQlpbnN0LmNsb3NlKHBhbmUsIGZhbHNlLCBub0FuaW1hdGUpOworCQkJCWVsc2UgaWYgKGggPT09IGZhbHNlKQlpbnN0LnNob3cgKHBhbmUsIGZhbHNlLCBub0FuaW1hdGUpOworCQkJCS8vIHJlc2l6ZSBBRlRFUiBhbnkgb3RoZXIgYWN0aW9ucworCQkJCWlmICh2aXMpCisJCQkJCWluc3Quc2l6ZVBhbmUocGFuZSwgcywgZmFsc2UsIG5vQW5pbWF0ZSk7IC8vIGFuaW1hdGUgcmVzaXplIGlmIG9wdGlvbiBwYXNzZWQKKwkJCX0pOworCQl9OworCX0KKworCS8qKgorCSAqIEdldCB0aGUgKmN1cnJlbnQgbGF5b3V0IHN0YXRlKiBhbmQgcmV0dXJuIGl0IGFzIGEgaGFzaAorCSAqCisJICogQHBhcmFtIHtPYmplY3Q9fQkJCWluc3QKKwkgKiBAcGFyYW0geyhzdHJpbmd8QXJyYXkpPX0Ja2V5cworCSAqLworLAlyZWFkU3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBrZXlzKSB7CisJCXZhcgorCQkJZGF0YQk9IHt9CisJCSwJYWx0CQk9IHsgaXNDbG9zZWQ6ICdpbml0Q2xvc2VkJywgaXNIaWRkZW46ICdpbml0SGlkZGVuJyB9CisJCSwJc3RhdGUJPSBpbnN0LnN0YXRlCisJCSwJcGFuZXMJPSAkLmxheW91dC5jb25maWcuYWxsUGFuZXMKKwkJLAlwYWlyLCBwYW5lLCBrZXksIHZhbAorCQk7CisJCWlmICgha2V5cykga2V5cyA9IGluc3Qub3B0aW9ucy5zdGF0ZU1hbmFnZW1lbnQuc3RhdGVLZXlzOyAvLyBpZiBjYWxsZWQgYnkgdXNlcgorCQlpZiAoJC5pc0FycmF5KGtleXMpKSBrZXlzID0ga2V5cy5qb2luKCIsIik7CisJCS8vIGNvbnZlcnQga2V5cyB0byBhbiBhcnJheSBhbmQgY2hhbmdlIGRlbGltaXRlcnMgZnJvbSAnX18nIHRvICcuJworCQlrZXlzID0ga2V5cy5yZXBsYWNlKC9fXy9nLCAiLiIpLnNwbGl0KCcsJyk7CisJCS8vIGxvb3Aga2V5cyBhbmQgY3JlYXRlIGEgZGF0YSBoYXNoCisJCWZvciAodmFyIGk9MCwgbj1rZXlzLmxlbmd0aDsgaSA8IG47IGkrKykgeworCQkJcGFpciA9IGtleXNbaV0uc3BsaXQoIi4iKTsKKwkJCXBhbmUgPSBwYWlyWzBdOworCQkJa2V5ICA9IHBhaXJbMV07CisJCQlpZiAoJC5pbkFycmF5KHBhbmUsIHBhbmVzKSA8IDApIGNvbnRpbnVlOyAvLyBiYWQgcGFuZSEKKwkJCXZhbCA9IHN0YXRlWyBwYW5lIF1bIGtleSBdOworCQkJaWYgKHZhbCA9PSB1bmRlZmluZWQpIGNvbnRpbnVlOworCQkJaWYgKGtleT09ImlzQ2xvc2VkIiAmJiBzdGF0ZVtwYW5lXVsiaXNTbGlkaW5nIl0pCisJCQkJdmFsID0gdHJ1ZTsgLy8gaWYgc2xpZGluZywgdGhlbiAqcmVhbGx5KiBpc0Nsb3NlZAorCQkJKCBkYXRhW3BhbmVdIHx8IChkYXRhW3BhbmVdPXt9KSApWyBhbHRba2V5XSA/IGFsdFtrZXldIDoga2V5IF0gPSB2YWw7CisJCX0KKwkJcmV0dXJuIGRhdGE7CisJfQorCisJLyoqCisJICoJU3RyaW5naWZ5IGEgSlNPTiBoYXNoIHNvIGNhbiBzYXZlIGluIGEgY29va2llIG9yIGRiLWZpZWxkCisJICovCissCWVuY29kZUpTT046IGZ1bmN0aW9uIChKU09OKSB7CisJCXJldHVybiBwYXJzZShKU09OKTsKKwkJZnVuY3Rpb24gcGFyc2UgKGgpIHsKKwkJCXZhciBEPVtdLCBpPTAsIGssIHYsIHQ7IC8vIGsgPSBrZXksIHYgPSB2YWx1ZQorCQkJZm9yIChrIGluIGgpIHsKKwkJCQl2ID0gaFtrXTsKKwkJCQl0ID0gdHlwZW9mIHY7CisJCQkJaWYgKHQgPT0gJ3N0cmluZycpCQkvLyBTVFJJTkcgLSBhZGQgcXVvdGVzCisJCQkJCXYgPSAnIicrIHYgKyciJzsKKwkJCQllbHNlIGlmICh0ID09ICdvYmplY3QnKQkvLyBTVUItS0VZIC0gcmVjdXJzZSBpbnRvIGl0CisJCQkJCXYgPSBwYXJzZSh2KTsKKwkJCQlEW2krK10gPSAnIicrIGsgKyciOicrIHY7CisJCQl9CisJCQlyZXR1cm4gJ3snKyBELmpvaW4oJywnKSArJ30nOworCQl9OworCX0KKworCS8qKgorCSAqCUNvbnZlcnQgc3RyaW5naWZpZWQgSlNPTiBiYWNrIHRvIGEgaGFzaCBvYmplY3QKKwkgKglAc2VlCQkkLnBhcnNlSlNPTigpLCBhZGRpbmcgaW4galF1ZXJ5IDEuNC4xCisJICovCissCWRlY29kZUpTT046IGZ1bmN0aW9uIChzdHIpIHsKKwkJdHJ5IHsgcmV0dXJuICQucGFyc2VKU09OID8gJC5wYXJzZUpTT04oc3RyKSA6IHdpbmRvd1siZXZhbCJdKCIoIisgc3RyICsiKSIpIHx8IHt9OyB9CisJCWNhdGNoIChlKSB7IHJldHVybiB7fTsgfQorCX0KKworCissCV9jcmVhdGU6IGZ1bmN0aW9uIChpbnN0KSB7CisJCXZhciBfCT0gJC5sYXlvdXQuc3RhdGU7CisJCS8vCUFERCBTdGF0ZS1NYW5hZ2VtZW50IHBsdWdpbiBtZXRob2RzIHRvIGluc3QKKwkJICQuZXh0ZW5kKCBpbnN0LCB7CisJCS8vCXJlYWRDb29raWUgLSB1cGRhdGUgb3B0aW9ucyBmcm9tIGNvb2tpZSAtIHJldHVybnMgaGFzaCBvZiBjb29raWUgZGF0YQorCQkJcmVhZENvb2tpZToJCWZ1bmN0aW9uICgpIHsgcmV0dXJuIF8ucmVhZENvb2tpZShpbnN0KTsgfQorCQkvLwlkZWxldGVDb29raWUKKwkJLAlkZWxldGVDb29raWU6CWZ1bmN0aW9uICgpIHsgXy5kZWxldGVDb29raWUoaW5zdCk7IH0KKwkJLy8Jc2F2ZUNvb2tpZSAtIG9wdGlvbmFsbHkgcGFzcyBrZXlzLWxpc3QgYW5kIGNvb2tpZS1vcHRpb25zIChoYXNoKQorCQksCXNhdmVDb29raWU6CQlmdW5jdGlvbiAoa2V5cywgY29va2llT3B0cykgeyByZXR1cm4gXy5zYXZlQ29va2llKGluc3QsIGtleXMsIGNvb2tpZU9wdHMpOyB9CisJCS8vCWxvYWRDb29raWUgLSByZWFkQ29va2llIGFuZCB1c2UgdG8gbG9hZFN0YXRlKCkgLSByZXR1cm5zIGhhc2ggb2YgY29va2llIGRhdGEKKwkJLAlsb2FkQ29va2llOgkJZnVuY3Rpb24gKCkgeyByZXR1cm4gXy5sb2FkQ29va2llKGluc3QpOyB9CisJCS8vCWxvYWRTdGF0ZSAtIHBhc3MgYSBoYXNoIG9mIHN0YXRlIHRvIHVzZSB0byB1cGRhdGUgb3B0aW9ucworCQksCWxvYWRTdGF0ZToJCWZ1bmN0aW9uIChzdGF0ZURhdGEsIGFuaW1hdGUpIHsgXy5sb2FkU3RhdGUoaW5zdCwgc3RhdGVEYXRhLCBhbmltYXRlKTsgfQorCQkvLwlyZWFkU3RhdGUgLSByZXR1cm5zIGhhc2ggb2YgY3VycmVudCBsYXlvdXQtc3RhdGUKKwkJLAlyZWFkU3RhdGU6CQlmdW5jdGlvbiAoa2V5cykgeyByZXR1cm4gXy5yZWFkU3RhdGUoaW5zdCwga2V5cyk7IH0KKwkJLy8JYWRkIEpTT04gdXRpbGl0eSBtZXRob2RzIHRvby4uLgorCQksCWVuY29kZUpTT046CQlfLmVuY29kZUpTT04KKwkJLAlkZWNvZGVKU09OOgkJXy5kZWNvZGVKU09OCisJCX0pOworCisJCS8vIGluaXQgc3RhdGUuc3RhdGVEYXRhIGtleSwgZXZlbiBpZiBwbHVnaW4gaXMgaW5pdGlhbGx5IGRpc2FibGVkCisJCWluc3Quc3RhdGUuc3RhdGVEYXRhID0ge307CisKKwkJLy8gcmVhZCBhbmQgbG9hZCBjb29raWUtZGF0YSBwZXIgb3B0aW9ucworCQl2YXIgb1MgPSBpbnN0Lm9wdGlvbnMuc3RhdGVNYW5hZ2VtZW50OworCQlpZiAob1MuZW5hYmxlZCkgeworCQkJaWYgKG9TLmF1dG9Mb2FkKSAvLyB1cGRhdGUgdGhlIG9wdGlvbnMgZnJvbSB0aGUgY29va2llCisJCQkJaW5zdC5sb2FkQ29va2llKCk7CisJCQllbHNlIC8vIGRvbid0IG1vZGlmeSBvcHRpb25zIC0ganVzdCBzdG9yZSBjb29raWUgZGF0YSBpbiBzdGF0ZS5zdGF0ZURhdGEKKwkJCQlpbnN0LnN0YXRlLnN0YXRlRGF0YSA9IGluc3QucmVhZENvb2tpZSgpOworCQl9CisJfQorCissCV91bmxvYWQ6IGZ1bmN0aW9uIChpbnN0KSB7CisJCXZhciBvUyA9IGluc3Qub3B0aW9ucy5zdGF0ZU1hbmFnZW1lbnQ7CisJCWlmIChvUy5lbmFibGVkKSB7CisJCQlpZiAob1MuYXV0b1NhdmUpIC8vIHNhdmUgYSBzdGF0ZS1jb29raWUgYXV0b21hdGljYWxseQorCQkJCWluc3Quc2F2ZUNvb2tpZSgpOworCQkJZWxzZSAvLyBkb24ndCBzYXZlIGEgY29va2llLCBidXQgZG8gc3RvcmUgc3RhdGUtZGF0YSBpbiBzdGF0ZS5zdGF0ZURhdGEga2V5CisJCQkJaW5zdC5zdGF0ZS5zdGF0ZURhdGEgPSBpbnN0LnJlYWRTdGF0ZSgpOworCQl9CisJfQorCit9OworCisvLyBhZGQgc3RhdGUgaW5pdGlhbGl6YXRpb24gbWV0aG9kIHRvIExheW91dCdzIG9uQ3JlYXRlIGFycmF5IG9mIGZ1bmN0aW9ucworJC5sYXlvdXQub25DcmVhdGUucHVzaCggJC5sYXlvdXQuc3RhdGUuX2NyZWF0ZSApOworJC5sYXlvdXQub25VbmxvYWQucHVzaCggJC5sYXlvdXQuc3RhdGUuX3VubG9hZCApOworCisKKworCisvKioKKyAqIGpxdWVyeS5sYXlvdXQuYnV0dG9ucyAxLjAKKyAqICREYXRlOiAyMDExLTA3LTE2IDA4OjAwOjAwIChTYXQsIDE2IEp1bHkgMjAxMSkgJAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCAKKyAqICAgS2V2aW4gRGFsbWFuIChodHRwOi8vYWxscHJvLm5ldCkKKyAqCisgKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgKGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwuaHRtbCkKKyAqIGFuZCBNSVQgKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwKSBsaWNlbnNlcy4KKyAqCisgKiBAZGVwZW5kYW5jaWVzOiBVSSBMYXlvdXQgMS4zLjAucmMzMC4xIG9yIGhpZ2hlcgorICoKKyAqIEBzdXBwb3J0OiBodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvanF1ZXJ5LXVpLWxheW91dAorICoKKyAqIERvY3M6IFsgdG8gY29tZSBdCisgKiBUaXBzOiBbIHRvIGNvbWUgXQorICovCisKKy8vIHRlbGwgTGF5b3V0IHRoYXQgdGhlIHN0YXRlIHBsdWdpbiBpcyBhdmFpbGFibGUKKyQubGF5b3V0LnBsdWdpbnMuYnV0dG9ucyA9IHRydWU7CisKKy8vCUFkZCBidXR0b25zIG9wdGlvbnMgdG8gbGF5b3V0LmRlZmF1bHRzCiskLmxheW91dC5kZWZhdWx0cy5hdXRvQmluZEN1c3RvbUJ1dHRvbnMgPSBmYWxzZTsKKy8vIFNwZWNpZnkgYXV0b0JpbmRDdXN0b21CdXR0b25zIGFzIGEgbGF5b3V0LW9wdGlvbiwgTk9UIGEgcGFuZS1vcHRpb24KKyQubGF5b3V0Lm9wdGlvbnNNYXAubGF5b3V0LnB1c2goImF1dG9CaW5kQ3VzdG9tQnV0dG9ucyIpOworCisvKgorICoJQnV0dG9uIG1ldGhvZHMKKyAqLworJC5sYXlvdXQuYnV0dG9ucyA9IHsKKworCS8qKgorCSogU2VhcmNoZXMgZm9yIC51aS1sYXlvdXQtYnV0dG9uLXh4eCBlbGVtZW50cyBhbmQgYXV0by1iaW5kcyB0aGVtIGFzIGxheW91dC1idXR0b25zCisJKgorCSogQHNlZSAgX2NyZWF0ZSgpCisJKgorCSogQHBhcmFtICB7T2JqZWN0fQkJaW5zdAlMYXlvdXQgSW5zdGFuY2Ugb2JqZWN0CisJKi8KKwlpbml0OiBmdW5jdGlvbiAoaW5zdCkgeworCQl2YXIgcHJlCQk9ICJ1aS1sYXlvdXQtYnV0dG9uLSIKKwkJLAlsYXlvdXQJPSBpbnN0Lm9wdGlvbnMubmFtZSB8fCAiIgorCQksCW5hbWU7CisJCSQuZWFjaCgidG9nZ2xlLG9wZW4sY2xvc2UscGluLHRvZ2dsZS1zbGlkZSxvcGVuLXNsaWRlIi5zcGxpdCgiLCIpLCBmdW5jdGlvbiAoaSwgYWN0aW9uKSB7CisJCQkkLmVhY2goJC5sYXlvdXQuY29uZmlnLmJvcmRlclBhbmVzLCBmdW5jdGlvbiAoaWksIHBhbmUpIHsKKwkJCQkkKCIuIitwcmUrYWN0aW9uKyItIitwYW5lKS5lYWNoKGZ1bmN0aW9uKCl7CisJCQkJCS8vIGlmIGJ1dHRvbiB3YXMgcHJldmlvdXNseSAnYm91bmQnLCBkYXRhLmxheW91dE5hbWUgd2FzIHNldCwgYnV0IGlzIGJsYW5rIGlmIGxheW91dCBoYXMgbm8gJ25hbWUnCisJCQkJCW5hbWUgPSAkKHRoaXMpLmRhdGEoImxheW91dE5hbWUiKSB8fCAkKHRoaXMpLmF0dHIoImxheW91dE5hbWUiKTsKKwkJCQkJaWYgKG5hbWUgPT0gdW5kZWZpbmVkIHx8IG5hbWUgPT09IGxheW91dCkKKwkJCQkJCWluc3QuYmluZEJ1dHRvbih0aGlzLCBhY3Rpb24sIHBhbmUpOworCQkJCX0pOworCQkJfSk7CisJCX0pOworCX0KKworCS8qKgorCSogSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHBhcmFtcyByZWNlaXZlZCBieSBhZGRCdXR0b24gdXRpbGl0aWVzCisJKgorCSogVHdvIGNsYXNzZXMgYXJlIGFkZGVkIHRvIHRoZSBlbGVtZW50LCBiYXNlZCBvbiB0aGUgYnV0dG9uQ2xhc3MuLi4KKwkqIFRoZSB0eXBlIG9mIGJ1dHRvbiBpcyBhcHBlbmRlZCB0byBjcmVhdGUgdGhlIDJuZCBjbGFzc05hbWU6CisJKiAgLSB1aS1sYXlvdXQtYnV0dG9uLXBpbgkJLy8gYWN0aW9uIGJ0bkNsYXNzCisJKiAgLSB1aS1sYXlvdXQtYnV0dG9uLXBpbi13ZXN0CS8vIGFjdGlvbiBidG5DbGFzcyArIHBhbmUKKwkqICAtIHVpLWxheW91dC1idXR0b24tdG9nZ2xlCisJKiAgLSB1aS1sYXlvdXQtYnV0dG9uLW9wZW4KKwkqICAtIHVpLWxheW91dC1idXR0b24tY2xvc2UKKwkqCisJKiBAcGFyYW0ge09iamVjdH0JCQlpbnN0CQlMYXlvdXQgSW5zdGFuY2Ugb2JqZWN0CisJKiBAcGFyYW0geyhzdHJpbmd8IU9iamVjdCl9CXNlbGVjdG9yCWpRdWVyeSBzZWxlY3RvciAob3IgZWxlbWVudCkgZm9yIGJ1dHRvbiwgZWc6ICIudWktbGF5b3V0LW5vcnRoIC50b2dnbGUtYnV0dG9uIgorCSogQHBhcmFtIHtzdHJpbmd9ICAgCQlwYW5lIAkJTmFtZSBvZiB0aGUgcGFuZSB0aGUgYnV0dG9uIGlzIGZvcjogJ25vcnRoJywgJ3NvdXRoJywgZXRjLgorCSoKKwkqIEByZXR1cm4ge0FycmF5LjxPYmplY3Q+fQlJZiBib3RoIHBhcmFtcyB2YWxpZCwgdGhlIGVsZW1lbnQgbWF0Y2hpbmcgJ3NlbGVjdG9yJyBpbiBhIGpRdWVyeSB3cmFwcGVyIC0gb3RoZXJ3aXNlIHJldHVybnMgbnVsbAorCSovCissCWdldDogZnVuY3Rpb24gKGluc3QsIHNlbGVjdG9yLCBwYW5lLCBhY3Rpb24pIHsKKwkJdmFyICRFCT0gJChzZWxlY3RvcikKKwkJLAlvCT0gaW5zdC5vcHRpb25zCisJCSwJZXJyCT0gby5lcnJvcnMuYWRkQnV0dG9uRXJyb3IKKwkJOworCQlpZiAoISRFLmxlbmd0aCkgeyAvLyBlbGVtZW50IG5vdCBmb3VuZAorCQkJJC5sYXlvdXQubXNnKGVyciArIiAiKyBvLmVycm9ycy5zZWxlY3RvciArIjogIisgc2VsZWN0b3IsIHRydWUpOworCQl9CisJCWVsc2UgaWYgKCQuaW5BcnJheShwYW5lLCAkLmxheW91dC5jb25maWcuYm9yZGVyUGFuZXMpIDwgMCkgeyAvLyBpbnZhbGlkICdwYW5lJyBzZXBlY2lmaWVkCisJCQkkLmxheW91dC5tc2coZXJyICsiICIrIG8uZXJyb3JzLnBhbmUgKyI6ICIrIHBhbmUsIHRydWUpOworCQkJJEUgPSAkKCIiKTsgIC8vIE5PIEJVVFRPTgorCQl9CisJCWVsc2UgeyAvLyBWQUxJRAorCQkJdmFyIGJ0biA9IG9bcGFuZV0uYnV0dG9uQ2xhc3MgKyItIisgYWN0aW9uOworCQkJJEUJLmFkZENsYXNzKCBidG4gKyIgIisgYnRuICsiLSIrIHBhbmUgKQorCQkJCS5kYXRhKCJsYXlvdXROYW1lIiwgby5uYW1lKTsgLy8gYWRkIGxheW91dCBpZGVudGlmaWVyIC0gZXZlbiBpZiBibGFuayEKKwkJfQorCQlyZXR1cm4gJEU7CisJfQorCisKKwkvKioKKwkqIE5FVyBzeW50YXggZm9yIGJpbmRpbmcgbGF5b3V0LWJ1dHRvbnMgLSB3aWxsIGV2ZW50dWFsbHkgcmVwbGFjZSBhZGRUb2dnbGUsIGFkZE9wZW4sIGV0Yy4KKwkqCisJKiBAcGFyYW0ge09iamVjdH0JCQlpbnN0CQlMYXlvdXQgSW5zdGFuY2Ugb2JqZWN0CisJKiBAcGFyYW0geyhzdHJpbmd8IU9iamVjdCl9CXNlbGVjdG9yCWpRdWVyeSBzZWxlY3RvciAob3IgZWxlbWVudCkgZm9yIGJ1dHRvbiwgZWc6ICIudWktbGF5b3V0LW5vcnRoIC50b2dnbGUtYnV0dG9uIgorCSogQHBhcmFtIHtzdHJpbmd9CQkJYWN0aW9uCisJKiBAcGFyYW0ge3N0cmluZ30JCQlwYW5lCisJKi8KKywJYmluZDogZnVuY3Rpb24gKGluc3QsIHNlbGVjdG9yLCBhY3Rpb24sIHBhbmUpIHsKKwkJdmFyIF8gPSAkLmxheW91dC5idXR0b25zOworCQlzd2l0Y2ggKGFjdGlvbi50b0xvd2VyQ2FzZSgpKSB7CisJCQljYXNlICJ0b2dnbGUiOgkJCV8uYWRkVG9nZ2xlCShpbnN0LCBzZWxlY3RvciwgcGFuZSk7IGJyZWFrOwkKKwkJCWNhc2UgIm9wZW4iOgkJCV8uYWRkT3BlbgkoaW5zdCwgc2VsZWN0b3IsIHBhbmUpOyBicmVhazsKKwkJCWNhc2UgImNsb3NlIjoJCQlfLmFkZENsb3NlCShpbnN0LCBzZWxlY3RvciwgcGFuZSk7IGJyZWFrOworCQkJY2FzZSAicGluIjoJCQkJXy5hZGRQaW4JKGluc3QsIHNlbGVjdG9yLCBwYW5lKTsgYnJlYWs7CisJCQljYXNlICJ0b2dnbGUtc2xpZGUiOglfLmFkZFRvZ2dsZQkoaW5zdCwgc2VsZWN0b3IsIHBhbmUsIHRydWUpOyBicmVhazsJCisJCQljYXNlICJvcGVuLXNsaWRlIjoJCV8uYWRkT3BlbgkoaW5zdCwgc2VsZWN0b3IsIHBhbmUsIHRydWUpOyBicmVhazsKKwkJfQorCQlyZXR1cm4gaW5zdDsKKwl9CisKKwkvKioKKwkqIEFkZCBhIGN1c3RvbSBUb2dnbGVyIGJ1dHRvbiBmb3IgYSBwYW5lCisJKgorCSogQHBhcmFtIHtPYmplY3R9CQkJaW5zdAkJTGF5b3V0IEluc3RhbmNlIG9iamVjdAorCSogQHBhcmFtIHsoc3RyaW5nfCFPYmplY3QpfQlzZWxlY3RvcglqUXVlcnkgc2VsZWN0b3IgKG9yIGVsZW1lbnQpIGZvciBidXR0b24sIGVnOiAiLnVpLWxheW91dC1ub3J0aCAudG9nZ2xlLWJ1dHRvbiIKKwkqIEBwYXJhbSB7c3RyaW5nfSAgCQkJcGFuZSAJCU5hbWUgb2YgdGhlIHBhbmUgdGhlIGJ1dHRvbiBpcyBmb3I6ICdub3J0aCcsICdzb3V0aCcsIGV0Yy4KKwkqIEBwYXJhbSB7Ym9vbGVhbj19CQkJc2xpZGUgCQl0cnVlID0gc2xpZGUtb3BlbiwgZmFsc2UgPSBwaW4tb3BlbgorCSovCissCWFkZFRvZ2dsZTogZnVuY3Rpb24gKGluc3QsIHNlbGVjdG9yLCBwYW5lLCBzbGlkZSkgeworCQkkLmxheW91dC5idXR0b25zLmdldChpbnN0LCBzZWxlY3RvciwgcGFuZSwgInRvZ2dsZSIpCisJCQkuY2xpY2soZnVuY3Rpb24oZXZ0KXsKKwkJCQlpbnN0LnRvZ2dsZShwYW5lLCAhIXNsaWRlKTsKKwkJCQlldnQuc3RvcFByb3BhZ2F0aW9uKCk7CisJCQl9KTsKKwkJcmV0dXJuIGluc3Q7CisJfQorCisJLyoqCisJKiBBZGQgYSBjdXN0b20gT3BlbiBidXR0b24gZm9yIGEgcGFuZQorCSoKKwkqIEBwYXJhbSB7T2JqZWN0fQkJCWluc3QJCUxheW91dCBJbnN0YW5jZSBvYmplY3QKKwkqIEBwYXJhbSB7KHN0cmluZ3whT2JqZWN0KX0Jc2VsZWN0b3IJalF1ZXJ5IHNlbGVjdG9yIChvciBlbGVtZW50KSBmb3IgYnV0dG9uLCBlZzogIi51aS1sYXlvdXQtbm9ydGggLnRvZ2dsZS1idXR0b24iCisJKiBAcGFyYW0ge3N0cmluZ30JCQlwYW5lIAkJTmFtZSBvZiB0aGUgcGFuZSB0aGUgYnV0dG9uIGlzIGZvcjogJ25vcnRoJywgJ3NvdXRoJywgZXRjLgorCSogQHBhcmFtIHtib29sZWFuPX0JCQlzbGlkZSAJCXRydWUgPSBzbGlkZS1vcGVuLCBmYWxzZSA9IHBpbi1vcGVuCisJKi8KKywJYWRkT3BlbjogZnVuY3Rpb24gKGluc3QsIHNlbGVjdG9yLCBwYW5lLCBzbGlkZSkgeworCQkkLmxheW91dC5idXR0b25zLmdldChpbnN0LCBzZWxlY3RvciwgcGFuZSwgIm9wZW4iKQorCQkJLmF0dHIoInRpdGxlIiwgaW5zdC5vcHRpb25zW3BhbmVdLnRpcHMuT3BlbikKKwkJCS5jbGljayhmdW5jdGlvbiAoZXZ0KSB7CisJCQkJaW5zdC5vcGVuKHBhbmUsICEhc2xpZGUpOworCQkJCWV2dC5zdG9wUHJvcGFnYXRpb24oKTsKKwkJCX0pOworCQlyZXR1cm4gaW5zdDsKKwl9CisKKwkvKioKKwkqIEFkZCBhIGN1c3RvbSBDbG9zZSBidXR0b24gZm9yIGEgcGFuZQorCSoKKwkqIEBwYXJhbSB7T2JqZWN0fQkJCWluc3QJCUxheW91dCBJbnN0YW5jZSBvYmplY3QKKwkqIEBwYXJhbSB7KHN0cmluZ3whT2JqZWN0KX0Jc2VsZWN0b3IJalF1ZXJ5IHNlbGVjdG9yIChvciBlbGVtZW50KSBmb3IgYnV0dG9uLCBlZzogIi51aS1sYXlvdXQtbm9ydGggLnRvZ2dsZS1idXR0b24iCisJKiBAcGFyYW0ge3N0cmluZ30gICAJCXBhbmUgCQlOYW1lIG9mIHRoZSBwYW5lIHRoZSBidXR0b24gaXMgZm9yOiAnbm9ydGgnLCAnc291dGgnLCBldGMuCisJKi8KKywJYWRkQ2xvc2U6IGZ1bmN0aW9uIChpbnN0LCBzZWxlY3RvciwgcGFuZSkgeworCQkkLmxheW91dC5idXR0b25zLmdldChpbnN0LCBzZWxlY3RvciwgcGFuZSwgImNsb3NlIikKKwkJCS5hdHRyKCJ0aXRsZSIsIGluc3Qub3B0aW9uc1twYW5lXS50aXBzLkNsb3NlKQorCQkJLmNsaWNrKGZ1bmN0aW9uIChldnQpIHsKKwkJCQlpbnN0LmNsb3NlKHBhbmUpOworCQkJCWV2dC5zdG9wUHJvcGFnYXRpb24oKTsKKwkJCX0pOworCQlyZXR1cm4gaW5zdDsKKwl9CisKKwkvKioKKwkqIEFkZCBhIGN1c3RvbSBQaW4gYnV0dG9uIGZvciBhIHBhbmUKKwkqCisJKiBGb3VyIGNsYXNzZXMgYXJlIGFkZGVkIHRvIHRoZSBlbGVtZW50LCBiYXNlZCBvbiB0aGUgcGFuZUNsYXNzIGZvciB0aGUgYXNzb2NpYXRlZCBwYW5lLi4uCisJKiBBc3N1bWluZyB0aGUgZGVmYXVsdCBwYW5lQ2xhc3MgYW5kIHRoZSBwaW4gaXMgJ3VwJywgdGhlc2UgY2xhc3NlcyBhcmUgYWRkZWQgZm9yIGEgd2VzdC1wYW5lIHBpbjoKKwkqICAtIHVpLWxheW91dC1wYW5lLXBpbgorCSogIC0gdWktbGF5b3V0LXBhbmUtd2VzdC1waW4KKwkqICAtIHVpLWxheW91dC1wYW5lLXBpbi11cAorCSogIC0gdWktbGF5b3V0LXBhbmUtd2VzdC1waW4tdXAKKwkqCisJKiBAcGFyYW0ge09iamVjdH0JCQlpbnN0CQlMYXlvdXQgSW5zdGFuY2Ugb2JqZWN0CisJKiBAcGFyYW0geyhzdHJpbmd8IU9iamVjdCl9CXNlbGVjdG9yCWpRdWVyeSBzZWxlY3RvciAob3IgZWxlbWVudCkgZm9yIGJ1dHRvbiwgZWc6ICIudWktbGF5b3V0LW5vcnRoIC50b2dnbGUtYnV0dG9uIgorCSogQHBhcmFtIHtzdHJpbmd9ICAgCQlwYW5lIAkJTmFtZSBvZiB0aGUgcGFuZSB0aGUgcGluIGlzIGZvcjogJ25vcnRoJywgJ3NvdXRoJywgZXRjLgorCSovCissCWFkZFBpbjogZnVuY3Rpb24gKGluc3QsIHNlbGVjdG9yLCBwYW5lKSB7CisJCXZhcglfCT0gJC5sYXlvdXQuYnV0dG9ucworCQksCSRFCT0gXy5nZXQoaW5zdCwgc2VsZWN0b3IsIHBhbmUsICJwaW4iKTsKKwkJaWYgKCRFLmxlbmd0aCkgeworCQkJdmFyIHMgPSBpbnN0LnN0YXRlW3BhbmVdOworCQkJJEUuY2xpY2soZnVuY3Rpb24gKGV2dCkgeworCQkJCV8uc2V0UGluU3RhdGUoaW5zdCwgJCh0aGlzKSwgcGFuZSwgKHMuaXNTbGlkaW5nIHx8IHMuaXNDbG9zZWQpKTsKKwkJCQlpZiAocy5pc1NsaWRpbmcgfHwgcy5pc0Nsb3NlZCkgaW5zdC5vcGVuKCBwYW5lICk7IC8vIGNoYW5nZSBmcm9tIHNsaWRpbmcgdG8gb3BlbgorCQkJCWVsc2UgaW5zdC5jbG9zZSggcGFuZSApOyAvLyBzbGlkZS1jbG9zZWQKKwkJCQlldnQuc3RvcFByb3BhZ2F0aW9uKCk7CisJCQl9KTsKKwkJCS8vIGFkZCB1cC9kb3duIHBpbiBhdHRyaWJ1dGVzIGFuZCBjbGFzc2VzCisJCQlfLnNldFBpblN0YXRlKGluc3QsICRFLCBwYW5lLCAoIXMuaXNDbG9zZWQgJiYgIXMuaXNTbGlkaW5nKSk7CisJCQkvLyBhZGQgdGhpcyBwaW4gdG8gdGhlIHBhbmUgZGF0YSBzbyB3ZSBjYW4gJ3N5bmMgaXQnIGF1dG9tYXRpY2FsbHkKKwkJCS8vIFBBTkUucGlucyBrZXkgaXMgYW4gYXJyYXkgc28gd2UgY2FuIHN0b3JlIG11bHRpcGxlIHBpbnMgZm9yIGVhY2ggcGFuZQorCQkJcy5waW5zLnB1c2goIHNlbGVjdG9yICk7IC8vIGp1c3Qgc2F2ZSB0aGUgc2VsZWN0b3Igc3RyaW5nCisJCX0KKwkJcmV0dXJuIGluc3Q7CisJfQorCisJLyoqCisJKiBDaGFuZ2UgdGhlIGNsYXNzIG9mIHRoZSBwaW4gYnV0dG9uIHRvIG1ha2UgaXQgbG9vayAndXAnIG9yICdkb3duJworCSoKKwkqIEBzZWUgIGFkZFBpbigpLCBzeW5jUGlucygpCisJKgorCSogQHBhcmFtIHtPYmplY3R9CQkJaW5zdAlMYXlvdXQgSW5zdGFuY2Ugb2JqZWN0CisJKiBAcGFyYW0ge0FycmF5LjxPYmplY3Q+fQkkUGluCVRoZSBwaW4tc3BhbiBlbGVtZW50IGluIGEgalF1ZXJ5IHdyYXBwZXIKKwkqIEBwYXJhbSB7c3RyaW5nfQkJCXBhbmUJVGhlc2UgYXJlIHRoZSBwYXJhbXMgcmV0dXJuZWQgdG8gY2FsbGJhY2tzIGJ5IGxheW91dCgpCisJKiBAcGFyYW0ge2Jvb2xlYW59CQkJZG9QaW4JdHJ1ZSA9IHNldCB0aGUgcGluICdkb3duJywgZmFsc2UgPSBzZXQgaXQgJ3VwJworCSovCissCXNldFBpblN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgJFBpbiwgcGFuZSwgZG9QaW4pIHsKKwkJdmFyIHVwZG93biA9ICRQaW4uYXR0cigicGluIik7CisJCWlmICh1cGRvd24gJiYgZG9QaW4gPT09ICh1cGRvd249PSJkb3duIikpIHJldHVybjsgLy8gYWxyZWFkeSBpbiBjb3JyZWN0IHN0YXRlCisJCXZhcgorCQkJbwkJPSBpbnN0Lm9wdGlvbnNbcGFuZV0KKwkJLAlwaW4JCT0gby5idXR0b25DbGFzcyArIi1waW4iCisJCSwJc2lkZQk9IHBpbiArIi0iKyBwYW5lCisJCSwJVVAJCT0gcGluICsiLXVwICIrCXNpZGUgKyItdXAiCisJCSwJRE4JCT0gcGluICsiLWRvd24gIitzaWRlICsiLWRvd24iCisJCTsKKwkJJFBpbgorCQkJLmF0dHIoInBpbiIsIGRvUGluID8gImRvd24iIDogInVwIikgLy8gbG9naWMKKwkJCS5hdHRyKCJ0aXRsZSIsIGRvUGluID8gby50aXBzLlVucGluIDogby50aXBzLlBpbikKKwkJCS5yZW1vdmVDbGFzcyggZG9QaW4gPyBVUCA6IEROICkgCisJCQkuYWRkQ2xhc3MoIGRvUGluID8gRE4gOiBVUCApIAorCQk7CisJfQorCisJLyoqCisJKiBJTlRFUk5BTCBmdW5jdGlvbiB0byBzeW5jICdwaW4gYnV0dG9ucycgd2hlbiBwYW5lIGlzIG9wZW5lZCBvciBjbG9zZWQKKwkqIFVucGlubmVkIG1lYW5zIHRoZSBwYW5lIGlzICdzbGlkaW5nJyAtIGllLCBvdmVyLXRvcCBvZiB0aGUgYWRqYWNlbnQgcGFuZXMKKwkqCisJKiBAc2VlICBvcGVuKCksIGNsb3NlKCkKKwkqCisJKiBAcGFyYW0ge09iamVjdH0JCQlpbnN0CUxheW91dCBJbnN0YW5jZSBvYmplY3QKKwkqIEBwYXJhbSB7c3RyaW5nfQlwYW5lCVRoZXNlIGFyZSB0aGUgcGFyYW1zIHJldHVybmVkIHRvIGNhbGxiYWNrcyBieSBsYXlvdXQoKQorCSogQHBhcmFtIHtib29sZWFufQlkb1BpbglUcnVlIG1lYW5zIHNldCB0aGUgcGluICdkb3duJywgRmFsc2UgbWVhbnMgJ3VwJworCSovCissCXN5bmNQaW5CdG5zOiBmdW5jdGlvbiAoaW5zdCwgcGFuZSwgZG9QaW4pIHsKKwkJLy8gUkVBTCBNRVRIT0QgSVMgX0lOU0lERV8gTEFZT1VUIC0gVEhJUyBJUyBIRVJFIEpVU1QgRk9SIFJFRkVSRU5DRQorCQkkLmVhY2goaW5zdC5zdGF0ZVtwYW5lXS5waW5zLCBmdW5jdGlvbiAoaSwgc2VsZWN0b3IpIHsKKwkJCSQubGF5b3V0LmJ1dHRvbnMuc2V0UGluU3RhdGUoaW5zdCwgJChzZWxlY3RvciksIHBhbmUsIGRvUGluKTsKKwkJfSk7CisJfQorCisKKywJX2xvYWQ6IGZ1bmN0aW9uIChpbnN0KSB7CisJCXZhcglfCT0gJC5sYXlvdXQuYnV0dG9uczsKKwkJLy8gQUREIEJ1dHRvbiBtZXRob2RzIHRvIExheW91dCBJbnN0YW5jZQorCQkvLyBOb3RlOiBzZWwgPSBqUXVlcnkgU2VsZWN0b3Igc3RyaW5nCisJCSQuZXh0ZW5kKCBpbnN0LCB7CisJCQliaW5kQnV0dG9uOgkJZnVuY3Rpb24gKHNlbCwgYWN0aW9uLCBwYW5lKSB7IHJldHVybiBfLmJpbmQoaW5zdCwgc2VsLCBhY3Rpb24sIHBhbmUpOyB9CisJCS8vCURFUFJFQ0FURUQgTUVUSE9EUworCQksCWFkZFRvZ2dsZUJ0bjoJZnVuY3Rpb24gKHNlbCwgcGFuZSwgc2xpZGUpIHsgcmV0dXJuIF8uYWRkVG9nZ2xlKGluc3QsIHNlbCwgcGFuZSwgc2xpZGUpOyB9CisJCSwJYWRkT3BlbkJ0bjoJCWZ1bmN0aW9uIChzZWwsIHBhbmUsIHNsaWRlKSB7IHJldHVybiBfLmFkZE9wZW4oaW5zdCwgc2VsLCBwYW5lLCBzbGlkZSk7IH0KKwkJLAlhZGRDbG9zZUJ0bjoJZnVuY3Rpb24gKHNlbCwgcGFuZSkgeyByZXR1cm4gXy5hZGRDbG9zZShpbnN0LCBzZWwsIHBhbmUpOyB9CisJCSwJYWRkUGluQnRuOgkJZnVuY3Rpb24gKHNlbCwgcGFuZSkgeyByZXR1cm4gXy5hZGRQaW4oaW5zdCwgc2VsLCBwYW5lKTsgfQorCQl9KTsKKworCQkvLyBpbml0IHN0YXRlIGFycmF5IHRvIGhvbGQgcGluLWJ1dHRvbnMKKwkJZm9yICh2YXIgaT0wOyBpPDQ7IGkrKykgeworCQkJdmFyIHBhbmUgPSAkLmxheW91dC5jb25maWcuYm9yZGVyUGFuZXNbaV07CisJCQlpbnN0LnN0YXRlW3BhbmVdLnBpbnMgPSBbXTsKKwkJfQorCisJCS8vIGF1dG8taW5pdCBidXR0b25zIG9uTG9hZCBpZiBvcHRpb24gaXMgZW5hYmxlZAorCQlpZiAoIGluc3Qub3B0aW9ucy5hdXRvQmluZEN1c3RvbUJ1dHRvbnMgKQorCQkJXy5pbml0KGluc3QpOworCX0KKworLAlfdW5sb2FkOiBmdW5jdGlvbiAoaW5zdCkgeworCQkvLyBUT0RPOiB1bmJpbmQgYWxsIGJ1dHRvbnM/Pz8KKwl9CisKK307CisKKy8vIGFkZCBpbml0aWFsaXphdGlvbiBtZXRob2QgdG8gTGF5b3V0J3Mgb25Mb2FkIGFycmF5IG9mIGZ1bmN0aW9ucworJC5sYXlvdXQub25Mb2FkLnB1c2goICAkLmxheW91dC5idXR0b25zLl9sb2FkICk7CisvLyQubGF5b3V0Lm9uVW5sb2FkLnB1c2goICQubGF5b3V0LmJ1dHRvbnMuX3VubG9hZCApOworCisKKworLyoqCisgKiBqcXVlcnkubGF5b3V0LmJyb3dzZXJab29tIDEuMAorICogJERhdGU6IDIwMTEtMTItMjkgMDg6MDA6MDAgKFRodSwgMjkgRGVjIDIwMTEpICQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgCisgKiAgIEtldmluIERhbG1hbiAoaHR0cDovL2FsbHByby5uZXQpCisgKgorICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwpCisgKiBhbmQgTUlUIChodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocCkgbGljZW5zZXMuCisgKgorICogQGRlcGVuZGFuY2llczogVUkgTGF5b3V0IDEuMy4wLnJjMzAuMSBvciBoaWdoZXIKKyAqCisgKiBAc3VwcG9ydDogaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2pxdWVyeS11aS1sYXlvdXQKKyAqCisgKiBAdG9kbzogRXh0ZW5kIGxvZ2ljIHRvIGhhbmRsZSBvdGhlciBwcm9ibGVtYXRpYyB6b29taW5nIGluIGJyb3dzZXJzCisgKiBAdG9kbzogQWRkIGhvdGtleS9tb3VzZXdoZWVsIGJpbmRpbmdzIHRvIF9pbnN0YW50bHlfIHJlc3BvbmQgdG8gdGhlc2Ugem9vbSBldmVudAorICovCisKKy8vIHRlbGwgTGF5b3V0IHRoYXQgdGhlIHBsdWdpbiBpcyBhdmFpbGFibGUKKyQubGF5b3V0LnBsdWdpbnMuYnJvd3Nlclpvb20gPSB0cnVlOworCiskLmxheW91dC5kZWZhdWx0cy5icm93c2VyWm9vbUNoZWNrSW50ZXJ2YWwgPSAxMDAwOworJC5sYXlvdXQub3B0aW9uc01hcC5sYXlvdXQucHVzaCgiYnJvd3Nlclpvb21DaGVja0ludGVydmFsIik7CisKKy8qCisgKglicm93c2VyWm9vbSBtZXRob2RzCisgKi8KKyQubGF5b3V0LmJyb3dzZXJab29tID0geworCisJX2luaXQ6IGZ1bmN0aW9uIChpbnN0KSB7CisJCS8vIGFib3J0IGlmIGJyb3dzZXIgZG9lcyBub3QgbmVlZCB0aGlzIGNoZWNrCisJCWlmICgkLmxheW91dC5icm93c2VyWm9vbS5yYXRpbygpICE9PSBmYWxzZSkKKwkJCSQubGF5b3V0LmJyb3dzZXJab29tLl9zZXRUaW1lcihpbnN0KTsKKwl9CisKKywJX3NldFRpbWVyOiBmdW5jdGlvbiAoaW5zdCkgeworCQkvLyBhYm9ydCBpZiBsYXlvdXQgZGVzdHJveWVkIG9yIGJyb3dzZXIgZG9lcyBub3QgbmVlZCB0aGlzIGNoZWNrCisJCWlmIChpbnN0LmRlc3Ryb3llZCkgcmV0dXJuOworCQl2YXIgbwk9IGluc3Qub3B0aW9ucworCQksCXMJPSBpbnN0LnN0YXRlCisJCS8vCWRvbid0IG5lZWQgY2hlY2sgaWYgaW5zdCBoYXMgcGFyZW50TGF5b3V0LCBidXQgY2hlY2sgb2NjYXNzaW9uYWxseSBpbiBjYXNlIHBhcmVudCBkZXN0cm95ZWQhCisJCS8vCU1JTklNVU0gMTAwbXMgaW50ZXJ2YWwsIGZvciBwZXJmb3JtYW5jZQorCQksCW1zCT0gaW5zdC5oYXNQYXJlbnRMYXlvdXQgPyAgNTAwMCA6IE1hdGgubWF4KCBvLmJyb3dzZXJab29tQ2hlY2tJbnRlcnZhbCwgMTAwICkKKwkJOworCQkvLyBzZXQgdGhlIHRpbWVyCisJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsKKwkJCWlmIChpbnN0LmRlc3Ryb3llZCB8fCAhby5yZXNpemVXaXRoV2luZG93KSByZXR1cm47CisJCQl2YXIgZCA9ICQubGF5b3V0LmJyb3dzZXJab29tLnJhdGlvKCk7CisJCQlpZiAoZCAhPT0gcy5icm93c2VyWm9vbSkgeworCQkJCXMuYnJvd3Nlclpvb20gPSBkOworCQkJCWluc3QucmVzaXplQWxsKCk7CisJCQl9CisJCQkvLyBzZXQgYSBORVcgdGltZW91dAorCQkJJC5sYXlvdXQuYnJvd3Nlclpvb20uX3NldFRpbWVyKGluc3QpOworCQl9CisJCSwJbXMgKTsKKwl9CisKKywJcmF0aW86IGZ1bmN0aW9uICgpIHsKKwkJdmFyIHcJPSB3aW5kb3cKKwkJLAlzCT0gc2NyZWVuCisJCSwJZAk9IGRvY3VtZW50CisJCSwJZEUJPSBkLmRvY3VtZW50RWxlbWVudCB8fCBkLmJvZHkKKwkJLAliCT0gJC5sYXlvdXQuYnJvd3NlcgorCQksCXYJPSBiLnZlcnNpb24KKwkJLAlyLCBzVywgY1cKKwkJOworCQkvLyB3ZSBjYW4gaWdub3JlIGFsbCBicm93c2VycyB0aGF0IGZpcmUgd2luZG93LnJlc2l6ZSBldmVudCBvblpvb20KKwkJaWYgKChiLm1zaWUgJiYgdiA+IDgpCisJCXx8CSFiLm1zaWUKKwkJKSByZXR1cm4gZmFsc2U7IC8vIGRvbid0IG5lZWQgdG8gdHJhY2sgem9vbQorCisJCWlmIChzLmRldmljZVhEUEkpCisJCQlyZXR1cm4gY2FsYyhzLmRldmljZVhEUEksIHMuc3lzdGVtWERQSSk7CisJCS8vIGV2ZXJ5dGhpbmcgYmVsb3cgaXMganVzdCBmb3IgZnV0dXJlIHJlZmVyZW5jZSEKKwkJaWYgKGIud2Via2l0ICYmIChyID0gZC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCkpCisJCQlyZXR1cm4gY2FsYygoci5sZWZ0IC0gci5yaWdodCksIGQuYm9keS5vZmZzZXRXaWR0aCk7CisJCWlmIChiLndlYmtpdCAmJiAoc1cgPSB3Lm91dGVyV2lkdGgpKQorCQkJcmV0dXJuIGNhbGMoc1csIHcuaW5uZXJXaWR0aCk7CisJCWlmICgoc1cgPSBzLndpZHRoKSAmJiAoY1cgPSBkRS5jbGllbnRXaWR0aCkpCisJCQlyZXR1cm4gY2FsYyhzVywgY1cpOworCQlyZXR1cm4gZmFsc2U7IC8vIG5vIG1hdGNoLCBzbyBjYW5ub3QgLSBvciBkb24ndCBuZWVkIHRvIC0gdHJhY2sgem9vbQorCisJCWZ1bmN0aW9uIGNhbGMgKHgseSkgeyByZXR1cm4gKHBhcnNlSW50KHgsMTApIC8gcGFyc2VJbnQoeSwxMCkgKiAxMDApLnRvRml4ZWQoKTsgfQorCX0KKworfTsKKy8vIGFkZCBpbml0aWFsaXphdGlvbiBtZXRob2QgdG8gTGF5b3V0J3Mgb25Mb2FkIGFycmF5IG9mIGZ1bmN0aW9ucworJC5sYXlvdXQub25SZWFkeS5wdXNoKCAkLmxheW91dC5icm93c2VyWm9vbS5faW5pdCApOworCisKKworfSkoIGpRdWVyeSApOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi9tb2Rlcm5penIuY3VzdG9tLmpzIGIvaGl2ZS9zY2FsYWRvY3MvbGliL21vZGVybml6ci5jdXN0b20uanMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDY4OGQ2MwotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9tb2Rlcm5penIuY3VzdG9tLmpzCkBAIC0wLDAgKzEsNCBAQAorLyogTW9kZXJuaXpyIDIuNS4zIChDdXN0b20gQnVpbGQpIHwgTUlUICYgQlNECisgKiBCdWlsZDogaHR0cDovL3d3dy5tb2Rlcm5penIuY29tL2Rvd25sb2FkLyMtaW5saW5lc3ZnCisgKi8KKzt3aW5kb3cuTW9kZXJuaXpyPWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiB1KGEpe2kuY3NzVGV4dD1hfWZ1bmN0aW9uIHYoYSxiKXtyZXR1cm4gdShwcmVmaXhlcy5qb2luKGErIjsiKSsoYnx8IiIpKX1mdW5jdGlvbiB3KGEsYil7cmV0dXJuIHR5cGVvZiBhPT09Yn1mdW5jdGlvbiB4KGEsYil7cmV0dXJuISF+KCIiK2EpLmluZGV4T2YoYil9ZnVuY3Rpb24geShhLGIsZCl7Zm9yKHZhciBlIGluIGEpe3ZhciBmPWJbYVtlXV07aWYoZiE9PWMpcmV0dXJuIGQ9PT0hMT9hW2VdOncoZiwiZnVuY3Rpb24iKT9mLmJpbmQoZHx8Yik6Zn1yZXR1cm4hMX12YXIgZD0iMi41LjMiLGU9e30sZj1iLmRvY3VtZW50RWxlbWVudCxnPSJtb2Rlcm5penIiLGg9Yi5jcmVhdGVFbGVtZW50KGcpLGk9aC5zdHlsZSxqLGs9e30udG9TdHJpbmcsbD17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9LG09e30sbj17fSxvPXt9LHA9W10scT1wLnNsaWNlLHIscz17fS5oYXNPd25Qcm9wZXJ0eSx0OyF3KHMsInVuZGVmaW5lZCIpJiYhdyhzLmNhbGwsInVuZGVmaW5lZCIpP3Q9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gcy5jYWxsKGEsYil9OnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYiBpbiBhJiZ3KGEuY29uc3RydWN0b3IucHJvdG90eXBlW2JdLCJ1bmRlZmluZWQiKX0sRnVuY3Rpb24ucHJvdG90eXBlLmJpbmR8fChGdW5jdGlvbi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihiKXt2YXIgYz10aGlzO2lmKHR5cGVvZiBjIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3I7dmFyIGQ9cS5jYWxsKGFyZ3VtZW50cywxKSxlPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIGUpe3ZhciBhPWZ1bmN0aW9uKCl7fTthLnByb3RvdHlwZT1jLnByb3RvdHlwZTt2YXIgZj1uZXcgYSxnPWMuYXBwbHkoZixkLmNvbmNhdChxLmNhbGwoYXJndW1lbnRzKSkpO3JldHVybiBPYmplY3QoZyk9PT1nP2c6Zn1yZXR1cm4gYy5hcHBseShiLGQuY29uY2F0KHEuY2FsbChhcmd1bWVudHMpKSl9O3JldHVybiBlfSksbS5pbmxpbmVzdmc9ZnVuY3Rpb24oKXt2YXIgYT1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBhLmlubmVySFRNTD0iPHN2Zy8+IiwoYS5maXJzdENoaWxkJiZhLmZpcnN0Q2hpbGQubmFtZXNwYWNlVVJJKT09bC5zdmd9O2Zvcih2YXIgeiBpbiBtKXQobSx6KSYmKHI9ei50b0xvd2VyQ2FzZSgpLGVbcl09bVt6XSgpLHAucHVzaCgoZVtyXT8iIjoibm8tIikrcikpO3JldHVybiB1KCIiKSxoPWo9bnVsbCxlLl92ZXJzaW9uPWQsZX0odGhpcyx0aGlzLmRvY3VtZW50KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvbmF2aWdhdGlvbi1saS1hLnBuZyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9uYXZpZ2F0aW9uLWxpLWEucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjliMzIyODgKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvbmF2aWdhdGlvbi1saS1hLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvbmF2aWdhdGlvbi1saS5wbmcgYi9oaXZlL3NjYWxhZG9jcy9saWIvbmF2aWdhdGlvbi1saS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmQwYWQwNgotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9uYXZpZ2F0aW9uLWxpLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvb2JqZWN0LnBuZyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9vYmplY3QucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFkMzEyNzkKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvb2JqZWN0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvb2JqZWN0X2JpZy5wbmcgYi9oaXZlL3NjYWxhZG9jcy9saWIvb2JqZWN0X2JpZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjdmZmNhNwotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9vYmplY3RfYmlnLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvb2JqZWN0X2RpYWdyYW0ucG5nIGIvaGl2ZS9zY2FsYWRvY3MvbGliL29iamVjdF9kaWFncmFtLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZTlmMmY3Ci0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL29iamVjdF9kaWFncmFtLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvb2JqZWN0X3RvX2NsYXNzX2JpZy5wbmcgYi9oaXZlL3NjYWxhZG9jcy9saWIvb2JqZWN0X3RvX2NsYXNzX2JpZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNzUwMjk0MgotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9vYmplY3RfdG9fY2xhc3NfYmlnLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvb2JqZWN0X3RvX3RyYWl0X2JpZy5wbmcgYi9oaXZlL3NjYWxhZG9jcy9saWIvb2JqZWN0X3RvX3RyYWl0X2JpZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzc3N2JmYwotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9vYmplY3RfdG9fdHJhaXRfYmlnLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvb2JqZWN0X3RvX3R5cGVfYmlnLnBuZyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9vYmplY3RfdG9fdHlwZV9iaWcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc1MDI5NDIKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvb2JqZWN0X3RvX3R5cGVfYmlnLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvb3duZGVyYmcyLmdpZiBiL2hpdmUvc2NhbGFkb2NzL2xpYi9vd25kZXJiZzIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg0OGRkNTkKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvb3duZGVyYmcyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvb3duZXJiZy5naWYgYi9oaXZlL3NjYWxhZG9jcy9saWIvb3duZXJiZy5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMzRhMDQyNAotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9vd25lcmJnLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvb3duZXJiZzIuZ2lmIGIvaGl2ZS9zY2FsYWRvY3MvbGliL293bmVyYmcyLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yZWQzM2IwCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL293bmVyYmcyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvcGFja2FnZS5wbmcgYi9oaXZlL3NjYWxhZG9jcy9saWIvcGFja2FnZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmVhMTdhYwotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9wYWNrYWdlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvcGFja2FnZV9iaWcucG5nIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3BhY2thZ2VfYmlnLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MjlhYTkzCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3BhY2thZ2VfYmlnLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvcGFja2FnZXNiZy5naWYgYi9oaXZlL3NjYWxhZG9jcy9saWIvcGFja2FnZXNiZy5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDBjMzM3OAotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9wYWNrYWdlc2JnLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvcmVmLWluZGV4LmNzcyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9yZWYtaW5kZXguY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdkNjRiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvcmVmLWluZGV4LmNzcwpAQCAtMCwwICsxLDMwIEBACitib2R5IHsKKwlmb250LXNpemU6IDEwcHQ7CisJZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOworfQorCithIHsKKwljb2xvcjojMzE1NDc5OworfQorCisubGV0dGVycyB7CisgIHdpZHRoOjEwMCU7CisgIHRleHQtYWxpZ246Y2VudGVyOworICBtYXJnaW46MC42ZW07CisgIHBhZGRpbmc6MC4xZW07CisgIGJvcmRlci1ib3R0b206MXB4IHNvbGlkIGdyYXk7Cit9CisKKy5lbnRyeSB7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBsaWdodGdyYXk7CisgIHBhZGRpbmc6IDVweCAwIDhweDsKK30KKworLm5hbWUgeworCS8qIGJhY2tncm91bmQtY29sb3I6I0U1RTVFNTsgKi8KK30KKworLm9jY3VycmVuY2VzIHsKKyAgbWFyZ2luLWxlZnQ6IDFlbTsKKyAgbWFyZ2luLXRvcDogNXB4OwkKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvcmVtb3ZlLnBuZyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9yZW1vdmUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2MjVmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvcmVtb3ZlLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvc2NoZWR1bGVyLmpzIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3NjaGVkdWxlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi40NDE3ZjViCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3NjaGVkdWxlci5qcwpAQCAtMCwwICsxLDcxIEBACisvLyDCqSAyMDEwIEVQRkwvTEFNUAorLy8gY29kZSBieSBHaWxsZXMgRHVib2NoZXQKKworZnVuY3Rpb24gU2NoZWR1bGVyKCkgeworICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzOworICAgIHZhciByZXNvbHV0aW9uID0gMDsKKyAgICB0aGlzLnRpbWVvdXQgPSB1bmRlZmluZWQ7CisgICAgdGhpcy5xdWV1ZXMgPSBuZXcgQXJyYXkoMCk7IC8vIGFuIGFycmF5IG9mIHdvcmsgcGFjYWtnZXMgaW5kZXhlZCBieSBpbmRleCBpbiB0aGUgbGFiZWxzIHRhYmxlLgorICAgIHRoaXMubGFiZWxzID0gbmV3IEFycmF5KDApOyAvLyBhbiBpbmRleGVkIGFycmF5IG9mIGxhYmVscyBpbmRleGVkIGJ5IHByaW9yaXR5LiBUaGlzIHNob3VsZCBiZSBzaG9ydC4KKyAgICB0aGlzLmxhYmVsID0gZnVuY3Rpb24obmFtZSwgcHJpb3JpdHkpIHsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy5wcmlvcml0eSA9IHByaW9yaXR5OworICAgIH0KKyAgICB0aGlzLndvcmsgPSBmdW5jdGlvbihmbiwgc2VsZiwgYXJncykgeworICAgICAgICB0aGlzLmZuID0gZm47CisgICAgICAgIHRoaXMuc2VsZiA9IHNlbGY7CisgICAgICAgIHRoaXMuYXJncyA9IGFyZ3M7CisgICAgfQorICAgIHRoaXMuYWRkTGFiZWwgPSBmdW5jdGlvbihuYW1lLCBwcmlvcml0eSkgeworICAgICAgICB2YXIgaWR4ID0gMDsKKyAgICAgICAgd2hpbGUgKGlkeCA8IHNjaGVkdWxlci5xdWV1ZXMubGVuZ3RoICYmIHNjaGVkdWxlci5sYWJlbHNbaWR4XS5wcmlvcml0eSA8PSBwcmlvcml0eSkgeyBpZHggPSBpZHggKyAxOyB9CisgICAgICAgIHNjaGVkdWxlci5sYWJlbHMuc3BsaWNlKGlkeCwgMCwgbmV3IHNjaGVkdWxlci5sYWJlbChuYW1lLCBwcmlvcml0eSkpOworICAgICAgICBzY2hlZHVsZXIucXVldWVzLnNwbGljZShpZHgsIDAsIG5ldyBBcnJheSgwKSk7CisgICAgfQorICAgIHRoaXMuY2xlYXJMYWJlbCA9IGZ1bmN0aW9uKG5hbWUpIHsKKyAgICAgICAgdmFyIGlkeCA9IDA7CisgICAgICAgIHdoaWxlIChpZHggPCBzY2hlZHVsZXIucXVldWVzLmxlbmd0aCAmJiBzY2hlZHVsZXIubGFiZWxzW2lkeF0ubmFtZSAhPSBuYW1lKSB7IGlkeCA9IGlkeCArIDE7IH0KKyAgICAgICAgaWYgKGlkeCA8IHNjaGVkdWxlci5xdWV1ZXMubGVuZ3RoICYmIHNjaGVkdWxlci5sYWJlbHNbaV0ubmFtZSA9PSBuYW1lKSB7CisgICAgICAgICAgICBzY2hlZHVsZXIubGFiZWxzLnNwbGljZShpZHgsIDEpOworICAgICAgICAgICAgc2NoZWR1bGVyLnF1ZXVlcy5zcGxpY2UoaWR4LCAxKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB0aGlzLm5leHRXb3JrID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBmbiA9IHVuZGVmaW5lZDsKKyAgICAgICAgdmFyIGlkeCA9IDA7CisgICAgICAgIHdoaWxlIChpZHggPCBzY2hlZHVsZXIucXVldWVzLmxlbmd0aCAmJiBzY2hlZHVsZXIucXVldWVzW2lkeF0ubGVuZ3RoID09IDApIHsgaWR4ID0gaWR4ICsgMTsgfQorICAgICAgICBpZiAoaWR4IDwgc2NoZWR1bGVyLnF1ZXVlcy5sZW5ndGggJiYgc2NoZWR1bGVyLnF1ZXVlc1tpZHhdLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHZhciBmbiA9IHNjaGVkdWxlci5xdWV1ZXNbaWR4XS5zaGlmdCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmbjsKKyAgICB9CisgICAgdGhpcy5hZGQgPSBmdW5jdGlvbihsYWJlbE5hbWUsIGZuLCBzZWxmLCBhcmdzKSB7CisgICAgICAgIHZhciBkb1dvcmsgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHNjaGVkdWxlci50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgd29yayA9IHNjaGVkdWxlci5uZXh0V29yaygpOworICAgICAgICAgICAgICAgIGlmICh3b3JrICE9IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAod29yay5hcmdzID09IHVuZGVmaW5lZCkgeyB3b3JrLmFyZ3MgPSBuZXcgQXJyYXkoMCk7IH0KKyAgICAgICAgICAgICAgICAgICAgd29yay5mbi5hcHBseSh3b3JrLnNlbGYsIHdvcmsuYXJncyk7CisgICAgICAgICAgICAgICAgICAgIGRvV29yaygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgc2NoZWR1bGVyLnRpbWVvdXQgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwgcmVzb2x1dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGlkeCA9IDA7CisgICAgICAgIHdoaWxlIChpZHggPCBzY2hlZHVsZXIubGFiZWxzLmxlbmd0aCAmJiBzY2hlZHVsZXIubGFiZWxzW2lkeF0ubmFtZSAhPSBsYWJlbE5hbWUpIHsgaWR4ID0gaWR4ICsgMTsgfQorICAgICAgICBpZiAoaWR4IDwgc2NoZWR1bGVyLnF1ZXVlcy5sZW5ndGggJiYgc2NoZWR1bGVyLmxhYmVsc1tpZHhdLm5hbWUgPT0gbGFiZWxOYW1lKSB7CisgICAgICAgICAgICBzY2hlZHVsZXIucXVldWVzW2lkeF0ucHVzaChuZXcgc2NoZWR1bGVyLndvcmsoZm4sIHNlbGYsIGFyZ3MpKTsKKyAgICAgICAgICAgIGlmIChzY2hlZHVsZXIudGltZW91dCA9PSB1bmRlZmluZWQpIGRvV29yaygpOworICAgICAgICB9CisgICAgICAgIGVsc2UgdGhyb3coInF1ZXVlIGZvciBhZGQgaXMgbm9uIGV4aXN0YW50Iik7CisgICAgfQorICAgIHRoaXMuY2xlYXIgPSBmdW5jdGlvbihsYWJlbE5hbWUpIHsKKyAgICAgICAgdmFyIGlkeCA9IDA7CisgICAgICAgIHdoaWxlIChpZHggPCBzY2hlZHVsZXIubGFiZWxzLmxlbmd0aCAmJiBzY2hlZHVsZXIubGFiZWxzW2lkeF0ubmFtZSAhPSBsYWJlbE5hbWUpIHsgaWR4ID0gaWR4ICsgMTsgfQorICAgICAgICBpZiAoaWR4IDwgc2NoZWR1bGVyLnF1ZXVlcy5sZW5ndGggJiYgc2NoZWR1bGVyLmxhYmVsc1tpZHhdLm5hbWUgPT0gbGFiZWxOYW1lKSB7CisgICAgICAgICAgICBzY2hlZHVsZXIucXVldWVzW2lkeF0gPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgfQorICAgIH0KK307CmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvc2VsZWN0ZWQtaW1wbGljaXRzLnBuZyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9zZWxlY3RlZC1pbXBsaWNpdHMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJjMjllZmIKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvc2VsZWN0ZWQtaW1wbGljaXRzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvc2VsZWN0ZWQtcmlnaHQtaW1wbGljaXRzLnBuZyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9zZWxlY3RlZC1yaWdodC1pbXBsaWNpdHMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgzMTNmNDkKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvc2VsZWN0ZWQtcmlnaHQtaW1wbGljaXRzLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvc2VsZWN0ZWQtcmlnaHQucG5nIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3NlbGVjdGVkLXJpZ2h0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wNGVkYTJmCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3NlbGVjdGVkLXJpZ2h0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvc2VsZWN0ZWQucG5nIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3NlbGVjdGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jODk3NjUyCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3NlbGVjdGVkLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvc2VsZWN0ZWQyLXJpZ2h0LnBuZyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9zZWxlY3RlZDItcmlnaHQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmJmOTg0ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvc2VsZWN0ZWQyLXJpZ2h0LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvc2VsZWN0ZWQyLnBuZyBiL2hpdmUvc2NhbGFkb2NzL2xpYi9zZWxlY3RlZDIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE3OTBiYjEKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvc2VsZWN0ZWQyLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvc2lnbmF0dXJlYmcuZ2lmIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3NpZ25hdHVyZWJnLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNmFjNDQxCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3NpZ25hdHVyZWJnLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvc2lnbmF0dXJlYmcyLmdpZiBiL2hpdmUvc2NhbGFkb2NzL2xpYi9zaWduYXR1cmViZzIuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjlhYWU1YmEKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvc2lnbmF0dXJlYmcyLmdpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvdGVtcGxhdGUuY3NzIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3RlbXBsYXRlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMDY2MDI3Ci0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3RlbXBsYXRlLmNzcwpAQCAtMCwwICsxLDg0OCBAQAorLyogUmVzZXQgKi8KKworaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBvYmplY3QsIGlmcmFtZSwKK2gxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIHAsIGJsb2NrcXVvdGUsIHByZSwKK2EsIGFiYnIsIGFjcm9ueW0sIGFkZHJlc3MsIGNvZGUsIHByZSwKK2RlbCwgZGZuLCBlbSwgaW1nLCBxLCBkbCwgZHQsIGRkLCBvbCwgdWwsIGxpLAorZmllbGRzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsIGlucHV0LAordGFibGUsIGNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGQgeworICBtYXJnaW46IDA7CisgIHBhZGRpbmc6IDA7CisgIGJvcmRlcjogMDsKKyAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CisgIGZvbnQtc3R5bGU6IGluaGVyaXQ7CisgIGZvbnQtc2l6ZTogMTAwJTsKKyAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CisgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKK30KKwordGFibGUgeyBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOyBib3JkZXItc3BhY2luZzogMDsgfQorY2FwdGlvbiwgdGgsIHRkIHsgdGV4dC1hbGlnbjogbGVmdDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgfQordGFibGUsIHRkLCB0aCB7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0KKworYmxvY2txdW90ZTpiZWZvcmUsIGJsb2NrcXVvdGU6YWZ0ZXIsIHE6YmVmb3JlLCBxOmFmdGVyIHsgY29udGVudDogIiI7IH0KK2Jsb2NrcXVvdGUsIHEgeyBxdW90ZXM6IG5vbmU7IH0KKworYSBpbWcgeyBib3JkZXI6IG5vbmU7IH0KKworaW5wdXQgeyBib3JkZXItd2lkdGg6IDBweDsgfQorCisvKiBQYWdlICovCisKK2JvZHkgeworICBmb250LWZhbWlseTogQXJpYWwsIHNhbnMtc2VyaWY7CisgIGZvbnQtc2l6ZTogMTBwdDsKK30KKworI2Zvb3RlciB7CisgIGZvbnQtc2l6ZTogOXB0OworICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgIGNvbG9yOiAjODU4NDg0OworICBib3R0b206IDA7CisgIHdpZHRoOiAxMDAlOworICBoZWlnaHQ6IDIwcHg7Cit9CisKK2FbaHJlZl0geworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgY29sb3I6ICMzMTU0Nzk7Cit9CisKK2FbaHJlZl06aG92ZXIgeworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKyN0eXBlcyBvbCBsaSA+IHAgeworICBtYXJnaW4tdG9wOiA1cHg7Cit9CisKKyN0eXBlcyBvbCBsaTpsYXN0LWNoaWxkIHsKKyAgbWFyZ2luLWJvdHRvbTogNXB4OworfQorCisvKgorI2RlZmluaXRpb24geworICBwYWRkaW5nOiA2cHggMCA2cHggNnB4OworICBtaW4taGVpZ2h0OiA1OXB4OworICBjb2xvcjogd2hpdGU7Cit9CisqLworCisjZGVmaW5pdGlvbiB7CisgIGRpc3BsYXk6IGJsb2NrLWlubGluZTsKKyAgcGFkZGluZzogNXB4IDBweDsKKyAgaGVpZ2h0OiA2MXB4OworfQorCisjZGVmaW5pdGlvbiA+IGltZyB7CisgIGZsb2F0OiBsZWZ0OworICBwYWRkaW5nLXJpZ2h0OiA2cHg7CisgIHBhZGRpbmctbGVmdDogNXB4OworfQorCisjZGVmaW5pdGlvbiA+IGEgPiBpbWcgeworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZy1yaWdodDogNnB4OworICBwYWRkaW5nLWxlZnQ6IDVweDsKK30KKworI2RlZmluaXRpb24gcCArIGgxIHsKKyAgbWFyZ2luLXRvcDogM3B4OworfQorCisjZGVmaW5pdGlvbiA+IGgxIHsKKy8qICBwYWRkaW5nOiAxMnB4IDAgMTJweCA2cHg7Ki8KKyAgY29sb3I6IHdoaXRlOworICB0ZXh0LXNoYWRvdzogM3B4IGJsYWNrOworICB0ZXh0LXNoYWRvdzogYmxhY2sgMHB4IDJweCAwcHg7CisgIGZvbnQtc2l6ZTogMjRwdDsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBvdmVyZmxvdzogaGlkZGVuOworICBtYXJnaW4tdG9wOiAxMHB4OworfQorCisjZGVmaW5pdGlvbiBoMSA+IGEgeworICBjb2xvcjogI2ZmZmZmZjsKKyAgZm9udC1zaXplOiAyNHB0OworICB0ZXh0LXNoYWRvdzogYmxhY2sgMHB4IDJweCAwcHg7CisvKiAgdGV4dC1zaGFkb3c6IGJsYWNrIDBweCAwcHggMHB4OyovCit0ZXh0LWRlY29yYXRpb246IG5vbmU7Cit9CisKKyNkZWZpbml0aW9uICNvd25lciB7CisgIGNvbG9yOiAjZmZmZmZmOworICBtYXJnaW4tdG9wOiA0cHg7CisgIGZvbnQtc2l6ZTogMTBwdDsKKyAgb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworI2RlZmluaXRpb24gI293bmVyID4gYSB7CisgIGNvbG9yOiAjZmZmZmZmOworfQorCisjZGVmaW5pdGlvbiAjb3duZXIgPiBhOmhvdmVyIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisjc2lnbmF0dXJlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ3NpZ25hdHVyZWJnMi5naWYnKTsKKyAgYmFja2dyb3VuZC1jb2xvcjogI2Q3ZDdkNzsKKyAgbWluLWhlaWdodDogMThweDsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7CisgIGZvbnQtc2l6ZTogMTEuNXB0OworLyogIG1hcmdpbi1ib3R0b206IDEwcHg7Ki8KKyAgcGFkZGluZzogOHB4OworfQorCisjc2lnbmF0dXJlID4gc3Bhbi5tb2RpZmllcl9raW5kIHsKKyAgZGlzcGxheTogaW5saW5lOworICBmbG9hdDogbGVmdDsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgd2lkdGg6IGF1dG87CisgIHBvc2l0aW9uOiBzdGF0aWM7CisgIHRleHQtc2hhZG93OiAycHggd2hpdGU7CisgIHRleHQtc2hhZG93OiB3aGl0ZSAwcHggMXB4IDBweDsKK30KKworI3NpZ25hdHVyZSA+IHNwYW4uc3ltYm9sIHsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgZGlzcGxheTogaW5saW5lOworICBwYWRkaW5nLWxlZnQ6IDAuN2VtOworICB0ZXh0LXNoYWRvdzogMnB4IHdoaXRlOworICB0ZXh0LXNoYWRvdzogd2hpdGUgMHB4IDFweCAwcHg7Cit9CisKKy8qIExpbmVhciBzdXBlciB0eXBlcyBhbmQga25vd24gc3ViY2xhc3NlcyAqLworLmhpZGRlbkNvbnRlbnQgeworICBkaXNwbGF5OiBub25lOworfQorCisudG9nZ2xlQ29udGFpbmVyIC50b2dnbGUgeworICBjdXJzb3I6IHBvaW50ZXI7CisgIHBhZGRpbmctbGVmdDogMTVweDsKKyAgYmFja2dyb3VuZDogdXJsKCJhcnJvdy1yaWdodC5wbmciKSBuby1yZXBlYXQgMCAzcHggdHJhbnNwYXJlbnQ7Cit9CisKKy50b2dnbGVDb250YWluZXIgLnRvZ2dsZS5vcGVuIHsKKyAgYmFja2dyb3VuZDogdXJsKCJhcnJvdy1kb3duLnBuZyIpIG5vLXJlcGVhdCAwIDNweCB0cmFuc3BhcmVudDsKK30KKworLnRvZ2dsZUNvbnRhaW5lciAuaGlkZGVuQ29udGVudCB7CisgIG1hcmdpbi10b3A6IDVweDsKK30KKworLnZhbHVlICNkZWZpbml0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzJDNDc1QzsgLyogYmx1ZSAqLworICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnZGVmYmctYmx1ZS5naWYnKTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Cit9CisKKy50eXBlICNkZWZpbml0aW9uIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzMxNjU1NTsgLyogZ3JlZW4gKi8KKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2RlZmJnLWdyZWVuLmdpZicpOworICBiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDsKK30KKworI3RlbXBsYXRlIHsKKyAgbWFyZ2luLWJvdHRvbTogNTBweDsKK30KKworaDMgeworICBjb2xvcjogd2hpdGU7CisgIHBhZGRpbmc6IDVweCAxMHB4OworICBmb250LXNpemU6IDEycHQ7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICB0ZXh0LXNoYWRvdzogYmxhY2sgMXB4IDFweCAwcHg7Cit9CisKK2RsLmF0dHJpYnV0ZXMgPiBkdCB7CisgIGRpc3BsYXk6IGJsb2NrOworICBmbG9hdDogbGVmdDsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCitkbC5hdHRyaWJ1dGVzID4gZHQuaW1wbGljaXQgeworICBmb250LXdlaWdodDogYm9sZDsKKyAgY29sb3I6IGRhcmtncmVlbjsKK30KKworZGwuYXR0cmlidXRlcyA+IGRkIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIHBhZGRpbmctbGVmdDogMTBlbTsKKyAgbWFyZ2luLWJvdHRvbTogNXB4OworfQorCisjdGVtcGxhdGUgLnZhbHVlcyA+IGgzIHsKKyAgYmFja2dyb3VuZDogIzJDNDc1QyB1cmwoInZhbHVlbWVtYmVyc2JnLmdpZiIpIHJlcGVhdC14IGJvdHRvbSBsZWZ0OyAgLyogZ3JheWlzaCBibHVlICovCisgIGhlaWdodDogMThweDsKK30KKworI3ZhbHVlcyBvbCBsaTpsYXN0LWNoaWxkIHsKKyAgbWFyZ2luLWJvdHRvbTogNXB4OworfQorCisjdGVtcGxhdGUgLnR5cGVzID4gaDMgeworICBiYWNrZ3JvdW5kOiAjMzE2NTU1IHVybCgidHlwZWJnLmdpZiIpIHJlcGVhdC14IGJvdHRvbSBsZWZ0OyAgLyogZ3JlZW4gKi8KKyAgaGVpZ2h0OiAxOHB4OworfQorCisjY29uc3RydWN0b3JzID4gaDMgeworICBiYWNrZ3JvdW5kOiAjNGY1MDRmIHVybCgiY29uc3RydWN0b3JzYmcuZ2lmIikgcmVwZWF0LXggYm90dG9tIGxlZnQ7IC8qIGdyYXkgKi8KKyAgaGVpZ2h0OiAxOHB4OworfQorCisjaW5oZXJpdGVkTWVtYmVycyA+IGRpdi5wYXJlbnQgPiBoMyB7CisgIGJhY2tncm91bmQ6ICNkYWRhZGEgdXJsKCJjb25zdHJ1Y3RvcnNiZy5naWYiKSByZXBlYXQteCBib3R0b20gbGVmdDsgLyogZ3JheSAqLworICBoZWlnaHQ6IDE3cHg7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgZm9udC1zaXplOiAxMnB0OworfQorCisjaW5oZXJpdGVkTWVtYmVycyA+IGRpdi5wYXJlbnQgPiBoMyAqIHsKKyAgY29sb3I6IHdoaXRlOworfQorCisjaW5oZXJpdGVkTWVtYmVycyA+IGRpdi5jb252ZXJzaW9uID4gaDMgeworICBiYWNrZ3JvdW5kOiAjZGFkYWRhIHVybCgiY29udmVyc2lvbmJnLmdpZiIpIHJlcGVhdC14IGJvdHRvbSBsZWZ0OyAvKiBncmF5ICovCisgIGhlaWdodDogMTdweDsKKyAgZm9udC1zdHlsZTogaXRhbGljOworICBmb250LXNpemU6IDEycHQ7Cit9CisKKyNpbmhlcml0ZWRNZW1iZXJzID4gZGl2LmNvbnZlcnNpb24gPiBoMyAqIHsKKyAgY29sb3I6IHdoaXRlOworfQorCisjZ3JvdXBlZE1lbWJlcnMgPiBkaXYuZ3JvdXAgPiBoMyB7CisgIGJhY2tncm91bmQ6ICNkYWRhZGEgdXJsKCJ0eXBlYmcuZ2lmIikgcmVwZWF0LXggYm90dG9tIGxlZnQ7IC8qIGdyZWVuICovCisgIGhlaWdodDogMTdweDsKKyAgZm9udC1zaXplOiAxMnB0OworfQorCisjZ3JvdXBlZE1lbWJlcnMgPiBkaXYuZ3JvdXAgPiBoMyAqIHsKKyAgY29sb3I6IHdoaXRlOworfQorCisKKy8qIE1lbWJlciBjZWxscyAqLworCitkaXYubWVtYmVycyA+IG9sIHsKKyAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgIGxpc3Qtc3R5bGU6IG5vbmUKK30KKworZGl2Lm1lbWJlcnMgPiBvbCA+IGxpIHsKKyAgZGlzcGxheTogYmxvY2s7CisgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBncmF5OworICBwYWRkaW5nOiA1cHggMCA2cHg7CisgIG1hcmdpbjogMCAxMHB4OworICBwb3NpdGlvbjogcmVsYXRpdmU7Cit9CisKK2Rpdi5tZW1iZXJzID4gb2wgPiBsaTpsYXN0LWNoaWxkIHsKKyAgYm9yZGVyOiAwOworICBwYWRkaW5nOiA1cHggMCA1cHg7Cit9CisKKy8qIE1lbWJlciBzaWduYXR1cmVzICovCisKKyN0b29sdGlwIHsKKyAgYmFja2dyb3VuZDogI0VGRDVCNTsKKyAgYm9yZGVyOiAxcHggc29saWQgZ3JheTsKKyAgY29sb3I6IGJsYWNrOworICBkaXNwbGF5OiBub25lOworICBwYWRkaW5nOiA1cHg7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKK30KKworLnNpZ25hdHVyZSB7CisgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgIGZvbnQtc2l6ZTogMTBwdDsKKyAgbGluZS1oZWlnaHQ6IDE4cHg7CisgIGNsZWFyOiBib3RoOworICBkaXNwbGF5OiBibG9jazsKKyAgdGV4dC1zaGFkb3c6IDJweCB3aGl0ZTsKKyAgdGV4dC1zaGFkb3c6IHdoaXRlIDBweCAxcHggMHB4OworfQorCisuc2lnbmF0dXJlIC5tb2RpZmllcl9raW5kIHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICB0ZXh0LWFsaWduOiByaWdodDsKKyAgd2lkdGg6IDE0ZW07Cit9CisKKy5zaWduYXR1cmUgPiBhID4gLnN5bWJvbCA+IC5uYW1lIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKKy5zaWduYXR1cmUgPiBhOmhvdmVyID4gLnN5bWJvbCA+IC5uYW1lIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworfQorCisuc2lnbmF0dXJlID4gYSB7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKK30KKworLnNpZ25hdHVyZSA+IC5zeW1ib2wgeworICBkaXNwbGF5OiBibG9jazsKKyAgcGFkZGluZy1sZWZ0OiAxNC43ZW07Cit9CisKKy5zaWduYXR1cmUgLm5hbWUgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisuc2lnbmF0dXJlIC5zeW1ib2wgPiAuaW1wbGljaXQgeworICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKKyAgY29sb3I6IGRhcmtncmVlbjsKK30KKworLnNpZ25hdHVyZSAuc3ltYm9sIC5zaGFkb3dlZCB7CisgIGNvbG9yOiBkYXJrc2VhZ3JlZW47Cit9CisKKy5zaWduYXR1cmUgLnN5bWJvbCAucGFyYW1zID4gLmltcGxpY2l0IHsKKyAgZm9udC1zdHlsZTogaXRhbGljOworfQorCisuc2lnbmF0dXJlIC5zeW1ib2wgLmRlcHJlY2F0ZWQgeworICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKK30KKworLnNpZ25hdHVyZSAuc3ltYm9sIC5wYXJhbXMgLmRlZmF1bHQgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKyN0ZW1wbGF0ZSAuc2lnbmF0dXJlLmNsb3NlZCB7CisgIGJhY2tncm91bmQ6IHVybCgiYXJyb3ctcmlnaHQucG5nIikgbm8tcmVwZWF0IDAgNXB4IHRyYW5zcGFyZW50OworICBjdXJzb3I6IHBvaW50ZXI7Cit9CisKKyN0ZW1wbGF0ZSAuc2lnbmF0dXJlLm9wZW5lZCB7CisgIGJhY2tncm91bmQ6IHVybCgiYXJyb3ctZG93bi5wbmciKSBuby1yZXBlYXQgMCA1cHggdHJhbnNwYXJlbnQ7CisgIGN1cnNvcjogcG9pbnRlcjsKK30KKworI3RlbXBsYXRlIC52YWx1ZXMgLnNpZ25hdHVyZSAubmFtZSB7CisgIGNvbG9yOiBkYXJrYmx1ZTsKK30KKworI3RlbXBsYXRlIC50eXBlcyAuc2lnbmF0dXJlIC5uYW1lIHsKKyAgY29sb3I6IGRhcmtncmVlbjsKK30KKworLmZ1bGwtc2lnbmF0dXJlLXVzZWNhc2UgaDQgc3BhbiB7CisgIGZvbnQtc2l6ZTogMTBwdDsKK30KKworLmZ1bGwtc2lnbmF0dXJlLXVzZWNhc2UgPiAjc2lnbmF0dXJlIHsKKyAgcGFkZGluZy10b3A6IDBweDsKK30KKworI3RlbXBsYXRlIC5mdWxsLXNpZ25hdHVyZS11c2VjYXNlID4gLnNpZ25hdHVyZS5jbG9zZWQgeworICBiYWNrZ3JvdW5kOiBub25lOworfQorCisjdGVtcGxhdGUgLmZ1bGwtc2lnbmF0dXJlLXVzZWNhc2UgPiAuc2lnbmF0dXJlLm9wZW5lZCB7CisgIGJhY2tncm91bmQ6IG5vbmU7Cit9CisKKy5mdWxsLXNpZ25hdHVyZS1ibG9jayB7CisgIHBhZGRpbmc6IDVweCAwIDA7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRUJFQkVCOworICBtYXJnaW4tdG9wOiA1cHg7CisgIG1hcmdpbi1ib3R0b206IDVweDsKK30KKworCisvKiBDb21tZW50cyB0ZXh0IGZvcm1hdGluZyAqLworCisuY210IHt9CisKKy5jbXQgcCB7CisgIG1hcmdpbjogMC43ZW0gMDsKK30KKworLmNtdCBwOmZpcnN0LWNoaWxkIHsKKyAgbWFyZ2luLXRvcDogMDsKK30KKworLmNtdCBwOmxhc3QtY2hpbGQgeworICBtYXJnaW4tYm90dG9tOiAwOworfQorCisuY210IGgzLAorLmNtdCBoNCwKKy5jbXQgaDUsCisuY210IGg2IHsKKyAgbWFyZ2luLWJvdHRvbTogMC43ZW07CisgIG1hcmdpbi10b3A6IDEuNGVtOworICBkaXNwbGF5OiBibG9jazsKKyAgdGV4dC1hbGlnbjogbGVmdDsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7Cit9CisKKy5jbXQgaDMgeworICBmb250LXNpemU6IDE0cHQ7Cit9CisKKy5jbXQgaDQgeworICBmb250LXNpemU6IDEzcHQ7Cit9CisKKy5jbXQgaDUgeworICBmb250LXNpemU6IDEycHQ7Cit9CisKKy5jbXQgaDYgeworICBmb250LXNpemU6IDExcHQ7Cit9CisKKy5jbXQgcHJlIHsKKyAgcGFkZGluZzogNXB4OworICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOworICBtYXJnaW46IDVweCAwOworICBkaXNwbGF5OiBibG9jazsKKyAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KKworLmNtdCBwcmUgc3Bhbi5hbm8geworICBjb2xvcjogYmx1ZTsKK30KKworLmNtdCBwcmUgc3Bhbi5jbXQgeworICBjb2xvcjogZ3JlZW47Cit9CisKKy5jbXQgcHJlIHNwYW4ua3cgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLmNtdCBwcmUgc3Bhbi5saXQgeworICBjb2xvcjogI2M3MTU4NTsKK30KKworLmNtdCBwcmUgc3Bhbi5udW0geworICBjb2xvcjogIzFlOTBmZjsgLyogZG9kZ2VyYmx1ZSAqLworfQorCisuY210IHByZSBzcGFuLnN0ZCB7CisgIGNvbG9yOiAjMDA4MDgwOyAvKiB0ZWFsICovCit9CisKKy5jbXQgdWwgeworICBkaXNwbGF5OiBibG9jazsKKyAgbGlzdC1zdHlsZTogY2lyY2xlOworICBwYWRkaW5nLWxlZnQ6IDIwcHg7Cit9CisKKy5jbXQgb2wgeworICBkaXNwbGF5OiBibG9jazsKKyAgcGFkZGluZy1sZWZ0OjIwcHg7Cit9CisKKy5jbXQgb2wuZGVjaW1hbCB7CisgIGxpc3Qtc3R5bGU6IGRlY2ltYWw7Cit9CisKKy5jbXQgb2wubG93ZXJBbHBoYSB7CisgIGxpc3Qtc3R5bGU6IGxvd2VyLWFscGhhOworfQorCisuY210IG9sLnVwcGVyQWxwaGEgeworICBsaXN0LXN0eWxlOiB1cHBlci1hbHBoYTsKK30KKworLmNtdCBvbC5sb3dlclJvbWFuIHsKKyAgbGlzdC1zdHlsZTogbG93ZXItcm9tYW47Cit9CisKKy5jbXQgb2wudXBwZXJSb21hbiB7CisgIGxpc3Qtc3R5bGU6IHVwcGVyLXJvbWFuOworfQorCisuY210IGxpIHsKKyAgZGlzcGxheTogbGlzdC1pdGVtOworfQorCisuY210IGNvZGUgeworICBmb250LWZhbWlseTogbW9ub3NwYWNlOworfQorCisuY210IGEgeworICBmb250LXN0eWxlOiBib2xkOworfQorCisuY210IGVtLCAuY210IGkgeworICBmb250LXN0eWxlOiBpdGFsaWM7Cit9CisKKy5jbXQgc3Ryb25nLCAuY210IGIgeworICBmb250LXdlaWdodDogYm9sZDsKK30KKworLyogQ29tbWVudHMgc3RydWN0dXJlZCBsYXlvdXQgKi8KKworLmdyb3VwID4gZGl2LmNvbW1lbnQgeworICBwYWRkaW5nLXRvcDogNXB4OworICBwYWRkaW5nLWJvdHRvbTogNXB4OworICBwYWRkaW5nLXJpZ2h0OiA1cHg7CisgIHBhZGRpbmctbGVmdDogNXB4OworICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlZWU7CisgIG1hcmdpbi10b3A6NXB4OworICBtYXJnaW4tYm90dG9tOjVweDsKKyAgbWFyZ2luLXJpZ2h0OjVweDsKKyAgbWFyZ2luLWxlZnQ6NXB4OworICBkaXNwbGF5OiBibG9jazsKK30KKworcC5jb21tZW50IHsKKyAgZGlzcGxheTogYmxvY2s7CisgIG1hcmdpbi1sZWZ0OiAxNC43ZW07CisgIG1hcmdpbi10b3A6IDVweDsKK30KKworLnNob3J0Y29tbWVudCB7CisgIGRpc3BsYXk6IGJsb2NrOworICBtYXJnaW46IDVweCAxMHB4OworfQorCitkaXYuZnVsbGNvbW1lbnR0b3AgeworICBwYWRkaW5nOiAxMHB4IDEwcHg7CisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdmdWxsY29tbWVudHRvcGJnLmdpZicpOworICBiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDsKK30KKworZGl2LmZ1bGxjb21tZW50IHsKKyAgbWFyZ2luOiA1cHggMTBweDsKK30KKworI3RlbXBsYXRlIGRpdi5mdWxsY29tbWVudHRvcCwKKyN0ZW1wbGF0ZSBkaXYuZnVsbGNvbW1lbnQgeworICBkaXNwbGF5Om5vbmU7CisgIG1hcmdpbjogNXB4IDAgMCAxNC43ZW07Cit9CisKKyN0ZW1wbGF0ZSAuc2hvcnRjb21tZW50IHsKKyAgbWFyZ2luOiA1cHggMCAwIDE0LjdlbTsKKyAgcGFkZGluZzogMDsKK30KKworZGl2LmZ1bGxjb21tZW50IC5ibG9jayB7CisgIHBhZGRpbmc6IDVweCAwIDA7CisgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRUJFQkVCOworICBtYXJnaW4tdG9wOiA1cHg7CisgIG92ZXJmbG93OiBoaWRkZW47Cit9CisKK2Rpdi5mdWxsY29tbWVudHRvcCAuYmxvY2sgeworICBwYWRkaW5nOiA1cHggMCAwOworICBib3JkZXItdG9wOiAxcHggc29saWQgI0VCRUJFQjsKKyAgbWFyZ2luLXRvcDogNXB4OworICBtYXJnaW4tYm90dG9tOiA1cHgKK30KKworZGl2LmZ1bGxjb21tZW50IGRpdi5ibG9jayBvbCBsaSBwLAorZGl2LmZ1bGxjb21tZW50IGRpdi5ibG9jayBvbCBsaSB7CisgIGRpc3BsYXk6aW5saW5lCit9CisKK2Rpdi5mdWxsY29tbWVudCAuYmxvY2sgPiBoNSB7CisgIGZvbnQtc3R5bGU6IGl0YWxpYzsKKyAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCitkaXYuZnVsbGNvbW1lbnQgLmNvbW1lbnQgeworICBtYXJnaW46IDVweCAwIDEwcHg7Cit9CisKK2Rpdi5mdWxsY29tbWVudHRvcCAuY29tbWVudDpsYXN0LWNoaWxkLAorZGl2LmZ1bGxjb21tZW50IC5jb21tZW50Omxhc3QtY2hpbGQgeworICBtYXJnaW4tYm90dG9tOiAwOworfQorCitkaXYuZnVsbGNvbW1lbnR0b3AgZGwucGFyYW1jbXRzIHsKKyAgbWFyZ2luLWJvdHRvbTogMC44ZW07CisgIHBhZGRpbmctYm90dG9tOiAwLjhlbTsKK30KKworZGl2LmZ1bGxjb21tZW50dG9wIGRsLnBhcmFtY210cyA+IGR0LAorZGl2LmZ1bGxjb21tZW50IGRsLnBhcmFtY210cyA+IGR0IHsKKyAgZGlzcGxheTogYmxvY2s7CisgIGZsb2F0OiBsZWZ0OworICBmb250LXdlaWdodDogYm9sZDsKKyAgbWluLXdpZHRoOiA3MHB4OworfQorCitkaXYuZnVsbGNvbW1lbnR0b3AgZGwucGFyYW1jbXRzID4gZGQsCitkaXYuZnVsbGNvbW1lbnQgZGwucGFyYW1jbXRzID4gZGQgeworICBkaXNwbGF5OiBibG9jazsKKyAgcGFkZGluZy1sZWZ0OiAxMHB4OworICBtYXJnaW4tYm90dG9tOiA1cHg7CisgIG1hcmdpbi1sZWZ0OiA3MHB4OworfQorCisvKiBNZW1iZXJzIGZpbHRlciB0b29sICovCisKKyN0ZXh0ZmlsdGVyIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBkaXNwbGF5OiBibG9jazsKKyAgICBoZWlnaHQ6IDIwcHg7CisgIG1hcmdpbi1ib3R0b206IDVweDsKK30KKworI3RleHRmaWx0ZXIgPiAucHJlIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBwb3NpdGlvbjogYWJzb2x1dGU7CisgICAgdG9wOiAwOworICAgIGxlZnQ6IDA7CisgICAgaGVpZ2h0OiAyM3B4OworICAgIHdpZHRoOiAyMXB4OworICAgIGJhY2tncm91bmQ6IHVybCgiZmlsdGVyX2JveF9sZWZ0LnBuZyIpOworfQorCisjdGV4dGZpbHRlciA+IC5pbnB1dCB7CisgIGRpc3BsYXk6IGJsb2NrOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgcmlnaHQ6IDIwcHg7CisgICAgbGVmdDogMjBweDsKK30KKworI3RleHRmaWx0ZXIgPiAuaW5wdXQgPiBpbnB1dCB7CisgIGhlaWdodDogMjBweDsKKyAgcGFkZGluZzogMXB4OworICBmb250LXdlaWdodDogYm9sZDsKKyAgY29sb3I6ICMwMDAwMDA7CisgICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmYgdXJsKCJmaWx0ZXJib3hiYXJiZy5wbmciKSByZXBlYXQteCB0b3AgbGVmdDsKKyAgICAgICAgd2lkdGg6IDEwMCU7Cit9CisKKyN0ZXh0ZmlsdGVyID4gLnBvc3QgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICB0b3A6IDA7CisgICAgcmlnaHQ6IDA7CisgICAgaGVpZ2h0OiAyM3B4OworICAgIHdpZHRoOiAyMXB4OworICAgIGJhY2tncm91bmQ6IHVybCgiZmlsdGVyX2JveF9yaWdodC5wbmciKTsKK30KKworI21icnNlbCB7CisgIHBhZGRpbmc6IDVweCAxMHB4OworICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWRlZGVlOyAvKiBsaWdodCBncmF5ICovCisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdmaWx0ZXJib3hiZy5naWYnKTsKKyAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7CisgIGZvbnQtc2l6ZTogOS41cHQ7CisgIGRpc3BsYXk6IGJsb2NrOworICBtYXJnaW4tdG9wOiAxZW07CisvKiAgbWFyZ2luLWJvdHRvbTogMWVtOyAqLworfQorCisjbWJyc2VsID4gZGl2IHsKKyAgbWFyZ2luLWJvdHRvbTogNXB4OworfQorCisjbWJyc2VsID4gZGl2Omxhc3QtY2hpbGQgeworICBtYXJnaW4tYm90dG9tOiAwOworfQorCisjbWJyc2VsID4gZGl2ID4gc3Bhbi5maWx0ZXJ0eXBlIHsKKyAgcGFkZGluZzogNHB4OworICBtYXJnaW4tcmlnaHQ6IDVweDsKKyAgZmxvYXQ6IGxlZnQ7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgY29sb3I6ICMwMDAwMDA7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworICB0ZXh0LXNoYWRvdzogd2hpdGUgMHB4IDFweCAwcHg7CisgIHdpZHRoOiA0LjVlbTsKK30KKworI21icnNlbCA+IGRpdiA+IG9sIHsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCisjbWJyc2VsID4gZGl2ID4gYSB7CisgIHBvc2l0aW9uOnJlbGF0aXZlOworICB0b3A6IC04cHg7CisgIGZvbnQtc2l6ZTogMTFweDsKKyAgdGV4dC1zaGFkb3c6ICNmZmZmZmYgMCAxcHggMDsKK30KKworI21icnNlbCA+IGRpdiA+IG9sI2xpbmVhcml6YXRpb24geworICBkaXNwbGF5OiB0YWJsZTsKKyAgbWFyZ2luLWxlZnQ6IDcwcHg7Cit9CisKKyNtYnJzZWwgPiBkaXYgPiBvbCNsaW5lYXJpemF0aW9uID4gbGkuaW4geworICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CisgIGZsb2F0OiBsZWZ0OworICBwYWRkaW5nLXJpZ2h0OiAxMHB4OworICBtYXJnaW4tcmlnaHQ6IDVweDsKKyAgYmFja2dyb3VuZDogdXJsKHNlbGVjdGVkLXJpZ2h0LnBuZykgbm8tcmVwZWF0OworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAwcHg7Cit9CisKKyNtYnJzZWwgPiBkaXYgPiBvbCNsaW5lYXJpemF0aW9uID4gbGkuaW4gPiBzcGFueworICBjb2xvcjogIzQwNDA0MDsKKyAgZmxvYXQ6IGxlZnQ7CisgIHBhZGRpbmc6IDFweCAwIDFweCAxMHB4OworICBiYWNrZ3JvdW5kOiB1cmwoc2VsZWN0ZWQucG5nKSBuby1yZXBlYXQ7CisgIGJhY2tncm91bmQtcG9zaXRpb246IDBweCAwcHg7CisgIHRleHQtc2hhZG93OiAjZmZmZmZmIDAgMXB4IDA7Cit9CisKKyNtYnJzZWwgPiBkaXYgPiBvbCNpbXBsaWNpdHMgeworICBkaXNwbGF5OiB0YWJsZTsKKyAgbWFyZ2luLWxlZnQ6IDcwcHg7Cit9CisKKyNtYnJzZWwgPiBkaXYgPiBvbCNpbXBsaWNpdHMgPiBsaS5pbiB7CisgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKKyAgZmxvYXQ6IGxlZnQ7CisgIHBhZGRpbmctcmlnaHQ6IDEwcHg7CisgIG1hcmdpbi1yaWdodDogNXB4OworICBiYWNrZ3JvdW5kOiB1cmwoc2VsZWN0ZWQtcmlnaHQtaW1wbGljaXRzLnBuZykgbm8tcmVwZWF0OworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAwcHg7Cit9CisKKyNtYnJzZWwgPiBkaXYgPiBvbCNpbXBsaWNpdHMgPiBsaS5pbiA+IHNwYW57CisgIGNvbG9yOiAjNDA0MDQwOworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZzogMXB4IDAgMXB4IDEwcHg7CisgIGJhY2tncm91bmQ6IHVybChzZWxlY3RlZC1pbXBsaWNpdHMucG5nKSBuby1yZXBlYXQ7CisgIGJhY2tncm91bmQtcG9zaXRpb246IDBweCAwcHg7CisgIHRleHQtc2hhZG93OiAjZmZmZmZmIDAgMXB4IDA7Cit9CisKKyNtYnJzZWwgPiBkaXYgPiBvbCA+IGxpIHsKKy8qICBwYWRkaW5nOiAzcHggMTBweDsqLworICBsaW5lLWhlaWdodDogMTZwdDsKKyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICBjdXJzb3I6IHBvaW50ZXI7Cit9CisKKyNtYnJzZWwgPiBkaXYgPiBvbCA+IGxpLmluIHsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZy1yaWdodDogMTBweDsKKyAgbWFyZ2luLXJpZ2h0OiA1cHg7CisgIGJhY2tncm91bmQ6IHVybChzZWxlY3RlZC1yaWdodC5wbmcpIG5vLXJlcGVhdDsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgMHB4OworfQorCisjbWJyc2VsID4gZGl2ID4gb2wgPiBsaS5pbiA+IHNwYW57CisgIGNvbG9yOiAjNDA0MDQwOworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZzogMXB4IDAgMXB4IDEwcHg7CisgIGJhY2tncm91bmQ6IHVybChzZWxlY3RlZC5wbmcpIG5vLXJlcGVhdDsKKyAgYmFja2dyb3VuZC1wb3NpdGlvbjogMHB4IDBweDsKKyAgdGV4dC1zaGFkb3c6ICNmZmZmZmYgMCAxcHggMDsKK30KKworI21icnNlbCA+IGRpdiA+IG9sID4gbGkub3V0IHsKKyAgdGV4dC1kZWNvcmF0aW9uOiBub25lOworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZy1yaWdodDogMTBweDsKKyAgbWFyZ2luLXJpZ2h0OiA1cHg7Cit9CisKKyNtYnJzZWwgPiBkaXYgPiBvbCA+IGxpLm91dCA+IHNwYW57CisgIGNvbG9yOiAjNzQ3NDc0OworLyogIGJhY2tncm91bmQtY29sb3I6ICM5OTk7ICovCisgIGZsb2F0OiBsZWZ0OworICBwYWRkaW5nOiAxcHggMCAxcHggMTBweDsKKy8qICBiYWNrZ3JvdW5kOiB1cmwodW5zZWxlY3RlZC5wbmcpIG5vLXJlcGVhdDsqLworICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwcHggLTFweDsKKyAgdGV4dC1zaGFkb3c6ICNmZmZmZmYgMCAxcHggMDsKK30KKy8qCisjbWJyc2VsIC5oaWRlYWxsIHsKKyAgY29sb3I6ICM0QzRDNEM7CisgIGxpbmUtaGVpZ2h0OiAxNnB4OworICBmb250LXdlaWdodDogYm9sZDsKK30KKworI21icnNlbCAuaGlkZWFsbCBzcGFuIHsKKyAgY29sb3I6ICM0QzRDNEM7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisjbWJyc2VsIC5zaG93YWxsIHsKKyAgY29sb3I6ICM0QzRDNEM7CisgIGxpbmUtaGVpZ2h0OiAxNnB4OworICBmb250LXdlaWdodDogYm9sZDsKK30KKworI21icnNlbCAuc2hvd2FsbCBzcGFuIHsKKyAgY29sb3I6ICM0QzRDNEM7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfSovCisKKy5iYWRnZSB7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgcGFkZGluZzogMnB4IDRweDsKKyAgZm9udC1zaXplOiAxMS44NDRweDsKKyAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgIGxpbmUtaGVpZ2h0OiAxNHB4OworICBjb2xvcjogI2ZmZmZmZjsKKyAgdGV4dC1zaGFkb3c6IDAgLTFweCAwIHJnYmEoMCwgMCwgMCwgMC4yNSk7CisgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzk5OTk5OTsKKyAgcGFkZGluZy1yaWdodDogOXB4OworICBwYWRkaW5nLWxlZnQ6IDlweDsKKyAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA5cHg7CisgICAgIC1tb3otYm9yZGVyLXJhZGl1czogOXB4OworICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDlweDsKK30KKworLmJhZGdlLXJlZCB7CisgIGJhY2tncm91bmQtY29sb3I6ICNiOTRhNDg7Cit9CmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9saWIvdGVtcGxhdGUuanMgYi9oaXZlL3NjYWxhZG9jcy9saWIvdGVtcGxhdGUuanMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmQxY2FmNgotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi90ZW1wbGF0ZS5qcwpAQCAtMCwwICsxLDQ2NiBAQAorLy8gwqkgMjAwOeKAkzIwMTAgRVBGTC9MQU1QCisvLyBjb2RlIGJ5IEdpbGxlcyBEdWJvY2hldCB3aXRoIGNvbnRyaWJ1dGlvbnMgYnkgUGVkcm8gRnVybGFuZXR0bworCiskKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpeworCisgICAgLy8gRXNjYXBlcyBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIHJldHVybnMgYSB2YWxpZCBqUXVlcnkgc2VsZWN0b3IKKyAgICBmdW5jdGlvbiBlc2NhcGVKcXVlcnkoc3RyKXsKKyAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWzsmLFwuXCtcKlx+JzoiXCFcXiMkJUBcW1xdXChcKT0+XHxdKS9nLCAnXFwkMScpOworICAgIH0KKworICAgIC8vIGhpZ2hsaWdodCBhbmQganVtcCB0byBzZWxlY3RlZCBtZW1iZXIKKyAgICBpZiAod2luZG93LmxvY2F0aW9uLmhhc2gpIHsKKyAgICAgIHZhciB0ZW1wID0gd2luZG93LmxvY2F0aW9uLmhhc2gucmVwbGFjZSgnIycsICcnKTsKKyAgICAgIHZhciBlbGVtID0gJyMnK2VzY2FwZUpxdWVyeSh0ZW1wKTsKKworICAgICAgd2luZG93LnNjcm9sbFRvKDAsIDApOworICAgICAgJChlbGVtKS5wYXJlbnQoKS5lZmZlY3QoImhpZ2hsaWdodCIsIHtjb2xvcjogIiNGRkNDODUifSwgMzAwMCk7CisgICAgICAkKCdodG1sLGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6JChlbGVtKS5wYXJlbnQoKS5vZmZzZXQoKS50b3B9LCAxMDAwKTsKKyAgICB9CisgICAgCisgICAgdmFyIGlzSGlkZGVuQ2xhc3MgPSBmdW5jdGlvbiAobmFtZSkgeworICAgICAgICByZXR1cm4gbmFtZSA9PSAnc2NhbGEuQW55JyB8fAorICAgICAgICAgICAgICAgbmFtZSA9PSAnc2NhbGEuQW55UmVmJzsKKyAgICB9OworCisgICAgdmFyIGlzSGlkZGVuID0gZnVuY3Rpb24gKGVsZW0pIHsKKyAgICAgICAgcmV0dXJuICQoZWxlbSkuYXR0cigiZGF0YS1oaWRkZW4iKSA9PSAndHJ1ZSc7CisgICAgfTsKKworICAgICQoIiNsaW5lYXJpemF0aW9uIGxpOmd0KDApIikuZmlsdGVyKGZ1bmN0aW9uKCl7CisgICAgICAgIHJldHVybiBpc0hpZGRlbkNsYXNzKCQodGhpcykuYXR0cigibmFtZSIpKTsKKyAgICB9KS5yZW1vdmVDbGFzcygiaW4iKS5hZGRDbGFzcygib3V0Iik7CisKKyAgICAkKCIjaW1wbGljaXRzIGxpIikuZmlsdGVyKGZ1bmN0aW9uKCl7CisgICAgICAgIHJldHVybiBpc0hpZGRlbih0aGlzKTsKKyAgICB9KS5yZW1vdmVDbGFzcygiaW4iKS5hZGRDbGFzcygib3V0Iik7CisKKyAgICAvLyBQcmUtZmlsdGVyIG1lbWJlcnMKKyAgICBmaWx0ZXIoKTsKKworICAgIC8vIE1lbWJlciBmaWx0ZXIgYm94CisgICAgdmFyIGlucHV0ID0gJCgiI3RleHRmaWx0ZXIgaW5wdXQiKTsKKyAgICBpbnB1dC5iaW5kKCJrZXl1cCIsIGZ1bmN0aW9uKGV2ZW50KSB7CisKKyAgICAgICAgc3dpdGNoICggZXZlbnQua2V5Q29kZSApIHsKKworICAgICAgICBjYXNlIDI3OiAvLyBlc2NhcGUga2V5CisgICAgICAgICAgICBpbnB1dC52YWwoIiIpOworICAgICAgICAgICAgZmlsdGVyKHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAzODogLy8gdXAKKyAgICAgICAgICAgIGlucHV0LnZhbCgiIik7CisgICAgICAgICAgICBmaWx0ZXIoZmFsc2UpOworICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsICQoImJvZHkiKS5vZmZzZXQoKS50b3ApOworICAgICAgICAgICAgaW5wdXQuZm9jdXMoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMzM6IC8vcGFnZSB1cAorICAgICAgICAgICAgaW5wdXQudmFsKCIiKTsKKyAgICAgICAgICAgIGZpbHRlcihmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIDM0OiAvL3BhZ2UgZG93bgorICAgICAgICAgICAgaW5wdXQudmFsKCIiKTsKKyAgICAgICAgICAgIGZpbHRlcihmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsICQoIiNtYnJzZWwiKS5vZmZzZXQoKS50b3ApOworICAgICAgICAgICAgZmlsdGVyKHRydWUpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgfQorICAgIH0pOworICAgIGlucHV0LmZvY3VzKGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgICAgIGlucHV0LnNlbGVjdCgpOworICAgIH0pOworICAgICQoIiN0ZXh0ZmlsdGVyID4gLnBvc3QiKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgJCgiI3RleHRmaWx0ZXIgaW5wdXQiKS5hdHRyKCJ2YWx1ZSIsICIiKTsKKyAgICAgICAgZmlsdGVyKCk7CisgICAgfSk7CisgICAgJChkb2N1bWVudCkua2V5ZG93bihmdW5jdGlvbihldmVudCkgeworCisgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09IDkpIHsgLy8gdGFiCisgICAgICAgICAgICAkKCIjaW5kZXgtaW5wdXQiLCB3aW5kb3cucGFyZW50LmRvY3VtZW50KS5mb2N1cygpOworICAgICAgICAgICAgaW5wdXQuYXR0cigidmFsdWUiLCAiIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9KTsKKworICAgICQoIiNsaW5lYXJpemF0aW9uIGxpIikuY2xpY2soZnVuY3Rpb24oKXsKKyAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoImluIikpIHsKKyAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoImluIik7CisgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCJvdXQiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgkKHRoaXMpLmhhc0NsYXNzKCJvdXQiKSkgeworICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygib3V0Iik7CisgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCJpbiIpOworICAgICAgICB9OworICAgICAgICBmaWx0ZXIoKTsKKyAgICB9KTsKKworICAgICQoIiNpbXBsaWNpdHMgbGkiKS5jbGljayhmdW5jdGlvbigpeworICAgICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcygiaW4iKSkgeworICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygiaW4iKTsKKyAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoIm91dCIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCQodGhpcykuaGFzQ2xhc3MoIm91dCIpKSB7CisgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCJvdXQiKTsKKyAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoImluIik7CisgICAgICAgIH07CisgICAgICAgIGZpbHRlcigpOworICAgIH0pOworCisgICAgJCgiI21icnNlbCA+IGRpdltpZD1hbmNlc3RvcnNdID4gb2wgPiBsaS5oaWRlYWxsIikuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgICQoIiNsaW5lYXJpemF0aW9uIGxpLmluIikucmVtb3ZlQ2xhc3MoImluIikuYWRkQ2xhc3MoIm91dCIpOworICAgICAgICAkKCIjbGluZWFyaXphdGlvbiBsaTpmaXJzdCIpLnJlbW92ZUNsYXNzKCJvdXQiKS5hZGRDbGFzcygiaW4iKTsKKyAgICAgICAgJCgiI2ltcGxpY2l0cyBsaS5pbiIpLnJlbW92ZUNsYXNzKCJpbiIpLmFkZENsYXNzKCJvdXQiKTsKKworICAgICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcygib3V0IikgJiYgJCgiI21icnNlbCA+IGRpdltpZD1hbmNlc3RvcnNdID4gb2wgPiBsaS5zaG93YWxsIikuaGFzQ2xhc3MoImluIikpIHsKKyAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoIm91dCIpLmFkZENsYXNzKCJpbiIpOworICAgICAgICAgICAgJCgiI21icnNlbCA+IGRpdltpZD1hbmNlc3RvcnNdID4gb2wgPiBsaS5zaG93YWxsIikucmVtb3ZlQ2xhc3MoImluIikuYWRkQ2xhc3MoIm91dCIpOworICAgICAgICB9CisKKyAgICAgICAgZmlsdGVyKCk7CisgICAgfSkKKyAgICAkKCIjbWJyc2VsID4gZGl2W2lkPWFuY2VzdG9yc10gPiBvbCA+IGxpLnNob3dhbGwiKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIGZpbHRlcmVkTGluZWFyaXphdGlvbiA9CisgICAgICAgICAgICAkKCIjbGluZWFyaXphdGlvbiBsaS5vdXQiKS5maWx0ZXIoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEgaXNIaWRkZW5DbGFzcygkKHRoaXMpLmF0dHIoIm5hbWUiKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgZmlsdGVyZWRMaW5lYXJpemF0aW9uLnJlbW92ZUNsYXNzKCJvdXQiKS5hZGRDbGFzcygiaW4iKTsKKworICAgICAgICB2YXIgZmlsdGVyZWRJbXBsaWNpdHMgPQorICAgICAgICAkKCIjaW1wbGljaXRzIGxpLm91dCIpLmZpbHRlcihmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHJldHVybiAhIGlzSGlkZGVuKHRoaXMpOworICAgICAgICB9KTsKKyAgICAgICAgZmlsdGVyZWRJbXBsaWNpdHMucmVtb3ZlQ2xhc3MoIm91dCIpLmFkZENsYXNzKCJpbiIpOworCisgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCJvdXQiKSAmJiAkKCIjbWJyc2VsID4gZGl2W2lkPWFuY2VzdG9yc10gPiBvbCA+IGxpLmhpZGVhbGwiKS5oYXNDbGFzcygiaW4iKSkgeworICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygib3V0IikuYWRkQ2xhc3MoImluIik7CisgICAgICAgICAgICAkKCIjbWJyc2VsID4gZGl2W2lkPWFuY2VzdG9yc10gPiBvbCA+IGxpLmhpZGVhbGwiKS5yZW1vdmVDbGFzcygiaW4iKS5hZGRDbGFzcygib3V0Iik7CisgICAgICAgIH0KKworICAgICAgICBmaWx0ZXIoKTsKKyAgICB9KTsKKyAgICAkKCIjdmlzYmwgPiBvbCA+IGxpLnB1YmxpYyIpLmNsaWNrKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcygib3V0IikpIHsKKyAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoIm91dCIpLmFkZENsYXNzKCJpbiIpOworICAgICAgICAgICAgJCgiI3Zpc2JsID4gb2wgPiBsaS5hbGwiKS5yZW1vdmVDbGFzcygiaW4iKS5hZGRDbGFzcygib3V0Iik7CisgICAgICAgICAgICBmaWx0ZXIoKTsKKyAgICAgICAgfTsKKyAgICB9KQorICAgICQoIiN2aXNibCA+IG9sID4gbGkuYWxsIikuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCJvdXQiKSkgeworICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygib3V0IikuYWRkQ2xhc3MoImluIik7CisgICAgICAgICAgICAkKCIjdmlzYmwgPiBvbCA+IGxpLnB1YmxpYyIpLnJlbW92ZUNsYXNzKCJpbiIpLmFkZENsYXNzKCJvdXQiKTsKKyAgICAgICAgICAgIGZpbHRlcigpOworICAgICAgICB9OworICAgIH0pOworICAgICQoIiNvcmRlciA+IG9sID4gbGkuYWxwaGEiKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoIm91dCIpKSB7CisgICAgICAgICAgICBvcmRlckFscGhhKCk7CisgICAgICAgIH07CisgICAgfSkKKyAgICAkKCIjb3JkZXIgPiBvbCA+IGxpLmluaGVyaXQiKS5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoIm91dCIpKSB7CisgICAgICAgICAgICBvcmRlckluaGVyaXQoKTsKKyAgICAgICAgfTsKKyAgICB9KTsKKyAgICAkKCIjb3JkZXIgPiBvbCA+IGxpLmdyb3VwIikuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCJvdXQiKSkgeworICAgICAgICAgICAgb3JkZXJHcm91cCgpOworICAgICAgICB9OworICAgIH0pOworICAgICQoIiNncm91cGVkTWVtYmVycyIpLmhpZGUoKTsKKworICAgIGluaXRJbmhlcml0KCk7CisKKyAgICAvLyBDcmVhdGUgdG9vbHRpcHMKKyAgICAkKCIuZXh0eXBlIikuYWRkKCIuZGVmdmFsIikudG9vbHRpcCh7CisgICAgICAgIHRpcDogIiN0b29sdGlwIiwKKyAgICAgICAgcG9zaXRpb246InRvcCBjZW50ZXIiLAorICAgICAgICBwcmVkZWxheTogNTAwLAorICAgICAgICBvbkJlZm9yZVNob3c6IGZ1bmN0aW9uKGV2KSB7CisgICAgICAgICAgICAkKHRoaXMuZ2V0VGlwKCkpLnRleHQodGhpcy5nZXRUcmlnZ2VyKCkuYXR0cigibmFtZSIpKTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgLyogQWRkIHRvZ2dsZSBhcnJvd3MgKi8KKyAgICAvL3ZhciBkb2NBbGxTaWdzID0gJCgiI3RlbXBsYXRlIGxpIikuaGFzKCIuZnVsbGNvbW1lbnQiKS5maW5kKCIuc2lnbmF0dXJlIik7CisgICAgLy8gdHJ5aW5nIHRvIHNwZWVkIHRoaW5ncyB1cCBhIGxpdHRsZSBiaXQKKyAgICB2YXIgZG9jQWxsU2lncyA9ICQoIiN0ZW1wbGF0ZSBsaVtmdWxsQ29tbWVudD15ZXNdIC5zaWduYXR1cmUiKTsKKworICAgIGZ1bmN0aW9uIGNvbW1lbnRUb2dnbGVGY3Qoc2lnbmF0dXJlKXsKKyAgICAgICAgdmFyIHBhcmVudCA9IHNpZ25hdHVyZS5wYXJlbnQoKTsKKyAgICAgICAgdmFyIHNob3J0Q29tbWVudCA9ICQoIi5zaG9ydGNvbW1lbnQiLCBwYXJlbnQpOworICAgICAgICB2YXIgZnVsbENvbW1lbnQgPSAkKCIuZnVsbGNvbW1lbnQiLCBwYXJlbnQpOworICAgICAgICB2YXIgdmlzID0gJCgiOnZpc2libGUiLCBmdWxsQ29tbWVudCk7CisgICAgICAgIHNpZ25hdHVyZS50b2dnbGVDbGFzcygiY2xvc2VkIikudG9nZ2xlQ2xhc3MoIm9wZW5lZCIpOworICAgICAgICBpZiAodmlzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHNob3J0Q29tbWVudC5zbGlkZURvd24oMTAwKTsKKyAgICAgICAgICAgIGZ1bGxDb21tZW50LnNsaWRlVXAoMTAwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNob3J0Q29tbWVudC5zbGlkZVVwKDEwMCk7CisgICAgICAgICAgICBmdWxsQ29tbWVudC5zbGlkZURvd24oMTAwKTsKKyAgICAgICAgfQorICAgIH07CisgICAgZG9jQWxsU2lncy5hZGRDbGFzcygiY2xvc2VkIik7CisgICAgZG9jQWxsU2lncy5jbGljayhmdW5jdGlvbigpIHsKKyAgICAgICAgY29tbWVudFRvZ2dsZUZjdCgkKHRoaXMpKTsKKyAgICB9KTsKKworICAgIC8qIExpbmVhciBzdXBlciB0eXBlcyBhbmQga25vd24gc3ViY2xhc3NlcyAqLworICAgIGZ1bmN0aW9uIHRvZ2dsZVNob3dDb250ZW50RmN0KGUpeworICAgICAgZS50b2dnbGVDbGFzcygib3BlbiIpOworICAgICAgdmFyIGNvbnRlbnQgPSAkKCIuaGlkZGVuQ29udGVudCIsIGUucGFyZW50KCkuZ2V0KDApKTsKKyAgICAgIGlmIChjb250ZW50LmlzKCc6dmlzaWJsZScpKSB7CisgICAgICAgIGNvbnRlbnQuc2xpZGVVcCgxMDApOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIGNvbnRlbnQuc2xpZGVEb3duKDEwMCk7CisgICAgICB9CisgICAgfTsKKworICAgICQoIi50b2dnbGU6bm90KC5kaWFncmFtLWxpbmspIikuY2xpY2soZnVuY3Rpb24oKSB7CisgICAgICB0b2dnbGVTaG93Q29udGVudEZjdCgkKHRoaXMpKTsKKyAgICB9KTsKKworICAgIC8vIFNldCBwYXJlbnQgd2luZG93IHRpdGxlCisgICAgd2luZG93VGl0bGUoKTsKKworICAgIGlmICgkKCIjb3JkZXIgPiBvbCA+IGxpLmdyb3VwIikubGVuZ3RoID09IDEpIHsgb3JkZXJHcm91cCgpOyB9OworfSk7CisKK2Z1bmN0aW9uIG9yZGVyQWxwaGEoKSB7CisgICAgJCgiI29yZGVyID4gb2wgPiBsaS5hbHBoYSIpLnJlbW92ZUNsYXNzKCJvdXQiKS5hZGRDbGFzcygiaW4iKTsKKyAgICAkKCIjb3JkZXIgPiBvbCA+IGxpLmluaGVyaXQiKS5yZW1vdmVDbGFzcygiaW4iKS5hZGRDbGFzcygib3V0Iik7CisgICAgJCgiI29yZGVyID4gb2wgPiBsaS5ncm91cCIpLnJlbW92ZUNsYXNzKCJpbiIpLmFkZENsYXNzKCJvdXQiKTsKKyAgICAkKCIjdGVtcGxhdGUgPiBkaXYucGFyZW50IikuaGlkZSgpOworICAgICQoIiN0ZW1wbGF0ZSA+IGRpdi5jb252ZXJzaW9uIikuaGlkZSgpOworICAgICQoIiNtYnJzZWwgPiBkaXZbaWQ9YW5jZXN0b3JzXSIpLnNob3coKTsKKyAgICBmaWx0ZXIoKTsKK307CisKK2Z1bmN0aW9uIG9yZGVySW5oZXJpdCgpIHsKKyAgICAkKCIjb3JkZXIgPiBvbCA+IGxpLmluaGVyaXQiKS5yZW1vdmVDbGFzcygib3V0IikuYWRkQ2xhc3MoImluIik7CisgICAgJCgiI29yZGVyID4gb2wgPiBsaS5hbHBoYSIpLnJlbW92ZUNsYXNzKCJpbiIpLmFkZENsYXNzKCJvdXQiKTsKKyAgICAkKCIjb3JkZXIgPiBvbCA+IGxpLmdyb3VwIikucmVtb3ZlQ2xhc3MoImluIikuYWRkQ2xhc3MoIm91dCIpOworICAgICQoIiN0ZW1wbGF0ZSA+IGRpdi5wYXJlbnQiKS5zaG93KCk7CisgICAgJCgiI3RlbXBsYXRlID4gZGl2LmNvbnZlcnNpb24iKS5zaG93KCk7CisgICAgJCgiI21icnNlbCA+IGRpdltpZD1hbmNlc3RvcnNdIikuaGlkZSgpOworICAgIGZpbHRlcigpOworfTsKKworZnVuY3Rpb24gb3JkZXJHcm91cCgpIHsKKyAgICAkKCIjb3JkZXIgPiBvbCA+IGxpLmdyb3VwIikucmVtb3ZlQ2xhc3MoIm91dCIpLmFkZENsYXNzKCJpbiIpOworICAgICQoIiNvcmRlciA+IG9sID4gbGkuYWxwaGEiKS5yZW1vdmVDbGFzcygiaW4iKS5hZGRDbGFzcygib3V0Iik7CisgICAgJCgiI29yZGVyID4gb2wgPiBsaS5pbmhlcml0IikucmVtb3ZlQ2xhc3MoImluIikuYWRkQ2xhc3MoIm91dCIpOworICAgICQoIiN0ZW1wbGF0ZSA+IGRpdi5wYXJlbnQiKS5oaWRlKCk7CisgICAgJCgiI3RlbXBsYXRlID4gZGl2LmNvbnZlcnNpb24iKS5oaWRlKCk7CisgICAgJCgiI21icnNlbCA+IGRpdltpZD1hbmNlc3RvcnNdIikuc2hvdygpOworICAgIGZpbHRlcigpOworfTsKKworLyoqIFByZXBhcmVzIHRoZSBET00gZm9yIGluaGVyaXRhbmNlLWJhc2VkIGRpc3BsYXkuIFRvIGRvIHNvIGl0IHdpbGw6CisgICogIC0gaGlkZSBhbGwgc3RhdGljYWxseS1nZW5lcmF0ZWQgcGFyZW50cyBoZWFkaW5nczsKKyAgKiAgLSBjb3B5IGFsbCBtZW1iZXJzIGZyb20gdGhlIHZhbHVlIGFuZCB0eXBlIG1lbWJlcnMgbGlzdHMgKGZsYXQgbWVtYmVycykgdG8gY29ycmVzcG9uZGluZyBsaXN0cyBuZXN0ZWQgYmVsb3cgdGhlCisgICogICAgcGFyZW50IGhlYWRpbmdzIChpbmhlcml0YW5jZS1ncm91cGVkIG1lbWJlcnMpOworICAqICAtIGluaXRpYWxpc2VzIGEgY29udHJvbCB2YXJpYWJsZSB1c2VkIGJ5IHRoZSBmaWx0ZXIgbWV0aG9kIHRvIGNvbnRyb2wgd2hldGhlciBmaWx0ZXJpbmcgaGFwcGVucyBvbiBmbGF0IG1lbWJlcnMKKyAgKiAgICBvciBvbiBpbmhlcml0YW5jZS1ncm91cGVkIG1lbWJlcnMuICovCitmdW5jdGlvbiBpbml0SW5oZXJpdCgpIHsKKyAgICAvLyBpbmhlcml0UGFyZW50cyBpcyBhIG1hcCBmcm9tIGZ1bGx5LXF1YWxpZmllZCBuYW1lcyB0byB0aGUgRE9NIG5vZGUgb2YgcGFyZW50IGhlYWRpbmdzLgorICAgIHZhciBpbmhlcml0UGFyZW50cyA9IG5ldyBPYmplY3QoKTsKKyAgICB2YXIgZ3JvdXBQYXJlbnRzID0gbmV3IE9iamVjdCgpOworICAgICQoIiNpbmhlcml0ZWRNZW1iZXJzID4gZGl2LnBhcmVudCIpLmVhY2goZnVuY3Rpb24oKXsKKyAgICAgICAgaW5oZXJpdFBhcmVudHNbJCh0aGlzKS5hdHRyKCJuYW1lIildID0gJCh0aGlzKTsKKyAgICB9KTsKKyAgICAkKCIjaW5oZXJpdGVkTWVtYmVycyA+IGRpdi5jb252ZXJzaW9uIikuZWFjaChmdW5jdGlvbigpeworICAgICAgICBpbmhlcml0UGFyZW50c1skKHRoaXMpLmF0dHIoIm5hbWUiKV0gPSAkKHRoaXMpOworICAgIH0pOworICAgICQoIiNncm91cGVkTWVtYmVycyA+IGRpdi5ncm91cCIpLmVhY2goZnVuY3Rpb24oKXsKKyAgICAgICAgZ3JvdXBQYXJlbnRzWyQodGhpcykuYXR0cigibmFtZSIpXSA9ICQodGhpcyk7CisgICAgfSk7CisKKyAgICAkKCIjdHlwZXMgPiBvbCA+IGxpIikuZWFjaChmdW5jdGlvbigpeworICAgICAgICB2YXIgbWJyID0gJCh0aGlzKTsKKyAgICAgICAgdGhpcy5tYnJUZXh0ID0gbWJyLmZpbmQoIj4gLmZ1bGxjb21tZW50IC5jbXQiKS50ZXh0KCk7CisgICAgICAgIHZhciBxdWFsTmFtZSA9IG1ici5hdHRyKCJuYW1lIik7CisgICAgICAgIHZhciBvd25lciA9IHF1YWxOYW1lLnNsaWNlKDAsIHF1YWxOYW1lLmluZGV4T2YoIiMiKSk7CisgICAgICAgIHZhciBuYW1lID0gcXVhbE5hbWUuc2xpY2UocXVhbE5hbWUuaW5kZXhPZigiIyIpICsgMSk7CisgICAgICAgIHZhciBpbmhlcml0UGFyZW50ID0gaW5oZXJpdFBhcmVudHNbb3duZXJdOworICAgICAgICBpZiAoaW5oZXJpdFBhcmVudCAhPSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHZhciB0eXBlcyA9ICQoIj4gLnR5cGVzID4gb2wiLCBpbmhlcml0UGFyZW50KTsKKyAgICAgICAgICAgIGlmICh0eXBlcy5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgICAgIGluaGVyaXRQYXJlbnQuYXBwZW5kKCI8ZGl2IGNsYXNzPSd0eXBlcyBtZW1iZXJzJz48aDM+VHlwZSBNZW1iZXJzPC9oMz48b2w+PC9vbD48L2Rpdj4iKTsKKyAgICAgICAgICAgICAgICB0eXBlcyA9ICQoIj4gLnR5cGVzID4gb2wiLCBpbmhlcml0UGFyZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBjbG9uZSA9IG1ici5jbG9uZSgpOworICAgICAgICAgICAgY2xvbmVbMF0ubWJyVGV4dCA9IHRoaXMubWJyVGV4dDsKKyAgICAgICAgICAgIHR5cGVzLmFwcGVuZChjbG9uZSk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGdyb3VwID0gbWJyLmF0dHIoImdyb3VwIikKKyAgICAgICAgdmFyIGdyb3VwUGFyZW50ID0gZ3JvdXBQYXJlbnRzW2dyb3VwXTsKKyAgICAgICAgaWYgKGdyb3VwUGFyZW50ICE9IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgdmFyIHR5cGVzID0gJCgiPiAudHlwZXMgPiBvbCIsIGdyb3VwUGFyZW50KTsKKyAgICAgICAgICAgIGlmICh0eXBlcy5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgICAgIGdyb3VwUGFyZW50LmFwcGVuZCgiPGRpdiBjbGFzcz0ndHlwZXMgbWVtYmVycyc+PG9sPjwvb2w+PC9kaXY+Iik7CisgICAgICAgICAgICAgICAgdHlwZXMgPSAkKCI+IC50eXBlcyA+IG9sIiwgZ3JvdXBQYXJlbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGNsb25lID0gbWJyLmNsb25lKCk7CisgICAgICAgICAgICBjbG9uZVswXS5tYnJUZXh0ID0gdGhpcy5tYnJUZXh0OworICAgICAgICAgICAgdHlwZXMuYXBwZW5kKGNsb25lKTsKKyAgICAgICAgfQorICAgIH0pOworCisgICAgJCgiI3ZhbHVlcyA+IG9sID4gbGkiKS5lYWNoKGZ1bmN0aW9uKCl7CisgICAgICAgIHZhciBtYnIgPSAkKHRoaXMpOworICAgICAgICB0aGlzLm1iclRleHQgPSBtYnIuZmluZCgiPiAuZnVsbGNvbW1lbnQgLmNtdCIpLnRleHQoKTsKKyAgICAgICAgdmFyIHF1YWxOYW1lID0gbWJyLmF0dHIoIm5hbWUiKTsKKyAgICAgICAgdmFyIG93bmVyID0gcXVhbE5hbWUuc2xpY2UoMCwgcXVhbE5hbWUuaW5kZXhPZigiIyIpKTsKKyAgICAgICAgdmFyIG5hbWUgPSBxdWFsTmFtZS5zbGljZShxdWFsTmFtZS5pbmRleE9mKCIjIikgKyAxKTsKKyAgICAgICAgdmFyIGluaGVyaXRQYXJlbnQgPSBpbmhlcml0UGFyZW50c1tvd25lcl07CisgICAgICAgIGlmIChpbmhlcml0UGFyZW50ICE9IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgdmFyIHZhbHVlcyA9ICQoIj4gLnZhbHVlcyA+IG9sIiwgaW5oZXJpdFBhcmVudCk7CisgICAgICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICAgICAgaW5oZXJpdFBhcmVudC5hcHBlbmQoIjxkaXYgY2xhc3M9J3ZhbHVlcyBtZW1iZXJzJz48aDM+VmFsdWUgTWVtYmVyczwvaDM+PG9sPjwvb2w+PC9kaXY+Iik7CisgICAgICAgICAgICAgICAgdmFsdWVzID0gJCgiPiAudmFsdWVzID4gb2wiLCBpbmhlcml0UGFyZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBjbG9uZSA9IG1ici5jbG9uZSgpOworICAgICAgICAgICAgY2xvbmVbMF0ubWJyVGV4dCA9IHRoaXMubWJyVGV4dDsKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoY2xvbmUpOworICAgICAgICB9CisgICAgICAgIHZhciBncm91cCA9IG1ici5hdHRyKCJncm91cCIpCisgICAgICAgIHZhciBncm91cFBhcmVudCA9IGdyb3VwUGFyZW50c1tncm91cF07CisgICAgICAgIGlmIChncm91cFBhcmVudCAhPSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIHZhciB2YWx1ZXMgPSAkKCI+IC52YWx1ZXMgPiBvbCIsIGdyb3VwUGFyZW50KTsKKyAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgICAgICBncm91cFBhcmVudC5hcHBlbmQoIjxkaXYgY2xhc3M9J3ZhbHVlcyBtZW1iZXJzJz48b2w+PC9vbD48L2Rpdj4iKTsKKyAgICAgICAgICAgICAgICB2YWx1ZXMgPSAkKCI+IC52YWx1ZXMgPiBvbCIsIGdyb3VwUGFyZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBjbG9uZSA9IG1ici5jbG9uZSgpOworICAgICAgICAgICAgY2xvbmVbMF0ubWJyVGV4dCA9IHRoaXMubWJyVGV4dDsKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoY2xvbmUpOworICAgICAgICB9CisgICAgfSk7CisgICAgJCgiI2luaGVyaXRlZE1lbWJlcnMgPiBkaXYucGFyZW50IikuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCQoIj4gZGl2Lm1lbWJlcnMiLCB0aGlzKS5sZW5ndGggPT0gMCkgeyAkKHRoaXMpLnJlbW92ZSgpOyB9OworICAgIH0pOworICAgICQoIiNpbmhlcml0ZWRNZW1iZXJzID4gZGl2LmNvbnZlcnNpb24iKS5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAoJCgiPiBkaXYubWVtYmVycyIsIHRoaXMpLmxlbmd0aCA9PSAwKSB7ICQodGhpcykucmVtb3ZlKCk7IH07CisgICAgfSk7CisgICAgJCgiI2dyb3VwZWRNZW1iZXJzID4gZGl2Lmdyb3VwIikuZWFjaChmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKCQoIj4gZGl2Lm1lbWJlcnMiLCB0aGlzKS5sZW5ndGggPT0gMCkgeyAkKHRoaXMpLnJlbW92ZSgpOyB9OworICAgIH0pOworfTsKKworLyogZmlsdGVyIHVzZWQgdG8gdGFrZSBib29sZWFuIHNjcm9sbFRvTWVtYmVyICovCitmdW5jdGlvbiBmaWx0ZXIoKSB7CisgICAgdmFyIHF1ZXJ5ID0gJC50cmltKCQoIiN0ZXh0ZmlsdGVyIGlucHV0IikudmFsKCkpLnRvTG93ZXJDYXNlKCk7CisgICAgcXVlcnkgPSBxdWVyeS5yZXBsYWNlKC9bLVtcXXt9KCkqKz8uLFxcXiR8I10vZywgIlxcJCYiKS5yZXBsYWNlKC9ccysvZywgInwiKTsKKyAgICB2YXIgcXVlcnlSZWdFeHAgPSBuZXcgUmVnRXhwKHF1ZXJ5LCAiaSIpOworICAgIHZhciBwcml2YXRlTWVtYmVyc0hpZGRlbiA9ICQoIiN2aXNibCA+IG9sID4gbGkucHVibGljIikuaGFzQ2xhc3MoImluIik7CisgICAgdmFyIG9yZGVyaW5nQWxwaGFiZXRpYyA9ICQoIiNvcmRlciA+IG9sID4gbGkuYWxwaGEiKS5oYXNDbGFzcygiaW4iKTsKKyAgICB2YXIgb3JkZXJpbmdJbmhlcml0YW5jZSA9ICQoIiNvcmRlciA+IG9sID4gbGkuaW5oZXJpdCIpLmhhc0NsYXNzKCJpbiIpOworICAgIHZhciBvcmRlcmluZ0dyb3VwcyA9ICQoIiNvcmRlciA+IG9sID4gbGkuZ3JvdXAiKS5oYXNDbGFzcygiaW4iKTsKKyAgICB2YXIgaGlkZGVuU3VwZXJjbGFzc0VsZW1lbnRzTGluZWFyaXphdGlvbiA9IG9yZGVyaW5nSW5oZXJpdGFuY2UgPyAkKCIjbGluZWFyaXphdGlvbiA+IGxpOmd0KDApIikgOiAkKCIjbGluZWFyaXphdGlvbiA+IGxpLm91dCIpOworICAgIHZhciBoaWRkZW5TdXBlcmNsYXNzZXNMaW5lYXJpemF0aW9uID0gaGlkZGVuU3VwZXJjbGFzc0VsZW1lbnRzTGluZWFyaXphdGlvbi5tYXAoZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gJCh0aGlzKS5hdHRyKCJuYW1lIik7CisgICAgfSkuZ2V0KCk7CisgICAgdmFyIGhpZGRlblN1cGVyY2xhc3NFbGVtZW50c0ltcGxpY2l0cyA9IG9yZGVyaW5nSW5oZXJpdGFuY2UgPyAkKCIjaW1wbGljaXRzID4gbGkiKSA6ICQoIiNpbXBsaWNpdHMgPiBsaS5vdXQiKTsKKyAgICB2YXIgaGlkZGVuU3VwZXJjbGFzc2VzSW1wbGljaXRzID0gaGlkZGVuU3VwZXJjbGFzc0VsZW1lbnRzSW1wbGljaXRzLm1hcChmdW5jdGlvbigpIHsKKyAgICAgIHJldHVybiAkKHRoaXMpLmF0dHIoIm5hbWUiKTsKKyAgICB9KS5nZXQoKTsKKworICAgIHZhciBoaWRlSW5oZXJpdGVkTWVtYmVyczsKKworICAgIGlmIChvcmRlcmluZ0FscGhhYmV0aWMpIHsKKyAgICAgICQoIiNhbGxNZW1iZXJzIikuc2hvdygpOworICAgICAgJCgiI2luaGVyaXRlZE1lbWJlcnMiKS5oaWRlKCk7CisgICAgICAkKCIjZ3JvdXBlZE1lbWJlcnMiKS5oaWRlKCk7CisgICAgICBoaWRlSW5oZXJpdGVkTWVtYmVycyA9IHRydWU7CisgICAgICAkKCIjYWxsTWVtYmVycyA+IC5tZW1iZXJzIikuZWFjaChmaWx0ZXJGdW5jKTsKKyAgICB9IGVsc2UgaWYgKG9yZGVyaW5nR3JvdXBzKSB7CisgICAgICAkKCIjZ3JvdXBlZE1lbWJlcnMiKS5zaG93KCk7CisgICAgICAkKCIjaW5oZXJpdGVkTWVtYmVycyIpLmhpZGUoKTsKKyAgICAgICQoIiNhbGxNZW1iZXJzIikuaGlkZSgpOworICAgICAgaGlkZUluaGVyaXRlZE1lbWJlcnMgPSB0cnVlOworICAgICAgJCgiI2dyb3VwZWRNZW1iZXJzICA+IC5ncm91cCA+IC5tZW1iZXJzIikuZWFjaChmaWx0ZXJGdW5jKTsKKyAgICAgICQoIiNncm91cGVkTWVtYmVycyAgPiBkaXYuZ3JvdXAiKS5lYWNoKGZ1bmN0aW9uKCkgeworICAgICAgICAkKHRoaXMpLnNob3coKTsKKyAgICAgICAgaWYgKCQoIj4gZGl2Lm1lbWJlcnMiLCB0aGlzKS5ub3QoIjpoaWRkZW4iKS5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgJCh0aGlzKS5oaWRlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkKHRoaXMpLnNob3coKTsKKyAgICAgICAgfQorICAgICAgfSk7CisgICAgfSBlbHNlIGlmIChvcmRlcmluZ0luaGVyaXRhbmNlKSB7CisgICAgICAkKCIjaW5oZXJpdGVkTWVtYmVycyIpLnNob3coKTsKKyAgICAgICQoIiNncm91cGVkTWVtYmVycyIpLmhpZGUoKTsKKyAgICAgICQoIiNhbGxNZW1iZXJzIikuaGlkZSgpOworICAgICAgaGlkZUluaGVyaXRlZE1lbWJlcnMgPSBmYWxzZTsKKyAgICAgICQoIiNpbmhlcml0ZWRNZW1iZXJzID4gLnBhcmVudCA+IC5tZW1iZXJzIikuZWFjaChmaWx0ZXJGdW5jKTsKKyAgICAgICQoIiNpbmhlcml0ZWRNZW1iZXJzID4gLmNvbnZlcnNpb24gPiAubWVtYmVycyIpLmVhY2goZmlsdGVyRnVuYyk7CisgICAgfQorCisKKyAgICBmdW5jdGlvbiBmaWx0ZXJGdW5jKCkgeworICAgICAgdmFyIG1lbWJlcnNWaXNpYmxlID0gZmFsc2U7CisgICAgICB2YXIgbWVtYmVycyA9ICQodGhpcyk7CisgICAgICBtZW1iZXJzLmZpbmQoIj4gb2wgPiBsaSIpLmVhY2goZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBtYnIgPSAkKHRoaXMpOworICAgICAgICBpZiAocHJpdmF0ZU1lbWJlcnNIaWRkZW4gJiYgbWJyLmF0dHIoInZpc2JsIikgPT0gInBydCIpIHsKKyAgICAgICAgICBtYnIuaGlkZSgpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgbmFtZSA9IG1ici5hdHRyKCJuYW1lIik7CisgICAgICAgIC8vIE93bmVyIGZpbHRlcmluZyBtdXN0IG5vdCBoYXBwZW4gaW4gImluaGVyaXRlZCBmcm9tIiBtZW1iZXIgbGlzdHMKKyAgICAgICAgaWYgKGhpZGVJbmhlcml0ZWRNZW1iZXJzKSB7CisgICAgICAgICAgdmFyIG93bmVySW5kZXggPSBuYW1lLmluZGV4T2YoIiMiKTsKKyAgICAgICAgICBpZiAob3duZXJJbmRleCA8IDApIHsKKyAgICAgICAgICAgIG93bmVySW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCIuIik7CisgICAgICAgICAgfQorICAgICAgICAgIHZhciBvd25lciA9IG5hbWUuc2xpY2UoMCwgb3duZXJJbmRleCk7CisgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoaWRkZW5TdXBlcmNsYXNzZXNMaW5lYXJpemF0aW9uLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoaGlkZGVuU3VwZXJjbGFzc2VzTGluZWFyaXphdGlvbltpXSA9PSBvd25lcikgeworICAgICAgICAgICAgICBtYnIuaGlkZSgpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgfTsKKyAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhpZGRlblN1cGVyY2xhc3Nlc0ltcGxpY2l0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGhpZGRlblN1cGVyY2xhc3Nlc0ltcGxpY2l0c1tpXSA9PSBvd25lcikgeworICAgICAgICAgICAgICBtYnIuaGlkZSgpOworICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAocXVlcnkgJiYgIShxdWVyeVJlZ0V4cC50ZXN0KG5hbWUpIHx8IHF1ZXJ5UmVnRXhwLnRlc3QodGhpcy5tYnJUZXh0KSkpIHsKKyAgICAgICAgICBtYnIuaGlkZSgpOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtYnIuc2hvdygpOworICAgICAgICBtZW1iZXJzVmlzaWJsZSA9IHRydWU7CisgICAgICB9KTsKKworICAgICAgaWYgKG1lbWJlcnNWaXNpYmxlKQorICAgICAgICBtZW1iZXJzLnNob3coKTsKKyAgICAgIGVsc2UKKyAgICAgICAgbWVtYmVycy5oaWRlKCk7CisgICAgfTsKKworICAgIHJldHVybiBmYWxzZTsKK307CisKK2Z1bmN0aW9uIHdpbmRvd1RpdGxlKCkKK3sKKyAgICB0cnkgeworICAgICAgICBwYXJlbnQuZG9jdW1lbnQudGl0bGU9ZG9jdW1lbnQudGl0bGU7CisgICAgfQorICAgIGNhdGNoKGUpIHsKKyAgICAgIC8vIENocm9tZSBkb2Vzbid0IGFsbG93IHNldHRpbmdzIHRoZSBwYXJlbnQncyB0aXRsZSB3aGVuCisgICAgICAvLyB1c2VkIG9uIHRoZSBsb2NhbCBmaWxlIHN5c3RlbS4KKyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvaGl2ZS9zY2FsYWRvY3MvbGliL3Rvb2xzLnRvb2x0aXAuanMgYi9oaXZlL3NjYWxhZG9jcy9saWIvdG9vbHMudG9vbHRpcC5qcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYWYzNGVjCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3Rvb2xzLnRvb2x0aXAuanMKQEAgLTAsMCArMSwxNCBAQAorLyoKKyAqIHRvb2xzLnRvb2x0aXAgMS4xLjMgLSBUb29sdGlwcyBkb25lIHJpZ2h0LgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgVGVybyBQaWlyYWluZW4KKyAqIGh0dHA6Ly9mbG93cGxheWVyLm9yZy90b29scy90b29sdGlwLmh0bWwKKyAqCisgKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIE1JVCBhbmQgR1BMIDIrIGxpY2Vuc2VzCisgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzCisgKgorICogTGF1bmNoICA6IE5vdmVtYmVyIDIwMDgKKyAqIERhdGU6ICR7ZGF0ZX0KKyAqIFJldmlzaW9uOiAke3JldmlzaW9ufSAKKyAqLworKGZ1bmN0aW9uKGMpe3ZhciBkPVtdO2MudG9vbHM9Yy50b29sc3x8e307Yy50b29scy50b29sdGlwPXt2ZXJzaW9uOiIxLjEuMyIsY29uZjp7ZWZmZWN0OiJ0b2dnbGUiLGZhZGVPdXRTcGVlZDoiZmFzdCIsdGlwOm51bGwscHJlZGVsYXk6MCxkZWxheTozMCxvcGFjaXR5OjEsbGF6eTp1bmRlZmluZWQscG9zaXRpb246WyJ0b3AiLCJjZW50ZXIiXSxvZmZzZXQ6WzAsMF0sY2FuY2VsRGVmYXVsdDp0cnVlLHJlbGF0aXZlOmZhbHNlLG9uZUluc3RhbmNlOnRydWUsZXZlbnRzOntkZWY6Im1vdXNlb3Zlcixtb3VzZW91dCIsaW5wdXQ6ImZvY3VzLGJsdXIiLHdpZGdldDoiZm9jdXMgbW91c2VvdmVyLGJsdXIgbW91c2VvdXQiLHRvb2x0aXA6Im1vdXNlb3Zlcixtb3VzZW91dCJ9LGFwaTpmYWxzZX0sYWRkRWZmZWN0OmZ1bmN0aW9uKGUsZyxmKXtiW2VdPVtnLGZdfX07dmFyIGI9e3RvZ2dsZTpbZnVuY3Rpb24oZSl7dmFyIGY9dGhpcy5nZXRDb25mKCksZz10aGlzLmdldFRpcCgpLGg9Zi5vcGFjaXR5O2lmKGg8MSl7Zy5jc3Moe29wYWNpdHk6aH0pfWcuc2hvdygpO2UuY2FsbCgpfSxmdW5jdGlvbihlKXt0aGlzLmdldFRpcCgpLmhpZGUoKTtlLmNhbGwoKX1dLGZhZGU6W2Z1bmN0aW9uKGUpe3RoaXMuZ2V0VGlwKCkuZmFkZUluKHRoaXMuZ2V0Q29uZigpLmZhZGVJblNwZWVkLGUpfSxmdW5jdGlvbihlKXt0aGlzLmdldFRpcCgpLmZhZGVPdXQodGhpcy5nZXRDb25mKCkuZmFkZU91dFNwZWVkLGUpfV19O2Z1bmN0aW9uIGEoZixnKXt2YXIgcD10aGlzLGs9Yyh0aGlzKTtmLmRhdGEoInRvb2x0aXAiLHApO3ZhciBsPWYubmV4dCgpO2lmKGcudGlwKXtsPWMoZy50aXApO2lmKGwubGVuZ3RoPjEpe2w9Zi5uZXh0QWxsKGcudGlwKS5lcSgwKTtpZighbC5sZW5ndGgpe2w9Zi5wYXJlbnQoKS5uZXh0QWxsKGcudGlwKS5lcSgwKX19fWZ1bmN0aW9uIG8odSl7dmFyIHQ9Zy5yZWxhdGl2ZT9mLnBvc2l0aW9uKCkudG9wOmYub2Zmc2V0KCkudG9wLHM9Zy5yZWxhdGl2ZT9mLnBvc2l0aW9uKCkubGVmdDpmLm9mZnNldCgpLmxlZnQsdj1nLnBvc2l0aW9uWzBdO3QtPWwub3V0ZXJIZWlnaHQoKS1nLm9mZnNldFswXTtzKz1mLm91dGVyV2lkdGgoKStnLm9mZnNldFsxXTt2YXIgcT1sLm91dGVySGVpZ2h0KCkrZi5vdXRlckhlaWdodCgpO2lmKHY9PSJjZW50ZXIiKXt0Kz1xLzJ9aWYodj09ImJvdHRvbSIpe3QrPXF9dj1nLnBvc2l0aW9uWzFdO3ZhciByPWwub3V0ZXJXaWR0aCgpK2Yub3V0ZXJXaWR0aCgpO2lmKHY9PSJjZW50ZXIiKXtzLT1yLzJ9aWYodj09ImxlZnQiKXtzLT1yfXJldHVybnt0b3A6dCxsZWZ0OnN9fXZhciBpPWYuaXMoIjppbnB1dCIpLGU9aSYmZi5pcygiOmNoZWNrYm94LCA6cmFkaW8sIHNlbGVjdCwgOmJ1dHRvbiIpLGg9Zi5hdHRyKCJ0eXBlIiksbj1nLmV2ZW50c1toXXx8Zy5ldmVudHNbaT8oZT8id2lkZ2V0IjoiaW5wdXQiKToiZGVmIl07bj1uLnNwbGl0KC8sXHMqLyk7aWYobi5sZW5ndGghPTIpe3Rocm93IlRvb2x0aXA6IGJhZCBldmVudHMgY29uZmlndXJhdGlvbiBmb3IgIitofWYuYmluZChuWzBdLGZ1bmN0aW9uKHIpe2lmKGcub25lSW5zdGFuY2Upe2MuZWFjaChkLGZ1bmN0aW9uKCl7dGhpcy5oaWRlKCl9KX12YXIgcT1sLmRhdGEoInRyaWdnZXIiKTtpZihxJiZxWzBdIT10aGlzKXtsLmhpZGUoKS5zdG9wKHRydWUsdHJ1ZSl9ci50YXJnZXQ9dGhpcztwLnNob3cocik7bj1nLmV2ZW50cy50b29sdGlwLnNwbGl0KC8sXHMqLyk7bC5iaW5kKG5bMF0sZnVuY3Rpb24oKXtwLnNob3cocil9KTtpZihuWzFdKXtsLmJpbmQoblsxXSxmdW5jdGlvbigpe3AuaGlkZShyKX0pfX0pO2YuYmluZChuWzFdLGZ1bmN0aW9uKHEpe3AuaGlkZShxKX0pO2lmKCFjLmJyb3dzZXIubXNpZSYmIWkmJiFnLnByZWRlbGF5KXtmLm1vdXNlbW92ZShmdW5jdGlvbigpe2lmKCFwLmlzU2hvd24oKSl7Zi50cmlnZ2VySGFuZGxlcigibW91c2VvdmVyIil9fSl9aWYoZy5vcGFjaXR5PDEpe2wuY3NzKCJvcGFjaXR5IixnLm9wYWNpdHkpfXZhciBtPTAsaj1mLmF0dHIoInRpdGxlIik7aWYoaiYmZy5jYW5jZWxEZWZhdWx0KXtmLnJlbW92ZUF0dHIoInRpdGxlIik7Zi5kYXRhKCJ0aXRsZSIsail9Yy5leHRlbmQocCx7c2hvdzpmdW5jdGlvbihyKXtpZihyKXtmPWMoci50YXJnZXQpfWNsZWFyVGltZW91dChsLmRhdGEoInRpbWVyIikpO2lmKGwuaXMoIjphbmltYXRlZCIpfHxsLmlzKCI6dmlzaWJsZSIpKXtyZXR1cm4gcH1mdW5jdGlvbiBxKCl7bC5kYXRhKCJ0cmlnZ2VyIixmKTt2YXIgdD1vKHIpO2lmKGcudGlwJiZqKXtsLmh0bWwoZi5kYXRhKCJ0aXRsZSIpKX1yPXJ8fGMuRXZlbnQoKTtyLnR5cGU9Im9uQmVmb3JlU2hvdyI7ay50cmlnZ2VyKHIsW3RdKTtpZihyLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtyZXR1cm4gcH10PW8ocik7bC5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOnQudG9wLGxlZnQ6dC5sZWZ0fSk7dmFyIHM9YltnLmVmZmVjdF07aWYoIXMpe3Rocm93J05vbmV4aXN0ZW50IGVmZmVjdCAiJytnLmVmZmVjdCsnIid9c1swXS5jYWxsKHAsZnVuY3Rpb24oKXtyLnR5cGU9Im9uU2hvdyI7ay50cmlnZ2VyKHIpfSl9aWYoZy5wcmVkZWxheSl7Y2xlYXJUaW1lb3V0KG0pO209c2V0VGltZW91dChxLGcucHJlZGVsYXkpfWVsc2V7cSgpfXJldHVybiBwfSxoaWRlOmZ1bmN0aW9uKHIpe2NsZWFyVGltZW91dChsLmRhdGEoInRpbWVyIikpO2NsZWFyVGltZW91dChtKTtpZighbC5pcygiOnZpc2libGUiKSl7cmV0dXJufWZ1bmN0aW9uIHEoKXtyPXJ8fGMuRXZlbnQoKTtyLnR5cGU9Im9uQmVmb3JlSGlkZSI7ay50cmlnZ2VyKHIpO2lmKHIuaXNEZWZhdWx0UHJldmVudGVkKCkpe3JldHVybn1iW2cuZWZmZWN0XVsxXS5jYWxsKHAsZnVuY3Rpb24oKXtyLnR5cGU9Im9uSGlkZSI7ay50cmlnZ2VyKHIpfSl9aWYoZy5kZWxheSYmcil7bC5kYXRhKCJ0aW1lciIsc2V0VGltZW91dChxLGcuZGVsYXkpKX1lbHNle3EoKX1yZXR1cm4gcH0saXNTaG93bjpmdW5jdGlvbigpe3JldHVybiBsLmlzKCI6dmlzaWJsZSwgOmFuaW1hdGVkIil9LGdldENvbmY6ZnVuY3Rpb24oKXtyZXR1cm4gZ30sZ2V0VGlwOmZ1bmN0aW9uKCl7cmV0dXJuIGx9LGdldFRyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gZn0sYmluZDpmdW5jdGlvbihxLHIpe2suYmluZChxLHIpO3JldHVybiBwfSxvbkhpZGU6ZnVuY3Rpb24ocSl7cmV0dXJuIHRoaXMuYmluZCgib25IaWRlIixxKX0sb25CZWZvcmVTaG93OmZ1bmN0aW9uKHEpe3JldHVybiB0aGlzLmJpbmQoIm9uQmVmb3JlU2hvdyIscSl9LG9uU2hvdzpmdW5jdGlvbihxKXtyZXR1cm4gdGhpcy5iaW5kKCJvblNob3ciLHEpfSxvbkJlZm9yZUhpZGU6ZnVuY3Rpb24ocSl7cmV0dXJuIHRoaXMuYmluZCgib25CZWZvcmVIaWRlIixxKX0sdW5iaW5kOmZ1bmN0aW9uKHEpe2sudW5iaW5kKHEpO3JldHVybiBwfX0pO2MuZWFjaChnLGZ1bmN0aW9uKHEscil7aWYoYy5pc0Z1bmN0aW9uKHIpKXtwLmJpbmQocSxyKX19KX1jLnByb3RvdHlwZS50b29sdGlwPWZ1bmN0aW9uKGUpe3ZhciBmPXRoaXMuZXEodHlwZW9mIGU9PSJudW1iZXIiP2U6MCkuZGF0YSgidG9vbHRpcCIpO2lmKGYpe3JldHVybiBmfXZhciBnPWMuZXh0ZW5kKHRydWUse30sYy50b29scy50b29sdGlwLmNvbmYpO2lmKGMuaXNGdW5jdGlvbihlKSl7ZT17b25CZWZvcmVTaG93OmV9fWVsc2V7aWYodHlwZW9mIGU9PSJzdHJpbmciKXtlPXt0aXA6ZX19fWU9Yy5leHRlbmQodHJ1ZSxnLGUpO2lmKHR5cGVvZiBlLnBvc2l0aW9uPT0ic3RyaW5nIil7ZS5wb3NpdGlvbj1lLnBvc2l0aW9uLnNwbGl0KC8sP1xzLyl9aWYoZS5sYXp5IT09ZmFsc2UmJihlLmxhenk9PT10cnVlfHx0aGlzLmxlbmd0aD4yMCkpe3RoaXMub25lKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGgpe2Y9bmV3IGEoYyh0aGlzKSxlKTtmLnNob3coaCk7ZC5wdXNoKGYpfSl9ZWxzZXt0aGlzLmVhY2goZnVuY3Rpb24oKXtmPW5ldyBhKGModGhpcyksZSk7ZC5wdXNoKGYpfSl9cmV0dXJuIGUuYXBpP2Y6dGhpc319KShqUXVlcnkpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi90cmFpdC5wbmcgYi9oaXZlL3NjYWxhZG9jcy9saWIvdHJhaXQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZiOTYxYTIKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvdHJhaXQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi90cmFpdF9iaWcucG5nIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3RyYWl0X2JpZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjI1ZDkyNQotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi90cmFpdF9iaWcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi90cmFpdF9kaWFncmFtLnBuZyBiL2hpdmUvc2NhbGFkb2NzL2xpYi90cmFpdF9kaWFncmFtLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ODk4MzI1Ci0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3RyYWl0X2RpYWdyYW0ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi90cmFpdF90b19vYmplY3RfYmlnLnBuZyBiL2hpdmUvc2NhbGFkb2NzL2xpYi90cmFpdF90b19vYmplY3RfYmlnLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kMGNkN2ZkCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3RyYWl0X3RvX29iamVjdF9iaWcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi90eXBlLnBuZyBiL2hpdmUvc2NhbGFkb2NzL2xpYi90eXBlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YzZlMWZlCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3R5cGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi90eXBlX2JpZy5wbmcgYi9oaXZlL3NjYWxhZG9jcy9saWIvdHlwZV9iaWcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA0Yzg3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvdHlwZV9iaWcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi90eXBlX2RpYWdyYW0ucG5nIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3R5cGVfZGlhZ3JhbS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDgxNTI1MgotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi90eXBlX2RpYWdyYW0ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi90eXBlX3RvX29iamVjdF9iaWcucG5nIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3R5cGVfdG9fb2JqZWN0X2JpZy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWYyNjE1YgotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi90eXBlX3RvX29iamVjdF9iaWcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi90eXBlYmcuZ2lmIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3R5cGViZy5naWYKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmZjYzc3YgotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL2xpYi90eXBlYmcuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi91bnNlbGVjdGVkLnBuZyBiL2hpdmUvc2NhbGFkb2NzL2xpYi91bnNlbGVjdGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kNWFjNjM5Ci0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3MvbGliL3Vuc2VsZWN0ZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL2xpYi92YWx1ZW1lbWJlcnNiZy5naWYgYi9oaXZlL3NjYWxhZG9jcy9saWIvdmFsdWVtZW1iZXJzYmcuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjJhOTQ5MzEKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9saWIvdmFsdWVtZW1iZXJzYmcuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9icmlkZ2UvSGl2ZU1ldGFTdG9yZUJyaWRnZS5odG1sIGIvaGl2ZS9zY2FsYWRvY3Mvb3JnL2FwYWNoZS9hdGxhcy9oaXZlL2JyaWRnZS9IaXZlTWV0YVN0b3JlQnJpZGdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNTQzMDc0OQotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9icmlkZ2UvSGl2ZU1ldGFTdG9yZUJyaWRnZS5odG1sCkBAIC0wLDAgKzEsNTgxIEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgIDx0aXRsZT5IaXZlTWV0YVN0b3JlQnJpZGdlIC0gQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNi1pbmN1YmF0aW5nLVNOQVBTSE9UIEFQSSAtIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UuSGl2ZU1ldGFTdG9yZUJyaWRnZTwvdGl0bGU+CisgICAgICAgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkhpdmVNZXRhU3RvcmVCcmlkZ2UgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IC0gaW5jdWJhdGluZyAtIFNOQVBTSE9UIEFQSSAtIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UuSGl2ZU1ldGFTdG9yZUJyaWRnZSIgLz4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iSGl2ZU1ldGFTdG9yZUJyaWRnZSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IGluY3ViYXRpbmcgU05BUFNIT1QgQVBJIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UuSGl2ZU1ldGFTdG9yZUJyaWRnZSIgLz4KKyAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KKyAgICAgICAgICAKKyAgICAgIDxsaW5rIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2xpYi90ZW1wbGF0ZS5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+CisgICAgICA8bGluayBocmVmPSIuLi8uLi8uLi8uLi8uLi9saWIvZGlhZ3JhbXMuY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBpZD0iZGlhZ3JhbXMtY3NzIiAvPgorICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICAgaWYodG9wID09PSBzZWxmKSB7CisgICAgICAgICAgICB2YXIgdXJsID0gJy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwnOworICAgICAgICAgICAgdmFyIGhhc2ggPSAnb3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlJzsKKyAgICAgICAgICAgIHZhciBhbmNob3IgPSB3aW5kb3cubG9jYXRpb24uaGFzaDsKKyAgICAgICAgICAgIHZhciBhbmNob3Jfb3B0ID0gJyc7CisgICAgICAgICAgICBpZiAoYW5jaG9yLmxlbmd0aCA+PSAxKQorICAgICAgICAgICAgICBhbmNob3Jfb3B0ID0gJ0AnICsgYW5jaG9yLnN1YnN0cmluZygxKTsKKyAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsICsgJyMnICsgaGFzaCArIGFuY2hvcl9vcHQ7CisgICAgICAgICB9CisgICAJICA8L3NjcmlwdD4KKyAgICAKKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keSBjbGFzcz0idHlwZSI+CisgICAgICA8ZGl2IGlkPSJkZWZpbml0aW9uIj4KKyAgICAgICAgPGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi9jbGFzc19iaWcucG5nIiAvPgorICAgICAgICA8cCBpZD0ib3duZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnIj5vcmc8L2E+LjxhIGhyZWY9Ii4uLy4uLy4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZSI+YXBhY2hlPC9hPi48YSBocmVmPSIuLi8uLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMiPmF0bGFzPC9hPi48YSBocmVmPSIuLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZSI+aGl2ZTwvYT4uPGEgaHJlZj0icGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlIj5icmlkZ2U8L2E+PC9wPgorICAgICAgICA8aDE+SGl2ZU1ldGFTdG9yZUJyaWRnZTwvaDE+CisgICAgICA8L2Rpdj4KKworICAgICAgPGg0IGlkPSJzaWduYXR1cmUiIGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmNsYXNzPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5IaXZlTWV0YVN0b3JlQnJpZGdlPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPiBleHRlbmRzIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICAgICAgICA8ZGl2IGlkPSJjb21tZW50IiBjbGFzcz0iZnVsbGNvbW1lbnR0b3AiPjxkaXYgY2xhc3M9InRvZ2dsZUNvbnRhaW5lciBibG9jayI+CisgICAgICAgICAgPHNwYW4gY2xhc3M9InRvZ2dsZSI+TGluZWFyIFN1cGVydHlwZXM8L3NwYW4+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic3VwZXJUeXBlcyBoaWRkZW5Db250ZW50Ij48c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnlSZWYiPkFueVJlZjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvZGl2PgorICAgICAgICA8L2Rpdj48L2Rpdj4KKyAgICAgICAgCisKKyAgICAgIDxkaXYgaWQ9Im1icnNlbCI+CisgICAgICAgIDxkaXYgaWQ9InRleHRmaWx0ZXIiPjxzcGFuIGNsYXNzPSJwcmUiPjwvc3Bhbj48c3BhbiBjbGFzcz0iaW5wdXQiPjxpbnB1dCBpZD0ibWJyc2VsLWlucHV0IiB0eXBlPSJ0ZXh0IiBhY2Nlc3NrZXk9Ii8iIC8+PC9zcGFuPjxzcGFuIGNsYXNzPSJwb3N0Ij48L3NwYW4+PC9kaXY+CisgICAgICAgIDxkaXYgaWQ9Im9yZGVyIj4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbHRlcnR5cGUiPk9yZGVyaW5nPC9zcGFuPgorICAgICAgICAgICAgICA8b2w+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJhbHBoYSBpbiI+PHNwYW4+QWxwaGFiZXRpYzwvc3Bhbj48L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaW5oZXJpdCBvdXQiPjxzcGFuPkJ5IGluaGVyaXRhbmNlPC9zcGFuPjwvbGk+CisgICAgICAgICAgICAgIDwvb2w+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0iYW5jZXN0b3JzIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+SW5oZXJpdGVkPGJyIC8+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDxvbCBpZD0ibGluZWFyaXphdGlvbiI+CisgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImluIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UiPjxzcGFuPkhpdmVNZXRhU3RvcmVCcmlkZ2U8L3NwYW4+PC9saT48bGkgY2xhc3M9ImluIiBuYW1lPSJzY2FsYS5BbnlSZWYiPjxzcGFuPkFueVJlZjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iaW4iIG5hbWU9InNjYWxhLkFueSI+PHNwYW4+QW55PC9zcGFuPjwvbGk+CisgICAgICAgICAgICAgICAgPC9vbD4KKyAgICAgICAgICAgICAgPC9kaXY+PGRpdiBpZD0iYW5jZXN0b3JzIj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWx0ZXJ0eXBlIj48L3NwYW4+CisgICAgICAgICAgICA8b2w+CisgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaGlkZWFsbCBvdXQiPjxzcGFuPkhpZGUgQWxsPC9zcGFuPjwvbGk+CisgICAgICAgICAgICAgIDxsaSBjbGFzcz0ic2hvd2FsbCBpbiI+PHNwYW4+U2hvdyBhbGw8L3NwYW4+PC9saT4KKyAgICAgICAgICAgIDwvb2w+CisgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vZG9jcy5zY2FsYS1sYW5nLm9yZy9vdmVydmlld3Mvc2NhbGFkb2MvdXNhZ2UuaHRtbCNtZW1iZXJzIiB0YXJnZXQ9Il9ibGFuayI+TGVhcm4gbW9yZSBhYm91dCBtZW1iZXIgc2VsZWN0aW9uPC9hPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJ2aXNibCI+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+VmlzaWJpbGl0eTwvc3Bhbj4KKyAgICAgICAgICAgIDxvbD48bGkgY2xhc3M9InB1YmxpYyBpbiI+PHNwYW4+UHVibGljPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJhbGwgb3V0Ij48c3Bhbj5BbGw8L3NwYW4+PC9saT48L29sPgorICAgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRlbXBsYXRlIj4KKyAgICAgICAgPGRpdiBpZD0iYWxsTWVtYmVycyI+CisgICAgICAgIDxkaXYgaWQ9ImNvbnN0cnVjdG9ycyIgY2xhc3M9Im1lbWJlcnMiPgorICAgICAgICAgICAgICA8aDM+SW5zdGFuY2UgQ29uc3RydWN0b3JzPC9oMz4KKyAgICAgICAgICAgICAgPG9sPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UjJmx0O2luaXQmZ3Q7IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSImbHQ7aW5pdCZndDsoaGl2ZUNvbmY6b3JnLmFwYWNoZS5oYWRvb3AuaGl2ZS5jb25mLkhpdmVDb25mLGRvQXNVc2VyOlN0cmluZyx1Z2k6b3JnLmFwYWNoZS5oYWRvb3Auc2VjdXJpdHkuVXNlckdyb3VwSW5mb3JtYXRpb24pOm9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UuSGl2ZU1ldGFTdG9yZUJyaWRnZSI+PC9hPgorICAgICAgPGEgaWQ9IiZsdDtpbml0Jmd0OzpIaXZlTWV0YVN0b3JlQnJpZGdlIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+bmV3PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5IaXZlTWV0YVN0b3JlQnJpZGdlPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJoaXZlQ29uZiI+aGl2ZUNvbmY6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuaGFkb29wLmhpdmUuY29uZi5IaXZlQ29uZiI+SGl2ZUNvbmY8L3NwYW4+PC9zcGFuPiwgPHNwYW4gbmFtZT0iZG9Bc1VzZXIiPmRvQXNVc2VyOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuU3RyaW5nIj5TdHJpbmc8L3NwYW4+PC9zcGFuPiwgPHNwYW4gbmFtZT0idWdpIj51Z2k6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuaGFkb29wLnNlY3VyaXR5LlVzZXJHcm91cEluZm9ybWF0aW9uIj5Vc2VyR3JvdXBJbmZvcm1hdGlvbjwvc3Bhbj48L3NwYW4+KTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UjJmx0O2luaXQmZ3Q7IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSImbHQ7aW5pdCZndDsoaGl2ZUNvbmY6b3JnLmFwYWNoZS5oYWRvb3AuaGl2ZS5jb25mLkhpdmVDb25mKTpvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UiPjwvYT4KKyAgICAgIDxhIGlkPSImbHQ7aW5pdCZndDs6SGl2ZU1ldGFTdG9yZUJyaWRnZSI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPm5ldzwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+SGl2ZU1ldGFTdG9yZUJyaWRnZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iaGl2ZUNvbmYiPmhpdmVDb25mOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLmNvbmYuSGl2ZUNvbmYiPkhpdmVDb25mPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PC9vbD4KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgIAorCisgICAgICAgIAorCisgICAgICAgIDxkaXYgaWQ9InZhbHVlcyIgY2xhc3M9InZhbHVlcyBtZW1iZXJzIj4KKyAgICAgICAgICAgICAgPGgzPlZhbHVlIE1lbWJlcnM8L2gzPgorICAgICAgICAgICAgICA8b2w+PGxpIG5hbWU9InNjYWxhLkFueVJlZiMhPSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IiE9KHgkMTpBbnlSZWYpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSIhPShBbnlSZWYpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gdGl0bGU9Imd0NHM6ICRiYW5nJGVxIiBjbGFzcz0ibmFtZSI+IT08L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55IyE9IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iIT0oeCQxOkFueSk6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9IiE9KEFueSk6Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiB0aXRsZT0iZ3Q0czogJGJhbmckZXEiIGNsYXNzPSJuYW1lIj4hPTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55Ij5Bbnk8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjIyMiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSIjIygpOkludCI+PC9hPgorICAgICAgPGEgaWQ9IiMjKCk6SW50Ij48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIHRpdGxlPSJndDRzOiAkaGFzaCRoYXNoIiBjbGFzcz0ibmFtZSI+IyM8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5JbnQiPkludDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWYg4oaSIEFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjPT0iIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSI9PSh4JDE6QW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0iPT0oQW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIHRpdGxlPSJndDRzOiAkZXEkZXEiIGNsYXNzPSJuYW1lIj49PTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnkjPT0iIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSI9PSh4JDE6QW55KTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0iPT0oQW55KTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIHRpdGxlPSJndDRzOiAkZXEkZXEiIGNsYXNzPSJuYW1lIj49PTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55Ij5Bbnk8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnkjYXNJbnN0YW5jZU9mIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iYXNJbnN0YW5jZU9mW1QwXTpUMCI+PC9hPgorICAgICAgPGEgaWQ9ImFzSW5zdGFuY2VPZltUMF06VDAiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmFzSW5zdGFuY2VPZjwvc3Bhbj48c3BhbiBjbGFzcz0idHBhcmFtcyI+WzxzcGFuIG5hbWU9IlQwIj5UMDwvc3Bhbj5dPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55LmFzSW5zdGFuY2VPZi5UMCI+VDA8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55PC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNjbG9uZSIgdmlzYmw9InBydCIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImNsb25lKCk6T2JqZWN0Ij48L2E+CisgICAgICA8YSBpZD0iY2xvbmUoKTpBbnlSZWYiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmNsb25lPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+QXR0cmlidXRlczwvZHQ+PGRkPnByb3RlY3RlZFs8YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9qYXZhJGxhbmcuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5sYW5nIj5qYXZhLmxhbmc8L2E+XSA8L2RkPjxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjxkdD5Bbm5vdGF0aW9uczwvZHQ+PGRkPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5AdGhyb3dzPC9zcGFuPjxzcGFuIGNsYXNzPSJhcmdzIj4oPHNwYW4+CisgICAgICAKKyAgICAgIDxzcGFuIGNsYXNzPSJkZWZ2YWwiIG5hbWU9ImNsYXNzT2ZbamF2YS5sYW5nLkNsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uXSI+Li4uPC9zcGFuPgorICAgIDwvc3Bhbj4pPC9zcGFuPgorICAgICAgICAgICAgICAKKyAgICAgICAgPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UuSGl2ZU1ldGFTdG9yZUJyaWRnZSNjcmVhdGVJbnN0YW5jZSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iY3JlYXRlSW5zdGFuY2UocmVmZXJlbmNlYWJsZTpvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0uUmVmZXJlbmNlYWJsZSk6b3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLlJlZmVyZW5jZWFibGUiPjwvYT4KKyAgICAgIDxhIGlkPSJjcmVhdGVJbnN0YW5jZShSZWZlcmVuY2VhYmxlKTpSZWZlcmVuY2VhYmxlIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5jcmVhdGVJbnN0YW5jZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0icmVmZXJlbmNlYWJsZSI+cmVmZXJlbmNlYWJsZTogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLlJlZmVyZW5jZWFibGUiPlJlZmVyZW5jZWFibGU8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0uUmVmZXJlbmNlYWJsZSI+UmVmZXJlbmNlYWJsZTwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI2VxIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iZXEoeCQxOkFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9ImVxKEFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+ZXE8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI2VxdWFscyIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImVxdWFscyh4JDE6QW55KTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0iZXF1YWxzKEFueSk6Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+ZXF1YWxzPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJhcmcwIj5hcmcwOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnkiPkFueTwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkJvb2xlYW4iPkJvb2xlYW48L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI2ZpbmFsaXplIiB2aXNibD0icHJ0IiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iZmluYWxpemUoKTpVbml0Ij48L2E+CisgICAgICA8YSBpZD0iZmluYWxpemUoKTpVbml0Ij48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5maW5hbGl6ZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+QXR0cmlidXRlczwvZHQ+PGRkPnByb3RlY3RlZFs8YSBocmVmPSIuLi8uLi8uLi8uLi8uLi9qYXZhJGxhbmcuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5sYW5nIj5qYXZhLmxhbmc8L2E+XSA8L2RkPjxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjxkdD5Bbm5vdGF0aW9uczwvZHQ+PGRkPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5AdGhyb3dzPC9zcGFuPjxzcGFuIGNsYXNzPSJhcmdzIj4oPHNwYW4+CisgICAgICAKKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPmNsYXNzT2ZbamF2YS5sYW5nLlRocm93YWJsZV08L3NwYW4+CisgICAgPC9zcGFuPik8L3NwYW4+CisgICAgICAgICAgICAgIAorICAgICAgICA8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlI2dldEF0bGFzQ2xpZW50IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJnZXRBdGxhc0NsaWVudCgpOm9yZy5hcGFjaGUuYXRsYXMuQXRsYXNDbGllbnQiPjwvYT4KKyAgICAgIDxhIGlkPSJnZXRBdGxhc0NsaWVudCgpOkF0bGFzQ2xpZW50Ij48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5nZXRBdGxhc0NsaWVudDwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuQXRsYXNDbGllbnQiPkF0bGFzQ2xpZW50PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjZ2V0Q2xhc3MiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJnZXRDbGFzcygpOkNsYXNzW19dIj48L2E+CisgICAgICA8YSBpZD0iZ2V0Q2xhc3MoKTpDbGFzc1tfXSI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+Z2V0Q2xhc3M8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuQ2xhc3MiPkNsYXNzPC9zcGFuPltfXTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZiDihpIgQW55PC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5icmlkZ2UuSGl2ZU1ldGFTdG9yZUJyaWRnZSNnZXRQcm9jZXNzUmVmZXJlbmNlIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJnZXRQcm9jZXNzUmVmZXJlbmNlKHF1ZXJ5U3RyOlN0cmluZyk6b3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLlJlZmVyZW5jZWFibGUiPjwvYT4KKyAgICAgIDxhIGlkPSJnZXRQcm9jZXNzUmVmZXJlbmNlKFN0cmluZyk6UmVmZXJlbmNlYWJsZSI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+Z2V0UHJvY2Vzc1JlZmVyZW5jZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0icXVlcnlTdHIiPnF1ZXJ5U3RyOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuU3RyaW5nIj5TdHJpbmc8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0uUmVmZXJlbmNlYWJsZSI+UmVmZXJlbmNlYWJsZTwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI2hhc2hDb2RlIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iaGFzaENvZGUoKTpJbnQiPjwvYT4KKyAgICAgIDxhIGlkPSJoYXNoQ29kZSgpOkludCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+aGFzaENvZGU8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5JbnQiPkludDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWYg4oaSIEFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UjaW1wb3J0SGl2ZU1ldGFkYXRhIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJpbXBvcnRIaXZlTWV0YWRhdGEoKTpVbml0Ij48L2E+CisgICAgICA8YSBpZD0iaW1wb3J0SGl2ZU1ldGFkYXRhKCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+aW1wb3J0SGl2ZU1ldGFkYXRhPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55I2lzSW5zdGFuY2VPZiIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImlzSW5zdGFuY2VPZltUMF06Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9ImlzSW5zdGFuY2VPZltUMF06Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+aXNJbnN0YW5jZU9mPC9zcGFuPjxzcGFuIGNsYXNzPSJ0cGFyYW1zIj5bPHNwYW4gbmFtZT0iVDAiPlQwPC9zcGFuPl08L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjbmUiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJuZSh4JDE6QW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0ibmUoQW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5uZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjbm90aWZ5IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0ibm90aWZ5KCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9Im5vdGlmeSgpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPm5vdGlmeTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNub3RpZnlBbGwiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJub3RpZnlBbGwoKTpVbml0Ij48L2E+CisgICAgICA8YSBpZD0ibm90aWZ5QWxsKCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+bm90aWZ5QWxsPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlI3JlZ2lzdGVyRGF0YWJhc2UiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9InJlZ2lzdGVyRGF0YWJhc2UoZGF0YWJhc2VOYW1lOlN0cmluZyk6b3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLlJlZmVyZW5jZWFibGUiPjwvYT4KKyAgICAgIDxhIGlkPSJyZWdpc3RlckRhdGFiYXNlKFN0cmluZyk6UmVmZXJlbmNlYWJsZSI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+cmVnaXN0ZXJEYXRhYmFzZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iZGF0YWJhc2VOYW1lIj5kYXRhYmFzZU5hbWU6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5TdHJpbmciPlN0cmluZzwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS5SZWZlcmVuY2VhYmxlIj5SZWZlcmVuY2VhYmxlPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UjcmVnaXN0ZXJIaXZlRGF0YU1vZGVsIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJyZWdpc3RlckhpdmVEYXRhTW9kZWwoKTpVbml0Ij48L2E+CisgICAgICA8YSBpZD0icmVnaXN0ZXJIaXZlRGF0YU1vZGVsKCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+cmVnaXN0ZXJIaXZlRGF0YU1vZGVsPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlI3JlZ2lzdGVyUGFydGl0aW9uIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJyZWdpc3RlclBhcnRpdGlvbihwYXJ0aXRpb246b3JnLmFwYWNoZS5oYWRvb3AuaGl2ZS5xbC5tZXRhZGF0YS5QYXJ0aXRpb24pOm9yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS5SZWZlcmVuY2VhYmxlIj48L2E+CisgICAgICA8YSBpZD0icmVnaXN0ZXJQYXJ0aXRpb24oUGFydGl0aW9uKTpSZWZlcmVuY2VhYmxlIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5yZWdpc3RlclBhcnRpdGlvbjwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0icGFydGl0aW9uIj5wYXJ0aXRpb246IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuaGFkb29wLmhpdmUucWwubWV0YWRhdGEuUGFydGl0aW9uIj5QYXJ0aXRpb248L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0uUmVmZXJlbmNlYWJsZSI+UmVmZXJlbmNlYWJsZTwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5IaXZlTWV0YVN0b3JlQnJpZGdlI3JlZ2lzdGVyVGFibGUiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9InJlZ2lzdGVyVGFibGUoZGJSZWZlcmVuY2U6b3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLlJlZmVyZW5jZWFibGUsZGJOYW1lOlN0cmluZyx0YWJsZU5hbWU6U3RyaW5nKTpvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0uUmVmZXJlbmNlYWJsZSI+PC9hPgorICAgICAgPGEgaWQ9InJlZ2lzdGVyVGFibGUoUmVmZXJlbmNlYWJsZSxTdHJpbmcsU3RyaW5nKTpSZWZlcmVuY2VhYmxlIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5yZWdpc3RlclRhYmxlPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJkYlJlZmVyZW5jZSI+ZGJSZWZlcmVuY2U6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS5SZWZlcmVuY2VhYmxlIj5SZWZlcmVuY2VhYmxlPC9zcGFuPjwvc3Bhbj4sIDxzcGFuIG5hbWU9ImRiTmFtZSI+ZGJOYW1lOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuU3RyaW5nIj5TdHJpbmc8L3NwYW4+PC9zcGFuPiwgPHNwYW4gbmFtZT0idGFibGVOYW1lIj50YWJsZU5hbWU6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5TdHJpbmciPlN0cmluZzwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS5SZWZlcmVuY2VhYmxlIj5SZWZlcmVuY2VhYmxlPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UjcmVnaXN0ZXJUYWJsZSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0icmVnaXN0ZXJUYWJsZShkYk5hbWU6U3RyaW5nLHRhYmxlTmFtZTpTdHJpbmcpOm9yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS5SZWZlcmVuY2VhYmxlIj48L2E+CisgICAgICA8YSBpZD0icmVnaXN0ZXJUYWJsZShTdHJpbmcsU3RyaW5nKTpSZWZlcmVuY2VhYmxlIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5yZWdpc3RlclRhYmxlPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJkYk5hbWUiPmRiTmFtZTogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5sYW5nLlN0cmluZyI+U3RyaW5nPC9zcGFuPjwvc3Bhbj4sIDxzcGFuIG5hbWU9InRhYmxlTmFtZSI+dGFibGVOYW1lOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuU3RyaW5nIj5TdHJpbmc8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0uUmVmZXJlbmNlYWJsZSI+UmVmZXJlbmNlYWJsZTwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI3N5bmNocm9uaXplZCIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9InN5bmNocm9uaXplZFtUMF0oeCQxOj0mZ3Q7VDApOlQwIj48L2E+CisgICAgICA8YSBpZD0ic3luY2hyb25pemVkW1QwXSjih5JUMCk6VDAiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnN5bmNocm9uaXplZDwvc3Bhbj48c3BhbiBjbGFzcz0idHBhcmFtcyI+WzxzcGFuIG5hbWU9IlQwIj5UMDwvc3Bhbj5dPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJhcmcwIj5hcmcwOiDih5IgPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5sYW5nLkFueVJlZi5zeW5jaHJvbml6ZWQuVDAiPlQwPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5sYW5nLkFueVJlZi5zeW5jaHJvbml6ZWQuVDAiPlQwPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjdG9TdHJpbmciIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJ0b1N0cmluZygpOlN0cmluZyI+PC9hPgorICAgICAgPGEgaWQ9InRvU3RyaW5nKCk6U3RyaW5nIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj50b1N0cmluZzwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5TdHJpbmciPlN0cmluZzwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWYg4oaSIEFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UjdXBkYXRlVGFibGUiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9InVwZGF0ZVRhYmxlKHRhYmxlUmVmZXJlbmNlYWJsZTpvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0uUmVmZXJlbmNlYWJsZSxuZXdUYWJsZTpvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLm1ldGFkYXRhLlRhYmxlKTpVbml0Ij48L2E+CisgICAgICA8YSBpZD0idXBkYXRlVGFibGUoUmVmZXJlbmNlYWJsZSxUYWJsZSk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+dXBkYXRlVGFibGU8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9InRhYmxlUmVmZXJlbmNlYWJsZSI+dGFibGVSZWZlcmVuY2VhYmxlOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0uUmVmZXJlbmNlYWJsZSI+UmVmZXJlbmNlYWJsZTwvc3Bhbj48L3NwYW4+LCA8c3BhbiBuYW1lPSJuZXdUYWJsZSI+bmV3VGFibGU6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuaGFkb29wLmhpdmUucWwubWV0YWRhdGEuVGFibGUiPlRhYmxlPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI3dhaXQiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJ3YWl0KCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9IndhaXQoKTpVbml0Ij48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj53YWl0PC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjxkdD5Bbm5vdGF0aW9uczwvZHQ+PGRkPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5AdGhyb3dzPC9zcGFuPjxzcGFuIGNsYXNzPSJhcmdzIj4oPHNwYW4+CisgICAgICAKKyAgICAgIDxzcGFuIGNsYXNzPSJkZWZ2YWwiIG5hbWU9ImNsYXNzT2ZbamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uXSI+Li4uPC9zcGFuPgorICAgIDwvc3Bhbj4pPC9zcGFuPgorICAgICAgICAgICAgICAKKyAgICAgICAgPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiN3YWl0IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0id2FpdCh4JDE6TG9uZyx4JDI6SW50KTpVbml0Ij48L2E+CisgICAgICA8YSBpZD0id2FpdChMb25nLEludCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+d2FpdDwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuTG9uZyI+TG9uZzwvc3Bhbj48L3NwYW4+LCA8c3BhbiBuYW1lPSJhcmcxIj5hcmcxOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5JbnQiPkludDwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48ZHQ+QW5ub3RhdGlvbnM8L2R0PjxkZD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+QHRocm93czwvc3Bhbj48c3BhbiBjbGFzcz0iYXJncyI+KDxzcGFuPgorICAgICAgCisgICAgICA8c3BhbiBjbGFzcz0iZGVmdmFsIiBuYW1lPSJjbGFzc09mW2phdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbl0iPi4uLjwvc3Bhbj4KKyAgICA8L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgICAgICAgCisgICAgICAgIDwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjd2FpdCIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IndhaXQoeCQxOkxvbmcpOlVuaXQiPjwvYT4KKyAgICAgIDxhIGlkPSJ3YWl0KExvbmcpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPndhaXQ8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkxvbmciPkxvbmc8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Vbml0Ij5Vbml0PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PGR0PkFubm90YXRpb25zPC9kdD48ZGQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPkB0aHJvd3M8L3NwYW4+PHNwYW4gY2xhc3M9ImFyZ3MiPig8c3Bhbj4KKyAgICAgIAorICAgICAgPHNwYW4gY2xhc3M9ImRlZnZhbCIgbmFtZT0iY2xhc3NPZltqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb25dIj4uLi48L3NwYW4+CisgICAgPC9zcGFuPik8L3NwYW4+CisgICAgICAgICAgICAgIAorICAgICAgICA8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48L29sPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgCisKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9ImluaGVyaXRlZE1lbWJlcnMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwYXJlbnQiIG5hbWU9InNjYWxhLkFueVJlZiI+CisgICAgICAgICAgICAgIDxoMz5Jbmhlcml0ZWQgZnJvbSA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnlSZWYiPkFueVJlZjwvc3Bhbj48L2gzPgorICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzcz0icGFyZW50IiBuYW1lPSJzY2FsYS5BbnkiPgorICAgICAgICAgICAgICA8aDM+SW5oZXJpdGVkIGZyb20gPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55Ij5Bbnk8L3NwYW4+PC9oMz4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0iZ3JvdXBlZE1lbWJlcnMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJncm91cCIgbmFtZT0iVW5ncm91cGVkIj4KKyAgICAgICAgICAgICAgPGgzPlVuZ3JvdXBlZDwvaDM+CisgICAgICAgICAgICAgIAorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorCisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0idG9vbHRpcCI+PC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImZvb3RlciI+ICA8L2Rpdj4KKyAgICAgIDxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL2pxdWVyeS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9ImpxdWVyeS11aS1qcyIgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvanF1ZXJ5LXVpLmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0idG9vbHMtdG9vbHRpcC1qcyIgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvdG9vbHMudG9vbHRpcC5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRlbXBsYXRlLWpzIiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi90ZW1wbGF0ZS5qcyI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9icmlkZ2UvcGFja2FnZS5odG1sIGIvaGl2ZS9zY2FsYWRvY3Mvb3JnL2FwYWNoZS9hdGxhcy9oaXZlL2JyaWRnZS9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTc0MDUxYQotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9icmlkZ2UvcGFja2FnZS5odG1sCkBAIC0wLDAgKzEsMTA1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgIDx0aXRsZT5icmlkZ2UgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42LWluY3ViYXRpbmctU05BUFNIT1QgQVBJIC0gb3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZTwvdGl0bGU+CisgICAgICAgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9ImJyaWRnZSAtIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYgLSBpbmN1YmF0aW5nIC0gU05BUFNIT1QgQVBJIC0gb3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZSIgLz4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iYnJpZGdlIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYgaW5jdWJhdGluZyBTTkFQU0hPVCBBUEkgb3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZSIgLz4KKyAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KKyAgICAgICAgICAKKyAgICAgIDxsaW5rIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2xpYi90ZW1wbGF0ZS5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+CisgICAgICA8bGluayBocmVmPSIuLi8uLi8uLi8uLi8uLi9saWIvZGlhZ3JhbXMuY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBpZD0iZGlhZ3JhbXMtY3NzIiAvPgorICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICAgaWYodG9wID09PSBzZWxmKSB7CisgICAgICAgICAgICB2YXIgdXJsID0gJy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwnOworICAgICAgICAgICAgdmFyIGhhc2ggPSAnb3JnLmFwYWNoZS5hdGxhcy5oaXZlLmJyaWRnZS5wYWNrYWdlJzsKKyAgICAgICAgICAgIHZhciBhbmNob3IgPSB3aW5kb3cubG9jYXRpb24uaGFzaDsKKyAgICAgICAgICAgIHZhciBhbmNob3Jfb3B0ID0gJyc7CisgICAgICAgICAgICBpZiAoYW5jaG9yLmxlbmd0aCA+PSAxKQorICAgICAgICAgICAgICBhbmNob3Jfb3B0ID0gJ0AnICsgYW5jaG9yLnN1YnN0cmluZygxKTsKKyAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsICsgJyMnICsgaGFzaCArIGFuY2hvcl9vcHQ7CisgICAgICAgICB9CisgICAJICA8L3NjcmlwdD4KKyAgICAKKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keSBjbGFzcz0idmFsdWUiPgorICAgICAgPGRpdiBpZD0iZGVmaW5pdGlvbiI+CisgICAgICAgIDxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvcGFja2FnZV9iaWcucG5nIiAvPgorICAgICAgICA8cCBpZD0ib3duZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnIj5vcmc8L2E+LjxhIGhyZWY9Ii4uLy4uLy4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZSI+YXBhY2hlPC9hPi48YSBocmVmPSIuLi8uLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMiPmF0bGFzPC9hPi48YSBocmVmPSIuLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZSI+aGl2ZTwvYT48L3A+CisgICAgICAgIDxoMT5icmlkZ2U8L2gxPgorICAgICAgPC9kaXY+CisKKyAgICAgIDxoNCBpZD0ic2lnbmF0dXJlIiBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5wYWNrYWdlPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5icmlkZ2U8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgICAgICAgPGRpdiBpZD0iY29tbWVudCIgY2xhc3M9ImZ1bGxjb21tZW50dG9wIj48L2Rpdj4KKyAgICAgICAgCisKKyAgICAgIDxkaXYgaWQ9Im1icnNlbCI+CisgICAgICAgIDxkaXYgaWQ9InRleHRmaWx0ZXIiPjxzcGFuIGNsYXNzPSJwcmUiPjwvc3Bhbj48c3BhbiBjbGFzcz0iaW5wdXQiPjxpbnB1dCBpZD0ibWJyc2VsLWlucHV0IiB0eXBlPSJ0ZXh0IiBhY2Nlc3NrZXk9Ii8iIC8+PC9zcGFuPjxzcGFuIGNsYXNzPSJwb3N0Ij48L3NwYW4+PC9kaXY+CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgPGRpdiBpZD0idmlzYmwiPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbHRlcnR5cGUiPlZpc2liaWxpdHk8L3NwYW4+CisgICAgICAgICAgICA8b2w+PGxpIGNsYXNzPSJwdWJsaWMgaW4iPjxzcGFuPlB1YmxpYzwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iYWxsIG91dCI+PHNwYW4+QWxsPC9zcGFuPjwvbGk+PC9vbD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJ0ZW1wbGF0ZSI+CisgICAgICAgIDxkaXYgaWQ9ImFsbE1lbWJlcnMiPgorICAgICAgICAKKworICAgICAgICA8ZGl2IGlkPSJ0eXBlcyIgY2xhc3M9InR5cGVzIG1lbWJlcnMiPgorICAgICAgICAgICAgICA8aDM+VHlwZSBNZW1iZXJzPC9oMz4KKyAgICAgICAgICAgICAgPG9sPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlLkhpdmVNZXRhU3RvcmVCcmlkZ2UiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IkhpdmVNZXRhU3RvcmVCcmlkZ2VleHRlbmRzT2JqZWN0Ij48L2E+CisgICAgICA8YSBpZD0iSGl2ZU1ldGFTdG9yZUJyaWRnZTpIaXZlTWV0YVN0b3JlQnJpZGdlIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+Y2xhc3M8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPGEgaHJlZj0iSGl2ZU1ldGFTdG9yZUJyaWRnZS5odG1sIj48c3BhbiBjbGFzcz0ibmFtZSI+SGl2ZU1ldGFTdG9yZUJyaWRnZTwvc3Bhbj48L2E+PHNwYW4gY2xhc3M9InJlc3VsdCI+IGV4dGVuZHMgPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PC9vbD4KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgIAorCisgICAgICAgIAorCisgICAgICAgIAorCisgICAgICAgIAorICAgICAgICA8L2Rpdj4KKworICAgICAgICA8ZGl2IGlkPSJpbmhlcml0ZWRNZW1iZXJzIj4KKyAgICAgICAgCisgICAgICAgIAorICAgICAgICA8L2Rpdj4KKworICAgICAgICA8ZGl2IGlkPSJncm91cGVkTWVtYmVycyI+CisgICAgICAgIDxkaXYgY2xhc3M9Imdyb3VwIiBuYW1lPSJVbmdyb3VwZWQiPgorICAgICAgICAgICAgICA8aDM+VW5ncm91cGVkPC9oMz4KKyAgICAgICAgICAgICAgCisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisKKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJ0b29sdGlwIj48L2Rpdj4KKworICAgICAgPGRpdiBpZD0iZm9vdGVyIj4gIDwvZGl2PgorICAgICAgPHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9ImpxdWVyeS1qcyIgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvanF1ZXJ5LmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0ianF1ZXJ5LXVpLWpzIiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi9qcXVlcnktdWkuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJ0b29scy10b29sdGlwLWpzIiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi90b29scy50b29sdGlwLmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0idGVtcGxhdGUtanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL3RlbXBsYXRlLmpzIj48L3NjcmlwdD4KKyAgICA8L2JvZHk+CisgICAgICA8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvaGl2ZS9zY2FsYWRvY3Mvb3JnL2FwYWNoZS9hdGxhcy9oaXZlL2hvb2svSGl2ZUhvb2suaHRtbCBiL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9ob29rL0hpdmVIb29rLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmIwYTVkNAotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9ob29rL0hpdmVIb29rLmh0bWwKQEAgLTAsMCArMSw0NTUgQEAKKzw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDExL0RURC94aHRtbDExLmR0ZCI+Cis8aHRtbD4KKyAgICAgICAgPGhlYWQ+CisgICAgICAgICAgPHRpdGxlPkhpdmVIb29rIC0gQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNi1pbmN1YmF0aW5nLVNOQVBTSE9UIEFQSSAtIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rLkhpdmVIb29rPC90aXRsZT4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iSGl2ZUhvb2sgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IC0gaW5jdWJhdGluZyAtIFNOQVBTSE9UIEFQSSAtIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rLkhpdmVIb29rIiAvPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJIaXZlSG9vayBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IGluY3ViYXRpbmcgU05BUFNIT1QgQVBJIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rLkhpdmVIb29rIiAvPgorICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgorICAgICAgICAgIAorICAgICAgPGxpbmsgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbGliL3RlbXBsYXRlLmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxsaW5rIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2xpYi9kaWFncmFtcy5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGlkPSJkaWFncmFtcy1jc3MiIC8+CisgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgICBpZih0b3AgPT09IHNlbGYpIHsKKyAgICAgICAgICAgIHZhciB1cmwgPSAnLi4vLi4vLi4vLi4vLi4vaW5kZXguaHRtbCc7CisgICAgICAgICAgICB2YXIgaGFzaCA9ICdvcmcuYXBhY2hlLmF0bGFzLmhpdmUuaG9vay5IaXZlSG9vayc7CisgICAgICAgICAgICB2YXIgYW5jaG9yID0gd2luZG93LmxvY2F0aW9uLmhhc2g7CisgICAgICAgICAgICB2YXIgYW5jaG9yX29wdCA9ICcnOworICAgICAgICAgICAgaWYgKGFuY2hvci5sZW5ndGggPj0gMSkKKyAgICAgICAgICAgICAgYW5jaG9yX29wdCA9ICdAJyArIGFuY2hvci5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybCArICcjJyArIGhhc2ggKyBhbmNob3Jfb3B0OworICAgICAgICAgfQorICAgCSAgPC9zY3JpcHQ+CisgICAgCisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHkgY2xhc3M9InR5cGUiPgorICAgICAgPGRpdiBpZD0iZGVmaW5pdGlvbiI+CisgICAgICAgIDxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvY2xhc3NfYmlnLnBuZyIgLz4KKyAgICAgICAgPHAgaWQ9Im93bmVyIj48YSBocmVmPSIuLi8uLi8uLi8uLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZyI+b3JnPC9hPi48YSBocmVmPSIuLi8uLi8uLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUiPmFwYWNoZTwvYT4uPGEgaHJlZj0iLi4vLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzIj5hdGxhczwvYT4uPGEgaHJlZj0iLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUiPmhpdmU8L2E+LjxhIGhyZWY9InBhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmhvb2siPmhvb2s8L2E+PC9wPgorICAgICAgICA8aDE+SGl2ZUhvb2s8L2gxPgorICAgICAgPC9kaXY+CisKKyAgICAgIDxoNCBpZD0ic2lnbmF0dXJlIiBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5jbGFzczwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+SGl2ZUhvb2s8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+IGV4dGVuZHMgPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5oYWRvb3AuaGl2ZS5xbC5ob29rcy5FeGVjdXRlV2l0aEhvb2tDb250ZXh0Ij5FeGVjdXRlV2l0aEhvb2tDb250ZXh0PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICAgICAgICA8ZGl2IGlkPSJjb21tZW50IiBjbGFzcz0iZnVsbGNvbW1lbnR0b3AiPjxkaXYgY2xhc3M9InRvZ2dsZUNvbnRhaW5lciBibG9jayI+CisgICAgICAgICAgPHNwYW4gY2xhc3M9InRvZ2dsZSI+TGluZWFyIFN1cGVydHlwZXM8L3NwYW4+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic3VwZXJUeXBlcyBoaWRkZW5Db250ZW50Ij48c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLmhvb2tzLkV4ZWN1dGVXaXRoSG9va0NvbnRleHQiPkV4ZWN1dGVXaXRoSG9va0NvbnRleHQ8L3NwYW4+LCA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLmhvb2tzLkhvb2siPkhvb2s8L3NwYW4+LCA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnlSZWYiPkFueVJlZjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvZGl2PgorICAgICAgICA8L2Rpdj48L2Rpdj4KKyAgICAgICAgCisKKyAgICAgIDxkaXYgaWQ9Im1icnNlbCI+CisgICAgICAgIDxkaXYgaWQ9InRleHRmaWx0ZXIiPjxzcGFuIGNsYXNzPSJwcmUiPjwvc3Bhbj48c3BhbiBjbGFzcz0iaW5wdXQiPjxpbnB1dCBpZD0ibWJyc2VsLWlucHV0IiB0eXBlPSJ0ZXh0IiBhY2Nlc3NrZXk9Ii8iIC8+PC9zcGFuPjxzcGFuIGNsYXNzPSJwb3N0Ij48L3NwYW4+PC9kaXY+CisgICAgICAgIDxkaXYgaWQ9Im9yZGVyIj4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbHRlcnR5cGUiPk9yZGVyaW5nPC9zcGFuPgorICAgICAgICAgICAgICA8b2w+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJhbHBoYSBpbiI+PHNwYW4+QWxwaGFiZXRpYzwvc3Bhbj48L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaW5oZXJpdCBvdXQiPjxzcGFuPkJ5IGluaGVyaXRhbmNlPC9zcGFuPjwvbGk+CisgICAgICAgICAgICAgIDwvb2w+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0iYW5jZXN0b3JzIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+SW5oZXJpdGVkPGJyIC8+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDxvbCBpZD0ibGluZWFyaXphdGlvbiI+CisgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImluIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuaG9vay5IaXZlSG9vayI+PHNwYW4+SGl2ZUhvb2s8L3NwYW4+PC9saT48bGkgY2xhc3M9ImluIiBuYW1lPSJvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLmhvb2tzLkV4ZWN1dGVXaXRoSG9va0NvbnRleHQiPjxzcGFuPkV4ZWN1dGVXaXRoSG9va0NvbnRleHQ8L3NwYW4+PC9saT48bGkgY2xhc3M9ImluIiBuYW1lPSJvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLmhvb2tzLkhvb2siPjxzcGFuPkhvb2s8L3NwYW4+PC9saT48bGkgY2xhc3M9ImluIiBuYW1lPSJzY2FsYS5BbnlSZWYiPjxzcGFuPkFueVJlZjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iaW4iIG5hbWU9InNjYWxhLkFueSI+PHNwYW4+QW55PC9zcGFuPjwvbGk+CisgICAgICAgICAgICAgICAgPC9vbD4KKyAgICAgICAgICAgICAgPC9kaXY+PGRpdiBpZD0iYW5jZXN0b3JzIj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWx0ZXJ0eXBlIj48L3NwYW4+CisgICAgICAgICAgICA8b2w+CisgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaGlkZWFsbCBvdXQiPjxzcGFuPkhpZGUgQWxsPC9zcGFuPjwvbGk+CisgICAgICAgICAgICAgIDxsaSBjbGFzcz0ic2hvd2FsbCBpbiI+PHNwYW4+U2hvdyBhbGw8L3NwYW4+PC9saT4KKyAgICAgICAgICAgIDwvb2w+CisgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vZG9jcy5zY2FsYS1sYW5nLm9yZy9vdmVydmlld3Mvc2NhbGFkb2MvdXNhZ2UuaHRtbCNtZW1iZXJzIiB0YXJnZXQ9Il9ibGFuayI+TGVhcm4gbW9yZSBhYm91dCBtZW1iZXIgc2VsZWN0aW9uPC9hPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJ2aXNibCI+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+VmlzaWJpbGl0eTwvc3Bhbj4KKyAgICAgICAgICAgIDxvbD48bGkgY2xhc3M9InB1YmxpYyBpbiI+PHNwYW4+UHVibGljPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJhbGwgb3V0Ij48c3Bhbj5BbGw8L3NwYW4+PC9saT48L29sPgorICAgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRlbXBsYXRlIj4KKyAgICAgICAgPGRpdiBpZD0iYWxsTWVtYmVycyI+CisgICAgICAgIDxkaXYgaWQ9ImNvbnN0cnVjdG9ycyIgY2xhc3M9Im1lbWJlcnMiPgorICAgICAgICAgICAgICA8aDM+SW5zdGFuY2UgQ29uc3RydWN0b3JzPC9oMz4KKyAgICAgICAgICAgICAgPG9sPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuaG9vay5IaXZlSG9vayMmbHQ7aW5pdCZndDsiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IiZsdDtpbml0Jmd0OygpOm9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rLkhpdmVIb29rIj48L2E+CisgICAgICA8YSBpZD0iJmx0O2luaXQmZ3Q7OkhpdmVIb29rIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+bmV3PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5IaXZlSG9vazwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjwvb2w+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAKKworICAgICAgICAKKworICAgICAgICA8ZGl2IGlkPSJ2YWx1ZXMiIGNsYXNzPSJ2YWx1ZXMgbWVtYmVycyI+CisgICAgICAgICAgICAgIDxoMz5WYWx1ZSBNZW1iZXJzPC9oMz4KKyAgICAgICAgICAgICAgPG9sPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjIT0iIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSIhPSh4JDE6QW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0iIT0oQW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIHRpdGxlPSJndDRzOiAkYmFuZyRlcSIgY2xhc3M9Im5hbWUiPiE9PC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJhcmcwIj5hcmcwOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnlSZWYiPkFueVJlZjwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkJvb2xlYW4iPkJvb2xlYW48L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueSMhPSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IiE9KHgkMTpBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSIhPShBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gdGl0bGU9Imd0NHM6ICRiYW5nJGVxIiBjbGFzcz0ibmFtZSI+IT08L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5Bbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmIyMjIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iIyMoKTpJbnQiPjwvYT4KKyAgICAgIDxhIGlkPSIjIygpOkludCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiB0aXRsZT0iZ3Q0czogJGhhc2gkaGFzaCIgY2xhc3M9Im5hbWUiPiMjPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuSW50Ij5JbnQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmIz09IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iPT0oeCQxOkFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9Ij09KEFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiB0aXRsZT0iZ3Q0czogJGVxJGVxIiBjbGFzcz0ibmFtZSI+PT08L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55Iz09IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iPT0oeCQxOkFueSk6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9Ij09KEFueSk6Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiB0aXRsZT0iZ3Q0czogJGVxJGVxIiBjbGFzcz0ibmFtZSI+PT08L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5Bbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55I2FzSW5zdGFuY2VPZiIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImFzSW5zdGFuY2VPZltUMF06VDAiPjwvYT4KKyAgICAgIDxhIGlkPSJhc0luc3RhbmNlT2ZbVDBdOlQwIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5hc0luc3RhbmNlT2Y8L3NwYW4+PHNwYW4gY2xhc3M9InRwYXJhbXMiPls8c3BhbiBuYW1lPSJUMCI+VDA8L3NwYW4+XTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueS5hc0luc3RhbmNlT2YuVDAiPlQwPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjY2xvbmUiIHZpc2JsPSJwcnQiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJjbG9uZSgpOk9iamVjdCI+PC9hPgorICAgICAgPGEgaWQ9ImNsb25lKCk6QW55UmVmIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5jbG9uZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkF0dHJpYnV0ZXM8L2R0PjxkZD5wcm90ZWN0ZWRbPGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vamF2YSRsYW5nLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZyI+amF2YS5sYW5nPC9hPl0gPC9kZD48ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48ZHQ+QW5ub3RhdGlvbnM8L2R0PjxkZD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+QHRocm93czwvc3Bhbj48c3BhbiBjbGFzcz0iYXJncyI+KDxzcGFuPgorICAgICAgCisgICAgICA8c3BhbiBjbGFzcz0iZGVmdmFsIiBuYW1lPSJjbGFzc09mW2phdmEubGFuZy5DbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbl0iPi4uLjwvc3Bhbj4KKyAgICA8L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgICAgICAgCisgICAgICAgIDwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjZXEiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJlcSh4JDE6QW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0iZXEoQW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5lcTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjZXF1YWxzIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iZXF1YWxzKHgkMTpBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSJlcXVhbHMoQW55KTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5lcXVhbHM8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWYg4oaSIEFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjZmluYWxpemUiIHZpc2JsPSJwcnQiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJmaW5hbGl6ZSgpOlVuaXQiPjwvYT4KKyAgICAgIDxhIGlkPSJmaW5hbGl6ZSgpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmZpbmFsaXplPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5BdHRyaWJ1dGVzPC9kdD48ZGQ+cHJvdGVjdGVkWzxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2phdmEkbGFuZy5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmciPmphdmEubGFuZzwvYT5dIDwvZGQ+PGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PGR0PkFubm90YXRpb25zPC9kdD48ZGQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPkB0aHJvd3M8L3NwYW4+PHNwYW4gY2xhc3M9ImFyZ3MiPig8c3Bhbj4KKyAgICAgIAorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+Y2xhc3NPZltqYXZhLmxhbmcuVGhyb3dhYmxlXTwvc3Bhbj4KKyAgICA8L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgICAgICAgCisgICAgICAgIDwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjZ2V0Q2xhc3MiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJnZXRDbGFzcygpOkNsYXNzW19dIj48L2E+CisgICAgICA8YSBpZD0iZ2V0Q2xhc3MoKTpDbGFzc1tfXSI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+Z2V0Q2xhc3M8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuQ2xhc3MiPkNsYXNzPC9zcGFuPltfXTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZiDihpIgQW55PC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNoYXNoQ29kZSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9Imhhc2hDb2RlKCk6SW50Ij48L2E+CisgICAgICA8YSBpZD0iaGFzaENvZGUoKTpJbnQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmhhc2hDb2RlPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuSW50Ij5JbnQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55I2lzSW5zdGFuY2VPZiIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImlzSW5zdGFuY2VPZltUMF06Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9ImlzSW5zdGFuY2VPZltUMF06Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+aXNJbnN0YW5jZU9mPC9zcGFuPjxzcGFuIGNsYXNzPSJ0cGFyYW1zIj5bPHNwYW4gbmFtZT0iVDAiPlQwPC9zcGFuPl08L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjbmUiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJuZSh4JDE6QW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0ibmUoQW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5uZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjbm90aWZ5IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0ibm90aWZ5KCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9Im5vdGlmeSgpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPm5vdGlmeTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNub3RpZnlBbGwiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJub3RpZnlBbGwoKTpVbml0Ij48L2E+CisgICAgICA8YSBpZD0ibm90aWZ5QWxsKCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+bm90aWZ5QWxsPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmhvb2suSGl2ZUhvb2sjcnVuIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0icnVuKGhvb2tDb250ZXh0Om9yZy5hcGFjaGUuaGFkb29wLmhpdmUucWwuaG9va3MuSG9va0NvbnRleHQpOlVuaXQiPjwvYT4KKyAgICAgIDxhIGlkPSJydW4oSG9va0NvbnRleHQpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnJ1bjwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iaG9va0NvbnRleHQiPmhvb2tDb250ZXh0OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLmhvb2tzLkhvb2tDb250ZXh0Ij5Ib29rQ29udGV4dDwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+PGEgaHJlZj0iIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuaG9vay5IaXZlSG9vayI+SGl2ZUhvb2s8L2E+IOKGkiBFeGVjdXRlV2l0aEhvb2tDb250ZXh0PC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNzeW5jaHJvbml6ZWQiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJzeW5jaHJvbml6ZWRbVDBdKHgkMTo9Jmd0O1QwKTpUMCI+PC9hPgorICAgICAgPGEgaWQ9InN5bmNocm9uaXplZFtUMF0o4oeSVDApOlQwIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5zeW5jaHJvbml6ZWQ8L3NwYW4+PHNwYW4gY2xhc3M9InRwYXJhbXMiPls8c3BhbiBuYW1lPSJUMCI+VDA8L3NwYW4+XTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDog4oeSIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5BbnlSZWYuc3luY2hyb25pemVkLlQwIj5UMDwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5BbnlSZWYuc3luY2hyb25pemVkLlQwIj5UMDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI3RvU3RyaW5nIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0idG9TdHJpbmcoKTpTdHJpbmciPjwvYT4KKyAgICAgIDxhIGlkPSJ0b1N0cmluZygpOlN0cmluZyI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+dG9TdHJpbmc8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuU3RyaW5nIj5TdHJpbmc8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI3dhaXQiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJ3YWl0KCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9IndhaXQoKTpVbml0Ij48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj53YWl0PC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjxkdD5Bbm5vdGF0aW9uczwvZHQ+PGRkPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5AdGhyb3dzPC9zcGFuPjxzcGFuIGNsYXNzPSJhcmdzIj4oPHNwYW4+CisgICAgICAKKyAgICAgIDxzcGFuIGNsYXNzPSJkZWZ2YWwiIG5hbWU9ImNsYXNzT2ZbamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uXSI+Li4uPC9zcGFuPgorICAgIDwvc3Bhbj4pPC9zcGFuPgorICAgICAgICAgICAgICAKKyAgICAgICAgPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiN3YWl0IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0id2FpdCh4JDE6TG9uZyx4JDI6SW50KTpVbml0Ij48L2E+CisgICAgICA8YSBpZD0id2FpdChMb25nLEludCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+d2FpdDwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuTG9uZyI+TG9uZzwvc3Bhbj48L3NwYW4+LCA8c3BhbiBuYW1lPSJhcmcxIj5hcmcxOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5JbnQiPkludDwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48ZHQ+QW5ub3RhdGlvbnM8L2R0PjxkZD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+QHRocm93czwvc3Bhbj48c3BhbiBjbGFzcz0iYXJncyI+KDxzcGFuPgorICAgICAgCisgICAgICA8c3BhbiBjbGFzcz0iZGVmdmFsIiBuYW1lPSJjbGFzc09mW2phdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbl0iPi4uLjwvc3Bhbj4KKyAgICA8L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgICAgICAgCisgICAgICAgIDwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjd2FpdCIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IndhaXQoeCQxOkxvbmcpOlVuaXQiPjwvYT4KKyAgICAgIDxhIGlkPSJ3YWl0KExvbmcpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPndhaXQ8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkxvbmciPkxvbmc8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Vbml0Ij5Vbml0PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PGR0PkFubm90YXRpb25zPC9kdD48ZGQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPkB0aHJvd3M8L3NwYW4+PHNwYW4gY2xhc3M9ImFyZ3MiPig8c3Bhbj4KKyAgICAgIAorICAgICAgPHNwYW4gY2xhc3M9ImRlZnZhbCIgbmFtZT0iY2xhc3NPZltqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb25dIj4uLi48L3NwYW4+CisgICAgPC9zcGFuPik8L3NwYW4+CisgICAgICAgICAgICAgIAorICAgICAgICA8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48L29sPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgCisKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9ImluaGVyaXRlZE1lbWJlcnMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwYXJlbnQiIG5hbWU9Im9yZy5hcGFjaGUuaGFkb29wLmhpdmUucWwuaG9va3MuRXhlY3V0ZVdpdGhIb29rQ29udGV4dCI+CisgICAgICAgICAgICAgIDxoMz5Jbmhlcml0ZWQgZnJvbSA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmhhZG9vcC5oaXZlLnFsLmhvb2tzLkV4ZWN1dGVXaXRoSG9va0NvbnRleHQiPkV4ZWN1dGVXaXRoSG9va0NvbnRleHQ8L3NwYW4+PC9oMz4KKyAgICAgICAgICAgIDwvZGl2PjxkaXYgY2xhc3M9InBhcmVudCIgbmFtZT0ib3JnLmFwYWNoZS5oYWRvb3AuaGl2ZS5xbC5ob29rcy5Ib29rIj4KKyAgICAgICAgICAgICAgPGgzPkluaGVyaXRlZCBmcm9tIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuaGFkb29wLmhpdmUucWwuaG9va3MuSG9vayI+SG9vazwvc3Bhbj48L2gzPgorICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzcz0icGFyZW50IiBuYW1lPSJzY2FsYS5BbnlSZWYiPgorICAgICAgICAgICAgICA8aDM+SW5oZXJpdGVkIGZyb20gPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9oMz4KKyAgICAgICAgICAgIDwvZGl2PjxkaXYgY2xhc3M9InBhcmVudCIgbmFtZT0ic2NhbGEuQW55Ij4KKyAgICAgICAgICAgICAgPGgzPkluaGVyaXRlZCBmcm9tIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvaDM+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9Imdyb3VwZWRNZW1iZXJzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXAiIG5hbWU9IlVuZ3JvdXBlZCI+CisgICAgICAgICAgICAgIDxoMz5Vbmdyb3VwZWQ8L2gzPgorICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKworICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRvb2x0aXAiPjwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJmb290ZXIiPiAgPC9kaXY+CisgICAgICA8c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0ianF1ZXJ5LWpzIiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktdWktanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL2pxdWVyeS11aS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRvb2xzLXRvb2x0aXAtanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL3Rvb2xzLnRvb2x0aXAuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJ0ZW1wbGF0ZS1qcyIgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvdGVtcGxhdGUuanMiPjwvc2NyaXB0PgorICAgIDwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvaG9vay9wYWNrYWdlLmh0bWwgYi9oaXZlL3NjYWxhZG9jcy9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvaG9vay9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDJkNDUxNgotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9ob29rL3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDEwNSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICA8dGl0bGU+aG9vayAtIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYtaW5jdWJhdGluZy1TTkFQU0hPVCBBUEkgLSBvcmcuYXBhY2hlLmF0bGFzLmhpdmUuaG9vazwvdGl0bGU+CisgICAgICAgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9Imhvb2sgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IC0gaW5jdWJhdGluZyAtIFNOQVBTSE9UIEFQSSAtIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rIiAvPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImtleXdvcmRzIiBjb250ZW50PSJob29rIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYgaW5jdWJhdGluZyBTTkFQU0hPVCBBUEkgb3JnLmFwYWNoZS5hdGxhcy5oaXZlLmhvb2siIC8+CisgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIC8+CisgICAgICAgICAgCisgICAgICA8bGluayBocmVmPSIuLi8uLi8uLi8uLi8uLi9saWIvdGVtcGxhdGUuY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgorICAgICAgPGxpbmsgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbGliL2RpYWdyYW1zLmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgaWQ9ImRpYWdyYW1zLWNzcyIgLz4KKyAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgIGlmKHRvcCA9PT0gc2VsZikgeworICAgICAgICAgICAgdmFyIHVybCA9ICcuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sJzsKKyAgICAgICAgICAgIHZhciBoYXNoID0gJ29yZy5hcGFjaGUuYXRsYXMuaGl2ZS5ob29rLnBhY2thZ2UnOworICAgICAgICAgICAgdmFyIGFuY2hvciA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworICAgICAgICAgICAgdmFyIGFuY2hvcl9vcHQgPSAnJzsKKyAgICAgICAgICAgIGlmIChhbmNob3IubGVuZ3RoID49IDEpCisgICAgICAgICAgICAgIGFuY2hvcl9vcHQgPSAnQCcgKyBhbmNob3Iuc3Vic3RyaW5nKDEpOworICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmwgKyAnIycgKyBoYXNoICsgYW5jaG9yX29wdDsKKyAgICAgICAgIH0KKyAgIAkgIDwvc2NyaXB0PgorICAgIAorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ2YWx1ZSI+CisgICAgICA8ZGl2IGlkPSJkZWZpbml0aW9uIj4KKyAgICAgICAgPGltZyBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi9wYWNrYWdlX2JpZy5wbmciIC8+CisgICAgICAgIDxwIGlkPSJvd25lciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmciPm9yZzwvYT4uPGEgaHJlZj0iLi4vLi4vLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlIj5hcGFjaGU8L2E+LjxhIGhyZWY9Ii4uLy4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcyI+YXRsYXM8L2E+LjxhIGhyZWY9Ii4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlIj5oaXZlPC9hPjwvcD4KKyAgICAgICAgPGgxPmhvb2s8L2gxPgorICAgICAgPC9kaXY+CisKKyAgICAgIDxoNCBpZD0ic2lnbmF0dXJlIiBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5wYWNrYWdlPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5ob29rPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgICAgICAgIDxkaXYgaWQ9ImNvbW1lbnQiIGNsYXNzPSJmdWxsY29tbWVudHRvcCI+PC9kaXY+CisgICAgICAgIAorCisgICAgICA8ZGl2IGlkPSJtYnJzZWwiPgorICAgICAgICA8ZGl2IGlkPSJ0ZXh0ZmlsdGVyIj48c3BhbiBjbGFzcz0icHJlIj48L3NwYW4+PHNwYW4gY2xhc3M9ImlucHV0Ij48aW5wdXQgaWQ9Im1icnNlbC1pbnB1dCIgdHlwZT0idGV4dCIgYWNjZXNza2V5PSIvIiAvPjwvc3Bhbj48c3BhbiBjbGFzcz0icG9zdCI+PC9zcGFuPjwvZGl2PgorICAgICAgICAKKyAgICAgICAgCisgICAgICAgIDxkaXYgaWQ9InZpc2JsIj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWx0ZXJ0eXBlIj5WaXNpYmlsaXR5PC9zcGFuPgorICAgICAgICAgICAgPG9sPjxsaSBjbGFzcz0icHVibGljIGluIj48c3Bhbj5QdWJsaWM8L3NwYW4+PC9saT48bGkgY2xhc3M9ImFsbCBvdXQiPjxzcGFuPkFsbDwvc3Bhbj48L2xpPjwvb2w+CisgICAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0idGVtcGxhdGUiPgorICAgICAgICA8ZGl2IGlkPSJhbGxNZW1iZXJzIj4KKyAgICAgICAgCisKKyAgICAgICAgPGRpdiBpZD0idHlwZXMiIGNsYXNzPSJ0eXBlcyBtZW1iZXJzIj4KKyAgICAgICAgICAgICAgPGgzPlR5cGUgTWVtYmVyczwvaDM+CisgICAgICAgICAgICAgIDxvbD48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLmhvb2suSGl2ZUhvb2siIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IkhpdmVIb29rZXh0ZW5kc0V4ZWN1dGVXaXRoSG9va0NvbnRleHQiPjwvYT4KKyAgICAgIDxhIGlkPSJIaXZlSG9vazpIaXZlSG9vayI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmNsYXNzPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxhIGhyZWY9IkhpdmVIb29rLmh0bWwiPjxzcGFuIGNsYXNzPSJuYW1lIj5IaXZlSG9vazwvc3Bhbj48L2E+PHNwYW4gY2xhc3M9InJlc3VsdCI+IGV4dGVuZHMgPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5oYWRvb3AuaGl2ZS5xbC5ob29rcy5FeGVjdXRlV2l0aEhvb2tDb250ZXh0Ij5FeGVjdXRlV2l0aEhvb2tDb250ZXh0PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjwvb2w+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAKKworICAgICAgICAKKworICAgICAgICAKKworICAgICAgICAKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0iaW5oZXJpdGVkTWVtYmVycyI+CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0iZ3JvdXBlZE1lbWJlcnMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJncm91cCIgbmFtZT0iVW5ncm91cGVkIj4KKyAgICAgICAgICAgICAgPGgzPlVuZ3JvdXBlZDwvaDM+CisgICAgICAgICAgICAgIAorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorCisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0idG9vbHRpcCI+PC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImZvb3RlciI+ICA8L2Rpdj4KKyAgICAgIDxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL2pxdWVyeS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9ImpxdWVyeS11aS1qcyIgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvanF1ZXJ5LXVpLmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0idG9vbHMtdG9vbHRpcC1qcyIgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvdG9vbHMudG9vbHRpcC5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRlbXBsYXRlLWpzIiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi90ZW1wbGF0ZS5qcyI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9tb2RlbC9IaXZlRGF0YU1vZGVsR2VuZXJhdG9yLmh0bWwgYi9oaXZlL3NjYWxhZG9jcy9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvbW9kZWwvSGl2ZURhdGFNb2RlbEdlbmVyYXRvci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjViZjI0M2IKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvbW9kZWwvSGl2ZURhdGFNb2RlbEdlbmVyYXRvci5odG1sCkBAIC0wLDAgKzEsNTQyIEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgIDx0aXRsZT5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yIC0gQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNi1pbmN1YmF0aW5nLVNOQVBTSE9UIEFQSSAtIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yPC90aXRsZT4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iSGl2ZURhdGFNb2RlbEdlbmVyYXRvciAtIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYgLSBpbmN1YmF0aW5nIC0gU05BUFNIT1QgQVBJIC0gb3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IiIC8+CisgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9IkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IgQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNiBpbmN1YmF0aW5nIFNOQVBTSE9UIEFQSSBvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvciIgLz4KKyAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KKyAgICAgICAgICAKKyAgICAgIDxsaW5rIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2xpYi90ZW1wbGF0ZS5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+CisgICAgICA8bGluayBocmVmPSIuLi8uLi8uLi8uLi8uLi9saWIvZGlhZ3JhbXMuY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBpZD0iZGlhZ3JhbXMtY3NzIiAvPgorICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICAgaWYodG9wID09PSBzZWxmKSB7CisgICAgICAgICAgICB2YXIgdXJsID0gJy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwnOworICAgICAgICAgICAgdmFyIGhhc2ggPSAnb3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhTW9kZWxHZW5lcmF0b3InOworICAgICAgICAgICAgdmFyIGFuY2hvciA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworICAgICAgICAgICAgdmFyIGFuY2hvcl9vcHQgPSAnJzsKKyAgICAgICAgICAgIGlmIChhbmNob3IubGVuZ3RoID49IDEpCisgICAgICAgICAgICAgIGFuY2hvcl9vcHQgPSAnQCcgKyBhbmNob3Iuc3Vic3RyaW5nKDEpOworICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmwgKyAnIycgKyBoYXNoICsgYW5jaG9yX29wdDsKKyAgICAgICAgIH0KKyAgIAkgIDwvc2NyaXB0PgorICAgIAorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ0eXBlIj4KKyAgICAgIDxkaXYgaWQ9ImRlZmluaXRpb24iPgorICAgICAgICA8aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL2NsYXNzX2JpZy5wbmciIC8+CisgICAgICAgIDxwIGlkPSJvd25lciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmciPm9yZzwvYT4uPGEgaHJlZj0iLi4vLi4vLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlIj5hcGFjaGU8L2E+LjxhIGhyZWY9Ii4uLy4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcyI+YXRsYXM8L2E+LjxhIGhyZWY9Ii4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlIj5oaXZlPC9hPi48YSBocmVmPSJwYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbCI+bW9kZWw8L2E+PC9wPgorICAgICAgICA8aDE+SGl2ZURhdGFNb2RlbEdlbmVyYXRvcjwvaDE+CisgICAgICA8L2Rpdj4KKworICAgICAgPGg0IGlkPSJzaWduYXR1cmUiIGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmNsYXNzPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPiBleHRlbmRzIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICAgICAgICA8ZGl2IGlkPSJjb21tZW50IiBjbGFzcz0iZnVsbGNvbW1lbnR0b3AiPjxkaXYgY2xhc3M9InRvZ2dsZUNvbnRhaW5lciBibG9jayI+CisgICAgICAgICAgPHNwYW4gY2xhc3M9InRvZ2dsZSI+TGluZWFyIFN1cGVydHlwZXM8L3NwYW4+CisgICAgICAgICAgPGRpdiBjbGFzcz0ic3VwZXJUeXBlcyBoaWRkZW5Db250ZW50Ij48c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnlSZWYiPkFueVJlZjwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvZGl2PgorICAgICAgICA8L2Rpdj48L2Rpdj4KKyAgICAgICAgCisKKyAgICAgIDxkaXYgaWQ9Im1icnNlbCI+CisgICAgICAgIDxkaXYgaWQ9InRleHRmaWx0ZXIiPjxzcGFuIGNsYXNzPSJwcmUiPjwvc3Bhbj48c3BhbiBjbGFzcz0iaW5wdXQiPjxpbnB1dCBpZD0ibWJyc2VsLWlucHV0IiB0eXBlPSJ0ZXh0IiBhY2Nlc3NrZXk9Ii8iIC8+PC9zcGFuPjxzcGFuIGNsYXNzPSJwb3N0Ij48L3NwYW4+PC9kaXY+CisgICAgICAgIDxkaXYgaWQ9Im9yZGVyIj4KKyAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbHRlcnR5cGUiPk9yZGVyaW5nPC9zcGFuPgorICAgICAgICAgICAgICA8b2w+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJhbHBoYSBpbiI+PHNwYW4+QWxwaGFiZXRpYzwvc3Bhbj48L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaW5oZXJpdCBvdXQiPjxzcGFuPkJ5IGluaGVyaXRhbmNlPC9zcGFuPjwvbGk+CisgICAgICAgICAgICAgIDwvb2w+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0iYW5jZXN0b3JzIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+SW5oZXJpdGVkPGJyIC8+CisgICAgICAgICAgICAgICAgPC9zcGFuPgorICAgICAgICAgICAgICAgIDxvbCBpZD0ibGluZWFyaXphdGlvbiI+CisgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImluIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvciI+PHNwYW4+SGl2ZURhdGFNb2RlbEdlbmVyYXRvcjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iaW4iIG5hbWU9InNjYWxhLkFueVJlZiI+PHNwYW4+QW55UmVmPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJpbiIgbmFtZT0ic2NhbGEuQW55Ij48c3Bhbj5Bbnk8L3NwYW4+PC9saT4KKyAgICAgICAgICAgICAgICA8L29sPgorICAgICAgICAgICAgICA8L2Rpdj48ZGl2IGlkPSJhbmNlc3RvcnMiPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbHRlcnR5cGUiPjwvc3Bhbj4KKyAgICAgICAgICAgIDxvbD4KKyAgICAgICAgICAgICAgPGxpIGNsYXNzPSJoaWRlYWxsIG91dCI+PHNwYW4+SGlkZSBBbGw8L3NwYW4+PC9saT4KKyAgICAgICAgICAgICAgPGxpIGNsYXNzPSJzaG93YWxsIGluIj48c3Bhbj5TaG93IGFsbDwvc3Bhbj48L2xpPgorICAgICAgICAgICAgPC9vbD4KKyAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9kb2NzLnNjYWxhLWxhbmcub3JnL292ZXJ2aWV3cy9zY2FsYWRvYy91c2FnZS5odG1sI21lbWJlcnMiIHRhcmdldD0iX2JsYW5rIj5MZWFybiBtb3JlIGFib3V0IG1lbWJlciBzZWxlY3Rpb248L2E+CisgICAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgaWQ9InZpc2JsIj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWx0ZXJ0eXBlIj5WaXNpYmlsaXR5PC9zcGFuPgorICAgICAgICAgICAgPG9sPjxsaSBjbGFzcz0icHVibGljIGluIj48c3Bhbj5QdWJsaWM8L3NwYW4+PC9saT48bGkgY2xhc3M9ImFsbCBvdXQiPjxzcGFuPkFsbDwvc3Bhbj48L2xpPjwvb2w+CisgICAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0idGVtcGxhdGUiPgorICAgICAgICA8ZGl2IGlkPSJhbGxNZW1iZXJzIj4KKyAgICAgICAgPGRpdiBpZD0iY29uc3RydWN0b3JzIiBjbGFzcz0ibWVtYmVycyI+CisgICAgICAgICAgICAgIDxoMz5JbnN0YW5jZSBDb25zdHJ1Y3RvcnM8L2gzPgorICAgICAgICAgICAgICA8b2w+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yIyZsdDtpbml0Jmd0OyIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iJmx0O2luaXQmZ3Q7KCk6b3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IiPjwvYT4KKyAgICAgIDxhIGlkPSImbHQ7aW5pdCZndDs6SGl2ZURhdGFNb2RlbEdlbmVyYXRvciI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPm5ldzwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+SGl2ZURhdGFNb2RlbEdlbmVyYXRvcjwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjwvb2w+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAKKworICAgICAgICAKKworICAgICAgICA8ZGl2IGlkPSJ2YWx1ZXMiIGNsYXNzPSJ2YWx1ZXMgbWVtYmVycyI+CisgICAgICAgICAgICAgIDxoMz5WYWx1ZSBNZW1iZXJzPC9oMz4KKyAgICAgICAgICAgICAgPG9sPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjIT0iIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSIhPSh4JDE6QW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0iIT0oQW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIHRpdGxlPSJndDRzOiAkYmFuZyRlcSIgY2xhc3M9Im5hbWUiPiE9PC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJhcmcwIj5hcmcwOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnlSZWYiPkFueVJlZjwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkJvb2xlYW4iPkJvb2xlYW48L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueSMhPSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IiE9KHgkMTpBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSIhPShBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gdGl0bGU9Imd0NHM6ICRiYW5nJGVxIiBjbGFzcz0ibmFtZSI+IT08L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5Bbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmIyMjIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iIyMoKTpJbnQiPjwvYT4KKyAgICAgIDxhIGlkPSIjIygpOkludCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiB0aXRsZT0iZ3Q0czogJGhhc2gkaGFzaCIgY2xhc3M9Im5hbWUiPiMjPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuSW50Ij5JbnQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmIz09IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iPT0oeCQxOkFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9Ij09KEFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiB0aXRsZT0iZ3Q0czogJGVxJGVxIiBjbGFzcz0ibmFtZSI+PT08L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55Iz09IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iPT0oeCQxOkFueSk6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9Ij09KEFueSk6Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiB0aXRsZT0iZ3Q0czogJGVxJGVxIiBjbGFzcz0ibmFtZSI+PT08L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5Bbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55I2FzSW5zdGFuY2VPZiIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImFzSW5zdGFuY2VPZltUMF06VDAiPjwvYT4KKyAgICAgIDxhIGlkPSJhc0luc3RhbmNlT2ZbVDBdOlQwIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5hc0luc3RhbmNlT2Y8L3NwYW4+PHNwYW4gY2xhc3M9InRwYXJhbXMiPls8c3BhbiBuYW1lPSJUMCI+VDA8L3NwYW4+XTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueS5hc0luc3RhbmNlT2YuVDAiPlQwPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjY2xvbmUiIHZpc2JsPSJwcnQiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJjbG9uZSgpOk9iamVjdCI+PC9hPgorICAgICAgPGEgaWQ9ImNsb25lKCk6QW55UmVmIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5jbG9uZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkF0dHJpYnV0ZXM8L2R0PjxkZD5wcm90ZWN0ZWRbPGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vamF2YSRsYW5nLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZyI+amF2YS5sYW5nPC9hPl0gPC9kZD48ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48ZHQ+QW5ub3RhdGlvbnM8L2R0PjxkZD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+QHRocm93czwvc3Bhbj48c3BhbiBjbGFzcz0iYXJncyI+KDxzcGFuPgorICAgICAgCisgICAgICA8c3BhbiBjbGFzcz0iZGVmdmFsIiBuYW1lPSJjbGFzc09mW2phdmEubGFuZy5DbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbl0iPi4uLjwvc3Bhbj4KKyAgICA8L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgICAgICAgCisgICAgICAgIDwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvciNjcmVhdGVEYXRhTW9kZWwiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImNyZWF0ZURhdGFNb2RlbCgpOlVuaXQiPjwvYT4KKyAgICAgIDxhIGlkPSJjcmVhdGVEYXRhTW9kZWwoKTpVbml0Ij48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5jcmVhdGVEYXRhTW9kZWw8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Vbml0Ij5Vbml0PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjZXEiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJlcSh4JDE6QW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0iZXEoQW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5lcTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjZXF1YWxzIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iZXF1YWxzKHgkMTpBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSJlcXVhbHMoQW55KTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5lcXVhbHM8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWYg4oaSIEFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjZmluYWxpemUiIHZpc2JsPSJwcnQiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJmaW5hbGl6ZSgpOlVuaXQiPjwvYT4KKyAgICAgIDxhIGlkPSJmaW5hbGl6ZSgpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmZpbmFsaXplPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5BdHRyaWJ1dGVzPC9kdD48ZGQ+cHJvdGVjdGVkWzxhIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2phdmEkbGFuZy5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmciPmphdmEubGFuZzwvYT5dIDwvZGQ+PGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PGR0PkFubm90YXRpb25zPC9kdD48ZGQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPkB0aHJvd3M8L3NwYW4+PHNwYW4gY2xhc3M9ImFyZ3MiPig8c3Bhbj4KKyAgICAgIAorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+Y2xhc3NPZltqYXZhLmxhbmcuVGhyb3dhYmxlXTwvc3Bhbj4KKyAgICA8L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgICAgICAgCisgICAgICAgIDwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjZ2V0Q2xhc3MiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJnZXRDbGFzcygpOkNsYXNzW19dIj48L2E+CisgICAgICA8YSBpZD0iZ2V0Q2xhc3MoKTpDbGFzc1tfXSI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+Z2V0Q2xhc3M8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuQ2xhc3MiPkNsYXNzPC9zcGFuPltfXTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZiDihpIgQW55PC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yI2dldENsYXNzVHlwZURlZmluaXRpb25zIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJnZXRDbGFzc1R5cGVEZWZpbml0aW9ucygpOmNvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuSW1tdXRhYmxlTGlzdFtvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0udHlwZXMuSGllcmFyY2hpY2FsVHlwZURlZmluaXRpb25bb3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLnR5cGVzLkNsYXNzVHlwZV1dIj48L2E+CisgICAgICA8YSBpZD0iZ2V0Q2xhc3NUeXBlRGVmaW5pdGlvbnMoKTpJbW11dGFibGVMaXN0W0hpZXJhcmNoaWNhbFR5cGVEZWZpbml0aW9uW0NsYXNzVHlwZV1dIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5nZXRDbGFzc1R5cGVEZWZpbml0aW9uczwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImNvbS5nb29nbGUuY29tbW9uLmNvbGxlY3QuSW1tdXRhYmxlTGlzdCI+SW1tdXRhYmxlTGlzdDwvc3Bhbj5bPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLnR5cGVzLkhpZXJhcmNoaWNhbFR5cGVEZWZpbml0aW9uIj5IaWVyYXJjaGljYWxUeXBlRGVmaW5pdGlvbjwvc3Bhbj5bPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLnR5cGVzLkNsYXNzVHlwZSI+Q2xhc3NUeXBlPC9zcGFuPl1dPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yI2dldERhdGFNb2RlbEFzSlNPTiIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iZ2V0RGF0YU1vZGVsQXNKU09OKCk6U3RyaW5nIj48L2E+CisgICAgICA8YSBpZD0iZ2V0RGF0YU1vZGVsQXNKU09OKCk6U3RyaW5nIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5nZXREYXRhTW9kZWxBc0pTT048L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuU3RyaW5nIj5TdHJpbmc8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yI2dldEVudW1UeXBlRGVmaW5pdGlvbnMiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImdldEVudW1UeXBlRGVmaW5pdGlvbnMoKTpjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZUxpc3Rbb3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLnR5cGVzLkVudW1UeXBlRGVmaW5pdGlvbl0iPjwvYT4KKyAgICAgIDxhIGlkPSJnZXRFbnVtVHlwZURlZmluaXRpb25zKCk6SW1tdXRhYmxlTGlzdFtFbnVtVHlwZURlZmluaXRpb25dIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5nZXRFbnVtVHlwZURlZmluaXRpb25zPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iY29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFibGVMaXN0Ij5JbW11dGFibGVMaXN0PC9zcGFuPls8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0udHlwZXMuRW51bVR5cGVEZWZpbml0aW9uIj5FbnVtVHlwZURlZmluaXRpb248L3NwYW4+XTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFNb2RlbEdlbmVyYXRvciNnZXRNb2RlbEFzSnNvbiIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iZ2V0TW9kZWxBc0pzb24oKTpTdHJpbmciPjwvYT4KKyAgICAgIDxhIGlkPSJnZXRNb2RlbEFzSnNvbigpOlN0cmluZyI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+Z2V0TW9kZWxBc0pzb248L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuU3RyaW5nIj5TdHJpbmc8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YU1vZGVsR2VuZXJhdG9yI2dldFN0cnVjdFR5cGVEZWZpbml0aW9ucyIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iZ2V0U3RydWN0VHlwZURlZmluaXRpb25zKCk6Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFibGVMaXN0W29yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS50eXBlcy5TdHJ1Y3RUeXBlRGVmaW5pdGlvbl0iPjwvYT4KKyAgICAgIDxhIGlkPSJnZXRTdHJ1Y3RUeXBlRGVmaW5pdGlvbnMoKTpJbW11dGFibGVMaXN0W1N0cnVjdFR5cGVEZWZpbml0aW9uXSI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+Z2V0U3RydWN0VHlwZURlZmluaXRpb25zPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iY29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFibGVMaXN0Ij5JbW11dGFibGVMaXN0PC9zcGFuPls8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0udHlwZXMuU3RydWN0VHlwZURlZmluaXRpb24iPlN0cnVjdFR5cGVEZWZpbml0aW9uPC9zcGFuPl08L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IjZ2V0VHJhaXRUeXBlRGVmaW5pdGlvbnMiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImdldFRyYWl0VHlwZURlZmluaXRpb25zKCk6Y29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFibGVMaXN0W29yZy5hcGFjaGUuYXRsYXMudHlwZXN5c3RlbS50eXBlcy5IaWVyYXJjaGljYWxUeXBlRGVmaW5pdGlvbltvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0udHlwZXMuVHJhaXRUeXBlXV0iPjwvYT4KKyAgICAgIDxhIGlkPSJnZXRUcmFpdFR5cGVEZWZpbml0aW9ucygpOkltbXV0YWJsZUxpc3RbSGllcmFyY2hpY2FsVHlwZURlZmluaXRpb25bVHJhaXRUeXBlXV0iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmdldFRyYWl0VHlwZURlZmluaXRpb25zPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iY29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFibGVMaXN0Ij5JbW11dGFibGVMaXN0PC9zcGFuPls8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0udHlwZXMuSGllcmFyY2hpY2FsVHlwZURlZmluaXRpb24iPkhpZXJhcmNoaWNhbFR5cGVEZWZpbml0aW9uPC9zcGFuPls8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0udHlwZXMuVHJhaXRUeXBlIj5UcmFpdFR5cGU8L3NwYW4+XV08L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IjZ2V0VHlwZXNEZWYiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImdldFR5cGVzRGVmKCk6b3JnLmFwYWNoZS5hdGxhcy50eXBlc3lzdGVtLlR5cGVzRGVmIj48L2E+CisgICAgICA8YSBpZD0iZ2V0VHlwZXNEZWYoKTpUeXBlc0RlZiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+Z2V0VHlwZXNEZWY8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLnR5cGVzeXN0ZW0uVHlwZXNEZWYiPlR5cGVzRGVmPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjaGFzaENvZGUiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJoYXNoQ29kZSgpOkludCI+PC9hPgorICAgICAgPGEgaWQ9Imhhc2hDb2RlKCk6SW50Ij48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5oYXNoQ29kZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkludCI+SW50PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZiDihpIgQW55PC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueSNpc0luc3RhbmNlT2YiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJpc0luc3RhbmNlT2ZbVDBdOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSJpc0luc3RhbmNlT2ZbVDBdOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmlzSW5zdGFuY2VPZjwvc3Bhbj48c3BhbiBjbGFzcz0idHBhcmFtcyI+WzxzcGFuIG5hbWU9IlQwIj5UMDwvc3Bhbj5dPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5Bbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI25lIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0ibmUoeCQxOkFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9Im5lKEFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+bmU8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI25vdGlmeSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9Im5vdGlmeSgpOlVuaXQiPjwvYT4KKyAgICAgIDxhIGlkPSJub3RpZnkoKTpVbml0Ij48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5ub3RpZnk8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Vbml0Ij5Vbml0PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjbm90aWZ5QWxsIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0ibm90aWZ5QWxsKCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9Im5vdGlmeUFsbCgpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPm5vdGlmeUFsbDwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNzeW5jaHJvbml6ZWQiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJzeW5jaHJvbml6ZWRbVDBdKHgkMTo9Jmd0O1QwKTpUMCI+PC9hPgorICAgICAgPGEgaWQ9InN5bmNocm9uaXplZFtUMF0o4oeSVDApOlQwIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5zeW5jaHJvbml6ZWQ8L3NwYW4+PHNwYW4gY2xhc3M9InRwYXJhbXMiPls8c3BhbiBuYW1lPSJUMCI+VDA8L3NwYW4+XTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDog4oeSIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5BbnlSZWYuc3luY2hyb25pemVkLlQwIj5UMDwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5BbnlSZWYuc3luY2hyb25pemVkLlQwIj5UMDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI3RvU3RyaW5nIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0idG9TdHJpbmcoKTpTdHJpbmciPjwvYT4KKyAgICAgIDxhIGlkPSJ0b1N0cmluZygpOlN0cmluZyI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+dG9TdHJpbmc8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuU3RyaW5nIj5TdHJpbmc8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI3dhaXQiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJ3YWl0KCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9IndhaXQoKTpVbml0Ij48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj53YWl0PC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjxkdD5Bbm5vdGF0aW9uczwvZHQ+PGRkPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5AdGhyb3dzPC9zcGFuPjxzcGFuIGNsYXNzPSJhcmdzIj4oPHNwYW4+CisgICAgICAKKyAgICAgIDxzcGFuIGNsYXNzPSJkZWZ2YWwiIG5hbWU9ImNsYXNzT2ZbamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uXSI+Li4uPC9zcGFuPgorICAgIDwvc3Bhbj4pPC9zcGFuPgorICAgICAgICAgICAgICAKKyAgICAgICAgPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiN3YWl0IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0id2FpdCh4JDE6TG9uZyx4JDI6SW50KTpVbml0Ij48L2E+CisgICAgICA8YSBpZD0id2FpdChMb25nLEludCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+d2FpdDwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuTG9uZyI+TG9uZzwvc3Bhbj48L3NwYW4+LCA8c3BhbiBuYW1lPSJhcmcxIj5hcmcxOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5JbnQiPkludDwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48ZHQ+QW5ub3RhdGlvbnM8L2R0PjxkZD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+QHRocm93czwvc3Bhbj48c3BhbiBjbGFzcz0iYXJncyI+KDxzcGFuPgorICAgICAgCisgICAgICA8c3BhbiBjbGFzcz0iZGVmdmFsIiBuYW1lPSJjbGFzc09mW2phdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbl0iPi4uLjwvc3Bhbj4KKyAgICA8L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgICAgICAgCisgICAgICAgIDwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjd2FpdCIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IndhaXQoeCQxOkxvbmcpOlVuaXQiPjwvYT4KKyAgICAgIDxhIGlkPSJ3YWl0KExvbmcpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPndhaXQ8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkxvbmciPkxvbmc8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Vbml0Ij5Vbml0PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PGR0PkFubm90YXRpb25zPC9kdD48ZGQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPkB0aHJvd3M8L3NwYW4+PHNwYW4gY2xhc3M9ImFyZ3MiPig8c3Bhbj4KKyAgICAgIAorICAgICAgPHNwYW4gY2xhc3M9ImRlZnZhbCIgbmFtZT0iY2xhc3NPZltqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb25dIj4uLi48L3NwYW4+CisgICAgPC9zcGFuPik8L3NwYW4+CisgICAgICAgICAgICAgIAorICAgICAgICA8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48L29sPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgCisKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9ImluaGVyaXRlZE1lbWJlcnMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwYXJlbnQiIG5hbWU9InNjYWxhLkFueVJlZiI+CisgICAgICAgICAgICAgIDxoMz5Jbmhlcml0ZWQgZnJvbSA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnlSZWYiPkFueVJlZjwvc3Bhbj48L2gzPgorICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzcz0icGFyZW50IiBuYW1lPSJzY2FsYS5BbnkiPgorICAgICAgICAgICAgICA8aDM+SW5oZXJpdGVkIGZyb20gPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55Ij5Bbnk8L3NwYW4+PC9oMz4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0iZ3JvdXBlZE1lbWJlcnMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJncm91cCIgbmFtZT0iVW5ncm91cGVkIj4KKyAgICAgICAgICAgICAgPGgzPlVuZ3JvdXBlZDwvaDM+CisgICAgICAgICAgICAgIAorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorCisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0idG9vbHRpcCI+PC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImZvb3RlciI+ICA8L2Rpdj4KKyAgICAgIDxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL2pxdWVyeS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9ImpxdWVyeS11aS1qcyIgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvanF1ZXJ5LXVpLmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0idG9vbHMtdG9vbHRpcC1qcyIgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvdG9vbHMudG9vbHRpcC5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRlbXBsYXRlLWpzIiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi90ZW1wbGF0ZS5qcyI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9tb2RlbC9IaXZlRGF0YVR5cGVzLmh0bWwgYi9oaXZlL3NjYWxhZG9jcy9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvbW9kZWwvSGl2ZURhdGFUeXBlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE3YWMxOTQKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvbW9kZWwvSGl2ZURhdGFUeXBlcy5odG1sCkBAIC0wLDAgKzEsNTAzIEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgIDx0aXRsZT5IaXZlRGF0YVR5cGVzIC0gQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNi1pbmN1YmF0aW5nLVNOQVBTSE9UIEFQSSAtIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzPC90aXRsZT4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iSGl2ZURhdGFUeXBlcyAtIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYgLSBpbmN1YmF0aW5nIC0gU05BUFNIT1QgQVBJIC0gb3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhVHlwZXMiIC8+CisgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9IkhpdmVEYXRhVHlwZXMgQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNiBpbmN1YmF0aW5nIFNOQVBTSE9UIEFQSSBvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFUeXBlcyIgLz4KKyAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KKyAgICAgICAgICAKKyAgICAgIDxsaW5rIGhyZWY9Ii4uLy4uLy4uLy4uLy4uL2xpYi90ZW1wbGF0ZS5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+CisgICAgICA8bGluayBocmVmPSIuLi8uLi8uLi8uLi8uLi9saWIvZGlhZ3JhbXMuY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBpZD0iZGlhZ3JhbXMtY3NzIiAvPgorICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICAgaWYodG9wID09PSBzZWxmKSB7CisgICAgICAgICAgICB2YXIgdXJsID0gJy4uLy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwnOworICAgICAgICAgICAgdmFyIGhhc2ggPSAnb3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhVHlwZXMnOworICAgICAgICAgICAgdmFyIGFuY2hvciA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworICAgICAgICAgICAgdmFyIGFuY2hvcl9vcHQgPSAnJzsKKyAgICAgICAgICAgIGlmIChhbmNob3IubGVuZ3RoID49IDEpCisgICAgICAgICAgICAgIGFuY2hvcl9vcHQgPSAnQCcgKyBhbmNob3Iuc3Vic3RyaW5nKDEpOworICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmwgKyAnIycgKyBoYXNoICsgYW5jaG9yX29wdDsKKyAgICAgICAgIH0KKyAgIAkgIDwvc2NyaXB0PgorICAgIAorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ0eXBlIj4KKyAgICAgIDxkaXYgaWQ9ImRlZmluaXRpb24iPgorICAgICAgICA8aW1nIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL2NsYXNzX2JpZy5wbmciIC8+CisgICAgICAgIDxwIGlkPSJvd25lciI+PGEgaHJlZj0iLi4vLi4vLi4vLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmciPm9yZzwvYT4uPGEgaHJlZj0iLi4vLi4vLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlIj5hcGFjaGU8L2E+LjxhIGhyZWY9Ii4uLy4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcyI+YXRsYXM8L2E+LjxhIGhyZWY9Ii4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlIj5oaXZlPC9hPi48YSBocmVmPSJwYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbCI+bW9kZWw8L2E+PC9wPgorICAgICAgICA8aDE+SGl2ZURhdGFUeXBlczwvaDE+CisgICAgICA8L2Rpdj4KKworICAgICAgPGg0IGlkPSJzaWduYXR1cmUiIGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmNsYXNzPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5IaXZlRGF0YVR5cGVzPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPiBleHRlbmRzIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5FbnVtIj5FbnVtPC9zcGFuPls8YSBocmVmPSIiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzIj5IaXZlRGF0YVR5cGVzPC9hPl08L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgICAgICAgPGRpdiBpZD0iY29tbWVudCIgY2xhc3M9ImZ1bGxjb21tZW50dG9wIj48ZGl2IGNsYXNzPSJ0b2dnbGVDb250YWluZXIgYmxvY2siPgorICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0b2dnbGUiPkxpbmVhciBTdXBlcnR5cGVzPC9zcGFuPgorICAgICAgICAgIDxkaXYgY2xhc3M9InN1cGVyVHlwZXMgaGlkZGVuQ29udGVudCI+PHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5sYW5nLkVudW0iPkVudW08L3NwYW4+WzxhIGhyZWY9IiIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhVHlwZXMiPkhpdmVEYXRhVHlwZXM8L2E+XSwgPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5pby5TZXJpYWxpemFibGUiPlNlcmlhbGl6YWJsZTwvc3Bhbj4sIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5Db21wYXJhYmxlIj5Db21wYXJhYmxlPC9zcGFuPls8YSBocmVmPSIiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzIj5IaXZlRGF0YVR5cGVzPC9hPl0sIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPiwgPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55Ij5Bbnk8L3NwYW4+PC9kaXY+CisgICAgICAgIDwvZGl2PjwvZGl2PgorICAgICAgICAKKworICAgICAgPGRpdiBpZD0ibWJyc2VsIj4KKyAgICAgICAgPGRpdiBpZD0idGV4dGZpbHRlciI+PHNwYW4gY2xhc3M9InByZSI+PC9zcGFuPjxzcGFuIGNsYXNzPSJpbnB1dCI+PGlucHV0IGlkPSJtYnJzZWwtaW5wdXQiIHR5cGU9InRleHQiIGFjY2Vzc2tleT0iLyIgLz48L3NwYW4+PHNwYW4gY2xhc3M9InBvc3QiPjwvc3Bhbj48L2Rpdj4KKyAgICAgICAgPGRpdiBpZD0ib3JkZXIiPgorICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+T3JkZXJpbmc8L3NwYW4+CisgICAgICAgICAgICAgIDxvbD4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImFscGhhIGluIj48c3Bhbj5BbHBoYWJldGljPC9zcGFuPjwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJpbmhlcml0IG91dCI+PHNwYW4+QnkgaW5oZXJpdGFuY2U8L3NwYW4+PC9saT4KKyAgICAgICAgICAgICAgPC9vbD4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJhbmNlc3RvcnMiPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWx0ZXJ0eXBlIj5Jbmhlcml0ZWQ8YnIgLz4KKyAgICAgICAgICAgICAgICA8L3NwYW4+CisgICAgICAgICAgICAgICAgPG9sIGlkPSJsaW5lYXJpemF0aW9uIj4KKyAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaW4iIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzIj48c3Bhbj5IaXZlRGF0YVR5cGVzPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJpbiIgbmFtZT0iamF2YS5sYW5nLkVudW0iPjxzcGFuPkVudW08L3NwYW4+PC9saT48bGkgY2xhc3M9ImluIiBuYW1lPSJqYXZhLmlvLlNlcmlhbGl6YWJsZSI+PHNwYW4+U2VyaWFsaXphYmxlPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJpbiIgbmFtZT0iamF2YS5sYW5nLkNvbXBhcmFibGUiPjxzcGFuPkNvbXBhcmFibGU8L3NwYW4+PC9saT48bGkgY2xhc3M9ImluIiBuYW1lPSJzY2FsYS5BbnlSZWYiPjxzcGFuPkFueVJlZjwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iaW4iIG5hbWU9InNjYWxhLkFueSI+PHNwYW4+QW55PC9zcGFuPjwvbGk+CisgICAgICAgICAgICAgICAgPC9vbD4KKyAgICAgICAgICAgICAgPC9kaXY+PGRpdiBpZD0iYW5jZXN0b3JzIj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWx0ZXJ0eXBlIj48L3NwYW4+CisgICAgICAgICAgICA8b2w+CisgICAgICAgICAgICAgIDxsaSBjbGFzcz0iaGlkZWFsbCBvdXQiPjxzcGFuPkhpZGUgQWxsPC9zcGFuPjwvbGk+CisgICAgICAgICAgICAgIDxsaSBjbGFzcz0ic2hvd2FsbCBpbiI+PHNwYW4+U2hvdyBhbGw8L3NwYW4+PC9saT4KKyAgICAgICAgICAgIDwvb2w+CisgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vZG9jcy5zY2FsYS1sYW5nLm9yZy9vdmVydmlld3Mvc2NhbGFkb2MvdXNhZ2UuaHRtbCNtZW1iZXJzIiB0YXJnZXQ9Il9ibGFuayI+TGVhcm4gbW9yZSBhYm91dCBtZW1iZXIgc2VsZWN0aW9uPC9hPgorICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGlkPSJ2aXNibCI+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+VmlzaWJpbGl0eTwvc3Bhbj4KKyAgICAgICAgICAgIDxvbD48bGkgY2xhc3M9InB1YmxpYyBpbiI+PHNwYW4+UHVibGljPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJhbGwgb3V0Ij48c3Bhbj5BbGw8L3NwYW4+PC9saT48L29sPgorICAgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRlbXBsYXRlIj4KKyAgICAgICAgPGRpdiBpZD0iYWxsTWVtYmVycyI+CisgICAgICAgIDxkaXYgaWQ9ImNvbnN0cnVjdG9ycyIgY2xhc3M9Im1lbWJlcnMiPgorICAgICAgICAgICAgICA8aDM+SW5zdGFuY2UgQ29uc3RydWN0b3JzPC9oMz4KKyAgICAgICAgICAgICAgPG9sPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFUeXBlcyMmbHQ7aW5pdCZndDsiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IiZsdDtpbml0Jmd0OygpOm9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzIj48L2E+CisgICAgICA8YSBpZD0iJmx0O2luaXQmZ3Q7OkhpdmVEYXRhVHlwZXMiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5uZXc8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPkhpdmVEYXRhVHlwZXM8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48L29sPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgCisKKyAgICAgICAgCisKKyAgICAgICAgPGRpdiBpZD0idmFsdWVzIiBjbGFzcz0idmFsdWVzIG1lbWJlcnMiPgorICAgICAgICAgICAgICA8aDM+VmFsdWUgTWVtYmVyczwvaDM+CisgICAgICAgICAgICAgIDxvbD48bGkgbmFtZT0ic2NhbGEuQW55UmVmIyE9IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iIT0oeCQxOkFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9IiE9KEFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiB0aXRsZT0iZ3Q0czogJGJhbmckZXEiIGNsYXNzPSJuYW1lIj4hPTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnkjIT0iIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSIhPSh4JDE6QW55KTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0iIT0oQW55KTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIHRpdGxlPSJndDRzOiAkYmFuZyRlcSIgY2xhc3M9Im5hbWUiPiE9PC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJhcmcwIj5hcmcwOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnkiPkFueTwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkJvb2xlYW4iPkJvb2xlYW48L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55PC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiMjIyIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IiMjKCk6SW50Ij48L2E+CisgICAgICA8YSBpZD0iIyMoKTpJbnQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gdGl0bGU9Imd0NHM6ICRoYXNoJGhhc2giIGNsYXNzPSJuYW1lIj4jIzwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkludCI+SW50PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZiDihpIgQW55PC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiM9PSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9Ij09KHgkMTpBbnlSZWYpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSI9PShBbnlSZWYpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gdGl0bGU9Imd0NHM6ICRlcSRlcSIgY2xhc3M9Im5hbWUiPj09PC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJhcmcwIj5hcmcwOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnlSZWYiPkFueVJlZjwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkJvb2xlYW4iPkJvb2xlYW48L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueSM9PSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9Ij09KHgkMTpBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSI9PShBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gdGl0bGU9Imd0NHM6ICRlcSRlcSIgY2xhc3M9Im5hbWUiPj09PC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPig8c3BhbiBuYW1lPSJhcmcwIj5hcmcwOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnkiPkFueTwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkJvb2xlYW4iPkJvb2xlYW48L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55PC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueSNhc0luc3RhbmNlT2YiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJhc0luc3RhbmNlT2ZbVDBdOlQwIj48L2E+CisgICAgICA8YSBpZD0iYXNJbnN0YW5jZU9mW1QwXTpUMCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+YXNJbnN0YW5jZU9mPC9zcGFuPjxzcGFuIGNsYXNzPSJ0cGFyYW1zIj5bPHNwYW4gbmFtZT0iVDAiPlQwPC9zcGFuPl08L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5BbnkuYXNJbnN0YW5jZU9mLlQwIj5UMDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5Bbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0iamF2YS5sYW5nLkVudW0jY2xvbmUiIHZpc2JsPSJwcnQiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJjbG9uZSgpOk9iamVjdCI+PC9hPgorICAgICAgPGEgaWQ9ImNsb25lKCk6QW55UmVmIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5jbG9uZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkF0dHJpYnV0ZXM8L2R0PjxkZD5wcm90ZWN0ZWRbPGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vamF2YSRsYW5nLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZyI+amF2YS5sYW5nPC9hPl0gPC9kZD48ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+RW51bSDihpIgQW55UmVmPC9kZD48ZHQ+QW5ub3RhdGlvbnM8L2R0PjxkZD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+QHRocm93czwvc3Bhbj48c3BhbiBjbGFzcz0iYXJncyI+KDxzcGFuPgorICAgICAgCisgICAgICA8c3BhbiBjbGFzcz0iZGVmdmFsIiBuYW1lPSJjbGFzc09mW2phdmEubGFuZy5DbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbl0iPi4uLjwvc3Bhbj4KKyAgICA8L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgICAgICAgCisgICAgICAgIDwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJqYXZhLmxhbmcuRW51bSNjb21wYXJlVG8iIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJjb21wYXJlVG8oeCQxOkUpOkludCI+PC9hPgorICAgICAgPGEgaWQ9ImNvbXBhcmVUbyhIaXZlRGF0YVR5cGVzKTpJbnQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmNvbXBhcmVUbzwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPGEgaHJlZj0iIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwuSGl2ZURhdGFUeXBlcyI+SGl2ZURhdGFUeXBlczwvYT48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkludCI+SW50PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkVudW0g4oaSIENvbXBhcmFibGU8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI2VxIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iZXEoeCQxOkFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9ImVxKEFueVJlZik6Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+ZXE8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueVJlZiI+QW55UmVmPC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0iamF2YS5sYW5nLkVudW0jZXF1YWxzIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iZXF1YWxzKHgkMTpBbnkpOkJvb2xlYW4iPjwvYT4KKyAgICAgIDxhIGlkPSJlcXVhbHMoQW55KTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5lcXVhbHM8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvc3Bhbj4pPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQm9vbGVhbiI+Qm9vbGVhbjwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5FbnVtIOKGkiBBbnlSZWYg4oaSIEFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJqYXZhLmxhbmcuRW51bSNmaW5hbGl6ZSIgdmlzYmw9InBydCIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImZpbmFsaXplKCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9ImZpbmFsaXplKCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+ZmluYWxpemU8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Vbml0Ij5Vbml0PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkF0dHJpYnV0ZXM8L2R0PjxkZD5wcm90ZWN0ZWRbPGEgaHJlZj0iLi4vLi4vLi4vLi4vLi4vamF2YSRsYW5nLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZyI+amF2YS5sYW5nPC9hPl0gPC9kZD48ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+RW51bSDihpIgQW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNnZXRDbGFzcyIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImdldENsYXNzKCk6Q2xhc3NbX10iPjwvYT4KKyAgICAgIDxhIGlkPSJnZXRDbGFzcygpOkNsYXNzW19dIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5nZXRDbGFzczwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5DbGFzcyI+Q2xhc3M8L3NwYW4+W19dPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0iamF2YS5sYW5nLkVudW0jZ2V0RGVjbGFyaW5nQ2xhc3MiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJnZXREZWNsYXJpbmdDbGFzcygpOkNsYXNzW0VdIj48L2E+CisgICAgICA8YSBpZD0iZ2V0RGVjbGFyaW5nQ2xhc3MoKTpDbGFzc1tIaXZlRGF0YVR5cGVzXSI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+Z2V0RGVjbGFyaW5nQ2xhc3M8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuQ2xhc3MiPkNsYXNzPC9zcGFuPls8YSBocmVmPSIiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzIj5IaXZlRGF0YVR5cGVzPC9hPl08L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5FbnVtPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzI2dldE5hbWUiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImdldE5hbWUoKTpTdHJpbmciPjwvYT4KKyAgICAgIDxhIGlkPSJnZXROYW1lKCk6U3RyaW5nIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5nZXROYW1lPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5sYW5nLlN0cmluZyI+U3RyaW5nPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjxsaSBuYW1lPSJqYXZhLmxhbmcuRW51bSNoYXNoQ29kZSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9Imhhc2hDb2RlKCk6SW50Ij48L2E+CisgICAgICA8YSBpZD0iaGFzaENvZGUoKTpJbnQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmhhc2hDb2RlPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuSW50Ij5JbnQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+RW51bSDihpIgQW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55I2lzSW5zdGFuY2VPZiIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImlzSW5zdGFuY2VPZltUMF06Qm9vbGVhbiI+PC9hPgorICAgICAgPGEgaWQ9ImlzSW5zdGFuY2VPZltUMF06Qm9vbGVhbiI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+aXNJbnN0YW5jZU9mPC9zcGFuPjxzcGFuIGNsYXNzPSJ0cGFyYW1zIj5bPHNwYW4gbmFtZT0iVDAiPlQwPC9zcGFuPl08L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJqYXZhLmxhbmcuRW51bSNuYW1lIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0ibmFtZSgpOlN0cmluZyI+PC9hPgorICAgICAgPGEgaWQ9Im5hbWUoKTpTdHJpbmciPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPm5hbWU8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuU3RyaW5nIj5TdHJpbmc8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+RW51bTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjbmUiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJuZSh4JDE6QW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8YSBpZD0ibmUoQW55UmVmKTpCb29sZWFuIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5uZTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Cb29sZWFuIj5Cb29sZWFuPC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjbm90aWZ5IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0ibm90aWZ5KCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9Im5vdGlmeSgpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPm5vdGlmeTwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oKTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiNub3RpZnlBbGwiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJub3RpZnlBbGwoKTpVbml0Ij48L2E+CisgICAgICA8YSBpZD0ibm90aWZ5QWxsKCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+bm90aWZ5QWxsPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0iamF2YS5sYW5nLkVudW0jb3JkaW5hbCIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9Im9yZGluYWwoKTpJbnQiPjwvYT4KKyAgICAgIDxhIGlkPSJvcmRpbmFsKCk6SW50Ij48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5vcmRpbmFsPC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuSW50Ij5JbnQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+RW51bTwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjc3luY2hyb25pemVkIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0ic3luY2hyb25pemVkW1QwXSh4JDE6PSZndDtUMCk6VDAiPjwvYT4KKyAgICAgIDxhIGlkPSJzeW5jaHJvbml6ZWRbVDBdKOKHklQwKTpUMCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+c3luY2hyb25pemVkPC9zcGFuPjxzcGFuIGNsYXNzPSJ0cGFyYW1zIj5bPHNwYW4gbmFtZT0iVDAiPlQwPC9zcGFuPl08L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IOKHkiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuQW55UmVmLnN5bmNocm9uaXplZC5UMCI+VDA8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuQW55UmVmLnN5bmNocm9uaXplZC5UMCI+VDA8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9ImphdmEubGFuZy5FbnVtI3RvU3RyaW5nIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0idG9TdHJpbmcoKTpTdHJpbmciPjwvYT4KKyAgICAgIDxhIGlkPSJ0b1N0cmluZygpOlN0cmluZyI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+dG9TdHJpbmc8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KCk8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmxhbmcuU3RyaW5nIj5TdHJpbmc8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+RW51bSDihpIgQW55UmVmIOKGkiBBbnk8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48bGkgbmFtZT0ic2NhbGEuQW55UmVmI3dhaXQiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ieWVzIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJ3YWl0KCk6VW5pdCI+PC9hPgorICAgICAgPGEgaWQ9IndhaXQoKTpVbml0Ij48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+ZmluYWwgPC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+ZGVmPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj53YWl0PC9zcGFuPjxzcGFuIGNsYXNzPSJwYXJhbXMiPigpPC9zcGFuPjxzcGFuIGNsYXNzPSJyZXN1bHQiPjogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuVW5pdCI+VW5pdDwvc3Bhbj48L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgPGRpdiBjbGFzcz0iZnVsbGNvbW1lbnQiPjxkbCBjbGFzcz0iYXR0cmlidXRlcyBibG9jayI+IDxkdD5EZWZpbml0aW9uIENsYXNzZXM8L2R0PjxkZD5BbnlSZWY8L2RkPjxkdD5Bbm5vdGF0aW9uczwvZHQ+PGRkPgorICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj5AdGhyb3dzPC9zcGFuPjxzcGFuIGNsYXNzPSJhcmdzIj4oPHNwYW4+CisgICAgICAKKyAgICAgIDxzcGFuIGNsYXNzPSJkZWZ2YWwiIG5hbWU9ImNsYXNzT2ZbamF2YS5sYW5nLkludGVycnVwdGVkRXhjZXB0aW9uXSI+Li4uPC9zcGFuPgorICAgIDwvc3Bhbj4pPC9zcGFuPgorICAgICAgICAgICAgICAKKyAgICAgICAgPC9kZD48L2RsPjwvZGl2PgorICAgIDwvbGk+PGxpIG5hbWU9InNjYWxhLkFueVJlZiN3YWl0IiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9InllcyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0id2FpdCh4JDE6TG9uZyx4JDI6SW50KTpVbml0Ij48L2E+CisgICAgICA8YSBpZD0id2FpdChMb25nLEludCk6VW5pdCI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPmZpbmFsIDwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPmRlZjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+d2FpdDwvc3Bhbj48c3BhbiBjbGFzcz0icGFyYW1zIj4oPHNwYW4gbmFtZT0iYXJnMCI+YXJnMDogPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuTG9uZyI+TG9uZzwvc3Bhbj48L3NwYW4+LCA8c3BhbiBuYW1lPSJhcmcxIj5hcmcxOiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5JbnQiPkludDwvc3Bhbj48L3NwYW4+KTwvc3Bhbj48c3BhbiBjbGFzcz0icmVzdWx0Ij46IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLlVuaXQiPlVuaXQ8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIDxkaXYgY2xhc3M9ImZ1bGxjb21tZW50Ij48ZGwgY2xhc3M9ImF0dHJpYnV0ZXMgYmxvY2siPiA8ZHQ+RGVmaW5pdGlvbiBDbGFzc2VzPC9kdD48ZGQ+QW55UmVmPC9kZD48ZHQ+QW5ub3RhdGlvbnM8L2R0PjxkZD4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+QHRocm93czwvc3Bhbj48c3BhbiBjbGFzcz0iYXJncyI+KDxzcGFuPgorICAgICAgCisgICAgICA8c3BhbiBjbGFzcz0iZGVmdmFsIiBuYW1lPSJjbGFzc09mW2phdmEubGFuZy5JbnRlcnJ1cHRlZEV4Y2VwdGlvbl0iPi4uLjwvc3Bhbj4KKyAgICA8L3NwYW4+KTwvc3Bhbj4KKyAgICAgICAgICAgICAgCisgICAgICAgIDwvZGQ+PC9kbD48L2Rpdj4KKyAgICA8L2xpPjxsaSBuYW1lPSJzY2FsYS5BbnlSZWYjd2FpdCIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJ5ZXMiIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IndhaXQoeCQxOkxvbmcpOlVuaXQiPjwvYT4KKyAgICAgIDxhIGlkPSJ3YWl0KExvbmcpOlVuaXQiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj5maW5hbCA8L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5kZWY8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPndhaXQ8L3NwYW4+PHNwYW4gY2xhc3M9InBhcmFtcyI+KDxzcGFuIG5hbWU9ImFyZzAiPmFyZzA6IDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkxvbmciPkxvbmc8L3NwYW4+PC9zcGFuPik8L3NwYW4+PHNwYW4gY2xhc3M9InJlc3VsdCI+OiA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJzY2FsYS5Vbml0Ij5Vbml0PC9zcGFuPjwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICA8ZGl2IGNsYXNzPSJmdWxsY29tbWVudCI+PGRsIGNsYXNzPSJhdHRyaWJ1dGVzIGJsb2NrIj4gPGR0PkRlZmluaXRpb24gQ2xhc3NlczwvZHQ+PGRkPkFueVJlZjwvZGQ+PGR0PkFubm90YXRpb25zPC9kdD48ZGQ+CisgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPkB0aHJvd3M8L3NwYW4+PHNwYW4gY2xhc3M9ImFyZ3MiPig8c3Bhbj4KKyAgICAgIAorICAgICAgPHNwYW4gY2xhc3M9ImRlZnZhbCIgbmFtZT0iY2xhc3NPZltqYXZhLmxhbmcuSW50ZXJydXB0ZWRFeGNlcHRpb25dIj4uLi48L3NwYW4+CisgICAgPC9zcGFuPik8L3NwYW4+CisgICAgICAgICAgICAgIAorICAgICAgICA8L2RkPjwvZGw+PC9kaXY+CisgICAgPC9saT48L29sPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgCisKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9ImluaGVyaXRlZE1lbWJlcnMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwYXJlbnQiIG5hbWU9ImphdmEubGFuZy5FbnVtIj4KKyAgICAgICAgICAgICAgPGgzPkluaGVyaXRlZCBmcm9tIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5FbnVtIj5FbnVtPC9zcGFuPls8YSBocmVmPSIiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzIj5IaXZlRGF0YVR5cGVzPC9hPl08L2gzPgorICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzcz0icGFyZW50IiBuYW1lPSJqYXZhLmlvLlNlcmlhbGl6YWJsZSI+CisgICAgICAgICAgICAgIDxoMz5Jbmhlcml0ZWQgZnJvbSA8c3BhbiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJqYXZhLmlvLlNlcmlhbGl6YWJsZSI+U2VyaWFsaXphYmxlPC9zcGFuPjwvaDM+CisgICAgICAgICAgICA8L2Rpdj48ZGl2IGNsYXNzPSJwYXJlbnQiIG5hbWU9ImphdmEubGFuZy5Db21wYXJhYmxlIj4KKyAgICAgICAgICAgICAgPGgzPkluaGVyaXRlZCBmcm9tIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9ImphdmEubGFuZy5Db21wYXJhYmxlIj5Db21wYXJhYmxlPC9zcGFuPls8YSBocmVmPSIiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzIj5IaXZlRGF0YVR5cGVzPC9hPl08L2gzPgorICAgICAgICAgICAgPC9kaXY+PGRpdiBjbGFzcz0icGFyZW50IiBuYW1lPSJzY2FsYS5BbnlSZWYiPgorICAgICAgICAgICAgICA8aDM+SW5oZXJpdGVkIGZyb20gPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9oMz4KKyAgICAgICAgICAgIDwvZGl2PjxkaXYgY2xhc3M9InBhcmVudCIgbmFtZT0ic2NhbGEuQW55Ij4KKyAgICAgICAgICAgICAgPGgzPkluaGVyaXRlZCBmcm9tIDxzcGFuIGNsYXNzPSJleHR5cGUiIG5hbWU9InNjYWxhLkFueSI+QW55PC9zcGFuPjwvaDM+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9Imdyb3VwZWRNZW1iZXJzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXAiIG5hbWU9IlVuZ3JvdXBlZCI+CisgICAgICAgICAgICAgIDxoMz5Vbmdyb3VwZWQ8L2gzPgorICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKworICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRvb2x0aXAiPjwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJmb290ZXIiPiAgPC9kaXY+CisgICAgICA8c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0ianF1ZXJ5LWpzIiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktdWktanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL2pxdWVyeS11aS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRvb2xzLXRvb2x0aXAtanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL3Rvb2xzLnRvb2x0aXAuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJ0ZW1wbGF0ZS1qcyIgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvdGVtcGxhdGUuanMiPjwvc2NyaXB0PgorICAgIDwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvbW9kZWwvcGFja2FnZS5odG1sIGIvaGl2ZS9zY2FsYWRvY3Mvb3JnL2FwYWNoZS9hdGxhcy9oaXZlL21vZGVsL3BhY2thZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NDE3NzYxCi0tLSAvZGV2L251bGwKKysrIGIvaGl2ZS9zY2FsYWRvY3Mvb3JnL2FwYWNoZS9hdGxhcy9oaXZlL21vZGVsL3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDExOCBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICA8dGl0bGU+bW9kZWwgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42LWluY3ViYXRpbmctU05BUFNIT1QgQVBJIC0gb3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsPC90aXRsZT4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ibW9kZWwgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IC0gaW5jdWJhdGluZyAtIFNOQVBTSE9UIEFQSSAtIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbCIgLz4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0ibW9kZWwgQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNiBpbmN1YmF0aW5nIFNOQVBTSE9UIEFQSSBvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwiIC8+CisgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIC8+CisgICAgICAgICAgCisgICAgICA8bGluayBocmVmPSIuLi8uLi8uLi8uLi8uLi9saWIvdGVtcGxhdGUuY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgorICAgICAgPGxpbmsgaHJlZj0iLi4vLi4vLi4vLi4vLi4vbGliL2RpYWdyYW1zLmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgaWQ9ImRpYWdyYW1zLWNzcyIgLz4KKyAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgIGlmKHRvcCA9PT0gc2VsZikgeworICAgICAgICAgICAgdmFyIHVybCA9ICcuLi8uLi8uLi8uLi8uLi9pbmRleC5odG1sJzsKKyAgICAgICAgICAgIHZhciBoYXNoID0gJ29yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5wYWNrYWdlJzsKKyAgICAgICAgICAgIHZhciBhbmNob3IgPSB3aW5kb3cubG9jYXRpb24uaGFzaDsKKyAgICAgICAgICAgIHZhciBhbmNob3Jfb3B0ID0gJyc7CisgICAgICAgICAgICBpZiAoYW5jaG9yLmxlbmd0aCA+PSAxKQorICAgICAgICAgICAgICBhbmNob3Jfb3B0ID0gJ0AnICsgYW5jaG9yLnN1YnN0cmluZygxKTsKKyAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsICsgJyMnICsgaGFzaCArIGFuY2hvcl9vcHQ7CisgICAgICAgICB9CisgICAJICA8L3NjcmlwdD4KKyAgICAKKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keSBjbGFzcz0idmFsdWUiPgorICAgICAgPGRpdiBpZD0iZGVmaW5pdGlvbiI+CisgICAgICAgIDxpbWcgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvcGFja2FnZV9iaWcucG5nIiAvPgorICAgICAgICA8cCBpZD0ib3duZXIiPjxhIGhyZWY9Ii4uLy4uLy4uLy4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnIj5vcmc8L2E+LjxhIGhyZWY9Ii4uLy4uLy4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZSI+YXBhY2hlPC9hPi48YSBocmVmPSIuLi8uLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMiPmF0bGFzPC9hPi48YSBocmVmPSIuLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZSI+aGl2ZTwvYT48L3A+CisgICAgICAgIDxoMT5tb2RlbDwvaDE+CisgICAgICA8L2Rpdj4KKworICAgICAgPGg0IGlkPSJzaWduYXR1cmUiIGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPnBhY2thZ2U8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPm1vZGVsPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgICAgICAgIDxkaXYgaWQ9ImNvbW1lbnQiIGNsYXNzPSJmdWxsY29tbWVudHRvcCI+PC9kaXY+CisgICAgICAgIAorCisgICAgICA8ZGl2IGlkPSJtYnJzZWwiPgorICAgICAgICA8ZGl2IGlkPSJ0ZXh0ZmlsdGVyIj48c3BhbiBjbGFzcz0icHJlIj48L3NwYW4+PHNwYW4gY2xhc3M9ImlucHV0Ij48aW5wdXQgaWQ9Im1icnNlbC1pbnB1dCIgdHlwZT0idGV4dCIgYWNjZXNza2V5PSIvIiAvPjwvc3Bhbj48c3BhbiBjbGFzcz0icG9zdCI+PC9zcGFuPjwvZGl2PgorICAgICAgICAKKyAgICAgICAgCisgICAgICAgIDxkaXYgaWQ9InZpc2JsIj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWx0ZXJ0eXBlIj5WaXNpYmlsaXR5PC9zcGFuPgorICAgICAgICAgICAgPG9sPjxsaSBjbGFzcz0icHVibGljIGluIj48c3Bhbj5QdWJsaWM8L3NwYW4+PC9saT48bGkgY2xhc3M9ImFsbCBvdXQiPjxzcGFuPkFsbDwvc3Bhbj48L2xpPjwvb2w+CisgICAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0idGVtcGxhdGUiPgorICAgICAgICA8ZGl2IGlkPSJhbGxNZW1iZXJzIj4KKyAgICAgICAgCisKKyAgICAgICAgPGRpdiBpZD0idHlwZXMiIGNsYXNzPSJ0eXBlcyBtZW1iZXJzIj4KKyAgICAgICAgICAgICAgPGgzPlR5cGUgTWVtYmVyczwvaDM+CisgICAgICAgICAgICAgIDxvbD48bGkgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhTW9kZWxHZW5lcmF0b3IiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9IkhpdmVEYXRhTW9kZWxHZW5lcmF0b3JleHRlbmRzT2JqZWN0Ij48L2E+CisgICAgICA8YSBpZD0iSGl2ZURhdGFNb2RlbEdlbmVyYXRvcjpIaXZlRGF0YU1vZGVsR2VuZXJhdG9yIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+Y2xhc3M8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPGEgaHJlZj0iSGl2ZURhdGFNb2RlbEdlbmVyYXRvci5odG1sIj48c3BhbiBjbGFzcz0ibmFtZSI+SGl2ZURhdGFNb2RlbEdlbmVyYXRvcjwvc3Bhbj48L2E+PHNwYW4gY2xhc3M9InJlc3VsdCI+IGV4dGVuZHMgPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0ic2NhbGEuQW55UmVmIj5BbnlSZWY8L3NwYW4+PC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgIDwvbGk+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMuaGl2ZS5tb2RlbC5IaXZlRGF0YVR5cGVzIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJIaXZlRGF0YVR5cGVzZXh0ZW5kc0VudW1bb3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhVHlwZXNdIj48L2E+CisgICAgICA8YSBpZD0iSGl2ZURhdGFUeXBlczpIaXZlRGF0YVR5cGVzIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+Y2xhc3M8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPGEgaHJlZj0iSGl2ZURhdGFUeXBlcy5odG1sIj48c3BhbiBjbGFzcz0ibmFtZSI+SGl2ZURhdGFUeXBlczwvc3Bhbj48L2E+PHNwYW4gY2xhc3M9InJlc3VsdCI+IGV4dGVuZHMgPHNwYW4gY2xhc3M9ImV4dHlwZSIgbmFtZT0iamF2YS5sYW5nLkVudW0iPkVudW08L3NwYW4+WzxhIGhyZWY9IkhpdmVEYXRhVHlwZXMuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcy5oaXZlLm1vZGVsLkhpdmVEYXRhVHlwZXMiPkhpdmVEYXRhVHlwZXM8L2E+XTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjwvb2w+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAKKworICAgICAgICAKKworICAgICAgICAKKworICAgICAgICAKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0iaW5oZXJpdGVkTWVtYmVycyI+CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0iZ3JvdXBlZE1lbWJlcnMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJncm91cCIgbmFtZT0iVW5ncm91cGVkIj4KKyAgICAgICAgICAgICAgPGgzPlVuZ3JvdXBlZDwvaDM+CisgICAgICAgICAgICAgIAorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorCisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0idG9vbHRpcCI+PC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImZvb3RlciI+ICA8L2Rpdj4KKyAgICAgIDxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktanMiIHNyYz0iLi4vLi4vLi4vLi4vLi4vbGliL2pxdWVyeS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9ImpxdWVyeS11aS1qcyIgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvanF1ZXJ5LXVpLmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0idG9vbHMtdG9vbHRpcC1qcyIgc3JjPSIuLi8uLi8uLi8uLi8uLi9saWIvdG9vbHMudG9vbHRpcC5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRlbXBsYXRlLWpzIiBzcmM9Ii4uLy4uLy4uLy4uLy4uL2xpYi90ZW1wbGF0ZS5qcyI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvaGl2ZS9wYWNrYWdlLmh0bWwgYi9oaXZlL3NjYWxhZG9jcy9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvcGFja2FnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjRjYWQxOTkKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9vcmcvYXBhY2hlL2F0bGFzL2hpdmUvcGFja2FnZS5odG1sCkBAIC0wLDAgKzEsMTMxIEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgIDx0aXRsZT5oaXZlIC0gQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNi1pbmN1YmF0aW5nLVNOQVBTSE9UIEFQSSAtIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZTwvdGl0bGU+CisgICAgICAgICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9ImhpdmUgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IC0gaW5jdWJhdGluZyAtIFNOQVBTSE9UIEFQSSAtIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZSIgLz4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0iaGl2ZSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IGluY3ViYXRpbmcgU05BUFNIT1QgQVBJIG9yZy5hcGFjaGUuYXRsYXMuaGl2ZSIgLz4KKyAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KKyAgICAgICAgICAKKyAgICAgIDxsaW5rIGhyZWY9Ii4uLy4uLy4uLy4uL2xpYi90ZW1wbGF0ZS5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+CisgICAgICA8bGluayBocmVmPSIuLi8uLi8uLi8uLi9saWIvZGlhZ3JhbXMuY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBpZD0iZGlhZ3JhbXMtY3NzIiAvPgorICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICAgaWYodG9wID09PSBzZWxmKSB7CisgICAgICAgICAgICB2YXIgdXJsID0gJy4uLy4uLy4uLy4uL2luZGV4Lmh0bWwnOworICAgICAgICAgICAgdmFyIGhhc2ggPSAnb3JnLmFwYWNoZS5hdGxhcy5oaXZlLnBhY2thZ2UnOworICAgICAgICAgICAgdmFyIGFuY2hvciA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworICAgICAgICAgICAgdmFyIGFuY2hvcl9vcHQgPSAnJzsKKyAgICAgICAgICAgIGlmIChhbmNob3IubGVuZ3RoID49IDEpCisgICAgICAgICAgICAgIGFuY2hvcl9vcHQgPSAnQCcgKyBhbmNob3Iuc3Vic3RyaW5nKDEpOworICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmwgKyAnIycgKyBoYXNoICsgYW5jaG9yX29wdDsKKyAgICAgICAgIH0KKyAgIAkgIDwvc2NyaXB0PgorICAgIAorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ2YWx1ZSI+CisgICAgICA8ZGl2IGlkPSJkZWZpbml0aW9uIj4KKyAgICAgICAgPGltZyBzcmM9Ii4uLy4uLy4uLy4uL2xpYi9wYWNrYWdlX2JpZy5wbmciIC8+CisgICAgICAgIDxwIGlkPSJvd25lciI+PGEgaHJlZj0iLi4vLi4vLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmciPm9yZzwvYT4uPGEgaHJlZj0iLi4vLi4vcGFja2FnZS5odG1sIiBjbGFzcz0iZXh0eXBlIiBuYW1lPSJvcmcuYXBhY2hlIj5hcGFjaGU8L2E+LjxhIGhyZWY9Ii4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZS5hdGxhcyI+YXRsYXM8L2E+PC9wPgorICAgICAgICA8aDE+aGl2ZTwvaDE+CisgICAgICA8L2Rpdj4KKworICAgICAgPGg0IGlkPSJzaWduYXR1cmUiIGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPnBhY2thZ2U8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmhpdmU8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgICAgICAgPGRpdiBpZD0iY29tbWVudCIgY2xhc3M9ImZ1bGxjb21tZW50dG9wIj48L2Rpdj4KKyAgICAgICAgCisKKyAgICAgIDxkaXYgaWQ9Im1icnNlbCI+CisgICAgICAgIDxkaXYgaWQ9InRleHRmaWx0ZXIiPjxzcGFuIGNsYXNzPSJwcmUiPjwvc3Bhbj48c3BhbiBjbGFzcz0iaW5wdXQiPjxpbnB1dCBpZD0ibWJyc2VsLWlucHV0IiB0eXBlPSJ0ZXh0IiBhY2Nlc3NrZXk9Ii8iIC8+PC9zcGFuPjxzcGFuIGNsYXNzPSJwb3N0Ij48L3NwYW4+PC9kaXY+CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgPGRpdiBpZD0idmlzYmwiPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbHRlcnR5cGUiPlZpc2liaWxpdHk8L3NwYW4+CisgICAgICAgICAgICA8b2w+PGxpIGNsYXNzPSJwdWJsaWMgaW4iPjxzcGFuPlB1YmxpYzwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iYWxsIG91dCI+PHNwYW4+QWxsPC9zcGFuPjwvbGk+PC9vbD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJ0ZW1wbGF0ZSI+CisgICAgICAgIDxkaXYgaWQ9ImFsbE1lbWJlcnMiPgorICAgICAgICAKKworICAgICAgICAKKworICAgICAgICAKKworICAgICAgICA8ZGl2IGlkPSJ2YWx1ZXMiIGNsYXNzPSJ2YWx1ZXMgbWVtYmVycyI+CisgICAgICAgICAgICAgIDxoMz5WYWx1ZSBNZW1iZXJzPC9oMz4KKyAgICAgICAgICAgICAgPG9sPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuYnJpZGdlIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJicmlkZ2UiPjwvYT4KKyAgICAgIDxhIGlkPSJicmlkZ2U6YnJpZGdlIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+cGFja2FnZTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8YSBocmVmPSJicmlkZ2UvcGFja2FnZS5odG1sIj48c3BhbiBjbGFzcz0ibmFtZSI+YnJpZGdlPC9zcGFuPjwvYT4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUuaG9vayIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iaG9vayI+PC9hPgorICAgICAgPGEgaWQ9Imhvb2s6aG9vayI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPnBhY2thZ2U8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPGEgaHJlZj0iaG9vay9wYWNrYWdlLmh0bWwiPjxzcGFuIGNsYXNzPSJuYW1lIj5ob29rPC9zcGFuPjwvYT4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUubW9kZWwiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9Im1vZGVsIj48L2E+CisgICAgICA8YSBpZD0ibW9kZWw6bW9kZWwiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5wYWNrYWdlPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxhIGhyZWY9Im1vZGVsL3BhY2thZ2UuaHRtbCI+PHNwYW4gY2xhc3M9Im5hbWUiPm1vZGVsPC9zcGFuPjwvYT4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjwvb2w+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAKKworICAgICAgICAKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0iaW5oZXJpdGVkTWVtYmVycyI+CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0iZ3JvdXBlZE1lbWJlcnMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJncm91cCIgbmFtZT0iVW5ncm91cGVkIj4KKyAgICAgICAgICAgICAgPGgzPlVuZ3JvdXBlZDwvaDM+CisgICAgICAgICAgICAgIAorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorCisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0idG9vbHRpcCI+PC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImZvb3RlciI+ICA8L2Rpdj4KKyAgICAgIDxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktanMiIHNyYz0iLi4vLi4vLi4vLi4vbGliL2pxdWVyeS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9ImpxdWVyeS11aS1qcyIgc3JjPSIuLi8uLi8uLi8uLi9saWIvanF1ZXJ5LXVpLmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0idG9vbHMtdG9vbHRpcC1qcyIgc3JjPSIuLi8uLi8uLi8uLi9saWIvdG9vbHMudG9vbHRpcC5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRlbXBsYXRlLWpzIiBzcmM9Ii4uLy4uLy4uLy4uL2xpYi90ZW1wbGF0ZS5qcyI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvcGFja2FnZS5odG1sIGIvaGl2ZS9zY2FsYWRvY3Mvb3JnL2FwYWNoZS9hdGxhcy9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDNiMjc2OQotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvYXRsYXMvcGFja2FnZS5odG1sCkBAIC0wLDAgKzEsMTA1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgIDx0aXRsZT5hdGxhcyAtIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYtaW5jdWJhdGluZy1TTkFQU0hPVCBBUEkgLSBvcmcuYXBhY2hlLmF0bGFzPC90aXRsZT4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0iYXRsYXMgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IC0gaW5jdWJhdGluZyAtIFNOQVBTSE9UIEFQSSAtIG9yZy5hcGFjaGUuYXRsYXMiIC8+CisgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9ImF0bGFzIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYgaW5jdWJhdGluZyBTTkFQU0hPVCBBUEkgb3JnLmFwYWNoZS5hdGxhcyIgLz4KKyAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KKyAgICAgICAgICAKKyAgICAgIDxsaW5rIGhyZWY9Ii4uLy4uLy4uL2xpYi90ZW1wbGF0ZS5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+CisgICAgICA8bGluayBocmVmPSIuLi8uLi8uLi9saWIvZGlhZ3JhbXMuY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBpZD0iZGlhZ3JhbXMtY3NzIiAvPgorICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICAgaWYodG9wID09PSBzZWxmKSB7CisgICAgICAgICAgICB2YXIgdXJsID0gJy4uLy4uLy4uL2luZGV4Lmh0bWwnOworICAgICAgICAgICAgdmFyIGhhc2ggPSAnb3JnLmFwYWNoZS5hdGxhcy5wYWNrYWdlJzsKKyAgICAgICAgICAgIHZhciBhbmNob3IgPSB3aW5kb3cubG9jYXRpb24uaGFzaDsKKyAgICAgICAgICAgIHZhciBhbmNob3Jfb3B0ID0gJyc7CisgICAgICAgICAgICBpZiAoYW5jaG9yLmxlbmd0aCA+PSAxKQorICAgICAgICAgICAgICBhbmNob3Jfb3B0ID0gJ0AnICsgYW5jaG9yLnN1YnN0cmluZygxKTsKKyAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsICsgJyMnICsgaGFzaCArIGFuY2hvcl9vcHQ7CisgICAgICAgICB9CisgICAJICA8L3NjcmlwdD4KKyAgICAKKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keSBjbGFzcz0idmFsdWUiPgorICAgICAgPGRpdiBpZD0iZGVmaW5pdGlvbiI+CisgICAgICAgIDxpbWcgc3JjPSIuLi8uLi8uLi9saWIvcGFja2FnZV9iaWcucG5nIiAvPgorICAgICAgICA8cCBpZD0ib3duZXIiPjxhIGhyZWY9Ii4uLy4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnIj5vcmc8L2E+LjxhIGhyZWY9Ii4uL3BhY2thZ2UuaHRtbCIgY2xhc3M9ImV4dHlwZSIgbmFtZT0ib3JnLmFwYWNoZSI+YXBhY2hlPC9hPjwvcD4KKyAgICAgICAgPGgxPmF0bGFzPC9oMT4KKyAgICAgIDwvZGl2PgorCisgICAgICA8aDQgaWQ9InNpZ25hdHVyZSIgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+cGFja2FnZTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+YXRsYXM8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgICAgICAgPGRpdiBpZD0iY29tbWVudCIgY2xhc3M9ImZ1bGxjb21tZW50dG9wIj48L2Rpdj4KKyAgICAgICAgCisKKyAgICAgIDxkaXYgaWQ9Im1icnNlbCI+CisgICAgICAgIDxkaXYgaWQ9InRleHRmaWx0ZXIiPjxzcGFuIGNsYXNzPSJwcmUiPjwvc3Bhbj48c3BhbiBjbGFzcz0iaW5wdXQiPjxpbnB1dCBpZD0ibWJyc2VsLWlucHV0IiB0eXBlPSJ0ZXh0IiBhY2Nlc3NrZXk9Ii8iIC8+PC9zcGFuPjxzcGFuIGNsYXNzPSJwb3N0Ij48L3NwYW4+PC9kaXY+CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgPGRpdiBpZD0idmlzYmwiPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbHRlcnR5cGUiPlZpc2liaWxpdHk8L3NwYW4+CisgICAgICAgICAgICA8b2w+PGxpIGNsYXNzPSJwdWJsaWMgaW4iPjxzcGFuPlB1YmxpYzwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iYWxsIG91dCI+PHNwYW4+QWxsPC9zcGFuPjwvbGk+PC9vbD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJ0ZW1wbGF0ZSI+CisgICAgICAgIDxkaXYgaWQ9ImFsbE1lbWJlcnMiPgorICAgICAgICAKKworICAgICAgICAKKworICAgICAgICAKKworICAgICAgICA8ZGl2IGlkPSJ2YWx1ZXMiIGNsYXNzPSJ2YWx1ZXMgbWVtYmVycyI+CisgICAgICAgICAgICAgIDxoMz5WYWx1ZSBNZW1iZXJzPC9oMz4KKyAgICAgICAgICAgICAgPG9sPjxsaSBuYW1lPSJvcmcuYXBhY2hlLmF0bGFzLmhpdmUiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImhpdmUiPjwvYT4KKyAgICAgIDxhIGlkPSJoaXZlOmhpdmUiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5wYWNrYWdlPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxhIGhyZWY9ImhpdmUvcGFja2FnZS5odG1sIj48c3BhbiBjbGFzcz0ibmFtZSI+aGl2ZTwvc3Bhbj48L2E+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48L29sPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgCisKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9ImluaGVyaXRlZE1lbWJlcnMiPgorICAgICAgICAKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9Imdyb3VwZWRNZW1iZXJzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXAiIG5hbWU9IlVuZ3JvdXBlZCI+CisgICAgICAgICAgICAgIDxoMz5Vbmdyb3VwZWQ8L2gzPgorICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKworICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRvb2x0aXAiPjwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJmb290ZXIiPiAgPC9kaXY+CisgICAgICA8c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0ianF1ZXJ5LWpzIiBzcmM9Ii4uLy4uLy4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktdWktanMiIHNyYz0iLi4vLi4vLi4vbGliL2pxdWVyeS11aS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRvb2xzLXRvb2x0aXAtanMiIHNyYz0iLi4vLi4vLi4vbGliL3Rvb2xzLnRvb2x0aXAuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJ0ZW1wbGF0ZS1qcyIgc3JjPSIuLi8uLi8uLi9saWIvdGVtcGxhdGUuanMiPjwvc2NyaXB0PgorICAgIDwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9vcmcvYXBhY2hlL3BhY2thZ2UuaHRtbCBiL2hpdmUvc2NhbGFkb2NzL29yZy9hcGFjaGUvcGFja2FnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjE1MTEwNjAKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9vcmcvYXBhY2hlL3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDEwNSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICA8dGl0bGU+YXBhY2hlIC0gQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNi1pbmN1YmF0aW5nLVNOQVBTSE9UIEFQSSAtIG9yZy5hcGFjaGU8L3RpdGxlPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJhcGFjaGUgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IC0gaW5jdWJhdGluZyAtIFNOQVBTSE9UIEFQSSAtIG9yZy5hcGFjaGUiIC8+CisgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9ImFwYWNoZSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IGluY3ViYXRpbmcgU05BUFNIT1QgQVBJIG9yZy5hcGFjaGUiIC8+CisgICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIC8+CisgICAgICAgICAgCisgICAgICA8bGluayBocmVmPSIuLi8uLi9saWIvdGVtcGxhdGUuY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiAvPgorICAgICAgPGxpbmsgaHJlZj0iLi4vLi4vbGliL2RpYWdyYW1zLmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgaWQ9ImRpYWdyYW1zLWNzcyIgLz4KKyAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgIGlmKHRvcCA9PT0gc2VsZikgeworICAgICAgICAgICAgdmFyIHVybCA9ICcuLi8uLi9pbmRleC5odG1sJzsKKyAgICAgICAgICAgIHZhciBoYXNoID0gJ29yZy5hcGFjaGUucGFja2FnZSc7CisgICAgICAgICAgICB2YXIgYW5jaG9yID0gd2luZG93LmxvY2F0aW9uLmhhc2g7CisgICAgICAgICAgICB2YXIgYW5jaG9yX29wdCA9ICcnOworICAgICAgICAgICAgaWYgKGFuY2hvci5sZW5ndGggPj0gMSkKKyAgICAgICAgICAgICAgYW5jaG9yX29wdCA9ICdAJyArIGFuY2hvci5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybCArICcjJyArIGhhc2ggKyBhbmNob3Jfb3B0OworICAgICAgICAgfQorICAgCSAgPC9zY3JpcHQ+CisgICAgCisgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHkgY2xhc3M9InZhbHVlIj4KKyAgICAgIDxkaXYgaWQ9ImRlZmluaXRpb24iPgorICAgICAgICA8aW1nIHNyYz0iLi4vLi4vbGliL3BhY2thZ2VfYmlnLnBuZyIgLz4KKyAgICAgICAgPHAgaWQ9Im93bmVyIj48YSBocmVmPSIuLi9wYWNrYWdlLmh0bWwiIGNsYXNzPSJleHR5cGUiIG5hbWU9Im9yZyI+b3JnPC9hPjwvcD4KKyAgICAgICAgPGgxPmFwYWNoZTwvaDE+CisgICAgICA8L2Rpdj4KKworICAgICAgPGg0IGlkPSJzaWduYXR1cmUiIGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPnBhY2thZ2U8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPmFwYWNoZTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICAgICAgICA8ZGl2IGlkPSJjb21tZW50IiBjbGFzcz0iZnVsbGNvbW1lbnR0b3AiPjwvZGl2PgorICAgICAgICAKKworICAgICAgPGRpdiBpZD0ibWJyc2VsIj4KKyAgICAgICAgPGRpdiBpZD0idGV4dGZpbHRlciI+PHNwYW4gY2xhc3M9InByZSI+PC9zcGFuPjxzcGFuIGNsYXNzPSJpbnB1dCI+PGlucHV0IGlkPSJtYnJzZWwtaW5wdXQiIHR5cGU9InRleHQiIGFjY2Vzc2tleT0iLyIgLz48L3NwYW4+PHNwYW4gY2xhc3M9InBvc3QiPjwvc3Bhbj48L2Rpdj4KKyAgICAgICAgCisgICAgICAgIAorICAgICAgICA8ZGl2IGlkPSJ2aXNibCI+CisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmlsdGVydHlwZSI+VmlzaWJpbGl0eTwvc3Bhbj4KKyAgICAgICAgICAgIDxvbD48bGkgY2xhc3M9InB1YmxpYyBpbiI+PHNwYW4+UHVibGljPC9zcGFuPjwvbGk+PGxpIGNsYXNzPSJhbGwgb3V0Ij48c3Bhbj5BbGw8L3NwYW4+PC9saT48L29sPgorICAgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRlbXBsYXRlIj4KKyAgICAgICAgPGRpdiBpZD0iYWxsTWVtYmVycyI+CisgICAgICAgIAorCisgICAgICAgIAorCisgICAgICAgIAorCisgICAgICAgIDxkaXYgaWQ9InZhbHVlcyIgY2xhc3M9InZhbHVlcyBtZW1iZXJzIj4KKyAgICAgICAgICAgICAgPGgzPlZhbHVlIE1lbWJlcnM8L2gzPgorICAgICAgICAgICAgICA8b2w+PGxpIG5hbWU9Im9yZy5hcGFjaGUuYXRsYXMiIHZpc2JsPSJwdWIiIGRhdGEtaXNhYnM9ImZhbHNlIiBmdWxsQ29tbWVudD0ibm8iIGdyb3VwPSJVbmdyb3VwZWQiPgorICAgICAgPGEgaWQ9ImF0bGFzIj48L2E+CisgICAgICA8YSBpZD0iYXRsYXM6YXRsYXMiPjwvYT4KKyAgICAgIDxoNCBjbGFzcz0ic2lnbmF0dXJlIj4KKyAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllcl9raW5kIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyIj48L3NwYW4+CisgICAgICAgIDxzcGFuIGNsYXNzPSJraW5kIj5wYWNrYWdlPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPHNwYW4gY2xhc3M9InN5bWJvbCI+CisgICAgICAgIDxhIGhyZWY9ImF0bGFzL3BhY2thZ2UuaHRtbCI+PHNwYW4gY2xhc3M9Im5hbWUiPmF0bGFzPC9zcGFuPjwvYT4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjwvb2w+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAKKworICAgICAgICAKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0iaW5oZXJpdGVkTWVtYmVycyI+CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0iZ3JvdXBlZE1lbWJlcnMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJncm91cCIgbmFtZT0iVW5ncm91cGVkIj4KKyAgICAgICAgICAgICAgPGgzPlVuZ3JvdXBlZDwvaDM+CisgICAgICAgICAgICAgIAorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorCisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0idG9vbHRpcCI+PC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImZvb3RlciI+ICA8L2Rpdj4KKyAgICAgIDxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktanMiIHNyYz0iLi4vLi4vbGliL2pxdWVyeS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9ImpxdWVyeS11aS1qcyIgc3JjPSIuLi8uLi9saWIvanF1ZXJ5LXVpLmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0idG9vbHMtdG9vbHRpcC1qcyIgc3JjPSIuLi8uLi9saWIvdG9vbHMudG9vbHRpcC5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRlbXBsYXRlLWpzIiBzcmM9Ii4uLy4uL2xpYi90ZW1wbGF0ZS5qcyI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2hpdmUvc2NhbGFkb2NzL29yZy9wYWNrYWdlLmh0bWwgYi9oaXZlL3NjYWxhZG9jcy9vcmcvcGFja2FnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg3NDQxNDQKLS0tIC9kZXYvbnVsbAorKysgYi9oaXZlL3NjYWxhZG9jcy9vcmcvcGFja2FnZS5odG1sCkBAIC0wLDAgKzEsMTA1IEBACis8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPgorPGh0bWw+CisgICAgICAgIDxoZWFkPgorICAgICAgICAgIDx0aXRsZT5vcmcgLSBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42LWluY3ViYXRpbmctU05BUFNIT1QgQVBJIC0gb3JnPC90aXRsZT4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJkZXNjcmlwdGlvbiIgY29udGVudD0ib3JnIC0gQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNiAtIGluY3ViYXRpbmcgLSBTTkFQU0hPVCBBUEkgLSBvcmciIC8+CisgICAgICAgICAgPG1ldGEgbmFtZT0ia2V5d29yZHMiIGNvbnRlbnQ9Im9yZyBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IGluY3ViYXRpbmcgU05BUFNIT1QgQVBJIG9yZyIgLz4KKyAgICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgLz4KKyAgICAgICAgICAKKyAgICAgIDxsaW5rIGhyZWY9Ii4uL2xpYi90ZW1wbGF0ZS5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIC8+CisgICAgICA8bGluayBocmVmPSIuLi9saWIvZGlhZ3JhbXMuY3NzIiBtZWRpYT0ic2NyZWVuIiB0eXBlPSJ0ZXh0L2NzcyIgcmVsPSJzdHlsZXNoZWV0IiBpZD0iZGlhZ3JhbXMtY3NzIiAvPgorICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICAgaWYodG9wID09PSBzZWxmKSB7CisgICAgICAgICAgICB2YXIgdXJsID0gJy4uL2luZGV4Lmh0bWwnOworICAgICAgICAgICAgdmFyIGhhc2ggPSAnb3JnLnBhY2thZ2UnOworICAgICAgICAgICAgdmFyIGFuY2hvciA9IHdpbmRvdy5sb2NhdGlvbi5oYXNoOworICAgICAgICAgICAgdmFyIGFuY2hvcl9vcHQgPSAnJzsKKyAgICAgICAgICAgIGlmIChhbmNob3IubGVuZ3RoID49IDEpCisgICAgICAgICAgICAgIGFuY2hvcl9vcHQgPSAnQCcgKyBhbmNob3Iuc3Vic3RyaW5nKDEpOworICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmwgKyAnIycgKyBoYXNoICsgYW5jaG9yX29wdDsKKyAgICAgICAgIH0KKyAgIAkgIDwvc2NyaXB0PgorICAgIAorICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ2YWx1ZSI+CisgICAgICA8ZGl2IGlkPSJkZWZpbml0aW9uIj4KKyAgICAgICAgPGltZyBzcmM9Ii4uL2xpYi9wYWNrYWdlX2JpZy5wbmciIC8+CisgICAgICAgIAorICAgICAgICA8aDE+b3JnPC9oMT4KKyAgICAgIDwvZGl2PgorCisgICAgICA8aDQgaWQ9InNpZ25hdHVyZSIgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+cGFja2FnZTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+b3JnPC9zcGFuPgorICAgICAgPC9zcGFuPgorICAgICAgPC9oND4KKyAgICAgIAorICAgICAgICAgIDxkaXYgaWQ9ImNvbW1lbnQiIGNsYXNzPSJmdWxsY29tbWVudHRvcCI+PC9kaXY+CisgICAgICAgIAorCisgICAgICA8ZGl2IGlkPSJtYnJzZWwiPgorICAgICAgICA8ZGl2IGlkPSJ0ZXh0ZmlsdGVyIj48c3BhbiBjbGFzcz0icHJlIj48L3NwYW4+PHNwYW4gY2xhc3M9ImlucHV0Ij48aW5wdXQgaWQ9Im1icnNlbC1pbnB1dCIgdHlwZT0idGV4dCIgYWNjZXNza2V5PSIvIiAvPjwvc3Bhbj48c3BhbiBjbGFzcz0icG9zdCI+PC9zcGFuPjwvZGl2PgorICAgICAgICAKKyAgICAgICAgCisgICAgICAgIDxkaXYgaWQ9InZpc2JsIj4KKyAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWx0ZXJ0eXBlIj5WaXNpYmlsaXR5PC9zcGFuPgorICAgICAgICAgICAgPG9sPjxsaSBjbGFzcz0icHVibGljIGluIj48c3Bhbj5QdWJsaWM8L3NwYW4+PC9saT48bGkgY2xhc3M9ImFsbCBvdXQiPjxzcGFuPkFsbDwvc3Bhbj48L2xpPjwvb2w+CisgICAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0idGVtcGxhdGUiPgorICAgICAgICA8ZGl2IGlkPSJhbGxNZW1iZXJzIj4KKyAgICAgICAgCisKKyAgICAgICAgCisKKyAgICAgICAgCisKKyAgICAgICAgPGRpdiBpZD0idmFsdWVzIiBjbGFzcz0idmFsdWVzIG1lbWJlcnMiPgorICAgICAgICAgICAgICA8aDM+VmFsdWUgTWVtYmVyczwvaDM+CisgICAgICAgICAgICAgIDxvbD48bGkgbmFtZT0ib3JnLmFwYWNoZSIgdmlzYmw9InB1YiIgZGF0YS1pc2Ficz0iZmFsc2UiIGZ1bGxDb21tZW50PSJubyIgZ3JvdXA9IlVuZ3JvdXBlZCI+CisgICAgICA8YSBpZD0iYXBhY2hlIj48L2E+CisgICAgICA8YSBpZD0iYXBhY2hlOmFwYWNoZSI+PC9hPgorICAgICAgPGg0IGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPnBhY2thZ2U8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPGEgaHJlZj0iYXBhY2hlL3BhY2thZ2UuaHRtbCI+PHNwYW4gY2xhc3M9Im5hbWUiPmFwYWNoZTwvc3Bhbj48L2E+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgPC9saT48L29sPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgCisKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9ImluaGVyaXRlZE1lbWJlcnMiPgorICAgICAgICAKKyAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgaWQ9Imdyb3VwZWRNZW1iZXJzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXAiIG5hbWU9IlVuZ3JvdXBlZCI+CisgICAgICAgICAgICAgIDxoMz5Vbmdyb3VwZWQ8L2gzPgorICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKworICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9InRvb2x0aXAiPjwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJmb290ZXIiPiAgPC9kaXY+CisgICAgICA8c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0ianF1ZXJ5LWpzIiBzcmM9Ii4uL2xpYi9qcXVlcnkuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktdWktanMiIHNyYz0iLi4vbGliL2pxdWVyeS11aS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRvb2xzLXRvb2x0aXAtanMiIHNyYz0iLi4vbGliL3Rvb2xzLnRvb2x0aXAuanMiPjwvc2NyaXB0PjxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJ0ZW1wbGF0ZS1qcyIgc3JjPSIuLi9saWIvdGVtcGxhdGUuanMiPjwvc2NyaXB0PgorICAgIDwvYm9keT4KKyAgICAgIDwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9oaXZlL3NjYWxhZG9jcy9wYWNrYWdlLmh0bWwgYi9oaXZlL3NjYWxhZG9jcy9wYWNrYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTNlYTcwNwotLS0gL2Rldi9udWxsCisrKyBiL2hpdmUvc2NhbGFkb2NzL3BhY2thZ2UuaHRtbApAQCAtMCwwICsxLDEwNSBAQAorPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkIj4KKzxodG1sPgorICAgICAgICA8aGVhZD4KKyAgICAgICAgICA8dGl0bGU+cm9vdCAtIEFwYWNoZSBBdGxhcyBIaXZlIEJyaWRnZSAwLjYtaW5jdWJhdGluZy1TTkFQU0hPVCBBUEkgLSBfcm9vdF88L3RpdGxlPgorICAgICAgICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJyb290IC0gQXBhY2hlIEF0bGFzIEhpdmUgQnJpZGdlIDAuNiAtIGluY3ViYXRpbmcgLSBTTkFQU0hPVCBBUEkgLSByb290ICIgLz4KKyAgICAgICAgICA8bWV0YSBuYW1lPSJrZXl3b3JkcyIgY29udGVudD0icm9vdCBBcGFjaGUgQXRsYXMgSGl2ZSBCcmlkZ2UgMC42IGluY3ViYXRpbmcgU05BUFNIT1QgQVBJIHJvb3QgIiAvPgorICAgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgorICAgICAgICAgIAorICAgICAgPGxpbmsgaHJlZj0ibGliL3RlbXBsYXRlLmNzcyIgbWVkaWE9InNjcmVlbiIgdHlwZT0idGV4dC9jc3MiIHJlbD0ic3R5bGVzaGVldCIgLz4KKyAgICAgIDxsaW5rIGhyZWY9ImxpYi9kaWFncmFtcy5jc3MiIG1lZGlhPSJzY3JlZW4iIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGlkPSJkaWFncmFtcy1jc3MiIC8+CisgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgICBpZih0b3AgPT09IHNlbGYpIHsKKyAgICAgICAgICAgIHZhciB1cmwgPSAnaW5kZXguaHRtbCc7CisgICAgICAgICAgICB2YXIgaGFzaCA9ICdwYWNrYWdlJzsKKyAgICAgICAgICAgIHZhciBhbmNob3IgPSB3aW5kb3cubG9jYXRpb24uaGFzaDsKKyAgICAgICAgICAgIHZhciBhbmNob3Jfb3B0ID0gJyc7CisgICAgICAgICAgICBpZiAoYW5jaG9yLmxlbmd0aCA+PSAxKQorICAgICAgICAgICAgICBhbmNob3Jfb3B0ID0gJ0AnICsgYW5jaG9yLnN1YnN0cmluZygxKTsKKyAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsICsgJyMnICsgaGFzaCArIGFuY2hvcl9vcHQ7CisgICAgICAgICB9CisgICAJICA8L3NjcmlwdD4KKyAgICAKKyAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keSBjbGFzcz0idmFsdWUiPgorICAgICAgPGRpdiBpZD0iZGVmaW5pdGlvbiI+CisgICAgICAgIDxpbWcgc3JjPSJsaWIvcGFja2FnZV9iaWcucG5nIiAvPgorICAgICAgICAKKyAgICAgICAgPGgxPnJvb3QgcGFja2FnZTwvaDE+CisgICAgICA8L2Rpdj4KKworICAgICAgPGg0IGlkPSJzaWduYXR1cmUiIGNsYXNzPSJzaWduYXR1cmUiPgorICAgICAgPHNwYW4gY2xhc3M9Im1vZGlmaWVyX2tpbmQiPgorICAgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXIiPjwvc3Bhbj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImtpbmQiPnBhY2thZ2U8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8c3BhbiBjbGFzcz0ic3ltYm9sIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPnJvb3Q8L3NwYW4+CisgICAgICA8L3NwYW4+CisgICAgICA8L2g0PgorICAgICAgCisgICAgICAgICAgPGRpdiBpZD0iY29tbWVudCIgY2xhc3M9ImZ1bGxjb21tZW50dG9wIj48L2Rpdj4KKyAgICAgICAgCisKKyAgICAgIDxkaXYgaWQ9Im1icnNlbCI+CisgICAgICAgIDxkaXYgaWQ9InRleHRmaWx0ZXIiPjxzcGFuIGNsYXNzPSJwcmUiPjwvc3Bhbj48c3BhbiBjbGFzcz0iaW5wdXQiPjxpbnB1dCBpZD0ibWJyc2VsLWlucHV0IiB0eXBlPSJ0ZXh0IiBhY2Nlc3NrZXk9Ii8iIC8+PC9zcGFuPjxzcGFuIGNsYXNzPSJwb3N0Ij48L3NwYW4+PC9kaXY+CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgPGRpdiBpZD0idmlzYmwiPgorICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZpbHRlcnR5cGUiPlZpc2liaWxpdHk8L3NwYW4+CisgICAgICAgICAgICA8b2w+PGxpIGNsYXNzPSJwdWJsaWMgaW4iPjxzcGFuPlB1YmxpYzwvc3Bhbj48L2xpPjxsaSBjbGFzcz0iYWxsIG91dCI+PHNwYW4+QWxsPC9zcGFuPjwvbGk+PC9vbD4KKyAgICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJ0ZW1wbGF0ZSI+CisgICAgICAgIDxkaXYgaWQ9ImFsbE1lbWJlcnMiPgorICAgICAgICAKKworICAgICAgICAKKworICAgICAgICAKKworICAgICAgICA8ZGl2IGlkPSJ2YWx1ZXMiIGNsYXNzPSJ2YWx1ZXMgbWVtYmVycyI+CisgICAgICAgICAgICAgIDxoMz5WYWx1ZSBNZW1iZXJzPC9oMz4KKyAgICAgICAgICAgICAgPG9sPjxsaSBuYW1lPSJfcm9vdF8ub3JnIiB2aXNibD0icHViIiBkYXRhLWlzYWJzPSJmYWxzZSIgZnVsbENvbW1lbnQ9Im5vIiBncm91cD0iVW5ncm91cGVkIj4KKyAgICAgIDxhIGlkPSJvcmciPjwvYT4KKyAgICAgIDxhIGlkPSJvcmc6b3JnIj48L2E+CisgICAgICA8aDQgY2xhc3M9InNpZ25hdHVyZSI+CisgICAgICA8c3BhbiBjbGFzcz0ibW9kaWZpZXJfa2luZCI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJtb2RpZmllciI+PC9zcGFuPgorICAgICAgICA8c3BhbiBjbGFzcz0ia2luZCI+cGFja2FnZTwvc3Bhbj4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDxzcGFuIGNsYXNzPSJzeW1ib2wiPgorICAgICAgICA8YSBocmVmPSJvcmcvcGFja2FnZS5odG1sIj48c3BhbiBjbGFzcz0ibmFtZSI+b3JnPC9zcGFuPjwvYT4KKyAgICAgIDwvc3Bhbj4KKyAgICAgIDwvaDQ+CisgICAgICAKKyAgICA8L2xpPjwvb2w+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAKKworICAgICAgICAKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0iaW5oZXJpdGVkTWVtYmVycyI+CisgICAgICAgIAorICAgICAgICAKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBpZD0iZ3JvdXBlZE1lbWJlcnMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJncm91cCIgbmFtZT0iVW5ncm91cGVkIj4KKyAgICAgICAgICAgICAgPGgzPlVuZ3JvdXBlZDwvaDM+CisgICAgICAgICAgICAgIAorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorCisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0idG9vbHRpcCI+PC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImZvb3RlciI+ICA8L2Rpdj4KKyAgICAgIDxzY3JpcHQgZGVmZXI9ImRlZmVyIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGlkPSJqcXVlcnktanMiIHNyYz0ibGliL2pxdWVyeS5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9ImpxdWVyeS11aS1qcyIgc3JjPSJsaWIvanF1ZXJ5LXVpLmpzIj48L3NjcmlwdD48c2NyaXB0IGRlZmVyPSJkZWZlciIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBpZD0idG9vbHMtdG9vbHRpcC1qcyIgc3JjPSJsaWIvdG9vbHMudG9vbHRpcC5qcyI+PC9zY3JpcHQ+PHNjcmlwdCBkZWZlcj0iZGVmZXIiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgaWQ9InRlbXBsYXRlLWpzIiBzcmM9ImxpYi90ZW1wbGF0ZS5qcyI+PC9zY3JpcHQ+CisgICAgPC9ib2R5PgorICAgICAgPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2ltYWdlcy9hY2Nlc3Nvcmllcy10ZXh0LWVkaXRvci5wbmcgYi9pbWFnZXMvYWNjZXNzb3JpZXMtdGV4dC1lZGl0b3IucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYzMzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbWFnZXMvYWNjZXNzb3JpZXMtdGV4dC1lZGl0b3IucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9hZGQuZ2lmIGIvaW1hZ2VzL2FkZC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNiM2RiZgotLS0gL2Rldi9udWxsCisrKyBiL2ltYWdlcy9hZGQuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9hcGFjaGUtaW5jdWJhdG9yLWxvZ28ucG5nIGIvaW1hZ2VzL2FwYWNoZS1pbmN1YmF0b3ItbG9nby5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFmYjMxZQotLS0gL2Rldi9udWxsCisrKyBiL2ltYWdlcy9hcGFjaGUtaW5jdWJhdG9yLWxvZ28ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9hcGFjaGUtbWF2ZW4tcHJvamVjdC0yLnBuZyBiL2ltYWdlcy9hcGFjaGUtbWF2ZW4tcHJvamVjdC0yLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzA5NmVjCi0tLSAvZGV2L251bGwKKysrIGIvaW1hZ2VzL2FwYWNoZS1tYXZlbi1wcm9qZWN0LTIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9hcHBsaWNhdGlvbi1jZXJ0aWZpY2F0ZS5wbmcgYi9pbWFnZXMvYXBwbGljYXRpb24tY2VydGlmaWNhdGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNmFmZjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbWFnZXMvYXBwbGljYXRpb24tY2VydGlmaWNhdGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9hdGxhcy1sb2dvLnBuZyBiL2ltYWdlcy9hdGxhcy1sb2dvLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGMwZmZkCi0tLSAvZGV2L251bGwKKysrIGIvaW1hZ2VzL2F0bGFzLWxvZ28ucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9jb250YWN0LW5ldy5wbmcgYi9pbWFnZXMvY29udGFjdC1uZXcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYzQzMTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbWFnZXMvY29udGFjdC1uZXcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9kb2N1bWVudC1wcm9wZXJ0aWVzLnBuZyBiL2ltYWdlcy9kb2N1bWVudC1wcm9wZXJ0aWVzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGMyNDA5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1hZ2VzL2RvY3VtZW50LXByb3BlcnRpZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9kcml2ZS1oYXJkZGlzay5wbmcgYi9pbWFnZXMvZHJpdmUtaGFyZGRpc2sucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3Y2U0NzUKLS0tIC9kZXYvbnVsbAorKysgYi9pbWFnZXMvZHJpdmUtaGFyZGRpc2sucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9maXguZ2lmIGIvaW1hZ2VzL2ZpeC5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlYjNkYwotLS0gL2Rldi9udWxsCisrKyBiL2ltYWdlcy9maXguZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9pY29uX2Vycm9yX3NtbC5naWYgYi9pbWFnZXMvaWNvbl9lcnJvcl9zbWwuZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZTlhMDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbWFnZXMvaWNvbl9lcnJvcl9zbWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9pY29uX2hlbHBfc21sLmdpZiBiL2ltYWdlcy9pY29uX2hlbHBfc21sLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWYyMGU2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1hZ2VzL2ljb25faGVscF9zbWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9pY29uX2luZm9fc21sLmdpZiBiL2ltYWdlcy9pY29uX2luZm9fc21sLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzc2MzI2Ci0tLSAvZGV2L251bGwKKysrIGIvaW1hZ2VzL2ljb25faW5mb19zbWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9pY29uX3N1Y2Nlc3Nfc21sLmdpZiBiL2ltYWdlcy9pY29uX3N1Y2Nlc3Nfc21sLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTE5NTI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW1hZ2VzL2ljb25fc3VjY2Vzc19zbWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9pY29uX3dhcm5pbmdfc21sLmdpZiBiL2ltYWdlcy9pY29uX3dhcm5pbmdfc21sLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzZhZDZhCi0tLSAvZGV2L251bGwKKysrIGIvaW1hZ2VzL2ljb25fd2FybmluZ19zbWwuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9pbWFnZS14LWdlbmVyaWMucG5nIGIvaW1hZ2VzL2ltYWdlLXgtZ2VuZXJpYy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI0OWVmYgotLS0gL2Rldi9udWxsCisrKyBiL2ltYWdlcy9pbWFnZS14LWdlbmVyaWMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9pbnRlcm5ldC13ZWItYnJvd3Nlci5wbmcgYi9pbWFnZXMvaW50ZXJuZXQtd2ViLWJyb3dzZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwN2Q2YWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbWFnZXMvaW50ZXJuZXQtd2ViLWJyb3dzZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9sb2dvcy9idWlsZC1ieS1tYXZlbi1ibGFjay5wbmcgYi9pbWFnZXMvbG9nb3MvYnVpbGQtYnktbWF2ZW4tYmxhY2sucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxOWZkMGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbWFnZXMvbG9nb3MvYnVpbGQtYnktbWF2ZW4tYmxhY2sucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9sb2dvcy9idWlsZC1ieS1tYXZlbi13aGl0ZS5wbmcgYi9pbWFnZXMvbG9nb3MvYnVpbGQtYnktbWF2ZW4td2hpdGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNDRjOWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbWFnZXMvbG9nb3MvYnVpbGQtYnktbWF2ZW4td2hpdGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9sb2dvcy9tYXZlbi1mZWF0aGVyLnBuZyBiL2ltYWdlcy9sb2dvcy9tYXZlbi1mZWF0aGVyLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWFkYTgzCi0tLSAvZGV2L251bGwKKysrIGIvaW1hZ2VzL2xvZ29zL21hdmVuLWZlYXRoZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9uZXR3b3JrLXNlcnZlci5wbmcgYi9pbWFnZXMvbmV0d29yay1zZXJ2ZXIucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMTJlMTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbWFnZXMvbmV0d29yay1zZXJ2ZXIucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9wYWNrYWdlLXgtZ2VuZXJpYy5wbmcgYi9pbWFnZXMvcGFja2FnZS14LWdlbmVyaWMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiN2U5ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbWFnZXMvcGFja2FnZS14LWdlbmVyaWMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9wcm9maWxlcy9wcmUtcmVsZWFzZS5wbmcgYi9pbWFnZXMvcHJvZmlsZXMvcHJlLXJlbGVhc2UucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0NDhlODUKLS0tIC9kZXYvbnVsbAorKysgYi9pbWFnZXMvcHJvZmlsZXMvcHJlLXJlbGVhc2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9wcm9maWxlcy9yZXRpcmVkLnBuZyBiL2ltYWdlcy9wcm9maWxlcy9yZXRpcmVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODlmNmEyCi0tLSAvZGV2L251bGwKKysrIGIvaW1hZ2VzL3Byb2ZpbGVzL3JldGlyZWQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9wcm9maWxlcy9zYW5kYm94LnBuZyBiL2ltYWdlcy9wcm9maWxlcy9zYW5kYm94LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODhiMzYyCi0tLSAvZGV2L251bGwKKysrIGIvaW1hZ2VzL3Byb2ZpbGVzL3NhbmRib3gucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9yZW1vdmUuZ2lmIGIvaW1hZ2VzL3JlbW92ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2NTYzMQotLS0gL2Rldi9udWxsCisrKyBiL2ltYWdlcy9yZW1vdmUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy9yc3MucG5nIGIvaW1hZ2VzL3Jzcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4NTBlZQotLS0gL2Rldi9udWxsCisrKyBiL2ltYWdlcy9yc3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy91cGRhdGUuZ2lmIGIvaW1hZ2VzL3VwZGF0ZS5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJhNmQwYgotLS0gL2Rldi9udWxsCisrKyBiL2ltYWdlcy91cGRhdGUuZ2lmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltYWdlcy93aW5kb3ctbmV3LnBuZyBiL2ltYWdlcy93aW5kb3ctbmV3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTEyZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvaW1hZ2VzL3dpbmRvdy1uZXcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy13aGl0ZS5wbmcgYi9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3Mtd2hpdGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZjY0ODQKLS0tIC9kZXYvbnVsbAorKysgYi9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3Mtd2hpdGUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2ltZy9nbHlwaGljb25zLWhhbGZsaW5ncy5wbmcgYi9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OTY5OTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbWcvZ2x5cGhpY29ucy1oYWxmbGluZ3MucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2luZGV4Lmh0bWwgYi9pbmRleC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3N2UxZmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmRleC5odG1sCkBAIC0wLDAgKzEsMzE2IEBACis8IURPQ1RZUEUgaHRtbD4KKzwhLS0KKyB8IEdlbmVyYXRlZCBieSBBcGFjaGUgTWF2ZW4gRG94aWEgYXQgMjAxNS0wNy0wOQorIHwgUmVuZGVyZWQgdXNpbmcgQXBhY2hlIE1hdmVuIEZsdWlkbyBTa2luIDEuMy4wCistLT4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CisgICAgPG1ldGEgbmFtZT0iRGF0ZS1SZXZpc2lvbi15eXl5bW1kZCIgY29udGVudD0iMjAxNTA3MDkiIC8+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4iIC8+CisgICAgPHRpdGxlPk1ldGFkYXRhIGFuZCBHb3Zlcm5hbmNlIC0gRGF0YSBHb3Zlcm5hbmNlIGFuZCBNZXRhZGF0YSBmcmFtZXdvcmsgZm9yIEhhZG9vcDwvdGl0bGU+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9zaXRlLmNzcyIgLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3ByaW50LmNzcyIgbWVkaWE9InByaW50IiAvPgorCisgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL2pzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmpzIj48L3NjcmlwdD4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+JCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7ICQoICcuY2Fyb3VzZWwnICkuY2Fyb3VzZWwoIHsgaW50ZXJ2YWw6IDM1MDAgfSApIH0gKTs8L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHkgY2xhc3M9InRvcEJhckVuYWJsZWQiPgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorCisgICAgPGRpdiBpZD0idG9wYmFyIiBjbGFzcz0ibmF2YmFyIG5hdmJhci1maXhlZC10b3AgIj4KKyAgICAgIDxkaXYgY2xhc3M9Im5hdmJhci1pbm5lciI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIiBzdHlsZT0id2lkdGg6IDY4JTsiPjxkaXYgY2xhc3M9Im5hdi1jb2xsYXBzZSI+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJuYXYiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BdGxhcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9IkFib3V0Ij5BYm91dDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJXaWtpIj5XaWtpPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9Ik5ld3MiPk5ld3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0LXdpcC11cy5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3ItYXRsYXMuZ2l0IiAgdGl0bGU9IkdpdCI+R2l0PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3IvYXRsYXMiICB0aXRsZT0iU3ZuIj5Tdm48L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvQVRMQVMiICB0aXRsZT0iSmlyYSI+SmlyYTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUy9Qb3dlcmVkQnkiICB0aXRsZT0iUG93ZXJlZCBieSI+UG93ZXJlZCBieTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL2Jsb2dzLmFwYWNoZS5vcmcvYXRsYXMvIiAgdGl0bGU9IkJsb2ciPkJsb2c8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5Qcm9qZWN0IEluZm9ybWF0aW9uIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InByb2plY3QtaW5mby5odG1sIiAgdGl0bGU9IlN1bW1hcnkiPlN1bW1hcnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Im1haWwtbGlzdHMuaHRtbCIgIHRpdGxlPSJNYWlsaW5nIExpc3RzIj5NYWlsaW5nIExpc3RzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd2ViY2hhdC5mcmVlbm9kZS5uZXQ/Y2hhbm5lbHM9YXBhY2hlYXRsYXMmdWlvPWQ0IiAgdGl0bGU9IklSQyI+SVJDPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJ0ZWFtLWxpc3QuaHRtbCIgIHRpdGxlPSJUZWFtIj5UZWFtPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpc3N1ZS10cmFja2luZy5odG1sIiAgdGl0bGU9Iklzc3VlIFRyYWNraW5nIj5Jc3N1ZSBUcmFja2luZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ic291cmNlLXJlcG9zaXRvcnkuaHRtbCIgIHRpdGxlPSJTb3VyY2UgUmVwb3NpdG9yeSI+U291cmNlIFJlcG9zaXRvcnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImxpY2Vuc2UuaHRtbCIgIHRpdGxlPSJMaWNlbnNlIj5MaWNlbnNlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UmVsZWFzZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2R5bi9jbG9zZXIuY2dpL2luY3ViYXRvci9hdGxhcy8wLjUuMC1pbmN1YmF0aW5nLyIgIHRpdGxlPSIwLjUtaW5jdWJhdGluZyI+MC41LWluY3ViYXRpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5Eb2N1bWVudGF0aW9uIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IjAuNS4wLWluY3ViYXRpbmcvaW5kZXguaHRtbCIgIHRpdGxlPSJjdXJyZW50Ij5jdXJyZW50PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSIwLjUuMC1pbmN1YmF0aW5nL2luZGV4Lmh0bWwiICB0aXRsZT0iMC41LWluY3ViYXRpbmciPjAuNS1pbmN1YmF0aW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UmVzb3VyY2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJRdWlja1N0YXJ0Lmh0bWwiICB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj5HZXR0aW5nIFN0YXJ0ZWQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkFyY2hpdGVjdHVyZS5odG1sIiAgdGl0bGU9IkFyY2hpdGVjdHVyZSI+QXJjaGl0ZWN0dXJlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJJbnN0YWxsYXRpb25TdGVwcy5odG1sIiAgdGl0bGU9Ikluc3RhbGxhdGlvbiI+SW5zdGFsbGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJUeXBlU3lzdGVtLmh0bWwiICB0aXRsZT0iVHlwZSBTeXN0ZW0iPlR5cGUgU3lzdGVtPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJDb25maWd1cmF0aW9uLmh0bWwiICB0aXRsZT0iQ29uZmlndXJhdGlvbiI+Q29uZmlndXJhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iU2VjdXJpdHkuaHRtbCIgIHRpdGxlPSJTZWN1cml0eSI+U2VjdXJpdHk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImFwaS9yZXN0Lmh0bWwiICB0aXRsZT0iUmVzdCBBUEkiPlJlc3QgQVBJPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QVNGIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL2hvdy1pdC13b3Jrcy5odG1sIiAgdGl0bGU9IkhvdyBBcGFjaGUgV29ya3MiPkhvdyBBcGFjaGUgV29ya3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uLyIgIHRpdGxlPSJGb3VuZGF0aW9uIj5Gb3VuZGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9zcG9uc29yc2hpcC5odG1sIiAgdGl0bGU9IlNwb25zb3JpbmcgQXBhY2hlIj5TcG9uc29yaW5nIEFwYWNoZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vdGhhbmtzLmh0bWwiICB0aXRsZT0iVGhhbmtzIj5UaGFua3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gaWQ9InNlYXJjaC1mb3JtIiBhY3Rpb249Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2giIG1ldGhvZD0iZ2V0IiAgY2xhc3M9Im5hdmJhci1zZWFyY2ggcHVsbC1yaWdodCIgPgorICAgIAorICA8aW5wdXQgdmFsdWU9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZyIgbmFtZT0ic2l0ZXNlYXJjaCIgdHlwZT0iaGlkZGVuIi8+CisgIDxpbnB1dCBjbGFzcz0ic2VhcmNoLXF1ZXJ5IiBuYW1lPSJxIiBpZD0icXVlcnkiIHR5cGU9InRleHQiIC8+Cis8L2Zvcm0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vY29vcC9jc2UvYnJhbmQ/Zm9ybT1zZWFyY2gtZm9ybSI+PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgPGlmcmFtZSBzcmM9Imh0dHA6Ly93d3cuZmFjZWJvb2suY29tL3BsdWdpbnMvbGlrZS5waHA/aHJlZj1odHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmcvYXRsYXMtZG9jcyZzZW5kPWZhbHNlJmxheW91dD1idXR0b25fY291bnQmc2hvdy1mYWNlcz1mYWxzZSZhY3Rpb249bGlrZSZjb2xvcnNjaGVtZT1kYXJrIgorICAgICAgICBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0iMCIKKyAgICAgICAgc3R5bGU9ImJvcmRlcjpub25lOyB3aWR0aDo4MHB4OyBoZWlnaHQ6MjBweDsgbWFyZ2luLXRvcDogMTBweDsiICBjbGFzcz0icHVsbC1yaWdodCIgPjwvaWZyYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9hcGlzLmdvb2dsZS5jb20vanMvcGx1c29uZS5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgPHVsIGNsYXNzPSJuYXYgcHVsbC1yaWdodCI+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CisgICAgCisgICAgPGRpdiBjbGFzcz0iZy1wbHVzb25lIiBkYXRhLWhyZWY9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzIiBkYXRhLXNpemU9Im1lZGl1bSIgIHdpZHRoPSI2MHB4IiBhbGlnbj0icmlnaHQiID48L2Rpdj4KKworICAgICAgICA8L2xpPjwvdWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAKKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICAKKyAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICA8ZGl2IGlkPSJiYW5uZXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLWxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLiIgaWQ9ImJhbm5lckxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hdGxhcy1sb2dvLnBuZyIgIGFsdD0iQXBhY2hlIEF0bGFzIiB3aWR0aD0iMjAwcHgiIGhlaWdodD0iNDVweCIvPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+ICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2luY3ViYXRvci5hcGFjaGUub3JnIiBpZD0iYmFubmVyUmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hcGFjaGUtaW5jdWJhdG9yLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgSW5jdWJhdG9yIi8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIj48aHIvPjwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImJyZWFkY3J1bWJzIj4KKyAgICAgICAgPHVsIGNsYXNzPSJicmVhZGNydW1iIj4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZyIgY2xhc3M9ImV4dGVybmFsTGluayIgdGl0bGU9IkFwYWNoZSI+CisgICAgICAgIEFwYWNoZTwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iQXRsYXMiPgorICAgICAgICBBdGxhczwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICA8bGkgY2xhc3M9IiI+RGF0YSBHb3Zlcm5hbmNlIGFuZCBNZXRhZGF0YSBmcmFtZXdvcmsgZm9yIEhhZG9vcDwvbGk+CisgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgIDxsaSBpZD0icHVibGlzaERhdGUiIGNsYXNzPSJwdWxsLXJpZ2h0Ij5MYXN0IFB1Ymxpc2hlZDogMjAxNS0wNy0wOTwvbGk+IDxsaSBjbGFzcz0iZGl2aWRlciBwdWxsLXJpZ2h0Ij58PC9saT4KKyAgICAgICAgICAgICAgPGxpIGlkPSJwcm9qZWN0VmVyc2lvbiIgY2xhc3M9InB1bGwtcmlnaHQiPlZlcnNpb246IDAuNi1pbmN1YmF0aW5nLVNOQVBTSE9UPC9saT4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2Rpdj4KKworICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgPGRpdiBpZD0iYm9keUNvbHVtbiIgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDI+RGF0YSBHb3Zlcm5hbmNlIGFuZCBNZXRhZGF0YSBmcmFtZXdvcmsgZm9yIEhhZG9vcDxhIG5hbWU9IkRhdGFfR292ZXJuYW5jZV9hbmRfTWV0YWRhdGFfZnJhbWV3b3JrX2Zvcl9IYWRvb3AiPjwvYT48L2gyPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDM+T3ZlcnZpZXc8YSBuYW1lPSJPdmVydmlldyI+PC9hPjwvaDM+Cis8cD5BdGxhcyBpcyBhIHNjYWxhYmxlIGFuZCBleHRlbnNpYmxlIHNldCBvZiBjb3JlIGZvdW5kYXRpb25hbCBnb3Zlcm5hbmNlIHNlcnZpY2VzICYjeDIwMTM7IGVuYWJsaW5nIGVudGVycHJpc2VzIHRvIGVmZmVjdGl2ZWx5IGFuZCBlZmZpY2llbnRseSBtZWV0IHRoZWlyIGNvbXBsaWFuY2UgcmVxdWlyZW1lbnRzIHdpdGhpbiBIYWRvb3AgYW5kIGFsbG93cyBpbnRlZ3JhdGlvbiB3aXRoIHRoZSB3aG9sZSBlbnRlcnByaXNlIGRhdGEgZWNvc3lzdGVtLjwvcD48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzPkZlYXR1cmVzPGEgbmFtZT0iRmVhdHVyZXMiPjwvYT48L2gzPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDQ+RGF0YSBDbGFzc2lmaWNhdGlvbjxhIG5hbWU9IkRhdGFfQ2xhc3NpZmljYXRpb24iPjwvYT48L2g0PgorPHA+PC9wPgorPHVsPgorPGxpPkltcG9ydCBvciBkZWZpbmUgdGF4b25vbXkgYnVzaW5lc3Mtb3JpZW50ZWQgYW5ub3RhdGlvbnMgZm9yIGRhdGE8L2xpPgorPGxpPkRlZmluZSwgYW5ub3RhdGUsIGFuZCBhdXRvbWF0ZSBjYXB0dXJlIG9mIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBkYXRhIHNldHMgYW5kIHVuZGVybHlpbmc8L2xpPjwvdWw+ZWxlbWVudHMgaW5jbHVkaW5nIHNvdXJjZSwgdGFyZ2V0LCBhbmQgZGVyaXZhdGlvbiBwcm9jZXNzZXMKKzx1bD4KKzxsaT5FeHBvcnQgbWV0YWRhdGEgdG8gdGhpcmQtcGFydHkgc3lzdGVtczwvbGk+PC91bD48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGg0PkNlbnRyYWxpemVkIEF1ZGl0aW5nPGEgbmFtZT0iQ2VudHJhbGl6ZWRfQXVkaXRpbmciPjwvYT48L2g0PgorPHA+PC9wPgorPHVsPgorPGxpPkNhcHR1cmUgc2VjdXJpdHkgYWNjZXNzIGluZm9ybWF0aW9uIGZvciBldmVyeSBhcHBsaWNhdGlvbiwgcHJvY2VzcywgYW5kIGludGVyYWN0aW9uIHdpdGggZGF0YTwvbGk+Cis8bGk+Q2FwdHVyZSB0aGUgb3BlcmF0aW9uYWwgaW5mb3JtYXRpb24gZm9yIGV4ZWN1dGlvbiwgc3RlcHMsIGFuZCBhY3Rpdml0aWVzPC9saT48L3VsPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDQ+U2VhcmNoICZhbXA7IExpbmVhZ2UgKEJyb3dzZSk8YSBuYW1lPSJTZWFyY2hfX0xpbmVhZ2VfQnJvd3NlIj48L2E+PC9oND4KKzxwPjwvcD4KKzx1bD4KKzxsaT5QcmUtZGVmaW5lZCBuYXZpZ2F0aW9uIHBhdGhzIHRvIGV4cGxvcmUgdGhlIGRhdGEgY2xhc3NpZmljYXRpb24gYW5kIGF1ZGl0IGluZm9ybWF0aW9uPC9saT4KKzxsaT5UZXh0LWJhc2VkIHNlYXJjaCBmZWF0dXJlcyBsb2NhdGVzIHJlbGV2YW50IGRhdGEgYW5kIGF1ZGl0IGV2ZW50IGFjcm9zcyBEYXRhIExha2UgcXVpY2tseTwvbGk+PC91bD5hbmQgYWNjdXJhdGVseQorPHVsPgorPGxpPkJyb3dzZSB2aXN1YWxpemF0aW9uIG9mIGRhdGEgc2V0IGxpbmVhZ2UgYWxsb3dpbmcgdXNlcnMgdG8gZHJpbGwtZG93biBpbnRvIG9wZXJhdGlvbmFsLDwvbGk+PC91bD5zZWN1cml0eSwgYW5kIHByb3ZlbmFuY2UgcmVsYXRlZCBpbmZvcm1hdGlvbjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDQ+U2VjdXJpdHkgJmFtcDsgUG9saWN5IEVuZ2luZTxhIG5hbWU9IlNlY3VyaXR5X19Qb2xpY3lfRW5naW5lIj48L2E+PC9oND4KKzxwPjwvcD4KKzx1bD4KKzxsaT5SYXRpb25hbGl6ZSBjb21wbGlhbmNlIHBvbGljeSBhdCBydW50aW1lIGJhc2VkIG9uIGRhdGEgY2xhc3NpZmljYXRpb24gc2NoZW1lcywgYXR0cmlidXRlczwvbGk+PC91bD5hbmQgcm9sZXMuCis8dWw+Cis8bGk+QWR2YW5jZWQgZGVmaW5pdGlvbiBvZiBwb2xpY2llcyBmb3IgcHJldmVudGluZyBkYXRhIGRlcml2YXRpb24gYmFzZWQgb24gY2xhc3NpZmljYXRpb248L2xpPjwvdWw+KGkuZS4gcmUtaWRlbnRpZmljYXRpb24pICYjeDIwMTM7IFByb2hpYml0aW9ucworPHVsPgorPGxpPkNvbHVtbiBhbmQgUm93IGxldmVsIG1hc2tpbmcgYmFzZWQgb24gY2VsbCB2YWx1ZXMgYW5kIGF0dGlidXRlcy48L2xpPjwvdWw+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5HZXR0aW5nIFN0YXJ0ZWQ8YSBuYW1lPSJHZXR0aW5nX1N0YXJ0ZWQiPjwvYT48L2gzPgorPHA+PC9wPgorPHVsPgorPGxpPjxhIGhyZWY9Ii4vUXVpY2tTdGFydC5odG1sIj5RdWljayBTdGFydCBHdWlkZTwvYT48L2xpPjwvdWw+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5Eb2N1bWVudGF0aW9uPGEgbmFtZT0iRG9jdW1lbnRhdGlvbiI+PC9hPjwvaDM+Cis8cD48L3A+Cis8dWw+Cis8bGk+PGEgaHJlZj0iLi9BcmNoaXRlY3R1cmUuaHRtbCI+SGlnaCBMZXZlbCBBcmNoaXRlY3R1cmU8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuL1R5cGVTeXN0ZW0uaHRtbCI+VHlwZSBTeXN0ZW08L2E+PC9saT4KKzxsaT48YSBocmVmPSIuL1JlcG9zaXRvcnkuaHRtbCI+TWV0YWRhdGEgUmVwb3NpdG9yeTwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4vU2VhcmNoLmh0bWwiPlNlYXJjaDwvYT48L2xpPgorPGxpPjxhIGhyZWY9Ii4vU2VjdXJpdHkuaHRtbCI+c2VjdXJpdHk8L2E+PC9saT4KKzxsaT48YSBocmVmPSIuL0NvbmZpZ3VyYXRpb24uaHRtbCI+Q29uZmlndXJhdGlvbjwvYT48L2xpPjwvdWw+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5BUEkgRG9jdW1lbnRhdGlvbjxhIG5hbWU9IkFQSV9Eb2N1bWVudGF0aW9uIj48L2E+PC9oMz4KKzxwPjwvcD4KKzx1bD4KKzxsaT48YSBocmVmPSJhcGkvcmVzdC5odG1sIj5SRVNUIEFQSSBEb2N1bWVudGF0aW9uPC9hPjwvbGk+PC91bD4KKzxwPjxhIG5hbWU9IkxpY2Vuc2VJbmZvIj48L2E+PC9wPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDI+TGljZW5zaW5nIEluZm9ybWF0aW9uPGEgbmFtZT0iTGljZW5zaW5nX0luZm9ybWF0aW9uIj48L2E+PC9oMj4KKzxwPk1ldGFkYXRhIChBdGxhcykgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgPGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5BcGFjaGUgTGljZW5zZSAyLjA8L2E+LjwvcD48L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorCisgICAgPGhyLz4KKworICAgIDxmb290ZXI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgc3BhbjEyIj5Db3B5cmlnaHQgJmNvcHk7ICAgICAgICAgICAgICAgICAgICAyMDE1CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciPkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9hPi4KKyAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPHAgaWQ9InBvd2VyZWRCeSIgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy8iIHRpdGxlPSJCdWlsdCBieSBNYXZlbiIgY2xhc3M9InBvd2VyZWRCeSI+CisgICAgICAgIDxpbWcgY2xhc3M9ImJ1aWx0QnkiIGFsdD0iQnVpbHQgYnkgTWF2ZW4iIHNyYz0iLi9pbWFnZXMvbG9nb3MvbWF2ZW4tZmVhdGhlci5wbmciIC8+CisgICAgICA8L2E+CisgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgPC9mb290ZXI+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2lzc3VlLXRyYWNraW5nLmh0bWwgYi9pc3N1ZS10cmFja2luZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZTU5OWQKLS0tIC9kZXYvbnVsbAorKysgYi9pc3N1ZS10cmFja2luZy5odG1sCkBAIC0wLDAgKzEsMjYyIEBACis8IURPQ1RZUEUgaHRtbD4KKzwhLS0KKyB8IEdlbmVyYXRlZCBieSBBcGFjaGUgTWF2ZW4gRG94aWEgYXQgMjAxNS0wNy0wOQorIHwgUmVuZGVyZWQgdXNpbmcgQXBhY2hlIE1hdmVuIEZsdWlkbyBTa2luIDEuMy4wCistLT4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CisgICAgPG1ldGEgbmFtZT0iRGF0ZS1SZXZpc2lvbi15eXl5bW1kZCIgY29udGVudD0iMjAxNTA3MDkiIC8+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4iIC8+CisgICAgPHRpdGxlPk1ldGFkYXRhIGFuZCBHb3Zlcm5hbmNlIC0gSXNzdWUgVHJhY2tpbmc8L3RpdGxlPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3Mvc2l0ZS5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9wcmludC5jc3MiIG1lZGlhPSJwcmludCIgLz4KKworICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9qcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIAorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkgeyAkKCAnLmNhcm91c2VsJyApLmNhcm91c2VsKCB7IGludGVydmFsOiAzNTAwIH0gKSB9ICk7PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ0b3BCYXJFbmFibGVkIj4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKworICAgIDxkaXYgaWQ9InRvcGJhciIgY2xhc3M9Im5hdmJhciBuYXZiYXItZml4ZWQtdG9wICI+CisgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItaW5uZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciIgc3R5bGU9IndpZHRoOiA2OCU7Ij48ZGl2IGNsYXNzPSJuYXYtY29sbGFwc2UiPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QXRsYXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJBYm91dCI+QWJvdXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iV2lraSI+V2lraTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJOZXdzIj5OZXdzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2dpdC13aXAtdXMuYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yLWF0bGFzLmdpdCIgIHRpdGxlPSJHaXQiPkdpdDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yL2F0bGFzIiAgdGl0bGU9IlN2biI+U3ZuPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0FUTEFTIiAgdGl0bGU9IkppcmEiPkppcmE8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMvUG93ZXJlZEJ5IiAgdGl0bGU9IlBvd2VyZWQgYnkiPlBvd2VyZWQgYnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9ibG9ncy5hcGFjaGUub3JnL2F0bGFzLyIgIHRpdGxlPSJCbG9nIj5CbG9nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UHJvamVjdCBJbmZvcm1hdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJwcm9qZWN0LWluZm8uaHRtbCIgIHRpdGxlPSJTdW1tYXJ5Ij5TdW1tYXJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJtYWlsLWxpc3RzLmh0bWwiICB0aXRsZT0iTWFpbGluZyBMaXN0cyI+TWFpbGluZyBMaXN0czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3dlYmNoYXQuZnJlZW5vZGUubmV0P2NoYW5uZWxzPWFwYWNoZWF0bGFzJnVpbz1kNCIgIHRpdGxlPSJJUkMiPklSQzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0idGVhbS1saXN0Lmh0bWwiICB0aXRsZT0iVGVhbSI+VGVhbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaXNzdWUtdHJhY2tpbmcuaHRtbCIgIHRpdGxlPSJJc3N1ZSBUcmFja2luZyI+SXNzdWUgVHJhY2tpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InNvdXJjZS1yZXBvc2l0b3J5Lmh0bWwiICB0aXRsZT0iU291cmNlIFJlcG9zaXRvcnkiPlNvdXJjZSBSZXBvc2l0b3J5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJsaWNlbnNlLmh0bWwiICB0aXRsZT0iTGljZW5zZSI+TGljZW5zZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlbGVhc2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9keW4vY2xvc2VyLmNnaS9pbmN1YmF0b3IvYXRsYXMvMC41LjAtaW5jdWJhdGluZy8iICB0aXRsZT0iMC41LWluY3ViYXRpbmciPjAuNS1pbmN1YmF0aW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+RG9jdW1lbnRhdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSIwLjUuMC1pbmN1YmF0aW5nL2luZGV4Lmh0bWwiICB0aXRsZT0iY3VycmVudCI+Y3VycmVudDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iMC41LjAtaW5jdWJhdGluZy9pbmRleC5odG1sIiAgdGl0bGU9IjAuNS1pbmN1YmF0aW5nIj4wLjUtaW5jdWJhdGluZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlc291cmNlcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9Ik92ZXJ2aWV3Ij5PdmVydmlldzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iUXVpY2tTdGFydC5odG1sIiAgdGl0bGU9IkdldHRpbmcgU3RhcnRlZCI+R2V0dGluZyBTdGFydGVkPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJBcmNoaXRlY3R1cmUuaHRtbCIgIHRpdGxlPSJBcmNoaXRlY3R1cmUiPkFyY2hpdGVjdHVyZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iSW5zdGFsbGF0aW9uU3RlcHMuaHRtbCIgIHRpdGxlPSJJbnN0YWxsYXRpb24iPkluc3RhbGxhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iVHlwZVN5c3RlbS5odG1sIiAgdGl0bGU9IlR5cGUgU3lzdGVtIj5UeXBlIFN5c3RlbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQ29uZmlndXJhdGlvbi5odG1sIiAgdGl0bGU9IkNvbmZpZ3VyYXRpb24iPkNvbmZpZ3VyYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlNlY3VyaXR5Lmh0bWwiICB0aXRsZT0iU2VjdXJpdHkiPlNlY3VyaXR5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJhcGkvcmVzdC5odG1sIiAgdGl0bGU9IlJlc3QgQVBJIj5SZXN0IEFQSTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkFTRiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9ob3ctaXQtd29ya3MuaHRtbCIgIHRpdGxlPSJIb3cgQXBhY2hlIFdvcmtzIj5Ib3cgQXBhY2hlIFdvcmtzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi8iICB0aXRsZT0iRm91bmRhdGlvbiI+Rm91bmRhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vc3BvbnNvcnNoaXAuaHRtbCIgIHRpdGxlPSJTcG9uc29yaW5nIEFwYWNoZSI+U3BvbnNvcmluZyBBcGFjaGU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3RoYW5rcy5odG1sIiAgdGl0bGU9IlRoYW5rcyI+VGhhbmtzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJzZWFyY2gtZm9ybSIgYWN0aW9uPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoIiBtZXRob2Q9ImdldCIgIGNsYXNzPSJuYXZiYXItc2VhcmNoIHB1bGwtcmlnaHQiID4KKyAgICAKKyAgPGlucHV0IHZhbHVlPSJodHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmciIG5hbWU9InNpdGVzZWFyY2giIHR5cGU9ImhpZGRlbiIvPgorICA8aW5wdXQgY2xhc3M9InNlYXJjaC1xdWVyeSIgbmFtZT0icSIgaWQ9InF1ZXJ5IiB0eXBlPSJ0ZXh0IiAvPgorPC9mb3JtPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL3d3dy5nb29nbGUuY29tL2Nvb3AvY3NlL2JyYW5kP2Zvcm09c2VhcmNoLWZvcm0iPjwvc2NyaXB0PgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgIDxpZnJhbWUgc3JjPSJodHRwOi8vd3d3LmZhY2Vib29rLmNvbS9wbHVnaW5zL2xpa2UucGhwP2hyZWY9aHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3Mmc2VuZD1mYWxzZSZsYXlvdXQ9YnV0dG9uX2NvdW50JnNob3ctZmFjZXM9ZmFsc2UmYWN0aW9uPWxpa2UmY29sb3JzY2hlbWU9ZGFyayIKKyAgICAgICAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9IjAiCisgICAgICAgIHN0eWxlPSJib3JkZXI6bm9uZTsgd2lkdGg6ODBweDsgaGVpZ2h0OjIwcHg7IG1hcmdpbi10b3A6IDEwcHg7IiAgY2xhc3M9InB1bGwtcmlnaHQiID48L2lmcmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vYXBpcy5nb29nbGUuY29tL2pzL3BsdXNvbmUuanMiPjwvc2NyaXB0PgorCisgICAgICAgIDx1bCBjbGFzcz0ibmF2IHB1bGwtcmlnaHQiPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPgorICAgIAorICAgIDxkaXYgY2xhc3M9ImctcGx1c29uZSIgZGF0YS1ocmVmPSJodHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmcvYXRsYXMtZG9jcyIgZGF0YS1zaXplPSJtZWRpdW0iICB3aWR0aD0iNjBweCIgYWxpZ249InJpZ2h0IiA+PC9kaXY+CisKKyAgICAgICAgPC9saT48L3VsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgCisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgICAgCisgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgICAgICAgPGRpdiBpZD0iYmFubmVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1sZWZ0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4iIGlkPSJiYW5uZXJMZWZ0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvYXRsYXMtbG9nby5wbmciICBhbHQ9IkFwYWNoZSBBdGxhcyIgd2lkdGg9IjIwMHB4IiBoZWlnaHQ9IjQ1cHgiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9pbmN1YmF0b3IuYXBhY2hlLm9yZyIgaWQ9ImJhbm5lclJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvYXBhY2hlLWluY3ViYXRvci1sb2dvLnBuZyIgIGFsdD0iQXBhY2hlIEluY3ViYXRvciIvPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJjbGVhciI+PGhyLz48L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJicmVhZGNydW1icyI+CisgICAgICAgIDx1bCBjbGFzcz0iYnJlYWRjcnVtYiI+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciIGNsYXNzPSJleHRlcm5hbExpbmsiIHRpdGxlPSJBcGFjaGUiPgorICAgICAgICBBcGFjaGU8L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIgIj4vPC9saT4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkF0bGFzIj4KKyAgICAgICAgQXRsYXM8L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIgIj4vPC9saT4KKyAgICAgICAgPGxpIGNsYXNzPSIiPklzc3VlIFRyYWNraW5nPC9saT4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgPGxpIGlkPSJwdWJsaXNoRGF0ZSIgY2xhc3M9InB1bGwtcmlnaHQiPkxhc3QgUHVibGlzaGVkOiAyMDE1LTA3LTA5PC9saT4gPGxpIGNsYXNzPSJkaXZpZGVyIHB1bGwtcmlnaHQiPnw8L2xpPgorICAgICAgICAgICAgICA8bGkgaWQ9InByb2plY3RWZXJzaW9uIiBjbGFzcz0icHVsbC1yaWdodCI+VmVyc2lvbjogMC42LWluY3ViYXRpbmctU05BUFNIT1Q8L2xpPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvZGl2PgorCisgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICA8ZGl2IGlkPSJib2R5Q29sdW1uIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj5PdmVydmlldzxhIG5hbWU9Ik92ZXJ2aWV3Ij48L2E+PC9oMj48YSBuYW1lPSJPdmVydmlldyI+PC9hPgorPHA+VGhpcyBwcm9qZWN0IHVzZXMgPGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0iaHR0cDovL3d3dy5hdGxhc3NpYW4uY29tL3NvZnR3YXJlL2ppcmEiPkpJUkE8L2E+IGEgSjJFRS1iYXNlZCwgaXNzdWUgdHJhY2tpbmcgYW5kIHByb2plY3QgbWFuYWdlbWVudCBhcHBsaWNhdGlvbi48L3A+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj5Jc3N1ZSBUcmFja2luZzxhIG5hbWU9Iklzc3VlX1RyYWNraW5nIj48L2E+PC9oMj48YSBuYW1lPSJJc3N1ZV9UcmFja2luZyI+PC9hPgorPHA+SXNzdWVzLCBidWdzLCBhbmQgZmVhdHVyZSByZXF1ZXN0cyBzaG91bGQgYmUgc3VibWl0dGVkIHRvIHRoZSBmb2xsb3dpbmcgaXNzdWUgdHJhY2tpbmcgc3lzdGVtIGZvciB0aGlzIHByb2plY3QuPC9wPgorPGRpdiBjbGFzcz0ic291cmNlIj4KKzxwcmU+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0iaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9BVExBUyI+aHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9BVExBUzwvYT48L3ByZT48L2Rpdj48L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorCisgICAgPGhyLz4KKworICAgIDxmb290ZXI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgc3BhbjEyIj5Db3B5cmlnaHQgJmNvcHk7ICAgICAgICAgICAgICAgICAgICAyMDE1CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciPkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9hPi4KKyAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPHAgaWQ9InBvd2VyZWRCeSIgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy8iIHRpdGxlPSJCdWlsdCBieSBNYXZlbiIgY2xhc3M9InBvd2VyZWRCeSI+CisgICAgICAgIDxpbWcgY2xhc3M9ImJ1aWx0QnkiIGFsdD0iQnVpbHQgYnkgTWF2ZW4iIHNyYz0iLi9pbWFnZXMvbG9nb3MvbWF2ZW4tZmVhdGhlci5wbmciIC8+CisgICAgICA8L2E+CisgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgPC9mb290ZXI+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2pzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmpzIGIvanMvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc3ZTYxMQotLS0gL2Rldi9udWxsCisrKyBiL2pzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmpzCkBAIC0wLDAgKzEsMjEgQEAKKy8qIQorICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2MS44LjAKKyAqIGh0dHA6Ly9qcXVlcnkuY29tLworICoKKyAqIEluY2x1ZGVzIFNpenpsZS5qcworICogaHR0cDovL3NpenpsZWpzLmNvbS8KKyAqCisgKiBDb3B5cmlnaHQgMjAxMiBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKKyAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKKyAqCisgKiBEYXRlOiBUaHUgQXVnIDA5IDIwMTIgMTY6MjQ6NDggR01ULTA0MDAgKEVhc3Rlcm4gRGF5bGlnaHQgVGltZSkKKyAqLworKGZ1bmN0aW9uKGEyLGFCKXt2YXIgeCxhZixvPWEyLmRvY3VtZW50LGFJPWEyLmxvY2F0aW9uLGQ9YTIubmF2aWdhdG9yLGJnPWEyLmpRdWVyeSxJPWEyLiQsYW09QXJyYXkucHJvdG90eXBlLnB1c2gsYTQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLGFLPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLEE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxWPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYU49U3RyaW5nLnByb3RvdHlwZS50cmltLGJHPWZ1bmN0aW9uKGUsYlope3JldHVybiBuZXcgYkcuZm4uaW5pdChlLGJaLHgpfSxieD0vW1wtK10/KD86XGQqXC58KVxkKyg/OltlRV1bXC0rXT9cZCt8KS8uc291cmNlLGFhPS9cUy8sYVY9L1xzKy8sRD1hYS50ZXN0KCJceEEwIik/KC9eW1xzXHhBMF0rfFtcc1x4QTBdKyQvZyk6L15ccyt8XHMrJC9nLGJvPS9eKD86W14jPF0qKDxbXHdcV10rPilbXj5dKiR8IyhbXHdcLV0qKSQpLyxhPS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8sYmY9L15bXF0sOnt9XHNdKiQvLGJpPS8oPzpefDp8LCkoPzpccypcWykrL2csYkQ9L1xcKD86WyJcXFwvYmZucnRdfHVbXGRhLWZBLUZdezR9KS9nLGEwPS8iW14iXFxcclxuXSoifHRydWV8ZmFsc2V8bnVsbHwtPyg/OlxkXGQqXC58KVxkKyg/OltlRV1bXC0rXT9cZCt8KS9nLGJQPS9eLW1zLS8sYVU9Ly0oW1xkYS16XSkvZ2ksTj1mdW5jdGlvbihlLGJaKXtyZXR1cm4oYlorIiIpLnRvVXBwZXJDYXNlKCl9LGFGPWZ1bmN0aW9uKCl7aWYoby5hZGRFdmVudExpc3RlbmVyKXtvLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLGFGLGZhbHNlKTtiRy5yZWFkeSgpfWVsc2V7aWYoby5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIil7by5kZXRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixhRik7YkcucmVhZHkoKX19fSxaPXt9O2JHLmZuPWJHLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YkcsaW5pdDpmdW5jdGlvbihlLGIyLGIxKXt2YXIgYjAsYjMsYlosYjQ7aWYoIWUpe3JldHVybiB0aGlzfWlmKGUubm9kZVR5cGUpe3RoaXMuY29udGV4dD10aGlzWzBdPWU7dGhpcy5sZW5ndGg9MTtyZXR1cm4gdGhpc31pZih0eXBlb2YgZT09PSJzdHJpbmciKXtpZihlLmNoYXJBdCgwKT09PSI8IiYmZS5jaGFyQXQoZS5sZW5ndGgtMSk9PT0iPiImJmUubGVuZ3RoPj0zKXtiMD1bbnVsbCxlLG51bGxdfWVsc2V7YjA9Ym8uZXhlYyhlKX1pZihiMCYmKGIwWzFdfHwhYjIpKXtpZihiMFsxXSl7YjI9YjIgaW5zdGFuY2VvZiBiRz9iMlswXTpiMjtiND0oYjImJmIyLm5vZGVUeXBlP2IyLm93bmVyRG9jdW1lbnR8fGIyOm8pO2U9YkcucGFyc2VIVE1MKGIwWzFdLGI0LHRydWUpO2lmKGEudGVzdChiMFsxXSkmJmJHLmlzUGxhaW5PYmplY3QoYjIpKXt0aGlzLmF0dHIuY2FsbChlLGIyLHRydWUpfXJldHVybiBiRy5tZXJnZSh0aGlzLGUpfWVsc2V7YjM9by5nZXRFbGVtZW50QnlJZChiMFsyXSk7aWYoYjMmJmIzLnBhcmVudE5vZGUpe2lmKGIzLmlkIT09YjBbMl0pe3JldHVybiBiMS5maW5kKGUpfXRoaXMubGVuZ3RoPTE7dGhpc1swXT1iM310aGlzLmNvbnRleHQ9bzt0aGlzLnNlbGVjdG9yPWU7cmV0dXJuIHRoaXN9fWVsc2V7aWYoIWIyfHxiMi5qcXVlcnkpe3JldHVybihiMnx8YjEpLmZpbmQoZSl9ZWxzZXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvcihiMikuZmluZChlKX19fWVsc2V7aWYoYkcuaXNGdW5jdGlvbihlKSl7cmV0dXJuIGIxLnJlYWR5KGUpfX1pZihlLnNlbGVjdG9yIT09YUIpe3RoaXMuc2VsZWN0b3I9ZS5zZWxlY3Rvcjt0aGlzLmNvbnRleHQ9ZS5jb250ZXh0fXJldHVybiBiRy5tYWtlQXJyYXkoZSx0aGlzKX0sc2VsZWN0b3I6IiIsanF1ZXJ5OiIxLjguMCIsbGVuZ3RoOjAsc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBhNC5jYWxsKHRoaXMpfSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/dGhpcy50b0FycmF5KCk6KGU8MD90aGlzW3RoaXMubGVuZ3RoK2VdOnRoaXNbZV0pfSxwdXNoU3RhY2s6ZnVuY3Rpb24oYlosYjEsZSl7dmFyIGIwPWJHLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxiWik7YjAucHJldk9iamVjdD10aGlzO2IwLmNvbnRleHQ9dGhpcy5jb250ZXh0O2lmKGIxPT09ImZpbmQiKXtiMC5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyh0aGlzLnNlbGVjdG9yPyIgIjoiIikrZX1lbHNle2lmKGIxKXtiMC5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyIuIitiMSsiKCIrZSsiKSJ9fXJldHVybiBiMH0sZWFjaDpmdW5jdGlvbihiWixlKXtyZXR1cm4gYkcuZWFjaCh0aGlzLGJaLGUpfSxyZWFkeTpmdW5jdGlvbihlKXtiRy5yZWFkeS5wcm9taXNlKCkuZG9uZShlKTtyZXR1cm4gdGhpc30sZXE6ZnVuY3Rpb24oZSl7ZT0rZTtyZXR1cm4gZT09PS0xP3RoaXMuc2xpY2UoZSk6dGhpcy5zbGljZShlLGUrMSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGE0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSwic2xpY2UiLGE0LmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfSxtYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGJHLm1hcCh0aGlzLGZ1bmN0aW9uKGIwLGJaKXtyZXR1cm4gZS5jYWxsKGIwLGJaLGIwKX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDphbSxzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX07YkcuZm4uaW5pdC5wcm90b3R5cGU9YkcuZm47YkcuZXh0ZW5kPWJHLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBiNyxiMCxlLGJaLGI0LGI1LGIzPWFyZ3VtZW50c1swXXx8e30sYjI9MSxiMT1hcmd1bWVudHMubGVuZ3RoLGI2PWZhbHNlO2lmKHR5cGVvZiBiMz09PSJib29sZWFuIil7YjY9YjM7YjM9YXJndW1lbnRzWzFdfHx7fTtiMj0yfWlmKHR5cGVvZiBiMyE9PSJvYmplY3QiJiYhYkcuaXNGdW5jdGlvbihiMykpe2IzPXt9fWlmKGIxPT09YjIpe2IzPXRoaXM7LS1iMn1mb3IoO2IyPGIxO2IyKyspe2lmKChiNz1hcmd1bWVudHNbYjJdKSE9bnVsbCl7Zm9yKGIwIGluIGI3KXtlPWIzW2IwXTtiWj1iN1tiMF07aWYoYjM9PT1iWil7Y29udGludWV9aWYoYjYmJmJaJiYoYkcuaXNQbGFpbk9iamVjdChiWil8fChiND1iRy5pc0FycmF5KGJaKSkpKXtpZihiNCl7YjQ9ZmFsc2U7YjU9ZSYmYkcuaXNBcnJheShlKT9lOltdfWVsc2V7YjU9ZSYmYkcuaXNQbGFpbk9iamVjdChlKT9lOnt9fWIzW2IwXT1iRy5leHRlbmQoYjYsYjUsYlopfWVsc2V7aWYoYlohPT1hQil7YjNbYjBdPWJafX19fX1yZXR1cm4gYjN9O2JHLmV4dGVuZCh7bm9Db25mbGljdDpmdW5jdGlvbihlKXtpZihhMi4kPT09Ykcpe2EyLiQ9SX1pZihlJiZhMi5qUXVlcnk9PT1iRyl7YTIualF1ZXJ5PWJnfXJldHVybiBiR30saXNSZWFkeTpmYWxzZSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oZSl7aWYoZSl7YkcucmVhZHlXYWl0Kyt9ZWxzZXtiRy5yZWFkeSh0cnVlKX19LHJlYWR5OmZ1bmN0aW9uKGUpe2lmKGU9PT10cnVlPy0tYkcucmVhZHlXYWl0OmJHLmlzUmVhZHkpe3JldHVybn1pZighby5ib2R5KXtyZXR1cm4gc2V0VGltZW91dChiRy5yZWFkeSwxKX1iRy5pc1JlYWR5PXRydWU7aWYoZSE9PXRydWUmJi0tYkcucmVhZHlXYWl0PjApe3JldHVybn1hZi5yZXNvbHZlV2l0aChvLFtiR10pO2lmKGJHLmZuLnRyaWdnZXIpe2JHKG8pLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIpfX0saXNGdW5jdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gYkcudHlwZShlKT09PSJmdW5jdGlvbiJ9LGlzQXJyYXk6QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIGJHLnR5cGUoZSk9PT0iYXJyYXkifSxpc1dpbmRvdzpmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbCYmZT09ZS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihlKXtyZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQoZSkpJiZpc0Zpbml0ZShlKX0sdHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gZT09bnVsbD9TdHJpbmcoZSk6WltBLmNhbGwoZSldfHwib2JqZWN0In0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihiMSl7aWYoIWIxfHxiRy50eXBlKGIxKSE9PSJvYmplY3QifHxiMS5ub2RlVHlwZXx8YkcuaXNXaW5kb3coYjEpKXtyZXR1cm4gZmFsc2V9dHJ5e2lmKGIxLmNvbnN0cnVjdG9yJiYhVi5jYWxsKGIxLCJjb25zdHJ1Y3RvciIpJiYhVi5jYWxsKGIxLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXtyZXR1cm4gZmFsc2V9fWNhdGNoKGIwKXtyZXR1cm4gZmFsc2V9dmFyIGJaO2ZvcihiWiBpbiBiMSl7fXJldHVybiBiWj09PWFCfHxWLmNhbGwoYjEsYlopfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGJaKXt2YXIgZTtmb3IoZSBpbiBiWil7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfSxlcnJvcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoZSl9LHBhcnNlSFRNTDpmdW5jdGlvbihiMSxiMCxlKXt2YXIgYlo7aWYoIWIxfHx0eXBlb2YgYjEhPT0ic3RyaW5nIil7cmV0dXJuIG51bGx9aWYodHlwZW9mIGIwPT09ImJvb2xlYW4iKXtlPWIwO2IwPTB9YjA9YjB8fG87aWYoKGJaPWEuZXhlYyhiMSkpKXtyZXR1cm5bYjAuY3JlYXRlRWxlbWVudChiWlsxXSldfWJaPWJHLmJ1aWxkRnJhZ21lbnQoW2IxXSxiMCxlP251bGw6W10pO3JldHVybiBiRy5tZXJnZShbXSwoYlouY2FjaGVhYmxlP2JHLmNsb25lKGJaLmZyYWdtZW50KTpiWi5mcmFnbWVudCkuY2hpbGROb2Rlcyl9LHBhcnNlSlNPTjpmdW5jdGlvbihlKXtpZighZXx8dHlwZW9mIGUhPT0ic3RyaW5nIil7cmV0dXJuIG51bGx9ZT1iRy50cmltKGUpO2lmKGEyLkpTT04mJmEyLkpTT04ucGFyc2Upe3JldHVybiBhMi5KU09OLnBhcnNlKGUpfWlmKGJmLnRlc3QoZS5yZXBsYWNlKGJELCJAIikucmVwbGFjZShhMCwiXSIpLnJlcGxhY2UoYmksIiIpKSl7cmV0dXJuKG5ldyBGdW5jdGlvbigicmV0dXJuICIrZSkpKCl9YkcuZXJyb3IoIkludmFsaWQgSlNPTjogIitlKX0scGFyc2VYTUw6ZnVuY3Rpb24oYjEpe3ZhciBiWixiMDtpZighYjF8fHR5cGVvZiBiMSE9PSJzdHJpbmciKXtyZXR1cm4gbnVsbH10cnl7aWYoYTIuRE9NUGFyc2VyKXtiMD1uZXcgRE9NUGFyc2VyKCk7Ylo9YjAucGFyc2VGcm9tU3RyaW5nKGIxLCJ0ZXh0L3htbCIpfWVsc2V7Ylo9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKTtiWi5hc3luYz0iZmFsc2UiO2JaLmxvYWRYTUwoYjEpfX1jYXRjaChiMil7Ylo9YUJ9aWYoIWJafHwhYlouZG9jdW1lbnRFbGVtZW50fHxiWi5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpe2JHLmVycm9yKCJJbnZhbGlkIFhNTDogIitiMSl9cmV0dXJuIGJafSxub29wOmZ1bmN0aW9uKCl7fSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGUpe2lmKGUmJmFhLnRlc3QoZSkpeyhhMi5leGVjU2NyaXB0fHxmdW5jdGlvbihiWil7YTJbImV2YWwiXS5jYWxsKGEyLGJaKX0pKGUpfX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoYlAsIm1zLSIpLnJlcGxhY2UoYVUsTil9LG5vZGVOYW1lOmZ1bmN0aW9uKGJaLGUpe3JldHVybiBiWi5ub2RlTmFtZSYmYloubm9kZU5hbWUudG9VcHBlckNhc2UoKT09PWUudG9VcHBlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihiMyxiNCxiMCl7dmFyIGJaLGIxPTAsYjI9YjMubGVuZ3RoLGU9YjI9PT1hQnx8YkcuaXNGdW5jdGlvbihiMyk7aWYoYjApe2lmKGUpe2ZvcihiWiBpbiBiMyl7aWYoYjQuYXBwbHkoYjNbYlpdLGIwKT09PWZhbHNlKXticmVha319fWVsc2V7Zm9yKDtiMTxiMjspe2lmKGI0LmFwcGx5KGIzW2IxKytdLGIwKT09PWZhbHNlKXticmVha319fX1lbHNle2lmKGUpe2ZvcihiWiBpbiBiMyl7aWYoYjQuY2FsbChiM1tiWl0sYlosYjNbYlpdKT09PWZhbHNlKXticmVha319fWVsc2V7Zm9yKDtiMTxiMjspe2lmKGI0LmNhbGwoYjNbYjFdLGIxLGIzW2IxKytdKT09PWZhbHNlKXticmVha319fX1yZXR1cm4gYjN9LHRyaW06YU4/ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/IiI6YU4uY2FsbChlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/IiI6ZS50b1N0cmluZygpLnJlcGxhY2UoRCwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihlLGIwKXt2YXIgYjEsYlo9YjB8fFtdO2lmKGUhPW51bGwpe2IxPWJHLnR5cGUoZSk7aWYoZS5sZW5ndGg9PW51bGx8fGIxPT09InN0cmluZyJ8fGIxPT09ImZ1bmN0aW9uInx8YjE9PT0icmVnZXhwInx8YkcuaXNXaW5kb3coZSkpe2FtLmNhbGwoYlosZSl9ZWxzZXtiRy5tZXJnZShiWixlKX19cmV0dXJuIGJafSxpbkFycmF5OmZ1bmN0aW9uKGIxLGJaLGIwKXt2YXIgZTtpZihiWil7aWYoYUspe3JldHVybiBhSy5jYWxsKGJaLGIxLGIwKX1lPWJaLmxlbmd0aDtiMD1iMD9iMDwwP01hdGgubWF4KDAsZStiMCk6YjA6MDtmb3IoO2IwPGU7YjArKyl7aWYoYjAgaW4gYlomJmJaW2IwXT09PWIxKXtyZXR1cm4gYjB9fX1yZXR1cm4gLTF9LG1lcmdlOmZ1bmN0aW9uKGIyLGIwKXt2YXIgZT1iMC5sZW5ndGgsYjE9YjIubGVuZ3RoLGJaPTA7aWYodHlwZW9mIGU9PT0ibnVtYmVyIil7Zm9yKDtiWjxlO2JaKyspe2IyW2IxKytdPWIwW2JaXX19ZWxzZXt3aGlsZShiMFtiWl0hPT1hQil7YjJbYjErK109YjBbYlorK119fWIyLmxlbmd0aD1iMTtyZXR1cm4gYjJ9LGdyZXA6ZnVuY3Rpb24oYlosYjQsZSl7dmFyIGIzLGIwPVtdLGIxPTAsYjI9YloubGVuZ3RoO2U9ISFlO2Zvcig7YjE8YjI7YjErKyl7YjM9ISFiNChiWltiMV0sYjEpO2lmKGUhPT1iMyl7YjAucHVzaChiWltiMV0pfX1yZXR1cm4gYjB9LG1hcDpmdW5jdGlvbihlLGI1LGI2KXt2YXIgYjMsYjQsYjI9W10sYjA9MCxiWj1lLmxlbmd0aCxiMT1lIGluc3RhbmNlb2YgYkd8fGJaIT09YUImJnR5cGVvZiBiWj09PSJudW1iZXIiJiYoKGJaPjAmJmVbMF0mJmVbYlotMV0pfHxiWj09PTB8fGJHLmlzQXJyYXkoZSkpO2lmKGIxKXtmb3IoO2IwPGJaO2IwKyspe2IzPWI1KGVbYjBdLGIwLGI2KTtpZihiMyE9bnVsbCl7YjJbYjIubGVuZ3RoXT1iM319fWVsc2V7Zm9yKGI0IGluIGUpe2IzPWI1KGVbYjRdLGI0LGI2KTtpZihiMyE9bnVsbCl7YjJbYjIubGVuZ3RoXT1iM319fXJldHVybiBiMi5jb25jYXQuYXBwbHkoW10sYjIpfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oYjIsYjEpe3ZhciBiMCxlLGJaO2lmKHR5cGVvZiBiMT09PSJzdHJpbmciKXtiMD1iMltiMV07YjE9YjI7YjI9YjB9aWYoIWJHLmlzRnVuY3Rpb24oYjIpKXtyZXR1cm4gYUJ9ZT1hNC5jYWxsKGFyZ3VtZW50cywyKTtiWj1mdW5jdGlvbigpe3JldHVybiBiMi5hcHBseShiMSxlLmNvbmNhdChhNC5jYWxsKGFyZ3VtZW50cykpKX07YlouZ3VpZD1iMi5ndWlkPWIyLmd1aWR8fGJaLmd1aWR8fGJHLmd1aWQrKztyZXR1cm4gYlp9LGFjY2VzczpmdW5jdGlvbihlLGI0LGI3LGI1LGIyLGI4LGI2KXt2YXIgYjAsYjM9Yjc9PW51bGwsYjE9MCxiWj1lLmxlbmd0aDtpZihiNyYmdHlwZW9mIGI3PT09Im9iamVjdCIpe2ZvcihiMSBpbiBiNyl7YkcuYWNjZXNzKGUsYjQsYjEsYjdbYjFdLDEsYjgsYjUpfWIyPTF9ZWxzZXtpZihiNSE9PWFCKXtiMD1iNj09PWFCJiZiRy5pc0Z1bmN0aW9uKGI1KTtpZihiMyl7aWYoYjApe2IwPWI0O2I0PWZ1bmN0aW9uKGNhLGI5LGNiKXtyZXR1cm4gYjAuY2FsbChiRyhjYSksY2IpfX1lbHNle2I0LmNhbGwoZSxiNSk7YjQ9bnVsbH19aWYoYjQpe2Zvcig7YjE8Ylo7YjErKyl7YjQoZVtiMV0sYjcsYjA/YjUuY2FsbChlW2IxXSxiMSxiNChlW2IxXSxiNykpOmI1LGI2KX19YjI9MX19cmV0dXJuIGIyP2U6YjM/YjQuY2FsbChlKTpiWj9iNChlWzBdLGI3KTpiOH0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKCkpLmdldFRpbWUoKX19KTtiRy5yZWFkeS5wcm9taXNlPWZ1bmN0aW9uKGIyKXtpZighYWYpe2FmPWJHLkRlZmVycmVkKCk7aWYoby5yZWFkeVN0YXRlPT09ImNvbXBsZXRlInx8KG8ucmVhZHlTdGF0ZSE9PSJsb2FkaW5nIiYmby5hZGRFdmVudExpc3RlbmVyKSl7c2V0VGltZW91dChiRy5yZWFkeSwxKX1lbHNle2lmKG8uYWRkRXZlbnRMaXN0ZW5lcil7by5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixhRixmYWxzZSk7YTIuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsYkcucmVhZHksZmFsc2UpfWVsc2V7by5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixhRik7YTIuYXR0YWNoRXZlbnQoIm9ubG9hZCIsYkcucmVhZHkpO3ZhciBiMT1mYWxzZTt0cnl7YjE9YTIuZnJhbWVFbGVtZW50PT1udWxsJiZvLmRvY3VtZW50RWxlbWVudH1jYXRjaChiMCl7fWlmKGIxJiZiMS5kb1Njcm9sbCl7KGZ1bmN0aW9uIGJaKCl7aWYoIWJHLmlzUmVhZHkpe3RyeXtiMS5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGIzKXtyZXR1cm4gc2V0VGltZW91dChiWiw1MCl9YkcucmVhZHkoKX19KSgpfX19fXJldHVybiBhZi5wcm9taXNlKGIyKX07YkcuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAiKSxmdW5jdGlvbihiWixlKXtaWyJbb2JqZWN0ICIrZSsiXSJdPWUudG9Mb3dlckNhc2UoKX0pO3g9Ykcobyk7dmFyIGJVPXt9O2Z1bmN0aW9uIGFjKGJaKXt2YXIgZT1iVVtiWl09e307YkcuZWFjaChiWi5zcGxpdChhViksZnVuY3Rpb24oYjEsYjApe2VbYjBdPXRydWV9KTtyZXR1cm4gZX1iRy5DYWxsYmFja3M9ZnVuY3Rpb24oYjgpe2I4PXR5cGVvZiBiOD09PSJzdHJpbmciPyhiVVtiOF18fGFjKGI4KSk6YkcuZXh0ZW5kKHt9LGI4KTt2YXIgYjEsZSxiMixiMCxiMyxiNCxiNT1bXSxiNj0hYjgub25jZSYmW10sYlo9ZnVuY3Rpb24oYjkpe2IxPWI4Lm1lbW9yeSYmYjk7ZT10cnVlO2I0PWIwfHwwO2IwPTA7YjM9YjUubGVuZ3RoO2IyPXRydWU7Zm9yKDtiNSYmYjQ8YjM7YjQrKyl7aWYoYjVbYjRdLmFwcGx5KGI5WzBdLGI5WzFdKT09PWZhbHNlJiZiOC5zdG9wT25GYWxzZSl7YjE9ZmFsc2U7YnJlYWt9fWIyPWZhbHNlO2lmKGI1KXtpZihiNil7aWYoYjYubGVuZ3RoKXtiWihiNi5zaGlmdCgpKX19ZWxzZXtpZihiMSl7YjU9W119ZWxzZXtiNy5kaXNhYmxlKCl9fX19LGI3PXthZGQ6ZnVuY3Rpb24oKXtpZihiNSl7dmFyIGNhPWI1Lmxlbmd0aDsoZnVuY3Rpb24gYjkoY2Ipe2JHLmVhY2goY2IsZnVuY3Rpb24oY2QsY2Mpe2lmKGJHLmlzRnVuY3Rpb24oY2MpJiYoIWI4LnVuaXF1ZXx8IWI3LmhhcyhjYykpKXtiNS5wdXNoKGNjKX1lbHNle2lmKGNjJiZjYy5sZW5ndGgpe2I5KGNjKX19fSl9KShhcmd1bWVudHMpO2lmKGIyKXtiMz1iNS5sZW5ndGh9ZWxzZXtpZihiMSl7YjA9Y2E7YlooYjEpfX19cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe2lmKGI1KXtiRy5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihjYixiOSl7dmFyIGNhO3doaWxlKChjYT1iRy5pbkFycmF5KGI5LGI1LGNhKSk+LTEpe2I1LnNwbGljZShjYSwxKTtpZihiMil7aWYoY2E8PWIzKXtiMy0tfWlmKGNhPD1iNCl7YjQtLX19fX0pfXJldHVybiB0aGlzfSxoYXM6ZnVuY3Rpb24oYjkpe3JldHVybiBiRy5pbkFycmF5KGI5LGI1KT4tMX0sZW1wdHk6ZnVuY3Rpb24oKXtiNT1bXTtyZXR1cm4gdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe2I1PWI2PWIxPWFCO3JldHVybiB0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiAhYjV9LGxvY2s6ZnVuY3Rpb24oKXtiNj1hQjtpZighYjEpe2I3LmRpc2FibGUoKX1yZXR1cm4gdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuICFiNn0sZmlyZVdpdGg6ZnVuY3Rpb24oY2EsYjkpe2I5PWI5fHxbXTtiOT1bY2EsYjkuc2xpY2U/Yjkuc2xpY2UoKTpiOV07aWYoYjUmJighZXx8YjYpKXtpZihiMil7YjYucHVzaChiOSl9ZWxzZXtiWihiOSl9fXJldHVybiB0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7YjcuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpO3JldHVybiB0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiAhIWV9fTtyZXR1cm4gYjd9O2JHLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oYjApe3ZhciBiWj1bWyJyZXNvbHZlIiwiZG9uZSIsYkcuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsYkcuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWplY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLGJHLkNhbGxiYWNrcygibWVtb3J5IildXSxiMT0icGVuZGluZyIsYjI9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGIxfSxhbHdheXM6ZnVuY3Rpb24oKXtlLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyk7cmV0dXJuIHRoaXN9LHRoZW46ZnVuY3Rpb24oKXt2YXIgYjM9YXJndW1lbnRzO3JldHVybiBiRy5EZWZlcnJlZChmdW5jdGlvbihiNCl7YkcuZWFjaChiWixmdW5jdGlvbihiNixiNSl7dmFyIGI4PWI1WzBdLGI3PWIzW2I2XTtlW2I1WzFdXShiRy5pc0Z1bmN0aW9uKGI3KT9mdW5jdGlvbigpe3ZhciBiOT1iNy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoYjkmJmJHLmlzRnVuY3Rpb24oYjkucHJvbWlzZSkpe2I5LnByb21pc2UoKS5kb25lKGI0LnJlc29sdmUpLmZhaWwoYjQucmVqZWN0KS5wcm9ncmVzcyhiNC5ub3RpZnkpfWVsc2V7YjRbYjgrIldpdGgiXSh0aGlzPT09ZT9iNDp0aGlzLFtiOV0pfX06YjRbYjhdKX0pO2IzPW51bGx9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oYjMpe3JldHVybiB0eXBlb2YgYjM9PT0ib2JqZWN0Ij9iRy5leHRlbmQoYjMsYjIpOmIyfX0sZT17fTtiMi5waXBlPWIyLnRoZW47YkcuZWFjaChiWixmdW5jdGlvbihiNCxiMyl7dmFyIGI2PWIzWzJdLGI1PWIzWzNdO2IyW2IzWzFdXT1iNi5hZGQ7aWYoYjUpe2I2LmFkZChmdW5jdGlvbigpe2IxPWI1fSxiWltiNF4xXVsyXS5kaXNhYmxlLGJaWzJdWzJdLmxvY2spfWVbYjNbMF1dPWI2LmZpcmU7ZVtiM1swXSsiV2l0aCJdPWI2LmZpcmVXaXRofSk7YjIucHJvbWlzZShlKTtpZihiMCl7YjAuY2FsbChlLGUpfXJldHVybiBlfSx3aGVuOmZ1bmN0aW9uKGIyKXt2YXIgYjA9MCxiND1hNC5jYWxsKGFyZ3VtZW50cyksZT1iNC5sZW5ndGgsYlo9ZSE9PTF8fChiMiYmYkcuaXNGdW5jdGlvbihiMi5wcm9taXNlKSk/ZTowLGI3PWJaPT09MT9iMjpiRy5EZWZlcnJlZCgpLGIxPWZ1bmN0aW9uKGI5LGNhLGI4KXtyZXR1cm4gZnVuY3Rpb24oY2Ipe2NhW2I5XT10aGlzO2I4W2I5XT1hcmd1bWVudHMubGVuZ3RoPjE/YTQuY2FsbChhcmd1bWVudHMpOmNiO2lmKGI4PT09YjYpe2I3Lm5vdGlmeVdpdGgoY2EsYjgpfWVsc2V7aWYoISgtLWJaKSl7YjcucmVzb2x2ZVdpdGgoY2EsYjgpfX19fSxiNixiMyxiNTtpZihlPjEpe2I2PW5ldyBBcnJheShlKTtiMz1uZXcgQXJyYXkoZSk7YjU9bmV3IEFycmF5KGUpO2Zvcig7YjA8ZTtiMCsrKXtpZihiNFtiMF0mJmJHLmlzRnVuY3Rpb24oYjRbYjBdLnByb21pc2UpKXtiNFtiMF0ucHJvbWlzZSgpLmRvbmUoYjEoYjAsYjUsYjQpKS5mYWlsKGI3LnJlamVjdCkucHJvZ3Jlc3MoYjEoYjAsYjMsYjYpKX1lbHNley0tYlp9fX1pZighYlope2I3LnJlc29sdmVXaXRoKGI1LGI0KX1yZXR1cm4gYjcucHJvbWlzZSgpfX0pO2JHLnN1cHBvcnQ9KGZ1bmN0aW9uKCl7dmFyIGNiLGNhLGI4LGI5LGIyLGI3LGI2LGI0LGIzLGIxLGJaLGIwPW8uY3JlYXRlRWxlbWVudCgiZGl2Iik7YjAuc2V0QXR0cmlidXRlKCJjbGFzc05hbWUiLCJ0Iik7YjAuaW5uZXJIVE1MPSIgIDxsaW5rLz48dGFibGU+PC90YWJsZT48YSBocmVmPScvYSc+YTwvYT48aW5wdXQgdHlwZT0nY2hlY2tib3gnLz4iO2NhPWIwLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Yjg9YjAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKVswXTtiOC5zdHlsZS5jc3NUZXh0PSJ0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNSI7aWYoIWNhfHwhY2EubGVuZ3RofHwhYjgpe3JldHVybnt9fWI5PW8uY3JlYXRlRWxlbWVudCgic2VsZWN0Iik7YjI9YjkuYXBwZW5kQ2hpbGQoby5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7Yjc9YjAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF07Y2I9e2xlYWRpbmdXaGl0ZXNwYWNlOihiMC5maXJzdENoaWxkLm5vZGVUeXBlPT09MyksdGJvZHk6IWIwLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpLmxlbmd0aCxodG1sU2VyaWFsaXplOiEhYjAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsc3R5bGU6L3RvcC8udGVzdChiOC5nZXRBdHRyaWJ1dGUoInN0eWxlIikpLGhyZWZOb3JtYWxpemVkOihiOC5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIvYSIpLG9wYWNpdHk6L14wLjUvLnRlc3QoYjguc3R5bGUub3BhY2l0eSksY3NzRmxvYXQ6ISFiOC5zdHlsZS5jc3NGbG9hdCxjaGVja09uOihiNy52YWx1ZT09PSJvbiIpLG9wdFNlbGVjdGVkOmIyLnNlbGVjdGVkLGdldFNldEF0dHJpYnV0ZTpiMC5jbGFzc05hbWUhPT0idCIsZW5jdHlwZTohIW8uY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsaHRtbDVDbG9uZTpvLmNyZWF0ZUVsZW1lbnQoIm5hdiIpLmNsb25lTm9kZSh0cnVlKS5vdXRlckhUTUwhPT0iPDpuYXY+PC86bmF2PiIsYm94TW9kZWw6KG8uY29tcGF0TW9kZT09PSJDU1MxQ29tcGF0Iiksc3VibWl0QnViYmxlczp0cnVlLGNoYW5nZUJ1YmJsZXM6dHJ1ZSxmb2N1c2luQnViYmxlczpmYWxzZSxkZWxldGVFeHBhbmRvOnRydWUsbm9DbG9uZUV2ZW50OnRydWUsaW5saW5lQmxvY2tOZWVkc0xheW91dDpmYWxzZSxzaHJpbmtXcmFwQmxvY2tzOmZhbHNlLHJlbGlhYmxlTWFyZ2luUmlnaHQ6dHJ1ZSxib3hTaXppbmdSZWxpYWJsZTp0cnVlLHBpeGVsUG9zaXRpb246ZmFsc2V9O2I3LmNoZWNrZWQ9dHJ1ZTtjYi5ub0Nsb25lQ2hlY2tlZD1iNy5jbG9uZU5vZGUodHJ1ZSkuY2hlY2tlZDtiOS5kaXNhYmxlZD10cnVlO2NiLm9wdERpc2FibGVkPSFiMi5kaXNhYmxlZDt0cnl7ZGVsZXRlIGIwLnRlc3R9Y2F0Y2goYjUpe2NiLmRlbGV0ZUV4cGFuZG89ZmFsc2V9aWYoIWIwLmFkZEV2ZW50TGlzdGVuZXImJmIwLmF0dGFjaEV2ZW50JiZiMC5maXJlRXZlbnQpe2IwLmF0dGFjaEV2ZW50KCJvbmNsaWNrIixiWj1mdW5jdGlvbigpe2NiLm5vQ2xvbmVFdmVudD1mYWxzZX0pO2IwLmNsb25lTm9kZSh0cnVlKS5maXJlRXZlbnQoIm9uY2xpY2siKTtiMC5kZXRhY2hFdmVudCgib25jbGljayIsYlopfWI3PW8uY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtiNy52YWx1ZT0idCI7Yjcuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKTtjYi5yYWRpb1ZhbHVlPWI3LnZhbHVlPT09InQiO2I3LnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKTtiNy5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0Iik7YjAuYXBwZW5kQ2hpbGQoYjcpO2I2PW8uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2I2LmFwcGVuZENoaWxkKGIwLmxhc3RDaGlsZCk7Y2IuY2hlY2tDbG9uZT1iNi5jbG9uZU5vZGUodHJ1ZSkuY2xvbmVOb2RlKHRydWUpLmxhc3RDaGlsZC5jaGVja2VkO2NiLmFwcGVuZENoZWNrZWQ9YjcuY2hlY2tlZDtiNi5yZW1vdmVDaGlsZChiNyk7YjYuYXBwZW5kQ2hpbGQoYjApO2lmKGIwLmF0dGFjaEV2ZW50KXtmb3IoYjMgaW4ge3N1Ym1pdDp0cnVlLGNoYW5nZTp0cnVlLGZvY3VzaW46dHJ1ZX0pe2I0PSJvbiIrYjM7YjE9KGI0IGluIGIwKTtpZighYjEpe2IwLnNldEF0dHJpYnV0ZShiNCwicmV0dXJuOyIpO2IxPSh0eXBlb2YgYjBbYjRdPT09ImZ1bmN0aW9uIil9Y2JbYjMrIkJ1YmJsZXMiXT1iMX19YkcoZnVuY3Rpb24oKXt2YXIgY2MsY2csY2UsY2YsY2Q9InBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjsiLGU9by5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO2lmKCFlKXtyZXR1cm59Y2M9by5jcmVhdGVFbGVtZW50KCJkaXYiKTtjYy5zdHlsZS5jc3NUZXh0PSJ2aXNpYmlsaXR5OmhpZGRlbjtib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3Bvc2l0aW9uOnN0YXRpYzt0b3A6MDttYXJnaW4tdG9wOjFweCI7ZS5pbnNlcnRCZWZvcmUoY2MsZS5maXJzdENoaWxkKTtjZz1vLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2NjLmFwcGVuZENoaWxkKGNnKTtjZy5pbm5lckhUTUw9Ijx0YWJsZT48dHI+PHRkPjwvdGQ+PHRkPnQ8L3RkPjwvdHI+PC90YWJsZT4iO2NlPWNnLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpO2NlWzBdLnN0eWxlLmNzc1RleHQ9InBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5Om5vbmUiO2IxPShjZVswXS5vZmZzZXRIZWlnaHQ9PT0wKTtjZVswXS5zdHlsZS5kaXNwbGF5PSIiO2NlWzFdLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2NiLnJlbGlhYmxlSGlkZGVuT2Zmc2V0cz1iMSYmKGNlWzBdLm9mZnNldEhlaWdodD09PTApO2NnLmlubmVySFRNTD0iIjtjZy5zdHlsZS5jc3NUZXh0PSJib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxcHg7Ym9yZGVyOjFweDtkaXNwbGF5OmJsb2NrO3dpZHRoOjRweDttYXJnaW4tdG9wOjElO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxJTsiO2NiLmJveFNpemluZz0oY2cub2Zmc2V0V2lkdGg9PT00KTtjYi5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldD0oZS5vZmZzZXRUb3AhPT0xKTtpZihhMi5nZXRDb21wdXRlZFN0eWxlKXtjYi5waXhlbFBvc2l0aW9uPShhMi5nZXRDb21wdXRlZFN0eWxlKGNnLG51bGwpfHx7fSkudG9wIT09IjElIjtjYi5ib3hTaXppbmdSZWxpYWJsZT0oYTIuZ2V0Q29tcHV0ZWRTdHlsZShjZyxudWxsKXx8e3dpZHRoOiI0cHgifSkud2lkdGg9PT0iNHB4IjtjZj1vLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2NmLnN0eWxlLmNzc1RleHQ9Y2cuc3R5bGUuY3NzVGV4dD1jZDtjZi5zdHlsZS5tYXJnaW5SaWdodD1jZi5zdHlsZS53aWR0aD0iMCI7Y2cuc3R5bGUud2lkdGg9IjFweCI7Y2cuYXBwZW5kQ2hpbGQoY2YpO2NiLnJlbGlhYmxlTWFyZ2luUmlnaHQ9IXBhcnNlRmxvYXQoKGEyLmdldENvbXB1dGVkU3R5bGUoY2YsbnVsbCl8fHt9KS5tYXJnaW5SaWdodCl9aWYodHlwZW9mIGNnLnN0eWxlLnpvb20hPT0idW5kZWZpbmVkIil7Y2cuaW5uZXJIVE1MPSIiO2NnLnN0eWxlLmNzc1RleHQ9Y2QrIndpZHRoOjFweDtwYWRkaW5nOjFweDtkaXNwbGF5OmlubGluZTt6b29tOjEiO2NiLmlubGluZUJsb2NrTmVlZHNMYXlvdXQ9KGNnLm9mZnNldFdpZHRoPT09Myk7Y2cuc3R5bGUuZGlzcGxheT0iYmxvY2siO2NnLnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIjtjZy5pbm5lckhUTUw9IjxkaXY+PC9kaXY+IjtjZy5maXJzdENoaWxkLnN0eWxlLndpZHRoPSI1cHgiO2NiLnNocmlua1dyYXBCbG9ja3M9KGNnLm9mZnNldFdpZHRoIT09Myk7Y2Muc3R5bGUuem9vbT0xfWUucmVtb3ZlQ2hpbGQoY2MpO2NjPWNnPWNlPWNmPW51bGx9KTtiNi5yZW1vdmVDaGlsZChiMCk7Y2E9Yjg9Yjk9YjI9Yjc9YjY9YjA9bnVsbDtyZXR1cm4gY2J9KSgpO3ZhciBidD0vXig/Olx7LipcfXxcWy4qXF0pJC8sYUw9LyhbQS1aXSkvZztiRy5leHRlbmQoe2NhY2hlOnt9LGRlbGV0ZWRJZHM6W10sdXVpZDowLGV4cGFuZG86ImpRdWVyeSIrKGJHLmZuLmpxdWVyeStNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxub0RhdGE6e2VtYmVkOnRydWUsb2JqZWN0OiJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLGFwcGxldDp0cnVlfSxoYXNEYXRhOmZ1bmN0aW9uKGUpe2U9ZS5ub2RlVHlwZT9iRy5jYWNoZVtlW2JHLmV4cGFuZG9dXTplW2JHLmV4cGFuZG9dO3JldHVybiAhIWUmJiFPKGUpfSxkYXRhOmZ1bmN0aW9uKGIxLGJaLGIzLGIyKXtpZighYkcuYWNjZXB0RGF0YShiMSkpe3JldHVybn12YXIgYjQsYjYsYjc9YkcuZXhwYW5kbyxiNT10eXBlb2YgYlo9PT0ic3RyaW5nIixiOD1iMS5ub2RlVHlwZSxlPWI4P2JHLmNhY2hlOmIxLGIwPWI4P2IxW2I3XTpiMVtiN10mJmI3O2lmKCghYjB8fCFlW2IwXXx8KCFiMiYmIWVbYjBdLmRhdGEpKSYmYjUmJmIzPT09YUIpe3JldHVybn1pZighYjApe2lmKGI4KXtiMVtiN109YjA9YkcuZGVsZXRlZElkcy5wb3AoKXx8KytiRy51dWlkfWVsc2V7YjA9Yjd9fWlmKCFlW2IwXSl7ZVtiMF09e307aWYoIWI4KXtlW2IwXS50b0pTT049Ykcubm9vcH19aWYodHlwZW9mIGJaPT09Im9iamVjdCJ8fHR5cGVvZiBiWj09PSJmdW5jdGlvbiIpe2lmKGIyKXtlW2IwXT1iRy5leHRlbmQoZVtiMF0sYlopfWVsc2V7ZVtiMF0uZGF0YT1iRy5leHRlbmQoZVtiMF0uZGF0YSxiWil9fWI0PWVbYjBdO2lmKCFiMil7aWYoIWI0LmRhdGEpe2I0LmRhdGE9e319YjQ9YjQuZGF0YX1pZihiMyE9PWFCKXtiNFtiRy5jYW1lbENhc2UoYlopXT1iM31pZihiNSl7YjY9YjRbYlpdO2lmKGI2PT1udWxsKXtiNj1iNFtiRy5jYW1lbENhc2UoYlopXX19ZWxzZXtiNj1iNH1yZXR1cm4gYjZ9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYjEsYlosYjIpe2lmKCFiRy5hY2NlcHREYXRhKGIxKSl7cmV0dXJufXZhciBiNSxiNCxiMyxiNj1iMS5ub2RlVHlwZSxlPWI2P2JHLmNhY2hlOmIxLGIwPWI2P2IxW2JHLmV4cGFuZG9dOmJHLmV4cGFuZG87aWYoIWVbYjBdKXtyZXR1cm59aWYoYlope2I1PWIyP2VbYjBdOmVbYjBdLmRhdGE7aWYoYjUpe2lmKCFiRy5pc0FycmF5KGJaKSl7aWYoYlogaW4gYjUpe2JaPVtiWl19ZWxzZXtiWj1iRy5jYW1lbENhc2UoYlopO2lmKGJaIGluIGI1KXtiWj1bYlpdfWVsc2V7Ylo9Ylouc3BsaXQoIiAiKX19fWZvcihiND0wLGIzPWJaLmxlbmd0aDtiNDxiMztiNCsrKXtkZWxldGUgYjVbYlpbYjRdXX1pZighKGIyP086YkcuaXNFbXB0eU9iamVjdCkoYjUpKXtyZXR1cm59fX1pZighYjIpe2RlbGV0ZSBlW2IwXS5kYXRhO2lmKCFPKGVbYjBdKSl7cmV0dXJufX1pZihiNil7YkcuY2xlYW5EYXRhKFtiMV0sdHJ1ZSl9ZWxzZXtpZihiRy5zdXBwb3J0LmRlbGV0ZUV4cGFuZG98fGUhPWUud2luZG93KXtkZWxldGUgZVtiMF19ZWxzZXtlW2IwXT1udWxsfX19LF9kYXRhOmZ1bmN0aW9uKGJaLGUsYjApe3JldHVybiBiRy5kYXRhKGJaLGUsYjAsdHJ1ZSl9LGFjY2VwdERhdGE6ZnVuY3Rpb24oYlope3ZhciBlPWJaLm5vZGVOYW1lJiZiRy5ub0RhdGFbYloubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07cmV0dXJuICFlfHxlIT09dHJ1ZSYmYlouZ2V0QXR0cmlidXRlKCJjbGFzc2lkIik9PT1lfX0pO2JHLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihiNyxiNil7dmFyIGIyLGJaLGI1LGUsYjEsYjA9dGhpc1swXSxiND0wLGIzPW51bGw7aWYoYjc9PT1hQil7aWYodGhpcy5sZW5ndGgpe2IzPWJHLmRhdGEoYjApO2lmKGIwLm5vZGVUeXBlPT09MSYmIWJHLl9kYXRhKGIwLCJwYXJzZWRBdHRycyIpKXtiNT1iMC5hdHRyaWJ1dGVzO2ZvcihiMT1iNS5sZW5ndGg7YjQ8YjE7YjQrKyl7ZT1iNVtiNF0ubmFtZTtpZihlLmluZGV4T2YoImRhdGEtIik9PT0wKXtlPWJHLmNhbWVsQ2FzZShlLnN1YnN0cmluZyg1KSk7YnYoYjAsZSxiM1tlXSl9fWJHLl9kYXRhKGIwLCJwYXJzZWRBdHRycyIsdHJ1ZSl9fXJldHVybiBiM31pZih0eXBlb2YgYjc9PT0ib2JqZWN0Iil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2JHLmRhdGEodGhpcyxiNyl9KX1iMj1iNy5zcGxpdCgiLiIsMik7YjJbMV09YjJbMV0/Ii4iK2IyWzFdOiIiO2JaPWIyWzFdKyIhIjtyZXR1cm4gYkcuYWNjZXNzKHRoaXMsZnVuY3Rpb24oYjgpe2lmKGI4PT09YUIpe2IzPXRoaXMudHJpZ2dlckhhbmRsZXIoImdldERhdGEiK2JaLFtiMlswXV0pO2lmKGIzPT09YUImJmIwKXtiMz1iRy5kYXRhKGIwLGI3KTtiMz1idihiMCxiNyxiMyl9cmV0dXJuIGIzPT09YUImJmIyWzFdP3RoaXMuZGF0YShiMlswXSk6YjN9YjJbMV09Yjg7dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI5PWJHKHRoaXMpO2I5LnRyaWdnZXJIYW5kbGVyKCJzZXREYXRhIitiWixiMik7YkcuZGF0YSh0aGlzLGI3LGI4KTtiOS50cmlnZ2VySGFuZGxlcigiY2hhbmdlRGF0YSIrYlosYjIpfSl9LG51bGwsYjYsYXJndW1lbnRzLmxlbmd0aD4xLG51bGwsZmFsc2UpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtiRy5yZW1vdmVEYXRhKHRoaXMsZSl9KX19KTtmdW5jdGlvbiBidihiMSxiMCxiMil7aWYoYjI9PT1hQiYmYjEubm9kZVR5cGU9PT0xKXt2YXIgYlo9ImRhdGEtIitiMC5yZXBsYWNlKGFMLCItJDEiKS50b0xvd2VyQ2FzZSgpO2IyPWIxLmdldEF0dHJpYnV0ZShiWik7aWYodHlwZW9mIGIyPT09InN0cmluZyIpe3RyeXtiMj1iMj09PSJ0cnVlIj90cnVlOmIyPT09ImZhbHNlIj9mYWxzZTpiMj09PSJudWxsIj9udWxsOitiMisiIj09PWIyPytiMjpidC50ZXN0KGIyKT9iRy5wYXJzZUpTT04oYjIpOmIyfWNhdGNoKGIzKXt9YkcuZGF0YShiMSxiMCxiMil9ZWxzZXtiMj1hQn19cmV0dXJuIGIyfWZ1bmN0aW9uIE8oYlope3ZhciBlO2ZvcihlIGluIGJaKXtpZihlPT09ImRhdGEiJiZiRy5pc0VtcHR5T2JqZWN0KGJaW2VdKSl7Y29udGludWV9aWYoZSE9PSJ0b0pTT04iKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfWJHLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYjAsYlosYjEpe3ZhciBlO2lmKGIwKXtiWj0oYlp8fCJmeCIpKyJxdWV1ZSI7ZT1iRy5fZGF0YShiMCxiWik7aWYoYjEpe2lmKCFlfHxiRy5pc0FycmF5KGIxKSl7ZT1iRy5fZGF0YShiMCxiWixiRy5tYWtlQXJyYXkoYjEpKX1lbHNle2UucHVzaChiMSl9fXJldHVybiBlfHxbXX19LGRlcXVldWU6ZnVuY3Rpb24oYjMsYjIpe2IyPWIyfHwiZngiO3ZhciBiWj1iRy5xdWV1ZShiMyxiMiksYjE9Ylouc2hpZnQoKSxlPWJHLl9xdWV1ZUhvb2tzKGIzLGIyKSxiMD1mdW5jdGlvbigpe2JHLmRlcXVldWUoYjMsYjIpfTtpZihiMT09PSJpbnByb2dyZXNzIil7YjE9Ylouc2hpZnQoKX1pZihiMSl7aWYoYjI9PT0iZngiKXtiWi51bnNoaWZ0KCJpbnByb2dyZXNzIil9ZGVsZXRlIGUuc3RvcDtiMS5jYWxsKGIzLGIwLGUpfWlmKCFiWi5sZW5ndGgmJmUpe2UuZW1wdHkuZmlyZSgpfX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYjAsYlope3ZhciBlPWJaKyJxdWV1ZUhvb2tzIjtyZXR1cm4gYkcuX2RhdGEoYjAsZSl8fGJHLl9kYXRhKGIwLGUse2VtcHR5OmJHLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtiRy5yZW1vdmVEYXRhKGIwLGJaKyJxdWV1ZSIsdHJ1ZSk7YkcucmVtb3ZlRGF0YShiMCxlLHRydWUpfSl9KX19KTtiRy5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsYlope3ZhciBiMD0yO2lmKHR5cGVvZiBlIT09InN0cmluZyIpe2JaPWU7ZT0iZngiO2IwLS19aWYoYXJndW1lbnRzLmxlbmd0aDxiMCl7cmV0dXJuIGJHLnF1ZXVlKHRoaXNbMF0sZSl9cmV0dXJuIGJaPT09YUI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYjE9YkcucXVldWUodGhpcyxlLGJaKTtiRy5fcXVldWVIb29rcyh0aGlzLGUpO2lmKGU9PT0iZngiJiZiMVswXSE9PSJpbnByb2dyZXNzIil7YkcuZGVxdWV1ZSh0aGlzLGUpfX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtiRy5kZXF1ZXVlKHRoaXMsZSl9KX0sZGVsYXk6ZnVuY3Rpb24oYlosZSl7Ylo9YkcuZng/YkcuZnguc3BlZWRzW2JaXXx8Ylo6Ylo7ZT1lfHwiZngiO3JldHVybiB0aGlzLnF1ZXVlKGUsZnVuY3Rpb24oYjEsYjApe3ZhciBiMj1zZXRUaW1lb3V0KGIxLGJaKTtiMC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGIyKX19KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5xdWV1ZShlfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihiMCxiNCl7dmFyIGJaLGIxPTEsYjU9YkcuRGVmZXJyZWQoKSxiMz10aGlzLGU9dGhpcy5sZW5ndGgsYjI9ZnVuY3Rpb24oKXtpZighKC0tYjEpKXtiNS5yZXNvbHZlV2l0aChiMyxbYjNdKX19O2lmKHR5cGVvZiBiMCE9PSJzdHJpbmciKXtiND1iMDtiMD1hQn1iMD1iMHx8ImZ4Ijt3aGlsZShlLS0pe2lmKChiWj1iRy5fZGF0YShiM1tlXSxiMCsicXVldWVIb29rcyIpKSYmYlouZW1wdHkpe2IxKys7YlouZW1wdHkuYWRkKGIyKX19YjIoKTtyZXR1cm4gYjUucHJvbWlzZShiNCl9fSk7dmFyIGE3LGJWLG4sYko9L1tcdFxyXG5dL2csYWk9L1xyL2csaj0vXig/OmJ1dHRvbnxpbnB1dCkkL2ksYUE9L14oPzpidXR0b258aW5wdXR8b2JqZWN0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksRT0vXmEoPzpyZWF8KSQvaSxNPS9eKD86YXV0b2ZvY3VzfGF1dG9wbGF5fGFzeW5jfGNoZWNrZWR8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWR8c2VsZWN0ZWQpJC9pLGJMPWJHLnN1cHBvcnQuZ2V0U2V0QXR0cmlidXRlO2JHLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLGJaKXtyZXR1cm4gYkcuYWNjZXNzKHRoaXMsYkcuYXR0cixlLGJaLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2JHLnJlbW92ZUF0dHIodGhpcyxlKX0pfSxwcm9wOmZ1bmN0aW9uKGUsYlope3JldHVybiBiRy5hY2Nlc3ModGhpcyxiRy5wcm9wLGUsYlosYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtlPWJHLnByb3BGaXhbZV18fGU7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RyeXt0aGlzW2VdPWFCO2RlbGV0ZSB0aGlzW2VdfWNhdGNoKGJaKXt9fSl9LGFkZENsYXNzOmZ1bmN0aW9uKGIyKXt2YXIgYjQsYjAsYlosYjEsYjMsYjUsZTtpZihiRy5pc0Z1bmN0aW9uKGIyKSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiNil7YkcodGhpcykuYWRkQ2xhc3MoYjIuY2FsbCh0aGlzLGI2LHRoaXMuY2xhc3NOYW1lKSl9KX1pZihiMiYmdHlwZW9mIGIyPT09InN0cmluZyIpe2I0PWIyLnNwbGl0KGFWKTtmb3IoYjA9MCxiWj10aGlzLmxlbmd0aDtiMDxiWjtiMCsrKXtiMT10aGlzW2IwXTtpZihiMS5ub2RlVHlwZT09PTEpe2lmKCFiMS5jbGFzc05hbWUmJmI0Lmxlbmd0aD09PTEpe2IxLmNsYXNzTmFtZT1iMn1lbHNle2IzPSIgIitiMS5jbGFzc05hbWUrIiAiO2ZvcihiNT0wLGU9YjQubGVuZ3RoO2I1PGU7YjUrKyl7aWYoIX5iMy5pbmRleE9mKCIgIitiNFtiNV0rIiAiKSl7YjMrPWI0W2I1XSsiICJ9fWIxLmNsYXNzTmFtZT1iRy50cmltKGIzKX19fX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oYjQpe3ZhciBiMSxiMixiMyxiNSxiWixiMCxlO2lmKGJHLmlzRnVuY3Rpb24oYjQpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGI2KXtiRyh0aGlzKS5yZW1vdmVDbGFzcyhiNC5jYWxsKHRoaXMsYjYsdGhpcy5jbGFzc05hbWUpKX0pfWlmKChiNCYmdHlwZW9mIGI0PT09InN0cmluZyIpfHxiND09PWFCKXtiMT0oYjR8fCIiKS5zcGxpdChhVik7Zm9yKGIwPTAsZT10aGlzLmxlbmd0aDtiMDxlO2IwKyspe2IzPXRoaXNbYjBdO2lmKGIzLm5vZGVUeXBlPT09MSYmYjMuY2xhc3NOYW1lKXtiMj0oIiAiK2IzLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoYkosIiAiKTtmb3IoYjU9MCxiWj1iMS5sZW5ndGg7YjU8Ylo7YjUrKyl7d2hpbGUoYjIuaW5kZXhPZigiICIrYjFbYjVdKyIgIik+LTEpe2IyPWIyLnJlcGxhY2UoIiAiK2IxW2I1XSsiICIsIiAiKX19YjMuY2xhc3NOYW1lPWI0P2JHLnRyaW0oYjIpOiIifX19cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGIxLGJaKXt2YXIgYjA9dHlwZW9mIGIxLGU9dHlwZW9mIGJaPT09ImJvb2xlYW4iO2lmKGJHLmlzRnVuY3Rpb24oYjEpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIyKXtiRyh0aGlzKS50b2dnbGVDbGFzcyhiMS5jYWxsKHRoaXMsYjIsdGhpcy5jbGFzc05hbWUsYlopLGJaKX0pfXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihiMD09PSJzdHJpbmciKXt2YXIgYjQsYjM9MCxiMj1iRyh0aGlzKSxiNT1iWixiNj1iMS5zcGxpdChhVik7d2hpbGUoKGI0PWI2W2IzKytdKSl7YjU9ZT9iNTohYjIuaGFzQ2xhc3MoYjQpO2IyW2I1PyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oYjQpfX1lbHNle2lmKGIwPT09InVuZGVmaW5lZCJ8fGIwPT09ImJvb2xlYW4iKXtpZih0aGlzLmNsYXNzTmFtZSl7YkcuX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIsdGhpcy5jbGFzc05hbWUpfXRoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lfHxiMT09PWZhbHNlPyIiOmJHLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiJ9fX0pfSxoYXNDbGFzczpmdW5jdGlvbihlKXt2YXIgYjE9IiAiK2UrIiAiLGIwPTAsYlo9dGhpcy5sZW5ndGg7Zm9yKDtiMDxiWjtiMCsrKXtpZih0aGlzW2IwXS5ub2RlVHlwZT09PTEmJigiICIrdGhpc1tiMF0uY2xhc3NOYW1lKyIgIikucmVwbGFjZShiSiwiICIpLmluZGV4T2YoYjEpPi0xKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfSx2YWw6ZnVuY3Rpb24oYjEpe3ZhciBlLGJaLGIyLGIwPXRoaXNbMF07aWYoIWFyZ3VtZW50cy5sZW5ndGgpe2lmKGIwKXtlPWJHLnZhbEhvb2tzW2IwLnR5cGVdfHxiRy52YWxIb29rc1tiMC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtpZihlJiYiZ2V0IiBpbiBlJiYoYlo9ZS5nZXQoYjAsInZhbHVlIikpIT09YUIpe3JldHVybiBiWn1iWj1iMC52YWx1ZTtyZXR1cm4gdHlwZW9mIGJaPT09InN0cmluZyI/YloucmVwbGFjZShhaSwiIik6Ylo9PW51bGw/IiI6Ylp9cmV0dXJufWIyPWJHLmlzRnVuY3Rpb24oYjEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYjQpe3ZhciBiNSxiMz1iRyh0aGlzKTtpZih0aGlzLm5vZGVUeXBlIT09MSl7cmV0dXJufWlmKGIyKXtiNT1iMS5jYWxsKHRoaXMsYjQsYjMudmFsKCkpfWVsc2V7YjU9YjF9aWYoYjU9PW51bGwpe2I1PSIifWVsc2V7aWYodHlwZW9mIGI1PT09Im51bWJlciIpe2I1Kz0iIn1lbHNle2lmKGJHLmlzQXJyYXkoYjUpKXtiNT1iRy5tYXAoYjUsZnVuY3Rpb24oYjYpe3JldHVybiBiNj09bnVsbD8iIjpiNisiIn0pfX19ZT1iRy52YWxIb29rc1t0aGlzLnR5cGVdfHxiRy52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldO2lmKCFlfHwhKCJzZXQiIGluIGUpfHxlLnNldCh0aGlzLGI1LCJ2YWx1ZSIpPT09YUIpe3RoaXMudmFsdWU9YjV9fSl9fSk7YkcuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZSl7dmFyIGJaPWUuYXR0cmlidXRlcy52YWx1ZTtyZXR1cm4gIWJafHxiWi5zcGVjaWZpZWQ/ZS52YWx1ZTplLnRleHR9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihlKXt2YXIgYjQsYlosYjMsYjEsYjI9ZS5zZWxlY3RlZEluZGV4LGI1PVtdLGI2PWUub3B0aW9ucyxiMD1lLnR5cGU9PT0ic2VsZWN0LW9uZSI7aWYoYjI8MCl7cmV0dXJuIG51bGx9Ylo9YjA/YjI6MDtiMz1iMD9iMisxOmI2Lmxlbmd0aDtmb3IoO2JaPGIzO2JaKyspe2IxPWI2W2JaXTtpZihiMS5zZWxlY3RlZCYmKGJHLnN1cHBvcnQub3B0RGlzYWJsZWQ/IWIxLmRpc2FibGVkOmIxLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKT09PW51bGwpJiYoIWIxLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFiRy5ub2RlTmFtZShiMS5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7YjQ9YkcoYjEpLnZhbCgpO2lmKGIwKXtyZXR1cm4gYjR9YjUucHVzaChiNCl9fWlmKGIwJiYhYjUubGVuZ3RoJiZiNi5sZW5ndGgpe3JldHVybiBiRyhiNltiMl0pLnZhbCgpfXJldHVybiBiNX0sc2V0OmZ1bmN0aW9uKGJaLGIwKXt2YXIgZT1iRy5tYWtlQXJyYXkoYjApO2JHKGJaKS5maW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZD1iRy5pbkFycmF5KGJHKHRoaXMpLnZhbCgpLGUpPj0wfSk7aWYoIWUubGVuZ3RoKXtiWi5zZWxlY3RlZEluZGV4PS0xfXJldHVybiBlfX19LGF0dHJGbjp7fSxhdHRyOmZ1bmN0aW9uKGI0LGIxLGI1LGIzKXt2YXIgYjAsZSxiMixiWj1iNC5ub2RlVHlwZTtpZighYjR8fGJaPT09M3x8Ylo9PT04fHxiWj09PTIpe3JldHVybn1pZihiMyYmYkcuaXNGdW5jdGlvbihiRy5mbltiMV0pKXtyZXR1cm4gYkcoYjQpW2IxXShiNSl9aWYodHlwZW9mIGI0LmdldEF0dHJpYnV0ZT09PSJ1bmRlZmluZWQiKXtyZXR1cm4gYkcucHJvcChiNCxiMSxiNSl9YjI9YlohPT0xfHwhYkcuaXNYTUxEb2MoYjQpO2lmKGIyKXtiMT1iMS50b0xvd2VyQ2FzZSgpO2U9YkcuYXR0ckhvb2tzW2IxXXx8KE0udGVzdChiMSk/YlY6YTcpfWlmKGI1IT09YUIpe2lmKGI1PT09bnVsbCl7YkcucmVtb3ZlQXR0cihiNCxiMSk7cmV0dXJufWVsc2V7aWYoZSYmInNldCIgaW4gZSYmYjImJihiMD1lLnNldChiNCxiNSxiMSkpIT09YUIpe3JldHVybiBiMH1lbHNle2I0LnNldEF0dHJpYnV0ZShiMSwiIitiNSk7cmV0dXJuIGI1fX19ZWxzZXtpZihlJiYiZ2V0IiBpbiBlJiZiMiYmKGIwPWUuZ2V0KGI0LGIxKSkhPT1udWxsKXtyZXR1cm4gYjB9ZWxzZXtiMD1iNC5nZXRBdHRyaWJ1dGUoYjEpO3JldHVybiBiMD09PW51bGw/YUI6YjB9fX0scmVtb3ZlQXR0cjpmdW5jdGlvbihiMSxiMyl7dmFyIGIyLGI0LGJaLGUsYjA9MDtpZihiMyYmYjEubm9kZVR5cGU9PT0xKXtiND1iMy5zcGxpdChhVik7Zm9yKDtiMDxiNC5sZW5ndGg7YjArKyl7Ylo9YjRbYjBdO2lmKGJaKXtiMj1iRy5wcm9wRml4W2JaXXx8Ylo7ZT1NLnRlc3QoYlopO2lmKCFlKXtiRy5hdHRyKGIxLGJaLCIiKX1iMS5yZW1vdmVBdHRyaWJ1dGUoYkw/Ylo6YjIpO2lmKGUmJmIyIGluIGIxKXtiMVtiMl09ZmFsc2V9fX19fSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihlLGJaKXtpZihqLnRlc3QoZS5ub2RlTmFtZSkmJmUucGFyZW50Tm9kZSl7YkcuZXJyb3IoInR5cGUgcHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZCIpfWVsc2V7aWYoIWJHLnN1cHBvcnQucmFkaW9WYWx1ZSYmYlo9PT0icmFkaW8iJiZiRy5ub2RlTmFtZShlLCJpbnB1dCIpKXt2YXIgYjA9ZS52YWx1ZTtlLnNldEF0dHJpYnV0ZSgidHlwZSIsYlopO2lmKGIwKXtlLnZhbHVlPWIwfXJldHVybiBiWn19fX0sdmFsdWU6e2dldDpmdW5jdGlvbihiWixlKXtpZihhNyYmYkcubm9kZU5hbWUoYlosImJ1dHRvbiIpKXtyZXR1cm4gYTcuZ2V0KGJaLGUpfXJldHVybiBlIGluIGJaP2JaLnZhbHVlOm51bGx9LHNldDpmdW5jdGlvbihiWixiMCxlKXtpZihhNyYmYkcubm9kZU5hbWUoYlosImJ1dHRvbiIpKXtyZXR1cm4gYTcuc2V0KGJaLGIwLGUpfWJaLnZhbHVlPWIwfX19LHByb3BGaXg6e3RhYmluZGV4OiJ0YWJJbmRleCIscmVhZG9ubHk6InJlYWRPbmx5IiwiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIixtYXhsZW5ndGg6Im1heExlbmd0aCIsY2VsbHNwYWNpbmc6ImNlbGxTcGFjaW5nIixjZWxscGFkZGluZzoiY2VsbFBhZGRpbmciLHJvd3NwYW46InJvd1NwYW4iLGNvbHNwYW46ImNvbFNwYW4iLHVzZW1hcDoidXNlTWFwIixmcmFtZWJvcmRlcjoiZnJhbWVCb3JkZXIiLGNvbnRlbnRlZGl0YWJsZToiY29udGVudEVkaXRhYmxlIn0scHJvcDpmdW5jdGlvbihiMyxiMSxiNCl7dmFyIGIwLGUsYjIsYlo9YjMubm9kZVR5cGU7aWYoIWIzfHxiWj09PTN8fGJaPT09OHx8Ylo9PT0yKXtyZXR1cm59YjI9YlohPT0xfHwhYkcuaXNYTUxEb2MoYjMpO2lmKGIyKXtiMT1iRy5wcm9wRml4W2IxXXx8YjE7ZT1iRy5wcm9wSG9va3NbYjFdfWlmKGI0IT09YUIpe2lmKGUmJiJzZXQiIGluIGUmJihiMD1lLnNldChiMyxiNCxiMSkpIT09YUIpe3JldHVybiBiMH1lbHNle3JldHVybihiM1tiMV09YjQpfX1lbHNle2lmKGUmJiJnZXQiIGluIGUmJihiMD1lLmdldChiMyxiMSkpIT09bnVsbCl7cmV0dXJuIGIwfWVsc2V7cmV0dXJuIGIzW2IxXX19fSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oYlope3ZhciBlPWJaLmdldEF0dHJpYnV0ZU5vZGUoInRhYmluZGV4Iik7cmV0dXJuIGUmJmUuc3BlY2lmaWVkP3BhcnNlSW50KGUudmFsdWUsMTApOmFBLnRlc3QoYloubm9kZU5hbWUpfHxFLnRlc3QoYloubm9kZU5hbWUpJiZiWi5ocmVmPzA6YUJ9fX19KTtiVj17Z2V0OmZ1bmN0aW9uKGJaLGUpe3ZhciBiMSxiMD1iRy5wcm9wKGJaLGUpO3JldHVybiBiMD09PXRydWV8fHR5cGVvZiBiMCE9PSJib29sZWFuIiYmKGIxPWJaLmdldEF0dHJpYnV0ZU5vZGUoZSkpJiZiMS5ub2RlVmFsdWUhPT1mYWxzZT9lLnRvTG93ZXJDYXNlKCk6YUJ9LHNldDpmdW5jdGlvbihiWixiMSxlKXt2YXIgYjA7aWYoYjE9PT1mYWxzZSl7YkcucmVtb3ZlQXR0cihiWixlKX1lbHNle2IwPWJHLnByb3BGaXhbZV18fGU7aWYoYjAgaW4gYlope2JaW2IwXT10cnVlfWJaLnNldEF0dHJpYnV0ZShlLGUudG9Mb3dlckNhc2UoKSl9cmV0dXJuIGV9fTtpZighYkwpe249e25hbWU6dHJ1ZSxpZDp0cnVlLGNvb3Jkczp0cnVlfTthNz1iRy52YWxIb29rcy5idXR0b249e2dldDpmdW5jdGlvbihiMCxiWil7dmFyIGU7ZT1iMC5nZXRBdHRyaWJ1dGVOb2RlKGJaKTtyZXR1cm4gZSYmKG5bYlpdP2UudmFsdWUhPT0iIjplLnNwZWNpZmllZCk/ZS52YWx1ZTphQn0sc2V0OmZ1bmN0aW9uKGIwLGIxLGJaKXt2YXIgZT1iMC5nZXRBdHRyaWJ1dGVOb2RlKGJaKTtpZighZSl7ZT1vLmNyZWF0ZUF0dHJpYnV0ZShiWik7YjAuc2V0QXR0cmlidXRlTm9kZShlKX1yZXR1cm4oZS52YWx1ZT1iMSsiIil9fTtiRy5lYWNoKFsid2lkdGgiLCJoZWlnaHQiXSxmdW5jdGlvbihiWixlKXtiRy5hdHRySG9va3NbZV09YkcuZXh0ZW5kKGJHLmF0dHJIb29rc1tlXSx7c2V0OmZ1bmN0aW9uKGIwLGIxKXtpZihiMT09PSIiKXtiMC5zZXRBdHRyaWJ1dGUoZSwiYXV0byIpO3JldHVybiBiMX19fSl9KTtiRy5hdHRySG9va3MuY29udGVudGVkaXRhYmxlPXtnZXQ6YTcuZ2V0LHNldDpmdW5jdGlvbihiWixiMCxlKXtpZihiMD09PSIiKXtiMD0iZmFsc2UifWE3LnNldChiWixiMCxlKX19fWlmKCFiRy5zdXBwb3J0LmhyZWZOb3JtYWxpemVkKXtiRy5lYWNoKFsiaHJlZiIsInNyYyIsIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYlosZSl7YkcuYXR0ckhvb2tzW2VdPWJHLmV4dGVuZChiRy5hdHRySG9va3NbZV0se2dldDpmdW5jdGlvbihiMSl7dmFyIGIwPWIxLmdldEF0dHJpYnV0ZShlLDIpO3JldHVybiBiMD09PW51bGw/YUI6YjB9fSl9KX1pZighYkcuc3VwcG9ydC5zdHlsZSl7YkcuYXR0ckhvb2tzLnN0eWxlPXtnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3R5bGUuY3NzVGV4dC50b0xvd2VyQ2FzZSgpfHxhQn0sc2V0OmZ1bmN0aW9uKGUsYlope3JldHVybihlLnN0eWxlLmNzc1RleHQ9IiIrYlopfX19aWYoIWJHLnN1cHBvcnQub3B0U2VsZWN0ZWQpe2JHLnByb3BIb29rcy5zZWxlY3RlZD1iRy5leHRlbmQoYkcucHJvcEhvb2tzLnNlbGVjdGVkLHtnZXQ6ZnVuY3Rpb24oYlope3ZhciBlPWJaLnBhcmVudE5vZGU7aWYoZSl7ZS5zZWxlY3RlZEluZGV4O2lmKGUucGFyZW50Tm9kZSl7ZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXh9fXJldHVybiBudWxsfX0pfWlmKCFiRy5zdXBwb3J0LmVuY3R5cGUpe2JHLnByb3BGaXguZW5jdHlwZT0iZW5jb2RpbmcifWlmKCFiRy5zdXBwb3J0LmNoZWNrT24pe2JHLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtiRy52YWxIb29rc1t0aGlzXT17Z2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgidmFsdWUiKT09PW51bGw/Im9uIjplLnZhbHVlfX19KX1iRy5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7YkcudmFsSG9va3NbdGhpc109YkcuZXh0ZW5kKGJHLnZhbEhvb2tzW3RoaXNdLHtzZXQ6ZnVuY3Rpb24oZSxiWil7aWYoYkcuaXNBcnJheShiWikpe3JldHVybihlLmNoZWNrZWQ9YkcuaW5BcnJheShiRyhlKS52YWwoKSxiWik+PTApfX19KX0pO3ZhciBiRT0vXig/OnRleHRhcmVhfGlucHV0fHNlbGVjdCkkL2ksYnI9L14oW15cLl0qfCkoPzpcLiguKyl8KSQvLGJhPS8oPzpefFxzKWhvdmVyKFwuXFMrfClcYi8sYTM9L15rZXkvLGJLPS9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLyxieT0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sYXE9ZnVuY3Rpb24oZSl7cmV0dXJuIGJHLmV2ZW50LnNwZWNpYWwuaG92ZXI/ZTplLnJlcGxhY2UoYmEsIm1vdXNlZW50ZXIkMSBtb3VzZWxlYXZlJDEiKX07YkcuZXZlbnQ9e2FkZDpmdW5jdGlvbihiMSxiNSxjYyxiMyxiMil7dmFyIGI2LGI0LGNkLGNiLGNhLGI4LGUsYjksYlosYjAsYjc7aWYoYjEubm9kZVR5cGU9PT0zfHxiMS5ub2RlVHlwZT09PTh8fCFiNXx8IWNjfHwhKGI2PWJHLl9kYXRhKGIxKSkpe3JldHVybn1pZihjYy5oYW5kbGVyKXtiWj1jYztjYz1iWi5oYW5kbGVyO2IyPWJaLnNlbGVjdG9yfWlmKCFjYy5ndWlkKXtjYy5ndWlkPWJHLmd1aWQrK31jZD1iNi5ldmVudHM7aWYoIWNkKXtiNi5ldmVudHM9Y2Q9e319YjQ9YjYuaGFuZGxlO2lmKCFiNCl7YjYuaGFuZGxlPWI0PWZ1bmN0aW9uKGNlKXtyZXR1cm4gdHlwZW9mIGJHIT09InVuZGVmaW5lZCImJighY2V8fGJHLmV2ZW50LnRyaWdnZXJlZCE9PWNlLnR5cGUpP2JHLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGI0LmVsZW0sYXJndW1lbnRzKTphQn07YjQuZWxlbT1iMX1iNT1iRy50cmltKGFxKGI1KSkuc3BsaXQoIiAiKTtmb3IoY2I9MDtjYjxiNS5sZW5ndGg7Y2IrKyl7Y2E9YnIuZXhlYyhiNVtjYl0pfHxbXTtiOD1jYVsxXTtlPShjYVsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpO2I3PWJHLmV2ZW50LnNwZWNpYWxbYjhdfHx7fTtiOD0oYjI/YjcuZGVsZWdhdGVUeXBlOmI3LmJpbmRUeXBlKXx8Yjg7Yjc9YkcuZXZlbnQuc3BlY2lhbFtiOF18fHt9O2I5PWJHLmV4dGVuZCh7dHlwZTpiOCxvcmlnVHlwZTpjYVsxXSxkYXRhOmIzLGhhbmRsZXI6Y2MsZ3VpZDpjYy5ndWlkLHNlbGVjdG9yOmIyLG5hbWVzcGFjZTplLmpvaW4oIi4iKX0sYlopO2IwPWNkW2I4XTtpZighYjApe2IwPWNkW2I4XT1bXTtiMC5kZWxlZ2F0ZUNvdW50PTA7aWYoIWI3LnNldHVwfHxiNy5zZXR1cC5jYWxsKGIxLGIzLGUsYjQpPT09ZmFsc2Upe2lmKGIxLmFkZEV2ZW50TGlzdGVuZXIpe2IxLmFkZEV2ZW50TGlzdGVuZXIoYjgsYjQsZmFsc2UpfWVsc2V7aWYoYjEuYXR0YWNoRXZlbnQpe2IxLmF0dGFjaEV2ZW50KCJvbiIrYjgsYjQpfX19fWlmKGI3LmFkZCl7YjcuYWRkLmNhbGwoYjEsYjkpO2lmKCFiOS5oYW5kbGVyLmd1aWQpe2I5LmhhbmRsZXIuZ3VpZD1jYy5ndWlkfX1pZihiMil7YjAuc3BsaWNlKGIwLmRlbGVnYXRlQ291bnQrKywwLGI5KX1lbHNle2IwLnB1c2goYjkpfWJHLmV2ZW50Lmdsb2JhbFtiOF09dHJ1ZX1iMT1udWxsfSxnbG9iYWw6e30scmVtb3ZlOmZ1bmN0aW9uKGIxLGI2LGNjLGIyLGI1KXt2YXIgY2QsY2UsYjksYjAsYlosYjMsYjQsY2IsYjgsZSxjYSxiNz1iRy5oYXNEYXRhKGIxKSYmYkcuX2RhdGEoYjEpO2lmKCFiN3x8IShjYj1iNy5ldmVudHMpKXtyZXR1cm59YjY9YkcudHJpbShhcShiNnx8IiIpKS5zcGxpdCgiICIpO2ZvcihjZD0wO2NkPGI2Lmxlbmd0aDtjZCsrKXtjZT1ici5leGVjKGI2W2NkXSl8fFtdO2I5PWIwPWNlWzFdO2JaPWNlWzJdO2lmKCFiOSl7Zm9yKGI5IGluIGNiKXtiRy5ldmVudC5yZW1vdmUoYjEsYjkrYjZbY2RdLGNjLGIyLHRydWUpfWNvbnRpbnVlfWI4PWJHLmV2ZW50LnNwZWNpYWxbYjldfHx7fTtiOT0oYjI/YjguZGVsZWdhdGVUeXBlOmI4LmJpbmRUeXBlKXx8Yjk7ZT1jYltiOV18fFtdO2IzPWUubGVuZ3RoO2JaPWJaP25ldyBSZWdFeHAoIihefFxcLikiK2JaLnNwbGl0KCIuIikuc29ydCgpLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGw7Zm9yKGI0PTA7YjQ8ZS5sZW5ndGg7YjQrKyl7Y2E9ZVtiNF07aWYoKGI1fHxiMD09PWNhLm9yaWdUeXBlKSYmKCFjY3x8Y2MuZ3VpZD09PWNhLmd1aWQpJiYoIWJafHxiWi50ZXN0KGNhLm5hbWVzcGFjZSkpJiYoIWIyfHxiMj09PWNhLnNlbGVjdG9yfHxiMj09PSIqKiImJmNhLnNlbGVjdG9yKSl7ZS5zcGxpY2UoYjQtLSwxKTtpZihjYS5zZWxlY3Rvcil7ZS5kZWxlZ2F0ZUNvdW50LS19aWYoYjgucmVtb3ZlKXtiOC5yZW1vdmUuY2FsbChiMSxjYSl9fX1pZihlLmxlbmd0aD09PTAmJmIzIT09ZS5sZW5ndGgpe2lmKCFiOC50ZWFyZG93bnx8YjgudGVhcmRvd24uY2FsbChiMSxiWixiNy5oYW5kbGUpPT09ZmFsc2Upe2JHLnJlbW92ZUV2ZW50KGIxLGI5LGI3LmhhbmRsZSl9ZGVsZXRlIGNiW2I5XX19aWYoYkcuaXNFbXB0eU9iamVjdChjYikpe2RlbGV0ZSBiNy5oYW5kbGU7YkcucmVtb3ZlRGF0YShiMSwiZXZlbnRzIix0cnVlKX19LGN1c3RvbUV2ZW50OntnZXREYXRhOnRydWUsc2V0RGF0YTp0cnVlLGNoYW5nZURhdGE6dHJ1ZX0sdHJpZ2dlcjpmdW5jdGlvbihiWixiNixiNCxjZCl7aWYoYjQmJihiNC5ub2RlVHlwZT09PTN8fGI0Lm5vZGVUeXBlPT09OCkpe3JldHVybn12YXIgZSxiMSxiNyxjYixiMyxiMixiOSxiOCxiNSxjYyxjYT1iWi50eXBlfHxiWixiMD1bXTtpZihieS50ZXN0KGNhK2JHLmV2ZW50LnRyaWdnZXJlZCkpe3JldHVybn1pZihjYS5pbmRleE9mKCIhIik+PTApe2NhPWNhLnNsaWNlKDAsLTEpO2IxPXRydWV9aWYoY2EuaW5kZXhPZigiLiIpPj0wKXtiMD1jYS5zcGxpdCgiLiIpO2NhPWIwLnNoaWZ0KCk7YjAuc29ydCgpfWlmKCghYjR8fGJHLmV2ZW50LmN1c3RvbUV2ZW50W2NhXSkmJiFiRy5ldmVudC5nbG9iYWxbY2FdKXtyZXR1cm59Ylo9dHlwZW9mIGJaPT09Im9iamVjdCI/YlpbYkcuZXhwYW5kb10/Ylo6bmV3IGJHLkV2ZW50KGNhLGJaKTpuZXcgYkcuRXZlbnQoY2EpO2JaLnR5cGU9Y2E7YlouaXNUcmlnZ2VyPXRydWU7YlouZXhjbHVzaXZlPWIxO2JaLm5hbWVzcGFjZT1iMC5qb2luKCIuIik7YloubmFtZXNwYWNlX3JlPWJaLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitiMC5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsO2IyPWNhLmluZGV4T2YoIjoiKTwwPyJvbiIrY2E6IiI7aWYoIWI0KXtlPWJHLmNhY2hlO2ZvcihiNyBpbiBlKXtpZihlW2I3XS5ldmVudHMmJmVbYjddLmV2ZW50c1tjYV0pe2JHLmV2ZW50LnRyaWdnZXIoYlosYjYsZVtiN10uaGFuZGxlLmVsZW0sdHJ1ZSl9fXJldHVybn1iWi5yZXN1bHQ9YUI7aWYoIWJaLnRhcmdldCl7YloudGFyZ2V0PWI0fWI2PWI2IT1udWxsP2JHLm1ha2VBcnJheShiNik6W107YjYudW5zaGlmdChiWik7Yjk9YkcuZXZlbnQuc3BlY2lhbFtjYV18fHt9O2lmKGI5LnRyaWdnZXImJmI5LnRyaWdnZXIuYXBwbHkoYjQsYjYpPT09ZmFsc2Upe3JldHVybn1iNT1bW2I0LGI5LmJpbmRUeXBlfHxjYV1dO2lmKCFjZCYmIWI5Lm5vQnViYmxlJiYhYkcuaXNXaW5kb3coYjQpKXtjYz1iOS5kZWxlZ2F0ZVR5cGV8fGNhO2NiPWJ5LnRlc3QoY2MrY2EpP2I0OmI0LnBhcmVudE5vZGU7Zm9yKGIzPWI0O2NiO2NiPWNiLnBhcmVudE5vZGUpe2I1LnB1c2goW2NiLGNjXSk7YjM9Y2J9aWYoYjM9PT0oYjQub3duZXJEb2N1bWVudHx8bykpe2I1LnB1c2goW2IzLmRlZmF1bHRWaWV3fHxiMy5wYXJlbnRXaW5kb3d8fGEyLGNjXSl9fWZvcihiNz0wO2I3PGI1Lmxlbmd0aCYmIWJaLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7YjcrKyl7Y2I9YjVbYjddWzBdO2JaLnR5cGU9YjVbYjddWzFdO2I4PShiRy5fZGF0YShjYiwiZXZlbnRzIil8fHt9KVtiWi50eXBlXSYmYkcuX2RhdGEoY2IsImhhbmRsZSIpO2lmKGI4KXtiOC5hcHBseShjYixiNil9Yjg9YjImJmNiW2IyXTtpZihiOCYmYkcuYWNjZXB0RGF0YShjYikmJmI4LmFwcGx5KGNiLGI2KT09PWZhbHNlKXtiWi5wcmV2ZW50RGVmYXVsdCgpfX1iWi50eXBlPWNhO2lmKCFjZCYmIWJaLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtpZigoIWI5Ll9kZWZhdWx0fHxiOS5fZGVmYXVsdC5hcHBseShiNC5vd25lckRvY3VtZW50LGI2KT09PWZhbHNlKSYmIShjYT09PSJjbGljayImJmJHLm5vZGVOYW1lKGI0LCJhIikpJiZiRy5hY2NlcHREYXRhKGI0KSl7aWYoYjImJmI0W2NhXSYmKChjYSE9PSJmb2N1cyImJmNhIT09ImJsdXIiKXx8YloudGFyZ2V0Lm9mZnNldFdpZHRoIT09MCkmJiFiRy5pc1dpbmRvdyhiNCkpe2IzPWI0W2IyXTtpZihiMyl7YjRbYjJdPW51bGx9YkcuZXZlbnQudHJpZ2dlcmVkPWNhO2I0W2NhXSgpO2JHLmV2ZW50LnRyaWdnZXJlZD1hQjtpZihiMyl7YjRbYjJdPWIzfX19fXJldHVybiBiWi5yZXN1bHR9LGRpc3BhdGNoOmZ1bmN0aW9uKGNiKXtjYj1iRy5ldmVudC5maXgoY2J8fGEyLmV2ZW50KTt2YXIgY2QsY2EsYjIsYjQsY2UsY2MsYjUsYjAsZSxiOSxjZixiNz0oKGJHLl9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbY2IudHlwZV18fFtdKSxiNj1iNy5kZWxlZ2F0ZUNvdW50LGIxPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxiOD0hY2IuZXhjbHVzaXZlJiYhY2IubmFtZXNwYWNlLGIzPWJHLmV2ZW50LnNwZWNpYWxbY2IudHlwZV18fHt9LGJaPVtdO2IxWzBdPWNiO2NiLmRlbGVnYXRlVGFyZ2V0PXRoaXM7aWYoYjMucHJlRGlzcGF0Y2gmJmIzLnByZURpc3BhdGNoLmNhbGwodGhpcyxjYik9PT1mYWxzZSl7cmV0dXJufWlmKGI2JiYhKGNiLmJ1dHRvbiYmY2IudHlwZT09PSJjbGljayIpKXtiND1iRyh0aGlzKTtiNC5jb250ZXh0PXRoaXM7Zm9yKGIyPWNiLnRhcmdldDtiMiE9dGhpcztiMj1iMi5wYXJlbnROb2RlfHx0aGlzKXtpZihiMi5kaXNhYmxlZCE9PXRydWV8fGNiLnR5cGUhPT0iY2xpY2siKXtjYz17fTtiMD1bXTtiNFswXT1iMjtmb3IoY2Q9MDtjZDxiNjtjZCsrKXtlPWI3W2NkXTtiOT1lLnNlbGVjdG9yO2lmKGNjW2I5XT09PWFCKXtjY1tiOV09YjQuaXMoYjkpfWlmKGNjW2I5XSl7YjAucHVzaChlKX19aWYoYjAubGVuZ3RoKXtiWi5wdXNoKHtlbGVtOmIyLG1hdGNoZXM6YjB9KX19fX1pZihiNy5sZW5ndGg+YjYpe2JaLnB1c2goe2VsZW06dGhpcyxtYXRjaGVzOmI3LnNsaWNlKGI2KX0pfWZvcihjZD0wO2NkPGJaLmxlbmd0aCYmIWNiLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7Y2QrKyl7YjU9YlpbY2RdO2NiLmN1cnJlbnRUYXJnZXQ9YjUuZWxlbTtmb3IoY2E9MDtjYTxiNS5tYXRjaGVzLmxlbmd0aCYmIWNiLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7Y2ErKyl7ZT1iNS5tYXRjaGVzW2NhXTtpZihiOHx8KCFjYi5uYW1lc3BhY2UmJiFlLm5hbWVzcGFjZSl8fGNiLm5hbWVzcGFjZV9yZSYmY2IubmFtZXNwYWNlX3JlLnRlc3QoZS5uYW1lc3BhY2UpKXtjYi5kYXRhPWUuZGF0YTtjYi5oYW5kbGVPYmo9ZTtjZT0oKGJHLmV2ZW50LnNwZWNpYWxbZS5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fGUuaGFuZGxlcikuYXBwbHkoYjUuZWxlbSxiMSk7aWYoY2UhPT1hQil7Y2IucmVzdWx0PWNlO2lmKGNlPT09ZmFsc2Upe2NiLnByZXZlbnREZWZhdWx0KCk7Y2Iuc3RvcFByb3BhZ2F0aW9uKCl9fX19fWlmKGIzLnBvc3REaXNwYXRjaCl7YjMucG9zdERpc3BhdGNoLmNhbGwodGhpcyxjYil9cmV0dXJuIGNiLnJlc3VsdH0scHJvcHM6ImF0dHJDaGFuZ2UgYXR0ck5hbWUgcmVsYXRlZE5vZGUgc3JjRWxlbWVudCBhbHRLZXkgYnViYmxlcyBjYW5jZWxhYmxlIGN0cmxLZXkgY3VycmVudFRhcmdldCBldmVudFBoYXNlIG1ldGFLZXkgcmVsYXRlZFRhcmdldCBzaGlmdEtleSB0YXJnZXQgdGltZVN0YW1wIHZpZXcgd2hpY2giLnNwbGl0KCIgIiksZml4SG9va3M6e30sa2V5SG9va3M6e3Byb3BzOiJjaGFyIGNoYXJDb2RlIGtleSBrZXlDb2RlIi5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihiWixlKXtpZihiWi53aGljaD09bnVsbCl7Yloud2hpY2g9ZS5jaGFyQ29kZSE9bnVsbD9lLmNoYXJDb2RlOmUua2V5Q29kZX1yZXR1cm4gYlp9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihiMSxiMCl7dmFyIGIyLGIzLGUsYlo9YjAuYnV0dG9uLGI0PWIwLmZyb21FbGVtZW50O2lmKGIxLnBhZ2VYPT1udWxsJiZiMC5jbGllbnRYIT1udWxsKXtiMj1iMS50YXJnZXQub3duZXJEb2N1bWVudHx8bztiMz1iMi5kb2N1bWVudEVsZW1lbnQ7ZT1iMi5ib2R5O2IxLnBhZ2VYPWIwLmNsaWVudFgrKGIzJiZiMy5zY3JvbGxMZWZ0fHxlJiZlLnNjcm9sbExlZnR8fDApLShiMyYmYjMuY2xpZW50TGVmdHx8ZSYmZS5jbGllbnRMZWZ0fHwwKTtiMS5wYWdlWT1iMC5jbGllbnRZKyhiMyYmYjMuc2Nyb2xsVG9wfHxlJiZlLnNjcm9sbFRvcHx8MCktKGIzJiZiMy5jbGllbnRUb3B8fGUmJmUuY2xpZW50VG9wfHwwKX1pZighYjEucmVsYXRlZFRhcmdldCYmYjQpe2IxLnJlbGF0ZWRUYXJnZXQ9YjQ9PT1iMS50YXJnZXQ/YjAudG9FbGVtZW50OmI0fWlmKCFiMS53aGljaCYmYlohPT1hQil7YjEud2hpY2g9KGJaJjE/MTooYlomMj8zOihiWiY0PzI6MCkpKX1yZXR1cm4gYjF9fSxmaXg6ZnVuY3Rpb24oYjApe2lmKGIwW2JHLmV4cGFuZG9dKXtyZXR1cm4gYjB9dmFyIGJaLGIzLGU9YjAsYjE9YkcuZXZlbnQuZml4SG9va3NbYjAudHlwZV18fHt9LGIyPWIxLnByb3BzP3RoaXMucHJvcHMuY29uY2F0KGIxLnByb3BzKTp0aGlzLnByb3BzO2IwPWJHLkV2ZW50KGUpO2ZvcihiWj1iMi5sZW5ndGg7Ylo7KXtiMz1iMlstLWJaXTtiMFtiM109ZVtiM119aWYoIWIwLnRhcmdldCl7YjAudGFyZ2V0PWUuc3JjRWxlbWVudHx8b31pZihiMC50YXJnZXQubm9kZVR5cGU9PT0zKXtiMC50YXJnZXQ9YjAudGFyZ2V0LnBhcmVudE5vZGV9YjAubWV0YUtleT0hIWIwLm1ldGFLZXk7cmV0dXJuIGIxLmZpbHRlcj9iMS5maWx0ZXIoYjAsZSk6YjB9LHNwZWNpYWw6e3JlYWR5OntzZXR1cDpiRy5iaW5kUmVhZHl9LGxvYWQ6e25vQnViYmxlOnRydWV9LGZvY3VzOntkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOntkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0In0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihiMCxiWixlKXtpZihiRy5pc1dpbmRvdyh0aGlzKSl7dGhpcy5vbmJlZm9yZXVubG9hZD1lfX0sdGVhcmRvd246ZnVuY3Rpb24oYlosZSl7aWYodGhpcy5vbmJlZm9yZXVubG9hZD09PWUpe3RoaXMub25iZWZvcmV1bmxvYWQ9bnVsbH19fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYjAsYjIsYjEsYlope3ZhciBiMz1iRy5leHRlbmQobmV3IGJHLkV2ZW50KCksYjEse3R5cGU6YjAsaXNTaW11bGF0ZWQ6dHJ1ZSxvcmlnaW5hbEV2ZW50Ont9fSk7aWYoYlope2JHLmV2ZW50LnRyaWdnZXIoYjMsbnVsbCxiMil9ZWxzZXtiRy5ldmVudC5kaXNwYXRjaC5jYWxsKGIyLGIzKX1pZihiMy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7YjEucHJldmVudERlZmF1bHQoKX19fTtiRy5ldmVudC5oYW5kbGU9YkcuZXZlbnQuZGlzcGF0Y2g7YkcucmVtb3ZlRXZlbnQ9by5yZW1vdmVFdmVudExpc3RlbmVyP2Z1bmN0aW9uKGJaLGUsYjApe2lmKGJaLnJlbW92ZUV2ZW50TGlzdGVuZXIpe2JaLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxiMCxmYWxzZSl9fTpmdW5jdGlvbihiMCxiWixiMSl7dmFyIGU9Im9uIitiWjtpZihiMC5kZXRhY2hFdmVudCl7aWYodHlwZW9mIGIwW2VdPT09InVuZGVmaW5lZCIpe2IwW2VdPW51bGx9YjAuZGV0YWNoRXZlbnQoZSxiMSl9fTtiRy5FdmVudD1mdW5jdGlvbihiWixlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBiRy5FdmVudCkpe3JldHVybiBuZXcgYkcuRXZlbnQoYlosZSl9aWYoYlomJmJaLnR5cGUpe3RoaXMub3JpZ2luYWxFdmVudD1iWjt0aGlzLnR5cGU9YloudHlwZTt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD0oYlouZGVmYXVsdFByZXZlbnRlZHx8YloucmV0dXJuVmFsdWU9PT1mYWxzZXx8YlouZ2V0UHJldmVudERlZmF1bHQmJmJaLmdldFByZXZlbnREZWZhdWx0KCkpP1I6WH1lbHNle3RoaXMudHlwZT1iWn1pZihlKXtiRy5leHRlbmQodGhpcyxlKX10aGlzLnRpbWVTdGFtcD1iWiYmYloudGltZVN0YW1wfHxiRy5ub3coKTt0aGlzW2JHLmV4cGFuZG9dPXRydWV9O2Z1bmN0aW9uIFgoKXtyZXR1cm4gZmFsc2V9ZnVuY3Rpb24gUigpe3JldHVybiB0cnVlfWJHLkV2ZW50LnByb3RvdHlwZT17cHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1SO3ZhciBiWj10aGlzLm9yaWdpbmFsRXZlbnQ7aWYoIWJaKXtyZXR1cm59aWYoYloucHJldmVudERlZmF1bHQpe2JaLnByZXZlbnREZWZhdWx0KCl9ZWxzZXtiWi5yZXR1cm5WYWx1ZT1mYWxzZX19LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9Ujt2YXIgYlo9dGhpcy5vcmlnaW5hbEV2ZW50O2lmKCFiWil7cmV0dXJufWlmKGJaLnN0b3BQcm9wYWdhdGlvbil7Ylouc3RvcFByb3BhZ2F0aW9uKCl9YlouY2FuY2VsQnViYmxlPXRydWV9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9Ujt0aGlzLnN0b3BQcm9wYWdhdGlvbigpfSxpc0RlZmF1bHRQcmV2ZW50ZWQ6WCxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpYLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOlh9O2JHLmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSxmdW5jdGlvbihiWixlKXtiRy5ldmVudC5zcGVjaWFsW2JaXT17ZGVsZWdhdGVUeXBlOmUsYmluZFR5cGU6ZSxoYW5kbGU6ZnVuY3Rpb24oYjMpe3ZhciBiMSxiNT10aGlzLGI0PWIzLnJlbGF0ZWRUYXJnZXQsYjI9YjMuaGFuZGxlT2JqLGIwPWIyLnNlbGVjdG9yO2lmKCFiNHx8KGI0IT09YjUmJiFiRy5jb250YWlucyhiNSxiNCkpKXtiMy50eXBlPWIyLm9yaWdUeXBlO2IxPWIyLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpO2IzLnR5cGU9ZX1yZXR1cm4gYjF9fX0pO2lmKCFiRy5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXMpe2JHLmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe2lmKGJHLm5vZGVOYW1lKHRoaXMsImZvcm0iKSl7cmV0dXJuIGZhbHNlfWJHLmV2ZW50LmFkZCh0aGlzLCJjbGljay5fc3VibWl0IGtleXByZXNzLl9zdWJtaXQiLGZ1bmN0aW9uKGIxKXt2YXIgYjA9YjEudGFyZ2V0LGJaPWJHLm5vZGVOYW1lKGIwLCJpbnB1dCIpfHxiRy5ub2RlTmFtZShiMCwiYnV0dG9uIik/YjAuZm9ybTphQjtpZihiWiYmIWJHLl9kYXRhKGJaLCJfc3VibWl0X2F0dGFjaGVkIikpe2JHLmV2ZW50LmFkZChiWiwic3VibWl0Ll9zdWJtaXQiLGZ1bmN0aW9uKGUpe2UuX3N1Ym1pdF9idWJibGU9dHJ1ZX0pO2JHLl9kYXRhKGJaLCJfc3VibWl0X2F0dGFjaGVkIix0cnVlKX19KX0scG9zdERpc3BhdGNoOmZ1bmN0aW9uKGUpe2lmKGUuX3N1Ym1pdF9idWJibGUpe2RlbGV0ZSBlLl9zdWJtaXRfYnViYmxlO2lmKHRoaXMucGFyZW50Tm9kZSYmIWUuaXNUcmlnZ2VyKXtiRy5ldmVudC5zaW11bGF0ZSgic3VibWl0Iix0aGlzLnBhcmVudE5vZGUsZSx0cnVlKX19fSx0ZWFyZG93bjpmdW5jdGlvbigpe2lmKGJHLm5vZGVOYW1lKHRoaXMsImZvcm0iKSl7cmV0dXJuIGZhbHNlfWJHLmV2ZW50LnJlbW92ZSh0aGlzLCIuX3N1Ym1pdCIpfX19aWYoIWJHLnN1cHBvcnQuY2hhbmdlQnViYmxlcyl7YkcuZXZlbnQuc3BlY2lhbC5jaGFuZ2U9e3NldHVwOmZ1bmN0aW9uKCl7aWYoYkUudGVzdCh0aGlzLm5vZGVOYW1lKSl7aWYodGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlvIil7YkcuZXZlbnQuYWRkKHRoaXMsInByb3BlcnR5Y2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGUpe2lmKGUub3JpZ2luYWxFdmVudC5wcm9wZXJ0eU5hbWU9PT0iY2hlY2tlZCIpe3RoaXMuX2p1c3RfY2hhbmdlZD10cnVlfX0pO2JHLmV2ZW50LmFkZCh0aGlzLCJjbGljay5fY2hhbmdlIixmdW5jdGlvbihlKXtpZih0aGlzLl9qdXN0X2NoYW5nZWQmJiFlLmlzVHJpZ2dlcil7dGhpcy5fanVzdF9jaGFuZ2VkPWZhbHNlfWJHLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsZSx0cnVlKX0pfXJldHVybiBmYWxzZX1iRy5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oYjApe3ZhciBiWj1iMC50YXJnZXQ7aWYoYkUudGVzdChiWi5ub2RlTmFtZSkmJiFiRy5fZGF0YShiWiwiX2NoYW5nZV9hdHRhY2hlZCIpKXtiRy5ldmVudC5hZGQoYlosImNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihlKXtpZih0aGlzLnBhcmVudE5vZGUmJiFlLmlzU2ltdWxhdGVkJiYhZS5pc1RyaWdnZXIpe2JHLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMucGFyZW50Tm9kZSxlLHRydWUpfX0pO2JHLl9kYXRhKGJaLCJfY2hhbmdlX2F0dGFjaGVkIix0cnVlKX19KX0saGFuZGxlOmZ1bmN0aW9uKGJaKXt2YXIgZT1iWi50YXJnZXQ7aWYodGhpcyE9PWV8fGJaLmlzU2ltdWxhdGVkfHxiWi5pc1RyaWdnZXJ8fChlLnR5cGUhPT0icmFkaW8iJiZlLnR5cGUhPT0iY2hlY2tib3giKSl7cmV0dXJuIGJaLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHRlYXJkb3duOmZ1bmN0aW9uKCl7YkcuZXZlbnQucmVtb3ZlKHRoaXMsIi5fY2hhbmdlIik7cmV0dXJuIGJFLnRlc3QodGhpcy5ub2RlTmFtZSl9fX1pZighYkcuc3VwcG9ydC5mb2N1c2luQnViYmxlcyl7YkcuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oYjEsZSl7dmFyIGJaPTAsYjA9ZnVuY3Rpb24oYjIpe2JHLmV2ZW50LnNpbXVsYXRlKGUsYjIudGFyZ2V0LGJHLmV2ZW50LmZpeChiMiksdHJ1ZSl9O2JHLmV2ZW50LnNwZWNpYWxbZV09e3NldHVwOmZ1bmN0aW9uKCl7aWYoYlorKz09PTApe28uYWRkRXZlbnRMaXN0ZW5lcihiMSxiMCx0cnVlKX19LHRlYXJkb3duOmZ1bmN0aW9uKCl7aWYoLS1iWj09PTApe28ucmVtb3ZlRXZlbnRMaXN0ZW5lcihiMSxiMCx0cnVlKX19fX0pfWJHLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYjAsZSxiMyxiMixiWil7dmFyIGI0LGIxO2lmKHR5cGVvZiBiMD09PSJvYmplY3QiKXtpZih0eXBlb2YgZSE9PSJzdHJpbmciKXtiMz1iM3x8ZTtlPWFCfWZvcihiMSBpbiBiMCl7dGhpcy5vbihiMSxlLGIzLGIwW2IxXSxiWil9cmV0dXJuIHRoaXN9aWYoYjM9PW51bGwmJmIyPT1udWxsKXtiMj1lO2IzPWU9YUJ9ZWxzZXtpZihiMj09bnVsbCl7aWYodHlwZW9mIGU9PT0ic3RyaW5nIil7YjI9YjM7YjM9YUJ9ZWxzZXtiMj1iMztiMz1lO2U9YUJ9fX1pZihiMj09PWZhbHNlKXtiMj1YfWVsc2V7aWYoIWIyKXtyZXR1cm4gdGhpc319aWYoYlo9PT0xKXtiND1iMjtiMj1mdW5jdGlvbihiNSl7YkcoKS5vZmYoYjUpO3JldHVybiBiNC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2IyLmd1aWQ9YjQuZ3VpZHx8KGI0Lmd1aWQ9YkcuZ3VpZCsrKX1yZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7YkcuZXZlbnQuYWRkKHRoaXMsYjAsYjIsYjMsZSl9KX0sb25lOmZ1bmN0aW9uKGJaLGUsYjEsYjApe3JldHVybiB0aGlzLm9uKGJaLGUsYjEsYjAsMSl9LG9mZjpmdW5jdGlvbihiMCxlLGIyKXt2YXIgYlosYjE7aWYoYjAmJmIwLnByZXZlbnREZWZhdWx0JiZiMC5oYW5kbGVPYmope2JaPWIwLmhhbmRsZU9iajtiRyhiMC5kZWxlZ2F0ZVRhcmdldCkub2ZmKGJaLm5hbWVzcGFjZT9iWi5vcmlnVHlwZSsiLiIrYloubmFtZXNwYWNlOmJaLm9yaWdUeXBlLGJaLnNlbGVjdG9yLGJaLmhhbmRsZXIpO3JldHVybiB0aGlzfWlmKHR5cGVvZiBiMD09PSJvYmplY3QiKXtmb3IoYjEgaW4gYjApe3RoaXMub2ZmKGIxLGUsYjBbYjFdKX1yZXR1cm4gdGhpc31pZihlPT09ZmFsc2V8fHR5cGVvZiBlPT09ImZ1bmN0aW9uIil7YjI9ZTtlPWFCfWlmKGIyPT09ZmFsc2Upe2IyPVh9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2JHLmV2ZW50LnJlbW92ZSh0aGlzLGIwLGIyLGUpfSl9LGJpbmQ6ZnVuY3Rpb24oZSxiMCxiWil7cmV0dXJuIHRoaXMub24oZSxudWxsLGIwLGJaKX0sdW5iaW5kOmZ1bmN0aW9uKGUsYlope3JldHVybiB0aGlzLm9mZihlLG51bGwsYlopfSxsaXZlOmZ1bmN0aW9uKGUsYjAsYlope2JHKHRoaXMuY29udGV4dCkub24oZSx0aGlzLnNlbGVjdG9yLGIwLGJaKTtyZXR1cm4gdGhpc30sZGllOmZ1bmN0aW9uKGUsYlope2JHKHRoaXMuY29udGV4dCkub2ZmKGUsdGhpcy5zZWxlY3Rvcnx8IioqIixiWik7cmV0dXJuIHRoaXN9LGRlbGVnYXRlOmZ1bmN0aW9uKGUsYlosYjEsYjApe3JldHVybiB0aGlzLm9uKGJaLGUsYjEsYjApfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGUsYlosYjApe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPT0xP3RoaXMub2ZmKGUsIioqIik6dGhpcy5vZmYoYlosZXx8IioqIixiMCl9LHRyaWdnZXI6ZnVuY3Rpb24oZSxiWil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2JHLmV2ZW50LnRyaWdnZXIoZSxiWix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLGJaKXtpZih0aGlzWzBdKXtyZXR1cm4gYkcuZXZlbnQudHJpZ2dlcihlLGJaLHRoaXNbMF0sdHJ1ZSl9fSx0b2dnbGU6ZnVuY3Rpb24oYjEpe3ZhciBiWj1hcmd1bWVudHMsZT1iMS5ndWlkfHxiRy5ndWlkKyssYjA9MCxiMj1mdW5jdGlvbihiMyl7dmFyIGI0PShiRy5fZGF0YSh0aGlzLCJsYXN0VG9nZ2xlIitiMS5ndWlkKXx8MCklYjA7YkcuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYjEuZ3VpZCxiNCsxKTtiMy5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBiWltiNF0uYXBwbHkodGhpcyxhcmd1bWVudHMpfHxmYWxzZX07YjIuZ3VpZD1lO3doaWxlKGIwPGJaLmxlbmd0aCl7YlpbYjArK10uZ3VpZD1lfXJldHVybiB0aGlzLmNsaWNrKGIyKX0saG92ZXI6ZnVuY3Rpb24oZSxiWil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKGJafHxlKX19KTtiRy5lYWNoKCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIpLnNwbGl0KCIgIiksZnVuY3Rpb24oYlosZSl7YkcuZm5bZV09ZnVuY3Rpb24oYjEsYjApe2lmKGIwPT1udWxsKXtiMD1iMTtiMT1udWxsfXJldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbihlLG51bGwsYjEsYjApOnRoaXMudHJpZ2dlcihlKX07aWYoYTMudGVzdChlKSl7YkcuZXZlbnQuZml4SG9va3NbZV09YkcuZXZlbnQua2V5SG9va3N9aWYoYksudGVzdChlKSl7YkcuZXZlbnQuZml4SG9va3NbZV09YkcuZXZlbnQubW91c2VIb29rc319KTsKKy8qIQorICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUKKyAqICBDb3B5cmlnaHQgMjAxMiBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzCisgKiAgUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCisgKiAgaHR0cDovL3NpenpsZWpzLmNvbS8KKyAqLworKGZ1bmN0aW9uKGNPLGNnKXt2YXIgY1QsY28sY2YsYjIsYjgsYjY9Y08uZG9jdW1lbnQsYjk9YjYuZG9jdW1lbnRFbGVtZW50LGN3PSJ1bmRlZmluZWQiLGNhPWZhbHNlLGI3PXRydWUsY2U9MCxjaj1bXS5zbGljZSxjUz1bXS5wdXNoLGNXPSgic2l6Y2FjaGUiK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoIi4iLCIiKSxjej0iW1xceDIwXFx0XFxyXFxuXFxmXSIsY2k9Iig/OlxcXFwufFstXFx3XXxbXlxceDAwLVxceGEwXSkrIixjaD1jaS5yZXBsYWNlKCJ3IiwidyMiKSxjMT0iKFsqXiR8IX5dPz0pIixjTD0iXFxbIitjeisiKigiK2NpKyIpIitjeisiKig/OiIrYzErY3orIiooPzooWydcIl0pKCg/OlxcXFwufFteXFxcXF0pKj8pXFwzfCgiK2NoKyIpfCl8KSIrY3orIipcXF0iLGMyPSI6KCIrY2krIikoPzpcXCgoPzooWydcIl0pKCg/OlxcXFwufFteXFxcXF0pKj8pXFwyfCgoPzpbXixdfFxcXFwsfCg/OiwoPz1bXlxcW10qXFxdKSl8KD86LCg/PVteXFwoXSpcXCkpKSkqKSlcXCl8KSIsY0I9IjoobnRofGVxfGd0fGx0fGZpcnN0fGxhc3R8ZXZlbnxvZGQpKD86XFwoKFxcZCopXFwpfCkoPz1bXi1dfCQpIixjZD1jeisiKihbXFx4MjBcXHRcXHJcXG5cXGY+K35dKSIrY3orIioiLGNjPSIoPz1bXlxceDIwXFx0XFxyXFxuXFxmXSkoPzpcXFxcLnwiK2NMKyJ8IitjMi5yZXBsYWNlKDIsNykrInxbXlxcXFwoKSxdKSsiLGNVPW5ldyBSZWdFeHAoIl4iK2N6KyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK2N6KyIrJCIsImciKSxjRj1uZXcgUmVnRXhwKCJeIitjZCksY3Q9bmV3IFJlZ0V4cChjYysiPyg/PSIrY3orIiosfCQpIiwiZyIpLGNKPW5ldyBSZWdFeHAoIl4oPzooPyEsKSg/Oig/Ol58LCkiK2N6KyIqIitjYysiKSo/fCIrY3orIiooLio/KSkoXFwpfCQpIiksY1o9bmV3IFJlZ0V4cChjYy5zbGljZSgxOSwtNikrIlxceDIwXFx0XFxyXFxuXFxmPit+XSkrfCIrY2QsImciKSxjSz0vXig/OiMoW1x3XC1dKyl8KFx3Kyl8XC4oW1x3XC1dKykpJC8sY1A9L1tceDIwXHRcclxuXGZdKlsrfl0vLGNYPS86bm90XCgkLyxjcD0vaFxkL2ksY009L2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaSxjcz0vXFwoPyFcXCkvZyxjRT17SUQ6bmV3IFJlZ0V4cCgiXiMoIitjaSsiKSIpLENMQVNTOm5ldyBSZWdFeHAoIl5cXC4oIitjaSsiKSIpLE5BTUU6bmV3IFJlZ0V4cCgiXlxcW25hbWU9WydcIl0/KCIrY2krIilbJ1wiXT9cXF0iKSxUQUc6bmV3IFJlZ0V4cCgiXigiK2NpLnJlcGxhY2UoIlstIiwiWy1cXCoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrY0wpLFBTRVVETzpuZXcgUmVnRXhwKCJeIitjMiksQ0hJTEQ6bmV3IFJlZ0V4cCgiXjoob25seXxudGh8bGFzdHxmaXJzdCktY2hpbGQoPzpcXCgiK2N6KyIqKGV2ZW58b2RkfCgoWystXXwpKFxcZCopbnwpIitjeisiKig/OihbKy1dfCkiK2N6KyIqKFxcZCspfCkpIitjeisiKlxcKXwpIiwiaSIpLFBPUzpuZXcgUmVnRXhwKGNCLCJpZyIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitjeisiKls+K35dfCIrY0IsImkiKX0sY1I9e30sY3E9W10sY2w9e30sY3U9W10sY1k9ZnVuY3Rpb24oZSl7ZS5zaXp6bGVGaWx0ZXI9dHJ1ZTtyZXR1cm4gZX0sYjM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGMzKXtyZXR1cm4gYzMubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJmMzLnR5cGU9PT1lfX0sY3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGM0KXt2YXIgYzM9YzQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oYzM9PT0iaW5wdXQifHxjMz09PSJidXR0b24iKSYmYzQudHlwZT09PWV9fSxjSD1mdW5jdGlvbihjMyl7dmFyIGM0PWZhbHNlLGM2PWI2LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RyeXtjND1jMyhjNil9Y2F0Y2goYzUpe31jNj1udWxsO3JldHVybiBjNH0sY249Y0goZnVuY3Rpb24oYzMpe2MzLmlubmVySFRNTD0iPHNlbGVjdD48L3NlbGVjdD4iO3ZhciBlPXR5cGVvZiBjMy5sYXN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJtdWx0aXBsZSIpO3JldHVybiBlIT09ImJvb2xlYW4iJiZlIT09InN0cmluZyJ9KSxiMD1jSChmdW5jdGlvbihjMyl7YzMuaWQ9Y1crMDtjMy5pbm5lckhUTUw9IjxhIG5hbWU9JyIrY1crIic+PC9hPjxkaXYgbmFtZT0nIitjVysiJz48L2Rpdj4iO2I5Lmluc2VydEJlZm9yZShjMyxiOS5maXJzdENoaWxkKTt2YXIgZT1iNi5nZXRFbGVtZW50c0J5TmFtZSYmYjYuZ2V0RWxlbWVudHNCeU5hbWUoY1cpLmxlbmd0aD09PTIrYjYuZ2V0RWxlbWVudHNCeU5hbWUoY1crMCkubGVuZ3RoO2I4PSFiNi5nZXRFbGVtZW50QnlJZChjVyk7YjkucmVtb3ZlQ2hpbGQoYzMpO3JldHVybiBlfSksYjU9Y0goZnVuY3Rpb24oZSl7ZS5hcHBlbmRDaGlsZChiNi5jcmVhdGVDb21tZW50KCIiKSk7cmV0dXJuIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg9PT0wfSksY0Q9Y0goZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iO3JldHVybiBlLmZpcnN0Q2hpbGQmJnR5cGVvZiBlLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlIT09Y3cmJmUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIjIn0pLGNDPWNIKGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSdoaWRkZW4gZSc+PC9kaXY+PGRpdiBjbGFzcz0naGlkZGVuJz48L2Rpdj4iO2lmKCFlLmdldEVsZW1lbnRzQnlDbGFzc05hbWV8fGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aD09PTApe3JldHVybiBmYWxzZX1lLmxhc3RDaGlsZC5jbGFzc05hbWU9ImUiO3JldHVybiBlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGghPT0xfSk7dmFyIGNOPWZ1bmN0aW9uKGM1LGUsYzcsZGEpe2M3PWM3fHxbXTtlPWV8fGI2O3ZhciBjOCxjMyxjOSxjNCxjNj1lLm5vZGVUeXBlO2lmKGM2IT09MSYmYzYhPT05KXtyZXR1cm5bXX1pZighYzV8fHR5cGVvZiBjNSE9PSJzdHJpbmciKXtyZXR1cm4gYzd9Yzk9Y2soZSk7aWYoIWM5JiYhZGEpe2lmKChjOD1jSy5leGVjKGM1KSkpe2lmKChjND1jOFsxXSkpe2lmKGM2PT09OSl7YzM9ZS5nZXRFbGVtZW50QnlJZChjNCk7aWYoYzMmJmMzLnBhcmVudE5vZGUpe2lmKGMzLmlkPT09YzQpe2M3LnB1c2goYzMpO3JldHVybiBjN319ZWxzZXtyZXR1cm4gYzd9fWVsc2V7aWYoZS5vd25lckRvY3VtZW50JiYoYzM9ZS5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGM0KSkmJmNBKGUsYzMpJiZjMy5pZD09PWM0KXtjNy5wdXNoKGMzKTtyZXR1cm4gYzd9fX1lbHNle2lmKGM4WzJdKXtjUy5hcHBseShjNyxjai5jYWxsKGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYzUpLDApKTtyZXR1cm4gYzd9ZWxzZXtpZigoYzQ9YzhbM10pJiZjQyYmZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXtjUy5hcHBseShjNyxjai5jYWxsKGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjNCksMCkpO3JldHVybiBjN319fX19cmV0dXJuIGNWKGM1LGUsYzcsZGEsYzkpfTt2YXIgY0c9Y04uc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxtYXRjaDpjRSxvcmRlcjpbIklEIiwiVEFHIl0sYXR0ckhhbmRsZTp7fSxjcmVhdGVQc2V1ZG86Y1ksZmluZDp7SUQ6Yjg/ZnVuY3Rpb24oYzUsYzQsYzMpe2lmKHR5cGVvZiBjNC5nZXRFbGVtZW50QnlJZCE9PWN3JiYhYzMpe3ZhciBlPWM0LmdldEVsZW1lbnRCeUlkKGM1KTtyZXR1cm4gZSYmZS5wYXJlbnROb2RlP1tlXTpbXX19OmZ1bmN0aW9uKGM1LGM0LGMzKXtpZih0eXBlb2YgYzQuZ2V0RWxlbWVudEJ5SWQhPT1jdyYmIWMzKXt2YXIgZT1jNC5nZXRFbGVtZW50QnlJZChjNSk7cmV0dXJuIGU/ZS5pZD09PWM1fHx0eXBlb2YgZS5nZXRBdHRyaWJ1dGVOb2RlIT09Y3cmJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS52YWx1ZT09PWM1P1tlXTpjZzpbXX19LFRBRzpiNT9mdW5jdGlvbihlLGMzKXtpZih0eXBlb2YgYzMuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPT1jdyl7cmV0dXJuIGMzLmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpfX06ZnVuY3Rpb24oZSxjNil7dmFyIGM1PWM2LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKGU9PT0iKiIpe3ZhciBjNyxjND1bXSxjMz0wO2Zvcig7KGM3PWM1W2MzXSk7YzMrKyl7aWYoYzcubm9kZVR5cGU9PT0xKXtjNC5wdXNoKGM3KX19cmV0dXJuIGM0fXJldHVybiBjNX19LHJlbGF0aXZlOnsiPiI6e2RpcjoicGFyZW50Tm9kZSIsZmlyc3Q6dHJ1ZX0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDp0cnVlfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihlKXtlWzFdPWVbMV0ucmVwbGFjZShjcywiIik7ZVszXT0oZVs0XXx8ZVs1XXx8IiIpLnJlcGxhY2UoY3MsIiIpO2lmKGVbMl09PT0ifj0iKXtlWzNdPSIgIitlWzNdKyIgIn1yZXR1cm4gZS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihlKXtlWzFdPWVbMV0udG9Mb3dlckNhc2UoKTtpZihlWzFdPT09Im50aCIpe2lmKCFlWzJdKXtjTi5lcnJvcihlWzBdKX1lWzNdPSsoZVszXT9lWzRdKyhlWzVdfHwxKToyKihlWzJdPT09ImV2ZW4ifHxlWzJdPT09Im9kZCIpKTtlWzRdPSsoKGVbNl0rZVs3XSl8fGVbMl09PT0ib2RkIil9ZWxzZXtpZihlWzJdKXtjTi5lcnJvcihlWzBdKX19cmV0dXJuIGV9LFBTRVVETzpmdW5jdGlvbihlKXt2YXIgYzMsYzQ9ZVs0XTtpZihjRS5DSElMRC50ZXN0KGVbMF0pKXtyZXR1cm4gbnVsbH1pZihjNCYmKGMzPWNKLmV4ZWMoYzQpKSYmYzMucG9wKCkpe2VbMF09ZVswXS5zbGljZSgwLGMzWzBdLmxlbmd0aC1jNC5sZW5ndGgtMSk7YzQ9YzNbMF0uc2xpY2UoMCwtMSl9ZS5zcGxpY2UoMiwzLGM0fHxlWzNdKTtyZXR1cm4gZX19LGZpbHRlcjp7SUQ6Yjg/ZnVuY3Rpb24oZSl7ZT1lLnJlcGxhY2UoY3MsIiIpO3JldHVybiBmdW5jdGlvbihjMyl7cmV0dXJuIGMzLmdldEF0dHJpYnV0ZSgiaWQiKT09PWV9fTpmdW5jdGlvbihlKXtlPWUucmVwbGFjZShjcywiIik7cmV0dXJuIGZ1bmN0aW9uKGM0KXt2YXIgYzM9dHlwZW9mIGM0LmdldEF0dHJpYnV0ZU5vZGUhPT1jdyYmYzQuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gYzMmJmMzLnZhbHVlPT09ZX19LFRBRzpmdW5jdGlvbihlKXtpZihlPT09IioiKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdHJ1ZX19ZT1lLnJlcGxhY2UoY3MsIiIpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGZ1bmN0aW9uKGMzKXtyZXR1cm4gYzMubm9kZU5hbWUmJmMzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1lfX0sQ0xBU1M6ZnVuY3Rpb24oZSl7dmFyIGMzPWNSW2VdO2lmKCFjMyl7YzM9Y1JbZV09bmV3IFJlZ0V4cCgiKF58IitjeisiKSIrZSsiKCIrY3orInwkKSIpO2NxLnB1c2goZSk7aWYoY3EubGVuZ3RoPmNHLmNhY2hlTGVuZ3RoKXtkZWxldGUgY1JbY3Euc2hpZnQoKV19fXJldHVybiBmdW5jdGlvbihjNCl7cmV0dXJuIGMzLnRlc3QoYzQuY2xhc3NOYW1lfHwodHlwZW9mIGM0LmdldEF0dHJpYnV0ZSE9PWN3JiZjNC5nZXRBdHRyaWJ1dGUoImNsYXNzIikpfHwiIil9fSxBVFRSOmZ1bmN0aW9uKGM0LGMzLGUpe2lmKCFjMyl7cmV0dXJuIGZ1bmN0aW9uKGM1KXtyZXR1cm4gY04uYXR0cihjNSxjNCkhPW51bGx9fXJldHVybiBmdW5jdGlvbihjNil7dmFyIGM1PWNOLmF0dHIoYzYsYzQpLGM3PWM1KyIiO2lmKGM1PT1udWxsKXtyZXR1cm4gYzM9PT0iIT0ifXN3aXRjaChjMyl7Y2FzZSI9IjpyZXR1cm4gYzc9PT1lO2Nhc2UiIT0iOnJldHVybiBjNyE9PWU7Y2FzZSJePSI6cmV0dXJuIGUmJmM3LmluZGV4T2YoZSk9PT0wO2Nhc2UiKj0iOnJldHVybiBlJiZjNy5pbmRleE9mKGUpPi0xO2Nhc2UiJD0iOnJldHVybiBlJiZjNy5zdWJzdHIoYzcubGVuZ3RoLWUubGVuZ3RoKT09PWU7Y2FzZSJ+PSI6cmV0dXJuKCIgIitjNysiICIpLmluZGV4T2YoZSk+LTE7Y2FzZSJ8PSI6cmV0dXJuIGM3PT09ZXx8Yzcuc3Vic3RyKDAsZS5sZW5ndGgrMSk9PT1lKyItIn19fSxDSElMRDpmdW5jdGlvbihjMyxjNSxjNixjNCl7aWYoYzM9PT0ibnRoIil7dmFyIGU9Y2UrKztyZXR1cm4gZnVuY3Rpb24oZGEpe3ZhciBjNyxkYixjOT0wLGM4PWRhO2lmKGM2PT09MSYmYzQ9PT0wKXtyZXR1cm4gdHJ1ZX1jNz1kYS5wYXJlbnROb2RlO2lmKGM3JiYoYzdbY1ddIT09ZXx8IWRhLnNpenNldCkpe2ZvcihjOD1jNy5maXJzdENoaWxkO2M4O2M4PWM4Lm5leHRTaWJsaW5nKXtpZihjOC5ub2RlVHlwZT09PTEpe2M4LnNpenNldD0rK2M5O2lmKGM4PT09ZGEpe2JyZWFrfX19YzdbY1ddPWV9ZGI9ZGEuc2l6c2V0LWM0O2lmKGM2PT09MCl7cmV0dXJuIGRiPT09MH1lbHNle3JldHVybihkYiVjNj09PTAmJmRiL2M2Pj0wKX19fXJldHVybiBmdW5jdGlvbihjOCl7dmFyIGM3PWM4O3N3aXRjaChjMyl7Y2FzZSJvbmx5IjpjYXNlImZpcnN0Ijp3aGlsZSgoYzc9YzcucHJldmlvdXNTaWJsaW5nKSl7aWYoYzcubm9kZVR5cGU9PT0xKXtyZXR1cm4gZmFsc2V9fWlmKGMzPT09ImZpcnN0Iil7cmV0dXJuIHRydWV9Yzc9Yzg7Y2FzZSJsYXN0Ijp3aGlsZSgoYzc9YzcubmV4dFNpYmxpbmcpKXtpZihjNy5ub2RlVHlwZT09PTEpe3JldHVybiBmYWxzZX19cmV0dXJuIHRydWV9fX0sUFNFVURPOmZ1bmN0aW9uKGM2LGM1LGMzLGUpe3ZhciBjND1jRy5wc2V1ZG9zW2M2XXx8Y0cucHNldWRvc1tjNi50b0xvd2VyQ2FzZSgpXTtpZighYzQpe2NOLmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrYzYpfWlmKCFjNC5zaXp6bGVGaWx0ZXIpe3JldHVybiBjNH1yZXR1cm4gYzQoYzUsYzMsZSl9fSxwc2V1ZG9zOntub3Q6Y1koZnVuY3Rpb24oZSxjNCxjMyl7dmFyIGM1PWNiKGUucmVwbGFjZShjVSwiJDEiKSxjNCxjMyk7cmV0dXJuIGZ1bmN0aW9uKGM2KXtyZXR1cm4gIWM1KGM2KX19KSxlbmFibGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPT09ZmFsc2V9LGRpc2FibGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPT09dHJ1ZX0sY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgYzM9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihjMz09PSJpbnB1dCImJiEhZS5jaGVja2VkKXx8KGMzPT09Im9wdGlvbiImJiEhZS5zZWxlY3RlZCl9LHNlbGVjdGVkOmZ1bmN0aW9uKGUpe2lmKGUucGFyZW50Tm9kZSl7ZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXh9cmV0dXJuIGUuc2VsZWN0ZWQ9PT10cnVlfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuICFjRy5wc2V1ZG9zLmVtcHR5KGUpfSxlbXB0eTpmdW5jdGlvbihjMyl7dmFyIGU7YzM9YzMuZmlyc3RDaGlsZDt3aGlsZShjMyl7aWYoYzMubm9kZU5hbWU+IkAifHwoZT1jMy5ub2RlVHlwZSk9PT0zfHxlPT09NCl7cmV0dXJuIGZhbHNlfWMzPWMzLm5leHRTaWJsaW5nfXJldHVybiB0cnVlfSxjb250YWluczpjWShmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oYzMpe3JldHVybihjMy50ZXh0Q29udGVudHx8YzMuaW5uZXJUZXh0fHxiWihjMykpLmluZGV4T2YoZSk+LTF9fSksaGFzOmNZKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihjMyl7cmV0dXJuIGNOKGUsYzMpLmxlbmd0aD4wfX0pLGhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gY3AudGVzdChlLm5vZGVOYW1lKX0sdGV4dDpmdW5jdGlvbihjNCl7dmFyIGMzLGU7cmV0dXJuIGM0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYoYzM9YzQudHlwZSk9PT0idGV4dCImJigoZT1jNC5nZXRBdHRyaWJ1dGUoInR5cGUiKSk9PW51bGx8fGUudG9Mb3dlckNhc2UoKT09PWMzKX0scmFkaW86YjMoInJhZGlvIiksY2hlY2tib3g6YjMoImNoZWNrYm94IiksZmlsZTpiMygiZmlsZSIpLHBhc3N3b3JkOmIzKCJwYXNzd29yZCIpLGltYWdlOmIzKCJpbWFnZSIpLHN1Ym1pdDpjcigic3VibWl0IikscmVzZXQ6Y3IoInJlc2V0IiksYnV0dG9uOmZ1bmN0aW9uKGMzKXt2YXIgZT1jMy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiBlPT09ImlucHV0IiYmYzMudHlwZT09PSJidXR0b24ifHxlPT09ImJ1dHRvbiJ9LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBjTS50ZXN0KGUubm9kZU5hbWUpfSxmb2N1czpmdW5jdGlvbihlKXt2YXIgYzM9ZS5vd25lckRvY3VtZW50O3JldHVybiBlPT09YzMuYWN0aXZlRWxlbWVudCYmKCFjMy5oYXNGb2N1c3x8YzMuaGFzRm9jdXMoKSkmJiEhKGUudHlwZXx8ZS5ocmVmKX0sYWN0aXZlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09ZS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9fSxzZXRGaWx0ZXJzOntmaXJzdDpmdW5jdGlvbihjNCxjMyxlKXtyZXR1cm4gZT9jNC5zbGljZSgxKTpbYzRbMF1dfSxsYXN0OmZ1bmN0aW9uKGM1LGM0LGMzKXt2YXIgZT1jNS5wb3AoKTtyZXR1cm4gYzM/YzU6W2VdfSxldmVuOmZ1bmN0aW9uKGM3LGM2LGM1KXt2YXIgYzQ9W10sYzM9YzU/MTowLGU9YzcubGVuZ3RoO2Zvcig7YzM8ZTtjMz1jMysyKXtjNC5wdXNoKGM3W2MzXSl9cmV0dXJuIGM0fSxvZGQ6ZnVuY3Rpb24oYzcsYzYsYzUpe3ZhciBjND1bXSxjMz1jNT8wOjEsZT1jNy5sZW5ndGg7Zm9yKDtjMzxlO2MzPWMzKzIpe2M0LnB1c2goYzdbYzNdKX1yZXR1cm4gYzR9LGx0OmZ1bmN0aW9uKGM0LGMzLGUpe3JldHVybiBlP2M0LnNsaWNlKCtjMyk6YzQuc2xpY2UoMCwrYzMpfSxndDpmdW5jdGlvbihjNCxjMyxlKXtyZXR1cm4gZT9jNC5zbGljZSgwLCtjMysxKTpjNC5zbGljZSgrYzMrMSl9LGVxOmZ1bmN0aW9uKGM1LGM0LGMzKXt2YXIgZT1jNS5zcGxpY2UoK2M0LDEpO3JldHVybiBjMz9jNTplfX19O2NHLnNldEZpbHRlcnMubnRoPWNHLnNldEZpbHRlcnMuZXE7Y0cuZmlsdGVycz1jRy5wc2V1ZG9zO2lmKCFjRCl7Y0cuYXR0ckhhbmRsZT17aHJlZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoImhyZWYiLDIpfSx0eXBlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgidHlwZSIpfX19aWYoYjApe2NHLm9yZGVyLnB1c2goIk5BTUUiKTtjRy5maW5kLk5BTUU9ZnVuY3Rpb24oZSxjMyl7aWYodHlwZW9mIGMzLmdldEVsZW1lbnRzQnlOYW1lIT09Y3cpe3JldHVybiBjMy5nZXRFbGVtZW50c0J5TmFtZShlKX19fWlmKGNDKXtjRy5vcmRlci5zcGxpY2UoMSwwLCJDTEFTUyIpO2NHLmZpbmQuQ0xBU1M9ZnVuY3Rpb24oYzQsYzMsZSl7aWYodHlwZW9mIGMzLmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT1jdyYmIWUpe3JldHVybiBjMy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGM0KX19fXRyeXtjai5jYWxsKGI5LmNoaWxkTm9kZXMsMClbMF0ubm9kZVR5cGV9Y2F0Y2goYzApe2NqPWZ1bmN0aW9uKGMzKXt2YXIgYzQsZT1bXTtmb3IoOyhjND10aGlzW2MzXSk7YzMrKyl7ZS5wdXNoKGM0KX1yZXR1cm4gZX19dmFyIGNrPWNOLmlzWE1MPWZ1bmN0aW9uKGUpe3ZhciBjMz1lJiYoZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGMzP2MzLm5vZGVOYW1lIT09IkhUTUwiOmZhbHNlfTt2YXIgY0E9Y04uY29udGFpbnM9YjkuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ZnVuY3Rpb24oYzMsZSl7cmV0dXJuICEhKGMzLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpJjE2KX06YjkuY29udGFpbnM/ZnVuY3Rpb24oYzMsZSl7dmFyIGM1PWMzLm5vZGVUeXBlPT09OT9jMy5kb2N1bWVudEVsZW1lbnQ6YzMsYzQ9ZS5wYXJlbnROb2RlO3JldHVybiBjMz09PWM0fHwhIShjNCYmYzQubm9kZVR5cGU9PT0xJiZjNS5jb250YWlucyYmYzUuY29udGFpbnMoYzQpKX06ZnVuY3Rpb24oYzMsZSl7d2hpbGUoKGU9ZS5wYXJlbnROb2RlKSl7aWYoZT09PWMzKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfTt2YXIgYlo9Y04uZ2V0VGV4dD1mdW5jdGlvbihjNil7dmFyIGM1LGMzPSIiLGM0PTAsZT1jNi5ub2RlVHlwZTtpZihlKXtpZihlPT09MXx8ZT09PTl8fGU9PT0xMSl7aWYodHlwZW9mIGM2LnRleHRDb250ZW50PT09InN0cmluZyIpe3JldHVybiBjNi50ZXh0Q29udGVudH1lbHNle2ZvcihjNj1jNi5maXJzdENoaWxkO2M2O2M2PWM2Lm5leHRTaWJsaW5nKXtjMys9YlooYzYpfX19ZWxzZXtpZihlPT09M3x8ZT09PTQpe3JldHVybiBjNi5ub2RlVmFsdWV9fX1lbHNle2Zvcig7KGM1PWM2W2M0XSk7YzQrKyl7YzMrPWJaKGM1KX19cmV0dXJuIGMzfTtjTi5hdHRyPWZ1bmN0aW9uKGM1LGM0KXt2YXIgZSxjMz1jayhjNSk7aWYoIWMzKXtjND1jNC50b0xvd2VyQ2FzZSgpfWlmKGNHLmF0dHJIYW5kbGVbYzRdKXtyZXR1cm4gY0cuYXR0ckhhbmRsZVtjNF0oYzUpfWlmKGNufHxjMyl7cmV0dXJuIGM1LmdldEF0dHJpYnV0ZShjNCl9ZT1jNS5nZXRBdHRyaWJ1dGVOb2RlKGM0KTtyZXR1cm4gZT90eXBlb2YgYzVbYzRdPT09ImJvb2xlYW4iP2M1W2M0XT9jNDpudWxsOmUuc3BlY2lmaWVkP2UudmFsdWU6bnVsbDpudWxsfTtjTi5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9O1swLDBdLnNvcnQoZnVuY3Rpb24oKXtyZXR1cm4oYjc9MCl9KTtpZihiOS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbil7Y2Y9ZnVuY3Rpb24oYzMsZSl7aWYoYzM9PT1lKXtjYT10cnVlO3JldHVybiAwfXJldHVybighYzMuY29tcGFyZURvY3VtZW50UG9zaXRpb258fCFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2MzLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uOmMzLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpJjQpPy0xOjF9fWVsc2V7Y2Y9ZnVuY3Rpb24oZGEsYzkpe2lmKGRhPT09Yzkpe2NhPXRydWU7cmV0dXJuIDB9ZWxzZXtpZihkYS5zb3VyY2VJbmRleCYmYzkuc291cmNlSW5kZXgpe3JldHVybiBkYS5zb3VyY2VJbmRleC1jOS5zb3VyY2VJbmRleH19dmFyIGM3LGMzLGM0PVtdLGU9W10sYzY9ZGEucGFyZW50Tm9kZSxjOD1jOS5wYXJlbnROb2RlLGRiPWM2O2lmKGM2PT09Yzgpe3JldHVybiBiMihkYSxjOSl9ZWxzZXtpZighYzYpe3JldHVybiAtMX1lbHNle2lmKCFjOCl7cmV0dXJuIDF9fX13aGlsZShkYil7YzQudW5zaGlmdChkYik7ZGI9ZGIucGFyZW50Tm9kZX1kYj1jODt3aGlsZShkYil7ZS51bnNoaWZ0KGRiKTtkYj1kYi5wYXJlbnROb2RlfWM3PWM0Lmxlbmd0aDtjMz1lLmxlbmd0aDtmb3IodmFyIGM1PTA7YzU8YzcmJmM1PGMzO2M1Kyspe2lmKGM0W2M1XSE9PWVbYzVdKXtyZXR1cm4gYjIoYzRbYzVdLGVbYzVdKX19cmV0dXJuIGM1PT09Yzc/YjIoZGEsZVtjNV0sLTEpOmIyKGM0W2M1XSxjOSwxKX07YjI9ZnVuY3Rpb24oYzMsZSxjNCl7aWYoYzM9PT1lKXtyZXR1cm4gYzR9dmFyIGM1PWMzLm5leHRTaWJsaW5nO3doaWxlKGM1KXtpZihjNT09PWUpe3JldHVybiAtMX1jNT1jNS5uZXh0U2libGluZ31yZXR1cm4gMX19Y04udW5pcXVlU29ydD1mdW5jdGlvbihjMyl7dmFyIGM0LGU9MTtpZihjZil7Y2E9Yjc7YzMuc29ydChjZik7aWYoY2Epe2Zvcig7KGM0PWMzW2VdKTtlKyspe2lmKGM0PT09YzNbZS0xXSl7YzMuc3BsaWNlKGUtLSwxKX19fX1yZXR1cm4gYzN9O2Z1bmN0aW9uIGNtKGMzLGM3LGM2LGM0KXt2YXIgYzU9MCxlPWM3Lmxlbmd0aDtmb3IoO2M1PGU7YzUrKyl7Y04oYzMsYzdbYzVdLGM2LGM0KX19ZnVuY3Rpb24gY0koZSxjNCxjOCxjOSxjMyxjNyl7dmFyIGM1LGM2PWNHLnNldEZpbHRlcnNbYzQudG9Mb3dlckNhc2UoKV07aWYoIWM2KXtjTi5lcnJvcihjNCl9aWYoZXx8IShjNT1jMykpe2NtKGV8fCIqIixjOSwoYzU9W10pLGMzKX1yZXR1cm4gYzUubGVuZ3RoPjA/YzYoYzUsYzgsYzcpOltdfWZ1bmN0aW9uIGNRKGRjLGUsZGEsYzQsZGcpe3ZhciBjNyxjMyxjNixkaSxjOSxkaCxkYixkZixkZD0wLGRlPWRnLmxlbmd0aCxjNT1jRS5QT1MsYzg9bmV3IFJlZ0V4cCgiXiIrYzUuc291cmNlKyIoPyEiK2N6KyIpIiwiaSIpLGRqPWZ1bmN0aW9uKCl7dmFyIGRsPTEsZGs9YXJndW1lbnRzLmxlbmd0aC0yO2Zvcig7ZGw8ZGs7ZGwrKyl7aWYoYXJndW1lbnRzW2RsXT09PWNnKXtjN1tkbF09Y2d9fX07Zm9yKDtkZDxkZTtkZCsrKXtjNS5leGVjKCIiKTtkYz1kZ1tkZF07ZGk9W107YzY9MDtjOT1jNDt3aGlsZSgoYzc9YzUuZXhlYyhkYykpKXtkZj1jNS5sYXN0SW5kZXg9YzcuaW5kZXgrYzdbMF0ubGVuZ3RoO2lmKGRmPmM2KXtkYj1kYy5zbGljZShjNixjNy5pbmRleCk7YzY9ZGY7ZGg9W2VdO2lmKGNGLnRlc3QoZGIpKXtpZihjOSl7ZGg9Yzl9Yzk9YzR9aWYoKGMzPWNYLnRlc3QoZGIpKSl7ZGI9ZGIuc2xpY2UoMCwtNSkucmVwbGFjZShjRiwiJCYqIil9aWYoYzcubGVuZ3RoPjEpe2M3WzBdLnJlcGxhY2UoYzgsZGopfWM5PWNJKGRiLGM3WzFdLGM3WzJdLGRoLGM5LGMzKX19aWYoYzkpe2RpPWRpLmNvbmNhdChjOSk7aWYoKGRiPWRjLnNsaWNlKGM2KSkmJmRiIT09IikiKXtpZihjRi50ZXN0KGRiKSl7Y20oZGIsZGksZGEsYzQpfWVsc2V7Y04oZGIsZSxkYSxjND9jNC5jb25jYXQoYzkpOmM5KX19ZWxzZXtjUy5hcHBseShkYSxkaSl9fWVsc2V7Y04oZGMsZSxkYSxjNCl9fXJldHVybiBkZT09PTE/ZGE6Y04udW5pcXVlU29ydChkYSl9ZnVuY3Rpb24gYjEoYzgsYzQsZGIpe3ZhciBkZCxkYyxkZSxjNj1bXSxjOT0wLGRhPWNKLmV4ZWMoYzgpLGMzPSFkYS5wb3AoKSYmIWRhLnBvcCgpLGRmPWMzJiZjOC5tYXRjaChjdCl8fFsiIl0sZT1jRy5wcmVGaWx0ZXIsYzU9Y0cuZmlsdGVyLGM3PSFkYiYmYzQhPT1iNjtmb3IoOyhkYz1kZltjOV0pIT1udWxsJiZjMztjOSsrKXtjNi5wdXNoKGRkPVtdKTtpZihjNyl7ZGM9IiAiK2RjfXdoaWxlKGRjKXtjMz1mYWxzZTtpZigoZGE9Y0YuZXhlYyhkYykpKXtkYz1kYy5zbGljZShkYVswXS5sZW5ndGgpO2MzPWRkLnB1c2goe3BhcnQ6ZGEucG9wKCkucmVwbGFjZShjVSwiICIpLGNhcHR1cmVzOmRhfSl9Zm9yKGRlIGluIGM1KXtpZigoZGE9Y0VbZGVdLmV4ZWMoZGMpKSYmKCFlW2RlXXx8KGRhPWVbZGVdKGRhLGM0LGRiKSkpKXtkYz1kYy5zbGljZShkYS5zaGlmdCgpLmxlbmd0aCk7YzM9ZGQucHVzaCh7cGFydDpkZSxjYXB0dXJlczpkYX0pfX1pZighYzMpe2JyZWFrfX19aWYoIWMzKXtjTi5lcnJvcihjOCl9cmV0dXJuIGM2fWZ1bmN0aW9uIGN4KGM2LGM1LGM0KXt2YXIgZT1jNS5kaXIsYzM9Y2UrKztpZighYzYpe2M2PWZ1bmN0aW9uKGM3KXtyZXR1cm4gYzc9PT1jNH19cmV0dXJuIGM1LmZpcnN0P2Z1bmN0aW9uKGM4LGM3KXt3aGlsZSgoYzg9YzhbZV0pKXtpZihjOC5ub2RlVHlwZT09PTEpe3JldHVybiBjNihjOCxjNykmJmM4fX19OmZ1bmN0aW9uKGM5LGM4KXt2YXIgYzcsZGE9YzMrIi4iK2NvLGRiPWRhKyIuIitjVDt3aGlsZSgoYzk9YzlbZV0pKXtpZihjOS5ub2RlVHlwZT09PTEpe2lmKChjNz1jOVtjV10pPT09ZGIpe3JldHVybiBjOS5zaXpzZXR9ZWxzZXtpZih0eXBlb2YgYzc9PT0ic3RyaW5nIiYmYzcuaW5kZXhPZihkYSk9PT0wKXtpZihjOS5zaXpzZXQpe3JldHVybiBjOX19ZWxzZXtjOVtjV109ZGI7aWYoYzYoYzksYzgpKXtjOS5zaXpzZXQ9dHJ1ZTtyZXR1cm4gYzl9Yzkuc2l6c2V0PWZhbHNlfX19fX19ZnVuY3Rpb24gY3YoZSxjMyl7cmV0dXJuIGU/ZnVuY3Rpb24oYzYsYzUpe3ZhciBjND1jMyhjNixjNSk7cmV0dXJuIGM0JiZlKGM0PT09dHJ1ZT9jNjpjNCxjNSl9OmMzfWZ1bmN0aW9uIGN5KGM3LGM1LGUpe3ZhciBjNCxjNixjMz0wO2Zvcig7KGM0PWM3W2MzXSk7YzMrKyl7aWYoY0cucmVsYXRpdmVbYzQucGFydF0pe2M2PWN4KGM2LGNHLnJlbGF0aXZlW2M0LnBhcnRdLGM1KX1lbHNle2M0LmNhcHR1cmVzLnB1c2goYzUsZSk7YzY9Y3YoYzYsY0cuZmlsdGVyW2M0LnBhcnRdLmFwcGx5KG51bGwsYzQuY2FwdHVyZXMpKX19cmV0dXJuIGM2fWZ1bmN0aW9uIGI0KGUpe3JldHVybiBmdW5jdGlvbihjNSxjNCl7dmFyIGM2LGMzPTA7Zm9yKDsoYzY9ZVtjM10pO2MzKyspe2lmKGM2KGM1LGM0KSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX19dmFyIGNiPWNOLmNvbXBpbGU9ZnVuY3Rpb24oZSxjNSxjMyl7dmFyIGM4LGM3LGM0LGM2PWNsW2VdO2lmKGM2JiZjNi5jb250ZXh0PT09YzUpe3JldHVybiBjNn1jNz1iMShlLGM1LGMzKTtmb3IoYzQ9MDsoYzg9YzdbYzRdKTtjNCsrKXtjN1tjNF09Y3koYzgsYzUsYzMpfWM2PWNsW2VdPWI0KGM3KTtjNi5jb250ZXh0PWM1O2M2LnJ1bnM9YzYuZGlycnVucz0wO2N1LnB1c2goZSk7aWYoY3UubGVuZ3RoPmNHLmNhY2hlTGVuZ3RoKXtkZWxldGUgY2xbY3Uuc2hpZnQoKV19cmV0dXJuIGM2fTtjTi5tYXRjaGVzPWZ1bmN0aW9uKGMzLGUpe3JldHVybiBjTihjMyxudWxsLG51bGwsZSl9O2NOLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlLGMzKXtyZXR1cm4gY04oYzMsbnVsbCxudWxsLFtlXSkubGVuZ3RoPjB9O3ZhciBjVj1mdW5jdGlvbihjNixjMyxjOCxkYyxkYil7YzY9YzYucmVwbGFjZShjVSwiJDEiKTt2YXIgZSxkZCxjOSxkZSxjNCxjNSxkZyxkaCxjNyxkYT1jNi5tYXRjaChjdCksZGY9YzYubWF0Y2goY1opLGRpPWMzLm5vZGVUeXBlO2lmKGNFLlBPUy50ZXN0KGM2KSl7cmV0dXJuIGNRKGM2LGMzLGM4LGRjLGRhKX1pZihkYyl7ZT1jai5jYWxsKGRjLDApfWVsc2V7aWYoZGEmJmRhLmxlbmd0aD09PTEpe2lmKGRmLmxlbmd0aD4xJiZkaT09PTkmJiFkYiYmKGRhPWNFLklELmV4ZWMoZGZbMF0pKSl7YzM9Y0cuZmluZC5JRChkYVsxXSxjMyxkYilbMF07aWYoIWMzKXtyZXR1cm4gYzh9YzY9YzYuc2xpY2UoZGYuc2hpZnQoKS5sZW5ndGgpfWRoPSgoZGE9Y1AuZXhlYyhkZlswXSkpJiYhZGEuaW5kZXgmJmMzLnBhcmVudE5vZGUpfHxjMztjNz1kZi5wb3AoKTtjNT1jNy5zcGxpdCgiOm5vdCIpWzBdO2ZvcihjOT0wLGRlPWNHLm9yZGVyLmxlbmd0aDtjOTxkZTtjOSsrKXtkZz1jRy5vcmRlcltjOV07aWYoKGRhPWNFW2RnXS5leGVjKGM1KSkpe2U9Y0cuZmluZFtkZ10oKGRhWzFdfHwiIikucmVwbGFjZShjcywiIiksZGgsZGIpO2lmKGU9PW51bGwpe2NvbnRpbnVlfWlmKGM1PT09Yzcpe2M2PWM2LnNsaWNlKDAsYzYubGVuZ3RoLWM3Lmxlbmd0aCkrYzUucmVwbGFjZShjRVtkZ10sIiIpO2lmKCFjNil7Y1MuYXBwbHkoYzgsY2ouY2FsbChlLDApKX19YnJlYWt9fX19aWYoYzYpe2RkPWNiKGM2LGMzLGRiKTtjbz1kZC5kaXJydW5zKys7aWYoZT09bnVsbCl7ZT1jRy5maW5kLlRBRygiKiIsKGNQLnRlc3QoYzYpJiZjMy5wYXJlbnROb2RlKXx8YzMpfWZvcihjOT0wOyhjND1lW2M5XSk7YzkrKyl7Y1Q9ZGQucnVucysrO2lmKGRkKGM0LGMzKSl7YzgucHVzaChjNCl9fX1yZXR1cm4gYzh9O2lmKGI2LnF1ZXJ5U2VsZWN0b3JBbGwpeyhmdW5jdGlvbigpe3ZhciBjNyxjOD1jVixjNj0vJ3xcXC9nLGM0PS9cPVtceDIwXHRcclxuXGZdKihbXiciXF1dKilbXHgyMFx0XHJcblxmXSpcXS9nLGMzPVtdLGU9WyI6YWN0aXZlIl0sYzU9YjkubWF0Y2hlc1NlbGVjdG9yfHxiOS5tb3pNYXRjaGVzU2VsZWN0b3J8fGI5LndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8Yjkub01hdGNoZXNTZWxlY3Rvcnx8YjkubXNNYXRjaGVzU2VsZWN0b3I7Y0goZnVuY3Rpb24oYzkpe2M5LmlubmVySFRNTD0iPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkPjwvb3B0aW9uPjwvc2VsZWN0PiI7aWYoIWM5LnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGgpe2MzLnB1c2goIlxcWyIrY3orIiooPzpjaGVja2VkfGRpc2FibGVkfGlzbWFwfG11bHRpcGxlfHJlYWRvbmx5fHNlbGVjdGVkfHZhbHVlKSIpfWlmKCFjOS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aCl7YzMucHVzaCgiOmNoZWNrZWQiKX19KTtjSChmdW5jdGlvbihjOSl7YzkuaW5uZXJIVE1MPSI8cCB0ZXN0PScnPjwvcD4iO2lmKGM5LnF1ZXJ5U2VsZWN0b3JBbGwoIlt0ZXN0Xj0nJ10iKS5sZW5ndGgpe2MzLnB1c2goIlsqXiRdPSIrY3orIiooPzpcIlwifCcnKSIpfWM5LmlubmVySFRNTD0iPGlucHV0IHR5cGU9J2hpZGRlbic+IjtpZighYzkucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGgpe2MzLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIil9fSk7YzM9YzMubGVuZ3RoJiZuZXcgUmVnRXhwKGMzLmpvaW4oInwiKSk7Y1Y9ZnVuY3Rpb24oZGUsZGEsZGYsZGgsZGcpe2lmKCFkaCYmIWRnJiYoIWMzfHwhYzMudGVzdChkZSkpKXtpZihkYS5ub2RlVHlwZT09PTkpe3RyeXtjUy5hcHBseShkZixjai5jYWxsKGRhLnF1ZXJ5U2VsZWN0b3JBbGwoZGUpLDApKTtyZXR1cm4gZGZ9Y2F0Y2goZGQpe319ZWxzZXtpZihkYS5ub2RlVHlwZT09PTEmJmRhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT0ib2JqZWN0Iil7dmFyIGRjPWRhLmdldEF0dHJpYnV0ZSgiaWQiKSxjOT1kY3x8Y1csZGI9Y1AudGVzdChkZSkmJmRhLnBhcmVudE5vZGV8fGRhO2lmKGRjKXtjOT1jOS5yZXBsYWNlKGM2LCJcXCQmIil9ZWxzZXtkYS5zZXRBdHRyaWJ1dGUoImlkIixjOSl9dHJ5e2NTLmFwcGx5KGRmLGNqLmNhbGwoZGIucXVlcnlTZWxlY3RvckFsbChkZS5yZXBsYWNlKGN0LCJbaWQ9JyIrYzkrIiddICQmIikpLDApKTtyZXR1cm4gZGZ9Y2F0Y2goZGQpe31maW5hbGx5e2lmKCFkYyl7ZGEucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19fX1yZXR1cm4gYzgoZGUsZGEsZGYsZGgsZGcpfTtpZihjNSl7Y0goZnVuY3Rpb24oZGEpe2M3PWM1LmNhbGwoZGEsImRpdiIpO3RyeXtjNS5jYWxsKGRhLCJbdGVzdCE9JyddOnNpenpsZSIpO2UucHVzaChjRy5tYXRjaC5QU0VVRE8pfWNhdGNoKGM5KXt9fSk7ZT1uZXcgUmVnRXhwKGUuam9pbigifCIpKTtjTi5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oZGEsZGMpe2RjPWRjLnJlcGxhY2UoYzQsIj0nJDEnXSIpO2lmKCFjayhkYSkmJiFlLnRlc3QoZGMpJiYoIWMzfHwhYzMudGVzdChkYykpKXt0cnl7dmFyIGM5PWM1LmNhbGwoZGEsZGMpO2lmKGM5fHxjN3x8ZGEuZG9jdW1lbnQmJmRhLmRvY3VtZW50Lm5vZGVUeXBlIT09MTEpe3JldHVybiBjOX19Y2F0Y2goZGIpe319cmV0dXJuIGNOKGRjLG51bGwsbnVsbCxbZGFdKS5sZW5ndGg+MH19fSkoKX1jTi5hdHRyPWJHLmF0dHI7YkcuZmluZD1jTjtiRy5leHByPWNOLnNlbGVjdG9ycztiRy5leHByWyI6Il09YkcuZXhwci5wc2V1ZG9zO2JHLnVuaXF1ZT1jTi51bmlxdWVTb3J0O2JHLnRleHQ9Y04uZ2V0VGV4dDtiRy5pc1hNTERvYz1jTi5pc1hNTDtiRy5jb250YWlucz1jTi5jb250YWluc30pKGEyKTt2YXIgYWc9L1VudGlsJC8sYnE9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sYWw9L14uW146I1xbXC4sXSokLyx6PWJHLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LGJ1PXtjaGlsZHJlbjp0cnVlLGNvbnRlbnRzOnRydWUsbmV4dDp0cnVlLHByZXY6dHJ1ZX07YkcuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGUpe3ZhciBiMixiWixiNCxiNSxiMyxiMSxiMD10aGlzO2lmKHR5cGVvZiBlIT09InN0cmluZyIpe3JldHVybiBiRyhlKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYjI9MCxiWj1iMC5sZW5ndGg7YjI8Ylo7YjIrKyl7aWYoYkcuY29udGFpbnMoYjBbYjJdLHRoaXMpKXtyZXR1cm4gdHJ1ZX19fSl9YjE9dGhpcy5wdXNoU3RhY2soIiIsImZpbmQiLGUpO2ZvcihiMj0wLGJaPXRoaXMubGVuZ3RoO2IyPGJaO2IyKyspe2I0PWIxLmxlbmd0aDtiRy5maW5kKGUsdGhpc1tiMl0sYjEpO2lmKGIyPjApe2ZvcihiNT1iNDtiNTxiMS5sZW5ndGg7YjUrKyl7Zm9yKGIzPTA7YjM8YjQ7YjMrKyl7aWYoYjFbYjNdPT09YjFbYjVdKXtiMS5zcGxpY2UoYjUtLSwxKTticmVha319fX19cmV0dXJuIGIxfSxoYXM6ZnVuY3Rpb24oYjEpe3ZhciBiMCxiWj1iRyhiMSx0aGlzKSxlPWJaLmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYjA9MDtiMDxlO2IwKyspe2lmKGJHLmNvbnRhaW5zKHRoaXMsYlpbYjBdKSl7cmV0dXJuIHRydWV9fX0pfSxub3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGFNKHRoaXMsZSxmYWxzZSksIm5vdCIsZSl9LGZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYU0odGhpcyxlLHRydWUpLCJmaWx0ZXIiLGUpfSxpczpmdW5jdGlvbihlKXtyZXR1cm4gISFlJiYodHlwZW9mIGU9PT0ic3RyaW5nIj96LnRlc3QoZSk/YkcoZSx0aGlzLmNvbnRleHQpLmluZGV4KHRoaXNbMF0pPj0wOmJHLmZpbHRlcihlLHRoaXMpLmxlbmd0aD4wOnRoaXMuZmlsdGVyKGUpLmxlbmd0aD4wKX0sY2xvc2VzdDpmdW5jdGlvbihiMixiMSl7dmFyIGIzLGIwPTAsZT10aGlzLmxlbmd0aCxiWj1bXSxiND16LnRlc3QoYjIpfHx0eXBlb2YgYjIhPT0ic3RyaW5nIj9iRyhiMixiMXx8dGhpcy5jb250ZXh0KTowO2Zvcig7YjA8ZTtiMCsrKXtiMz10aGlzW2IwXTt3aGlsZShiMyYmYjMub3duZXJEb2N1bWVudCYmYjMhPT1iMSYmYjMubm9kZVR5cGUhPT0xMSl7aWYoYjQ/YjQuaW5kZXgoYjMpPi0xOmJHLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGIzLGIyKSl7YloucHVzaChiMyk7YnJlYWt9YjM9YjMucGFyZW50Tm9kZX19Ylo9YloubGVuZ3RoPjE/YkcudW5pcXVlKGJaKTpiWjtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYlosImNsb3Nlc3QiLGIyKX0saW5kZXg6ZnVuY3Rpb24oZSl7aWYoIWUpe3JldHVybih0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGUpP3RoaXMucHJldkFsbCgpLmxlbmd0aDotMX1pZih0eXBlb2YgZT09PSJzdHJpbmciKXtyZXR1cm4gYkcuaW5BcnJheSh0aGlzWzBdLGJHKGUpKX1yZXR1cm4gYkcuaW5BcnJheShlLmpxdWVyeT9lWzBdOmUsdGhpcyl9LGFkZDpmdW5jdGlvbihlLGJaKXt2YXIgYjE9dHlwZW9mIGU9PT0ic3RyaW5nIj9iRyhlLGJaKTpiRy5tYWtlQXJyYXkoZSYmZS5ub2RlVHlwZT9bZV06ZSksYjA9YkcubWVyZ2UodGhpcy5nZXQoKSxiMSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGFSKGIxWzBdKXx8YVIoYjBbMF0pP2IwOmJHLnVuaXF1ZShiMCkpfSxhZGRCYWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFkZChlPT1udWxsP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGUpKX19KTtiRy5mbi5hbmRTZWxmPWJHLmZuLmFkZEJhY2s7ZnVuY3Rpb24gYVIoZSl7cmV0dXJuICFlfHwhZS5wYXJlbnROb2RlfHxlLnBhcmVudE5vZGUubm9kZVR5cGU9PT0xMX1mdW5jdGlvbiBhWShiWixlKXtkb3tiWj1iWltlXX13aGlsZShiWiYmYloubm9kZVR5cGUhPT0xKTtyZXR1cm4gYlp9YkcuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGJaKXt2YXIgZT1iWi5wYXJlbnROb2RlO3JldHVybiBlJiZlLm5vZGVUeXBlIT09MTE/ZTpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBiRy5kaXIoZSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oYlosZSxiMCl7cmV0dXJuIGJHLmRpcihiWiwicGFyZW50Tm9kZSIsYjApfSxuZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBhWShlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBhWShlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4gYkcuZGlyKGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIGJHLmRpcihlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGJaLGUsYjApe3JldHVybiBiRy5kaXIoYlosIm5leHRTaWJsaW5nIixiMCl9LHByZXZVbnRpbDpmdW5jdGlvbihiWixlLGIwKXtyZXR1cm4gYkcuZGlyKGJaLCJwcmV2aW91c1NpYmxpbmciLGIwKX0sc2libGluZ3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGJHLnNpYmxpbmcoKGUucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsZSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGUpe3JldHVybiBiRy5zaWJsaW5nKGUuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBiRy5ub2RlTmFtZShlLCJpZnJhbWUiKT9lLmNvbnRlbnREb2N1bWVudHx8ZS5jb250ZW50V2luZG93LmRvY3VtZW50OmJHLm1lcmdlKFtdLGUuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihlLGJaKXtiRy5mbltlXT1mdW5jdGlvbihiMixiMCl7dmFyIGIxPWJHLm1hcCh0aGlzLGJaLGIyKTtpZighYWcudGVzdChlKSl7YjA9YjJ9aWYoYjAmJnR5cGVvZiBiMD09PSJzdHJpbmciKXtiMT1iRy5maWx0ZXIoYjAsYjEpfWIxPXRoaXMubGVuZ3RoPjEmJiFidVtlXT9iRy51bmlxdWUoYjEpOmIxO2lmKHRoaXMubGVuZ3RoPjEmJmJxLnRlc3QoZSkpe2IxPWIxLnJldmVyc2UoKX1yZXR1cm4gdGhpcy5wdXNoU3RhY2soYjEsZSxhNC5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX19KTtiRy5leHRlbmQoe2ZpbHRlcjpmdW5jdGlvbihiMCxlLGJaKXtpZihiWil7YjA9Ijpub3QoIitiMCsiKSJ9cmV0dXJuIGUubGVuZ3RoPT09MT9iRy5maW5kLm1hdGNoZXNTZWxlY3RvcihlWzBdLGIwKT9bZVswXV06W106YkcuZmluZC5tYXRjaGVzKGIwLGUpfSxkaXI6ZnVuY3Rpb24oYjAsYlosYjIpe3ZhciBlPVtdLGIxPWIwW2JaXTt3aGlsZShiMSYmYjEubm9kZVR5cGUhPT05JiYoYjI9PT1hQnx8YjEubm9kZVR5cGUhPT0xfHwhYkcoYjEpLmlzKGIyKSkpe2lmKGIxLm5vZGVUeXBlPT09MSl7ZS5wdXNoKGIxKX1iMT1iMVtiWl19cmV0dXJuIGV9LHNpYmxpbmc6ZnVuY3Rpb24oYjAsYlope3ZhciBlPVtdO2Zvcig7YjA7YjA9YjAubmV4dFNpYmxpbmcpe2lmKGIwLm5vZGVUeXBlPT09MSYmYjAhPT1iWil7ZS5wdXNoKGIwKX19cmV0dXJuIGV9fSk7ZnVuY3Rpb24gYU0oYjEsYjAsZSl7YjA9YjB8fDA7aWYoYkcuaXNGdW5jdGlvbihiMCkpe3JldHVybiBiRy5ncmVwKGIxLGZ1bmN0aW9uKGIzLGIyKXt2YXIgYjQ9ISFiMC5jYWxsKGIzLGIyLGIzKTtyZXR1cm4gYjQ9PT1lfSl9ZWxzZXtpZihiMC5ub2RlVHlwZSl7cmV0dXJuIGJHLmdyZXAoYjEsZnVuY3Rpb24oYjMsYjIpe3JldHVybihiMz09PWIwKT09PWV9KX1lbHNle2lmKHR5cGVvZiBiMD09PSJzdHJpbmciKXt2YXIgYlo9YkcuZ3JlcChiMSxmdW5jdGlvbihiMil7cmV0dXJuIGIyLm5vZGVUeXBlPT09MX0pO2lmKGFsLnRlc3QoYjApKXtyZXR1cm4gYkcuZmlsdGVyKGIwLGJaLCFlKX1lbHNle2IwPWJHLmZpbHRlcihiMCxiWil9fX19cmV0dXJuIGJHLmdyZXAoYjEsZnVuY3Rpb24oYjMsYjIpe3JldHVybihiRy5pbkFycmF5KGIzLGIwKT49MCk9PT1lfSl9ZnVuY3Rpb24gQihlKXt2YXIgYjA9Yy5zcGxpdCgifCIpLGJaPWUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2lmKGJaLmNyZWF0ZUVsZW1lbnQpe3doaWxlKGIwLmxlbmd0aCl7YlouY3JlYXRlRWxlbWVudChiMC5wb3AoKSl9fXJldHVybiBiWn12YXIgYz0iYWJicnxhcnRpY2xlfGFzaWRlfGF1ZGlvfGJkaXxjYW52YXN8ZGF0YXxkYXRhbGlzdHxkZXRhaWxzfGZpZ2NhcHRpb258ZmlndXJlfGZvb3RlcnxoZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2aWRlbyIsYXY9LyBqUXVlcnlcZCs9Iig/Om51bGx8XGQrKSIvZyxiWT0vXlxzKy8sYXk9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9naSxwPS88KFtcdzpdKykvLGJUPS88dGJvZHkvaSxKPS88fCYjP1x3KzsvLGFqPS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksYXA9LzwoPzpzY3JpcHR8b2JqZWN0fGVtYmVkfG9wdGlvbnxzdHlsZSkvaSxLPW5ldyBSZWdFeHAoIjwoPzoiK2MrIilbXFxzLz5dIiwiaSIpLGFFPS9eKD86Y2hlY2tib3h8cmFkaW8pJC8sYlI9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksYnc9L1wvKGphdmF8ZWNtYSlzY3JpcHQvaSxhSD0vXlxzKjwhKD86XFtDREFUQVxbfFwtXC0pfFtcXVwtXXsyfT5ccyokL2csVD17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfSxhUT1CKG8pLGw9YVEuYXBwZW5kQ2hpbGQoby5jcmVhdGVFbGVtZW50KCJkaXYiKSk7VC5vcHRncm91cD1ULm9wdGlvbjtULnRib2R5PVQudGZvb3Q9VC5jb2xncm91cD1ULmNhcHRpb249VC50aGVhZDtULnRoPVQudGQ7aWYoIWJHLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZSl7VC5fZGVmYXVsdD1bMSwiWDxkaXY+IiwiPC9kaXY+Il19YkcuZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBiRy5hY2Nlc3ModGhpcyxmdW5jdGlvbihiWil7cmV0dXJuIGJaPT09YUI/YkcudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fG8pLmNyZWF0ZVRleHROb2RlKGJaKSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0sd3JhcEFsbDpmdW5jdGlvbihlKXtpZihiRy5pc0Z1bmN0aW9uKGUpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIwKXtiRyh0aGlzKS53cmFwQWxsKGUuY2FsbCh0aGlzLGIwKSl9KX1pZih0aGlzWzBdKXt2YXIgYlo9YkcoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKHRydWUpO2lmKHRoaXNbMF0ucGFyZW50Tm9kZSl7YlouaW5zZXJ0QmVmb3JlKHRoaXNbMF0pfWJaLm1hcChmdW5jdGlvbigpe3ZhciBiMD10aGlzO3doaWxlKGIwLmZpcnN0Q2hpbGQmJmIwLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0xKXtiMD1iMC5maXJzdENoaWxkfXJldHVybiBiMH0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGUpe2lmKGJHLmlzRnVuY3Rpb24oZSkpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYlope2JHKHRoaXMpLndyYXBJbm5lcihlLmNhbGwodGhpcyxiWikpfSl9cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiWj1iRyh0aGlzKSxiMD1iWi5jb250ZW50cygpO2lmKGIwLmxlbmd0aCl7YjAud3JhcEFsbChlKX1lbHNle2JaLmFwcGVuZChlKX19KX0sd3JhcDpmdW5jdGlvbihlKXt2YXIgYlo9YkcuaXNGdW5jdGlvbihlKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIwKXtiRyh0aGlzKS53cmFwQWxsKGJaP2UuY2FsbCh0aGlzLGIwKTplKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7aWYoIWJHLm5vZGVOYW1lKHRoaXMsImJvZHkiKSl7YkcodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX19KS5lbmQoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLHRydWUsZnVuY3Rpb24oZSl7aWYodGhpcy5ub2RlVHlwZT09PTF8fHRoaXMubm9kZVR5cGU9PT0xMSl7dGhpcy5hcHBlbmRDaGlsZChlKX19KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyx0cnVlLGZ1bmN0aW9uKGUpe2lmKHRoaXMubm9kZVR5cGU9PT0xfHx0aGlzLm5vZGVUeXBlPT09MTEpe3RoaXMuaW5zZXJ0QmVmb3JlKGUsdGhpcy5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7aWYoIWFSKHRoaXNbMF0pKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZmFsc2UsZnVuY3Rpb24oYlope3RoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYlosdGhpcyl9KX1pZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgZT1iRy5jbGVhbihhcmd1bWVudHMpO3JldHVybiB0aGlzLnB1c2hTdGFjayhiRy5tZXJnZShlLHRoaXMpLCJiZWZvcmUiLHRoaXMuc2VsZWN0b3IpfX0sYWZ0ZXI6ZnVuY3Rpb24oKXtpZighYVIodGhpc1swXSkpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmYWxzZSxmdW5jdGlvbihiWil7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShiWix0aGlzLm5leHRTaWJsaW5nKX0pfWlmKGFyZ3VtZW50cy5sZW5ndGgpe3ZhciBlPWJHLmNsZWFuKGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGJHLm1lcmdlKHRoaXMsZSksImFmdGVyIix0aGlzLnNlbGVjdG9yKX19LHJlbW92ZTpmdW5jdGlvbihlLGIxKXt2YXIgYjAsYlo9MDtmb3IoOyhiMD10aGlzW2JaXSkhPW51bGw7YlorKyl7aWYoIWV8fGJHLmZpbHRlcihlLFtiMF0pLmxlbmd0aCl7aWYoIWIxJiZiMC5ub2RlVHlwZT09PTEpe2JHLmNsZWFuRGF0YShiMC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKTtiRy5jbGVhbkRhdGEoW2IwXSl9aWYoYjAucGFyZW50Tm9kZSl7YjAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiMCl9fX1yZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXt2YXIgYlosZT0wO2Zvcig7KGJaPXRoaXNbZV0pIT1udWxsO2UrKyl7aWYoYloubm9kZVR5cGU9PT0xKXtiRy5jbGVhbkRhdGEoYlouZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSl9d2hpbGUoYlouZmlyc3RDaGlsZCl7YloucmVtb3ZlQ2hpbGQoYlouZmlyc3RDaGlsZCl9fXJldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihiWixlKXtiWj1iWj09bnVsbD9mYWxzZTpiWjtlPWU9PW51bGw/Ylo6ZTtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gYkcuY2xvbmUodGhpcyxiWixlKX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiBiRy5hY2Nlc3ModGhpcyxmdW5jdGlvbihiMil7dmFyIGIxPXRoaXNbMF18fHt9LGIwPTAsYlo9dGhpcy5sZW5ndGg7aWYoYjI9PT1hQil7cmV0dXJuIGIxLm5vZGVUeXBlPT09MT9iMS5pbm5lckhUTUwucmVwbGFjZShhdiwiIik6YUJ9aWYodHlwZW9mIGIyPT09InN0cmluZyImJiFhai50ZXN0KGIyKSYmKGJHLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZXx8IUsudGVzdChiMikpJiYoYkcuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZXx8IWJZLnRlc3QoYjIpKSYmIVRbKHAuZXhlYyhiMil8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXtiMj1iMi5yZXBsYWNlKGF5LCI8JDE+PC8kMj4iKTt0cnl7Zm9yKDtiMDxiWjtiMCsrKXtiMT10aGlzW2IwXXx8e307aWYoYjEubm9kZVR5cGU9PT0xKXtiRy5jbGVhbkRhdGEoYjEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSk7YjEuaW5uZXJIVE1MPWIyfX1iMT0wfWNhdGNoKGIzKXt9fWlmKGIxKXt0aGlzLmVtcHR5KCkuYXBwZW5kKGIyKX19LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oZSl7aWYoIWFSKHRoaXNbMF0pKXtpZihiRy5pc0Z1bmN0aW9uKGUpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGIxKXt2YXIgYjA9YkcodGhpcyksYlo9YjAuaHRtbCgpO2IwLnJlcGxhY2VXaXRoKGUuY2FsbCh0aGlzLGIxLGJaKSl9KX1pZih0eXBlb2YgZSE9PSJzdHJpbmciKXtlPWJHKGUpLmRldGFjaCgpfXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYjA9dGhpcy5uZXh0U2libGluZyxiWj10aGlzLnBhcmVudE5vZGU7YkcodGhpcykucmVtb3ZlKCk7aWYoYjApe2JHKGIwKS5iZWZvcmUoZSl9ZWxzZXtiRyhiWikuYXBwZW5kKGUpfX0pfXJldHVybiB0aGlzLmxlbmd0aD90aGlzLnB1c2hTdGFjayhiRyhiRy5pc0Z1bmN0aW9uKGUpP2UoKTplKSwicmVwbGFjZVdpdGgiLGUpOnRoaXN9LGRldGFjaDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZW1vdmUoZSx0cnVlKX0sZG9tTWFuaXA6ZnVuY3Rpb24oYjQsYjgsYjcpe2I0PVtdLmNvbmNhdC5hcHBseShbXSxiNCk7dmFyIGIwLGIyLGIzLGI2LGIxPTAsYjU9YjRbMF0sYlo9W10sZT10aGlzLmxlbmd0aDtpZighYkcuc3VwcG9ydC5jaGVja0Nsb25lJiZlPjEmJnR5cGVvZiBiNT09PSJzdHJpbmciJiZiUi50ZXN0KGI1KSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2JHKHRoaXMpLmRvbU1hbmlwKGI0LGI4LGI3KX0pfWlmKGJHLmlzRnVuY3Rpb24oYjUpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGNhKXt2YXIgYjk9YkcodGhpcyk7YjRbMF09YjUuY2FsbCh0aGlzLGNhLGI4P2I5Lmh0bWwoKTphQik7YjkuZG9tTWFuaXAoYjQsYjgsYjcpfSl9aWYodGhpc1swXSl7YjA9YkcuYnVpbGRGcmFnbWVudChiNCx0aGlzLGJaKTtiMz1iMC5mcmFnbWVudDtiMj1iMy5maXJzdENoaWxkO2lmKGIzLmNoaWxkTm9kZXMubGVuZ3RoPT09MSl7YjM9YjJ9aWYoYjIpe2I4PWI4JiZiRy5ub2RlTmFtZShiMiwidHIiKTtmb3IoYjY9YjAuY2FjaGVhYmxlfHxlLTE7YjE8ZTtiMSsrKXtiNy5jYWxsKGI4JiZiRy5ub2RlTmFtZSh0aGlzW2IxXSwidGFibGUiKT95KHRoaXNbYjFdLCJ0Ym9keSIpOnRoaXNbYjFdLGIxPT09YjY/YjM6YkcuY2xvbmUoYjMsdHJ1ZSx0cnVlKSl9fWIzPWIyPW51bGw7aWYoYloubGVuZ3RoKXtiRy5lYWNoKGJaLGZ1bmN0aW9uKGI5LGNhKXtpZihjYS5zcmMpe2lmKGJHLmFqYXgpe2JHLmFqYXgoe3VybDpjYS5zcmMsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzpmYWxzZSxnbG9iYWw6ZmFsc2UsInRocm93cyI6dHJ1ZX0pfWVsc2V7YkcuZXJyb3IoIm5vIGFqYXgiKX19ZWxzZXtiRy5nbG9iYWxFdmFsKChjYS50ZXh0fHxjYS50ZXh0Q29udGVudHx8Y2EuaW5uZXJIVE1MfHwiIikucmVwbGFjZShhSCwiIikpfWlmKGNhLnBhcmVudE5vZGUpe2NhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2EpfX0pfX1yZXR1cm4gdGhpc319KTtmdW5jdGlvbiB5KGJaLGUpe3JldHVybiBiWi5nZXRFbGVtZW50c0J5VGFnTmFtZShlKVswXXx8YlouYXBwZW5kQ2hpbGQoYloub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KGUpKX1mdW5jdGlvbiBhbyhiNSxiWil7aWYoYloubm9kZVR5cGUhPT0xfHwhYkcuaGFzRGF0YShiNSkpe3JldHVybn12YXIgYjIsYjEsZSxiND1iRy5fZGF0YShiNSksYjM9YkcuX2RhdGEoYlosYjQpLGIwPWI0LmV2ZW50cztpZihiMCl7ZGVsZXRlIGIzLmhhbmRsZTtiMy5ldmVudHM9e307Zm9yKGIyIGluIGIwKXtmb3IoYjE9MCxlPWIwW2IyXS5sZW5ndGg7YjE8ZTtiMSsrKXtiRy5ldmVudC5hZGQoYlosYjIsYjBbYjJdW2IxXSl9fX1pZihiMy5kYXRhKXtiMy5kYXRhPWJHLmV4dGVuZCh7fSxiMy5kYXRhKX19ZnVuY3Rpb24gRyhiWixlKXt2YXIgYjA7aWYoZS5ub2RlVHlwZSE9PTEpe3JldHVybn1pZihlLmNsZWFyQXR0cmlidXRlcyl7ZS5jbGVhckF0dHJpYnV0ZXMoKX1pZihlLm1lcmdlQXR0cmlidXRlcyl7ZS5tZXJnZUF0dHJpYnV0ZXMoYlopfWIwPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZihiMD09PSJvYmplY3QiKXtpZihlLnBhcmVudE5vZGUpe2Uub3V0ZXJIVE1MPWJaLm91dGVySFRNTH1pZihiRy5zdXBwb3J0Lmh0bWw1Q2xvbmUmJihiWi5pbm5lckhUTUwmJiFiRy50cmltKGUuaW5uZXJIVE1MKSkpe2UuaW5uZXJIVE1MPWJaLmlubmVySFRNTH19ZWxzZXtpZihiMD09PSJpbnB1dCImJmFFLnRlc3QoYloudHlwZSkpe2UuZGVmYXVsdENoZWNrZWQ9ZS5jaGVja2VkPWJaLmNoZWNrZWQ7aWYoZS52YWx1ZSE9PWJaLnZhbHVlKXtlLnZhbHVlPWJaLnZhbHVlfX1lbHNle2lmKGIwPT09Im9wdGlvbiIpe2Uuc2VsZWN0ZWQ9YlouZGVmYXVsdFNlbGVjdGVkfWVsc2V7aWYoYjA9PT0iaW5wdXQifHxiMD09PSJ0ZXh0YXJlYSIpe2UuZGVmYXVsdFZhbHVlPWJaLmRlZmF1bHRWYWx1ZX1lbHNle2lmKGIwPT09InNjcmlwdCImJmUudGV4dCE9PWJaLnRleHQpe2UudGV4dD1iWi50ZXh0fX19fX1lLnJlbW92ZUF0dHJpYnV0ZShiRy5leHBhbmRvKX1iRy5idWlsZEZyYWdtZW50PWZ1bmN0aW9uKGIxLGIyLGJaKXt2YXIgYjAsZSxiMyxiND1iMVswXTtiMj1iMnx8bztiMj0oYjJbMF18fGIyKS5vd25lckRvY3VtZW50fHxiMlswXXx8YjI7aWYodHlwZW9mIGIyLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQ9PT0idW5kZWZpbmVkIil7YjI9b31pZihiMS5sZW5ndGg9PT0xJiZ0eXBlb2YgYjQ9PT0ic3RyaW5nIiYmYjQubGVuZ3RoPDUxMiYmYjI9PT1vJiZiNC5jaGFyQXQoMCk9PT0iPCImJiFhcC50ZXN0KGI0KSYmKGJHLnN1cHBvcnQuY2hlY2tDbG9uZXx8IWJSLnRlc3QoYjQpKSYmKGJHLnN1cHBvcnQuaHRtbDVDbG9uZXx8IUsudGVzdChiNCkpKXtlPXRydWU7YjA9YkcuZnJhZ21lbnRzW2I0XTtiMz1iMCE9PWFCfWlmKCFiMCl7YjA9YjIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2JHLmNsZWFuKGIxLGIyLGIwLGJaKTtpZihlKXtiRy5mcmFnbWVudHNbYjRdPWIzJiZiMH19cmV0dXJue2ZyYWdtZW50OmIwLGNhY2hlYWJsZTplfX07YkcuZnJhZ21lbnRzPXt9O2JHLmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihlLGJaKXtiRy5mbltlXT1mdW5jdGlvbihiMCl7dmFyIGIyLGI0PTAsYjM9W10sYjY9YkcoYjApLGIxPWI2Lmxlbmd0aCxiNT10aGlzLmxlbmd0aD09PTEmJnRoaXNbMF0ucGFyZW50Tm9kZTtpZigoYjU9PW51bGx8fGI1JiZiNS5ub2RlVHlwZT09PTExJiZiNS5jaGlsZE5vZGVzLmxlbmd0aD09PTEpJiZiMT09PTEpe2I2W2JaXSh0aGlzWzBdKTtyZXR1cm4gdGhpc31lbHNle2Zvcig7YjQ8YjE7YjQrKyl7YjI9KGI0PjA/dGhpcy5jbG9uZSh0cnVlKTp0aGlzKS5nZXQoKTtiRyhiNltiNF0pW2JaXShiMik7YjM9YjMuY29uY2F0KGIyKX1yZXR1cm4gdGhpcy5wdXNoU3RhY2soYjMsZSxiNi5zZWxlY3Rvcil9fX0pO2Z1bmN0aW9uIG0oZSl7aWYodHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPT0idW5kZWZpbmVkIil7cmV0dXJuIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKX1lbHNle2lmKHR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGwhPT0idW5kZWZpbmVkIil7cmV0dXJuIGUucXVlcnlTZWxlY3RvckFsbCgiKiIpfWVsc2V7cmV0dXJuW119fX1mdW5jdGlvbiBiUyhlKXtpZihhRS50ZXN0KGUudHlwZSkpe2UuZGVmYXVsdENoZWNrZWQ9ZS5jaGVja2VkfX1iRy5leHRlbmQoe2Nsb25lOmZ1bmN0aW9uKGIyLGI0LGIwKXt2YXIgZSxiWixiMSxiMztpZihiRy5zdXBwb3J0Lmh0bWw1Q2xvbmV8fGJHLmlzWE1MRG9jKGIyKXx8IUsudGVzdCgiPCIrYjIubm9kZU5hbWUrIj4iKSl7YjM9YjIuY2xvbmVOb2RlKHRydWUpfWVsc2V7bC5pbm5lckhUTUw9YjIub3V0ZXJIVE1MO2wucmVtb3ZlQ2hpbGQoYjM9bC5maXJzdENoaWxkKX1pZigoIWJHLnN1cHBvcnQubm9DbG9uZUV2ZW50fHwhYkcuc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCkmJihiMi5ub2RlVHlwZT09PTF8fGIyLm5vZGVUeXBlPT09MTEpJiYhYkcuaXNYTUxEb2MoYjIpKXtHKGIyLGIzKTtlPW0oYjIpO2JaPW0oYjMpO2ZvcihiMT0wO2VbYjFdOysrYjEpe2lmKGJaW2IxXSl7RyhlW2IxXSxiWltiMV0pfX19aWYoYjQpe2FvKGIyLGIzKTtpZihiMCl7ZT1tKGIyKTtiWj1tKGIzKTtmb3IoYjE9MDtlW2IxXTsrK2IxKXthbyhlW2IxXSxiWltiMV0pfX19ZT1iWj1udWxsO3JldHVybiBiM30sY2xlYW46ZnVuY3Rpb24oY2IsYjAsZSxiMSl7dmFyIGI3LGIzLGNhLGNmLGI0LGNlLGI1LGIyLGJaLGI5LGNkLGI2LGI4PTAsY2M9W107aWYoIWIwfHx0eXBlb2YgYjAuY3JlYXRlRG9jdW1lbnRGcmFnbWVudD09PSJ1bmRlZmluZWQiKXtiMD1vfWZvcihiMz1iMD09PW8mJmFROyhjYT1jYltiOF0pIT1udWxsO2I4Kyspe2lmKHR5cGVvZiBjYT09PSJudW1iZXIiKXtjYSs9IiJ9aWYoIWNhKXtjb250aW51ZX1pZih0eXBlb2YgY2E9PT0ic3RyaW5nIil7aWYoIUoudGVzdChjYSkpe2NhPWIwLmNyZWF0ZVRleHROb2RlKGNhKX1lbHNle2IzPWIzfHxCKGIwKTtiNT1iNXx8YjMuYXBwZW5kQ2hpbGQoYjAuY3JlYXRlRWxlbWVudCgiZGl2IikpO2NhPWNhLnJlcGxhY2UoYXksIjwkMT48LyQyPiIpO2NmPShwLmV4ZWMoY2EpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpO2I0PVRbY2ZdfHxULl9kZWZhdWx0O2NlPWI0WzBdO2I1LmlubmVySFRNTD1iNFsxXStjYStiNFsyXTt3aGlsZShjZS0tKXtiNT1iNS5sYXN0Q2hpbGR9aWYoIWJHLnN1cHBvcnQudGJvZHkpe2IyPWJULnRlc3QoY2EpO2JaPWNmPT09InRhYmxlIiYmIWIyP2I1LmZpcnN0Q2hpbGQmJmI1LmZpcnN0Q2hpbGQuY2hpbGROb2RlczpiNFsxXT09PSI8dGFibGU+IiYmIWIyP2I1LmNoaWxkTm9kZXM6W107Zm9yKGI3PWJaLmxlbmd0aC0xO2I3Pj0wOy0tYjcpe2lmKGJHLm5vZGVOYW1lKGJaW2I3XSwidGJvZHkiKSYmIWJaW2I3XS5jaGlsZE5vZGVzLmxlbmd0aCl7YlpbYjddLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYlpbYjddKX19fWlmKCFiRy5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlJiZiWS50ZXN0KGNhKSl7YjUuaW5zZXJ0QmVmb3JlKGIwLmNyZWF0ZVRleHROb2RlKGJZLmV4ZWMoY2EpWzBdKSxiNS5maXJzdENoaWxkKX1jYT1iNS5jaGlsZE5vZGVzO2I1PWIzLmxhc3RDaGlsZH19aWYoY2Eubm9kZVR5cGUpe2NjLnB1c2goY2EpfWVsc2V7Y2M9YkcubWVyZ2UoY2MsY2EpfX1pZihiNSl7YjMucmVtb3ZlQ2hpbGQoYjUpO2NhPWI1PWIzPW51bGx9aWYoIWJHLnN1cHBvcnQuYXBwZW5kQ2hlY2tlZCl7Zm9yKGI4PTA7KGNhPWNjW2I4XSkhPW51bGw7YjgrKyl7aWYoYkcubm9kZU5hbWUoY2EsImlucHV0Iikpe2JTKGNhKX1lbHNle2lmKHR5cGVvZiBjYS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PSJ1bmRlZmluZWQiKXtiRy5ncmVwKGNhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLGJTKX19fX1pZihlKXtjZD1mdW5jdGlvbihjZyl7aWYoIWNnLnR5cGV8fGJ3LnRlc3QoY2cudHlwZSkpe3JldHVybiBiMT9iMS5wdXNoKGNnLnBhcmVudE5vZGU/Y2cucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjZyk6Y2cpOmUuYXBwZW5kQ2hpbGQoY2cpfX07Zm9yKGI4PTA7KGNhPWNjW2I4XSkhPW51bGw7YjgrKyl7aWYoIShiRy5ub2RlTmFtZShjYSwic2NyaXB0IikmJmNkKGNhKSkpe2UuYXBwZW5kQ2hpbGQoY2EpO2lmKHR5cGVvZiBjYS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PSJ1bmRlZmluZWQiKXtiNj1iRy5ncmVwKGJHLm1lcmdlKFtdLGNhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSksY2QpO2NjLnNwbGljZS5hcHBseShjYyxbYjgrMSwwXS5jb25jYXQoYjYpKTtiOCs9YjYubGVuZ3RofX19fXJldHVybiBjY30sY2xlYW5EYXRhOmZ1bmN0aW9uKGJaLGI3KXt2YXIgYjIsYjAsYjEsYjYsYjM9MCxiOD1iRy5leHBhbmRvLGU9YkcuY2FjaGUsYjQ9Ykcuc3VwcG9ydC5kZWxldGVFeHBhbmRvLGI1PWJHLmV2ZW50LnNwZWNpYWw7Zm9yKDsoYjE9YlpbYjNdKSE9bnVsbDtiMysrKXtpZihiN3x8YkcuYWNjZXB0RGF0YShiMSkpe2IwPWIxW2I4XTtiMj1iMCYmZVtiMF07aWYoYjIpe2lmKGIyLmV2ZW50cyl7Zm9yKGI2IGluIGIyLmV2ZW50cyl7aWYoYjVbYjZdKXtiRy5ldmVudC5yZW1vdmUoYjEsYjYpfWVsc2V7YkcucmVtb3ZlRXZlbnQoYjEsYjYsYjIuaGFuZGxlKX19fWlmKGVbYjBdKXtkZWxldGUgZVtiMF07aWYoYjQpe2RlbGV0ZSBiMVtiOF19ZWxzZXtpZihiMS5yZW1vdmVBdHRyaWJ1dGUpe2IxLnJlbW92ZUF0dHJpYnV0ZShiOCl9ZWxzZXtiMVtiOF09bnVsbH19YkcuZGVsZXRlZElkcy5wdXNoKGIwKX19fX19fSk7KGZ1bmN0aW9uKCl7dmFyIGUsYlo7YkcudWFNYXRjaD1mdW5jdGlvbihiMSl7YjE9YjEudG9Mb3dlckNhc2UoKTt2YXIgYjA9LyhjaHJvbWUpWyBcL10oW1x3Ll0rKS8uZXhlYyhiMSl8fC8od2Via2l0KVsgXC9dKFtcdy5dKykvLmV4ZWMoYjEpfHwvKG9wZXJhKSg/Oi4qdmVyc2lvbnwpWyBcL10oW1x3Ll0rKS8uZXhlYyhiMSl8fC8obXNpZSkgKFtcdy5dKykvLmV4ZWMoYjEpfHxiMS5pbmRleE9mKCJjb21wYXRpYmxlIik8MCYmLyhtb3ppbGxhKSg/Oi4qPyBydjooW1x3Ll0rKXwpLy5leGVjKGIxKXx8W107cmV0dXJue2Jyb3dzZXI6YjBbMV18fCIiLHZlcnNpb246YjBbMl18fCIwIn19O2U9YkcudWFNYXRjaChkLnVzZXJBZ2VudCk7Ylo9e307aWYoZS5icm93c2VyKXtiWltlLmJyb3dzZXJdPXRydWU7YloudmVyc2lvbj1lLnZlcnNpb259aWYoYloud2Via2l0KXtiWi5zYWZhcmk9dHJ1ZX1iRy5icm93c2VyPWJaO2JHLnN1Yj1mdW5jdGlvbigpe2Z1bmN0aW9uIGIwKGIzLGI0KXtyZXR1cm4gbmV3IGIwLmZuLmluaXQoYjMsYjQpfWJHLmV4dGVuZCh0cnVlLGIwLHRoaXMpO2IwLnN1cGVyY2xhc3M9dGhpcztiMC5mbj1iMC5wcm90b3R5cGU9dGhpcygpO2IwLmZuLmNvbnN0cnVjdG9yPWIwO2IwLnN1Yj10aGlzLnN1YjtiMC5mbi5pbml0PWZ1bmN0aW9uIGIyKGIzLGI0KXtpZihiNCYmYjQgaW5zdGFuY2VvZiBiRyYmIShiNCBpbnN0YW5jZW9mIGIwKSl7YjQ9YjAoYjQpfXJldHVybiBiRy5mbi5pbml0LmNhbGwodGhpcyxiMyxiNCxiMSl9O2IwLmZuLmluaXQucHJvdG90eXBlPWIwLmZuO3ZhciBiMT1iMChvKTtyZXR1cm4gYjB9fSkoKTt2YXIgRixheixhVyxiZT0vYWxwaGFcKFteKV0qXCkvaSxhUz0vb3BhY2l0eT0oW14pXSopLyxiaz0vXih0b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC8sYVo9L15tYXJnaW4vLGE4PW5ldyBSZWdFeHAoIl4oIitieCsiKSguKikkIiwiaSIpLFc9bmV3IFJlZ0V4cCgiXigiK2J4KyIpKD8hcHgpW2EteiVdKyQiLCJpIiksUz1uZXcgUmVnRXhwKCJeKFstK10pPSgiK2J4KyIpIiwiaSIpLGJoPXt9LGE5PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6ImhpZGRlbiIsZGlzcGxheToiYmxvY2sifSxiQT17bGV0dGVyU3BhY2luZzowLGZvbnRXZWlnaHQ6NDAwLGxpbmVIZWlnaHQ6MX0sYlE9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxhcj1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdLGFKPWJHLmZuLnRvZ2dsZTtmdW5jdGlvbiBiKGIxLGJaKXtpZihiWiBpbiBiMSl7cmV0dXJuIGJafXZhciBiMj1iWi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStiWi5zbGljZSgxKSxlPWJaLGIwPWFyLmxlbmd0aDt3aGlsZShiMC0tKXtiWj1hcltiMF0rYjI7aWYoYlogaW4gYjEpe3JldHVybiBiWn19cmV0dXJuIGV9ZnVuY3Rpb24gUShiWixlKXtiWj1lfHxiWjtyZXR1cm4gYkcuY3NzKGJaLCJkaXNwbGF5Iik9PT0ibm9uZSJ8fCFiRy5jb250YWlucyhiWi5vd25lckRvY3VtZW50LGJaKX1mdW5jdGlvbiB0KGIzLGUpe3ZhciBiMixiNCxiWj1bXSxiMD0wLGIxPWIzLmxlbmd0aDtmb3IoO2IwPGIxO2IwKyspe2IyPWIzW2IwXTtpZighYjIuc3R5bGUpe2NvbnRpbnVlfWJaW2IwXT1iRy5fZGF0YShiMiwib2xkZGlzcGxheSIpO2lmKGUpe2lmKCFiWltiMF0mJmIyLnN0eWxlLmRpc3BsYXk9PT0ibm9uZSIpe2IyLnN0eWxlLmRpc3BsYXk9IiJ9aWYoYjIuc3R5bGUuZGlzcGxheT09PSIiJiZRKGIyKSl7YlpbYjBdPWJHLl9kYXRhKGIyLCJvbGRkaXNwbGF5IixiQyhiMi5ub2RlTmFtZSkpfX1lbHNle2I0PUYoYjIsImRpc3BsYXkiKTtpZighYlpbYjBdJiZiNCE9PSJub25lIil7YkcuX2RhdGEoYjIsIm9sZGRpc3BsYXkiLGI0KX19fWZvcihiMD0wO2IwPGIxO2IwKyspe2IyPWIzW2IwXTtpZighYjIuc3R5bGUpe2NvbnRpbnVlfWlmKCFlfHxiMi5zdHlsZS5kaXNwbGF5PT09Im5vbmUifHxiMi5zdHlsZS5kaXNwbGF5PT09IiIpe2IyLnN0eWxlLmRpc3BsYXk9ZT9iWltiMF18fCIiOiJub25lIn19cmV0dXJuIGIzfWJHLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGUsYlope3JldHVybiBiRy5hY2Nlc3ModGhpcyxmdW5jdGlvbihiMSxiMCxiMil7cmV0dXJuIGIyIT09YUI/Ykcuc3R5bGUoYjEsYjAsYjIpOmJHLmNzcyhiMSxiMCl9LGUsYlosYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsdHJ1ZSl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGIwLGJaKXt2YXIgZT10eXBlb2YgYjA9PT0iYm9vbGVhbiI7aWYoYkcuaXNGdW5jdGlvbihiMCkmJmJHLmlzRnVuY3Rpb24oYlopKXtyZXR1cm4gYUouYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihlP2IwOlEodGhpcykpe2JHKHRoaXMpLnNob3coKX1lbHNle2JHKHRoaXMpLmhpZGUoKX19KX19KTtiRy5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oYjAsYlope2lmKGJaKXt2YXIgZT1GKGIwLCJvcGFjaXR5Iik7cmV0dXJuIGU9PT0iIj8iMSI6ZX19fX0sY3NzTnVtYmVyOntmaWxsT3BhY2l0eTp0cnVlLGZvbnRXZWlnaHQ6dHJ1ZSxsaW5lSGVpZ2h0OnRydWUsb3BhY2l0eTp0cnVlLG9ycGhhbnM6dHJ1ZSx3aWRvd3M6dHJ1ZSx6SW5kZXg6dHJ1ZSx6b29tOnRydWV9LGNzc1Byb3BzOnsiZmxvYXQiOmJHLnN1cHBvcnQuY3NzRmxvYXQ/ImNzc0Zsb2F0Ijoic3R5bGVGbG9hdCJ9LHN0eWxlOmZ1bmN0aW9uKGIxLGIwLGI3LGIyKXtpZighYjF8fGIxLm5vZGVUeXBlPT09M3x8YjEubm9kZVR5cGU9PT04fHwhYjEuc3R5bGUpe3JldHVybn12YXIgYjUsYjYsYjgsYjM9YkcuY2FtZWxDYXNlKGIwKSxiWj1iMS5zdHlsZTtiMD1iRy5jc3NQcm9wc1tiM118fChiRy5jc3NQcm9wc1tiM109YihiWixiMykpO2I4PWJHLmNzc0hvb2tzW2IwXXx8YkcuY3NzSG9va3NbYjNdO2lmKGI3IT09YUIpe2I2PXR5cGVvZiBiNztpZihiNj09PSJzdHJpbmciJiYoYjU9Uy5leGVjKGI3KSkpe2I3PShiNVsxXSsxKSpiNVsyXStwYXJzZUZsb2F0KGJHLmNzcyhiMSxiMCkpO2I2PSJudW1iZXIifWlmKGI3PT1udWxsfHxiNj09PSJudW1iZXIiJiZpc05hTihiNykpe3JldHVybn1pZihiNj09PSJudW1iZXIiJiYhYkcuY3NzTnVtYmVyW2IzXSl7YjcrPSJweCJ9aWYoIWI4fHwhKCJzZXQiIGluIGI4KXx8KGI3PWI4LnNldChiMSxiNyxiMikpIT09YUIpe3RyeXtiWltiMF09Yjd9Y2F0Y2goYjQpe319fWVsc2V7aWYoYjgmJiJnZXQiIGluIGI4JiYoYjU9YjguZ2V0KGIxLGZhbHNlLGIyKSkhPT1hQil7cmV0dXJuIGI1fXJldHVybiBiWltiMF19fSxjc3M6ZnVuY3Rpb24oYjQsYjIsYjMsYlope3ZhciBiNSxiMSxlLGIwPWJHLmNhbWVsQ2FzZShiMik7YjI9YkcuY3NzUHJvcHNbYjBdfHwoYkcuY3NzUHJvcHNbYjBdPWIoYjQuc3R5bGUsYjApKTtlPWJHLmNzc0hvb2tzW2IyXXx8YkcuY3NzSG9va3NbYjBdO2lmKGUmJiJnZXQiIGluIGUpe2I1PWUuZ2V0KGI0LHRydWUsYlopfWlmKGI1PT09YUIpe2I1PUYoYjQsYjIpfWlmKGI1PT09Im5vcm1hbCImJmIyIGluIGJBKXtiNT1iQVtiMl19aWYoYjN8fGJaIT09YUIpe2IxPXBhcnNlRmxvYXQoYjUpO3JldHVybiBiM3x8YkcuaXNOdW1lcmljKGIxKT9iMXx8MDpiNX1yZXR1cm4gYjV9LHN3YXA6ZnVuY3Rpb24oYjIsYjEsYjMpe3ZhciBiMCxiWixlPXt9O2ZvcihiWiBpbiBiMSl7ZVtiWl09YjIuc3R5bGVbYlpdO2IyLnN0eWxlW2JaXT1iMVtiWl19YjA9YjMuY2FsbChiMik7Zm9yKGJaIGluIGIxKXtiMi5zdHlsZVtiWl09ZVtiWl19cmV0dXJuIGIwfX0pO2lmKGEyLmdldENvbXB1dGVkU3R5bGUpe0Y9ZnVuY3Rpb24oYjUsYlope3ZhciBlLGIyLGIxLGI0LGIzPWdldENvbXB1dGVkU3R5bGUoYjUsbnVsbCksYjA9YjUuc3R5bGU7aWYoYjMpe2U9YjNbYlpdO2lmKGU9PT0iIiYmIWJHLmNvbnRhaW5zKGI1Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGI1KSl7ZT1iRy5zdHlsZShiNSxiWil9aWYoVy50ZXN0KGUpJiZhWi50ZXN0KGJaKSl7YjI9YjAud2lkdGg7YjE9YjAubWluV2lkdGg7YjQ9YjAubWF4V2lkdGg7YjAubWluV2lkdGg9YjAubWF4V2lkdGg9YjAud2lkdGg9ZTtlPWIzLndpZHRoO2IwLndpZHRoPWIyO2IwLm1pbldpZHRoPWIxO2IwLm1heFdpZHRoPWI0fX1yZXR1cm4gZX19ZWxzZXtpZihvLmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUpe0Y9ZnVuY3Rpb24oYjIsYjApe3ZhciBiMyxlLGJaPWIyLmN1cnJlbnRTdHlsZSYmYjIuY3VycmVudFN0eWxlW2IwXSxiMT1iMi5zdHlsZTtpZihiWj09bnVsbCYmYjEmJmIxW2IwXSl7Ylo9YjFbYjBdfWlmKFcudGVzdChiWikmJiFiay50ZXN0KGIwKSl7YjM9YjEubGVmdDtlPWIyLnJ1bnRpbWVTdHlsZSYmYjIucnVudGltZVN0eWxlLmxlZnQ7aWYoZSl7YjIucnVudGltZVN0eWxlLmxlZnQ9YjIuY3VycmVudFN0eWxlLmxlZnR9YjEubGVmdD1iMD09PSJmb250U2l6ZSI/IjFlbSI6Ylo7Ylo9YjEucGl4ZWxMZWZ0KyJweCI7YjEubGVmdD1iMztpZihlKXtiMi5ydW50aW1lU3R5bGUubGVmdD1lfX1yZXR1cm4gYlo9PT0iIj8iYXV0byI6Ylp9fX1mdW5jdGlvbiBhRyhlLGIwLGIxKXt2YXIgYlo9YTguZXhlYyhiMCk7cmV0dXJuIGJaP01hdGgubWF4KDAsYlpbMV0tKGIxfHwwKSkrKGJaWzJdfHwicHgiKTpiMH1mdW5jdGlvbiBhdChiMSxiWixlLGIzKXt2YXIgYjA9ZT09PShiMz8iYm9yZGVyIjoiY29udGVudCIpPzQ6Ylo9PT0id2lkdGgiPzE6MCxiMj0wO2Zvcig7YjA8NDtiMCs9Mil7aWYoZT09PSJtYXJnaW4iKXtiMis9YkcuY3NzKGIxLGUrYlFbYjBdLHRydWUpfWlmKGIzKXtpZihlPT09ImNvbnRlbnQiKXtiMi09cGFyc2VGbG9hdChGKGIxLCJwYWRkaW5nIitiUVtiMF0pKXx8MH1pZihlIT09Im1hcmdpbiIpe2IyLT1wYXJzZUZsb2F0KEYoYjEsImJvcmRlciIrYlFbYjBdKyJXaWR0aCIpKXx8MH19ZWxzZXtiMis9cGFyc2VGbG9hdChGKGIxLCJwYWRkaW5nIitiUVtiMF0pKXx8MDtpZihlIT09InBhZGRpbmciKXtiMis9cGFyc2VGbG9hdChGKGIxLCJib3JkZXIiK2JRW2IwXSsiV2lkdGgiKSl8fDB9fX1yZXR1cm4gYjJ9ZnVuY3Rpb24gdihiMSxiWixlKXt2YXIgYjI9Ylo9PT0id2lkdGgiP2IxLm9mZnNldFdpZHRoOmIxLm9mZnNldEhlaWdodCxiMD10cnVlLGIzPWJHLnN1cHBvcnQuYm94U2l6aW5nJiZiRy5jc3MoYjEsImJveFNpemluZyIpPT09ImJvcmRlci1ib3giO2lmKGIyPD0wKXtiMj1GKGIxLGJaKTtpZihiMjwwfHxiMj09bnVsbCl7YjI9YjEuc3R5bGVbYlpdfWlmKFcudGVzdChiMikpe3JldHVybiBiMn1iMD1iMyYmKGJHLnN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGV8fGIyPT09YjEuc3R5bGVbYlpdKTtiMj1wYXJzZUZsb2F0KGIyKXx8MH1yZXR1cm4oYjIrYXQoYjEsYlosZXx8KGIzPyJib3JkZXIiOiJjb250ZW50IiksYjApKSsicHgifWZ1bmN0aW9uIGJDKGIwKXtpZihiaFtiMF0pe3JldHVybiBiaFtiMF19dmFyIGU9YkcoIjwiK2IwKyI+IikuYXBwZW5kVG8oby5ib2R5KSxiWj1lLmNzcygiZGlzcGxheSIpO2UucmVtb3ZlKCk7aWYoYlo9PT0ibm9uZSJ8fGJaPT09IiIpe2F6PW8uYm9keS5hcHBlbmRDaGlsZChhenx8YkcuZXh0ZW5kKG8uY3JlYXRlRWxlbWVudCgiaWZyYW1lIikse2ZyYW1lQm9yZGVyOjAsd2lkdGg6MCxoZWlnaHQ6MH0pKTtpZighYVd8fCFhei5jcmVhdGVFbGVtZW50KXthVz0oYXouY29udGVudFdpbmRvd3x8YXouY29udGVudERvY3VtZW50KS5kb2N1bWVudDthVy53cml0ZSgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGJvZHk+Iik7YVcuY2xvc2UoKX1lPWFXLmJvZHkuYXBwZW5kQ2hpbGQoYVcuY3JlYXRlRWxlbWVudChiMCkpO2JaPUYoZSwiZGlzcGxheSIpO28uYm9keS5yZW1vdmVDaGlsZChheil9YmhbYjBdPWJaO3JldHVybiBiWn1iRy5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihiWixlKXtiRy5jc3NIb29rc1tlXT17Z2V0OmZ1bmN0aW9uKGIyLGIxLGIwKXtpZihiMSl7aWYoYjIub2Zmc2V0V2lkdGghPT0wfHxGKGIyLCJkaXNwbGF5IikhPT0ibm9uZSIpe3JldHVybiB2KGIyLGUsYjApfWVsc2V7cmV0dXJuIGJHLnN3YXAoYjIsYTksZnVuY3Rpb24oKXtyZXR1cm4gdihiMixlLGIwKX0pfX19LHNldDpmdW5jdGlvbihiMSxiMixiMCl7cmV0dXJuIGFHKGIxLGIyLGIwP2F0KGIxLGUsYjAsYkcuc3VwcG9ydC5ib3hTaXppbmcmJmJHLmNzcyhiMSwiYm94U2l6aW5nIik9PT0iYm9yZGVyLWJveCIpOjApfX19KTtpZighYkcuc3VwcG9ydC5vcGFjaXR5KXtiRy5jc3NIb29rcy5vcGFjaXR5PXtnZXQ6ZnVuY3Rpb24oYlosZSl7cmV0dXJuIGFTLnRlc3QoKGUmJmJaLmN1cnJlbnRTdHlsZT9iWi5jdXJyZW50U3R5bGUuZmlsdGVyOmJaLnN0eWxlLmZpbHRlcil8fCIiKT8oMC4wMSpwYXJzZUZsb2F0KFJlZ0V4cC4kMSkpKyIiOmU/IjEiOiIifSxzZXQ6ZnVuY3Rpb24oYjIsYjMpe3ZhciBiMT1iMi5zdHlsZSxiWj1iMi5jdXJyZW50U3R5bGUsZT1iRy5pc051bWVyaWMoYjMpPyJhbHBoYShvcGFjaXR5PSIrYjMqMTAwKyIpIjoiIixiMD1iWiYmYlouZmlsdGVyfHxiMS5maWx0ZXJ8fCIiO2IxLnpvb209MTtpZihiMz49MSYmYkcudHJpbShiMC5yZXBsYWNlKGJlLCIiKSk9PT0iIiYmYjEucmVtb3ZlQXR0cmlidXRlKXtiMS5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpO2lmKGJaJiYhYlouZmlsdGVyKXtyZXR1cm59fWIxLmZpbHRlcj1iZS50ZXN0KGIwKT9iMC5yZXBsYWNlKGJlLGUpOmIwKyIgIitlfX19YkcoZnVuY3Rpb24oKXtpZighYkcuc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0KXtiRy5jc3NIb29rcy5tYXJnaW5SaWdodD17Z2V0OmZ1bmN0aW9uKGJaLGUpe3JldHVybiBiRy5zd2FwKGJaLHtkaXNwbGF5OiJpbmxpbmUtYmxvY2sifSxmdW5jdGlvbigpe2lmKGUpe3JldHVybiBGKGJaLCJtYXJnaW5SaWdodCIpfX0pfX19aWYoIWJHLnN1cHBvcnQucGl4ZWxQb3NpdGlvbiYmYkcuZm4ucG9zaXRpb24pe2JHLmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSxiWil7YkcuY3NzSG9va3NbYlpdPXtnZXQ6ZnVuY3Rpb24oYjIsYjEpe2lmKGIxKXt2YXIgYjA9RihiMixiWik7cmV0dXJuIFcudGVzdChiMCk/YkcoYjIpLnBvc2l0aW9uKClbYlpdKyJweCI6YjB9fX19KX19KTtpZihiRy5leHByJiZiRy5leHByLmZpbHRlcnMpe2JHLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oZSl7cmV0dXJuKGUub2Zmc2V0V2lkdGg9PT0wJiZlLm9mZnNldEhlaWdodD09PTApfHwoIWJHLnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzJiYoKGUuc3R5bGUmJmUuc3R5bGUuZGlzcGxheSl8fEYoZSwiZGlzcGxheSIpKT09PSJub25lIil9O2JHLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGUpe3JldHVybiAhYkcuZXhwci5maWx0ZXJzLmhpZGRlbihlKX19YkcuZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGUsYlope2JHLmNzc0hvb2tzW2UrYlpdPXtleHBhbmQ6ZnVuY3Rpb24oYjIpe3ZhciBiMSxiMz10eXBlb2YgYjI9PT0ic3RyaW5nIj9iMi5zcGxpdCgiICIpOltiMl0sYjA9e307Zm9yKGIxPTA7YjE8NDtiMSsrKXtiMFtlK2JRW2IxXStiWl09YjNbYjFdfHxiM1tiMS0yXXx8YjNbMF19cmV0dXJuIGIwfX07aWYoIWFaLnRlc3QoZSkpe2JHLmNzc0hvb2tzW2UrYlpdLnNldD1hR319KTt2YXIgYnM9LyUyMC9nLGFQPS9cW1xdJC8sVT0vXHI/XG4vZyxiej0vXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZGF0ZXRpbWUtbG9jYWx8ZW1haWx8aGlkZGVufG1vbnRofG51bWJlcnxwYXNzd29yZHxyYW5nZXxzZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8d2VlaykkL2ksYUQ9L14oPzpzZWxlY3R8dGV4dGFyZWEpL2k7YkcuZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gYkcucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz9iRy5tYWtlQXJyYXkodGhpcy5lbGVtZW50cyk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWUmJiF0aGlzLmRpc2FibGVkJiYodGhpcy5jaGVja2VkfHxhRC50ZXN0KHRoaXMubm9kZU5hbWUpfHxiei50ZXN0KHRoaXMudHlwZSkpfSkubWFwKGZ1bmN0aW9uKGUsYlope3ZhciBiMD1iRyh0aGlzKS52YWwoKTtyZXR1cm4gYjA9PW51bGw/bnVsbDpiRy5pc0FycmF5KGIwKT9iRy5tYXAoYjAsZnVuY3Rpb24oYjIsYjEpe3JldHVybntuYW1lOmJaLm5hbWUsdmFsdWU6YjIucmVwbGFjZShVLCJcclxuIil9fSk6e25hbWU6YloubmFtZSx2YWx1ZTpiMC5yZXBsYWNlKFUsIlxyXG4iKX19KS5nZXQoKX19KTtiRy5wYXJhbT1mdW5jdGlvbihlLGIwKXt2YXIgYjEsYlo9W10sYjI9ZnVuY3Rpb24oYjMsYjQpe2I0PWJHLmlzRnVuY3Rpb24oYjQpP2I0KCk6KGI0PT1udWxsPyIiOmI0KTtiWltiWi5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChiMykrIj0iK2VuY29kZVVSSUNvbXBvbmVudChiNCl9O2lmKGIwPT09YUIpe2IwPWJHLmFqYXhTZXR0aW5ncyYmYkcuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsfWlmKGJHLmlzQXJyYXkoZSl8fChlLmpxdWVyeSYmIWJHLmlzUGxhaW5PYmplY3QoZSkpKXtiRy5lYWNoKGUsZnVuY3Rpb24oKXtiMih0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KX1lbHNle2ZvcihiMSBpbiBlKXtrKGIxLGVbYjFdLGIwLGIyKX19cmV0dXJuIGJaLmpvaW4oIiYiKS5yZXBsYWNlKGJzLCIrIil9O2Z1bmN0aW9uIGsoYjAsYjIsYlosYjEpe3ZhciBlO2lmKGJHLmlzQXJyYXkoYjIpKXtiRy5lYWNoKGIyLGZ1bmN0aW9uKGI0LGIzKXtpZihiWnx8YVAudGVzdChiMCkpe2IxKGIwLGIzKX1lbHNle2soYjArIlsiKyh0eXBlb2YgYjM9PT0ib2JqZWN0Ij9iNDoiIikrIl0iLGIzLGJaLGIxKX19KX1lbHNle2lmKCFiWiYmYkcudHlwZShiMik9PT0ib2JqZWN0Iil7Zm9yKGUgaW4gYjIpe2soYjArIlsiK2UrIl0iLGIyW2VdLGJaLGIxKX19ZWxzZXtiMShiMCxiMil9fX12YXIgWSxiWCxhbj0vIy4qJC8sYWQ9L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZyxDPS9eKD86YWJvdXR8YXBwfGFwcFwtc3RvcmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8scz0vXig/OkdFVHxIRUFEKSQvLGFDPS9eXC9cLy8sYk49L1w/LyxnPS88c2NyaXB0XGJbXjxdKig/Oig/ITxcL3NjcmlwdD4pPFtePF0qKSo8XC9zY3JpcHQ+L2dpLFA9LyhbPyZdKV89W14mXSovLGFUPS9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKyl8KXwpLyxiVz1iRy5mbi5sb2FkLHc9e30sYTY9e30sYVg9WyIqLyJdK1siKiJdO3RyeXtZPWFJLmhyZWZ9Y2F0Y2goYmQpe1k9by5jcmVhdGVFbGVtZW50KCJhIik7WS5ocmVmPSIiO1k9WS5ocmVmfWJYPWFULmV4ZWMoWS50b0xvd2VyQ2FzZSgpKXx8W107ZnVuY3Rpb24gYkkoZSl7cmV0dXJuIGZ1bmN0aW9uKGIyLGI0KXtpZih0eXBlb2YgYjIhPT0ic3RyaW5nIil7YjQ9YjI7YjI9IioifXZhciBiWixiNSxiNixiMT1iMi50b0xvd2VyQ2FzZSgpLnNwbGl0KGFWKSxiMD0wLGIzPWIxLmxlbmd0aDtpZihiRy5pc0Z1bmN0aW9uKGI0KSl7Zm9yKDtiMDxiMztiMCsrKXtiWj1iMVtiMF07YjY9L15cKy8udGVzdChiWik7aWYoYjYpe2JaPWJaLnN1YnN0cigxKXx8IioifWI1PWVbYlpdPWVbYlpdfHxbXTtiNVtiNj8idW5zaGlmdCI6InB1c2giXShiNCl9fX19ZnVuY3Rpb24gcihiWixiOCxiMyxiNixiNSxiMSl7YjU9YjV8fGI4LmRhdGFUeXBlc1swXTtiMT1iMXx8e307YjFbYjVdPXRydWU7dmFyIGI3LGI0PWJaW2I1XSxiMD0wLGU9YjQ/YjQubGVuZ3RoOjAsYjI9KGJaPT09dyk7Zm9yKDtiMDxlJiYoYjJ8fCFiNyk7YjArKyl7Yjc9YjRbYjBdKGI4LGIzLGI2KTtpZih0eXBlb2YgYjc9PT0ic3RyaW5nIil7aWYoIWIyfHxiMVtiN10pe2I3PWFCfWVsc2V7YjguZGF0YVR5cGVzLnVuc2hpZnQoYjcpO2I3PXIoYlosYjgsYjMsYjYsYjcsYjEpfX19aWYoKGIyfHwhYjcpJiYhYjFbIioiXSl7Yjc9cihiWixiOCxiMyxiNiwiKiIsYjEpfXJldHVybiBiN31mdW5jdGlvbiB1KGIwLGIxKXt2YXIgYlosZSxiMj1iRy5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihiWiBpbiBiMSl7aWYoYjFbYlpdIT09YUIpeyhiMltiWl0/YjA6KGV8fChlPXt9KSkpW2JaXT1iMVtiWl19fWlmKGUpe2JHLmV4dGVuZCh0cnVlLGIwLGUpfX1iRy5mbi5sb2FkPWZ1bmN0aW9uKGIxLGI0LGI1KXtpZih0eXBlb2YgYjEhPT0ic3RyaW5nIiYmYlcpe3JldHVybiBiVy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9aWYoIXRoaXMubGVuZ3RoKXtyZXR1cm4gdGhpc312YXIgZSxiMixiMCxiWj10aGlzLGIzPWIxLmluZGV4T2YoIiAiKTtpZihiMz49MCl7ZT1iMS5zbGljZShiMyxiMS5sZW5ndGgpO2IxPWIxLnNsaWNlKDAsYjMpfWlmKGJHLmlzRnVuY3Rpb24oYjQpKXtiNT1iNDtiND1hQn1lbHNle2lmKHR5cGVvZiBiND09PSJvYmplY3QiKXtiMj0iUE9TVCJ9fWJHLmFqYXgoe3VybDpiMSx0eXBlOmIyLGRhdGFUeXBlOiJodG1sIixkYXRhOmI0LGNvbXBsZXRlOmZ1bmN0aW9uKGI3LGI2KXtpZihiNSl7YlouZWFjaChiNSxiMHx8W2I3LnJlc3BvbnNlVGV4dCxiNixiN10pfX19KS5kb25lKGZ1bmN0aW9uKGI2KXtiMD1hcmd1bWVudHM7YlouaHRtbChlP2JHKCI8ZGl2PiIpLmFwcGVuZChiNi5yZXBsYWNlKGcsIiIpKS5maW5kKGUpOmI2KX0pO3JldHVybiB0aGlzfTtiRy5lYWNoKCJhamF4U3RhcnQgYWpheFN0b3AgYWpheENvbXBsZXRlIGFqYXhFcnJvciBhamF4U3VjY2VzcyBhamF4U2VuZCIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLGJaKXtiRy5mbltiWl09ZnVuY3Rpb24oYjApe3JldHVybiB0aGlzLm9uKGJaLGIwKX19KTtiRy5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGUsYlope2JHW2JaXT1mdW5jdGlvbihiMCxiMixiMyxiMSl7aWYoYkcuaXNGdW5jdGlvbihiMikpe2IxPWIxfHxiMztiMz1iMjtiMj1hQn1yZXR1cm4gYkcuYWpheCh7dHlwZTpiWix1cmw6YjAsZGF0YTpiMixzdWNjZXNzOmIzLGRhdGFUeXBlOmIxfSl9fSk7YkcuZXh0ZW5kKHtnZXRTY3JpcHQ6ZnVuY3Rpb24oZSxiWil7cmV0dXJuIGJHLmdldChlLGFCLGJaLCJzY3JpcHQiKX0sZ2V0SlNPTjpmdW5jdGlvbihlLGJaLGIwKXtyZXR1cm4gYkcuZ2V0KGUsYlosYjAsImpzb24iKX0sYWpheFNldHVwOmZ1bmN0aW9uKGJaLGUpe2lmKGUpe3UoYlosYkcuYWpheFNldHRpbmdzKX1lbHNle2U9Ylo7Ylo9YkcuYWpheFNldHRpbmdzfXUoYlosZSk7cmV0dXJuIGJafSxhamF4U2V0dGluZ3M6e3VybDpZLGlzTG9jYWw6Qy50ZXN0KGJYWzFdKSxnbG9iYWw6dHJ1ZSx0eXBlOiJHRVQiLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLHByb2Nlc3NEYXRhOnRydWUsYXN5bmM6dHJ1ZSxhY2NlcHRzOnt4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGh0bWw6InRleHQvaHRtbCIsdGV4dDoidGV4dC9wbGFpbiIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwiKiI6YVh9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjphMi5TdHJpbmcsInRleHQgaHRtbCI6dHJ1ZSwidGV4dCBqc29uIjpiRy5wYXJzZUpTT04sInRleHQgeG1sIjpiRy5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e2NvbnRleHQ6dHJ1ZSx1cmw6dHJ1ZX19LGFqYXhQcmVmaWx0ZXI6YkkodyksYWpheFRyYW5zcG9ydDpiSShhNiksYWpheDpmdW5jdGlvbihiNCxiMSl7aWYodHlwZW9mIGI0PT09Im9iamVjdCIpe2IxPWI0O2I0PWFCfWIxPWIxfHx7fTt2YXIgYjcsY2wsYjIsY2csYjksY2QsYjAsY2YsYjg9YkcuYWpheFNldHVwKHt9LGIxKSxjbj1iOC5jb250ZXh0fHxiOCxjYj1jbiE9PWI4JiYoY24ubm9kZVR5cGV8fGNuIGluc3RhbmNlb2YgYkcpP2JHKGNuKTpiRy5ldmVudCxjbT1iRy5EZWZlcnJlZCgpLGNpPWJHLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxiNT1iOC5zdGF0dXNDb2RlfHx7fSxjYz17fSxjaj17fSxiMz0wLGI2PSJjYW5jZWxlZCIsY2U9e3JlYWR5U3RhdGU6MCxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGNvLGNwKXtpZighYjMpe3ZhciBlPWNvLnRvTG93ZXJDYXNlKCk7Y289Y2pbZV09Y2pbZV18fGNvO2NjW2NvXT1jcH1yZXR1cm4gdGhpc30sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGIzPT09Mj9jbDpudWxsfSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihjbyl7dmFyIGU7aWYoYjM9PT0yKXtpZighYjIpe2IyPXt9O3doaWxlKChlPWFkLmV4ZWMoY2wpKSl7YjJbZVsxXS50b0xvd2VyQ2FzZSgpXT1lWzJdfX1lPWIyW2NvLnRvTG93ZXJDYXNlKCldfXJldHVybiBlPT09YUI/bnVsbDplfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe2lmKCFiMyl7YjgubWltZVR5cGU9ZX1yZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7ZT1lfHxiNjtpZihjZyl7Y2cuYWJvcnQoZSl9Y2EoMCxlKTtyZXR1cm4gdGhpc319O2Z1bmN0aW9uIGNhKGNzLGNvLGN0LGNxKXt2YXIgZSxjdyxjdSxjcixjdixjcD1jbztpZihiMz09PTIpe3JldHVybn1iMz0yO2lmKGI5KXtjbGVhclRpbWVvdXQoYjkpfWNnPWFCO2NsPWNxfHwiIjtjZS5yZWFkeVN0YXRlPWNzPjA/NDowO2lmKGN0KXtjcj1oKGI4LGNlLGN0KX1pZihjcz49MjAwJiZjczwzMDB8fGNzPT09MzA0KXtpZihiOC5pZk1vZGlmaWVkKXtjdj1jZS5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpO2lmKGN2KXtiRy5sYXN0TW9kaWZpZWRbYjddPWN2fWN2PWNlLmdldFJlc3BvbnNlSGVhZGVyKCJFdGFnIik7aWYoY3Ype2JHLmV0YWdbYjddPWN2fX1pZihjcz09PTMwNCl7Y3A9Im5vdG1vZGlmaWVkIjtlPXRydWV9ZWxzZXtlPWFlKGI4LGNyKTtjcD1lLnN0YXRlO2N3PWUuZGF0YTtjdT1lLmVycm9yO2U9IWN1fX1lbHNle2N1PWNwO2lmKCFjcHx8Y3Mpe2NwPSJlcnJvciI7aWYoY3M8MCl7Y3M9MH19fWNlLnN0YXR1cz1jcztjZS5zdGF0dXNUZXh0PSIiKyhjb3x8Y3ApO2lmKGUpe2NtLnJlc29sdmVXaXRoKGNuLFtjdyxjcCxjZV0pfWVsc2V7Y20ucmVqZWN0V2l0aChjbixbY2UsY3AsY3VdKX1jZS5zdGF0dXNDb2RlKGI1KTtiNT1hQjtpZihiMCl7Y2IudHJpZ2dlcigiYWpheCIrKGU/IlN1Y2Nlc3MiOiJFcnJvciIpLFtjZSxiOCxlP2N3OmN1XSl9Y2kuZmlyZVdpdGgoY24sW2NlLGNwXSk7aWYoYjApe2NiLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW2NlLGI4XSk7aWYoISgtLWJHLmFjdGl2ZSkpe2JHLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIil9fX1jbS5wcm9taXNlKGNlKTtjZS5zdWNjZXNzPWNlLmRvbmU7Y2UuZXJyb3I9Y2UuZmFpbDtjZS5jb21wbGV0ZT1jaS5hZGQ7Y2Uuc3RhdHVzQ29kZT1mdW5jdGlvbihjbyl7aWYoY28pe3ZhciBlO2lmKGIzPDIpe2ZvcihlIGluIGNvKXtiNVtlXT1bYjVbZV0sY29bZV1dfX1lbHNle2U9Y29bY2Uuc3RhdHVzXTtjZS5hbHdheXMoZSl9fXJldHVybiB0aGlzfTtiOC51cmw9KChiNHx8YjgudXJsKSsiIikucmVwbGFjZShhbiwiIikucmVwbGFjZShhQyxiWFsxXSsiLy8iKTtiOC5kYXRhVHlwZXM9YkcudHJpbShiOC5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLnNwbGl0KGFWKTtpZihiOC5jcm9zc0RvbWFpbj09bnVsbCl7Y2Q9YVQuZXhlYyhiOC51cmwudG9Mb3dlckNhc2UoKSk7YjguY3Jvc3NEb21haW49ISEoY2QmJihjZFsxXSE9YlhbMV18fGNkWzJdIT1iWFsyXXx8KGNkWzNdfHwoY2RbMV09PT0iaHR0cDoiPzgwOjQ0MykpIT0oYlhbM118fChiWFsxXT09PSJodHRwOiI/ODA6NDQzKSkpKX1pZihiOC5kYXRhJiZiOC5wcm9jZXNzRGF0YSYmdHlwZW9mIGI4LmRhdGEhPT0ic3RyaW5nIil7YjguZGF0YT1iRy5wYXJhbShiOC5kYXRhLGI4LnRyYWRpdGlvbmFsKX1yKHcsYjgsYjEsY2UpO2lmKGIzPT09Mil7cmV0dXJuIGNlfWIwPWI4Lmdsb2JhbDtiOC50eXBlPWI4LnR5cGUudG9VcHBlckNhc2UoKTtiOC5oYXNDb250ZW50PSFzLnRlc3QoYjgudHlwZSk7aWYoYjAmJmJHLmFjdGl2ZSsrPT09MCl7YkcuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iil9aWYoIWI4Lmhhc0NvbnRlbnQpe2lmKGI4LmRhdGEpe2I4LnVybCs9KGJOLnRlc3QoYjgudXJsKT8iJiI6Ij8iKStiOC5kYXRhO2RlbGV0ZSBiOC5kYXRhfWI3PWI4LnVybDtpZihiOC5jYWNoZT09PWZhbHNlKXt2YXIgYlo9Ykcubm93KCksY2s9YjgudXJsLnJlcGxhY2UoUCwiJDFfPSIrYlopO2I4LnVybD1jaysoKGNrPT09YjgudXJsKT8oYk4udGVzdChiOC51cmwpPyImIjoiPyIpKyJfPSIrYlo6IiIpfX1pZihiOC5kYXRhJiZiOC5oYXNDb250ZW50JiZiOC5jb250ZW50VHlwZSE9PWZhbHNlfHxiMS5jb250ZW50VHlwZSl7Y2Uuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIixiOC5jb250ZW50VHlwZSl9aWYoYjguaWZNb2RpZmllZCl7Yjc9Yjd8fGI4LnVybDtpZihiRy5sYXN0TW9kaWZpZWRbYjddKXtjZS5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsYkcubGFzdE1vZGlmaWVkW2I3XSl9aWYoYkcuZXRhZ1tiN10pe2NlLnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLGJHLmV0YWdbYjddKX19Y2Uuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixiOC5kYXRhVHlwZXNbMF0mJmI4LmFjY2VwdHNbYjguZGF0YVR5cGVzWzBdXT9iOC5hY2NlcHRzW2I4LmRhdGFUeXBlc1swXV0rKGI4LmRhdGFUeXBlc1swXSE9PSIqIj8iLCAiK2FYKyI7IHE9MC4wMSI6IiIpOmI4LmFjY2VwdHNbIioiXSk7Zm9yKGNmIGluIGI4LmhlYWRlcnMpe2NlLnNldFJlcXVlc3RIZWFkZXIoY2YsYjguaGVhZGVyc1tjZl0pfWlmKGI4LmJlZm9yZVNlbmQmJihiOC5iZWZvcmVTZW5kLmNhbGwoY24sY2UsYjgpPT09ZmFsc2V8fGIzPT09Mikpe3JldHVybiBjZS5hYm9ydCgpfWI2PSJhYm9ydCI7Zm9yKGNmIGluIHtzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSl7Y2VbY2ZdKGI4W2NmXSl9Y2c9cihhNixiOCxiMSxjZSk7aWYoIWNnKXtjYSgtMSwiTm8gVHJhbnNwb3J0Iil9ZWxzZXtjZS5yZWFkeVN0YXRlPTE7aWYoYjApe2NiLnRyaWdnZXIoImFqYXhTZW5kIixbY2UsYjhdKX1pZihiOC5hc3luYyYmYjgudGltZW91dD4wKXtiOT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Y2UuYWJvcnQoInRpbWVvdXQiKX0sYjgudGltZW91dCl9dHJ5e2IzPTE7Y2cuc2VuZChjYyxjYSl9Y2F0Y2goY2gpe2lmKGIzPDIpe2NhKC0xLGNoKX1lbHNle3Rocm93IGNofX19cmV0dXJuIGNlfSxhY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fX0pO2Z1bmN0aW9uIGgoYjcsYjYsYjMpe3ZhciBiMixiNCxiMSxlLGJaPWI3LmNvbnRlbnRzLGI1PWI3LmRhdGFUeXBlcyxiMD1iNy5yZXNwb25zZUZpZWxkcztmb3IoYjQgaW4gYjApe2lmKGI0IGluIGIzKXtiNltiMFtiNF1dPWIzW2I0XX19d2hpbGUoYjVbMF09PT0iKiIpe2I1LnNoaWZ0KCk7aWYoYjI9PT1hQil7YjI9YjcubWltZVR5cGV8fGI2LmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKX19aWYoYjIpe2ZvcihiNCBpbiBiWil7aWYoYlpbYjRdJiZiWltiNF0udGVzdChiMikpe2I1LnVuc2hpZnQoYjQpO2JyZWFrfX19aWYoYjVbMF0gaW4gYjMpe2IxPWI1WzBdfWVsc2V7Zm9yKGI0IGluIGIzKXtpZighYjVbMF18fGI3LmNvbnZlcnRlcnNbYjQrIiAiK2I1WzBdXSl7YjE9YjQ7YnJlYWt9aWYoIWUpe2U9YjR9fWIxPWIxfHxlfWlmKGIxKXtpZihiMSE9PWI1WzBdKXtiNS51bnNoaWZ0KGIxKX1yZXR1cm4gYjNbYjFdfX1mdW5jdGlvbiBhZShiOSxiMSl7dmFyIGI3LGJaLGI1LGIzLGI2PWI5LmRhdGFUeXBlcy5zbGljZSgpLGIwPWI2WzBdLGI4PXt9LGIyPTA7aWYoYjkuZGF0YUZpbHRlcil7YjE9YjkuZGF0YUZpbHRlcihiMSxiOS5kYXRhVHlwZSl9aWYoYjZbMV0pe2ZvcihiNyBpbiBiOS5jb252ZXJ0ZXJzKXtiOFtiNy50b0xvd2VyQ2FzZSgpXT1iOS5jb252ZXJ0ZXJzW2I3XX19Zm9yKDsoYjU9YjZbKytiMl0pOyl7aWYoYjUhPT0iKiIpe2lmKGIwIT09IioiJiZiMCE9PWI1KXtiNz1iOFtiMCsiICIrYjVdfHxiOFsiKiAiK2I1XTtpZighYjcpe2ZvcihiWiBpbiBiOCl7YjM9Ylouc3BsaXQoIiAiKTtpZihiM1sxXT09PWI1KXtiNz1iOFtiMCsiICIrYjNbMF1dfHxiOFsiKiAiK2IzWzBdXTtpZihiNyl7aWYoYjc9PT10cnVlKXtiNz1iOFtiWl19ZWxzZXtpZihiOFtiWl0hPT10cnVlKXtiNT1iM1swXTtiNi5zcGxpY2UoYjItLSwwLGI1KX19YnJlYWt9fX19aWYoYjchPT10cnVlKXtpZihiNyYmYjlbInRocm93cyJdKXtiMT1iNyhiMSl9ZWxzZXt0cnl7YjE9YjcoYjEpfWNhdGNoKGI0KXtyZXR1cm57c3RhdGU6InBhcnNlcmVycm9yIixlcnJvcjpiNz9iNDoiTm8gY29udmVyc2lvbiBmcm9tICIrYjArIiB0byAiK2I1fX19fX1iMD1iNX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOmIxfX12YXIgYnA9W10sYXc9L1w/LyxhNT0vKD0pXD8oPz0mfCQpfFw/XD8vLGJsPWJHLm5vdygpO2JHLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9YnAucG9wKCl8fChiRy5leHBhbmRvKyJfIisoYmwrKykpO3RoaXNbZV09dHJ1ZTtyZXR1cm4gZX19KTtiRy5hamF4UHJlZmlsdGVyKCJqc29uIGpzb25wIixmdW5jdGlvbihiOCxiMyxiNyl7dmFyIGI2LGUsYjUsYjE9YjguZGF0YSxiWj1iOC51cmwsYjA9YjguanNvbnAhPT1mYWxzZSxiND1iMCYmYTUudGVzdChiWiksYjI9YjAmJiFiNCYmdHlwZW9mIGIxPT09InN0cmluZyImJiEoYjguY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmYTUudGVzdChiMSk7aWYoYjguZGF0YVR5cGVzWzBdPT09Impzb25wInx8YjR8fGIyKXtiNj1iOC5qc29ucENhbGxiYWNrPWJHLmlzRnVuY3Rpb24oYjguanNvbnBDYWxsYmFjayk/YjguanNvbnBDYWxsYmFjaygpOmI4Lmpzb25wQ2FsbGJhY2s7ZT1hMltiNl07aWYoYjQpe2I4LnVybD1iWi5yZXBsYWNlKGE1LCIkMSIrYjYpfWVsc2V7aWYoYjIpe2I4LmRhdGE9YjEucmVwbGFjZShhNSwiJDEiK2I2KX1lbHNle2lmKGIwKXtiOC51cmwrPShhdy50ZXN0KGJaKT8iJiI6Ij8iKStiOC5qc29ucCsiPSIrYjZ9fX1iOC5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7aWYoIWI1KXtiRy5lcnJvcihiNisiIHdhcyBub3QgY2FsbGVkIil9cmV0dXJuIGI1WzBdfTtiOC5kYXRhVHlwZXNbMF09Impzb24iO2EyW2I2XT1mdW5jdGlvbigpe2I1PWFyZ3VtZW50c307YjcuYWx3YXlzKGZ1bmN0aW9uKCl7YTJbYjZdPWU7aWYoYjhbYjZdKXtiOC5qc29ucENhbGxiYWNrPWIzLmpzb25wQ2FsbGJhY2s7YnAucHVzaChiNil9aWYoYjUmJmJHLmlzRnVuY3Rpb24oZSkpe2UoYjVbMF0pfWI1PWU9YUJ9KTtyZXR1cm4ic2NyaXB0In19KTtiRy5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi9qYXZhc2NyaXB0fGVjbWFzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGUpe2JHLmdsb2JhbEV2YWwoZSk7cmV0dXJuIGV9fX0pO2JHLmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsZnVuY3Rpb24oZSl7aWYoZS5jYWNoZT09PWFCKXtlLmNhY2hlPWZhbHNlfWlmKGUuY3Jvc3NEb21haW4pe2UudHlwZT0iR0VUIjtlLmdsb2JhbD1mYWxzZX19KTtiRy5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGIwKXtpZihiMC5jcm9zc0RvbWFpbil7dmFyIGUsYlo9by5oZWFkfHxvLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fG8uZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKGIxLGIyKXtlPW8uY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7ZS5hc3luYz0iYXN5bmMiO2lmKGIwLnNjcmlwdENoYXJzZXQpe2UuY2hhcnNldD1iMC5zY3JpcHRDaGFyc2V0fWUuc3JjPWIwLnVybDtlLm9ubG9hZD1lLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihiNCxiMyl7aWYoYjN8fCFlLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZS5yZWFkeVN0YXRlKSl7ZS5vbmxvYWQ9ZS5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbDtpZihiWiYmZS5wYXJlbnROb2RlKXtiWi5yZW1vdmVDaGlsZChlKX1lPWFCO2lmKCFiMyl7YjIoMjAwLCJzdWNjZXNzIil9fX07YlouaW5zZXJ0QmVmb3JlKGUsYlouZmlyc3RDaGlsZCl9LGFib3J0OmZ1bmN0aW9uKCl7aWYoZSl7ZS5vbmxvYWQoMCwxKX19fX19KTt2YXIgYWgsYU89YTIuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe2Zvcih2YXIgZSBpbiBhaCl7YWhbZV0oMCwxKX19OmZhbHNlLGF1PTA7ZnVuY3Rpb24gYkIoKXt0cnl7cmV0dXJuIG5ldyBhMi5YTUxIdHRwUmVxdWVzdCgpfWNhdGNoKGJaKXt9fWZ1bmN0aW9uIGJiKCl7dHJ5e3JldHVybiBuZXcgYTIuQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKX1jYXRjaChiWil7fX1iRy5hamF4U2V0dGluZ3MueGhyPWEyLkFjdGl2ZVhPYmplY3Q/ZnVuY3Rpb24oKXtyZXR1cm4gIXRoaXMuaXNMb2NhbCYmYkIoKXx8YmIoKX06YkI7KGZ1bmN0aW9uKGUpe2JHLmV4dGVuZChiRy5zdXBwb3J0LHthamF4OiEhZSxjb3JzOiEhZSYmKCJ3aXRoQ3JlZGVudGlhbHMiIGluIGUpfSl9KShiRy5hamF4U2V0dGluZ3MueGhyKCkpO2lmKGJHLnN1cHBvcnQuYWpheCl7YkcuYWpheFRyYW5zcG9ydChmdW5jdGlvbihlKXtpZighZS5jcm9zc0RvbWFpbnx8Ykcuc3VwcG9ydC5jb3JzKXt2YXIgYlo7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oYjUsYjApe3ZhciBiMyxiMixiND1lLnhocigpO2lmKGUudXNlcm5hbWUpe2I0Lm9wZW4oZS50eXBlLGUudXJsLGUuYXN5bmMsZS51c2VybmFtZSxlLnBhc3N3b3JkKX1lbHNle2I0Lm9wZW4oZS50eXBlLGUudXJsLGUuYXN5bmMpfWlmKGUueGhyRmllbGRzKXtmb3IoYjIgaW4gZS54aHJGaWVsZHMpe2I0W2IyXT1lLnhockZpZWxkc1tiMl19fWlmKGUubWltZVR5cGUmJmI0Lm92ZXJyaWRlTWltZVR5cGUpe2I0Lm92ZXJyaWRlTWltZVR5cGUoZS5taW1lVHlwZSl9aWYoIWUuY3Jvc3NEb21haW4mJiFiNVsiWC1SZXF1ZXN0ZWQtV2l0aCJdKXtiNVsiWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRwUmVxdWVzdCJ9dHJ5e2ZvcihiMiBpbiBiNSl7YjQuc2V0UmVxdWVzdEhlYWRlcihiMixiNVtiMl0pfX1jYXRjaChiMSl7fWI0LnNlbmQoKGUuaGFzQ29udGVudCYmZS5kYXRhKXx8bnVsbCk7Ylo9ZnVuY3Rpb24oY2UsYjgpe3ZhciBiOSxiNyxiNixjYyxjYjt0cnl7aWYoYlomJihiOHx8YjQucmVhZHlTdGF0ZT09PTQpKXtiWj1hQjtpZihiMyl7YjQub25yZWFkeXN0YXRlY2hhbmdlPWJHLm5vb3A7aWYoYU8pe2RlbGV0ZSBhaFtiM119fWlmKGI4KXtpZihiNC5yZWFkeVN0YXRlIT09NCl7YjQuYWJvcnQoKX19ZWxzZXtiOT1iNC5zdGF0dXM7YjY9YjQuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7Y2M9e307Y2I9YjQucmVzcG9uc2VYTUw7aWYoY2ImJmNiLmRvY3VtZW50RWxlbWVudCl7Y2MueG1sPWNifXRyeXtjYy50ZXh0PWI0LnJlc3BvbnNlVGV4dH1jYXRjaChjZSl7fXRyeXtiNz1iNC5zdGF0dXNUZXh0fWNhdGNoKGNkKXtiNz0iIn1pZighYjkmJmUuaXNMb2NhbCYmIWUuY3Jvc3NEb21haW4pe2I5PWNjLnRleHQ/MjAwOjQwNH1lbHNle2lmKGI5PT09MTIyMyl7Yjk9MjA0fX19fX1jYXRjaChjYSl7aWYoIWI4KXtiMCgtMSxjYSl9fWlmKGNjKXtiMChiOSxiNyxjYyxiNil9fTtpZighZS5hc3luYyl7YlooKX1lbHNle2lmKGI0LnJlYWR5U3RhdGU9PT00KXtzZXRUaW1lb3V0KGJaLDApfWVsc2V7YjM9KythdTtpZihhTyl7aWYoIWFoKXthaD17fTtiRyhhMikudW5sb2FkKGFPKX1haFtiM109Ylp9YjQub25yZWFkeXN0YXRlY2hhbmdlPWJafX19LGFib3J0OmZ1bmN0aW9uKCl7aWYoYlope2JaKDAsMSl9fX19fSl9dmFyIEwsYWIsYk89L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGJIPW5ldyBSZWdFeHAoIl4oPzooWy0rXSk9fCkoIitieCsiKShbYS16JV0qKSQiLCJpIiksYk09L3F1ZXVlSG9va3MkLyxheD1baV0sYTE9eyIqIjpbZnVuY3Rpb24oYlosYjUpe3ZhciBiMixiNixlLGI3PXRoaXMuY3JlYXRlVHdlZW4oYlosYjUpLGIzPWJILmV4ZWMoYjUpLGI0PWI3LmN1cigpLGIwPStiNHx8MCxiMT0xO2lmKGIzKXtiMj0rYjNbMl07YjY9YjNbM118fChiRy5jc3NOdW1iZXJbYlpdPyIiOiJweCIpO2lmKGI2IT09InB4IiYmYjApe2IwPWJHLmNzcyhiNy5lbGVtLGJaLHRydWUpfHxiMnx8MTtkb3tlPWIxPWIxfHwiLjUiO2IwPWIwL2IxO2JHLnN0eWxlKGI3LmVsZW0sYlosYjArYjYpO2IxPWI3LmN1cigpL2I0fXdoaWxlKGIxIT09MSYmYjEhPT1lKX1iNy51bml0PWI2O2I3LnN0YXJ0PWIwO2I3LmVuZD1iM1sxXT9iMCsoYjNbMV0rMSkqYjI6YjJ9cmV0dXJuIGI3fV19O2Z1bmN0aW9uIGJqKCl7c2V0VGltZW91dChmdW5jdGlvbigpe0w9YUJ9LDApO3JldHVybihMPWJHLm5vdygpKX1mdW5jdGlvbiBiYyhiWixlKXtiRy5lYWNoKGUsZnVuY3Rpb24oYjQsYjIpe3ZhciBiMz0oYTFbYjRdfHxbXSkuY29uY2F0KGExWyIqIl0pLGIwPTAsYjE9YjMubGVuZ3RoO2Zvcig7YjA8YjE7YjArKyl7aWYoYjNbYjBdLmNhbGwoYlosYjQsYjIpKXtyZXR1cm59fX0pfWZ1bmN0aW9uIGYoYjAsYjQsYjcpe3ZhciBiOCxiMz0wLGU9MCxiWj1heC5sZW5ndGgsYjY9YkcuRGVmZXJyZWQoKS5hbHdheXMoZnVuY3Rpb24oKXtkZWxldGUgYjIuZWxlbX0pLGIyPWZ1bmN0aW9uKCl7dmFyIGNkPUx8fGJqKCksY2E9TWF0aC5tYXgoMCxiMS5zdGFydFRpbWUrYjEuZHVyYXRpb24tY2QpLGNjPTEtKGNhL2IxLmR1cmF0aW9ufHwwKSxiOT0wLGNiPWIxLnR3ZWVucy5sZW5ndGg7Zm9yKDtiOTxjYjtiOSsrKXtiMS50d2VlbnNbYjldLnJ1bihjYyl9YjYubm90aWZ5V2l0aChiMCxbYjEsY2MsY2FdKTtpZihjYzwxJiZjYil7cmV0dXJuIGNhfWVsc2V7YjYucmVzb2x2ZVdpdGgoYjAsW2IxXSk7cmV0dXJuIGZhbHNlfX0sYjE9YjYucHJvbWlzZSh7ZWxlbTpiMCxwcm9wczpiRy5leHRlbmQoe30sYjQpLG9wdHM6YkcuZXh0ZW5kKHRydWUse3NwZWNpYWxFYXNpbmc6e319LGI3KSxvcmlnaW5hbFByb3BlcnRpZXM6YjQsb3JpZ2luYWxPcHRpb25zOmI3LHN0YXJ0VGltZTpMfHxiaigpLGR1cmF0aW9uOmI3LmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihjYyxiOSxjYil7dmFyIGNhPWJHLlR3ZWVuKGIwLGIxLm9wdHMsY2MsYjksYjEub3B0cy5zcGVjaWFsRWFzaW5nW2NjXXx8YjEub3B0cy5lYXNpbmcpO2IxLnR3ZWVucy5wdXNoKGNhKTtyZXR1cm4gY2F9LHN0b3A6ZnVuY3Rpb24oY2Epe3ZhciBiOT0wLGNiPWNhP2IxLnR3ZWVucy5sZW5ndGg6MDtmb3IoO2I5PGNiO2I5Kyspe2IxLnR3ZWVuc1tiOV0ucnVuKDEpfWlmKGNhKXtiNi5yZXNvbHZlV2l0aChiMCxbYjEsY2FdKX1lbHNle2I2LnJlamVjdFdpdGgoYjAsW2IxLGNhXSl9cmV0dXJuIHRoaXN9fSksYjU9YjEucHJvcHM7YWsoYjUsYjEub3B0cy5zcGVjaWFsRWFzaW5nKTtmb3IoO2IzPGJaO2IzKyspe2I4PWF4W2IzXS5jYWxsKGIxLGIwLGI1LGIxLm9wdHMpO2lmKGI4KXtyZXR1cm4gYjh9fWJjKGIxLGI1KTtpZihiRy5pc0Z1bmN0aW9uKGIxLm9wdHMuc3RhcnQpKXtiMS5vcHRzLnN0YXJ0LmNhbGwoYjAsYjEpfWJHLmZ4LnRpbWVyKGJHLmV4dGVuZChiMix7YW5pbTpiMSxxdWV1ZTpiMS5vcHRzLnF1ZXVlLGVsZW06YjB9KSk7cmV0dXJuIGIxLnByb2dyZXNzKGIxLm9wdHMucHJvZ3Jlc3MpLmRvbmUoYjEub3B0cy5kb25lLGIxLm9wdHMuY29tcGxldGUpLmZhaWwoYjEub3B0cy5mYWlsKS5hbHdheXMoYjEub3B0cy5hbHdheXMpfWZ1bmN0aW9uIGFrKGIxLGIzKXt2YXIgYjAsYlosYjQsYjIsZTtmb3IoYjAgaW4gYjEpe2JaPWJHLmNhbWVsQ2FzZShiMCk7YjQ9YjNbYlpdO2IyPWIxW2IwXTtpZihiRy5pc0FycmF5KGIyKSl7YjQ9YjJbMV07YjI9YjFbYjBdPWIyWzBdfWlmKGIwIT09Ylope2IxW2JaXT1iMjtkZWxldGUgYjFbYjBdfWU9YkcuY3NzSG9va3NbYlpdO2lmKGUmJiJleHBhbmQiIGluIGUpe2IyPWUuZXhwYW5kKGIyKTtkZWxldGUgYjFbYlpdO2ZvcihiMCBpbiBiMil7aWYoIShiMCBpbiBiMSkpe2IxW2IwXT1iMltiMF07YjNbYjBdPWI0fX19ZWxzZXtiM1tiWl09YjR9fX1iRy5BbmltYXRpb249YkcuZXh0ZW5kKGYse3R3ZWVuZXI6ZnVuY3Rpb24oYlosYjIpe2lmKGJHLmlzRnVuY3Rpb24oYlopKXtiMj1iWjtiWj1bIioiXX1lbHNle2JaPWJaLnNwbGl0KCIgIil9dmFyIGIxLGU9MCxiMD1iWi5sZW5ndGg7Zm9yKDtlPGIwO2UrKyl7YjE9YlpbZV07YTFbYjFdPWExW2IxXXx8W107YTFbYjFdLnVuc2hpZnQoYjIpfX0scHJlZmlsdGVyOmZ1bmN0aW9uKGJaLGUpe2lmKGUpe2F4LnVuc2hpZnQoYlopfWVsc2V7YXgucHVzaChiWil9fX0pO2Z1bmN0aW9uIGkoYjIsYjcsZSl7dmFyIGI2LGIwLGI5LGIxLGNkLGNjLGNiLGNhLGIzPXRoaXMsYlo9YjIuc3R5bGUsYjg9e30sYjU9W10sYjQ9YjIubm9kZVR5cGUmJlEoYjIpO2lmKCFlLnF1ZXVlKXtjYj1iRy5fcXVldWVIb29rcyhiMiwiZngiKTtpZihjYi51bnF1ZXVlZD09bnVsbCl7Y2IudW5xdWV1ZWQ9MDtjYT1jYi5lbXB0eS5maXJlO2NiLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXtpZighY2IudW5xdWV1ZWQpe2NhKCl9fX1jYi51bnF1ZXVlZCsrO2IzLmFsd2F5cyhmdW5jdGlvbigpe2IzLmFsd2F5cyhmdW5jdGlvbigpe2NiLnVucXVldWVkLS07aWYoIWJHLnF1ZXVlKGIyLCJmeCIpLmxlbmd0aCl7Y2IuZW1wdHkuZmlyZSgpfX0pfSl9aWYoYjIubm9kZVR5cGU9PT0xJiYoImhlaWdodCIgaW4gYjd8fCJ3aWR0aCIgaW4gYjcpKXtlLm92ZXJmbG93PVtiWi5vdmVyZmxvdyxiWi5vdmVyZmxvd1gsYloub3ZlcmZsb3dZXTtpZihiRy5jc3MoYjIsImRpc3BsYXkiKT09PSJpbmxpbmUiJiZiRy5jc3MoYjIsImZsb2F0Iik9PT0ibm9uZSIpe2lmKCFiRy5zdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXR8fGJDKGIyLm5vZGVOYW1lKT09PSJpbmxpbmUiKXtiWi5kaXNwbGF5PSJpbmxpbmUtYmxvY2sifWVsc2V7Ylouem9vbT0xfX19aWYoZS5vdmVyZmxvdyl7Yloub3ZlcmZsb3c9ImhpZGRlbiI7aWYoIWJHLnN1cHBvcnQuc2hyaW5rV3JhcEJsb2Nrcyl7YjMuZG9uZShmdW5jdGlvbigpe2JaLm92ZXJmbG93PWUub3ZlcmZsb3dbMF07Yloub3ZlcmZsb3dYPWUub3ZlcmZsb3dbMV07Yloub3ZlcmZsb3dZPWUub3ZlcmZsb3dbMl19KX19Zm9yKGI2IGluIGI3KXtiOT1iN1tiNl07aWYoYk8uZXhlYyhiOSkpe2RlbGV0ZSBiN1tiNl07aWYoYjk9PT0oYjQ/ImhpZGUiOiJzaG93Iikpe2NvbnRpbnVlfWI1LnB1c2goYjYpfX1iMT1iNS5sZW5ndGg7aWYoYjEpe2NkPWJHLl9kYXRhKGIyLCJmeHNob3ciKXx8YkcuX2RhdGEoYjIsImZ4c2hvdyIse30pO2lmKGI0KXtiRyhiMikuc2hvdygpfWVsc2V7YjMuZG9uZShmdW5jdGlvbigpe2JHKGIyKS5oaWRlKCl9KX1iMy5kb25lKGZ1bmN0aW9uKCl7dmFyIGNlO2JHLnJlbW92ZURhdGEoYjIsImZ4c2hvdyIsdHJ1ZSk7Zm9yKGNlIGluIGI4KXtiRy5zdHlsZShiMixjZSxiOFtjZV0pfX0pO2ZvcihiNj0wO2I2PGIxO2I2Kyspe2IwPWI1W2I2XTtjYz1iMy5jcmVhdGVUd2VlbihiMCxiND9jZFtiMF06MCk7YjhbYjBdPWNkW2IwXXx8Ykcuc3R5bGUoYjIsYjApO2lmKCEoYjAgaW4gY2QpKXtjZFtiMF09Y2Muc3RhcnQ7aWYoYjQpe2NjLmVuZD1jYy5zdGFydDtjYy5zdGFydD1iMD09PSJ3aWR0aCJ8fGIwPT09ImhlaWdodCI/MTowfX19fX1mdW5jdGlvbiBIKGIwLGJaLGIyLGUsYjEpe3JldHVybiBuZXcgSC5wcm90b3R5cGUuaW5pdChiMCxiWixiMixlLGIxKX1iRy5Ud2Vlbj1IO0gucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpILGluaXQ6ZnVuY3Rpb24oYjEsYlosYjMsZSxiMixiMCl7dGhpcy5lbGVtPWIxO3RoaXMucHJvcD1iMzt0aGlzLmVhc2luZz1iMnx8InN3aW5nIjt0aGlzLm9wdGlvbnM9Ylo7dGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpO3RoaXMuZW5kPWU7dGhpcy51bml0PWIwfHwoYkcuY3NzTnVtYmVyW2IzXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGU9SC5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gZSYmZS5nZXQ/ZS5nZXQodGhpcyk6SC5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oYjApe3ZhciBiWixlPUgucHJvcEhvb2tzW3RoaXMucHJvcF07dGhpcy5wb3M9Ylo9YkcuZWFzaW5nW3RoaXMuZWFzaW5nXShiMCx0aGlzLm9wdGlvbnMuZHVyYXRpb24qYjAsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik7dGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKmJaK3RoaXMuc3RhcnQ7aWYodGhpcy5vcHRpb25zLnN0ZXApe3RoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpfWlmKGUmJmUuc2V0KXtlLnNldCh0aGlzKX1lbHNle0gucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKX1yZXR1cm4gdGhpc319O0gucHJvdG90eXBlLmluaXQucHJvdG90eXBlPUgucHJvdG90eXBlO0gucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGJaKXt2YXIgZTtpZihiWi5lbGVtW2JaLnByb3BdIT1udWxsJiYoIWJaLmVsZW0uc3R5bGV8fGJaLmVsZW0uc3R5bGVbYloucHJvcF09PW51bGwpKXtyZXR1cm4gYlouZWxlbVtiWi5wcm9wXX1lPWJHLmNzcyhiWi5lbGVtLGJaLnByb3AsZmFsc2UsIiIpO3JldHVybiAhZXx8ZT09PSJhdXRvIj8wOmV9LHNldDpmdW5jdGlvbihlKXtpZihiRy5meC5zdGVwW2UucHJvcF0pe2JHLmZ4LnN0ZXBbZS5wcm9wXShlKX1lbHNle2lmKGUuZWxlbS5zdHlsZSYmKGUuZWxlbS5zdHlsZVtiRy5jc3NQcm9wc1tlLnByb3BdXSE9bnVsbHx8YkcuY3NzSG9va3NbZS5wcm9wXSkpe2JHLnN0eWxlKGUuZWxlbSxlLnByb3AsZS5ub3crZS51bml0KX1lbHNle2UuZWxlbVtlLnByb3BdPWUubm93fX19fX07SC5wcm9wSG9va3Muc2Nyb2xsVG9wPUgucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtpZihlLmVsZW0ubm9kZVR5cGUmJmUuZWxlbS5wYXJlbnROb2RlKXtlLmVsZW1bZS5wcm9wXT1lLm5vd319fTtiRy5lYWNoKFsidG9nZ2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihiWixlKXt2YXIgYjA9YkcuZm5bZV07YkcuZm5bZV09ZnVuY3Rpb24oYjEsYjMsYjIpe3JldHVybiBiMT09bnVsbHx8dHlwZW9mIGIxPT09ImJvb2xlYW4ifHwoIWJaJiZiRy5pc0Z1bmN0aW9uKGIxKSYmYkcuaXNGdW5jdGlvbihiMykpP2IwLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoYkYoZSx0cnVlKSxiMSxiMyxiMil9fSk7YkcuZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oZSxiMSxiMCxiWil7cmV0dXJuIHRoaXMuZmlsdGVyKFEpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6YjF9LGUsYjAsYlopfSxhbmltYXRlOmZ1bmN0aW9uKGI0LGIxLGIzLGIyKXt2YXIgYjA9YkcuaXNFbXB0eU9iamVjdChiNCksZT1iRy5zcGVlZChiMSxiMyxiMiksYlo9ZnVuY3Rpb24oKXt2YXIgYjU9Zih0aGlzLGJHLmV4dGVuZCh7fSxiNCksZSk7aWYoYjApe2I1LnN0b3AodHJ1ZSl9fTtyZXR1cm4gYjB8fGUucXVldWU9PT1mYWxzZT90aGlzLmVhY2goYlopOnRoaXMucXVldWUoZS5xdWV1ZSxiWil9LHN0b3A6ZnVuY3Rpb24oYjAsYlosZSl7dmFyIGIxPWZ1bmN0aW9uKGIyKXt2YXIgYjM9YjIuc3RvcDtkZWxldGUgYjIuc3RvcDtiMyhlKX07aWYodHlwZW9mIGIwIT09InN0cmluZyIpe2U9Ylo7Ylo9YjA7YjA9YUJ9aWYoYlomJmIwIT09ZmFsc2Upe3RoaXMucXVldWUoYjB8fCJmeCIsW10pfXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYjU9dHJ1ZSxiMj1iMCE9bnVsbCYmYjArInF1ZXVlSG9va3MiLGI0PWJHLnRpbWVycyxiMz1iRy5fZGF0YSh0aGlzKTtpZihiMil7aWYoYjNbYjJdJiZiM1tiMl0uc3RvcCl7YjEoYjNbYjJdKX19ZWxzZXtmb3IoYjIgaW4gYjMpe2lmKGIzW2IyXSYmYjNbYjJdLnN0b3AmJmJNLnRlc3QoYjIpKXtiMShiM1tiMl0pfX19Zm9yKGIyPWI0Lmxlbmd0aDtiMi0tOyl7aWYoYjRbYjJdLmVsZW09PT10aGlzJiYoYjA9PW51bGx8fGI0W2IyXS5xdWV1ZT09PWIwKSl7YjRbYjJdLmFuaW0uc3RvcChlKTtiNT1mYWxzZTtiNC5zcGxpY2UoYjIsMSl9fWlmKGI1fHwhZSl7YkcuZGVxdWV1ZSh0aGlzLGIwKX19KX19KTtmdW5jdGlvbiBiRihiMCxiMil7dmFyIGIxLGU9e2hlaWdodDpiMH0sYlo9MDtmb3IoO2JaPDQ7YlorPTItYjIpe2IxPWJRW2JaXTtlWyJtYXJnaW4iK2IxXT1lWyJwYWRkaW5nIitiMV09YjB9aWYoYjIpe2Uub3BhY2l0eT1lLndpZHRoPWIwfXJldHVybiBlfWJHLmVhY2goe3NsaWRlRG93bjpiRigic2hvdyIpLHNsaWRlVXA6YkYoImhpZGUiKSxzbGlkZVRvZ2dsZTpiRigidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihlLGJaKXtiRy5mbltlXT1mdW5jdGlvbihiMCxiMixiMSl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiWixiMCxiMixiMSl9fSk7Ykcuc3BlZWQ9ZnVuY3Rpb24oYjAsYjEsYlope3ZhciBlPWIwJiZ0eXBlb2YgYjA9PT0ib2JqZWN0Ij9iRy5leHRlbmQoe30sYjApOntjb21wbGV0ZTpiWnx8IWJaJiZiMXx8YkcuaXNGdW5jdGlvbihiMCkmJmIwLGR1cmF0aW9uOmIwLGVhc2luZzpiWiYmYjF8fGIxJiYhYkcuaXNGdW5jdGlvbihiMSkmJmIxfTtlLmR1cmF0aW9uPWJHLmZ4Lm9mZj8wOnR5cGVvZiBlLmR1cmF0aW9uPT09Im51bWJlciI/ZS5kdXJhdGlvbjplLmR1cmF0aW9uIGluIGJHLmZ4LnNwZWVkcz9iRy5meC5zcGVlZHNbZS5kdXJhdGlvbl06YkcuZnguc3BlZWRzLl9kZWZhdWx0O2lmKGUucXVldWU9PW51bGx8fGUucXVldWU9PT10cnVlKXtlLnF1ZXVlPSJmeCJ9ZS5vbGQ9ZS5jb21wbGV0ZTtlLmNvbXBsZXRlPWZ1bmN0aW9uKCl7aWYoYkcuaXNGdW5jdGlvbihlLm9sZCkpe2Uub2xkLmNhbGwodGhpcyl9aWYoZS5xdWV1ZSl7YkcuZGVxdWV1ZSh0aGlzLGUucXVldWUpfX07cmV0dXJuIGV9O2JHLmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxzd2luZzpmdW5jdGlvbihlKXtyZXR1cm4gMC41LU1hdGguY29zKGUqTWF0aC5QSSkvMn19O2JHLnRpbWVycz1bXTtiRy5meD1ILnByb3RvdHlwZS5pbml0O2JHLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYjAsYlo9YkcudGltZXJzLGU9MDtmb3IoO2U8YloubGVuZ3RoO2UrKyl7YjA9YlpbZV07aWYoIWIwKCkmJmJaW2VdPT09YjApe2JaLnNwbGljZShlLS0sMSl9fWlmKCFiWi5sZW5ndGgpe2JHLmZ4LnN0b3AoKX19O2JHLmZ4LnRpbWVyPWZ1bmN0aW9uKGUpe2lmKGUoKSYmYkcudGltZXJzLnB1c2goZSkmJiFhYil7YWI9c2V0SW50ZXJ2YWwoYkcuZngudGljayxiRy5meC5pbnRlcnZhbCl9fTtiRy5meC5pbnRlcnZhbD0xMztiRy5meC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChhYik7YWI9bnVsbH07YkcuZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9O2JHLmZ4LnN0ZXA9e307aWYoYkcuZXhwciYmYkcuZXhwci5maWx0ZXJzKXtiRy5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGJHLmdyZXAoYkcudGltZXJzLGZ1bmN0aW9uKGJaKXtyZXR1cm4gZT09PWJaLmVsZW19KS5sZW5ndGh9fXZhciBibT0vXig/OmJvZHl8aHRtbCkkL2k7YkcuZm4ub2Zmc2V0PWZ1bmN0aW9uKGNhKXtpZihhcmd1bWVudHMubGVuZ3RoKXtyZXR1cm4gY2E9PT1hQj90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihjYil7Ykcub2Zmc2V0LnNldE9mZnNldCh0aGlzLGNhLGNiKX0pfXZhciBiNCxiWixiNSxiNixiMyxiNyxlLGIyLGI4LGIxLGIwPXRoaXNbMF0sYjk9YjAmJmIwLm93bmVyRG9jdW1lbnQ7aWYoIWI5KXtyZXR1cm59aWYoKGI1PWI5LmJvZHkpPT09YjApe3JldHVybiBiRy5vZmZzZXQuYm9keU9mZnNldChiMCl9Ylo9YjkuZG9jdW1lbnRFbGVtZW50O2lmKCFiRy5jb250YWlucyhiWixiMCkpe3JldHVybnt0b3A6MCxsZWZ0OjB9fWI0PWIwLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2I2PWJuKGI5KTtiMz1iWi5jbGllbnRUb3B8fGI1LmNsaWVudFRvcHx8MDtiNz1iWi5jbGllbnRMZWZ0fHxiNS5jbGllbnRMZWZ0fHwwO2U9YjYucGFnZVlPZmZzZXR8fGJaLnNjcm9sbFRvcDtiMj1iNi5wYWdlWE9mZnNldHx8Ylouc2Nyb2xsTGVmdDtiOD1iNC50b3ArZS1iMztiMT1iNC5sZWZ0K2IyLWI3O3JldHVybnt0b3A6YjgsbGVmdDpiMX19O2JHLm9mZnNldD17Ym9keU9mZnNldDpmdW5jdGlvbihlKXt2YXIgYjA9ZS5vZmZzZXRUb3AsYlo9ZS5vZmZzZXRMZWZ0O2lmKGJHLnN1cHBvcnQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQpe2IwKz1wYXJzZUZsb2F0KGJHLmNzcyhlLCJtYXJnaW5Ub3AiKSl8fDA7YlorPXBhcnNlRmxvYXQoYkcuY3NzKGUsIm1hcmdpbkxlZnQiKSl8fDB9cmV0dXJue3RvcDpiMCxsZWZ0OmJafX0sc2V0T2Zmc2V0OmZ1bmN0aW9uKGIxLGNhLGI0KXt2YXIgYjU9YkcuY3NzKGIxLCJwb3NpdGlvbiIpO2lmKGI1PT09InN0YXRpYyIpe2IxLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSJ9dmFyIGIzPWJHKGIxKSxiWj1iMy5vZmZzZXQoKSxlPWJHLmNzcyhiMSwidG9wIiksYjg9YkcuY3NzKGIxLCJsZWZ0IiksYjk9KGI1PT09ImFic29sdXRlInx8YjU9PT0iZml4ZWQiKSYmYkcuaW5BcnJheSgiYXV0byIsW2UsYjhdKT4tMSxiNz17fSxiNj17fSxiMCxiMjtpZihiOSl7YjY9YjMucG9zaXRpb24oKTtiMD1iNi50b3A7YjI9YjYubGVmdH1lbHNle2IwPXBhcnNlRmxvYXQoZSl8fDA7YjI9cGFyc2VGbG9hdChiOCl8fDB9aWYoYkcuaXNGdW5jdGlvbihjYSkpe2NhPWNhLmNhbGwoYjEsYjQsYlopfWlmKGNhLnRvcCE9bnVsbCl7YjcudG9wPShjYS50b3AtYloudG9wKStiMH1pZihjYS5sZWZ0IT1udWxsKXtiNy5sZWZ0PShjYS5sZWZ0LWJaLmxlZnQpK2IyfWlmKCJ1c2luZyIgaW4gY2Epe2NhLnVzaW5nLmNhbGwoYjEsYjcpfWVsc2V7YjMuY3NzKGI3KX19fTtiRy5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pe3JldHVybn12YXIgYjA9dGhpc1swXSxiWj10aGlzLm9mZnNldFBhcmVudCgpLGIxPXRoaXMub2Zmc2V0KCksZT1ibS50ZXN0KGJaWzBdLm5vZGVOYW1lKT97dG9wOjAsbGVmdDowfTpiWi5vZmZzZXQoKTtiMS50b3AtPXBhcnNlRmxvYXQoYkcuY3NzKGIwLCJtYXJnaW5Ub3AiKSl8fDA7YjEubGVmdC09cGFyc2VGbG9hdChiRy5jc3MoYjAsIm1hcmdpbkxlZnQiKSl8fDA7ZS50b3ArPXBhcnNlRmxvYXQoYkcuY3NzKGJaWzBdLCJib3JkZXJUb3BXaWR0aCIpKXx8MDtlLmxlZnQrPXBhcnNlRmxvYXQoYkcuY3NzKGJaWzBdLCJib3JkZXJMZWZ0V2lkdGgiKSl8fDA7cmV0dXJue3RvcDpiMS50b3AtZS50b3AsbGVmdDpiMS5sZWZ0LWUubGVmdH19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50fHxvLmJvZHk7d2hpbGUoZSYmKCFibS50ZXN0KGUubm9kZU5hbWUpJiZiRy5jc3MoZSwicG9zaXRpb24iKT09PSJzdGF0aWMiKSl7ZT1lLm9mZnNldFBhcmVudH1yZXR1cm4gZXx8by5ib2R5fSl9fSk7YkcuZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihiMCxiWil7dmFyIGU9L1kvLnRlc3QoYlopO2JHLmZuW2IwXT1mdW5jdGlvbihiMSl7cmV0dXJuIGJHLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGIyLGI1LGI0KXt2YXIgYjM9Ym4oYjIpO2lmKGI0PT09YUIpe3JldHVybiBiMz8oYlogaW4gYjMpP2IzW2JaXTpiMy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbYjVdOmIyW2I1XX1pZihiMyl7YjMuc2Nyb2xsVG8oIWU/YjQ6YkcoYjMpLnNjcm9sbExlZnQoKSxlP2I0OmJHKGIzKS5zY3JvbGxUb3AoKSl9ZWxzZXtiMltiNV09YjR9fSxiMCxiMSxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pO2Z1bmN0aW9uIGJuKGUpe3JldHVybiBiRy5pc1dpbmRvdyhlKT9lOmUubm9kZVR5cGU9PT05P2UuZGVmYXVsdFZpZXd8fGUucGFyZW50V2luZG93OmZhbHNlfWJHLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihlLGJaKXtiRy5lYWNoKHtwYWRkaW5nOiJpbm5lciIrZSxjb250ZW50OmJaLCIiOiJvdXRlciIrZX0sZnVuY3Rpb24oYjAsYjEpe2JHLmZuW2IxXT1mdW5jdGlvbihiNSxiNCl7dmFyIGIzPWFyZ3VtZW50cy5sZW5ndGgmJihiMHx8dHlwZW9mIGI1IT09ImJvb2xlYW4iKSxiMj1iMHx8KGI1PT09dHJ1ZXx8YjQ9PT10cnVlPyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4gYkcuYWNjZXNzKHRoaXMsZnVuY3Rpb24oYjcsYjYsYjgpe3ZhciBiOTtpZihiRy5pc1dpbmRvdyhiNykpe3JldHVybiBiNy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrZV19aWYoYjcubm9kZVR5cGU9PT05KXtiOT1iNy5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIE1hdGgubWF4KGI3LmJvZHlbInNjcm9sbCIrZV0sYjlbInNjcm9sbCIrZV0sYjcuYm9keVsib2Zmc2V0IitlXSxiOVsib2Zmc2V0IitlXSxiOVsiY2xpZW50IitlXSl9cmV0dXJuIGI4PT09YUI/YkcuY3NzKGI3LGI2LGI4LGIyKTpiRy5zdHlsZShiNyxiNixiOCxiMil9LGJaLGIzP2I1OmFCLGIzKX19KX0pO2EyLmpRdWVyeT1hMi4kPWJHO2lmKHR5cGVvZiBkZWZpbmU9PT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kJiZkZWZpbmUuYW1kLmpRdWVyeSl7ZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIGJHfSl9fSkod2luZG93KTshZnVuY3Rpb24oYSl7YShmdW5jdGlvbigpe2Euc3VwcG9ydC50cmFuc2l0aW9uPShmdW5jdGlvbigpe3ZhciBiPShmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJvb3RzdHJhcCIpLGQ9e1dlYmtpdFRyYW5zaXRpb246IndlYmtpdFRyYW5zaXRpb25FbmQiLE1velRyYW5zaXRpb246InRyYW5zaXRpb25lbmQiLE9UcmFuc2l0aW9uOiJvVHJhbnNpdGlvbkVuZCBvdHJhbnNpdGlvbmVuZCIsdHJhbnNpdGlvbjoidHJhbnNpdGlvbmVuZCJ9LGM7Zm9yKGMgaW4gZCl7aWYoZS5zdHlsZVtjXSE9PXVuZGVmaW5lZCl7cmV0dXJuIGRbY119fX0oKSk7cmV0dXJuIGImJntlbmQ6Yn19KSgpfSl9KHdpbmRvdy5qUXVlcnkpOyFmdW5jdGlvbihjKXt2YXIgYj0nW2RhdGEtZGlzbWlzcz0iYWxlcnQiXScsYT1mdW5jdGlvbihkKXtjKGQpLm9uKCJjbGljayIsYix0aGlzLmNsb3NlKX07YS5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oaSl7dmFyIGg9Yyh0aGlzKSxmPWguYXR0cigiZGF0YS10YXJnZXQiKSxnO2lmKCFmKXtmPWguYXR0cigiaHJlZiIpO2Y9ZiYmZi5yZXBsYWNlKC8uKig/PSNbXlxzXSokKS8sIiIpfWc9YyhmKTtpJiZpLnByZXZlbnREZWZhdWx0KCk7Zy5sZW5ndGh8fChnPWguaGFzQ2xhc3MoImFsZXJ0Iik/aDpoLnBhcmVudCgpKTtnLnRyaWdnZXIoaT1jLkV2ZW50KCJjbG9zZSIpKTtpZihpLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtyZXR1cm59Zy5yZW1vdmVDbGFzcygiaW4iKTtmdW5jdGlvbiBkKCl7Zy50cmlnZ2VyKCJjbG9zZWQiKS5yZW1vdmUoKX1jLnN1cHBvcnQudHJhbnNpdGlvbiYmZy5oYXNDbGFzcygiZmFkZSIpP2cub24oYy5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGQpOmQoKX07Yy5mbi5hbGVydD1mdW5jdGlvbihkKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGY9Yyh0aGlzKSxlPWYuZGF0YSgiYWxlcnQiKTtpZighZSl7Zi5kYXRhKCJhbGVydCIsKGU9bmV3IGEodGhpcykpKX1pZih0eXBlb2YgZD09InN0cmluZyIpe2VbZF0uY2FsbChmKX19KX07Yy5mbi5hbGVydC5Db25zdHJ1Y3Rvcj1hO2MoZnVuY3Rpb24oKXtjKCJib2R5Iikub24oImNsaWNrLmFsZXJ0LmRhdGEtYXBpIixiLGEucHJvdG90eXBlLmNsb3NlKX0pfSh3aW5kb3cualF1ZXJ5KTshZnVuY3Rpb24oYil7dmFyIGE9ZnVuY3Rpb24oZCxjKXt0aGlzLiRlbGVtZW50PWIoZCk7dGhpcy5vcHRpb25zPWIuZXh0ZW5kKHt9LGIuZm4uYnV0dG9uLmRlZmF1bHRzLGMpfTthLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihmKXt2YXIgaD0iZGlzYWJsZWQiLGM9dGhpcy4kZWxlbWVudCxlPWMuZGF0YSgpLGc9Yy5pcygiaW5wdXQiKT8idmFsIjoiaHRtbCI7Zj1mKyJUZXh0IjtlLnJlc2V0VGV4dHx8Yy5kYXRhKCJyZXNldFRleHQiLGNbZ10oKSk7Y1tnXShlW2ZdfHx0aGlzLm9wdGlvbnNbZl0pO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtmPT0ibG9hZGluZ1RleHQiP2MuYWRkQ2xhc3MoaCkuYXR0cihoLGgpOmMucmVtb3ZlQ2xhc3MoaCkucmVtb3ZlQXR0cihoKX0sMCl9O2EucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3ZhciBjPXRoaXMuJGVsZW1lbnQucGFyZW50KCdbZGF0YS10b2dnbGU9ImJ1dHRvbnMtcmFkaW8iXScpO2MmJmMuZmluZCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTt0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKCJhY3RpdmUiKX07Yi5mbi5idXR0b249ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBmPWIodGhpcyksZT1mLmRhdGEoImJ1dHRvbiIpLGQ9dHlwZW9mIGM9PSJvYmplY3QiJiZjO2lmKCFlKXtmLmRhdGEoImJ1dHRvbiIsKGU9bmV3IGEodGhpcyxkKSkpfWlmKGM9PSJ0b2dnbGUiKXtlLnRvZ2dsZSgpfWVsc2V7aWYoYyl7ZS5zZXRTdGF0ZShjKX19fSl9O2IuZm4uYnV0dG9uLmRlZmF1bHRzPXtsb2FkaW5nVGV4dDoibG9hZGluZy4uLiJ9O2IuZm4uYnV0dG9uLkNvbnN0cnVjdG9yPWE7YihmdW5jdGlvbigpe2IoImJvZHkiKS5vbigiY2xpY2suYnV0dG9uLmRhdGEtYXBpIiwiW2RhdGEtdG9nZ2xlXj1idXR0b25dIixmdW5jdGlvbihkKXt2YXIgYz1iKGQudGFyZ2V0KTtpZighYy5oYXNDbGFzcygiYnRuIikpe2M9Yy5jbG9zZXN0KCIuYnRuIil9Yy5idXR0b24oInRvZ2dsZSIpfSl9KX0od2luZG93LmpRdWVyeSk7IWZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKGQsYyl7dGhpcy4kZWxlbWVudD1hKGQpO3RoaXMub3B0aW9ucz1jO3RoaXMub3B0aW9ucy5zbGlkZSYmdGhpcy5zbGlkZSh0aGlzLm9wdGlvbnMuc2xpZGUpO3RoaXMub3B0aW9ucy5wYXVzZT09ImhvdmVyIiYmdGhpcy4kZWxlbWVudC5vbigibW91c2VlbnRlciIsYS5wcm94eSh0aGlzLnBhdXNlLHRoaXMpKS5vbigibW91c2VsZWF2ZSIsYS5wcm94eSh0aGlzLmN5Y2xlLHRoaXMpKX07Yi5wcm90b3R5cGU9e2N5Y2xlOmZ1bmN0aW9uKGMpe2lmKCFjKXt0aGlzLnBhdXNlZD1mYWxzZX10aGlzLm9wdGlvbnMuaW50ZXJ2YWwmJiF0aGlzLnBhdXNlZCYmKHRoaXMuaW50ZXJ2YWw9c2V0SW50ZXJ2YWwoYS5wcm94eSh0aGlzLm5leHQsdGhpcyksdGhpcy5vcHRpb25zLmludGVydmFsKSk7cmV0dXJuIHRoaXN9LHRvOmZ1bmN0aW9uKGcpe3ZhciBjPXRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0uYWN0aXZlIiksZD1jLnBhcmVudCgpLmNoaWxkcmVuKCksZT1kLmluZGV4KGMpLGY9dGhpcztpZihnPihkLmxlbmd0aC0xKXx8ZzwwKXtyZXR1cm59aWYodGhpcy5zbGlkaW5nKXtyZXR1cm4gdGhpcy4kZWxlbWVudC5vbmUoInNsaWQiLGZ1bmN0aW9uKCl7Zi50byhnKX0pfWlmKGU9PWcpe3JldHVybiB0aGlzLnBhdXNlKCkuY3ljbGUoKX1yZXR1cm4gdGhpcy5zbGlkZShnPmU/Im5leHQiOiJwcmV2IixhKGRbZ10pKX0scGF1c2U6ZnVuY3Rpb24oYyl7aWYoIWMpe3RoaXMucGF1c2VkPXRydWV9aWYodGhpcy4kZWxlbWVudC5maW5kKCIubmV4dCwgLnByZXYiKS5sZW5ndGgmJmEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCl7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCk7dGhpcy5jeWNsZSgpfWNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCk7dGhpcy5pbnRlcnZhbD1udWxsO3JldHVybiB0aGlzfSxuZXh0OmZ1bmN0aW9uKCl7aWYodGhpcy5zbGlkaW5nKXtyZXR1cm59cmV0dXJuIHRoaXMuc2xpZGUoIm5leHQiKX0scHJldjpmdW5jdGlvbigpe2lmKHRoaXMuc2xpZGluZyl7cmV0dXJufXJldHVybiB0aGlzLnNsaWRlKCJwcmV2Iil9LHNsaWRlOmZ1bmN0aW9uKGosZCl7dmFyIGw9dGhpcy4kZWxlbWVudC5maW5kKCIuaXRlbS5hY3RpdmUiKSxjPWR8fGxbal0oKSxpPXRoaXMuaW50ZXJ2YWwsaz1qPT0ibmV4dCI/ImxlZnQiOiJyaWdodCIsZj1qPT0ibmV4dCI/ImZpcnN0IjoibGFzdCIsZz10aGlzLGg9YS5FdmVudCgic2xpZGUiLHtyZWxhdGVkVGFyZ2V0OmNbMF19KTt0aGlzLnNsaWRpbmc9dHJ1ZTtpJiZ0aGlzLnBhdXNlKCk7Yz1jLmxlbmd0aD9jOnRoaXMuJGVsZW1lbnQuZmluZCgiLml0ZW0iKVtmXSgpO2lmKGMuaGFzQ2xhc3MoImFjdGl2ZSIpKXtyZXR1cm59aWYoYS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoInNsaWRlIikpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcihoKTtpZihoLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtyZXR1cm59Yy5hZGRDbGFzcyhqKTtjWzBdLm9mZnNldFdpZHRoO2wuYWRkQ2xhc3Moayk7Yy5hZGRDbGFzcyhrKTt0aGlzLiRlbGVtZW50Lm9uZShhLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXtjLnJlbW92ZUNsYXNzKFtqLGtdLmpvaW4oIiAiKSkuYWRkQ2xhc3MoImFjdGl2ZSIpO2wucmVtb3ZlQ2xhc3MoWyJhY3RpdmUiLGtdLmpvaW4oIiAiKSk7Zy5zbGlkaW5nPWZhbHNlO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtnLiRlbGVtZW50LnRyaWdnZXIoInNsaWQiKX0sMCl9KX1lbHNle3RoaXMuJGVsZW1lbnQudHJpZ2dlcihoKTtpZihoLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtyZXR1cm59bC5yZW1vdmVDbGFzcygiYWN0aXZlIik7Yy5hZGRDbGFzcygiYWN0aXZlIik7dGhpcy5zbGlkaW5nPWZhbHNlO3RoaXMuJGVsZW1lbnQudHJpZ2dlcigic2xpZCIpfWkmJnRoaXMuY3ljbGUoKTtyZXR1cm4gdGhpc319O2EuZm4uY2Fyb3VzZWw9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBnPWEodGhpcyksZj1nLmRhdGEoImNhcm91c2VsIiksZD1hLmV4dGVuZCh7fSxhLmZuLmNhcm91c2VsLmRlZmF1bHRzLHR5cGVvZiBjPT0ib2JqZWN0IiYmYyksZT10eXBlb2YgYz09InN0cmluZyI/YzpkLnNsaWRlO2lmKCFmKXtnLmRhdGEoImNhcm91c2VsIiwoZj1uZXcgYih0aGlzLGQpKSl9aWYodHlwZW9mIGM9PSJudW1iZXIiKXtmLnRvKGMpfWVsc2V7aWYoZSl7ZltlXSgpfWVsc2V7aWYoZC5pbnRlcnZhbCl7Zi5jeWNsZSgpfX19fSl9O2EuZm4uY2Fyb3VzZWwuZGVmYXVsdHM9e2ludGVydmFsOjUwMDAscGF1c2U6ImhvdmVyIn07YS5mbi5jYXJvdXNlbC5Db25zdHJ1Y3Rvcj1iO2EoZnVuY3Rpb24oKXthKCJib2R5Iikub24oImNsaWNrLmNhcm91c2VsLmRhdGEtYXBpIiwiW2RhdGEtc2xpZGVdIixmdW5jdGlvbihoKXt2YXIgZz1hKHRoaXMpLGQsYz1hKGcuYXR0cigiZGF0YS10YXJnZXQiKXx8KGQ9Zy5hdHRyKCJocmVmIikpJiZkLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIikpLGY9IWMuZGF0YSgibW9kYWwiKSYmYS5leHRlbmQoe30sYy5kYXRhKCksZy5kYXRhKCkpO2MuY2Fyb3VzZWwoZik7aC5wcmV2ZW50RGVmYXVsdCgpfSl9KX0od2luZG93LmpRdWVyeSk7IWZ1bmN0aW9uKGEpe3ZhciBiPWZ1bmN0aW9uKGQsYyl7dGhpcy4kZWxlbWVudD1hKGQpO3RoaXMub3B0aW9ucz1hLmV4dGVuZCh7fSxhLmZuLmNvbGxhcHNlLmRlZmF1bHRzLGMpO2lmKHRoaXMub3B0aW9ucy5wYXJlbnQpe3RoaXMuJHBhcmVudD1hKHRoaXMub3B0aW9ucy5wYXJlbnQpfXRoaXMub3B0aW9ucy50b2dnbGUmJnRoaXMudG9nZ2xlKCl9O2IucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiLGRpbWVuc2lvbjpmdW5jdGlvbigpe3ZhciBjPXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoIndpZHRoIik7cmV0dXJuIGM/IndpZHRoIjoiaGVpZ2h0In0sc2hvdzpmdW5jdGlvbigpe3ZhciBmLGMsZSxkO2lmKHRoaXMudHJhbnNpdGlvbmluZyl7cmV0dXJufWY9dGhpcy5kaW1lbnNpb24oKTtjPWEuY2FtZWxDYXNlKFsic2Nyb2xsIixmXS5qb2luKCItIikpO2U9dGhpcy4kcGFyZW50JiZ0aGlzLiRwYXJlbnQuZmluZCgiPiAuYWNjb3JkaW9uLWdyb3VwID4gLmluIik7aWYoZSYmZS5sZW5ndGgpe2Q9ZS5kYXRhKCJjb2xsYXBzZSIpO2lmKGQmJmQudHJhbnNpdGlvbmluZyl7cmV0dXJufWUuY29sbGFwc2UoImhpZGUiKTtkfHxlLmRhdGEoImNvbGxhcHNlIixudWxsKX10aGlzLiRlbGVtZW50W2ZdKDApO3RoaXMudHJhbnNpdGlvbigiYWRkQ2xhc3MiLGEuRXZlbnQoInNob3ciKSwic2hvd24iKTthLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudFtmXSh0aGlzLiRlbGVtZW50WzBdW2NdKX0saGlkZTpmdW5jdGlvbigpe3ZhciBjO2lmKHRoaXMudHJhbnNpdGlvbmluZyl7cmV0dXJufWM9dGhpcy5kaW1lbnNpb24oKTt0aGlzLnJlc2V0KHRoaXMuJGVsZW1lbnRbY10oKSk7dGhpcy50cmFuc2l0aW9uKCJyZW1vdmVDbGFzcyIsYS5FdmVudCgiaGlkZSIpLCJoaWRkZW4iKTt0aGlzLiRlbGVtZW50W2NdKDApfSxyZXNldDpmdW5jdGlvbihjKXt2YXIgZD10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoImNvbGxhcHNlIilbZF0oY3x8ImF1dG8iKVswXS5vZmZzZXRXaWR0aDt0aGlzLiRlbGVtZW50W2MhPT1udWxsPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oImNvbGxhcHNlIik7cmV0dXJuIHRoaXN9LHRyYW5zaXRpb246ZnVuY3Rpb24oZyxkLGUpe3ZhciBmPXRoaXMsYz1mdW5jdGlvbigpe2lmKGQudHlwZT09InNob3ciKXtmLnJlc2V0KCl9Zi50cmFuc2l0aW9uaW5nPTA7Zi4kZWxlbWVudC50cmlnZ2VyKGUpfTt0aGlzLiRlbGVtZW50LnRyaWdnZXIoZCk7aWYoZC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7cmV0dXJufXRoaXMudHJhbnNpdGlvbmluZz0xO3RoaXMuJGVsZW1lbnRbZ10oImluIik7YS5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImNvbGxhcHNlIik/dGhpcy4kZWxlbWVudC5vbmUoYS5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGMpOmMoKX0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpc1t0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKCJpbiIpPyJoaWRlIjoic2hvdyJdKCl9fTthLmZuLmNvbGxhcHNlPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZj1hKHRoaXMpLGU9Zi5kYXRhKCJjb2xsYXBzZSIpLGQ9dHlwZW9mIGM9PSJvYmplY3QiJiZjO2lmKCFlKXtmLmRhdGEoImNvbGxhcHNlIiwoZT1uZXcgYih0aGlzLGQpKSl9aWYodHlwZW9mIGM9PSJzdHJpbmciKXtlW2NdKCl9fSl9O2EuZm4uY29sbGFwc2UuZGVmYXVsdHM9e3RvZ2dsZTp0cnVlfTthLmZuLmNvbGxhcHNlLkNvbnN0cnVjdG9yPWI7YShmdW5jdGlvbigpe2EoImJvZHkiKS5vbigiY2xpY2suY29sbGFwc2UuZGF0YS1hcGkiLCJbZGF0YS10b2dnbGU9Y29sbGFwc2VdIixmdW5jdGlvbihoKXt2YXIgZz1hKHRoaXMpLGMsZj1nLmF0dHIoImRhdGEtdGFyZ2V0Iil8fGgucHJldmVudERlZmF1bHQoKXx8KGM9Zy5hdHRyKCJocmVmIikpJiZjLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIiksZD1hKGYpLmRhdGEoImNvbGxhcHNlIik/InRvZ2dsZSI6Zy5kYXRhKCk7Z1thKGYpLmhhc0NsYXNzKCJpbiIpPyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oImNvbGxhcHNlZCIpO2EoZikuY29sbGFwc2UoZCl9KX0pfSh3aW5kb3cualF1ZXJ5KTshZnVuY3Rpb24oZSl7dmFyIGI9IltkYXRhLXRvZ2dsZT1kcm9wZG93bl0iLGE9ZnVuY3Rpb24oZyl7dmFyIGY9ZShnKS5vbigiY2xpY2suZHJvcGRvd24uZGF0YS1hcGkiLHRoaXMudG9nZ2xlKTtlKCJodG1sIikub24oImNsaWNrLmRyb3Bkb3duLmRhdGEtYXBpIixmdW5jdGlvbigpe2YucGFyZW50KCkucmVtb3ZlQ2xhc3MoIm9wZW4iKX0pfTthLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YSx0b2dnbGU6ZnVuY3Rpb24oaSl7dmFyIGg9ZSh0aGlzKSxnLGY7aWYoaC5pcygiLmRpc2FibGVkLCA6ZGlzYWJsZWQiKSl7cmV0dXJufWc9ZChoKTtmPWcuaGFzQ2xhc3MoIm9wZW4iKTtjKCk7aWYoIWYpe2cudG9nZ2xlQ2xhc3MoIm9wZW4iKTtoLmZvY3VzKCl9cmV0dXJuIGZhbHNlfSxrZXlkb3duOmZ1bmN0aW9uKGspe3ZhciBqLGwsZixpLGgsZztpZighLygzOHw0MHwyNykvLnRlc3Qoay5rZXlDb2RlKSl7cmV0dXJufWo9ZSh0aGlzKTtrLnByZXZlbnREZWZhdWx0KCk7ay5zdG9wUHJvcGFnYXRpb24oKTtpZihqLmlzKCIuZGlzYWJsZWQsIDpkaXNhYmxlZCIpKXtyZXR1cm59aT1kKGopO2g9aS5oYXNDbGFzcygib3BlbiIpO2lmKCFofHwoaCYmay5rZXlDb2RlPT0yNykpe3JldHVybiBqLmNsaWNrKCl9bD1lKCJbcm9sZT1tZW51XSBsaTpub3QoLmRpdmlkZXIpIGEiLGkpO2lmKCFsLmxlbmd0aCl7cmV0dXJufWc9bC5pbmRleChsLmZpbHRlcigiOmZvY3VzIikpO2lmKGsua2V5Q29kZT09MzgmJmc+MCl7Zy0tfWlmKGsua2V5Q29kZT09NDAmJmc8bC5sZW5ndGgtMSl7ZysrfWlmKCF+Zyl7Zz0wfWwuZXEoZykuZm9jdXMoKX19O2Z1bmN0aW9uIGMoKXtkKGUoYikpLnJlbW92ZUNsYXNzKCJvcGVuIil9ZnVuY3Rpb24gZChoKXt2YXIgZj1oLmF0dHIoImRhdGEtdGFyZ2V0IiksZztpZighZil7Zj1oLmF0dHIoImhyZWYiKTtmPWYmJmYucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKX1nPWUoZik7Zy5sZW5ndGh8fChnPWgucGFyZW50KCkpO3JldHVybiBnfWUuZm4uZHJvcGRvd249ZnVuY3Rpb24oZil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBoPWUodGhpcyksZz1oLmRhdGEoImRyb3Bkb3duIik7aWYoIWcpe2guZGF0YSgiZHJvcGRvd24iLChnPW5ldyBhKHRoaXMpKSl9aWYodHlwZW9mIGY9PSJzdHJpbmciKXtnW2ZdLmNhbGwoaCl9fSl9O2UuZm4uZHJvcGRvd24uQ29uc3RydWN0b3I9YTtlKGZ1bmN0aW9uKCl7ZSgiaHRtbCIpLm9uKCJjbGljay5kcm9wZG93bi5kYXRhLWFwaSB0b3VjaHN0YXJ0LmRyb3Bkb3duLmRhdGEtYXBpIixjKTtlKCJib2R5Iikub24oImNsaWNrLmRyb3Bkb3duIHRvdWNoc3RhcnQuZHJvcGRvd24uZGF0YS1hcGkiLCIuZHJvcGRvd24iLGZ1bmN0aW9uKGYpe2Yuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbigiY2xpY2suZHJvcGRvd24uZGF0YS1hcGkgdG91Y2hzdGFydC5kcm9wZG93bi5kYXRhLWFwaSIsYixhLnByb3RvdHlwZS50b2dnbGUpLm9uKCJrZXlkb3duLmRyb3Bkb3duLmRhdGEtYXBpIHRvdWNoc3RhcnQuZHJvcGRvd24uZGF0YS1hcGkiLGIrIiwgW3JvbGU9bWVudV0iLGEucHJvdG90eXBlLmtleWRvd24pfSl9KHdpbmRvdy5qUXVlcnkpOyFmdW5jdGlvbihiKXt2YXIgYT1mdW5jdGlvbihkLGMpe3RoaXMub3B0aW9ucz1jO3RoaXMuJGVsZW1lbnQ9YihkKS5kZWxlZ2F0ZSgnW2RhdGEtZGlzbWlzcz0ibW9kYWwiXScsImNsaWNrLmRpc21pc3MubW9kYWwiLGIucHJveHkodGhpcy5oaWRlLHRoaXMpKTt0aGlzLm9wdGlvbnMucmVtb3RlJiZ0aGlzLiRlbGVtZW50LmZpbmQoIi5tb2RhbC1ib2R5IikubG9hZCh0aGlzLm9wdGlvbnMucmVtb3RlKX07YS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmEsdG9nZ2xlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIXRoaXMuaXNTaG93bj8ic2hvdyI6ImhpZGUiXSgpfSxzaG93OmZ1bmN0aW9uKCl7dmFyIGM9dGhpcyxkPWIuRXZlbnQoInNob3ciKTt0aGlzLiRlbGVtZW50LnRyaWdnZXIoZCk7aWYodGhpcy5pc1Nob3dufHxkLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtyZXR1cm59YigiYm9keSIpLmFkZENsYXNzKCJtb2RhbC1vcGVuIik7dGhpcy5pc1Nob3duPXRydWU7dGhpcy5lc2NhcGUoKTt0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uKCl7dmFyIGU9Yi5zdXBwb3J0LnRyYW5zaXRpb24mJmMuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKTtpZighYy4kZWxlbWVudC5wYXJlbnQoKS5sZW5ndGgpe2MuJGVsZW1lbnQuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSl9Yy4kZWxlbWVudC5zaG93KCk7aWYoZSl7Yy4kZWxlbWVudFswXS5vZmZzZXRXaWR0aH1jLiRlbGVtZW50LmFkZENsYXNzKCJpbiIpLmF0dHIoImFyaWEtaGlkZGVuIixmYWxzZSkuZm9jdXMoKTtjLmVuZm9yY2VGb2N1cygpO2U/Yy4kZWxlbWVudC5vbmUoYi5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGZ1bmN0aW9uKCl7Yy4kZWxlbWVudC50cmlnZ2VyKCJzaG93biIpfSk6Yy4kZWxlbWVudC50cmlnZ2VyKCJzaG93biIpfSl9LGhpZGU6ZnVuY3Rpb24oZCl7ZCYmZC5wcmV2ZW50RGVmYXVsdCgpO3ZhciBjPXRoaXM7ZD1iLkV2ZW50KCJoaWRlIik7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGQpO2lmKCF0aGlzLmlzU2hvd258fGQuaXNEZWZhdWx0UHJldmVudGVkKCkpe3JldHVybn10aGlzLmlzU2hvd249ZmFsc2U7YigiYm9keSIpLnJlbW92ZUNsYXNzKCJtb2RhbC1vcGVuIik7dGhpcy5lc2NhcGUoKTtiKGRvY3VtZW50KS5vZmYoImZvY3VzaW4ubW9kYWwiKTt0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKCJpbiIpLmF0dHIoImFyaWEtaGlkZGVuIix0cnVlKTtiLnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpP3RoaXMuaGlkZVdpdGhUcmFuc2l0aW9uKCk6dGhpcy5oaWRlTW9kYWwoKX0sZW5mb3JjZUZvY3VzOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcztiKGRvY3VtZW50KS5vbigiZm9jdXNpbi5tb2RhbCIsZnVuY3Rpb24oZCl7aWYoYy4kZWxlbWVudFswXSE9PWQudGFyZ2V0JiYhYy4kZWxlbWVudC5oYXMoZC50YXJnZXQpLmxlbmd0aCl7Yy4kZWxlbWVudC5mb2N1cygpfX0pfSxlc2NhcGU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzO2lmKHRoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmtleWJvYXJkKXt0aGlzLiRlbGVtZW50Lm9uKCJrZXl1cC5kaXNtaXNzLm1vZGFsIixmdW5jdGlvbihkKXtkLndoaWNoPT0yNyYmYy5oaWRlKCl9KX1lbHNle2lmKCF0aGlzLmlzU2hvd24pe3RoaXMuJGVsZW1lbnQub2ZmKCJrZXl1cC5kaXNtaXNzLm1vZGFsIil9fX0saGlkZVdpdGhUcmFuc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGM9dGhpcyxkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtjLiRlbGVtZW50Lm9mZihiLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpO2MuaGlkZU1vZGFsKCl9LDUwMCk7dGhpcy4kZWxlbWVudC5vbmUoYi5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KGQpO2MuaGlkZU1vZGFsKCl9KX0saGlkZU1vZGFsOmZ1bmN0aW9uKGMpe3RoaXMuJGVsZW1lbnQuaGlkZSgpLnRyaWdnZXIoImhpZGRlbiIpO3RoaXMuYmFja2Ryb3AoKX0scmVtb3ZlQmFja2Ryb3A6ZnVuY3Rpb24oKXt0aGlzLiRiYWNrZHJvcC5yZW1vdmUoKTt0aGlzLiRiYWNrZHJvcD1udWxsfSxiYWNrZHJvcDpmdW5jdGlvbihmKXt2YXIgZT10aGlzLGQ9dGhpcy4kZWxlbWVudC5oYXNDbGFzcygiZmFkZSIpPyJmYWRlIjoiIjtpZih0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5iYWNrZHJvcCl7dmFyIGM9Yi5zdXBwb3J0LnRyYW5zaXRpb24mJmQ7dGhpcy4kYmFja2Ryb3A9YignPGRpdiBjbGFzcz0ibW9kYWwtYmFja2Ryb3AgJytkKyciIC8+JykuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSk7aWYodGhpcy5vcHRpb25zLmJhY2tkcm9wIT0ic3RhdGljIil7dGhpcy4kYmFja2Ryb3AuY2xpY2soYi5wcm94eSh0aGlzLmhpZGUsdGhpcykpfWlmKGMpe3RoaXMuJGJhY2tkcm9wWzBdLm9mZnNldFdpZHRofXRoaXMuJGJhY2tkcm9wLmFkZENsYXNzKCJpbiIpO2M/dGhpcy4kYmFja2Ryb3Aub25lKGIuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxmKTpmKCl9ZWxzZXtpZighdGhpcy5pc1Nob3duJiZ0aGlzLiRiYWNrZHJvcCl7dGhpcy4kYmFja2Ryb3AucmVtb3ZlQ2xhc3MoImluIik7Yi5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoImZhZGUiKT90aGlzLiRiYWNrZHJvcC5vbmUoYi5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGIucHJveHkodGhpcy5yZW1vdmVCYWNrZHJvcCx0aGlzKSk6dGhpcy5yZW1vdmVCYWNrZHJvcCgpfWVsc2V7aWYoZil7ZigpfX19fX07Yi5mbi5tb2RhbD1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGY9Yih0aGlzKSxlPWYuZGF0YSgibW9kYWwiKSxkPWIuZXh0ZW5kKHt9LGIuZm4ubW9kYWwuZGVmYXVsdHMsZi5kYXRhKCksdHlwZW9mIGM9PSJvYmplY3QiJiZjKTtpZighZSl7Zi5kYXRhKCJtb2RhbCIsKGU9bmV3IGEodGhpcyxkKSkpfWlmKHR5cGVvZiBjPT0ic3RyaW5nIil7ZVtjXSgpfWVsc2V7aWYoZC5zaG93KXtlLnNob3coKX19fSl9O2IuZm4ubW9kYWwuZGVmYXVsdHM9e2JhY2tkcm9wOnRydWUsa2V5Ym9hcmQ6dHJ1ZSxzaG93OnRydWV9O2IuZm4ubW9kYWwuQ29uc3RydWN0b3I9YTtiKGZ1bmN0aW9uKCl7YigiYm9keSIpLm9uKCJjbGljay5tb2RhbC5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0ibW9kYWwiXScsZnVuY3Rpb24oaCl7dmFyIGc9Yih0aGlzKSxkPWcuYXR0cigiaHJlZiIpLGM9YihnLmF0dHIoImRhdGEtdGFyZ2V0Iil8fChkJiZkLnJlcGxhY2UoLy4qKD89I1teXHNdKyQpLywiIikpKSxmPWMuZGF0YSgibW9kYWwiKT8idG9nZ2xlIjpiLmV4dGVuZCh7cmVtb3RlOiEvIy8udGVzdChkKSYmZH0sYy5kYXRhKCksZy5kYXRhKCkpO2gucHJldmVudERlZmF1bHQoKTtjLm1vZGFsKGYpLm9uZSgiaGlkZSIsZnVuY3Rpb24oKXtnLmZvY3VzKCl9KX0pfSl9KHdpbmRvdy5qUXVlcnkpOyFmdW5jdGlvbihiKXt2YXIgYT1mdW5jdGlvbihkLGMpe3RoaXMuaW5pdCgidG9vbHRpcCIsZCxjKX07YS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmEsaW5pdDpmdW5jdGlvbihmLGUsZCl7dmFyIGcsYzt0aGlzLnR5cGU9Zjt0aGlzLiRlbGVtZW50PWIoZSk7dGhpcy5vcHRpb25zPXRoaXMuZ2V0T3B0aW9ucyhkKTt0aGlzLmVuYWJsZWQ9dHJ1ZTtpZih0aGlzLm9wdGlvbnMudHJpZ2dlcj09ImNsaWNrIil7dGhpcy4kZWxlbWVudC5vbigiY2xpY2suIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLGIucHJveHkodGhpcy50b2dnbGUsdGhpcykpfWVsc2V7aWYodGhpcy5vcHRpb25zLnRyaWdnZXIhPSJtYW51YWwiKXtnPXRoaXMub3B0aW9ucy50cmlnZ2VyPT0iaG92ZXIiPyJtb3VzZWVudGVyIjoiZm9jdXMiO2M9dGhpcy5vcHRpb25zLnRyaWdnZXI9PSJob3ZlciI/Im1vdXNlbGVhdmUiOiJibHVyIjt0aGlzLiRlbGVtZW50Lm9uKGcrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYi5wcm94eSh0aGlzLmVudGVyLHRoaXMpKTt0aGlzLiRlbGVtZW50Lm9uKGMrIi4iK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsYi5wcm94eSh0aGlzLmxlYXZlLHRoaXMpKX19dGhpcy5vcHRpb25zLnNlbGVjdG9yPyh0aGlzLl9vcHRpb25zPWIuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyx7dHJpZ2dlcjoibWFudWFsIixzZWxlY3RvcjoiIn0pKTp0aGlzLmZpeFRpdGxlKCl9LGdldE9wdGlvbnM6ZnVuY3Rpb24oYyl7Yz1iLmV4dGVuZCh7fSxiLmZuW3RoaXMudHlwZV0uZGVmYXVsdHMsYyx0aGlzLiRlbGVtZW50LmRhdGEoKSk7aWYoYy5kZWxheSYmdHlwZW9mIGMuZGVsYXk9PSJudW1iZXIiKXtjLmRlbGF5PXtzaG93OmMuZGVsYXksaGlkZTpjLmRlbGF5fX1yZXR1cm4gY30sZW50ZXI6ZnVuY3Rpb24oZCl7dmFyIGM9YihkLmN1cnJlbnRUYXJnZXQpW3RoaXMudHlwZV0odGhpcy5fb3B0aW9ucykuZGF0YSh0aGlzLnR5cGUpO2lmKCFjLm9wdGlvbnMuZGVsYXl8fCFjLm9wdGlvbnMuZGVsYXkuc2hvdyl7cmV0dXJuIGMuc2hvdygpfWNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO2MuaG92ZXJTdGF0ZT0iaW4iO3RoaXMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoYy5ob3ZlclN0YXRlPT0iaW4iKXtjLnNob3coKX19LGMub3B0aW9ucy5kZWxheS5zaG93KX0sbGVhdmU6ZnVuY3Rpb24oZCl7dmFyIGM9YihkLmN1cnJlbnRUYXJnZXQpW3RoaXMudHlwZV0odGhpcy5fb3B0aW9ucykuZGF0YSh0aGlzLnR5cGUpO2lmKHRoaXMudGltZW91dCl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCl9aWYoIWMub3B0aW9ucy5kZWxheXx8IWMub3B0aW9ucy5kZWxheS5oaWRlKXtyZXR1cm4gYy5oaWRlKCl9Yy5ob3ZlclN0YXRlPSJvdXQiO3RoaXMudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoYy5ob3ZlclN0YXRlPT0ib3V0Iil7Yy5oaWRlKCl9fSxjLm9wdGlvbnMuZGVsYXkuaGlkZSl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgZyxjLGksZSxoLGQsZjtpZih0aGlzLmhhc0NvbnRlbnQoKSYmdGhpcy5lbmFibGVkKXtnPXRoaXMudGlwKCk7dGhpcy5zZXRDb250ZW50KCk7aWYodGhpcy5vcHRpb25zLmFuaW1hdGlvbil7Zy5hZGRDbGFzcygiZmFkZSIpfWQ9dHlwZW9mIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQ9PSJmdW5jdGlvbiI/dGhpcy5vcHRpb25zLnBsYWNlbWVudC5jYWxsKHRoaXMsZ1swXSx0aGlzLiRlbGVtZW50WzBdKTp0aGlzLm9wdGlvbnMucGxhY2VtZW50O2M9L2luLy50ZXN0KGQpO2cucmVtb3ZlKCkuY3NzKHt0b3A6MCxsZWZ0OjAsZGlzcGxheToiYmxvY2sifSkuYXBwZW5kVG8oYz90aGlzLiRlbGVtZW50OmRvY3VtZW50LmJvZHkpO2k9dGhpcy5nZXRQb3NpdGlvbihjKTtlPWdbMF0ub2Zmc2V0V2lkdGg7aD1nWzBdLm9mZnNldEhlaWdodDtzd2l0Y2goYz9kLnNwbGl0KCIgIilbMV06ZCl7Y2FzZSJib3R0b20iOmY9e3RvcDppLnRvcCtpLmhlaWdodCxsZWZ0OmkubGVmdCtpLndpZHRoLzItZS8yfTticmVhaztjYXNlInRvcCI6Zj17dG9wOmkudG9wLWgsbGVmdDppLmxlZnQraS53aWR0aC8yLWUvMn07YnJlYWs7Y2FzZSJsZWZ0IjpmPXt0b3A6aS50b3AraS5oZWlnaHQvMi1oLzIsbGVmdDppLmxlZnQtZX07YnJlYWs7Y2FzZSJyaWdodCI6Zj17dG9wOmkudG9wK2kuaGVpZ2h0LzItaC8yLGxlZnQ6aS5sZWZ0K2kud2lkdGh9O2JyZWFrfWcuY3NzKGYpLmFkZENsYXNzKGQpLmFkZENsYXNzKCJpbiIpfX0sc2V0Q29udGVudDpmdW5jdGlvbigpe3ZhciBkPXRoaXMudGlwKCksYz10aGlzLmdldFRpdGxlKCk7ZC5maW5kKCIudG9vbHRpcC1pbm5lciIpW3RoaXMub3B0aW9ucy5odG1sPyJodG1sIjoidGV4dCJdKGMpO2QucmVtb3ZlQ2xhc3MoImZhZGUgaW4gdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0Iil9LGhpZGU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGQ9dGhpcy50aXAoKTtkLnJlbW92ZUNsYXNzKCJpbiIpO2Z1bmN0aW9uIGUoKXt2YXIgZj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZC5vZmYoYi5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKS5yZW1vdmUoKX0sNTAwKTtkLm9uZShiLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZik7ZC5yZW1vdmUoKX0pfWIuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiR0aXAuaGFzQ2xhc3MoImZhZGUiKT9lKCk6ZC5yZW1vdmUoKTtyZXR1cm4gdGhpc30sZml4VGl0bGU6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLiRlbGVtZW50O2lmKGMuYXR0cigidGl0bGUiKXx8dHlwZW9mKGMuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIpKSE9InN0cmluZyIpe2MuYXR0cigiZGF0YS1vcmlnaW5hbC10aXRsZSIsYy5hdHRyKCJ0aXRsZSIpfHwiIikucmVtb3ZlQXR0cigidGl0bGUiKX19LGhhc0NvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfSxnZXRQb3NpdGlvbjpmdW5jdGlvbihjKXtyZXR1cm4gYi5leHRlbmQoe30sKGM/e3RvcDowLGxlZnQ6MH06dGhpcy4kZWxlbWVudC5vZmZzZXQoKSkse3dpZHRoOnRoaXMuJGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsaGVpZ2h0OnRoaXMuJGVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0fSl9LGdldFRpdGxlOmZ1bmN0aW9uKCl7dmFyIGUsYz10aGlzLiRlbGVtZW50LGQ9dGhpcy5vcHRpb25zO2U9Yy5hdHRyKCJkYXRhLW9yaWdpbmFsLXRpdGxlIil8fCh0eXBlb2YgZC50aXRsZT09ImZ1bmN0aW9uIj9kLnRpdGxlLmNhbGwoY1swXSk6ZC50aXRsZSk7cmV0dXJuIGV9LHRpcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLiR0aXA9dGhpcy4kdGlwfHxiKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSl9LHZhbGlkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuJGVsZW1lbnRbMF0ucGFyZW50Tm9kZSl7dGhpcy5oaWRlKCk7dGhpcy4kZWxlbWVudD1udWxsO3RoaXMub3B0aW9ucz1udWxsfX0sZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPXRydWV9LGRpc2FibGU6ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ZmFsc2V9LHRvZ2dsZUVuYWJsZWQ6ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9IXRoaXMuZW5hYmxlZH0sdG9nZ2xlOmZ1bmN0aW9uKCl7dGhpc1t0aGlzLnRpcCgpLmhhc0NsYXNzKCJpbiIpPyJoaWRlIjoic2hvdyJdKCl9LGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmhpZGUoKS4kZWxlbWVudC5vZmYoIi4iK3RoaXMudHlwZSkucmVtb3ZlRGF0YSh0aGlzLnR5cGUpfX07Yi5mbi50b29sdGlwPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZj1iKHRoaXMpLGU9Zi5kYXRhKCJ0b29sdGlwIiksZD10eXBlb2YgYz09Im9iamVjdCImJmM7aWYoIWUpe2YuZGF0YSgidG9vbHRpcCIsKGU9bmV3IGEodGhpcyxkKSkpfWlmKHR5cGVvZiBjPT0ic3RyaW5nIil7ZVtjXSgpfX0pfTtiLmZuLnRvb2x0aXAuQ29uc3RydWN0b3I9YTtiLmZuLnRvb2x0aXAuZGVmYXVsdHM9e2FuaW1hdGlvbjp0cnVlLHBsYWNlbWVudDoidG9wIixzZWxlY3RvcjpmYWxzZSx0ZW1wbGF0ZTonPGRpdiBjbGFzcz0idG9vbHRpcCI+PGRpdiBjbGFzcz0idG9vbHRpcC1hcnJvdyI+PC9kaXY+PGRpdiBjbGFzcz0idG9vbHRpcC1pbm5lciI+PC9kaXY+PC9kaXY+Jyx0cmlnZ2VyOiJob3ZlciIsdGl0bGU6IiIsZGVsYXk6MCxodG1sOnRydWV9fSh3aW5kb3cualF1ZXJ5KTshZnVuY3Rpb24oYil7dmFyIGE9ZnVuY3Rpb24oZCxjKXt0aGlzLmluaXQoInBvcG92ZXIiLGQsYyl9O2EucHJvdG90eXBlPWIuZXh0ZW5kKHt9LGIuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5wcm90b3R5cGUse2NvbnN0cnVjdG9yOmEsc2V0Q29udGVudDpmdW5jdGlvbigpe3ZhciBlPXRoaXMudGlwKCksZD10aGlzLmdldFRpdGxlKCksYz10aGlzLmdldENvbnRlbnQoKTtlLmZpbmQoIi5wb3BvdmVyLXRpdGxlIilbdGhpcy5vcHRpb25zLmh0bWw/Imh0bWwiOiJ0ZXh0Il0oZCk7ZS5maW5kKCIucG9wb3Zlci1jb250ZW50ID4gKiIpW3RoaXMub3B0aW9ucy5odG1sPyJodG1sIjoidGV4dCJdKGMpO2UucmVtb3ZlQ2xhc3MoImZhZGUgdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0IGluIil9LGhhc0NvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfHx0aGlzLmdldENvbnRlbnQoKX0sZ2V0Q29udGVudDpmdW5jdGlvbigpe3ZhciBkLGM9dGhpcy4kZWxlbWVudCxlPXRoaXMub3B0aW9ucztkPWMuYXR0cigiZGF0YS1jb250ZW50Iil8fCh0eXBlb2YgZS5jb250ZW50PT0iZnVuY3Rpb24iP2UuY29udGVudC5jYWxsKGNbMF0pOmUuY29udGVudCk7cmV0dXJuIGR9LHRpcDpmdW5jdGlvbigpe2lmKCF0aGlzLiR0aXApe3RoaXMuJHRpcD1iKHRoaXMub3B0aW9ucy50ZW1wbGF0ZSl9cmV0dXJuIHRoaXMuJHRpcH0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGlkZSgpLiRlbGVtZW50Lm9mZigiLiIrdGhpcy50eXBlKS5yZW1vdmVEYXRhKHRoaXMudHlwZSl9fSk7Yi5mbi5wb3BvdmVyPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZj1iKHRoaXMpLGU9Zi5kYXRhKCJwb3BvdmVyIiksZD10eXBlb2YgYz09Im9iamVjdCImJmM7aWYoIWUpe2YuZGF0YSgicG9wb3ZlciIsKGU9bmV3IGEodGhpcyxkKSkpfWlmKHR5cGVvZiBjPT0ic3RyaW5nIil7ZVtjXSgpfX0pfTtiLmZuLnBvcG92ZXIuQ29uc3RydWN0b3I9YTtiLmZuLnBvcG92ZXIuZGVmYXVsdHM9Yi5leHRlbmQoe30sYi5mbi50b29sdGlwLmRlZmF1bHRzLHtwbGFjZW1lbnQ6InJpZ2h0Iix0cmlnZ2VyOiJjbGljayIsY29udGVudDoiIix0ZW1wbGF0ZTonPGRpdiBjbGFzcz0icG9wb3ZlciI+PGRpdiBjbGFzcz0iYXJyb3ciPjwvZGl2PjxkaXYgY2xhc3M9InBvcG92ZXItaW5uZXIiPjxoMyBjbGFzcz0icG9wb3Zlci10aXRsZSI+PC9oMz48ZGl2IGNsYXNzPSJwb3BvdmVyLWNvbnRlbnQiPjxwPjwvcD48L2Rpdj48L2Rpdj48L2Rpdj4nfSl9KHdpbmRvdy5qUXVlcnkpOyFmdW5jdGlvbihiKXtmdW5jdGlvbiBhKGYsZSl7dmFyIGc9Yi5wcm94eSh0aGlzLnByb2Nlc3MsdGhpcyksYz1iKGYpLmlzKCJib2R5Iik/Yih3aW5kb3cpOmIoZiksZDt0aGlzLm9wdGlvbnM9Yi5leHRlbmQoe30sYi5mbi5zY3JvbGxzcHkuZGVmYXVsdHMsZSk7dGhpcy4kc2Nyb2xsRWxlbWVudD1jLm9uKCJzY3JvbGwuc2Nyb2xsLXNweS5kYXRhLWFwaSIsZyk7dGhpcy5zZWxlY3Rvcj0odGhpcy5vcHRpb25zLnRhcmdldHx8KChkPWIoZikuYXR0cigiaHJlZiIpKSYmZC5yZXBsYWNlKC8uKig/PSNbXlxzXSskKS8sIiIpKXx8IiIpKyIgLm5hdiBsaSA+IGEiO3RoaXMuJGJvZHk9YigiYm9keSIpO3RoaXMucmVmcmVzaCgpO3RoaXMucHJvY2VzcygpfWEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphLHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLGQ7dGhpcy5vZmZzZXRzPWIoW10pO3RoaXMudGFyZ2V0cz1iKFtdKTtkPXRoaXMuJGJvZHkuZmluZCh0aGlzLnNlbGVjdG9yKS5tYXAoZnVuY3Rpb24oKXt2YXIgZj1iKHRoaXMpLGU9Zi5kYXRhKCJ0YXJnZXQiKXx8Zi5hdHRyKCJocmVmIiksZz0vXiNcdy8udGVzdChlKSYmYihlKTtyZXR1cm4oZyYmZy5sZW5ndGgmJltbZy5wb3NpdGlvbigpLnRvcCxlXV0pfHxudWxsfSkuc29ydChmdW5jdGlvbihmLGUpe3JldHVybiBmWzBdLWVbMF19KS5lYWNoKGZ1bmN0aW9uKCl7Yy5vZmZzZXRzLnB1c2godGhpc1swXSk7Yy50YXJnZXRzLnB1c2godGhpc1sxXSl9KX0scHJvY2VzczpmdW5jdGlvbigpe3ZhciBoPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkrdGhpcy5vcHRpb25zLm9mZnNldCxlPXRoaXMuJHNjcm9sbEVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0fHx0aGlzLiRib2R5WzBdLnNjcm9sbEhlaWdodCxnPWUtdGhpcy4kc2Nyb2xsRWxlbWVudC5oZWlnaHQoKSxmPXRoaXMub2Zmc2V0cyxjPXRoaXMudGFyZ2V0cyxqPXRoaXMuYWN0aXZlVGFyZ2V0LGQ7aWYoaD49Zyl7cmV0dXJuIGohPShkPWMubGFzdCgpWzBdKSYmdGhpcy5hY3RpdmF0ZShkKX1mb3IoZD1mLmxlbmd0aDtkLS07KXtqIT1jW2RdJiZoPj1mW2RdJiYoIWZbZCsxXXx8aDw9ZltkKzFdKSYmdGhpcy5hY3RpdmF0ZShjW2RdKX19LGFjdGl2YXRlOmZ1bmN0aW9uKGUpe3ZhciBkLGM7dGhpcy5hY3RpdmVUYXJnZXQ9ZTtiKHRoaXMuc2VsZWN0b3IpLnBhcmVudCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTtjPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD0iJytlKyciXSwnK3RoaXMuc2VsZWN0b3IrJ1tocmVmPSInK2UrJyJdJztkPWIoYykucGFyZW50KCJsaSIpLmFkZENsYXNzKCJhY3RpdmUiKTtpZihkLnBhcmVudCgiLmRyb3Bkb3duLW1lbnUiKS5sZW5ndGgpe2Q9ZC5jbG9zZXN0KCJsaS5kcm9wZG93biIpLmFkZENsYXNzKCJhY3RpdmUiKX1kLnRyaWdnZXIoImFjdGl2YXRlIil9fTtiLmZuLnNjcm9sbHNweT1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGY9Yih0aGlzKSxlPWYuZGF0YSgic2Nyb2xsc3B5IiksZD10eXBlb2YgYz09Im9iamVjdCImJmM7aWYoIWUpe2YuZGF0YSgic2Nyb2xsc3B5IiwoZT1uZXcgYSh0aGlzLGQpKSl9aWYodHlwZW9mIGM9PSJzdHJpbmciKXtlW2NdKCl9fSl9O2IuZm4uc2Nyb2xsc3B5LkNvbnN0cnVjdG9yPWE7Yi5mbi5zY3JvbGxzcHkuZGVmYXVsdHM9e29mZnNldDoxMH07Yih3aW5kb3cpLm9uKCJsb2FkIixmdW5jdGlvbigpe2IoJ1tkYXRhLXNweT0ic2Nyb2xsIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9Yih0aGlzKTtjLnNjcm9sbHNweShjLmRhdGEoKSl9KX0pfSh3aW5kb3cualF1ZXJ5KTshZnVuY3Rpb24oYil7dmFyIGE9ZnVuY3Rpb24oYyl7dGhpcy5lbGVtZW50PWIoYyl9O2EucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjphLHNob3c6ZnVuY3Rpb24oKXt2YXIgaT10aGlzLmVsZW1lbnQsZj1pLmNsb3Nlc3QoInVsOm5vdCguZHJvcGRvd24tbWVudSkiKSxkPWkuYXR0cigiZGF0YS10YXJnZXQiKSxnLGMsaDtpZighZCl7ZD1pLmF0dHIoImhyZWYiKTtkPWQmJmQucmVwbGFjZSgvLiooPz0jW15cc10qJCkvLCIiKX1pZihpLnBhcmVudCgibGkiKS5oYXNDbGFzcygiYWN0aXZlIikpe3JldHVybn1nPWYuZmluZCgiLmFjdGl2ZSBhIikubGFzdCgpWzBdO2g9Yi5FdmVudCgic2hvdyIse3JlbGF0ZWRUYXJnZXQ6Z30pO2kudHJpZ2dlcihoKTtpZihoLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtyZXR1cm59Yz1iKGQpO3RoaXMuYWN0aXZhdGUoaS5wYXJlbnQoImxpIiksZik7dGhpcy5hY3RpdmF0ZShjLGMucGFyZW50KCksZnVuY3Rpb24oKXtpLnRyaWdnZXIoe3R5cGU6InNob3duIixyZWxhdGVkVGFyZ2V0Omd9KX0pfSxhY3RpdmF0ZTpmdW5jdGlvbihlLGQsaCl7dmFyIGM9ZC5maW5kKCI+IC5hY3RpdmUiKSxnPWgmJmIuc3VwcG9ydC50cmFuc2l0aW9uJiZjLmhhc0NsYXNzKCJmYWRlIik7ZnVuY3Rpb24gZigpe2MucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpLmZpbmQoIj4gLmRyb3Bkb3duLW1lbnUgPiAuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpO2UuYWRkQ2xhc3MoImFjdGl2ZSIpO2lmKGcpe2VbMF0ub2Zmc2V0V2lkdGg7ZS5hZGRDbGFzcygiaW4iKX1lbHNle2UucmVtb3ZlQ2xhc3MoImZhZGUiKX1pZihlLnBhcmVudCgiLmRyb3Bkb3duLW1lbnUiKSl7ZS5jbG9zZXN0KCJsaS5kcm9wZG93biIpLmFkZENsYXNzKCJhY3RpdmUiKX1oJiZoKCl9Zz9jLm9uZShiLnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZik6ZigpO2MucmVtb3ZlQ2xhc3MoImluIil9fTtiLmZuLnRhYj1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9Yih0aGlzKSxkPWUuZGF0YSgidGFiIik7aWYoIWQpe2UuZGF0YSgidGFiIiwoZD1uZXcgYSh0aGlzKSkpfWlmKHR5cGVvZiBjPT0ic3RyaW5nIil7ZFtjXSgpfX0pfTtiLmZuLnRhYi5Db25zdHJ1Y3Rvcj1hO2IoZnVuY3Rpb24oKXtiKCJib2R5Iikub24oImNsaWNrLnRhYi5kYXRhLWFwaSIsJ1tkYXRhLXRvZ2dsZT0idGFiIl0sIFtkYXRhLXRvZ2dsZT0icGlsbCJdJyxmdW5jdGlvbihjKXtjLnByZXZlbnREZWZhdWx0KCk7Yih0aGlzKS50YWIoInNob3ciKX0pfSl9KHdpbmRvdy5qUXVlcnkpOyFmdW5jdGlvbihhKXt2YXIgYj1mdW5jdGlvbihkLGMpe3RoaXMuJGVsZW1lbnQ9YShkKTt0aGlzLm9wdGlvbnM9YS5leHRlbmQoe30sYS5mbi50eXBlYWhlYWQuZGVmYXVsdHMsYyk7dGhpcy5tYXRjaGVyPXRoaXMub3B0aW9ucy5tYXRjaGVyfHx0aGlzLm1hdGNoZXI7dGhpcy5zb3J0ZXI9dGhpcy5vcHRpb25zLnNvcnRlcnx8dGhpcy5zb3J0ZXI7dGhpcy5oaWdobGlnaHRlcj10aGlzLm9wdGlvbnMuaGlnaGxpZ2h0ZXJ8fHRoaXMuaGlnaGxpZ2h0ZXI7dGhpcy51cGRhdGVyPXRoaXMub3B0aW9ucy51cGRhdGVyfHx0aGlzLnVwZGF0ZXI7dGhpcy4kbWVudT1hKHRoaXMub3B0aW9ucy5tZW51KS5hcHBlbmRUbygiYm9keSIpO3RoaXMuc291cmNlPXRoaXMub3B0aW9ucy5zb3VyY2U7dGhpcy5zaG93bj1mYWxzZTt0aGlzLmxpc3RlbigpfTtiLnByb3RvdHlwZT17Y29uc3RydWN0b3I6YixzZWxlY3Q6ZnVuY3Rpb24oKXt2YXIgYz10aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUiKS5hdHRyKCJkYXRhLXZhbHVlIik7dGhpcy4kZWxlbWVudC52YWwodGhpcy51cGRhdGVyKGMpKS5jaGFuZ2UoKTtyZXR1cm4gdGhpcy5oaWRlKCl9LHVwZGF0ZXI6ZnVuY3Rpb24oYyl7cmV0dXJuIGN9LHNob3c6ZnVuY3Rpb24oKXt2YXIgYz1hLmV4dGVuZCh7fSx0aGlzLiRlbGVtZW50Lm9mZnNldCgpLHtoZWlnaHQ6dGhpcy4kZWxlbWVudFswXS5vZmZzZXRIZWlnaHR9KTt0aGlzLiRtZW51LmNzcyh7dG9wOmMudG9wK2MuaGVpZ2h0LGxlZnQ6Yy5sZWZ0fSk7dGhpcy4kbWVudS5zaG93KCk7dGhpcy5zaG93bj10cnVlO3JldHVybiB0aGlzfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy4kbWVudS5oaWRlKCk7dGhpcy5zaG93bj1mYWxzZTtyZXR1cm4gdGhpc30sbG9va3VwOmZ1bmN0aW9uKGQpe3ZhciBjO3RoaXMucXVlcnk9dGhpcy4kZWxlbWVudC52YWwoKTtpZighdGhpcy5xdWVyeXx8dGhpcy5xdWVyeS5sZW5ndGg8dGhpcy5vcHRpb25zLm1pbkxlbmd0aCl7cmV0dXJuIHRoaXMuc2hvd24/dGhpcy5oaWRlKCk6dGhpc31jPWEuaXNGdW5jdGlvbih0aGlzLnNvdXJjZSk/dGhpcy5zb3VyY2UodGhpcy5xdWVyeSxhLnByb3h5KHRoaXMucHJvY2Vzcyx0aGlzKSk6dGhpcy5zb3VyY2U7cmV0dXJuIGM/dGhpcy5wcm9jZXNzKGMpOnRoaXN9LHByb2Nlc3M6ZnVuY3Rpb24oYyl7dmFyIGQ9dGhpcztjPWEuZ3JlcChjLGZ1bmN0aW9uKGUpe3JldHVybiBkLm1hdGNoZXIoZSl9KTtjPXRoaXMuc29ydGVyKGMpO2lmKCFjLmxlbmd0aCl7cmV0dXJuIHRoaXMuc2hvd24/dGhpcy5oaWRlKCk6dGhpc31yZXR1cm4gdGhpcy5yZW5kZXIoYy5zbGljZSgwLHRoaXMub3B0aW9ucy5pdGVtcykpLnNob3coKX0sbWF0Y2hlcjpmdW5jdGlvbihjKXtyZXR1cm4gfmMudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMucXVlcnkudG9Mb3dlckNhc2UoKSl9LHNvcnRlcjpmdW5jdGlvbihlKXt2YXIgZj1bXSxkPVtdLGM9W10sZzt3aGlsZShnPWUuc2hpZnQoKSl7aWYoIWcudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMucXVlcnkudG9Mb3dlckNhc2UoKSkpe2YucHVzaChnKX1lbHNle2lmKH5nLmluZGV4T2YodGhpcy5xdWVyeSkpe2QucHVzaChnKX1lbHNle2MucHVzaChnKX19fXJldHVybiBmLmNvbmNhdChkLGMpfSxoaWdobGlnaHRlcjpmdW5jdGlvbihjKXt2YXIgZD10aGlzLnF1ZXJ5LnJlcGxhY2UoL1tcLVxbXF17fSgpKis/LixcXFxeJHwjXHNdL2csIlxcJCYiKTtyZXR1cm4gYy5yZXBsYWNlKG5ldyBSZWdFeHAoIigiK2QrIikiLCJpZyIpLGZ1bmN0aW9uKGUsZil7cmV0dXJuIjxzdHJvbmc+IitmKyI8L3N0cm9uZz4ifSl9LHJlbmRlcjpmdW5jdGlvbihjKXt2YXIgZD10aGlzO2M9YShjKS5tYXAoZnVuY3Rpb24oZSxmKXtlPWEoZC5vcHRpb25zLml0ZW0pLmF0dHIoImRhdGEtdmFsdWUiLGYpO2UuZmluZCgiYSIpLmh0bWwoZC5oaWdobGlnaHRlcihmKSk7cmV0dXJuIGVbMF19KTtjLmZpcnN0KCkuYWRkQ2xhc3MoImFjdGl2ZSIpO3RoaXMuJG1lbnUuaHRtbChjKTtyZXR1cm4gdGhpc30sbmV4dDpmdW5jdGlvbihkKXt2YXIgZT10aGlzLiRtZW51LmZpbmQoIi5hY3RpdmUiKS5yZW1vdmVDbGFzcygiYWN0aXZlIiksYz1lLm5leHQoKTtpZighYy5sZW5ndGgpe2M9YSh0aGlzLiRtZW51LmZpbmQoImxpIilbMF0pfWMuYWRkQ2xhc3MoImFjdGl2ZSIpfSxwcmV2OmZ1bmN0aW9uKGQpe3ZhciBlPXRoaXMuJG1lbnUuZmluZCgiLmFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKSxjPWUucHJldigpO2lmKCFjLmxlbmd0aCl7Yz10aGlzLiRtZW51LmZpbmQoImxpIikubGFzdCgpfWMuYWRkQ2xhc3MoImFjdGl2ZSIpfSxsaXN0ZW46ZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50Lm9uKCJibHVyIixhLnByb3h5KHRoaXMuYmx1cix0aGlzKSkub24oImtleXByZXNzIixhLnByb3h5KHRoaXMua2V5cHJlc3MsdGhpcykpLm9uKCJrZXl1cCIsYS5wcm94eSh0aGlzLmtleXVwLHRoaXMpKTtpZihhLmJyb3dzZXIud2Via2l0fHxhLmJyb3dzZXIubXNpZSl7dGhpcy4kZWxlbWVudC5vbigia2V5ZG93biIsYS5wcm94eSh0aGlzLmtleWRvd24sdGhpcykpfXRoaXMuJG1lbnUub24oImNsaWNrIixhLnByb3h5KHRoaXMuY2xpY2ssdGhpcykpLm9uKCJtb3VzZWVudGVyIiwibGkiLGEucHJveHkodGhpcy5tb3VzZWVudGVyLHRoaXMpKX0sbW92ZTpmdW5jdGlvbihjKXtpZighdGhpcy5zaG93bil7cmV0dXJufXN3aXRjaChjLmtleUNvZGUpe2Nhc2UgOTpjYXNlIDEzOmNhc2UgMjc6Yy5wcmV2ZW50RGVmYXVsdCgpO2JyZWFrO2Nhc2UgMzg6Yy5wcmV2ZW50RGVmYXVsdCgpO3RoaXMucHJldigpO2JyZWFrO2Nhc2UgNDA6Yy5wcmV2ZW50RGVmYXVsdCgpO3RoaXMubmV4dCgpO2JyZWFrfWMuc3RvcFByb3BhZ2F0aW9uKCl9LGtleWRvd246ZnVuY3Rpb24oYyl7dGhpcy5zdXBwcmVzc0tleVByZXNzUmVwZWF0PSF+YS5pbkFycmF5KGMua2V5Q29kZSxbNDAsMzgsOSwxMywyN10pO3RoaXMubW92ZShjKX0sa2V5cHJlc3M6ZnVuY3Rpb24oYyl7aWYodGhpcy5zdXBwcmVzc0tleVByZXNzUmVwZWF0KXtyZXR1cm59dGhpcy5tb3ZlKGMpfSxrZXl1cDpmdW5jdGlvbihjKXtzd2l0Y2goYy5rZXlDb2RlKXtjYXNlIDQwOmNhc2UgMzg6YnJlYWs7Y2FzZSA5OmNhc2UgMTM6aWYoIXRoaXMuc2hvd24pe3JldHVybn10aGlzLnNlbGVjdCgpO2JyZWFrO2Nhc2UgMjc6aWYoIXRoaXMuc2hvd24pe3JldHVybn10aGlzLmhpZGUoKTticmVhaztkZWZhdWx0OnRoaXMubG9va3VwKCl9Yy5zdG9wUHJvcGFnYXRpb24oKTtjLnByZXZlbnREZWZhdWx0KCl9LGJsdXI6ZnVuY3Rpb24oZCl7dmFyIGM9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5oaWRlKCl9LDE1MCl9LGNsaWNrOmZ1bmN0aW9uKGMpe2Muc3RvcFByb3BhZ2F0aW9uKCk7Yy5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuc2VsZWN0KCl9LG1vdXNlZW50ZXI6ZnVuY3Rpb24oYyl7dGhpcy4kbWVudS5maW5kKCIuYWN0aXZlIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpO2EoYy5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcygiYWN0aXZlIil9fTthLmZuLnR5cGVhaGVhZD1mdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGY9YSh0aGlzKSxlPWYuZGF0YSgidHlwZWFoZWFkIiksZD10eXBlb2YgYz09Im9iamVjdCImJmM7aWYoIWUpe2YuZGF0YSgidHlwZWFoZWFkIiwoZT1uZXcgYih0aGlzLGQpKSl9aWYodHlwZW9mIGM9PSJzdHJpbmciKXtlW2NdKCl9fSl9O2EuZm4udHlwZWFoZWFkLmRlZmF1bHRzPXtzb3VyY2U6W10saXRlbXM6OCxtZW51Oic8dWwgY2xhc3M9InR5cGVhaGVhZCBkcm9wZG93bi1tZW51Ij48L3VsPicsaXRlbTonPGxpPjxhIGhyZWY9IiMiPjwvYT48L2xpPicsbWluTGVuZ3RoOjF9O2EuZm4udHlwZWFoZWFkLkNvbnN0cnVjdG9yPWI7YShmdW5jdGlvbigpe2EoImJvZHkiKS5vbigiZm9jdXMudHlwZWFoZWFkLmRhdGEtYXBpIiwnW2RhdGEtcHJvdmlkZT0idHlwZWFoZWFkIl0nLGZ1bmN0aW9uKGQpe3ZhciBjPWEodGhpcyk7aWYoYy5kYXRhKCJ0eXBlYWhlYWQiKSl7cmV0dXJufWQucHJldmVudERlZmF1bHQoKTtjLnR5cGVhaGVhZChjLmRhdGEoKSl9KX0pfSh3aW5kb3cualF1ZXJ5KTshZnVuY3Rpb24oYil7dmFyIGE9ZnVuY3Rpb24oZCxjKXt0aGlzLm9wdGlvbnM9Yi5leHRlbmQoe30sYi5mbi5hZmZpeC5kZWZhdWx0cyxjKTt0aGlzLiR3aW5kb3c9Yih3aW5kb3cpLm9uKCJzY3JvbGwuYWZmaXguZGF0YS1hcGkiLGIucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLHRoaXMpKTt0aGlzLiRlbGVtZW50PWIoZCk7dGhpcy5jaGVja1Bvc2l0aW9uKCl9O2EucHJvdG90eXBlLmNoZWNrUG9zaXRpb249ZnVuY3Rpb24oKXtpZighdGhpcy4kZWxlbWVudC5pcygiOnZpc2libGUiKSl7cmV0dXJufXZhciBnPWIoZG9jdW1lbnQpLmhlaWdodCgpLGk9dGhpcy4kd2luZG93LnNjcm9sbFRvcCgpLGM9dGhpcy4kZWxlbWVudC5vZmZzZXQoKSxqPXRoaXMub3B0aW9ucy5vZmZzZXQsZT1qLmJvdHRvbSxmPWoudG9wLGg9ImFmZml4IGFmZml4LXRvcCBhZmZpeC1ib3R0b20iLGQ7aWYodHlwZW9mIGohPSJvYmplY3QiKXtlPWY9an1pZih0eXBlb2YgZj09ImZ1bmN0aW9uIil7Zj1qLnRvcCgpfWlmKHR5cGVvZiBlPT0iZnVuY3Rpb24iKXtlPWouYm90dG9tKCl9ZD10aGlzLnVucGluIT1udWxsJiYoaSt0aGlzLnVucGluPD1jLnRvcCk/ZmFsc2U6ZSE9bnVsbCYmKGMudG9wK3RoaXMuJGVsZW1lbnQuaGVpZ2h0KCk+PWctZSk/ImJvdHRvbSI6ZiE9bnVsbCYmaTw9Zj8idG9wIjpmYWxzZTtpZih0aGlzLmFmZml4ZWQ9PT1kKXtyZXR1cm59dGhpcy5hZmZpeGVkPWQ7dGhpcy51bnBpbj1kPT0iYm90dG9tIj9jLnRvcC1pOm51bGw7dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhoKS5hZGRDbGFzcygiYWZmaXgiKyhkPyItIitkOiIiKSl9O2IuZm4uYWZmaXg9ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBmPWIodGhpcyksZT1mLmRhdGEoImFmZml4IiksZD10eXBlb2YgYz09Im9iamVjdCImJmM7aWYoIWUpe2YuZGF0YSgiYWZmaXgiLChlPW5ldyBhKHRoaXMsZCkpKX1pZih0eXBlb2YgYz09InN0cmluZyIpe2VbY10oKX19KX07Yi5mbi5hZmZpeC5Db25zdHJ1Y3Rvcj1hO2IuZm4uYWZmaXguZGVmYXVsdHM9e29mZnNldDowfTtiKHdpbmRvdykub24oImxvYWQiLGZ1bmN0aW9uKCl7YignW2RhdGEtc3B5PSJhZmZpeCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBkPWIodGhpcyksYz1kLmRhdGEoKTtjLm9mZnNldD1jLm9mZnNldHx8e307Yy5vZmZzZXRCb3R0b20mJihjLm9mZnNldC5ib3R0b209Yy5vZmZzZXRCb3R0b20pO2Mub2Zmc2V0VG9wJiYoYy5vZmZzZXQudG9wPWMub2Zmc2V0VG9wKTtkLmFmZml4KGMpfSl9KX0od2luZG93LmpRdWVyeSk7dmFyIHE9bnVsbDt3aW5kb3cuUFJfU0hPVUxEX1VTRV9DT05USU5VQVRJT049ITA7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZChGKXtmdW5jdGlvbiB3KEope3ZhciBLPUouY2hhckNvZGVBdCgwKTtpZihLIT09OTIpe3JldHVybiBLfXZhciBJPUouY2hhckF0KDEpO3JldHVybihLPWtbSV0pP0s6IjAiPD1JJiZJPD0iNyI/cGFyc2VJbnQoSi5zdWJzdHJpbmcoMSksOCk6ST09PSJ1Inx8ST09PSJ4Ij9wYXJzZUludChKLnN1YnN0cmluZygyKSwxNik6Si5jaGFyQ29kZUF0KDEpfWZ1bmN0aW9uIEMoSSl7aWYoSTwzMil7cmV0dXJuKEk8MTY/IlxceDAiOiJcXHgiKStJLnRvU3RyaW5nKDE2KX1JPVN0cmluZy5mcm9tQ2hhckNvZGUoSSk7aWYoST09PSJcXCJ8fEk9PT0iLSJ8fEk9PT0iWyJ8fEk9PT0iXSIpe0k9IlxcIitJfXJldHVybiBJfWZ1bmN0aW9uIEEoSil7Zm9yKHZhciBNPUouc3Vic3RyaW5nKDEsSi5sZW5ndGgtMSkubWF0Y2goL1xcdVtcZEEtRmEtZl17NH18XFx4W1xkQS1GYS1mXXsyfXxcXFswLTNdWzAtN117MCwyfXxcXFswLTddezEsMn18XFxbXFNcc118W15cXF0vZyksSj1bXSxJPVtdLE89TVswXT09PSJeIixQPU8/MTowLEw9TS5sZW5ndGg7UDxMOysrUCl7dmFyIEs9TVtQXTtpZigvXFxbYmRzd10vaS50ZXN0KEspKXtKLnB1c2goSyl9ZWxzZXt2YXIgSz13KEspLE47UCsyPEwmJiItIj09PU1bUCsxXT8oTj13KE1bUCsyXSksUCs9Mik6Tj1LO0kucHVzaChbSyxOXSk7Tjw2NXx8Sz4xMjJ8fChOPDY1fHxLPjkwfHxJLnB1c2goW01hdGgubWF4KDY1LEspfDMyLE1hdGgubWluKE4sOTApfDMyXSksTjw5N3x8Sz4xMjJ8fEkucHVzaChbTWF0aC5tYXgoOTcsSykmLTMzLE1hdGgubWluKE4sMTIyKSYtMzNdKSl9fUkuc29ydChmdW5jdGlvbihRLFIpe3JldHVybiBRWzBdLVJbMF18fFJbMV0tUVsxXX0pO009W107Sz1bTmFOLE5hTl07Zm9yKFA9MDtQPEkubGVuZ3RoOysrUCl7TD1JW1BdLExbMF08PUtbMV0rMT9LWzFdPU1hdGgubWF4KEtbMV0sTFsxXSk6TS5wdXNoKEs9TCl9ST1bIlsiXTtPJiZJLnB1c2goIl4iKTtJLnB1c2guYXBwbHkoSSxKKTtmb3IoUD0wO1A8TS5sZW5ndGg7KytQKXtMPU1bUF0sSS5wdXNoKEMoTFswXSkpLExbMV0+TFswXSYmKExbMV0rMT5MWzBdJiZJLnB1c2goIi0iKSxJLnB1c2goQyhMWzFdKSkpfUkucHVzaCgiXSIpO3JldHVybiBJLmpvaW4oIiIpfWZ1bmN0aW9uIEUoSil7Zm9yKHZhciBNPUouc291cmNlLm1hdGNoKC9cWyg/OlteXFxcXV18XFxbXFNcc10pKl18XFx1W1xkQS1GYS1mXXs0fXxcXHhbXGRBLUZhLWZdezJ9fFxcXGQrfFxcW15cZHV4XXxcKFw/WyE6PV18WygpXl18W14oKVtcXF5dKy9nKSxJPU0ubGVuZ3RoLE49W10sTz0wLEw9MDtPPEk7KytPKXt2YXIgSz1NW09dO0s9PT0iKCI/KytMOiJcXCI9PT1LLmNoYXJBdCgwKSYmKEs9K0suc3Vic3RyaW5nKDEpKSYmSzw9TCYmKE5bS109LTEpfWZvcihPPTE7TzxOLmxlbmd0aDsrK08pey0xPT09TltPXSYmKE5bT109KytHKX1mb3IoTD1PPTA7TzxJOysrTyl7Sz1NW09dLEs9PT0iKCI/KCsrTCxOW0xdPT09dm9pZCAwJiYoTVtPXT0iKD86IikpOiJcXCI9PT1LLmNoYXJBdCgwKSYmKEs9K0suc3Vic3RyaW5nKDEpKSYmSzw9TCYmKE1bT109IlxcIitOW0xdKX1mb3IoTD1PPTA7TzxJOysrTyl7Il4iPT09TVtPXSYmIl4iIT09TVtPKzFdJiYoTVtPXT0iIil9aWYoSi5pZ25vcmVDYXNlJiZIKXtmb3IoTz0wO088STsrK08pe0s9TVtPXSxKPUsuY2hhckF0KDApLEsubGVuZ3RoPj0yJiZKPT09IlsiP01bT109QShLKTpKIT09IlxcIiYmKE1bT109Sy5yZXBsYWNlKC9bQS1aYS16XS9nLGZ1bmN0aW9uKFApe1A9UC5jaGFyQ29kZUF0KDApO3JldHVybiJbIitTdHJpbmcuZnJvbUNoYXJDb2RlKFAmLTMzLFB8MzIpKyJdIn0pKX19cmV0dXJuIE0uam9pbigiIil9Zm9yKHZhciBHPTAsSD0hMSx4PSExLHU9MCxEPUYubGVuZ3RoO3U8RDsrK3Upe3ZhciBCPUZbdV07aWYoQi5pZ25vcmVDYXNlKXt4PSEwfWVsc2V7aWYoL1thLXpdL2kudGVzdChCLnNvdXJjZS5yZXBsYWNlKC9cXHVbXGRhLWZdezR9fFxceFtcZGEtZl17Mn18XFxbXlVYdXhdL2dpLCIiKSkpe0g9ITA7eD0hMTticmVha319fWZvcih2YXIgaz17Yjo4LHQ6OSxuOjEwLHY6MTEsZjoxMixyOjEzfSx2PVtdLHU9MCxEPUYubGVuZ3RoO3U8RDsrK3Upe0I9Rlt1XTtpZihCLmdsb2JhbHx8Qi5tdWx0aWxpbmUpe3Rocm93IEVycm9yKCIiK0IpfXYucHVzaCgiKD86IitFKEIpKyIpIil9cmV0dXJuIFJlZ0V4cCh2LmpvaW4oInwiKSx4PyJnaSI6ImciKX1mdW5jdGlvbiBjKEIpe2Z1bmN0aW9uIHUoRSl7c3dpdGNoKEUubm9kZVR5cGUpe2Nhc2UgMTppZih4LnRlc3QoRS5jbGFzc05hbWUpKXticmVha31mb3IodmFyIEY9RS5maXJzdENoaWxkO0Y7Rj1GLm5leHRTaWJsaW5nKXt1KEYpfUY9RS5ub2RlTmFtZTtpZigiQlIiPT09Rnx8IkxJIj09PUYpe3dbRF09IlxuIixDW0Q8PDFdPUErKyxDW0QrKzw8MXwxXT1FfWJyZWFrO2Nhc2UgMzpjYXNlIDQ6Rj1FLm5vZGVWYWx1ZSxGLmxlbmd0aCYmKEY9az9GLnJlcGxhY2UoL1xyXG4/L2csIlxuIik6Ri5yZXBsYWNlKC9bXHRcblxyIF0rL2csIiAiKSx3W0RdPUYsQ1tEPDwxXT1BLEErPUYubGVuZ3RoLENbRCsrPDwxfDFdPUUpfX12YXIgeD0vKD86Xnxccylub2NvZGUoPzpcc3wkKS8sdz1bXSxBPTAsQz1bXSxEPTAsdjtCLmN1cnJlbnRTdHlsZT92PUIuY3VycmVudFN0eWxlLndoaXRlU3BhY2U6d2luZG93LmdldENvbXB1dGVkU3R5bGUmJih2PWRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoQixxKS5nZXRQcm9wZXJ0eVZhbHVlKCJ3aGl0ZS1zcGFjZSIpKTt2YXIgaz12JiYicHJlIj09PXYuc3Vic3RyaW5nKDAsMyk7dShCKTtyZXR1cm57YTp3LmpvaW4oIiIpLnJlcGxhY2UoL1xuJC8sIiIpLGM6Q319ZnVuY3Rpb24gdCh1LGssdyx2KXtrJiYodT17YTprLGQ6dX0sdyh1KSx2LnB1c2guYXBwbHkodix1LmUpKX1mdW5jdGlvbiBoKHUsayl7ZnVuY3Rpb24geChQKXtmb3IodmFyIEY9UC5kLEM9W0YsInBsbiJdLEw9MCxKPVAuYS5tYXRjaChBKXx8W10sQj17fSxFPTAsTj1KLmxlbmd0aDtFPE47KytFKXt2YXIgSz1KW0VdLE89QltLXSxEPXZvaWQgMCxNO2lmKHR5cGVvZiBPPT09InN0cmluZyIpe009ITF9ZWxzZXt2YXIgST13W0suY2hhckF0KDApXTtpZihJKXtEPUsubWF0Y2goSVsxXSksTz1JWzBdfWVsc2V7Zm9yKE09MDtNPHY7KytNKXtpZihJPWtbTV0sRD1LLm1hdGNoKElbMV0pKXtPPUlbMF07YnJlYWt9fUR8fChPPSJwbG4iKX1pZigoTT1PLmxlbmd0aD49NSYmImxhbmctIj09PU8uc3Vic3RyaW5nKDAsNSkpJiYhKEQmJnR5cGVvZiBEWzFdPT09InN0cmluZyIpKXtNPSExLE89InNyYyJ9TXx8KEJbS109Tyl9ST1MO0wrPUsubGVuZ3RoO2lmKE0pe009RFsxXTt2YXIgSD1LLmluZGV4T2YoTSksRz1IK00ubGVuZ3RoO0RbMl0mJihHPUsubGVuZ3RoLURbMl0ubGVuZ3RoLEg9Ry1NLmxlbmd0aCk7Tz1PLnN1YnN0cmluZyg1KTt0KEYrSSxLLnN1YnN0cmluZygwLEgpLHgsQyk7dChGK0krSCxNLHMoTyxNKSxDKTt0KEYrSStHLEsuc3Vic3RyaW5nKEcpLHgsQyl9ZWxzZXtDLnB1c2goRitJLE8pfX1QLmU9Q312YXIgdz17fSxBOyhmdW5jdGlvbigpe2Zvcih2YXIgRz11LmNvbmNhdChrKSxCPVtdLEY9e30sSD0wLEU9Ry5sZW5ndGg7SDxFOysrSCl7dmFyIEQ9R1tIXSxJPURbM107aWYoSSl7Zm9yKHZhciBDPUkubGVuZ3RoOy0tQz49MDspe3dbSS5jaGFyQXQoQyldPUR9fUQ9RFsxXTtJPSIiK0Q7Ri5oYXNPd25Qcm9wZXJ0eShJKXx8KEIucHVzaChEKSxGW0ldPXEpfUIucHVzaCgvW1xTXHNdLyk7QT1kKEIpfSkoKTt2YXIgdj1rLmxlbmd0aDtyZXR1cm4geH1mdW5jdGlvbiBvKHUpe3ZhciBrPVtdLHc9W107dS50cmlwbGVRdW90ZWRTdHJpbmdzP2sucHVzaChbInN0ciIsL14oPzonJycoPzpbXidcXF18XFxbXFNcc118Jyc/KD89W14nXSkpKig/OicnJ3wkKXwiIiIoPzpbXiJcXF18XFxbXFNcc118IiI/KD89W14iXSkpKig/OiIiInwkKXwnKD86W14nXFxdfFxcW1xTXHNdKSooPzonfCQpfCIoPzpbXiJcXF18XFxbXFNcc10pKig/OiJ8JCkpLyxxLCInXCIiXSk6dS5tdWx0aUxpbmVTdHJpbmdzP2sucHVzaChbInN0ciIsL14oPzonKD86W14nXFxdfFxcW1xTXHNdKSooPzonfCQpfCIoPzpbXiJcXF18XFxbXFNcc10pKig/OiJ8JCl8YCg/OlteXFxgXXxcXFtcU1xzXSkqKD86YHwkKSkvLHEsIidcImAiXSk6ay5wdXNoKFsic3RyIiwvXig/OicoPzpbXlxuXHInXFxdfFxcLikqKD86J3wkKXwiKD86W15cblxyIlxcXXxcXC4pKig/OiJ8JCkpLyxxLCJcIiciXSk7dS52ZXJiYXRpbVN0cmluZ3MmJncucHVzaChbInN0ciIsL15AIig/OlteIl18IiIpKig/OiJ8JCkvLHFdKTt2YXIgdj11Lmhhc2hDb21tZW50czt2JiYodS5jU3R5bGVDb21tZW50cz8odj4xP2sucHVzaChbImNvbSIsL14jKD86IyMoPzpbXiNdfCMoPyEjIykpKig/OiMjI3wkKXwuKikvLHEsIiMiXSk6ay5wdXNoKFsiY29tIiwvXiMoPzooPzpkZWZpbmV8ZWxpZnxlbHNlfGVuZGlmfGVycm9yfGlmZGVmfGluY2x1ZGV8aWZuZGVmfGxpbmV8cHJhZ21hfHVuZGVmfHdhcm5pbmcpXGJ8W15cblxyXSopLyxxLCIjIl0pLHcucHVzaChbInN0ciIsL148KD86KD86KD86XC5cLlwvKSp8XC8/KSg/Oltcdy1dKyg/OlwvW1x3LV0rKSspP1tcdy1dK1wuaHxbYS16XVx3Kik+LyxxXSkpOmsucHVzaChbImNvbSIsL14jW15cblxyXSovLHEsIiMiXSkpO3UuY1N0eWxlQ29tbWVudHMmJih3LnB1c2goWyJjb20iLC9eXC9cL1teXG5ccl0qLyxxXSksdy5wdXNoKFsiY29tIiwvXlwvXCpbXFNcc10qPyg/OlwqXC98JCkvLHFdKSk7dS5yZWdleExpdGVyYWxzJiZ3LnB1c2goWyJsYW5nLXJlZ2V4IiwvXig/Ol5eXC4/fFshKy1dfCE9fCE9PXwjfCV8JT18JnwmJnwmJj18Jj18XCh8XCp8XCo9fFwrPXwsfC09fC0+fFwvfFwvPXw6fDo6fDt8PHw8PHw8PD18PD18PXw9PXw9PT18Pnw+PXw+Pnw+Pj18Pj4+fD4+Pj18Wz9AW15dfFxePXxcXlxefFxeXF49fHt8XHx8XHw9fFx8XHx8XHxcfD18fnxicmVha3xjYXNlfGNvbnRpbnVlfGRlbGV0ZXxkb3xlbHNlfGZpbmFsbHl8aW5zdGFuY2VvZnxyZXR1cm58dGhyb3d8dHJ5fHR5cGVvZilccyooXC8oPz1bXiovXSkoPzpbXi9bXFxdfFxcW1xTXHNdfFxbKD86W15cXFxdXXxcXFtcU1xzXSkqKD86XXwkKSkrXC8pL10pOyh2PXUudHlwZXMpJiZ3LnB1c2goWyJ0eXAiLHZdKTt1PSgiIit1LmtleXdvcmRzKS5yZXBsYWNlKC9eIHwgJC9nLCIiKTt1Lmxlbmd0aCYmdy5wdXNoKFsia3dkIixSZWdFeHAoIl4oPzoiK3UucmVwbGFjZSgvW1xzLF0rL2csInwiKSsiKVxcYiIpLHFdKTtrLnB1c2goWyJwbG4iLC9eXHMrLyxxLCIgXHJcblx0XHhhMCJdKTt3LnB1c2goWyJsaXQiLC9eQFskX2Etel1bXHckQF0qL2kscV0sWyJ0eXAiLC9eKD86W0BfXT9bQS1aXStbYS16XVtcdyRAXSp8XHcrX3RcYikvLHFdLFsicGxuIiwvXlskX2Etel1bXHckQF0qL2kscV0sWyJsaXQiLC9eKD86MHhbXGRhLWZdK3woPzpcZCg/Ol9cZCspKlxkKig/OlwuXGQqKT98XC5cZFwrKSg/OmVbKy1dP1xkKyk/KVthLXpdKi9pLHEsIjAxMjM0NTY3ODkiXSxbInBsbiIsL15cXFtcU1xzXT8vLHFdLFsicHVuIiwvXi5bXlxzXHciLSQnLi9AXFxgXSovLHFdKTtyZXR1cm4gaChrLHcpfWZ1bmN0aW9uIHIoSCx4KXtmdW5jdGlvbiBFKEspe3N3aXRjaChLLm5vZGVUeXBlKXtjYXNlIDE6aWYoQi50ZXN0KEsuY2xhc3NOYW1lKSl7YnJlYWt9aWYoIkJSIj09PUsubm9kZU5hbWUpe0MoSyksSy5wYXJlbnROb2RlJiZLLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoSyl9ZWxzZXtmb3IoSz1LLmZpcnN0Q2hpbGQ7SztLPUsubmV4dFNpYmxpbmcpe0UoSyl9fWJyZWFrO2Nhc2UgMzpjYXNlIDQ6aWYodil7dmFyIGs9Sy5ub2RlVmFsdWUsTD1rLm1hdGNoKEkpO2lmKEwpe3ZhciBNPWsuc3Vic3RyaW5nKDAsTC5pbmRleCk7Sy5ub2RlVmFsdWU9TTsoaz1rLnN1YnN0cmluZyhMLmluZGV4K0xbMF0ubGVuZ3RoKSkmJksucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoSi5jcmVhdGVUZXh0Tm9kZShrKSxLLm5leHRTaWJsaW5nKTtDKEspO018fEsucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChLKX19fX1mdW5jdGlvbiBDKEspe2Z1bmN0aW9uIGsoTSxSKXt2YXIgUT1SP00uY2xvbmVOb2RlKCExKTpNLFA9TS5wYXJlbnROb2RlO2lmKFApe3ZhciBQPWsoUCwxKSxPPU0ubmV4dFNpYmxpbmc7UC5hcHBlbmRDaGlsZChRKTtmb3IodmFyIE49TztOO049Tyl7Tz1OLm5leHRTaWJsaW5nLFAuYXBwZW5kQ2hpbGQoTil9fXJldHVybiBRfWZvcig7IUsubmV4dFNpYmxpbmc7KXtpZihLPUsucGFyZW50Tm9kZSwhSyl7cmV0dXJufX1mb3IodmFyIEs9ayhLLm5leHRTaWJsaW5nLDApLEw7KEw9Sy5wYXJlbnROb2RlKSYmTC5ub2RlVHlwZT09PTE7KXtLPUx9Ri5wdXNoKEspfXZhciBCPS8oPzpefFxzKW5vY29kZSg/OlxzfCQpLyxJPS9cclxuP3xcbi8sSj1ILm93bmVyRG9jdW1lbnQsQTtILmN1cnJlbnRTdHlsZT9BPUguY3VycmVudFN0eWxlLndoaXRlU3BhY2U6d2luZG93LmdldENvbXB1dGVkU3R5bGUmJihBPUouZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShILHEpLmdldFByb3BlcnR5VmFsdWUoIndoaXRlLXNwYWNlIikpO3ZhciB2PUEmJiJwcmUiPT09QS5zdWJzdHJpbmcoMCwzKTtmb3IoQT1KLmNyZWF0ZUVsZW1lbnQoIkxJIik7SC5maXJzdENoaWxkOyl7QS5hcHBlbmRDaGlsZChILmZpcnN0Q2hpbGQpfWZvcih2YXIgRj1bQV0sRD0wO0Q8Ri5sZW5ndGg7KytEKXtFKEZbRF0pfXg9PT0oeHwwKSYmRlswXS5zZXRBdHRyaWJ1dGUoInZhbHVlIix4KTt2YXIgdT1KLmNyZWF0ZUVsZW1lbnQoIk9MIik7dS5jbGFzc05hbWU9ImxpbmVudW1zIjtmb3IodmFyIHc9TWF0aC5tYXgoMCx4LTF8MCl8fDAsRD0wLEc9Ri5sZW5ndGg7RDxHOysrRCl7QT1GW0RdLEEuY2xhc3NOYW1lPSJMIisoRCt3KSUxMCxBLmZpcnN0Q2hpbGR8fEEuYXBwZW5kQ2hpbGQoSi5jcmVhdGVUZXh0Tm9kZSgiXHhhMCIpKSx1LmFwcGVuZENoaWxkKEEpfUguYXBwZW5kQ2hpbGQodSl9ZnVuY3Rpb24geih1LGspe2Zvcih2YXIgdz1rLmxlbmd0aDstLXc+PTA7KXt2YXIgdj1rW3ddO3kuaGFzT3duUHJvcGVydHkodik/d2luZG93LmNvbnNvbGUmJmNvbnNvbGUud2FybigiY2Fubm90IG92ZXJyaWRlIGxhbmd1YWdlIGhhbmRsZXIgJXMiLHYpOnlbdl09dX19ZnVuY3Rpb24gcyh1LGspe2lmKCF1fHwheS5oYXNPd25Qcm9wZXJ0eSh1KSl7dT0vXlxzKjwvLnRlc3Qoayk/ImRlZmF1bHQtbWFya3VwIjoiZGVmYXVsdC1jb2RlIn1yZXR1cm4geVt1XX1mdW5jdGlvbiBwKFgpe3ZhciBMPVguZzt0cnl7dmFyIFQ9YyhYLmgpLFE9VC5hO1guYT1RO1guYz1ULmM7WC5kPTA7cyhMLFEpKFgpO3ZhciBOPS9cYk1TSUVcYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxMPS9cbi9nLEY9WC5hLEc9Ri5sZW5ndGgsVD0wLE09WC5jLEk9TS5sZW5ndGgsUT0wLFU9WC5lLFI9VS5sZW5ndGgsWD0wO1VbUl09Rzt2YXIgSCxLO2ZvcihLPUg9MDtLPFI7KXtVW0tdIT09VVtLKzJdPyhVW0grK109VVtLKytdLFVbSCsrXT1VW0srK10pOksrPTJ9Uj1IO2ZvcihLPUg9MDtLPFI7KXtmb3IodmFyIEE9VVtLXSxTPVVbSysxXSxXPUsrMjtXKzI8PVImJlVbVysxXT09PVM7KXtXKz0yfVVbSCsrXT1BO1VbSCsrXT1TO0s9V31mb3IoVS5sZW5ndGg9SDtRPEk7KXt2YXIgSj1NW1ErMl18fEcsVj1VW1grMl18fEcsVz1NYXRoLm1pbihKLFYpLFA9TVtRKzFdLE87aWYoUC5ub2RlVHlwZSE9PTEmJihPPUYuc3Vic3RyaW5nKFQsVykpKXtOJiYoTz1PLnJlcGxhY2UoTCwiXHIiKSk7UC5ub2RlVmFsdWU9Tzt2YXIgRT1QLm93bmVyRG9jdW1lbnQsRD1FLmNyZWF0ZUVsZW1lbnQoIlNQQU4iKTtELmNsYXNzTmFtZT1VW1grMV07dmFyIEI9UC5wYXJlbnROb2RlO0IucmVwbGFjZUNoaWxkKEQsUCk7RC5hcHBlbmRDaGlsZChQKTtUPEomJihNW1ErMV09UD1FLmNyZWF0ZVRleHROb2RlKEYuc3Vic3RyaW5nKFcsSikpLEIuaW5zZXJ0QmVmb3JlKFAsRC5uZXh0U2libGluZykpfVQ9VztUPj1KJiYoUSs9Mik7VD49ViYmKFgrPTIpfX1jYXRjaChDKXsiY29uc29sZSIgaW4gd2luZG93JiZjb25zb2xlLmxvZyhDJiZDLnN0YWNrP0Muc3RhY2s6Qyl9fXZhciBtPVsiYnJlYWssY29udGludWUsZG8sZWxzZSxmb3IsaWYscmV0dXJuLHdoaWxlIl0saj1bW20sImF1dG8sY2FzZSxjaGFyLGNvbnN0LGRlZmF1bHQsZG91YmxlLGVudW0sZXh0ZXJuLGZsb2F0LGdvdG8saW50LGxvbmcscmVnaXN0ZXIsc2hvcnQsc2lnbmVkLHNpemVvZixzdGF0aWMsc3RydWN0LHN3aXRjaCx0eXBlZGVmLHVuaW9uLHVuc2lnbmVkLHZvaWQsdm9sYXRpbGUiXSwiY2F0Y2gsY2xhc3MsZGVsZXRlLGZhbHNlLGltcG9ydCxuZXcsb3BlcmF0b3IscHJpdmF0ZSxwcm90ZWN0ZWQscHVibGljLHRoaXMsdGhyb3csdHJ1ZSx0cnksdHlwZW9mIl0sbj1baiwiYWxpZ25vZixhbGlnbl91bmlvbixhc20sYXhpb20sYm9vbCxjb25jZXB0LGNvbmNlcHRfbWFwLGNvbnN0X2Nhc3QsY29uc3RleHByLGRlY2x0eXBlLGR5bmFtaWNfY2FzdCxleHBsaWNpdCxleHBvcnQsZnJpZW5kLGlubGluZSxsYXRlX2NoZWNrLG11dGFibGUsbmFtZXNwYWNlLG51bGxwdHIscmVpbnRlcnByZXRfY2FzdCxzdGF0aWNfYXNzZXJ0LHN0YXRpY19jYXN0LHRlbXBsYXRlLHR5cGVpZCx0eXBlbmFtZSx1c2luZyx2aXJ0dWFsLHdoZXJlIl0sbD1baiwiYWJzdHJhY3QsYm9vbGVhbixieXRlLGV4dGVuZHMsZmluYWwsZmluYWxseSxpbXBsZW1lbnRzLGltcG9ydCxpbnN0YW5jZW9mLG51bGwsbmF0aXZlLHBhY2thZ2Usc3RyaWN0ZnAsc3VwZXIsc3luY2hyb25pemVkLHRocm93cyx0cmFuc2llbnQiXSxpPVtsLCJhcyxiYXNlLGJ5LGNoZWNrZWQsZGVjaW1hbCxkZWxlZ2F0ZSxkZXNjZW5kaW5nLGR5bmFtaWMsZXZlbnQsZml4ZWQsZm9yZWFjaCxmcm9tLGdyb3VwLGltcGxpY2l0LGluLGludGVyZmFjZSxpbnRlcm5hbCxpbnRvLGlzLGxvY2ssb2JqZWN0LG91dCxvdmVycmlkZSxvcmRlcmJ5LHBhcmFtcyxwYXJ0aWFsLHJlYWRvbmx5LHJlZixzYnl0ZSxzZWFsZWQsc3RhY2thbGxvYyxzdHJpbmcsc2VsZWN0LHVpbnQsdWxvbmcsdW5jaGVja2VkLHVuc2FmZSx1c2hvcnQsdmFyIl0saj1baiwiZGVidWdnZXIsZXZhbCxleHBvcnQsZnVuY3Rpb24sZ2V0LG51bGwsc2V0LHVuZGVmaW5lZCx2YXIsd2l0aCxJbmZpbml0eSxOYU4iXSxnPVttLCJhbmQsYXMsYXNzZXJ0LGNsYXNzLGRlZixkZWwsZWxpZixleGNlcHQsZXhlYyxmaW5hbGx5LGZyb20sZ2xvYmFsLGltcG9ydCxpbixpcyxsYW1iZGEsbm9ubG9jYWwsbm90LG9yLHBhc3MscHJpbnQscmFpc2UsdHJ5LHdpdGgseWllbGQsRmFsc2UsVHJ1ZSxOb25lIl0sZj1bbSwiYWxpYXMsYW5kLGJlZ2luLGNhc2UsY2xhc3MsZGVmLGRlZmluZWQsZWxzaWYsZW5kLGVuc3VyZSxmYWxzZSxpbixtb2R1bGUsbmV4dCxuaWwsbm90LG9yLHJlZG8scmVzY3VlLHJldHJ5LHNlbGYsc3VwZXIsdGhlbix0cnVlLHVuZGVmLHVubGVzcyx1bnRpbCx3aGVuLHlpZWxkLEJFR0lOLEVORCJdLG09W20sImNhc2UsZG9uZSxlbGlmLGVzYWMsZXZhbCxmaSxmdW5jdGlvbixpbixsb2NhbCxzZXQsdGhlbix1bnRpbCJdLGU9L14oRElSfEZJTEV8dmVjdG9yfChkZXxwcmlvcml0eV8pP3F1ZXVlfGxpc3R8c3RhY2t8KGNvbnN0Xyk/aXRlcmF0b3J8KG11bHRpKT8oc2V0fG1hcCl8Yml0c2V0fHU/KGludHxmbG9hdClcZCopLyxiPS9cUy8sYT1vKHtrZXl3b3JkczpbbixpLGosImNhbGxlcixkZWxldGUsZGllLGRvLGR1bXAsZWxzaWYsZXZhbCxleGl0LGZvcmVhY2gsZm9yLGdvdG8saWYsaW1wb3J0LGxhc3QsbG9jYWwsbXksbmV4dCxubyxvdXIscHJpbnQscGFja2FnZSxyZWRvLHJlcXVpcmUsc3ViLHVuZGVmLHVubGVzcyx1bnRpbCx1c2Usd2FudGFycmF5LHdoaWxlLEJFR0lOLEVORCIrZyxmLG1dLGhhc2hDb21tZW50czohMCxjU3R5bGVDb21tZW50czohMCxtdWx0aUxpbmVTdHJpbmdzOiEwLHJlZ2V4TGl0ZXJhbHM6ITB9KSx5PXt9O3ooYSxbImRlZmF1bHQtY29kZSJdKTt6KGgoW10sW1sicGxuIiwvXltePD9dKy9dLFsiZGVjIiwvXjwhXHdbXj5dKig/Oj58JCkvXSxbImNvbSIsL148XCEtLVtcU1xzXSo/KD86LS1cPnwkKS9dLFsibGFuZy0iLC9ePFw/KFtcU1xzXSs/KSg/Olw/PnwkKS9dLFsibGFuZy0iLC9ePCUoW1xTXHNdKz8pKD86JT58JCkvXSxbInB1biIsL14oPzo8WyU/XXxbJT9dPikvXSxbImxhbmctIiwvXjx4bXBcYltePl0qPihbXFNcc10rPyk8XC94bXBcYltePl0qPi9pXSxbImxhbmctanMiLC9ePHNjcmlwdFxiW14+XSo+KFtcU1xzXSo/KSg8XC9zY3JpcHRcYltePl0qPikvaV0sWyJsYW5nLWNzcyIsL148c3R5bGVcYltePl0qPihbXFNcc10qPykoPFwvc3R5bGVcYltePl0qPikvaV0sWyJsYW5nLWluLnRhZyIsL14oPFwvP1thLXpdW148Pl0qPikvaV1dKSxbImRlZmF1bHQtbWFya3VwIiwiaHRtIiwiaHRtbCIsIm14bWwiLCJ4aHRtbCIsInhtbCIsInhzbCJdKTt6KGgoW1sicGxuIiwvXlxzKy8scSwiIFx0XHJcbiJdLFsiYXR2IiwvXig/OiJbXiJdKiI/fCdbXiddKic/KS8scSwiXCInIl1dLFtbInRhZyIsL15ePFwvP1thLXpdKD86W1x3LS46XSpcdyk/fFwvPz4kL2ldLFsiYXRuIiwvXig/IXN0eWxlW1xzPV18b24pW2Etel0oPzpbXHc6LV0qXHcpPy9pXSxbImxhbmctdXEudmFsIiwvXj1ccyooW15ccyInPl0qKD86W15ccyInLz5dfFwvKD89XHMpKSkvXSxbInB1biIsL15bLzwtPl0rL10sWyJsYW5nLWpzIiwvXm9uXHcrXHMqPVxzKiIoW14iXSspIi9pXSxbImxhbmctanMiLC9eb25cdytccyo9XHMqJyhbXiddKyknL2ldLFsibGFuZy1qcyIsL15vblx3K1xzKj1ccyooW15ccyInPl0rKS9pXSxbImxhbmctY3NzIiwvXnN0eWxlXHMqPVxzKiIoW14iXSspIi9pXSxbImxhbmctY3NzIiwvXnN0eWxlXHMqPVxzKicoW14nXSspJy9pXSxbImxhbmctY3NzIiwvXnN0eWxlXHMqPVxzKihbXlxzIic+XSspL2ldXSksWyJpbi50YWciXSk7eihoKFtdLFtbImF0diIsL15bXFNcc10rL11dKSxbInVxLnZhbCJdKTt6KG8oe2tleXdvcmRzOm4saGFzaENvbW1lbnRzOiEwLGNTdHlsZUNvbW1lbnRzOiEwLHR5cGVzOmV9KSxbImMiLCJjYyIsImNwcCIsImN4eCIsImN5YyIsIm0iXSk7eihvKHtrZXl3b3JkczoibnVsbCx0cnVlLGZhbHNlIn0pLFsianNvbiJdKTt6KG8oe2tleXdvcmRzOmksaGFzaENvbW1lbnRzOiEwLGNTdHlsZUNvbW1lbnRzOiEwLHZlcmJhdGltU3RyaW5nczohMCx0eXBlczplfSksWyJjcyJdKTt6KG8oe2tleXdvcmRzOmwsY1N0eWxlQ29tbWVudHM6ITB9KSxbImphdmEiXSk7eihvKHtrZXl3b3JkczptLGhhc2hDb21tZW50czohMCxtdWx0aUxpbmVTdHJpbmdzOiEwfSksWyJic2giLCJjc2giLCJzaCJdKTt6KG8oe2tleXdvcmRzOmcsaGFzaENvbW1lbnRzOiEwLG11bHRpTGluZVN0cmluZ3M6ITAsdHJpcGxlUXVvdGVkU3RyaW5nczohMH0pLFsiY3YiLCJweSJdKTt6KG8oe2tleXdvcmRzOiJjYWxsZXIsZGVsZXRlLGRpZSxkbyxkdW1wLGVsc2lmLGV2YWwsZXhpdCxmb3JlYWNoLGZvcixnb3RvLGlmLGltcG9ydCxsYXN0LGxvY2FsLG15LG5leHQsbm8sb3VyLHByaW50LHBhY2thZ2UscmVkbyxyZXF1aXJlLHN1Yix1bmRlZix1bmxlc3MsdW50aWwsdXNlLHdhbnRhcnJheSx3aGlsZSxCRUdJTixFTkQiLGhhc2hDb21tZW50czohMCxtdWx0aUxpbmVTdHJpbmdzOiEwLHJlZ2V4TGl0ZXJhbHM6ITB9KSxbInBlcmwiLCJwbCIsInBtIl0pO3oobyh7a2V5d29yZHM6ZixoYXNoQ29tbWVudHM6ITAsbXVsdGlMaW5lU3RyaW5nczohMCxyZWdleExpdGVyYWxzOiEwfSksWyJyYiJdKTt6KG8oe2tleXdvcmRzOmosY1N0eWxlQ29tbWVudHM6ITAscmVnZXhMaXRlcmFsczohMH0pLFsianMiXSk7eihvKHtrZXl3b3JkczoiYWxsLGFuZCxieSxjYXRjaCxjbGFzcyxlbHNlLGV4dGVuZHMsZmFsc2UsZmluYWxseSxmb3IsaWYsaW4saXMsaXNudCxsb29wLG5ldyxubyxub3QsbnVsbCxvZixvZmYsb24sb3IscmV0dXJuLHN1cGVyLHRoZW4sdHJ1ZSx0cnksdW5sZXNzLHVudGlsLHdoZW4sd2hpbGUseWVzIixoYXNoQ29tbWVudHM6MyxjU3R5bGVDb21tZW50czohMCxtdWx0aWxpbmVTdHJpbmdzOiEwLHRyaXBsZVF1b3RlZFN0cmluZ3M6ITAscmVnZXhMaXRlcmFsczohMH0pLFsiY29mZmVlIl0pO3ooaChbXSxbWyJzdHIiLC9eW1xTXHNdKy9dXSksWyJyZWdleCJdKTt3aW5kb3cucHJldHR5UHJpbnRPbmU9ZnVuY3Rpb24odSxrLHcpe3ZhciB2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlBSRSIpO3YuaW5uZXJIVE1MPXU7dyYmcih2LHcpO3Aoe2c6ayxpOncsaDp2fSk7cmV0dXJuIHYuaW5uZXJIVE1MfTt3aW5kb3cucHJldHR5UHJpbnQ9ZnVuY3Rpb24oRSl7ZnVuY3Rpb24gdigpe2Zvcih2YXIgTD13aW5kb3cuUFJfU0hPVUxEX1VTRV9DT05USU5VQVRJT04/dy5ub3coKSsyNTA6SW5maW5pdHk7dTxBLmxlbmd0aCYmdy5ub3coKTxMO3UrKyl7dmFyIE89QVt1XSxJPU8uY2xhc3NOYW1lO2lmKEkuaW5kZXhPZigicHJldHR5cHJpbnQiKT49MCl7dmFyIEk9SS5tYXRjaChCKSxLLEg7aWYoSD0hSSl7SD1PO2Zvcih2YXIgTT12b2lkIDAsTj1ILmZpcnN0Q2hpbGQ7TjtOPU4ubmV4dFNpYmxpbmcpe3ZhciBKPU4ubm9kZVR5cGUsTT1KPT09MT9NP0g6TjpKPT09Mz9iLnRlc3QoTi5ub2RlVmFsdWUpP0g6TTpNfUg9KEs9TT09PUg/dm9pZCAwOk0pJiYiQ09ERSI9PT1LLnRhZ05hbWV9SCYmKEk9Sy5jbGFzc05hbWUubWF0Y2goQikpO0kmJihJPUlbMV0pO0g9ITE7Zm9yKE09Ty5wYXJlbnROb2RlO007TT1NLnBhcmVudE5vZGUpe2lmKChNLnRhZ05hbWU9PT0icHJlInx8TS50YWdOYW1lPT09ImNvZGUifHxNLnRhZ05hbWU9PT0ieG1wIikmJk0uY2xhc3NOYW1lJiZNLmNsYXNzTmFtZS5pbmRleE9mKCJwcmV0dHlwcmludCIpPj0wKXtIPSEwO2JyZWFrfX1IfHwoKEg9KEg9Ty5jbGFzc05hbWUubWF0Y2goL1xibGluZW51bXNcYig/OjooXGQrKSk/LykpP0hbMV0mJkhbMV0ubGVuZ3RoPytIWzFdOiEwOiExKSYmcihPLEgpLEQ9e2c6SSxoOk8saTpIfSxwKEQpKX19dTxBLmxlbmd0aD9zZXRUaW1lb3V0KHYsMjUwKTpFJiZFKCl9Zm9yKHZhciBDPVtkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJlIiksZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImNvZGUiKSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgieG1wIildLEE9W10seD0wO3g8Qy5sZW5ndGg7Kyt4KXtmb3IodmFyIEY9MCxHPUNbeF0ubGVuZ3RoO0Y8RzsrK0Ype0EucHVzaChDW3hdW0ZdKX19dmFyIEM9cSx3PURhdGU7dy5ub3d8fCh3PXtub3c6ZnVuY3Rpb24oKXtyZXR1cm4gK25ldyBEYXRlfX0pO3ZhciB1PTAsRCxCPS9cYmxhbmcoPzp1YWdlKT8tKFtcdy5dKykoPyFcUykvO3YoKX07d2luZG93LlBSPXtjcmVhdGVTaW1wbGVMZXhlcjpoLHJlZ2lzdGVyTGFuZ0hhbmRsZXI6eixzb3VyY2VEZWNvcmF0b3I6byxQUl9BVFRSSUJfTkFNRToiYXRuIixQUl9BVFRSSUJfVkFMVUU6ImF0diIsUFJfQ09NTUVOVDoiY29tIixQUl9ERUNMQVJBVElPTjoiZGVjIixQUl9LRVlXT1JEOiJrd2QiLFBSX0xJVEVSQUw6ImxpdCIsUFJfTk9DT0RFOiJub2NvZGUiLFBSX1BMQUlOOiJwbG4iLFBSX1BVTkNUVUFUSU9OOiJwdW4iLFBSX1NPVVJDRToic3JjIixQUl9TVFJJTkc6InN0ciIsUFJfVEFHOiJ0YWciLFBSX1RZUEU6InR5cCJ9fSkoKTtqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7JCgiLnRvcGJhciIpLmRyb3Bkb3duKCk7cHJldHR5UHJpbnQoKX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpY2Vuc2UuaHRtbCBiL2xpY2Vuc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMThhODNhCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZS5odG1sCkBAIC0wLDAgKzEsNDY0IEBACis8IURPQ1RZUEUgaHRtbD4KKzwhLS0KKyB8IEdlbmVyYXRlZCBieSBBcGFjaGUgTWF2ZW4gRG94aWEgYXQgMjAxNS0wNy0wOQorIHwgUmVuZGVyZWQgdXNpbmcgQXBhY2hlIE1hdmVuIEZsdWlkbyBTa2luIDEuMy4wCistLT4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CisgICAgPG1ldGEgbmFtZT0iRGF0ZS1SZXZpc2lvbi15eXl5bW1kZCIgY29udGVudD0iMjAxNTA3MDkiIC8+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4iIC8+CisgICAgPHRpdGxlPk1ldGFkYXRhIGFuZCBHb3Zlcm5hbmNlIC0gUHJvamVjdCBMaWNlbnNlPC90aXRsZT4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmNzcyIgLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3NpdGUuY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvcHJpbnQuY3NzIiBtZWRpYT0icHJpbnQiIC8+CisKKyAgICAgIAorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4vanMvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uanMiPjwvc2NyaXB0PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHsgJCggJy5jYXJvdXNlbCcgKS5jYXJvdXNlbCggeyBpbnRlcnZhbDogMzUwMCB9ICkgfSApOzwvc2NyaXB0PgorICAgICAgICAgIAorICAgICAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keSBjbGFzcz0idG9wQmFyRW5hYmxlZCI+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisKKyAgICA8ZGl2IGlkPSJ0b3BiYXIiIGNsYXNzPSJuYXZiYXIgbmF2YmFyLWZpeGVkLXRvcCAiPgorICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWlubmVyIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiIHN0eWxlPSJ3aWR0aDogNjglOyI+PGRpdiBjbGFzcz0ibmF2LWNvbGxhcHNlIj4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Im5hdiI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkF0bGFzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iQWJvdXQiPkFib3V0PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9Ildpa2kiPldpa2k8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iTmV3cyI+TmV3czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXQtd2lwLXVzLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci1hdGxhcy5naXQiICB0aXRsZT0iR2l0Ij5HaXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci9hdGxhcyIgIHRpdGxlPSJTdm4iPlN2bjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9BVExBUyIgIHRpdGxlPSJKaXJhIj5KaXJhPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTL1Bvd2VyZWRCeSIgIHRpdGxlPSJQb3dlcmVkIGJ5Ij5Qb3dlcmVkIGJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vYmxvZ3MuYXBhY2hlLm9yZy9hdGxhcy8iICB0aXRsZT0iQmxvZyI+QmxvZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlByb2plY3QgSW5mb3JtYXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0icHJvamVjdC1pbmZvLmh0bWwiICB0aXRsZT0iU3VtbWFyeSI+U3VtbWFyeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibWFpbC1saXN0cy5odG1sIiAgdGl0bGU9Ik1haWxpbmcgTGlzdHMiPk1haWxpbmcgTGlzdHM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93ZWJjaGF0LmZyZWVub2RlLm5ldD9jaGFubmVscz1hcGFjaGVhdGxhcyZ1aW89ZDQiICB0aXRsZT0iSVJDIj5JUkM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InRlYW0tbGlzdC5odG1sIiAgdGl0bGU9IlRlYW0iPlRlYW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imlzc3VlLXRyYWNraW5nLmh0bWwiICB0aXRsZT0iSXNzdWUgVHJhY2tpbmciPklzc3VlIFRyYWNraW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJzb3VyY2UtcmVwb3NpdG9yeS5odG1sIiAgdGl0bGU9IlNvdXJjZSBSZXBvc2l0b3J5Ij5Tb3VyY2UgUmVwb3NpdG9yeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibGljZW5zZS5odG1sIiAgdGl0bGU9IkxpY2Vuc2UiPkxpY2Vuc2U8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZWxlYXNlcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZHluL2Nsb3Nlci5jZ2kvaW5jdWJhdG9yL2F0bGFzLzAuNS4wLWluY3ViYXRpbmcvIiAgdGl0bGU9IjAuNS1pbmN1YmF0aW5nIj4wLjUtaW5jdWJhdGluZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkRvY3VtZW50YXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iMC41LjAtaW5jdWJhdGluZy9pbmRleC5odG1sIiAgdGl0bGU9ImN1cnJlbnQiPmN1cnJlbnQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IjAuNS4wLWluY3ViYXRpbmcvaW5kZXguaHRtbCIgIHRpdGxlPSIwLjUtaW5jdWJhdGluZyI+MC41LWluY3ViYXRpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZXNvdXJjZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJPdmVydmlldyI+T3ZlcnZpZXc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlF1aWNrU3RhcnQuaHRtbCIgIHRpdGxlPSJHZXR0aW5nIFN0YXJ0ZWQiPkdldHRpbmcgU3RhcnRlZDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQXJjaGl0ZWN0dXJlLmh0bWwiICB0aXRsZT0iQXJjaGl0ZWN0dXJlIj5BcmNoaXRlY3R1cmU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Ikluc3RhbGxhdGlvblN0ZXBzLmh0bWwiICB0aXRsZT0iSW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlR5cGVTeXN0ZW0uaHRtbCIgIHRpdGxlPSJUeXBlIFN5c3RlbSI+VHlwZSBTeXN0ZW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkNvbmZpZ3VyYXRpb24uaHRtbCIgIHRpdGxlPSJDb25maWd1cmF0aW9uIj5Db25maWd1cmF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJTZWN1cml0eS5odG1sIiAgdGl0bGU9IlNlY3VyaXR5Ij5TZWN1cml0eTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iYXBpL3Jlc3QuaHRtbCIgIHRpdGxlPSJSZXN0IEFQSSI+UmVzdCBBUEk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BU0YgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vaG93LWl0LXdvcmtzLmh0bWwiICB0aXRsZT0iSG93IEFwYWNoZSBXb3JrcyI+SG93IEFwYWNoZSBXb3JrczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vIiAgdGl0bGU9IkZvdW5kYXRpb24iPkZvdW5kYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3Nwb25zb3JzaGlwLmh0bWwiICB0aXRsZT0iU3BvbnNvcmluZyBBcGFjaGUiPlNwb25zb3JpbmcgQXBhY2hlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi90aGFua3MuaHRtbCIgIHRpdGxlPSJUaGFua3MiPlRoYW5rczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBpZD0ic2VhcmNoLWZvcm0iIGFjdGlvbj0iaHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaCIgbWV0aG9kPSJnZXQiICBjbGFzcz0ibmF2YmFyLXNlYXJjaCBwdWxsLXJpZ2h0IiA+CisgICAgCisgIDxpbnB1dCB2YWx1ZT0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnIiBuYW1lPSJzaXRlc2VhcmNoIiB0eXBlPSJoaWRkZW4iLz4KKyAgPGlucHV0IGNsYXNzPSJzZWFyY2gtcXVlcnkiIG5hbWU9InEiIGlkPSJxdWVyeSIgdHlwZT0idGV4dCIgLz4KKzwvZm9ybT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9jb29wL2NzZS9icmFuZD9mb3JtPXNlYXJjaC1mb3JtIj48L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICA8aWZyYW1lIHNyYz0iaHR0cDovL3d3dy5mYWNlYm9vay5jb20vcGx1Z2lucy9saWtlLnBocD9ocmVmPWh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzJnNlbmQ9ZmFsc2UmbGF5b3V0PWJ1dHRvbl9jb3VudCZzaG93LWZhY2VzPWZhbHNlJmFjdGlvbj1saWtlJmNvbG9yc2NoZW1lPWRhcmsiCisgICAgICAgIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPSIwIgorICAgICAgICBzdHlsZT0iYm9yZGVyOm5vbmU7IHdpZHRoOjgwcHg7IGhlaWdodDoyMHB4OyBtYXJnaW4tdG9wOiAxMHB4OyIgIGNsYXNzPSJwdWxsLXJpZ2h0IiA+PC9pZnJhbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2FwaXMuZ29vZ2xlLmNvbS9qcy9wbHVzb25lLmpzIj48L3NjcmlwdD4KKworICAgICAgICA8dWwgY2xhc3M9Im5hdiBwdWxsLXJpZ2h0Ij48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij4KKyAgICAKKyAgICA8ZGl2IGNsYXNzPSJnLXBsdXNvbmUiIGRhdGEtaHJlZj0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3MiIGRhdGEtc2l6ZT0ibWVkaXVtIiAgd2lkdGg9IjYwcHgiIGFsaWduPSJyaWdodCIgPjwvZGl2PgorCisgICAgICAgIDwvbGk+PC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIAorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIAorICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgIDxkaXYgaWQ9ImJhbm5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtbGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uIiBpZD0iYmFubmVyTGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2F0bGFzLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgQXRsYXMiIHdpZHRoPSIyMDBweCIgaGVpZ2h0PSI0NXB4Ii8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4gICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vaW5jdWJhdG9yLmFwYWNoZS5vcmciIGlkPSJiYW5uZXJSaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2FwYWNoZS1pbmN1YmF0b3ItbG9nby5wbmciICBhbHQ9IkFwYWNoZSBJbmN1YmF0b3IiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiPjxoci8+PC9kaXY+CisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0iYnJlYWRjcnVtYnMiPgorICAgICAgICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiPgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iQXBhY2hlIj4KKyAgICAgICAgQXBhY2hlPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJBdGxhcyI+CisgICAgICAgIEF0bGFzPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0iIj5Qcm9qZWN0IExpY2Vuc2U8L2xpPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICA8bGkgaWQ9InB1Ymxpc2hEYXRlIiBjbGFzcz0icHVsbC1yaWdodCI+TGFzdCBQdWJsaXNoZWQ6IDIwMTUtMDctMDk8L2xpPiA8bGkgY2xhc3M9ImRpdmlkZXIgcHVsbC1yaWdodCI+fDwvbGk+CisgICAgICAgICAgICAgIDxsaSBpZD0icHJvamVjdFZlcnNpb24iIGNsYXNzPSJwdWxsLXJpZ2h0Ij5WZXJzaW9uOiAwLjYtaW5jdWJhdGluZy1TTkFQU0hPVDwvbGk+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9kaXY+CisKKyAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxkaXYgaWQ9ImJvZHlDb2x1bW4iID4KKyAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj5PdmVydmlldzxhIG5hbWU9Ik92ZXJ2aWV3Ij48L2E+PC9oMj48YSBuYW1lPSJPdmVydmlldyI+PC9hPgorPHA+VHlwaWNhbGx5IHRoZSBsaWNlbnNlcyBsaXN0ZWQgZm9yIHRoZSBwcm9qZWN0IGFyZSB0aGF0IG9mIHRoZSBwcm9qZWN0IGl0c2VsZiwgYW5kIG5vdCBvZiBkZXBlbmRlbmNpZXMuPC9wPjwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDI+UHJvamVjdCBMaWNlbnNlPGEgbmFtZT0iUHJvamVjdF9MaWNlbnNlIj48L2E+PC9oMj48YSBuYW1lPSJQcm9qZWN0X0xpY2Vuc2UiPjwvYT4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzPlRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAyLjA8YSBuYW1lPSJUaGVfQXBhY2hlX1NvZnR3YXJlX0xpY2Vuc2VfVmVyc2lvbl8yLjAiPjwvYT48L2gzPjxhIG5hbWU9IlRoZV9BcGFjaGVfU29mdHdhcmVfTGljZW5zZV9WZXJzaW9uXzIuMCI+PC9hPgorPGRpdiBjbGFzcz0ic291cmNlIj4KKzxwcmU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICZxdW90O0xpY2Vuc2UmcXVvdDsgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICZxdW90O0xpY2Vuc29yJnF1b3Q7IHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQorICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICAmcXVvdDtMZWdhbCBFbnRpdHkmcXVvdDsgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICZxdW90O2NvbnRyb2wmcXVvdDsgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICZxdW90O1lvdSZxdW90OyAob3IgJnF1b3Q7WW91ciZxdW90Oykgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgJnF1b3Q7U291cmNlJnF1b3Q7IGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgJnF1b3Q7T2JqZWN0JnF1b3Q7IGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsCisgICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0CisgICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCisgICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCisKKyAgICAgICZxdW90O1dvcmsmcXVvdDsgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAmcXVvdDtEZXJpdmF0aXZlIFdvcmtzJnF1b3Q7IHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgJnF1b3Q7Q29udHJpYnV0aW9uJnF1b3Q7IHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCisgICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCisgICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKKyAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIKKyAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgorICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICZxdW90O3N1Ym1pdHRlZCZxdW90OworICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgJnF1b3Q7Tm90IGEgQ29udHJpYnV0aW9uLiZxdW90OworCisgICAgICAmcXVvdDtDb250cmlidXRvciZxdW90OyBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAorICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCisKKyAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAorICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCisgICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKKyAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAorICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKKyAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCisgICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCisgICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQorICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKKyAgICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKKyAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0CisgICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCisgICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKKyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKKyAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAorICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKKyAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgorICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCisKKyAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKKworICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCisgICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAorICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCisgICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZgorICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKKworICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgJnF1b3Q7Tk9USUNFJnF1b3Q7IHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KKworICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKKyAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICZxdW90O1tdJnF1b3Q7CisgICAgICByZXBsYWNlZCB3aXRoIHlvdXIgb3duIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uLiAoRG9uJ3QgaW5jbHVkZQorICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUKKyAgICAgIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYQorICAgICAgZmlsZSBvciBjbGFzcyBuYW1lIGFuZCBkZXNjcmlwdGlvbiBvZiBwdXJwb3NlIGJlIGluY2x1ZGVkIG9uIHRoZQorICAgICAgc2FtZSAmcXVvdDtwcmludGVkIHBhZ2UmcXVvdDsgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICZxdW90O0xpY2Vuc2UmcXVvdDspOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJnF1b3Q7QVMgSVMmcXVvdDsgQkFTSVMsCisgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorPC9wcmU+PC9kaXY+PC9kaXY+PC9kaXY+CisgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICA8L2Rpdj4KKworICAgIDxoci8+CisKKyAgICA8Zm9vdGVyPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IHNwYW4xMiI+Q29weXJpZ2h0ICZjb3B5OyAgICAgICAgICAgICAgICAgICAgMjAxNQorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIj5BcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbjwvYT4uCisgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxwIGlkPSJwb3dlcmVkQnkiIGNsYXNzPSJwdWxsLXJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvIiB0aXRsZT0iQnVpbHQgYnkgTWF2ZW4iIGNsYXNzPSJwb3dlcmVkQnkiPgorICAgICAgICA8aW1nIGNsYXNzPSJidWlsdEJ5IiBhbHQ9IkJ1aWx0IGJ5IE1hdmVuIiBzcmM9Ii4vaW1hZ2VzL2xvZ29zL21hdmVuLWZlYXRoZXIucG5nIiAvPgorICAgICAgPC9hPgorICAgICAgICAgICAgICA8L3A+CisgICAgICAgIAorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgIDwvZm9vdGVyPgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9tYWlsLWxpc3RzLmh0bWwgYi9tYWlsLWxpc3RzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI3OWFiNwotLS0gL2Rldi9udWxsCisrKyBiL21haWwtbGlzdHMuaHRtbApAQCAtMCwwICsxLDI3NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8IS0tCisgfCBHZW5lcmF0ZWQgYnkgQXBhY2hlIE1hdmVuIERveGlhIGF0IDIwMTUtMDctMDkKKyB8IFJlbmRlcmVkIHVzaW5nIEFwYWNoZSBNYXZlbiBGbHVpZG8gU2tpbiAxLjMuMAorLS0+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+CisgIDxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIiAvPgorICAgIDxtZXRhIG5hbWU9IkRhdGUtUmV2aXNpb24teXl5eW1tZGQiIGNvbnRlbnQ9IjIwMTUwNzA5IiAvPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtTGFuZ3VhZ2UiIGNvbnRlbnQ9ImVuIiAvPgorICAgIDx0aXRsZT5NZXRhZGF0YSBhbmQgR292ZXJuYW5jZSAtIFByb2plY3QgTWFpbGluZyBMaXN0czwvdGl0bGU+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9zaXRlLmNzcyIgLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3ByaW50LmNzcyIgbWVkaWE9InByaW50IiAvPgorCisgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL2pzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmpzIj48L3NjcmlwdD4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+JCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7ICQoICcuY2Fyb3VzZWwnICkuY2Fyb3VzZWwoIHsgaW50ZXJ2YWw6IDM1MDAgfSApIH0gKTs8L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHkgY2xhc3M9InRvcEJhckVuYWJsZWQiPgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorCisgICAgPGRpdiBpZD0idG9wYmFyIiBjbGFzcz0ibmF2YmFyIG5hdmJhci1maXhlZC10b3AgIj4KKyAgICAgIDxkaXYgY2xhc3M9Im5hdmJhci1pbm5lciI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIiBzdHlsZT0id2lkdGg6IDY4JTsiPjxkaXYgY2xhc3M9Im5hdi1jb2xsYXBzZSI+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJuYXYiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BdGxhcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9IkFib3V0Ij5BYm91dDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJXaWtpIj5XaWtpPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9Ik5ld3MiPk5ld3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0LXdpcC11cy5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3ItYXRsYXMuZ2l0IiAgdGl0bGU9IkdpdCI+R2l0PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3IvYXRsYXMiICB0aXRsZT0iU3ZuIj5Tdm48L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvQVRMQVMiICB0aXRsZT0iSmlyYSI+SmlyYTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUy9Qb3dlcmVkQnkiICB0aXRsZT0iUG93ZXJlZCBieSI+UG93ZXJlZCBieTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL2Jsb2dzLmFwYWNoZS5vcmcvYXRsYXMvIiAgdGl0bGU9IkJsb2ciPkJsb2c8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5Qcm9qZWN0IEluZm9ybWF0aW9uIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InByb2plY3QtaW5mby5odG1sIiAgdGl0bGU9IlN1bW1hcnkiPlN1bW1hcnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Im1haWwtbGlzdHMuaHRtbCIgIHRpdGxlPSJNYWlsaW5nIExpc3RzIj5NYWlsaW5nIExpc3RzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd2ViY2hhdC5mcmVlbm9kZS5uZXQ/Y2hhbm5lbHM9YXBhY2hlYXRsYXMmdWlvPWQ0IiAgdGl0bGU9IklSQyI+SVJDPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJ0ZWFtLWxpc3QuaHRtbCIgIHRpdGxlPSJUZWFtIj5UZWFtPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpc3N1ZS10cmFja2luZy5odG1sIiAgdGl0bGU9Iklzc3VlIFRyYWNraW5nIj5Jc3N1ZSBUcmFja2luZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ic291cmNlLXJlcG9zaXRvcnkuaHRtbCIgIHRpdGxlPSJTb3VyY2UgUmVwb3NpdG9yeSI+U291cmNlIFJlcG9zaXRvcnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImxpY2Vuc2UuaHRtbCIgIHRpdGxlPSJMaWNlbnNlIj5MaWNlbnNlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UmVsZWFzZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2R5bi9jbG9zZXIuY2dpL2luY3ViYXRvci9hdGxhcy8wLjUuMC1pbmN1YmF0aW5nLyIgIHRpdGxlPSIwLjUtaW5jdWJhdGluZyI+MC41LWluY3ViYXRpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5Eb2N1bWVudGF0aW9uIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IjAuNS4wLWluY3ViYXRpbmcvaW5kZXguaHRtbCIgIHRpdGxlPSJjdXJyZW50Ij5jdXJyZW50PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSIwLjUuMC1pbmN1YmF0aW5nL2luZGV4Lmh0bWwiICB0aXRsZT0iMC41LWluY3ViYXRpbmciPjAuNS1pbmN1YmF0aW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UmVzb3VyY2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJRdWlja1N0YXJ0Lmh0bWwiICB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj5HZXR0aW5nIFN0YXJ0ZWQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkFyY2hpdGVjdHVyZS5odG1sIiAgdGl0bGU9IkFyY2hpdGVjdHVyZSI+QXJjaGl0ZWN0dXJlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJJbnN0YWxsYXRpb25TdGVwcy5odG1sIiAgdGl0bGU9Ikluc3RhbGxhdGlvbiI+SW5zdGFsbGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJUeXBlU3lzdGVtLmh0bWwiICB0aXRsZT0iVHlwZSBTeXN0ZW0iPlR5cGUgU3lzdGVtPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJDb25maWd1cmF0aW9uLmh0bWwiICB0aXRsZT0iQ29uZmlndXJhdGlvbiI+Q29uZmlndXJhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iU2VjdXJpdHkuaHRtbCIgIHRpdGxlPSJTZWN1cml0eSI+U2VjdXJpdHk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImFwaS9yZXN0Lmh0bWwiICB0aXRsZT0iUmVzdCBBUEkiPlJlc3QgQVBJPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QVNGIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL2hvdy1pdC13b3Jrcy5odG1sIiAgdGl0bGU9IkhvdyBBcGFjaGUgV29ya3MiPkhvdyBBcGFjaGUgV29ya3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uLyIgIHRpdGxlPSJGb3VuZGF0aW9uIj5Gb3VuZGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9zcG9uc29yc2hpcC5odG1sIiAgdGl0bGU9IlNwb25zb3JpbmcgQXBhY2hlIj5TcG9uc29yaW5nIEFwYWNoZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vdGhhbmtzLmh0bWwiICB0aXRsZT0iVGhhbmtzIj5UaGFua3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gaWQ9InNlYXJjaC1mb3JtIiBhY3Rpb249Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2giIG1ldGhvZD0iZ2V0IiAgY2xhc3M9Im5hdmJhci1zZWFyY2ggcHVsbC1yaWdodCIgPgorICAgIAorICA8aW5wdXQgdmFsdWU9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZyIgbmFtZT0ic2l0ZXNlYXJjaCIgdHlwZT0iaGlkZGVuIi8+CisgIDxpbnB1dCBjbGFzcz0ic2VhcmNoLXF1ZXJ5IiBuYW1lPSJxIiBpZD0icXVlcnkiIHR5cGU9InRleHQiIC8+Cis8L2Zvcm0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vY29vcC9jc2UvYnJhbmQ/Zm9ybT1zZWFyY2gtZm9ybSI+PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgPGlmcmFtZSBzcmM9Imh0dHA6Ly93d3cuZmFjZWJvb2suY29tL3BsdWdpbnMvbGlrZS5waHA/aHJlZj1odHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmcvYXRsYXMtZG9jcyZzZW5kPWZhbHNlJmxheW91dD1idXR0b25fY291bnQmc2hvdy1mYWNlcz1mYWxzZSZhY3Rpb249bGlrZSZjb2xvcnNjaGVtZT1kYXJrIgorICAgICAgICBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0iMCIKKyAgICAgICAgc3R5bGU9ImJvcmRlcjpub25lOyB3aWR0aDo4MHB4OyBoZWlnaHQ6MjBweDsgbWFyZ2luLXRvcDogMTBweDsiICBjbGFzcz0icHVsbC1yaWdodCIgPjwvaWZyYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9hcGlzLmdvb2dsZS5jb20vanMvcGx1c29uZS5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgPHVsIGNsYXNzPSJuYXYgcHVsbC1yaWdodCI+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CisgICAgCisgICAgPGRpdiBjbGFzcz0iZy1wbHVzb25lIiBkYXRhLWhyZWY9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzIiBkYXRhLXNpemU9Im1lZGl1bSIgIHdpZHRoPSI2MHB4IiBhbGlnbj0icmlnaHQiID48L2Rpdj4KKworICAgICAgICA8L2xpPjwvdWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAKKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICAKKyAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICA8ZGl2IGlkPSJiYW5uZXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLWxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLiIgaWQ9ImJhbm5lckxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hdGxhcy1sb2dvLnBuZyIgIGFsdD0iQXBhY2hlIEF0bGFzIiB3aWR0aD0iMjAwcHgiIGhlaWdodD0iNDVweCIvPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+ICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2luY3ViYXRvci5hcGFjaGUub3JnIiBpZD0iYmFubmVyUmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hcGFjaGUtaW5jdWJhdG9yLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgSW5jdWJhdG9yIi8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIj48aHIvPjwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImJyZWFkY3J1bWJzIj4KKyAgICAgICAgPHVsIGNsYXNzPSJicmVhZGNydW1iIj4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZyIgY2xhc3M9ImV4dGVybmFsTGluayIgdGl0bGU9IkFwYWNoZSI+CisgICAgICAgIEFwYWNoZTwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iQXRsYXMiPgorICAgICAgICBBdGxhczwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICA8bGkgY2xhc3M9IiI+UHJvamVjdCBNYWlsaW5nIExpc3RzPC9saT4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgPGxpIGlkPSJwdWJsaXNoRGF0ZSIgY2xhc3M9InB1bGwtcmlnaHQiPkxhc3QgUHVibGlzaGVkOiAyMDE1LTA3LTA5PC9saT4gPGxpIGNsYXNzPSJkaXZpZGVyIHB1bGwtcmlnaHQiPnw8L2xpPgorICAgICAgICAgICAgICA8bGkgaWQ9InByb2plY3RWZXJzaW9uIiBjbGFzcz0icHVsbC1yaWdodCI+VmVyc2lvbjogMC42LWluY3ViYXRpbmctU05BUFNIT1Q8L2xpPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvZGl2PgorCisgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICA8ZGl2IGlkPSJib2R5Q29sdW1uIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj5Qcm9qZWN0IE1haWxpbmcgTGlzdHM8YSBuYW1lPSJQcm9qZWN0X01haWxpbmdfTGlzdHMiPjwvYT48L2gyPjxhIG5hbWU9IlByb2plY3RfTWFpbGluZ19MaXN0cyI+PC9hPgorPHA+VGhlc2UgYXJlIHRoZSBtYWlsaW5nIGxpc3RzIHRoYXQgaGF2ZSBiZWVuIGVzdGFibGlzaGVkIGZvciB0aGlzIHByb2plY3QuIEZvciBlYWNoIGxpc3QsIHRoZXJlIGlzIGEgc3Vic2NyaWJlLCB1bnN1YnNjcmliZSwgYW5kIGFuIGFyY2hpdmUgbGluay48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idGFibGUgdGFibGUtc3RyaXBlZCI+Cis8dHIgY2xhc3M9ImEiPgorPHRoPk5hbWU8L3RoPgorPHRoPlN1YnNjcmliZTwvdGg+Cis8dGg+VW5zdWJzY3JpYmU8L3RoPgorPHRoPlBvc3Q8L3RoPgorPHRoPkFyY2hpdmU8L3RoPjwvdHI+Cis8dHIgY2xhc3M9ImIiPgorPHRkPmF0bGFzLWRldjwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOmRldi1zdWJzY3JpYmVAYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmciPlN1YnNjcmliZTwvYT48L3RkPgorPHRkPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Im1haWx0bzpkZXYtdW5zdWJzY3JpYmVAYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmciPlVuc3Vic2NyaWJlPC9hPjwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOmRldkBhdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZyI+UG9zdDwvYT48L3RkPgorPHRkPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Imh0dHA6Ly9tYWlsLWFyY2hpdmVzLmFwYWNoZS5vcmcvbW9kX21ib3gvYXRsYXMtZGV2LyI+bWFpbC1hcmNoaXZlcy5hcGFjaGUub3JnPC9hPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0iYSI+Cis8dGQ+YXRsYXMtY29tbWl0czwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOmNvbW1pdHMtc3Vic2NyaWJlQGF0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnIj5TdWJzY3JpYmU8L2E+PC90ZD4KKzx0ZD48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJtYWlsdG86Y29tbWl0cy11bnN1YnNjcmliZUBhdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZyI+VW5zdWJzY3JpYmU8L2E+PC90ZD4KKzx0ZD48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJtYWlsdG86Y29tbWl0c0BhdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZyI+UG9zdDwvYT48L3RkPgorPHRkPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Imh0dHA6Ly9tYWlsLWFyY2hpdmVzLmFwYWNoZS5vcmcvbW9kX21ib3gvYXRsYXMtY29tbWl0cy8iPm1haWwtYXJjaGl2ZXMuYXBhY2hlLm9yZzwvYT48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorCisgICAgPGhyLz4KKworICAgIDxmb290ZXI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgc3BhbjEyIj5Db3B5cmlnaHQgJmNvcHk7ICAgICAgICAgICAgICAgICAgICAyMDE1CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciPkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9hPi4KKyAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPHAgaWQ9InBvd2VyZWRCeSIgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy8iIHRpdGxlPSJCdWlsdCBieSBNYXZlbiIgY2xhc3M9InBvd2VyZWRCeSI+CisgICAgICAgIDxpbWcgY2xhc3M9ImJ1aWx0QnkiIGFsdD0iQnVpbHQgYnkgTWF2ZW4iIHNyYz0iLi9pbWFnZXMvbG9nb3MvbWF2ZW4tZmVhdGhlci5wbmciIC8+CisgICAgICA8L2E+CisgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgPC9mb290ZXI+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3Byb2plY3QtaW5mby5odG1sIGIvcHJvamVjdC1pbmZvLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg1NWJlMgotLS0gL2Rldi9udWxsCisrKyBiL3Byb2plY3QtaW5mby5odG1sCkBAIC0wLDAgKzEsMjgxIEBACis8IURPQ1RZUEUgaHRtbD4KKzwhLS0KKyB8IEdlbmVyYXRlZCBieSBBcGFjaGUgTWF2ZW4gRG94aWEgYXQgMjAxNS0wNy0wOQorIHwgUmVuZGVyZWQgdXNpbmcgQXBhY2hlIE1hdmVuIEZsdWlkbyBTa2luIDEuMy4wCistLT4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CisgICAgPG1ldGEgbmFtZT0iRGF0ZS1SZXZpc2lvbi15eXl5bW1kZCIgY29udGVudD0iMjAxNTA3MDkiIC8+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4iIC8+CisgICAgPHRpdGxlPk1ldGFkYXRhIGFuZCBHb3Zlcm5hbmNlIC0gUHJvamVjdCBJbmZvcm1hdGlvbjwvdGl0bGU+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9zaXRlLmNzcyIgLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3ByaW50LmNzcyIgbWVkaWE9InByaW50IiAvPgorCisgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuL2pzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmpzIj48L3NjcmlwdD4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+JCggZG9jdW1lbnQgKS5yZWFkeSggZnVuY3Rpb24oKSB7ICQoICcuY2Fyb3VzZWwnICkuY2Fyb3VzZWwoIHsgaW50ZXJ2YWw6IDM1MDAgfSApIH0gKTs8L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgIDwvaGVhZD4KKyAgICAgICAgPGJvZHkgY2xhc3M9InRvcEJhckVuYWJsZWQiPgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorCisgICAgPGRpdiBpZD0idG9wYmFyIiBjbGFzcz0ibmF2YmFyIG5hdmJhci1maXhlZC10b3AgIj4KKyAgICAgIDxkaXYgY2xhc3M9Im5hdmJhci1pbm5lciI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIiBzdHlsZT0id2lkdGg6IDY4JTsiPjxkaXYgY2xhc3M9Im5hdi1jb2xsYXBzZSI+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJuYXYiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BdGxhcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9IkFib3V0Ij5BYm91dDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJXaWtpIj5XaWtpPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9Ik5ld3MiPk5ld3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0LXdpcC11cy5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3ItYXRsYXMuZ2l0IiAgdGl0bGU9IkdpdCI+R2l0PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3IvYXRsYXMiICB0aXRsZT0iU3ZuIj5Tdm48L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvQVRMQVMiICB0aXRsZT0iSmlyYSI+SmlyYTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUy9Qb3dlcmVkQnkiICB0aXRsZT0iUG93ZXJlZCBieSI+UG93ZXJlZCBieTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL2Jsb2dzLmFwYWNoZS5vcmcvYXRsYXMvIiAgdGl0bGU9IkJsb2ciPkJsb2c8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5Qcm9qZWN0IEluZm9ybWF0aW9uIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InByb2plY3QtaW5mby5odG1sIiAgdGl0bGU9IlN1bW1hcnkiPlN1bW1hcnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Im1haWwtbGlzdHMuaHRtbCIgIHRpdGxlPSJNYWlsaW5nIExpc3RzIj5NYWlsaW5nIExpc3RzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd2ViY2hhdC5mcmVlbm9kZS5uZXQ/Y2hhbm5lbHM9YXBhY2hlYXRsYXMmdWlvPWQ0IiAgdGl0bGU9IklSQyI+SVJDPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJ0ZWFtLWxpc3QuaHRtbCIgIHRpdGxlPSJUZWFtIj5UZWFtPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpc3N1ZS10cmFja2luZy5odG1sIiAgdGl0bGU9Iklzc3VlIFRyYWNraW5nIj5Jc3N1ZSBUcmFja2luZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ic291cmNlLXJlcG9zaXRvcnkuaHRtbCIgIHRpdGxlPSJTb3VyY2UgUmVwb3NpdG9yeSI+U291cmNlIFJlcG9zaXRvcnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImxpY2Vuc2UuaHRtbCIgIHRpdGxlPSJMaWNlbnNlIj5MaWNlbnNlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UmVsZWFzZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2R5bi9jbG9zZXIuY2dpL2luY3ViYXRvci9hdGxhcy8wLjUuMC1pbmN1YmF0aW5nLyIgIHRpdGxlPSIwLjUtaW5jdWJhdGluZyI+MC41LWluY3ViYXRpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5Eb2N1bWVudGF0aW9uIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IjAuNS4wLWluY3ViYXRpbmcvaW5kZXguaHRtbCIgIHRpdGxlPSJjdXJyZW50Ij5jdXJyZW50PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSIwLjUuMC1pbmN1YmF0aW5nL2luZGV4Lmh0bWwiICB0aXRsZT0iMC41LWluY3ViYXRpbmciPjAuNS1pbmN1YmF0aW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UmVzb3VyY2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJRdWlja1N0YXJ0Lmh0bWwiICB0aXRsZT0iR2V0dGluZyBTdGFydGVkIj5HZXR0aW5nIFN0YXJ0ZWQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkFyY2hpdGVjdHVyZS5odG1sIiAgdGl0bGU9IkFyY2hpdGVjdHVyZSI+QXJjaGl0ZWN0dXJlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJJbnN0YWxsYXRpb25TdGVwcy5odG1sIiAgdGl0bGU9Ikluc3RhbGxhdGlvbiI+SW5zdGFsbGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJUeXBlU3lzdGVtLmh0bWwiICB0aXRsZT0iVHlwZSBTeXN0ZW0iPlR5cGUgU3lzdGVtPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJDb25maWd1cmF0aW9uLmh0bWwiICB0aXRsZT0iQ29uZmlndXJhdGlvbiI+Q29uZmlndXJhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iU2VjdXJpdHkuaHRtbCIgIHRpdGxlPSJTZWN1cml0eSI+U2VjdXJpdHk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImFwaS9yZXN0Lmh0bWwiICB0aXRsZT0iUmVzdCBBUEkiPlJlc3QgQVBJPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QVNGIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL2hvdy1pdC13b3Jrcy5odG1sIiAgdGl0bGU9IkhvdyBBcGFjaGUgV29ya3MiPkhvdyBBcGFjaGUgV29ya3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uLyIgIHRpdGxlPSJGb3VuZGF0aW9uIj5Gb3VuZGF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9zcG9uc29yc2hpcC5odG1sIiAgdGl0bGU9IlNwb25zb3JpbmcgQXBhY2hlIj5TcG9uc29yaW5nIEFwYWNoZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vdGhhbmtzLmh0bWwiICB0aXRsZT0iVGhhbmtzIj5UaGFua3M8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gaWQ9InNlYXJjaC1mb3JtIiBhY3Rpb249Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2giIG1ldGhvZD0iZ2V0IiAgY2xhc3M9Im5hdmJhci1zZWFyY2ggcHVsbC1yaWdodCIgPgorICAgIAorICA8aW5wdXQgdmFsdWU9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZyIgbmFtZT0ic2l0ZXNlYXJjaCIgdHlwZT0iaGlkZGVuIi8+CisgIDxpbnB1dCBjbGFzcz0ic2VhcmNoLXF1ZXJ5IiBuYW1lPSJxIiBpZD0icXVlcnkiIHR5cGU9InRleHQiIC8+Cis8L2Zvcm0+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vY29vcC9jc2UvYnJhbmQ/Zm9ybT1zZWFyY2gtZm9ybSI+PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgPGlmcmFtZSBzcmM9Imh0dHA6Ly93d3cuZmFjZWJvb2suY29tL3BsdWdpbnMvbGlrZS5waHA/aHJlZj1odHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmcvYXRsYXMtZG9jcyZzZW5kPWZhbHNlJmxheW91dD1idXR0b25fY291bnQmc2hvdy1mYWNlcz1mYWxzZSZhY3Rpb249bGlrZSZjb2xvcnNjaGVtZT1kYXJrIgorICAgICAgICBzY3JvbGxpbmc9Im5vIiBmcmFtZWJvcmRlcj0iMCIKKyAgICAgICAgc3R5bGU9ImJvcmRlcjpub25lOyB3aWR0aDo4MHB4OyBoZWlnaHQ6MjBweDsgbWFyZ2luLXRvcDogMTBweDsiICBjbGFzcz0icHVsbC1yaWdodCIgPjwvaWZyYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly9hcGlzLmdvb2dsZS5jb20vanMvcGx1c29uZS5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgPHVsIGNsYXNzPSJuYXYgcHVsbC1yaWdodCI+PGxpIHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyI+CisgICAgCisgICAgPGRpdiBjbGFzcz0iZy1wbHVzb25lIiBkYXRhLWhyZWY9Imh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzIiBkYXRhLXNpemU9Im1lZGl1bSIgIHdpZHRoPSI2MHB4IiBhbGlnbj0icmlnaHQiID48L2Rpdj4KKworICAgICAgICA8L2xpPjwvdWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAKKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICAKKyAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KKyAgICAgICAgICA8ZGl2IGlkPSJiYW5uZXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLWxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIuLiIgaWQ9ImJhbm5lckxlZnQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hdGxhcy1sb2dvLnBuZyIgIGFsdD0iQXBhY2hlIEF0bGFzIiB3aWR0aD0iMjAwcHgiIGhlaWdodD0iNDVweCIvPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1yaWdodCI+ICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL2luY3ViYXRvci5hcGFjaGUub3JnIiBpZD0iYmFubmVyUmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9hcGFjaGUtaW5jdWJhdG9yLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgSW5jdWJhdG9yIi8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyIj48aHIvPjwvZGl2PgorICAgICAgPC9kaXY+CisKKyAgICAgIDxkaXYgaWQ9ImJyZWFkY3J1bWJzIj4KKyAgICAgICAgPHVsIGNsYXNzPSJicmVhZGNydW1iIj4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZyIgY2xhc3M9ImV4dGVybmFsTGluayIgdGl0bGU9IkFwYWNoZSI+CisgICAgICAgIEFwYWNoZTwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJpbmRleC5odG1sIiB0aXRsZT0iQXRsYXMiPgorICAgICAgICBBdGxhczwvYT4KKyAgICAgICAgPC9saT4KKyAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciAiPi88L2xpPgorICAgICAgICA8bGkgY2xhc3M9IiI+UHJvamVjdCBJbmZvcm1hdGlvbjwvbGk+CisgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgIDxsaSBpZD0icHVibGlzaERhdGUiIGNsYXNzPSJwdWxsLXJpZ2h0Ij5MYXN0IFB1Ymxpc2hlZDogMjAxNS0wNy0wOTwvbGk+IDxsaSBjbGFzcz0iZGl2aWRlciBwdWxsLXJpZ2h0Ij58PC9saT4KKyAgICAgICAgICAgICAgPGxpIGlkPSJwcm9qZWN0VmVyc2lvbiIgY2xhc3M9InB1bGwtcmlnaHQiPlZlcnNpb246IDAuNi1pbmN1YmF0aW5nLVNOQVBTSE9UPC9saT4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2Rpdj4KKworICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgPGRpdiBpZD0iYm9keUNvbHVtbiIgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+Cis8aDI+UHJvamVjdCBJbmZvcm1hdGlvbjxhIG5hbWU9IlByb2plY3RfSW5mb3JtYXRpb24iPjwvYT48L2gyPgorPHA+VGhpcyBkb2N1bWVudCBwcm92aWRlcyBhbiBvdmVydmlldyBvZiB0aGUgdmFyaW91cyBkb2N1bWVudHMgYW5kIGxpbmtzIHRoYXQgYXJlIHBhcnQgb2YgdGhpcyBwcm9qZWN0J3MgZ2VuZXJhbCBpbmZvcm1hdGlvbi4gQWxsIG9mIHRoaXMgY29udGVudCBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSA8YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZyI+TWF2ZW48L2E+IG9uIGJlaGFsZiBvZiB0aGUgcHJvamVjdC48L3A+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5PdmVydmlldzxhIG5hbWU9Ik92ZXJ2aWV3Ij48L2E+PC9oMz4KKzx0YWJsZSBib3JkZXI9IjAiIGNsYXNzPSJ0YWJsZSB0YWJsZS1zdHJpcGVkIj4KKzx0ciBjbGFzcz0iYSI+Cis8dGg+RG9jdW1lbnQ8L3RoPgorPHRoPkRlc2NyaXB0aW9uPC90aD48L3RyPgorPHRyIGNsYXNzPSJiIj4KKzx0ZD48YSBocmVmPSJpbmRleC5odG1sIj5BYm91dDwvYT48L3RkPgorPHRkPkFwYWNoZSBBdGxhcyBEb2N1bWVudGF0aW9uPC90ZD48L3RyPgorPHRyIGNsYXNzPSJhIj4KKzx0ZD48YSBocmVmPSJ0ZWFtLWxpc3QuaHRtbCI+UHJvamVjdCBUZWFtPC9hPjwvdGQ+Cis8dGQ+VGhpcyBkb2N1bWVudCBwcm92aWRlcyBpbmZvcm1hdGlvbiBvbiB0aGUgbWVtYmVycyBvZiB0aGlzIHByb2plY3QuIFRoZXNlIGFyZSB0aGUgaW5kaXZpZHVhbHMgd2hvIGhhdmUgY29udHJpYnV0ZWQgdG8gdGhlIHByb2plY3QgaW4gb25lIGZvcm0gb3IgYW5vdGhlci48L3RkPjwvdHI+Cis8dHIgY2xhc3M9ImIiPgorPHRkPjxhIGhyZWY9Im1haWwtbGlzdHMuaHRtbCI+TWFpbGluZyBMaXN0czwvYT48L3RkPgorPHRkPlRoaXMgZG9jdW1lbnQgcHJvdmlkZXMgc3Vic2NyaXB0aW9uIGFuZCBhcmNoaXZlIGluZm9ybWF0aW9uIGZvciB0aGlzIHByb2plY3QncyBtYWlsaW5nIGxpc3RzLjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0iYSI+Cis8dGQ+PGEgaHJlZj0iaXNzdWUtdHJhY2tpbmcuaHRtbCI+SXNzdWUgVHJhY2tpbmc8L2E+PC90ZD4KKzx0ZD5UaGlzIGlzIGEgbGluayB0byB0aGUgaXNzdWUgbWFuYWdlbWVudCBzeXN0ZW0gZm9yIHRoaXMgcHJvamVjdC4gSXNzdWVzIChidWdzLCBmZWF0dXJlcywgY2hhbmdlIHJlcXVlc3RzKSBjYW4gYmUgY3JlYXRlZCBhbmQgcXVlcmllZCB1c2luZyB0aGlzIGxpbmsuPC90ZD48L3RyPgorPHRyIGNsYXNzPSJiIj4KKzx0ZD48YSBocmVmPSJsaWNlbnNlLmh0bWwiPlByb2plY3QgTGljZW5zZTwvYT48L3RkPgorPHRkPlRoaXMgaXMgYSBsaW5rIHRvIHRoZSBkZWZpbml0aW9ucyBvZiBwcm9qZWN0IGxpY2Vuc2VzLjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0iYSI+Cis8dGQ+PGEgaHJlZj0ic291cmNlLXJlcG9zaXRvcnkuaHRtbCI+U291cmNlIFJlcG9zaXRvcnk8L2E+PC90ZD4KKzx0ZD5UaGlzIGlzIGEgbGluayB0byB0aGUgb25saW5lIHNvdXJjZSByZXBvc2l0b3J5IHRoYXQgY2FuIGJlIHZpZXdlZCB2aWEgYSB3ZWIgYnJvd3Nlci48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj48L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorCisgICAgPGhyLz4KKworICAgIDxmb290ZXI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgc3BhbjEyIj5Db3B5cmlnaHQgJmNvcHk7ICAgICAgICAgICAgICAgICAgICAyMDE1CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciPkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9hPi4KKyAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPHAgaWQ9InBvd2VyZWRCeSIgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy8iIHRpdGxlPSJCdWlsdCBieSBNYXZlbiIgY2xhc3M9InBvd2VyZWRCeSI+CisgICAgICAgIDxpbWcgY2xhc3M9ImJ1aWx0QnkiIGFsdD0iQnVpbHQgYnkgTWF2ZW4iIHNyYz0iLi9pbWFnZXMvbG9nb3MvbWF2ZW4tZmVhdGhlci5wbmciIC8+CisgICAgICA8L2E+CisgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgPC9mb290ZXI+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NvdXJjZS1yZXBvc2l0b3J5Lmh0bWwgYi9zb3VyY2UtcmVwb3NpdG9yeS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZWUxOTUKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VyY2UtcmVwb3NpdG9yeS5odG1sCkBAIC0wLDAgKzEsMjc1IEBACis8IURPQ1RZUEUgaHRtbD4KKzwhLS0KKyB8IEdlbmVyYXRlZCBieSBBcGFjaGUgTWF2ZW4gRG94aWEgYXQgMjAxNS0wNy0wOQorIHwgUmVuZGVyZWQgdXNpbmcgQXBhY2hlIE1hdmVuIEZsdWlkbyBTa2luIDEuMy4wCistLT4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CisgICAgPG1ldGEgbmFtZT0iRGF0ZS1SZXZpc2lvbi15eXl5bW1kZCIgY29udGVudD0iMjAxNTA3MDkiIC8+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4iIC8+CisgICAgPHRpdGxlPk1ldGFkYXRhIGFuZCBHb3Zlcm5hbmNlIC0gU291cmNlIFJlcG9zaXRvcnk8L3RpdGxlPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3Mvc2l0ZS5jc3MiIC8+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuL2Nzcy9wcmludC5jc3MiIG1lZGlhPSJwcmludCIgLz4KKworICAgICAgCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi9qcy9hcGFjaGUtbWF2ZW4tZmx1aWRvLTEuMy4wLm1pbi5qcyI+PC9zY3JpcHQ+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIAorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoIGRvY3VtZW50ICkucmVhZHkoIGZ1bmN0aW9uKCkgeyAkKCAnLmNhcm91c2VsJyApLmNhcm91c2VsKCB7IGludGVydmFsOiAzNTAwIH0gKSB9ICk7PC9zY3JpcHQ+CisgICAgICAgICAgCisgICAgICAgICAgICA8L2hlYWQ+CisgICAgICAgIDxib2R5IGNsYXNzPSJ0b3BCYXJFbmFibGVkIj4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKKworICAgIDxkaXYgaWQ9InRvcGJhciIgY2xhc3M9Im5hdmJhciBuYXZiYXItZml4ZWQtdG9wICI+CisgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItaW5uZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciIgc3R5bGU9IndpZHRoOiA2OCU7Ij48ZGl2IGNsYXNzPSJuYXYtY29sbGFwc2UiPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+QXRsYXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJBYm91dCI+QWJvdXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iV2lraSI+V2lraTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UvZGlzcGxheS9BVExBUyIgIHRpdGxlPSJOZXdzIj5OZXdzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2dpdC13aXAtdXMuYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yLWF0bGFzLmdpdCIgIHRpdGxlPSJHaXQiPkdpdDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvaW5jdWJhdG9yL2F0bGFzIiAgdGl0bGU9IlN2biI+U3ZuPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0FUTEFTIiAgdGl0bGU9IkppcmEiPkppcmE8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMvUG93ZXJlZEJ5IiAgdGl0bGU9IlBvd2VyZWQgYnkiPlBvd2VyZWQgYnk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9ibG9ncy5hcGFjaGUub3JnL2F0bGFzLyIgIHRpdGxlPSJCbG9nIj5CbG9nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+UHJvamVjdCBJbmZvcm1hdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJwcm9qZWN0LWluZm8uaHRtbCIgIHRpdGxlPSJTdW1tYXJ5Ij5TdW1tYXJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJtYWlsLWxpc3RzLmh0bWwiICB0aXRsZT0iTWFpbGluZyBMaXN0cyI+TWFpbGluZyBMaXN0czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3dlYmNoYXQuZnJlZW5vZGUubmV0P2NoYW5uZWxzPWFwYWNoZWF0bGFzJnVpbz1kNCIgIHRpdGxlPSJJUkMiPklSQzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0idGVhbS1saXN0Lmh0bWwiICB0aXRsZT0iVGVhbSI+VGVhbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaXNzdWUtdHJhY2tpbmcuaHRtbCIgIHRpdGxlPSJJc3N1ZSBUcmFja2luZyI+SXNzdWUgVHJhY2tpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InNvdXJjZS1yZXBvc2l0b3J5Lmh0bWwiICB0aXRsZT0iU291cmNlIFJlcG9zaXRvcnkiPlNvdXJjZSBSZXBvc2l0b3J5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJsaWNlbnNlLmh0bWwiICB0aXRsZT0iTGljZW5zZSI+TGljZW5zZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlbGVhc2VzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9keW4vY2xvc2VyLmNnaS9pbmN1YmF0b3IvYXRsYXMvMC41LjAtaW5jdWJhdGluZy8iICB0aXRsZT0iMC41LWluY3ViYXRpbmciPjAuNS1pbmN1YmF0aW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biI+RG9jdW1lbnRhdGlvbiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSIwLjUuMC1pbmN1YmF0aW5nL2luZGV4Lmh0bWwiICB0aXRsZT0iY3VycmVudCI+Y3VycmVudDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iMC41LjAtaW5jdWJhdGluZy9pbmRleC5odG1sIiAgdGl0bGU9IjAuNS1pbmN1YmF0aW5nIj4wLjUtaW5jdWJhdGluZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlJlc291cmNlcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJpbmRleC5odG1sIiAgdGl0bGU9Ik92ZXJ2aWV3Ij5PdmVydmlldzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iUXVpY2tTdGFydC5odG1sIiAgdGl0bGU9IkdldHRpbmcgU3RhcnRlZCI+R2V0dGluZyBTdGFydGVkPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJBcmNoaXRlY3R1cmUuaHRtbCIgIHRpdGxlPSJBcmNoaXRlY3R1cmUiPkFyY2hpdGVjdHVyZTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iSW5zdGFsbGF0aW9uU3RlcHMuaHRtbCIgIHRpdGxlPSJJbnN0YWxsYXRpb24iPkluc3RhbGxhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iVHlwZVN5c3RlbS5odG1sIiAgdGl0bGU9IlR5cGUgU3lzdGVtIj5UeXBlIFN5c3RlbTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQ29uZmlndXJhdGlvbi5odG1sIiAgdGl0bGU9IkNvbmZpZ3VyYXRpb24iPkNvbmZpZ3VyYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlNlY3VyaXR5Lmh0bWwiICB0aXRsZT0iU2VjdXJpdHkiPlNlY3VyaXR5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJhcGkvcmVzdC5odG1sIiAgdGl0bGU9IlJlc3QgQVBJIj5SZXN0IEFQSTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkFTRiA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi9ob3ctaXQtd29ya3MuaHRtbCIgIHRpdGxlPSJIb3cgQXBhY2hlIFdvcmtzIj5Ib3cgQXBhY2hlIFdvcmtzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi8iICB0aXRsZT0iRm91bmRhdGlvbiI+Rm91bmRhdGlvbjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vc3BvbnNvcnNoaXAuaHRtbCIgIHRpdGxlPSJTcG9uc29yaW5nIEFwYWNoZSI+U3BvbnNvcmluZyBBcGFjaGU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3RoYW5rcy5odG1sIiAgdGl0bGU9IlRoYW5rcyI+VGhhbmtzPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJzZWFyY2gtZm9ybSIgYWN0aW9uPSJodHRwOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoIiBtZXRob2Q9ImdldCIgIGNsYXNzPSJuYXZiYXItc2VhcmNoIHB1bGwtcmlnaHQiID4KKyAgICAKKyAgPGlucHV0IHZhbHVlPSJodHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmciIG5hbWU9InNpdGVzZWFyY2giIHR5cGU9ImhpZGRlbiIvPgorICA8aW5wdXQgY2xhc3M9InNlYXJjaC1xdWVyeSIgbmFtZT0icSIgaWQ9InF1ZXJ5IiB0eXBlPSJ0ZXh0IiAvPgorPC9mb3JtPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL3d3dy5nb29nbGUuY29tL2Nvb3AvY3NlL2JyYW5kP2Zvcm09c2VhcmNoLWZvcm0iPjwvc2NyaXB0PgorICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgIDxpZnJhbWUgc3JjPSJodHRwOi8vd3d3LmZhY2Vib29rLmNvbS9wbHVnaW5zL2xpa2UucGhwP2hyZWY9aHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3Mmc2VuZD1mYWxzZSZsYXlvdXQ9YnV0dG9uX2NvdW50JnNob3ctZmFjZXM9ZmFsc2UmYWN0aW9uPWxpa2UmY29sb3JzY2hlbWU9ZGFyayIKKyAgICAgICAgc2Nyb2xsaW5nPSJubyIgZnJhbWVib3JkZXI9IjAiCisgICAgICAgIHN0eWxlPSJib3JkZXI6bm9uZTsgd2lkdGg6ODBweDsgaGVpZ2h0OjIwcHg7IG1hcmdpbi10b3A6IDEwcHg7IiAgY2xhc3M9InB1bGwtcmlnaHQiID48L2lmcmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vYXBpcy5nb29nbGUuY29tL2pzL3BsdXNvbmUuanMiPjwvc2NyaXB0PgorCisgICAgICAgIDx1bCBjbGFzcz0ibmF2IHB1bGwtcmlnaHQiPjxsaSBzdHlsZT0ibWFyZ2luLXRvcDogMTBweDsiPgorICAgIAorICAgIDxkaXYgY2xhc3M9ImctcGx1c29uZSIgZGF0YS1ocmVmPSJodHRwOi8vYXRsYXMuaW5jdWJhdG9yLmFwYWNoZS5vcmcvYXRsYXMtZG9jcyIgZGF0YS1zaXplPSJtZWRpdW0iICB3aWR0aD0iNjBweCIgYWxpZ249InJpZ2h0IiA+PC9kaXY+CisKKyAgICAgICAgPC9saT48L3VsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgCisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisgICAgCisgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgICAgICAgPGRpdiBpZD0iYmFubmVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0icHVsbC1sZWZ0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iLi4iIGlkPSJiYW5uZXJMZWZ0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvYXRsYXMtbG9nby5wbmciICBhbHQ9IkFwYWNoZSBBdGxhcyIgd2lkdGg9IjIwMHB4IiBoZWlnaHQ9IjQ1cHgiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9pbmN1YmF0b3IuYXBhY2hlLm9yZyIgaWQ9ImJhbm5lclJpZ2h0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvYXBhY2hlLWluY3ViYXRvci1sb2dvLnBuZyIgIGFsdD0iQXBhY2hlIEluY3ViYXRvciIvPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJjbGVhciI+PGhyLz48L2Rpdj4KKyAgICAgIDwvZGl2PgorCisgICAgICA8ZGl2IGlkPSJicmVhZGNydW1icyI+CisgICAgICAgIDx1bCBjbGFzcz0iYnJlYWRjcnVtYiI+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSIiPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciIGNsYXNzPSJleHRlcm5hbExpbmsiIHRpdGxlPSJBcGFjaGUiPgorICAgICAgICBBcGFjaGU8L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIgIj4vPC9saT4KKyAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgdGl0bGU9IkF0bGFzIj4KKyAgICAgICAgQXRsYXM8L2E+CisgICAgICAgIDwvbGk+CisgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIgIj4vPC9saT4KKyAgICAgICAgPGxpIGNsYXNzPSIiPlNvdXJjZSBSZXBvc2l0b3J5PC9saT4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgPGxpIGlkPSJwdWJsaXNoRGF0ZSIgY2xhc3M9InB1bGwtcmlnaHQiPkxhc3QgUHVibGlzaGVkOiAyMDE1LTA3LTA5PC9saT4gPGxpIGNsYXNzPSJkaXZpZGVyIHB1bGwtcmlnaHQiPnw8L2xpPgorICAgICAgICAgICAgICA8bGkgaWQ9InByb2plY3RWZXJzaW9uIiBjbGFzcz0icHVsbC1yaWdodCI+VmVyc2lvbjogMC42LWluY3ViYXRpbmctU05BUFNIT1Q8L2xpPgorICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgIDwvZGl2PgorCisgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICA8ZGl2IGlkPSJib2R5Q29sdW1uIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj5PdmVydmlldzxhIG5hbWU9Ik92ZXJ2aWV3Ij48L2E+PC9oMj48YSBuYW1lPSJPdmVydmlldyI+PC9hPgorPHA+VGhpcyBwcm9qZWN0IHVzZXMgYSBTb3VyY2UgQ29udGVudCBNYW5hZ2VtZW50IFN5c3RlbSB0byBtYW5hZ2UgaXRzIHNvdXJjZSBjb2RlLjwvcD48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPldlYiBBY2Nlc3M8YSBuYW1lPSJXZWJfQWNjZXNzIj48L2E+PC9oMj48YSBuYW1lPSJXZWJfQWNjZXNzIj48L2E+Cis8cD5UaGUgZm9sbG93aW5nIGlzIGEgbGluayB0byB0aGUgb25saW5lIHNvdXJjZSByZXBvc2l0b3J5LjwvcD4KKzxkaXYgY2xhc3M9InNvdXJjZSI+Cis8cHJlPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Imh0dHBzOi8vZ2l0LXdpcC11cy5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3ItYXRsYXMuZ2l0L2F0bGFzLWRvY3MiPmh0dHBzOi8vZ2l0LXdpcC11cy5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3ItYXRsYXMuZ2l0L2F0bGFzLWRvY3M8L2E+PC9wcmU+PC9kaXY+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMj5Bbm9ueW1vdXMgYWNjZXNzPGEgbmFtZT0iQW5vbnltb3VzX2FjY2VzcyI+PC9hPjwvaDI+PGEgbmFtZT0iQW5vbnltb3VzX2FjY2VzcyI+PC9hPgorPHA+UmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIFNDTSB1c2VkIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGFub255bW91c2x5IGNoZWNrIG91dC4gVGhlIGNvbm5lY3Rpb24gdXJsIGlzOjwvcD4KKzxkaXYgY2xhc3M9InNvdXJjZSI+Cis8cHJlPmh0dHBzOi8vZ2l0LXdpcC11cy5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3ItYXRsYXMuZ2l0L2F0bGFzLWRvY3M8L3ByZT48L2Rpdj48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPkRldmVsb3BlciBhY2Nlc3M8YSBuYW1lPSJEZXZlbG9wZXJfYWNjZXNzIj48L2E+PC9oMj48YSBuYW1lPSJEZXZlbG9wZXJfYWNjZXNzIj48L2E+Cis8cD5SZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgU0NNIHVzZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZGV2ZWxvcGVyIGNoZWNrIG91dC4gVGhlIGNvbm5lY3Rpb24gdXJsIGlzOjwvcD4KKzxkaXYgY2xhc3M9InNvdXJjZSI+Cis8cHJlPmh0dHBzOi8vZ2l0LXdpcC11cy5hcGFjaGUub3JnL3JlcG9zL2FzZi9pbmN1YmF0b3ItYXRsYXMuZ2l0L2F0bGFzLWRvY3M8L3ByZT48L2Rpdj48L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPkFjY2VzcyBmcm9tIGJlaGluZCBhIGZpcmV3YWxsPGEgbmFtZT0iQWNjZXNzX2Zyb21fYmVoaW5kX2FfZmlyZXdhbGwiPjwvYT48L2gyPjxhIG5hbWU9IkFjY2Vzc19mcm9tX2JlaGluZF9hX2ZpcmV3YWxsIj48L2E+Cis8cD5SZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgU0NNIHVzZWQgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYWNjZXNzIGJlaGluZCBhIGZpcmV3YWxsLjwvcD48L2Rpdj4KKyAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIDwvZGl2PgorCisgICAgPGhyLz4KKworICAgIDxmb290ZXI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgc3BhbjEyIj5Db3B5cmlnaHQgJmNvcHk7ICAgICAgICAgICAgICAgICAgICAyMDE1CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmciPkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9hPi4KKyAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPHAgaWQ9InBvd2VyZWRCeSIgY2xhc3M9InB1bGwtcmlnaHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy8iIHRpdGxlPSJCdWlsdCBieSBNYXZlbiIgY2xhc3M9InBvd2VyZWRCeSI+CisgICAgICAgIDxpbWcgY2xhc3M9ImJ1aWx0QnkiIGFsdD0iQnVpbHQgYnkgTWF2ZW4iIHNyYz0iLi9pbWFnZXMvbG9nb3MvbWF2ZW4tZmVhdGhlci5wbmciIC8+CisgICAgICA8L2E+CisgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgPC9mb290ZXI+CisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3RlYW0tbGlzdC5odG1sIGIvdGVhbS1saXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2NzI5MQotLS0gL2Rldi9udWxsCisrKyBiL3RlYW0tbGlzdC5odG1sCkBAIC0wLDAgKzEsNDY4IEBACis8IURPQ1RZUEUgaHRtbD4KKzwhLS0KKyB8IEdlbmVyYXRlZCBieSBBcGFjaGUgTWF2ZW4gRG94aWEgYXQgMjAxNS0wNy0wOQorIHwgUmVuZGVyZWQgdXNpbmcgQXBhY2hlIE1hdmVuIEZsdWlkbyBTa2luIDEuMy4wCistLT4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iIGxhbmc9ImVuIj4KKyAgPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiIC8+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiIC8+CisgICAgPG1ldGEgbmFtZT0iRGF0ZS1SZXZpc2lvbi15eXl5bW1kZCIgY29udGVudD0iMjAxNTA3MDkiIC8+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZW4iIC8+CisgICAgPHRpdGxlPk1ldGFkYXRhIGFuZCBHb3Zlcm5hbmNlIC0gVGVhbSBsaXN0PC90aXRsZT4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL2FwYWNoZS1tYXZlbi1mbHVpZG8tMS4zLjAubWluLmNzcyIgLz4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4vY3NzL3NpdGUuY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi9jc3MvcHJpbnQuY3NzIiBtZWRpYT0icHJpbnQiIC8+CisKKyAgICAgIAorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4vanMvYXBhY2hlLW1hdmVuLWZsdWlkby0xLjMuMC5taW4uanMiPjwvc2NyaXB0PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4kKCBkb2N1bWVudCApLnJlYWR5KCBmdW5jdGlvbigpIHsgJCggJy5jYXJvdXNlbCcgKS5jYXJvdXNlbCggeyBpbnRlcnZhbDogMzUwMCB9ICkgfSApOzwvc2NyaXB0PgorICAgICAgICAgIAorICAgICAgICAgICAgPC9oZWFkPgorICAgICAgICA8Ym9keSBjbGFzcz0idG9wQmFyRW5hYmxlZCI+CisgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCisKKyAgICA8ZGl2IGlkPSJ0b3BiYXIiIGNsYXNzPSJuYXZiYXIgbmF2YmFyLWZpeGVkLXRvcCAiPgorICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWlubmVyIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiIHN0eWxlPSJ3aWR0aDogNjglOyI+PGRpdiBjbGFzcz0ibmF2LWNvbGxhcHNlIj4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9Im5hdiI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkF0bGFzIDxiIGNsYXNzPSJjYXJldCI+PC9iPjwvYT4KKyAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiICB0aXRsZT0iQWJvdXQiPkFib3V0PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTIiAgdGl0bGU9Ildpa2kiPldpa2k8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvQVRMQVMiICB0aXRsZT0iTmV3cyI+TmV3czwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXQtd2lwLXVzLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci1hdGxhcy5naXQiICB0aXRsZT0iR2l0Ij5HaXQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2luY3ViYXRvci9hdGxhcyIgIHRpdGxlPSJTdm4iPlN2bjwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9BVExBUyIgIHRpdGxlPSJKaXJhIj5KaXJhPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0FUTEFTL1Bvd2VyZWRCeSIgIHRpdGxlPSJQb3dlcmVkIGJ5Ij5Qb3dlcmVkIGJ5PC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vYmxvZ3MuYXBhY2hlLm9yZy9hdGxhcy8iICB0aXRsZT0iQmxvZyI+QmxvZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPlByb2plY3QgSW5mb3JtYXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0icHJvamVjdC1pbmZvLmh0bWwiICB0aXRsZT0iU3VtbWFyeSI+U3VtbWFyeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibWFpbC1saXN0cy5odG1sIiAgdGl0bGU9Ik1haWxpbmcgTGlzdHMiPk1haWxpbmcgTGlzdHM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93ZWJjaGF0LmZyZWVub2RlLm5ldD9jaGFubmVscz1hcGFjaGVhdGxhcyZ1aW89ZDQiICB0aXRsZT0iSVJDIj5JUkM8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9InRlYW0tbGlzdC5odG1sIiAgdGl0bGU9IlRlYW0iPlRlYW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imlzc3VlLXRyYWNraW5nLmh0bWwiICB0aXRsZT0iSXNzdWUgVHJhY2tpbmciPklzc3VlIFRyYWNraW5nPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJzb3VyY2UtcmVwb3NpdG9yeS5odG1sIiAgdGl0bGU9IlNvdXJjZSBSZXBvc2l0b3J5Ij5Tb3VyY2UgUmVwb3NpdG9yeTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0ibGljZW5zZS5odG1sIiAgdGl0bGU9IkxpY2Vuc2UiPkxpY2Vuc2U8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZWxlYXNlcyA8YiBjbGFzcz0iY2FyZXQiPjwvYj48L2E+CisgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZHluL2Nsb3Nlci5jZ2kvaW5jdWJhdG9yL2F0bGFzLzAuNS4wLWluY3ViYXRpbmcvIiAgdGl0bGU9IjAuNS1pbmN1YmF0aW5nIj4wLjUtaW5jdWJhdGluZzwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgorICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iPkRvY3VtZW50YXRpb24gPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iMC41LjAtaW5jdWJhdGluZy9pbmRleC5odG1sIiAgdGl0bGU9ImN1cnJlbnQiPmN1cnJlbnQ8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IjAuNS4wLWluY3ViYXRpbmcvaW5kZXguaHRtbCIgIHRpdGxlPSIwLjUtaW5jdWJhdGluZyI+MC41LWluY3ViYXRpbmc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5SZXNvdXJjZXMgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaW5kZXguaHRtbCIgIHRpdGxlPSJPdmVydmlldyI+T3ZlcnZpZXc8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlF1aWNrU3RhcnQuaHRtbCIgIHRpdGxlPSJHZXR0aW5nIFN0YXJ0ZWQiPkdldHRpbmcgU3RhcnRlZDwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iQXJjaGl0ZWN0dXJlLmh0bWwiICB0aXRsZT0iQXJjaGl0ZWN0dXJlIj5BcmNoaXRlY3R1cmU8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Ikluc3RhbGxhdGlvblN0ZXBzLmh0bWwiICB0aXRsZT0iSW5zdGFsbGF0aW9uIj5JbnN0YWxsYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IlR5cGVTeXN0ZW0uaHRtbCIgIHRpdGxlPSJUeXBlIFN5c3RlbSI+VHlwZSBTeXN0ZW08L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9IkNvbmZpZ3VyYXRpb24uaHRtbCIgIHRpdGxlPSJDb25maWd1cmF0aW9uIj5Db25maWd1cmF0aW9uPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJTZWN1cml0eS5odG1sIiAgdGl0bGU9IlNlY3VyaXR5Ij5TZWN1cml0eTwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iYXBpL3Jlc3QuaHRtbCIgIHRpdGxlPSJSZXN0IEFQSSI+UmVzdCBBUEk8L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIj5BU0YgPGIgY2xhc3M9ImNhcmV0Ij48L2I+PC9hPgorICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vaG93LWl0LXdvcmtzLmh0bWwiICB0aXRsZT0iSG93IEFwYWNoZSBXb3JrcyI+SG93IEFwYWNoZSBXb3JrczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8bGk+ICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2ZvdW5kYXRpb24vIiAgdGl0bGU9IkZvdW5kYXRpb24iPkZvdW5kYXRpb248L2E+Cis8L2xpPgorICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgPGxpPiAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9mb3VuZGF0aW9uL3Nwb25zb3JzaGlwLmh0bWwiICB0aXRsZT0iU3BvbnNvcmluZyBBcGFjaGUiPlNwb25zb3JpbmcgQXBhY2hlPC9hPgorPC9saT4KKyAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDxsaT4gICAgICA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvZm91bmRhdGlvbi90aGFua3MuaHRtbCIgIHRpdGxlPSJUaGFua3MiPlRoYW5rczwvYT4KKzwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+CisgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICA8Zm9ybSBpZD0ic2VhcmNoLWZvcm0iIGFjdGlvbj0iaHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaCIgbWV0aG9kPSJnZXQiICBjbGFzcz0ibmF2YmFyLXNlYXJjaCBwdWxsLXJpZ2h0IiA+CisgICAgCisgIDxpbnB1dCB2YWx1ZT0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnIiBuYW1lPSJzaXRlc2VhcmNoIiB0eXBlPSJoaWRkZW4iLz4KKyAgPGlucHV0IGNsYXNzPSJzZWFyY2gtcXVlcnkiIG5hbWU9InEiIGlkPSJxdWVyeSIgdHlwZT0idGV4dCIgLz4KKzwvZm9ybT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9jb29wL2NzZS9icmFuZD9mb3JtPXNlYXJjaC1mb3JtIj48L3NjcmlwdD4KKyAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICA8aWZyYW1lIHNyYz0iaHR0cDovL3d3dy5mYWNlYm9vay5jb20vcGx1Z2lucy9saWtlLnBocD9ocmVmPWh0dHA6Ly9hdGxhcy5pbmN1YmF0b3IuYXBhY2hlLm9yZy9hdGxhcy1kb2NzJnNlbmQ9ZmFsc2UmbGF5b3V0PWJ1dHRvbl9jb3VudCZzaG93LWZhY2VzPWZhbHNlJmFjdGlvbj1saWtlJmNvbG9yc2NoZW1lPWRhcmsiCisgICAgICAgIHNjcm9sbGluZz0ibm8iIGZyYW1lYm9yZGVyPSIwIgorICAgICAgICBzdHlsZT0iYm9yZGVyOm5vbmU7IHdpZHRoOjgwcHg7IGhlaWdodDoyMHB4OyBtYXJnaW4tdG9wOiAxMHB4OyIgIGNsYXNzPSJwdWxsLXJpZ2h0IiA+PC9pZnJhbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2FwaXMuZ29vZ2xlLmNvbS9qcy9wbHVzb25lLmpzIj48L3NjcmlwdD4KKworICAgICAgICA8dWwgY2xhc3M9Im5hdiBwdWxsLXJpZ2h0Ij48bGkgc3R5bGU9Im1hcmdpbi10b3A6IDEwcHg7Ij4KKyAgICAKKyAgICA8ZGl2IGNsYXNzPSJnLXBsdXNvbmUiIGRhdGEtaHJlZj0iaHR0cDovL2F0bGFzLmluY3ViYXRvci5hcGFjaGUub3JnL2F0bGFzLWRvY3MiIGRhdGEtc2l6ZT0ibWVkaXVtIiAgd2lkdGg9IjYwcHgiIGFsaWduPSJyaWdodCIgPjwvZGl2PgorCisgICAgICAgIDwvbGk+PC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgIAorICAgICAgICA8L2Rpdj4KKyAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorICAgIAorICAgICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXIiPgorICAgICAgICAgIDxkaXYgaWQ9ImJhbm5lciI+CisgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtbGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Ii4uIiBpZD0iYmFubmVyTGVmdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2F0bGFzLWxvZ28ucG5nIiAgYWx0PSJBcGFjaGUgQXRsYXMiIHdpZHRoPSIyMDBweCIgaGVpZ2h0PSI0NXB4Ii8+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJwdWxsLXJpZ2h0Ij4gICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwOi8vaW5jdWJhdG9yLmFwYWNoZS5vcmciIGlkPSJiYW5uZXJSaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2FwYWNoZS1pbmN1YmF0b3ItbG9nby5wbmciICBhbHQ9IkFwYWNoZSBJbmN1YmF0b3IiLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY2xlYXIiPjxoci8+PC9kaXY+CisgICAgICA8L2Rpdj4KKworICAgICAgPGRpdiBpZD0iYnJlYWRjcnVtYnMiPgorICAgICAgICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiPgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnIiBjbGFzcz0iZXh0ZXJuYWxMaW5rIiB0aXRsZT0iQXBhY2hlIj4KKyAgICAgICAgQXBhY2hlPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgICAgICA8bGkgY2xhc3M9IiI+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImluZGV4Lmh0bWwiIHRpdGxlPSJBdGxhcyI+CisgICAgICAgIEF0bGFzPC9hPgorICAgICAgICA8L2xpPgorICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyICI+LzwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0iIj5UZWFtIGxpc3Q8L2xpPgorICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICA8bGkgaWQ9InB1Ymxpc2hEYXRlIiBjbGFzcz0icHVsbC1yaWdodCI+TGFzdCBQdWJsaXNoZWQ6IDIwMTUtMDctMDk8L2xpPiA8bGkgY2xhc3M9ImRpdmlkZXIgcHVsbC1yaWdodCI+fDwvbGk+CisgICAgICAgICAgICAgIDxsaSBpZD0icHJvamVjdFZlcnNpb24iIGNsYXNzPSJwdWxsLXJpZ2h0Ij5WZXJzaW9uOiAwLjYtaW5jdWJhdGluZy1TTkFQU0hPVDwvbGk+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgPC9kaXY+CisKKyAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIDxkaXYgaWQ9ImJvZHlDb2x1bW4iID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgyPlRoZSBUZWFtPGEgbmFtZT0iVGhlX1RlYW0iPjwvYT48L2gyPjxhIG5hbWU9IlRoZV9UZWFtIj48L2E+Cis8cD5BIHN1Y2Nlc3NmdWwgcHJvamVjdCByZXF1aXJlcyBtYW55IHBlb3BsZSB0byBwbGF5IG1hbnkgcm9sZXMuIFNvbWUgbWVtYmVycyB3cml0ZSBjb2RlIG9yIGRvY3VtZW50YXRpb24sIHdoaWxlIG90aGVycyBhcmUgdmFsdWFibGUgYXMgdGVzdGVycywgc3VibWl0dGluZyBwYXRjaGVzIGFuZCBzdWdnZXN0aW9ucy48L3A+Cis8cD5UaGUgdGVhbSBpcyBjb21wcmlzZWQgb2YgTWVtYmVycyBhbmQgQ29udHJpYnV0b3JzLiBNZW1iZXJzIGhhdmUgZGlyZWN0IGFjY2VzcyB0byB0aGUgc291cmNlIG9mIGEgcHJvamVjdCBhbmQgYWN0aXZlbHkgZXZvbHZlIHRoZSBjb2RlLWJhc2UuIENvbnRyaWJ1dG9ycyBpbXByb3ZlIHRoZSBwcm9qZWN0IHRocm91Z2ggc3VibWlzc2lvbiBvZiBwYXRjaGVzIGFuZCBzdWdnZXN0aW9ucyB0byB0aGUgTWVtYmVycy4gVGhlIG51bWJlciBvZiBDb250cmlidXRvcnMgdG8gdGhlIHByb2plY3QgaXMgdW5ib3VuZGVkLiBHZXQgaW52b2x2ZWQgdG9kYXkuIEFsbCBjb250cmlidXRpb25zIHRvIHRoZSBwcm9qZWN0IGFyZSBncmVhdGx5IGFwcHJlY2lhdGVkLjwvcD4KKzxkaXYgY2xhc3M9InNlY3Rpb24iPgorPGgzPk1lbWJlcnM8YSBuYW1lPSJNZW1iZXJzIj48L2E+PC9oMz48YSBuYW1lPSJNZW1iZXJzIj48L2E+Cis8cD5UaGUgZm9sbG93aW5nIGlzIGEgbGlzdCBvZiBkZXZlbG9wZXJzIHdpdGggY29tbWl0IHByaXZpbGVnZXMgdGhhdCBoYXZlIGRpcmVjdGx5IGNvbnRyaWJ1dGVkIHRvIHRoZSBwcm9qZWN0IGluIG9uZSB3YXkgb3IgYW5vdGhlci48L3A+Cis8dGFibGUgYm9yZGVyPSIwIiBjbGFzcz0idGFibGUgdGFibGUtc3RyaXBlZCI+Cis8dHIgY2xhc3M9ImEiPgorPHRoPklkPC90aD4KKzx0aD5OYW1lPC90aD4KKzx0aD5FbWFpbDwvdGg+Cis8dGg+T3JnYW5pemF0aW9uPC90aD4KKzx0aD5Sb2xlczwvdGg+Cis8dGg+VGltZSBab25lPC90aD4KKzx0aD5BY3R1YWwgVGltZSAoR01UKTwvdGg+PC90cj4KKzx0ciBjbGFzcz0iYiI+Cis8dGQ+PGEgbmFtZT0idmVua2F0ZXNoIj48L2E+dmVua2F0ZXNoPC90ZD4KKzx0ZD5WZW5rYXRlc2ggU2VldGhhcmFtPC90ZD4KKzx0ZD48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJtYWlsdG86dmVua2F0ZXNoQGFwYWNoZS5vcmciPnZlbmthdGVzaEBhcGFjaGUub3JnPC9hPjwvdGQ+Cis8dGQ+SG9ydG9ud29ya3MgSW5jLjwvdGQ+Cis8dGQ+Y29tbWl0dGVyLCBQUE1DPC90ZD4KKzx0ZD4tODwvdGQ+Cis8dGQ+PHNwYW4gaWQ9ImRldmVsb3Blci0wIj4tODwvc3Bhbj48L3RkPjwvdHI+Cis8dHIgY2xhc3M9ImEiPgorPHRkPjxhIG5hbWU9InJoYnV0YW5pIj48L2E+cmhidXRhbmk8L3RkPgorPHRkPkhhcmlzaCBCdXRhbmk8L3RkPgorPHRkPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Im1haWx0bzpyaGJ1dGFuaUBhcGFjaGUub3JnIj5yaGJ1dGFuaUBhcGFjaGUub3JnPC9hPjwvdGQ+Cis8dGQ+SG9ydG9ud29ya3MgSW5jLjwvdGQ+Cis8dGQ+Y29tbWl0dGVyLCBQUE1DPC90ZD4KKzx0ZD4tODwvdGQ+Cis8dGQ+PHNwYW4gaWQ9ImRldmVsb3Blci0xIj4tODwvc3Bhbj48L3RkPjwvdHI+Cis8dHIgY2xhc3M9ImIiPgorPHRkPjxhIG5hbWU9InNod2V0aGFncyI+PC9hPnNod2V0aGFnczwvdGQ+Cis8dGQ+U2h3ZXRoYSBHUzwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOnNod2V0aGFnc0BhcGFjaGUub3JnIj5zaHdldGhhZ3NAYXBhY2hlLm9yZzwvYT48L3RkPgorPHRkPkhvcnRvbndvcmtzIEluYy48L3RkPgorPHRkPmNvbW1pdHRlciwgUFBNQzwvdGQ+Cis8dGQ+KzA1OjMwPC90ZD4KKzx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLTIiPiswNTozMDwvc3Bhbj48L3RkPjwvdHI+Cis8dHIgY2xhc3M9ImEiPgorPHRkPjxhIG5hbWU9ImptYXJvbiI+PC9hPmptYXJvbjwvdGQ+Cis8dGQ+Sm9uIE1hcm9uPC90ZD4KKzx0ZD48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJtYWlsdG86am1hcm9uQGhvcnRvbndvcmtzLmNvbSI+am1hcm9uQGhvcnRvbndvcmtzLmNvbTwvYT48L3RkPgorPHRkPkhvcnRvbndvcmtzIEluYy48L3RkPgorPHRkPmNvbW1pdHRlcjwvdGQ+Cis8dGQ+LTU8L3RkPgorPHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItMyI+LTU8L3NwYW4+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJiIj4KKzx0ZD48YSBuYW1lPSJBQWhuIj48L2E+QUFobjwvdGQ+Cis8dGQ+QW5kcmV3IEFobjwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOmFhaG5AaG9ydG9ud29ya3MuY29tIj5hYWhuQGhvcnRvbndvcmtzLmNvbTwvYT48L3RkPgorPHRkPkhvcnRvbndvcmtzIEluYy48L3RkPgorPHRkPmNvbW1pdHRlcjwvdGQ+Cis8dGQ+LTg8L3RkPgorPHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItNCI+LTg8L3NwYW4+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJhIj4KKzx0ZD48YSBuYW1lPSJka2FzcGFyIj48L2E+ZGthc3BhcjwvdGQ+Cis8dGQ+RGF2aWQgS2FzcGFyPC90ZD4KKzx0ZD48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJtYWlsdG86ZGthc3BhckBtZXJrLmNvbSI+ZGthc3BhckBtZXJrLmNvbTwvYT48L3RkPgorPHRkPk1lcmNrICZhbXA7IENvIEluYy48L3RkPgorPHRkPmNvbW1pdHRlcjwvdGQ+Cis8dGQ+KzE8L3RkPgorPHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItNSI+KzE8L3NwYW4+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJiIj4KKzx0ZD48YSBuYW1lPSJpbGFzZWsiPjwvYT5pbGFzZWs8L3RkPgorPHRkPkl2byBMYXNlazwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOmlsYXNla0BtZXJjay5jb20iPmlsYXNla0BtZXJjay5jb208L2E+PC90ZD4KKzx0ZD5NZXJjayAmYW1wOyBDbyBJbmMuPC90ZD4KKzx0ZD5jb21taXR0ZXI8L3RkPgorPHRkPisxPC90ZD4KKzx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLTYiPisxPC9zcGFuPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0iYSI+Cis8dGQ+PGEgbmFtZT0iZGZ1c2FybyI+PC9hPmRmdXNhcm88L3RkPgorPHRkPkRlbm5pcyBGdXNhcm88L3RkPgorPHRkPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Im1haWx0bzpkZnVzYXJvQGFldG5hLmNvbSI+ZGZ1c2Fyb0BhZXRuYS5jb208L2E+PC90ZD4KKzx0ZD5BZXRuYSBJbmMuPC90ZD4KKzx0ZD5jb21taXR0ZXI8L3RkPgorPHRkPi01PC90ZD4KKzx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLTciPi01PC9zcGFuPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0iYiI+Cis8dGQ+PGEgbmFtZT0iY2h5emVyIj48L2E+Y2h5emVyPC90ZD4KKzx0ZD5DaHJpcyBIeXplcjwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOmNoeXplckBhZXRuYS5jb20iPmNoeXplckBhZXRuYS5jb208L2E+PC90ZD4KKzx0ZD5BZXRuYSBJbmMuPC90ZD4KKzx0ZD5jb21taXR0ZXI8L3RkPgorPHRkPi01PC90ZD4KKzx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLTgiPi01PC9zcGFuPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0iYSI+Cis8dGQ+PGEgbmFtZT0iZG1hcmt3YXQiPjwvYT5kbWFya3dhdDwvdGQ+Cis8dGQ+RGFuaWVsIE1hcmt3YXQ8L3RkPgorPHRkPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Im1haWx0bzpkbWFya3dhdEBhZXRuYS5jb20iPmRtYXJrd2F0QGFldG5hLmNvbTwvYT48L3RkPgorPHRkPkFldG5hIEluYy48L3RkPgorPHRkPmNvbW1pdHRlcjwvdGQ+Cis8dGQ+LTU8L3RkPgorPHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItOSI+LTU8L3NwYW4+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJiIj4KKzx0ZD48YSBuYW1lPSJnc2VuaWEiPjwvYT5nc2VuaWE8L3RkPgorPHRkPkdyZWcgU2VuaWE8L3RkPgorPHRkPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Im1haWx0bzpnc2VuaWFAYWV0bmEuY29tIj5nc2VuaWFAYWV0bmEuY29tPC9hPjwvdGQ+Cis8dGQ+QWV0bmEgSW5jLjwvdGQ+Cis8dGQ+Y29tbWl0dGVyPC90ZD4KKzx0ZD4tNTwvdGQ+Cis8dGQ+PHNwYW4gaWQ9ImRldmVsb3Blci0xMCI+LTU8L3NwYW4+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJhIj4KKzx0ZD48YSBuYW1lPSJqYW1lcyI+PC9hPmphbWVzPC90ZD4KKzx0ZD5KYW1lcyBWb2xsbWVyPC90ZD4KKzx0ZD48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJtYWlsdG86amFtZXNAdGFyZ2V0LmNvbSI+amFtZXNAdGFyZ2V0LmNvbTwvYT48L3RkPgorPHRkPlRhcmdldCBJbmMuPC90ZD4KKzx0ZD5jb21taXR0ZXI8L3RkPgorPHRkPi02PC90ZD4KKzx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLTExIj4tNjwvc3Bhbj48L3RkPjwvdHI+Cis8dHIgY2xhc3M9ImIiPgorPHRkPjxhIG5hbWU9ImFkb3NzZXR0Ij48L2E+YWRvc3NldHQ8L3RkPgorPHRkPkFhcm9uIERvc3NldHQ8L3RkPgorPHRkPjxhIGNsYXNzPSJleHRlcm5hbExpbmsiIGhyZWY9Im1haWx0bzphZG9zc2V0dEB0YXJnZXQuY29tIj5hZG9zc2V0dEB0YXJnZXQuY29tPC9hPjwvdGQ+Cis8dGQ+VGFyZ2V0IEluYy48L3RkPgorPHRkPmNvbW1pdHRlcjwvdGQ+Cis8dGQ+LTY8L3RkPgorPHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItMTIiPi02PC9zcGFuPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0iYSI+Cis8dGQ+PGEgbmFtZT0ibXNjaHVzc2xlciI+PC9hPm1zY2h1c3NsZXI8L3RkPgorPHRkPk1pdGNoIFNjaHVzc2xlcjwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOm1zY2h1c3NsZXJAYXBhY2hlLm9yZyI+bXNjaHVzc2xlckBhcGFjaGUub3JnPC9hPjwvdGQ+Cis8dGQ+SlBNQzwvdGQ+Cis8dGQ+Y29tbWl0dGVyPC90ZD4KKzx0ZD4tNTwvdGQ+Cis8dGQ+PHNwYW4gaWQ9ImRldmVsb3Blci0xMyI+LTU8L3NwYW4+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJiIj4KKzx0ZD48YSBuYW1lPSJ2YXZhc2FyYWxhIj48L2E+dmF2YXNhcmFsYTwvdGQ+Cis8dGQ+Vmlzd2FuYXRoIEF2YXNhcmFsYTwvdGQ+Cis8dGQ+PGEgY2xhc3M9ImV4dGVybmFsTGluayIgaHJlZj0ibWFpbHRvOnZhdmFzYXJhbGFAc2xiLmNvbSI+dmF2YXNhcmFsYUBzbGIuY29tPC9hPjwvdGQ+Cis8dGQ+U2NobHVtYmVyZ2VyIEluYy48L3RkPgorPHRkPmNvbW1pdHRlcjwvdGQ+Cis8dGQ+LTY8L3RkPgorPHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItMTQiPi02PC9zcGFuPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0iYSI+Cis8dGQ+PGEgbmFtZT0iYXZhcm1hIj48L2E+YXZhcm1hPC90ZD4KKzx0ZD5BbmlsIFZhcm1hPC90ZD4KKzx0ZD48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJtYWlsdG86YXZhcm1hQHNsYi5jb20iPmF2YXJtYUBzbGIuY29tPC9hPjwvdGQ+Cis8dGQ+U2NobHVtYmVyZ2VyIEluYy48L3RkPgorPHRkPmNvbW1pdHRlcjwvdGQ+Cis8dGQ+LTY8L3RkPgorPHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItMTUiPi02PC9zcGFuPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0iYiI+Cis8dGQ+PGEgbmFtZT0iYnN0b3J0eiI+PC9hPmJzdG9ydHo8L3RkPgorPHRkPkJhcmJhcmEgU3RvcnR6PC90ZD4KKzx0ZD5ic3RvcnR6QHNhcDwvdGQ+Cis8dGQ+U0FQIEluYy48L3RkPgorPHRkPmNvbW1pdHRlcjwvdGQ+Cis8dGQ+LTg8L3RkPgorPHRkPjxzcGFuIGlkPSJkZXZlbG9wZXItMTYiPi04PC9zcGFuPjwvdGQ+PC90cj4KKzx0ciBjbGFzcz0iYSI+Cis8dGQ+PGEgbmFtZT0ic3Jpa3N1biI+PC9hPnNyaWtzdW48L3RkPgorPHRkPlNyaWthbnRoIFN1bmRhcnJhamFuPC90ZD4KKzx0ZD48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJtYWlsdG86c3Jpa3N1bkBhcGFjaGUub3JnIj5zcmlrc3VuQGFwYWNoZS5vcmc8L2E+PC90ZD4KKzx0ZD5Jbk1vYmk8L3RkPgorPHRkPmNvbW1pdHRlciwgUFBNQzwvdGQ+Cis8dGQ+KzA1OjMwPC90ZD4KKzx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLTE3Ij4rMDU6MzA8L3NwYW4+PC90ZD48L3RyPgorPHRyIGNsYXNzPSJiIj4KKzx0ZD48YSBuYW1lPSJzc3VyZXNoIj48L2E+c3N1cmVzaDwvdGQ+Cis8dGQ+U3VyZXNoIFNyaW5pdmFzPC90ZD4KKzx0ZD48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJtYWlsdG86c3N1cmVzaEBhcGFjaGUub3JnIj5zc3VyZXNoQGFwYWNoZS5vcmc8L2E+PC90ZD4KKzx0ZD5Ib3J0b253b3JrcyBJbmMuPC90ZD4KKzx0ZD5jb21taXR0ZXI8L3RkPgorPHRkPi04PC90ZD4KKzx0ZD48c3BhbiBpZD0iZGV2ZWxvcGVyLTE4Ij4tODwvc3Bhbj48L3RkPjwvdHI+Cis8dHIgY2xhc3M9ImEiPgorPHRkPjxhIG5hbWU9InZyYW5nYW5hdGhhbiI+PC9hPnZyYW5nYW5hdGhhbjwvdGQ+Cis8dGQ+VmVua2F0IFJhbmdhbmF0aGFuPC90ZD4KKzx0ZD48YSBjbGFzcz0iZXh0ZXJuYWxMaW5rIiBocmVmPSJtYWlsdG86dnJhbmdhbmF0aGFuQGFwYWNoZS5vcmciPnZyYW5nYW5hdGhhbkBhcGFjaGUub3JnPC9hPjwvdGQ+Cis8dGQ+SG9ydG9ud29ya3MgSW5jLjwvdGQ+Cis8dGQ+Y29tbWl0dGVyPC90ZD4KKzx0ZD4tODwvdGQ+Cis8dGQ+PHNwYW4gaWQ9ImRldmVsb3Blci0xOSI+LTg8L3NwYW4+PC90ZD48L3RyPjwvdGFibGU+PC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KKzxoMz5Db250cmlidXRvcnM8YSBuYW1lPSJDb250cmlidXRvcnMiPjwvYT48L2gzPjxhIG5hbWU9IkNvbnRyaWJ1dG9ycyI+PC9hPgorPHA+VGhlcmUgYXJlIG5vIGNvbnRyaWJ1dG9ycyBsaXN0ZWQgZm9yIHRoaXMgcHJvamVjdC4gUGxlYXNlIGNoZWNrIGJhY2sgYWdhaW4gbGF0ZXIuPC9wPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Z1bmN0aW9uIG9mZnNldERhdGUoaWQsIG9mZnNldCkgeworICAgIHZhciBub3cgPSBuZXcgRGF0ZSgpOworICAgIHZhciBub3dUaW1lID0gbm93LmdldFRpbWUoKTsKKyAgICB2YXIgbG9jYWxPZmZzZXQgPSBub3cuZ2V0VGltZXpvbmVPZmZzZXQoKTsKKyAgICB2YXIgZGV2ZWxvcGVyVGltZSA9IG5vd1RpbWUgKyAoIG9mZnNldCAqIDYwICogNjAgKiAxMDAwICkrICggbG9jYWxPZmZzZXQgKiA2MCAqIDEwMDAgKTsKKyAgICB2YXIgZGV2ZWxvcGVyRGF0ZSA9IG5ldyBEYXRlKGRldmVsb3BlclRpbWUpOworCisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmlubmVySFRNTCA9IGRldmVsb3BlckRhdGU7Cit9CisKK2Z1bmN0aW9uIGluaXQoKXsKKyAgICBvZmZzZXREYXRlKCdkZXZlbG9wZXItMCcsICctOCcpOworICAgIG9mZnNldERhdGUoJ2RldmVsb3Blci0xJywgJy04Jyk7CisgICAgb2Zmc2V0RGF0ZSgnZGV2ZWxvcGVyLTInLCAnMCcpOworICAgIG9mZnNldERhdGUoJ2RldmVsb3Blci0zJywgJy01Jyk7CisgICAgb2Zmc2V0RGF0ZSgnZGV2ZWxvcGVyLTQnLCAnLTgnKTsKKyAgICBvZmZzZXREYXRlKCdkZXZlbG9wZXItNScsICcrMScpOworICAgIG9mZnNldERhdGUoJ2RldmVsb3Blci02JywgJysxJyk7CisgICAgb2Zmc2V0RGF0ZSgnZGV2ZWxvcGVyLTcnLCAnLTUnKTsKKyAgICBvZmZzZXREYXRlKCdkZXZlbG9wZXItOCcsICctNScpOworICAgIG9mZnNldERhdGUoJ2RldmVsb3Blci05JywgJy01Jyk7CisgICAgb2Zmc2V0RGF0ZSgnZGV2ZWxvcGVyLTEwJywgJy01Jyk7CisgICAgb2Zmc2V0RGF0ZSgnZGV2ZWxvcGVyLTExJywgJy02Jyk7CisgICAgb2Zmc2V0RGF0ZSgnZGV2ZWxvcGVyLTEyJywgJy02Jyk7CisgICAgb2Zmc2V0RGF0ZSgnZGV2ZWxvcGVyLTEzJywgJy01Jyk7CisgICAgb2Zmc2V0RGF0ZSgnZGV2ZWxvcGVyLTE0JywgJy02Jyk7CisgICAgb2Zmc2V0RGF0ZSgnZGV2ZWxvcGVyLTE1JywgJy02Jyk7CisgICAgb2Zmc2V0RGF0ZSgnZGV2ZWxvcGVyLTE2JywgJy04Jyk7CisgICAgb2Zmc2V0RGF0ZSgnZGV2ZWxvcGVyLTE3JywgJzAnKTsKKyAgICBvZmZzZXREYXRlKCdkZXZlbG9wZXItMTgnLCAnLTgnKTsKKyAgICBvZmZzZXREYXRlKCdkZXZlbG9wZXItMTknLCAnLTgnKTsKK30KKword2luZG93Lm9uTG9hZCA9IGluaXQoKTsKKzwvc2NyaXB0PjwvZGl2PjwvZGl2PgorICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgPC9kaXY+CisKKyAgICA8aHIvPgorCisgICAgPGZvb3Rlcj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CisgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyBzcGFuMTIiPkNvcHlyaWdodCAmY29weTsgICAgICAgICAgICAgICAgICAgIDIwMTUKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZyI+QXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb248L2E+LgorICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gICAgICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8cCBpZD0icG93ZXJlZEJ5IiBjbGFzcz0icHVsbC1yaWdodCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnLyIgdGl0bGU9IkJ1aWx0IGJ5IE1hdmVuIiBjbGFzcz0icG93ZXJlZEJ5Ij4KKyAgICAgICAgPGltZyBjbGFzcz0iYnVpbHRCeSIgYWx0PSJCdWlsdCBieSBNYXZlbiIgc3JjPSIuL2ltYWdlcy9sb2dvcy9tYXZlbi1mZWF0aGVyLnBuZyIgLz4KKyAgICAgIDwvYT4KKyAgICAgICAgICAgICAgPC9wPgorICAgICAgICAKKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICA8L2Zvb3Rlcj4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvdHlwZXMtaW5zdGFuY2UucG5nIGIvdHlwZXMtaW5zdGFuY2UucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhZmNhMjEKLS0tIC9kZXYvbnVsbAorKysgYi90eXBlcy1pbnN0YW5jZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgo=