PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5tb2Rfc3RhdHVzIC0gQXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi40PC90aXRsZT4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJNYWluIHN0eWxlc2hlZXQiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtbG9vc2UtMTAwcGMuY3NzIiByZWw9ImFsdGVybmF0ZSBzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik5vIFNpZGViYXIgLSBEZWZhdWx0IGZvbnQgc2l6ZSIgLz4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC1wcmludC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InByaW50IiB0eXBlPSJ0ZXh0L2NzcyIgLz48bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9zdHlsZS9jc3MvcHJldHRpZnkuY3NzIiAvPgo8c2NyaXB0IHNyYz0iLi4vc3R5bGUvc2NyaXB0cy9wcmV0dGlmeS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cjwvc2NyaXB0PgoKPGxpbmsgaHJlZj0iLi4vaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+PC9oZWFkPgo8Ym9keT4KPGRpdiBpZD0icGFnZS1oZWFkZXIiPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD4KPHAgY2xhc3M9ImFwYWNoZSI+QXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi40PC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9mZWF0aGVyLnBuZyIgLz48L2Rpdj4KPGRpdiBjbGFzcz0idXAiPjxhIGhyZWY9Ii4vIj48aW1nIHRpdGxlPSImbHQ7LSIgYWx0PSImbHQ7LSIgc3JjPSIuLi9pbWFnZXMvbGVmdC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYXRoIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyI+QXBhY2hlPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnLyI+SFRUUCBTZXJ2ZXI8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8iPkRvY3VtZW50YXRpb248L2E+ICZndDsgPGEgaHJlZj0iLi4vIj5WZXJzaW9uIDIuNDwvYT4gJmd0OyA8YSBocmVmPSIuLyI+TW9kdWxlczwvYT48L2Rpdj4KPGRpdiBpZD0icGFnZS1jb250ZW50Ij4KPGRpdiBpZD0icHJlYW1ibGUiPjxoMT5BcGFjaGUgTW9kdWxlIG1vZF9zdGF0dXM8L2gxPgo8ZGl2IGNsYXNzPSJ0b3BsYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL21vZC9tb2Rfc3RhdHVzLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9mci9tb2QvbW9kX3N0YXR1cy5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2phL21vZC9tb2Rfc3RhdHVzLmh0bWwiIGhyZWZsYW5nPSJqYSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJKYXBhbmVzZSI+Jm5ic3A7amEmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4va28vbW9kL21vZF9zdGF0dXMuaHRtbCIgaHJlZmxhbmc9ImtvIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IktvcmVhbiI+Jm5ic3A7a28mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vdHIvbW9kL21vZF9zdGF0dXMuaHRtbCIgaHJlZmxhbmc9InRyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlT8cmvnZSI+Jm5ic3A7dHImbmJzcDs8L2E+PC9wPgo8L2Rpdj4KPHRhYmxlIGNsYXNzPSJtb2R1bGUiPjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIHNlcnZlciBhY3Rpdml0eSBhbmQKcGVyZm9ybWFuY2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+QmFzZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI01vZHVsZUlkZW50aWZpZXIiPk1vZHVsZaBJZGVudGlmaWVyOjwvYT48L3RoPjx0ZD5zdGF0dXNfbW9kdWxlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjU291cmNlRmlsZSI+U291cmNloEZpbGU6PC9hPjwvdGg+PHRkPm1vZF9zdGF0dXMuYzwvdGQ+PC90cj48L3RhYmxlPgo8aDM+U3VtbWFyeTwvaDM+CgogICAgPHA+VGhlIFN0YXR1cyBtb2R1bGUgYWxsb3dzIGEgc2VydmVyIGFkbWluaXN0cmF0b3IgdG8gZmluZCBvdXQKICAgIGhvdyB3ZWxsIHRoZWlyIHNlcnZlciBpcyBwZXJmb3JtaW5nLiBBIEhUTUwgcGFnZSBpcyBwcmVzZW50ZWQKICAgIHRoYXQgZ2l2ZXMgdGhlIGN1cnJlbnQgc2VydmVyIHN0YXRpc3RpY3MgaW4gYW4gZWFzaWx5IHJlYWRhYmxlCiAgICBmb3JtLiBJZiByZXF1aXJlZCB0aGlzIHBhZ2UgY2FuIGJlIG1hZGUgdG8gYXV0b21hdGljYWxseQogICAgcmVmcmVzaCAoZ2l2ZW4gYSBjb21wYXRpYmxlIGJyb3dzZXIpLiBBbm90aGVyIHBhZ2UgZ2l2ZXMgYQogICAgc2ltcGxlIG1hY2hpbmUtcmVhZGFibGUgbGlzdCBvZiB0aGUgY3VycmVudCBzZXJ2ZXIgc3RhdGUuPC9wPgoKICAgIDxwPlRoZSBkZXRhaWxzIGdpdmVuIGFyZTo8L3A+CgogICAgPHVsPgogICAgICA8bGk+VGhlIG51bWJlciBvZiB3b3JrZXIgc2VydmluZyByZXF1ZXN0czwvbGk+CgogICAgICA8bGk+VGhlIG51bWJlciBvZiBpZGxlIHdvcmtlcjwvbGk+CgogICAgICA8bGk+VGhlIHN0YXR1cyBvZiBlYWNoIHdvcmtlciwgdGhlIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0CiAgICAgIHdvcmtlciBoYXMgcGVyZm9ybWVkIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHNlcnZlZCBieQogICAgICB0aGUgd29ya2VyICgqKTwvbGk+CgogICAgICA8bGk+QSB0b3RhbCBudW1iZXIgb2YgYWNjZXNzZXMgYW5kIGJ5dGUgY291bnQgc2VydmVkICgqKTwvbGk+CgogICAgICA8bGk+VGhlIHRpbWUgdGhlIHNlcnZlciB3YXMgc3RhcnRlZC9yZXN0YXJ0ZWQgYW5kIHRoZSB0aW1lIGl0CiAgICAgIGhhcyBiZWVuIHJ1bm5pbmcgZm9yPC9saT4KCiAgICAgIDxsaT5BdmVyYWdlcyBnaXZpbmcgdGhlIG51bWJlciBvZiByZXF1ZXN0cyBwZXIgc2Vjb25kLCB0aGUKICAgICAgbnVtYmVyIG9mIGJ5dGVzIHNlcnZlZCBwZXIgc2Vjb25kIGFuZCB0aGUgYXZlcmFnZSBudW1iZXIgb2YKICAgICAgYnl0ZXMgcGVyIHJlcXVlc3QgKCopPC9saT4KCiAgICAgIDxsaT5UaGUgY3VycmVudCBwZXJjZW50YWdlIENQVSB1c2VkIGJ5IGVhY2ggd29ya2VyIGFuZCBpbgogICAgICB0b3RhbCBieSBhbGwgd29ya2VycyBjb21iaW5lZCAoKik8L2xpPgoKICAgICAgPGxpPlRoZSBjdXJyZW50IGhvc3RzIGFuZCByZXF1ZXN0cyBiZWluZyBwcm9jZXNzZWQgKCopPC9saT4KICAgIDwvdWw+CgogICAgPHA+VGhlIGxpbmVzIG1hcmtlZCAiKCopIiBhcmUgb25seSBhdmFpbGFibGUgaWYKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjZXh0ZW5kZWRzdGF0dXMiPkV4dGVuZGVkU3RhdHVzPC9hPjwvY29kZT4KICAgIGlzIDxjb2RlPk9uPC9jb2RlPi4gIEluIHZlcnNpb24gMi4zLjYsIGxvYWRpbmcgbW9kX3N0YXR1cyB3aWxsCiAgICB0b2dnbGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNleHRlbmRlZHN0YXR1cyI+RXh0ZW5kZWRTdGF0dXM8L2E+PC9jb2RlPiBPbgogICAgYnkgZGVmYXVsdC48L3A+CjwvZGl2Pgo8ZGl2IGlkPSJxdWlja3ZpZXciPjxoMz5Ub3BpY3M8L2gzPgo8dWwgaWQ9InRvcGljcyI+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2VuYWJsZSI+RW5hYmxpbmcgU3RhdHVzIFN1cHBvcnQ8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjYXV0b3VwZGF0ZSI+QXV0b21hdGljIFVwZGF0ZXM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbWFjaGluZXJlYWRhYmxlIj5NYWNoaW5lIFJlYWRhYmxlIFN0YXR1cyBGaWxlPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3Ryb3VibGVzaG9vdCI+VXNpbmcgc2VydmVyLXN0YXR1cyB0byB0cm91Ymxlc2hvb3Q8L2E+PC9saT4KPC91bD48aDMgY2xhc3M9ImRpcmVjdGl2ZXMiPkRpcmVjdGl2ZXM8L2gzPgo8cD5UaGlzIG1vZHVsZSBwcm92aWRlcyBubwogICAgICAgICAgICBkaXJlY3RpdmVzLjwvcD4KPGgzPkJ1Z2ZpeCBjaGVja2xpc3Q8L2gzPjx1bCBjbGFzcz0ic2VlYWxzbyI+PGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZGlzdC9odHRwZC9DSEFOR0VTXzIuNCI+aHR0cGQgY2hhbmdlbG9nPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vYnouYXBhY2hlLm9yZy9idWd6aWxsYS9idWdsaXN0LmNnaT9idWdfc3RhdHVzPV9fb3Blbl9fJmFtcDtsaXN0X2lkPTE0NDUzMiZhbXA7cHJvZHVjdD1BcGFjaGUlMjBodHRwZC0yJmFtcDtxdWVyeV9mb3JtYXQ9c3BlY2lmaWMmYW1wO29yZGVyPWNoYW5nZWRkYXRlJTIwREVTQyUyQ3ByaW9yaXR5JTJDYnVnX3NldmVyaXR5JmFtcDtjb21wb25lbnQ9bW9kX3N0YXR1cyI+S25vd24gaXNzdWVzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vYnouYXBhY2hlLm9yZy9idWd6aWxsYS9lbnRlcl9idWcuY2dpP3Byb2R1Y3Q9QXBhY2hlJTIwaHR0cGQtMiZhbXA7Y29tcG9uZW50PW1vZF9zdGF0dXMiPlJlcG9ydCBhIGJ1ZzwvYT48L2xpPjwvdWw+PGgzPlNlZSBhbHNvPC9oMz4KPHVsIGNsYXNzPSJzZWVhbHNvIj4KPGxpPjxhIGhyZWY9IiNjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2xpPjwvdWw+PC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImVuYWJsZSIgaWQ9ImVuYWJsZSI+RW5hYmxpbmcgU3RhdHVzIFN1cHBvcnQ8L2E+PC9oMj4KICAgIAoKICAgIDxwPlRvIGVuYWJsZSBzdGF0dXMgcmVwb3J0cyBvbmx5IGZvciBicm93c2VycyBmcm9tIHRoZSBleGFtcGxlLmNvbQogICAgZG9tYWluIGFkZCB0aGlzIGNvZGUgdG8geW91ciA8Y29kZT5odHRwZC5jb25mPC9jb2RlPgogICAgY29uZmlndXJhdGlvbiBmaWxlPC9wPgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+Jmx0O0xvY2F0aW9uICIvc2VydmVyLXN0YXR1cyImZ3Q7CiAgICBTZXRIYW5kbGVyIHNlcnZlci1zdGF0dXMKICAgIFJlcXVpcmUgaG9zdCBleGFtcGxlLmNvbQombHQ7L0xvY2F0aW9uJmd0OzwvcHJlPgoKCiAgICA8cD5Zb3UgY2FuIG5vdyBhY2Nlc3Mgc2VydmVyIHN0YXRpc3RpY3MgYnkgdXNpbmcgYSBXZWIgYnJvd3NlcgogICAgdG8gYWNjZXNzIHRoZSBwYWdlCiAgICA8Y29kZT5odHRwOi8veW91ci5zZXJ2ZXIubmFtZS9zZXJ2ZXItc3RhdHVzPC9jb2RlPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iYXV0b3VwZGF0ZSIgaWQ9ImF1dG91cGRhdGUiPkF1dG9tYXRpYyBVcGRhdGVzPC9hPjwvaDI+CgogICAgCiAgICA8cD5Zb3UgY2FuIGdldCB0aGUgc3RhdHVzIHBhZ2UgdG8gdXBkYXRlIGl0c2VsZiBhdXRvbWF0aWNhbGx5IGlmCiAgICB5b3UgaGF2ZSBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyAicmVmcmVzaCIuIEFjY2VzcyB0aGUgcGFnZQogICAgPGNvZGU+aHR0cDovL3lvdXIuc2VydmVyLm5hbWUvc2VydmVyLXN0YXR1cz9yZWZyZXNoPU48L2NvZGU+IHRvCiAgICByZWZyZXNoIHRoZSBwYWdlIGV2ZXJ5IE4gc2Vjb25kcy48L3A+Cgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJtYWNoaW5lcmVhZGFibGUiIGlkPSJtYWNoaW5lcmVhZGFibGUiPk1hY2hpbmUgUmVhZGFibGUgU3RhdHVzIEZpbGU8L2E+PC9oMj4KCiAgICAKICAgIDxwPkEgbWFjaGluZS1yZWFkYWJsZSB2ZXJzaW9uIG9mIHRoZSBzdGF0dXMgZmlsZSBpcyBhdmFpbGFibGUgYnkKICAgIGFjY2Vzc2luZyB0aGUgcGFnZQogICAgPGNvZGU+aHR0cDovL3lvdXIuc2VydmVyLm5hbWUvc2VydmVyLXN0YXR1cz9hdXRvPC9jb2RlPi4gVGhpcwogICAgaXMgdXNlZnVsIHdoZW4gYXV0b21hdGljYWxseSBydW4sIHNlZSB0aGUgUGVybCBwcm9ncmFtCiAgICA8Y29kZT5sb2dfc2VydmVyX3N0YXR1czwvY29kZT4sIHdoaWNoIHlvdSB3aWxsIGZpbmQgaW4gdGhlCiAgICA8Y29kZT4vc3VwcG9ydDwvY29kZT4gZGlyZWN0b3J5IG9mIHlvdXIgQXBhY2hlIEhUVFAgU2VydmVyIGluc3RhbGxhdGlvbi48L3A+CgogICAgPGRpdiBjbGFzcz0ibm90ZSI+CiAgICAgIDxzdHJvbmc+SXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgaWYgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9zdGF0dXMuaHRtbCI+bW9kX3N0YXR1czwvYT48L2NvZGU+IGlzCiAgICAgIGxvYWRlZCBpbnRvIHRoZSBzZXJ2ZXIsIGl0cyBoYW5kbGVyIGNhcGFiaWxpdHkgaXMgYXZhaWxhYmxlCiAgICAgIGluIDxlbT5hbGw8L2VtPiBjb25maWd1cmF0aW9uIGZpbGVzLCBpbmNsdWRpbmcKICAgICAgPGVtPnBlcjwvZW0+LWRpcmVjdG9yeSBmaWxlcyAoPGVtPmUuZy48L2VtPiwKICAgICAgPGNvZGU+Lmh0YWNjZXNzPC9jb2RlPikuIFRoaXMgbWF5IGhhdmUgc2VjdXJpdHktcmVsYXRlZAogICAgICByYW1pZmljYXRpb25zIGZvciB5b3VyIHNpdGUuPC9zdHJvbmc+CiAgICA8L2Rpdj4KCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InRyb3VibGVzaG9vdCIgaWQ9InRyb3VibGVzaG9vdCI+VXNpbmcgc2VydmVyLXN0YXR1cyB0byB0cm91Ymxlc2hvb3Q8L2E+PC9oMj4KICAgIAoKICAgIDxwPlRoZSA8Y29kZT5zZXJ2ZXItc3RhdHVzPC9jb2RlPiBwYWdlIG1heSBiZSB1c2VkIGFzIGEgc3RhcnRpbmcKICAgIHBsYWNlIGZvciB0cm91Ymxlc2hvb3RpbmcgYSBzaXR1YXRpb24gd2hlcmUgeW91ciBzZXJ2ZXIgaXMgY29uc3VtaW5nCiAgICBhbGwgYXZhaWxhYmxlIHJlc291cmNlcyAoQ1BVIG9yIG1lbW9yeSksIGFuZCB5b3Ugd2lzaCB0byBpZGVudGlmeQogICAgd2hpY2ggcmVxdWVzdHMgb3IgY2xpZW50cyBhcmUgY2F1c2luZyB0aGUgcHJvYmxlbS48L3A+CgogICAgPHA+Rmlyc3QsIGVuc3VyZSB0aGF0IHlvdSBoYXZlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjZXh0ZW5kZWRzdGF0dXMiPkV4dGVuZGVkU3RhdHVzPC9hPjwvY29kZT4gc2V0IG9uLCBzbyB0aGF0IHlvdSBjYW4gc2VlCiAgICB0aGUgZnVsbCByZXF1ZXN0IGFuZCBjbGllbnQgaW5mb3JtYXRpb24gZm9yIGVhY2ggY2hpbGQgb3IKICAgIHRocmVhZC48L3A+CgogICAgPHA+Tm93IGxvb2sgaW4geW91ciBwcm9jZXNzIGxpc3QgKHVzaW5nIDxjb2RlPnRvcDwvY29kZT4sIG9yIHNpbWlsYXIKICAgIHByb2Nlc3Mgdmlld2luZyB1dGlsaXR5KSB0byBpZGVudGlmeSB0aGUgc3BlY2lmaWMgcHJvY2Vzc2VzIHRoYXQgYXJlCiAgICB0aGUgbWFpbiBjdWxwcml0cy4gT3JkZXIgdGhlIG91dHB1dCBvZiA8Y29kZT50b3A8L2NvZGU+IGJ5IENQVQogICAgdXNhZ2UsIG9yIG1lbW9yeSB1c2FnZSwgZGVwZW5kaW5nIG9uIHdoYXQgcHJvYmxlbSB5b3UncmUgdHJ5aW5nIHRvCiAgICBhZGRyZXNzLjwvcD4KCiAgICA8cD5SZWxvYWQgdGhlIDxjb2RlPnNlcnZlci1zdGF0dXM8L2NvZGU+IHBhZ2UsIGFuZCBsb29rIGZvciB0aG9zZSBwcm9jZXNzCiAgICBpZHMsIGFuZCB5b3UnbGwgYmUgYWJsZSB0byBzZWUgd2hhdCByZXF1ZXN0IGlzIGJlaW5nIHNlcnZlZCBieSB0aGF0CiAgICBwcm9jZXNzLCBmb3Igd2hhdCBjbGllbnQuIFJlcXVlc3RzIGFyZSB0cmFuc2llbnQsIHNvIHlvdSBtYXkgbmVlZCB0bwogICAgdHJ5IHNldmVyYWwgdGltZXMgYmVmb3JlIHlvdSBjYXRjaCBpdCBpbiB0aGUgYWN0LCBzbyB0byBzcGVhay48L3A+CgogICAgPHA+VGhpcyBwcm9jZXNzIDxlbT5zaG91bGQ8L2VtPiBnaXZlIHlvdSBzb21lIGlkZWEgd2hhdCBjbGllbnQsIG9yCiAgICB3aGF0IHR5cGUgb2YgcmVxdWVzdHMsIGFyZSBwcmltYXJpbHkgcmVzcG9uc2libGUgZm9yIHlvdXIgbG9hZAogICAgcHJvYmxlbXMuIE9mdGVuIHlvdSB3aWxsIGlkZW50aWZ5IGEgcGFydGljdWxhciB3ZWIgYXBwbGljYXRpb24gdGhhdAogICAgaXMgbWlzYmVoYXZpbmcsIG9yIGEgcGFydGljdWxhciBjbGllbnQgdGhhdCBpcyBhdHRhY2tpbmcgeW91cgogICAgc2l0ZS48L3A+Cgo8L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9ImJvdHRvbWxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vbW9kL21vZF9zdGF0dXMuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2ZyL21vZC9tb2Rfc3RhdHVzLmh0bWwiIGhyZWZsYW5nPSJmciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGcmFu52FpcyI+Jm5ic3A7ZnImbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vamEvbW9kL21vZF9zdGF0dXMuaHRtbCIgaHJlZmxhbmc9ImphIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkphcGFuZXNlIj4mbmJzcDtqYSZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9rby9tb2QvbW9kX3N0YXR1cy5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi90ci9tb2QvbW9kX3N0YXR1cy5odG1sIiBocmVmbGFuZz0idHIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iVPxya+dlIj4mbmJzcDt0ciZuYnNwOzwvYT48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgYWx0PSJ0b3AiIC8+PC9hPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iPjxoMj48YSBpZD0iY29tbWVudHNfc2VjdGlvbiIgbmFtZT0iY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9oMj48ZGl2IGNsYXNzPSJ3YXJuaW5nIj48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz48YnIgLz5UaGlzIGlzIG5vdCBhIFEmYW1wO0Egc2VjdGlvbi4gQ29tbWVudHMgcGxhY2VkIGhlcmUgc2hvdWxkIGJlIHBvaW50ZWQgdG93YXJkcyBzdWdnZXN0aW9ucyBvbiBpbXByb3ZpbmcgdGhlIGRvY3VtZW50YXRpb24gb3Igc2VydmVyLCBhbmQgbWF5IGJlIHJlbW92ZWQgYWdhaW4gYnkgb3VyIG1vZGVyYXRvcnMgaWYgdGhleSBhcmUgZWl0aGVyIGltcGxlbWVudGVkIG9yIGNvbnNpZGVyZWQgaW52YWxpZC9vZmYtdG9waWMuIFF1ZXN0aW9ucyBvbiBob3cgdG8gbWFuYWdlIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIgc2hvdWxkIGJlIGRpcmVjdGVkIGF0IGVpdGhlciBvdXIgSVJDIGNoYW5uZWwsICNodHRwZCwgb24gRnJlZW5vZGUsIG9yIHNlbnQgdG8gb3VyIDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2xpc3RzLmh0bWwiPm1haWxpbmcgbGlzdHM8L2E+LjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQp2YXIgY29tbWVudHNfc2hvcnRuYW1lID0gJ2h0dHBkJzsKdmFyIGNvbW1lbnRzX2lkZW50aWZpZXIgPSAnaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8yLjQvbW9kL21vZF9zdGF0dXMuaHRtbCc7CihmdW5jdGlvbih3LCBkKSB7CiAgICBpZiAody5sb2NhdGlvbi5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpID09ICJodHRwZC5hcGFjaGUub3JnIikgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+PFwvZGl2PicpOwogICAgICAgIHZhciBzID0gZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBzLnNyYyA9ICdodHRwczovL2NvbW1lbnRzLmFwYWNoZS5vcmcvc2hvd19jb21tZW50cy5sdWE/c2l0ZT0nICsgY29tbWVudHNfc2hvcnRuYW1lICsgJyZwYWdlPScgKyBjb21tZW50c19pZGVudGlmaWVyOwogICAgICAgIChkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0gfHwgZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdKS5hcHBlbmRDaGlsZChzKTsKICAgIH0KICAgIGVsc2UgeyAKICAgICAgICBkLndyaXRlKCc8ZGl2IGlkPSJjb21tZW50c190aHJlYWQiPkNvbW1lbnRzIGFyZSBkaXNhYmxlZCBmb3IgdGhpcyBwYWdlIGF0IHRoZSBtb21lbnQuPFwvZGl2PicpOwogICAgfQp9KSh3aW5kb3csIGRvY3VtZW50KTsKLy8tLT48IV1dPjwvc2NyaXB0PjwvZGl2PjxkaXYgaWQ9ImZvb3RlciI+CjxwIGNsYXNzPSJhcGFjaGUiPkNvcHlyaWdodCAyMDE2IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi48YnIgLz5MaWNlbnNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5BcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjA8L2E+LjwvcD4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+PC9kaXY+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KaWYgKHR5cGVvZihwcmV0dHlQcmludCkgIT09ICd1bmRlZmluZWQnKSB7CiAgICBwcmV0dHlQcmludCgpOwp9Ci8vLS0+PCFdXT48L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=