PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD48IS0tCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20geG1sIHNvdXJjZTogRE8gTk9UIEVESVQKICAgICAgICBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAogICAgICAtLT4KPHRpdGxlPm1vZF9pbmNsdWRlIC0gQXBhY2hlIEhUVFAgU2VydmVyPC90aXRsZT4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJNYWluIHN0eWxlc2hlZXQiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtbG9vc2UtMTAwcGMuY3NzIiByZWw9ImFsdGVybmF0ZSBzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik5vIFNpZGViYXIgLSBEZWZhdWx0IGZvbnQgc2l6ZSIgLz4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC1wcmludC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InByaW50IiB0eXBlPSJ0ZXh0L2NzcyIgLz4KPGxpbmsgaHJlZj0iLi4vaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+PC9oZWFkPgo8Ym9keT4KPGRpdiBpZD0icGFnZS1oZWFkZXIiPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Ii4uL2ZhcS8iPkZBUTwvYT4gfCA8YSBocmVmPSIuLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FyeTwvYT4gfCA8YSBocmVmPSIuLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPgo8cCBjbGFzcz0iYXBhY2hlIj5BcGFjaGUgSFRUUCBTZXJ2ZXIgVmVyc2lvbiAyLjM8L3A+CjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2ZlYXRoZXIuZ2lmIiAvPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ1cCI+PGEgaHJlZj0iLi8iPjxpbWcgdGl0bGU9IiZsdDstIiBhbHQ9IiZsdDstIiBzcmM9Ii4uL2ltYWdlcy9sZWZ0LmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgaWQ9InBhdGgiPgo8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvIj5BcGFjaGU8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvIj5IVFRQIFNlcnZlcjwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLXByb2plY3QvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4uLyI+VmVyc2lvbiAyLjM8L2E+ICZndDsgPGEgaHJlZj0iLi8iPk1vZHVsZXM8L2E+PC9kaXY+CjxkaXYgaWQ9InBhZ2UtY29udGVudCI+CjxkaXYgaWQ9InByZWFtYmxlIj48aDE+QXBhY2hlIE1vZHVsZSBtb2RfaW5jbHVkZTwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vbW9kL21vZF9pbmNsdWRlLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9qYS9tb2QvbW9kX2luY2x1ZGUuaHRtbCIgaHJlZmxhbmc9ImphIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkphcGFuZXNlIj4mbmJzcDtqYSZuYnNwOzwvYT48L3A+CjwvZGl2Pgo8dGFibGUgY2xhc3M9Im1vZHVsZSI+PHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+U2VydmVyLXBhcnNlZCBodG1sIGRvY3VtZW50cyAoU2VydmVyIFNpZGUgSW5jbHVkZXMpPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkJhc2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNNb2R1bGVJZGVudGlmaWVyIj5Nb2R1bGWgSWRlbnRpZmllcjo8L2E+PC90aD48dGQ+aW5jbHVkZV9tb2R1bGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNTb3VyY2VGaWxlIj5Tb3VyY2WgRmlsZTo8L2E+PC90aD48dGQ+bW9kX2luY2x1ZGUuYzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPkltcGxlbWVudGVkIGFzIGFuIG91dHB1dCBmaWx0ZXIgc2luY2UgQXBhY2hlCjIuMDwvdGQ+PC90cj48L3RhYmxlPgo8aDM+U3VtbWFyeTwvaDM+CgogICAgPHA+VGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBmaWx0ZXIgd2hpY2ggd2lsbCBwcm9jZXNzIGZpbGVzCiAgICBiZWZvcmUgdGhleSBhcmUgc2VudCB0byB0aGUgY2xpZW50LiBUaGUgcHJvY2Vzc2luZyBpcwogICAgY29udHJvbGxlZCBieSBzcGVjaWFsbHkgZm9ybWF0dGVkIFNHTUwgY29tbWVudHMsIHJlZmVycmVkIHRvIGFzCiAgICA8ZGZuPmVsZW1lbnRzPC9kZm4+LiBUaGVzZSBlbGVtZW50cyBhbGxvdyBjb25kaXRpb25hbCB0ZXh0LCB0aGUKICAgIGluY2x1c2lvbiBvZiBvdGhlciBmaWxlcyBvciBwcm9ncmFtcywgYXMgd2VsbCBhcyB0aGUgc2V0dGluZyBhbmQKICAgIHByaW50aW5nIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcy48L3A+CjwvZGl2Pgo8ZGl2IGlkPSJxdWlja3ZpZXciPjxoMyBjbGFzcz0iZGlyZWN0aXZlcyI+RGlyZWN0aXZlczwvaDM+Cjx1bCBpZD0idG9jIj4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjc3NpZW5kdGFnIj5TU0lFbmRUYWc8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjc3NpZXJyb3Jtc2ciPlNTSUVycm9yTXNnPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3NzaXN0YXJ0dGFnIj5TU0lTdGFydFRhZzwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzc2l0aW1lZm9ybWF0Ij5TU0lUaW1lRm9ybWF0PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3NzaXVuZGVmaW5lZGVjaG8iPlNTSVVuZGVmaW5lZEVjaG88L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjeGJpdGhhY2siPlhCaXRIYWNrPC9hPjwvbGk+CjwvdWw+CjxoMz5Ub3BpY3M8L2gzPgo8dWwgaWQ9InRvcGljcyI+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2VuYWJsaW5nIj5FbmFibGluZyBTZXJ2ZXItU2lkZSBJbmNsdWRlczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwYXRoaW5mbyI+UEFUSF9JTkZPIHdpdGggU2VydmVyIFNpZGUgSW5jbHVkZXM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZWxlbWVudHMiPkJhc2ljIEVsZW1lbnRzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2luY2x1ZGV2YXJzIj5JbmNsdWRlIFZhcmlhYmxlczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzdWJzdGl0dXRpb24iPlZhcmlhYmxlIFN1YnN0aXR1dGlvbjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNmbG93Y3RybCI+RmxvdyBDb250cm9sIEVsZW1lbnRzPC9hPjwvbGk+CjwvdWw+PGgzPlNlZSBhbHNvPC9oMz4KPHVsIGNsYXNzPSJzZWVhbHNvIj4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjb3B0aW9ucyI+T3B0aW9uczwvYT48L2NvZGU+PC9saT4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjYWNjZXB0cGF0aGluZm8iPkFjY2VwdFBhdGhJbmZvPC9hPjwvY29kZT48L2xpPgo8bGk+PGEgaHJlZj0iLi4vZmlsdGVyLmh0bWwiPkZpbHRlcnM8L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii4uL2hvd3RvL3NzaS5odG1sIj5TU0kgVHV0b3JpYWw8L2E+PC9saT4KPC91bD48L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iZW5hYmxpbmciIGlkPSJlbmFibGluZyI+RW5hYmxpbmcgU2VydmVyLVNpZGUgSW5jbHVkZXM8L2E+PC9oMj4KICAgIAoKICAgIDxwPlNlcnZlciBTaWRlIEluY2x1ZGVzIGFyZSBpbXBsZW1lbnRlZCBieSB0aGUKICAgIDxjb2RlPklOQ0xVREVTPC9jb2RlPiA8YSBocmVmPSIuLi9maWx0ZXIuaHRtbCI+ZmlsdGVyPC9hPi4gSWYKICAgIGRvY3VtZW50cyBjb250YWluaW5nIHNlcnZlci1zaWRlIGluY2x1ZGUgZGlyZWN0aXZlcyBhcmUgZ2l2ZW4KICAgIHRoZSBleHRlbnNpb24gLnNodG1sLCB0aGUgZm9sbG93aW5nIGRpcmVjdGl2ZXMgd2lsbCBtYWtlIEFwYWNoZQogICAgcGFyc2UgdGhlbSBhbmQgYXNzaWduIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQgdGhlIG1pbWUgdHlwZSBvZgogICAgPGNvZGU+dGV4dC9odG1sPC9jb2RlPjo8L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgIEFkZFR5cGUgdGV4dC9odG1sIC5zaHRtbDxiciAvPgogICAgICBBZGRPdXRwdXRGaWx0ZXIgSU5DTFVERVMgLnNodG1sCiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPlRoZSBmb2xsb3dpbmcgZGlyZWN0aXZlIG11c3QgYmUgZ2l2ZW4gZm9yIHRoZSBkaXJlY3RvcmllcwogICAgY29udGFpbmluZyB0aGUgc2h0bWwgZmlsZXMgKHR5cGljYWxseSBpbiBhCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI2RpcmVjdG9yeSI+Jmx0O0RpcmVjdG9yeSZndDs8L2E+PC9jb2RlPiBzZWN0aW9uLAogICAgYnV0IHRoaXMgZGlyZWN0aXZlIGlzIGFsc28gdmFsaWQgaW4gPGNvZGU+Lmh0YWNjZXNzPC9jb2RlPiBmaWxlcyBpZgogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNhbGxvd292ZXJyaWRlIj5BbGxvd092ZXJyaWRlPC9hPjwvY29kZT4gPGNvZGU+T3B0aW9uczwvY29kZT4KICAgIGlzIHNldCk6PC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICBPcHRpb25zICtJbmNsdWRlcwogICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5Gb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHRoZSA8Y29kZT5zZXJ2ZXItcGFyc2VkPC9jb2RlPgogICAgPGEgaHJlZj0iLi4vaGFuZGxlci5odG1sIj5oYW5kbGVyPC9hPiBhbHNvIGFjdGl2YXRlcyB0aGUKICAgIElOQ0xVREVTIGZpbHRlci4gQXMgd2VsbCwgQXBhY2hlIHdpbGwgYWN0aXZhdGUgdGhlIElOQ0xVREVTCiAgICBmaWx0ZXIgZm9yIGFueSBkb2N1bWVudCB3aXRoIG1pbWUgdHlwZQogICAgPGNvZGU+dGV4dC94LXNlcnZlci1wYXJzZWQtaHRtbDwvY29kZT4gb3IKICAgIDxjb2RlPnRleHQveC1zZXJ2ZXItcGFyc2VkLWh0bWwzPC9jb2RlPiAoYW5kIHRoZSByZXN1bHRpbmcKICAgIG91dHB1dCB3aWxsIGhhdmUgdGhlIG1pbWUgdHlwZSA8Y29kZT50ZXh0L2h0bWw8L2NvZGU+KS48L3A+CgogICAgPHA+Rm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBvdXIgPGEgaHJlZj0iLi4vaG93dG8vc3NpLmh0bWwiPlR1dG9yaWFsIG9uIFNlcnZlciBTaWRlIEluY2x1ZGVzPC9hPi48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InBhdGhpbmZvIiBpZD0icGF0aGluZm8iPlBBVEhfSU5GTyB3aXRoIFNlcnZlciBTaWRlIEluY2x1ZGVzPC9hPjwvaDI+CiAgICAKCiAgICA8cD5GaWxlcyBwcm9jZXNzZWQgZm9yIHNlcnZlci1zaWRlIGluY2x1ZGVzIG5vIGxvbmdlciBhY2NlcHQKICAgIHJlcXVlc3RzIHdpdGggPGNvZGU+UEFUSF9JTkZPPC9jb2RlPiAodHJhaWxpbmcgcGF0aG5hbWUgaW5mb3JtYXRpb24pCiAgICBieSBkZWZhdWx0LiAgWW91IGNhbiB1c2UgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjYWNjZXB0cGF0aGluZm8iPkFjY2VwdFBhdGhJbmZvPC9hPjwvY29kZT4gZGlyZWN0aXZlIHRvCiAgICBjb25maWd1cmUgdGhlIHNlcnZlciB0byBhY2NlcHQgcmVxdWVzdHMgd2l0aCA8Y29kZT5QQVRIX0lORk88L2NvZGU+LjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iZWxlbWVudHMiIGlkPSJlbGVtZW50cyI+QmFzaWMgRWxlbWVudHM8L2E+PC9oMj4KICAgIDxwPlRoZSBkb2N1bWVudCBpcyBwYXJzZWQgYXMgYW4gSFRNTCBkb2N1bWVudCwgd2l0aCBzcGVjaWFsCiAgICBjb21tYW5kcyBlbWJlZGRlZCBhcyBTR01MIGNvbW1lbnRzLiBBIGNvbW1hbmQgaGFzIHRoZSBzeW50YXg6IDwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgJmx0OyEtLSM8dmFyPmVsZW1lbnQ8L3Zhcj4gPHZhcj5hdHRyaWJ1dGU8L3Zhcj49PHZhcj52YWx1ZTwvdmFyPgogICAgICA8dmFyPmF0dHJpYnV0ZTwvdmFyPj08dmFyPnZhbHVlPC92YXI+IC4uLiAtLSZndDsKICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+VGhlIHZhbHVlIHdpbGwgb2Z0ZW4gYmUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcywgYnV0IHNpbmdsZQogICAgcXVvdGVzICg8Y29kZT4nPC9jb2RlPikgYW5kIGJhY2t0aWNrcyAoPGNvZGU+YDwvY29kZT4pIGFyZSBhbHNvCiAgICBwb3NzaWJsZS4gTWFueSBjb21tYW5kcyBvbmx5IGFsbG93IGEgc2luZ2xlIGF0dHJpYnV0ZS12YWx1ZSBwYWlyLgogICAgTm90ZSB0aGF0IHRoZSBjb21tZW50IHRlcm1pbmF0b3IgKDxjb2RlPi0tJmd0OzwvY29kZT4pIHNob3VsZCBiZQogICAgcHJlY2VkZWQgYnkgd2hpdGVzcGFjZSB0byBlbnN1cmUgdGhhdCBpdCBpc24ndCBjb25zaWRlcmVkIHBhcnQgb2YKICAgIGFuIFNTSSB0b2tlbi4gTm90ZSB0aGF0IHRoZSBsZWFkaW5nIDxjb2RlPiZsdDshLS0jPC9jb2RlPiBpcyA8ZW0+b25lPC9lbT4KICAgIHRva2VuIGFuZCBtYXkgbm90IGNvbnRhaW4gYW55IHdoaXRlc3BhY2VzLjwvcD4KCiAgICA8cD5UaGUgYWxsb3dlZCBlbGVtZW50cyBhcmUgbGlzdGVkIGluIHRoZSBmb2xsb3dpbmcgdGFibGU6PC9wPgoKICAgIDx0YWJsZSBjbGFzcz0iYm9yZGVyZWQiPgogICAgPHRyPjx0aD5FbGVtZW50PC90aD48dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+CiAgICA8dHI+PHRkPjxjb2RlPjxhIGhyZWY9IiNlbGVtZW50LmNvbmZpZyI+Y29uZmlnPC9hPjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5jb25maWd1cmUgb3V0cHV0IGZvcm1hdHM8L3RkPjwvdHI+CiAgICA8dHI+PHRkPjxjb2RlPjxhIGhyZWY9IiNlbGVtZW50LmVjaG8iPmVjaG88L2E+PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPnByaW50IHZhcmlhYmxlczwvdGQ+PC90cj4KICAgIDx0cj48dGQ+PGNvZGU+PGEgaHJlZj0iI2VsZW1lbnQuZXhlYyI+ZXhlYzwvYT48L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+ZXhlY3V0ZSBleHRlcm5hbCBwcm9ncmFtczwvdGQ+PC90cj4KICAgIDx0cj48dGQ+PGNvZGU+PGEgaHJlZj0iI2VsZW1lbnQuZnNpemUiPmZzaXplPC9hPjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5wcmludCBzaXplIG9mIGEgZmlsZTwvdGQ+PC90cj4KICAgIDx0cj48dGQ+PGNvZGU+PGEgaHJlZj0iI2VsZW1lbnQuZmxhc3Rtb2QiPmZsYXN0bW9kPC9hPjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5wcmludCBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lIG9mIGEgZmlsZTwvdGQ+PC90cj4KICAgIDx0cj48dGQ+PGNvZGU+PGEgaHJlZj0iI2VsZW1lbnQuaW5jbHVkZSI+aW5jbHVkZTwvYT48L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+aW5jbHVkZSBhIGZpbGU8L3RkPjwvdHI+CiAgICA8dHI+PHRkPjxjb2RlPjxhIGhyZWY9IiNlbGVtZW50LnByaW50ZW52Ij5wcmludGVudjwvYT48L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+cHJpbnQgYWxsIGF2YWlsYWJsZSB2YXJpYWJsZXM8L3RkPjwvdHI+CiAgICA8dHI+PHRkPjxjb2RlPjxhIGhyZWY9IiNlbGVtZW50LnNldCI+c2V0PC9hPjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5zZXQgYSB2YWx1ZSBvZiBhIHZhcmlhYmxlPC90ZD48L3RyPgogICAgPC90YWJsZT4KCiAgICA8cD5TU0kgZWxlbWVudHMgbWF5IGJlIGRlZmluZWQgYnkgbW9kdWxlcyBvdGhlciB0aGFuCiAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2luY2x1ZGUuaHRtbCI+bW9kX2luY2x1ZGU8L2E+PC9jb2RlPi4gSW4gZmFjdCwgdGhlIDxjb2RlPjxhIGhyZWY9IiNlbGVtZW50LmV4ZWMiPmV4ZWM8L2E+PC9jb2RlPiBlbGVtZW50IGlzIHByb3ZpZGVkIGJ5CiAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2NnaS5odG1sIj5tb2RfY2dpPC9hPjwvY29kZT4sIGFuZCB3aWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIHRoaXMKICAgIG1vZHVsZSBpcyBsb2FkZWQuPC9wPgoKICAgIDxoMz48YSBuYW1lPSJlbGVtZW50LmNvbmZpZyIgaWQ9ImVsZW1lbnQuY29uZmlnIj5UaGUgY29uZmlnIEVsZW1lbnQ8L2E+PC9oMz4KICAgICAgPHA+VGhpcyBjb21tYW5kIGNvbnRyb2xzIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgcGFyc2luZy4gVGhlCiAgICAgIHZhbGlkIGF0dHJpYnV0ZXMgYXJlOjwvcD4KCiAgICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPmVjaG9tc2c8L2NvZGU+ICg8ZW0+QXBhY2hlIDIuMSBhbmQgbGF0ZXI8L2VtPik8L2R0PgogICAgICA8ZGQ+VGhlIHZhbHVlIGlzIGEgbWVzc2FnZSB0aGF0IGlzIHNlbnQgYmFjayB0byB0aGUKICAgICAgY2xpZW50IGlmIHRoZSA8Y29kZT48YSBocmVmPSIjZWxlbWVudC5lY2hvIj5lY2hvPC9hPjwvY29kZT4gZWxlbWVudAogICAgICBhdHRlbXB0cyB0byBlY2hvIGFuIHVuZGVmaW5lZCB2YXJpYWJsZS4gVGhpcyBvdmVycmlkZXMgYW55IDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNzc2l1bmRlZmluZWRlY2hvIj5TU0lVbmRlZmluZWRFY2hvPC9hPjwvY29kZT4gZGlyZWN0aXZlcy48L2RkPgoKICAgICAgPGR0Pjxjb2RlPmVycm1zZzwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIHZhbHVlIGlzIGEgbWVzc2FnZSB0aGF0IGlzIHNlbnQgYmFjayB0byB0aGUKICAgICAgY2xpZW50IGlmIGFuIGVycm9yIG9jY3VycyB3aGlsZSBwYXJzaW5nIHRoZQogICAgICBkb2N1bWVudC4gVGhpcyBvdmVycmlkZXMgYW55IDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNzc2llcnJvcm1zZyI+U1NJRXJyb3JNc2c8L2E+PC9jb2RlPiBkaXJlY3RpdmVzLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+c2l6ZWZtdDwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIHZhbHVlIHNldHMgdGhlIGZvcm1hdCB0byBiZSB1c2VkIHdoaWNoIGRpc3BsYXlpbmcKICAgICAgdGhlIHNpemUgb2YgYSBmaWxlLiBWYWxpZCB2YWx1ZXMgYXJlIDxjb2RlPmJ5dGVzPC9jb2RlPgogICAgICBmb3IgYSBjb3VudCBpbiBieXRlcywgb3IgPGNvZGU+YWJicmV2PC9jb2RlPiBmb3IgYSBjb3VudAogICAgICBpbiBLYiBvciBNYiBhcyBhcHByb3ByaWF0ZSwgZm9yIGV4YW1wbGUgYSBzaXplIG9mIDEwMjQgYnl0ZXMKICAgICAgd2lsbCBiZSBwcmludGVkIGFzICIxSyIuPC9kZD4KCiAgICAgIDxkdD48Y29kZT50aW1lZm10PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgdmFsdWUgaXMgYSBzdHJpbmcgdG8gYmUgdXNlZCBieSB0aGUKICAgICAgPGNvZGU+c3RyZnRpbWUoMyk8L2NvZGU+IGxpYnJhcnkgcm91dGluZSB3aGVuIHByaW50aW5nCiAgICAgIGRhdGVzLjwvZGQ+CiAgICAgIDwvZGw+CiAgICAgCgogICAgPGgzPjxhIG5hbWU9ImVsZW1lbnQuZWNobyIgaWQ9ImVsZW1lbnQuZWNobyI+VGhlIGVjaG8gRWxlbWVudDwvYT48L2gzPgogICAgICA8cD5UaGlzIGNvbW1hbmQgcHJpbnRzIG9uZSBvZiB0aGUgPGEgaHJlZj0iI2luY2x1ZGV2YXJzIj5pbmNsdWRlCiAgICAgIHZhcmlhYmxlczwvYT4sIGRlZmluZWQgYmVsb3cuIElmIHRoZSB2YXJpYWJsZSBpcyB1bnNldCwgdGhlIHJlc3VsdCBpcwogICAgICBkZXRlcm1pbmVkIGJ5IHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjc3NpdW5kZWZpbmVkZWNobyI+U1NJVW5kZWZpbmVkRWNobzwvYT48L2NvZGU+IGRpcmVjdGl2ZS4gQW55IGRhdGVzIHByaW50ZWQgYXJlCiAgICAgIHN1YmplY3QgdG8gdGhlIGN1cnJlbnRseSBjb25maWd1cmVkIDxjb2RlPnRpbWVmbXQ8L2NvZGU+LjwvcD4KCiAgICAgIDxwPkF0dHJpYnV0ZXM6PC9wPiAKCiAgICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPnZhcjwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIHZhbHVlIGlzIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBwcmludC48L2RkPgoKICAgICAgPGR0Pjxjb2RlPmVuY29kaW5nPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD48cD5TcGVjaWZpZXMgaG93IEFwYWNoZSBzaG91bGQgZW5jb2RlIHNwZWNpYWwgY2hhcmFjdGVycwogICAgICBjb250YWluZWQgaW4gdGhlIHZhcmlhYmxlIGJlZm9yZSBvdXRwdXR0aW5nIHRoZW0uIElmIHNldAogICAgICB0byA8Y29kZT5ub25lPC9jb2RlPiwgbm8gZW5jb2Rpbmcgd2lsbCBiZSBkb25lLiBJZiBzZXQgdG8KICAgICAgPGNvZGU+dXJsPC9jb2RlPiwgdGhlbiBVUkwgZW5jb2RpbmcgKGFsc28ga25vd24gYXMgJS1lbmNvZGluZzsKICAgICAgdGhpcyBpcyBhcHByb3ByaWF0ZSBmb3IgdXNlIHdpdGhpbiBVUkxzIGluIGxpbmtzLCBldGMuKSB3aWxsIGJlCiAgICAgIHBlcmZvcm1lZC4gQXQgdGhlIHN0YXJ0IG9mIGFuIDxjb2RlPmVjaG88L2NvZGU+IGVsZW1lbnQsCiAgICAgIHRoZSBkZWZhdWx0IGlzIHNldCB0byA8Y29kZT5lbnRpdHk8L2NvZGU+LCByZXN1bHRpbmcgaW4gZW50aXR5CiAgICAgIGVuY29kaW5nICh3aGljaCBpcyBhcHByb3ByaWF0ZSBpbiB0aGUgY29udGV4dCBvZiBhIGJsb2NrLWxldmVsCiAgICAgIEhUTUwgZWxlbWVudCwgPGVtPmUuZy48L2VtPiBhIHBhcmFncmFwaCBvZiB0ZXh0KS4gVGhpcyBjYW4gYmUKICAgICAgY2hhbmdlZCBieSBhZGRpbmcgYW4gPGNvZGU+ZW5jb2Rpbmc8L2NvZGU+IGF0dHJpYnV0ZSwgd2hpY2ggd2lsbAogICAgICByZW1haW4gaW4gZWZmZWN0IHVudGlsIHRoZSBuZXh0IDxjb2RlPmVuY29kaW5nPC9jb2RlPiBhdHRyaWJ1dGUKICAgICAgaXMgZW5jb3VudGVyZWQgb3IgdGhlIGVsZW1lbnQgZW5kcywgd2hpY2hldmVyIGNvbWVzIGZpcnN0LjwvcD4KCiAgICAgIDxwPlRoZSA8Y29kZT5lbmNvZGluZzwvY29kZT4gYXR0cmlidXRlIG11c3QgPGVtPnByZWNlZGU8L2VtPiB0aGUKICAgICAgY29ycmVzcG9uZGluZyA8Y29kZT52YXI8L2NvZGU+IGF0dHJpYnV0ZSB0byBiZSBlZmZlY3RpdmUsIGFuZCAKICAgICAgb25seSBzcGVjaWFsIGNoYXJhY3RlcnMgYXMgZGVmaW5lZCBpbiB0aGUgSVNPLTg4NTktMSBjaGFyYWN0ZXIKICAgICAgZW5jb2Rpbmcgd2lsbCBiZSBlbmNvZGVkLiBUaGlzIGVuY29kaW5nIHByb2Nlc3MgbWF5IG5vdCBoYXZlIHRoZQogICAgICBkZXNpcmVkIHJlc3VsdCBpZiBhIGRpZmZlcmVudCBjaGFyYWN0ZXIgZW5jb2RpbmcgaXMgaW4gdXNlLjwvcD4KCiAgICAgIDxkaXYgY2xhc3M9Indhcm5pbmciPgogICAgICAgIEluIG9yZGVyIHRvIGF2b2lkIGNyb3NzLXNpdGUgc2NyaXB0aW5nIGlzc3VlcywgeW91IHNob3VsZAogICAgICAgIDxlbT5hbHdheXM8L2VtPiBlbmNvZGUgdXNlciBzdXBwbGllZCBkYXRhLgogICAgICA8L2Rpdj4KICAgICAgPC9kZD4KICAgICAgPC9kbD4KICAgICAKCiAgICA8aDM+PGEgbmFtZT0iZWxlbWVudC5leGVjIiBpZD0iZWxlbWVudC5leGVjIj5UaGUgZXhlYyBFbGVtZW50PC9hPjwvaDM+CiAgICAgIDxwPlRoZSA8Y29kZT5leGVjPC9jb2RlPiBjb21tYW5kIGV4ZWN1dGVzIGEgZ2l2ZW4gc2hlbGwgY29tbWFuZCBvcgogICAgICBDR0kgc2NyaXB0LiBJdCByZXF1aXJlcyA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2NnaS5odG1sIj5tb2RfY2dpPC9hPjwvY29kZT4gdG8gYmUgcHJlc2VudAogICAgICBpbiB0aGUgc2VydmVyLiBJZiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI29wdGlvbnMiPk9wdGlvbnM8L2E+PC9jb2RlPgogICAgICA8Y29kZT5JbmNsdWRlc05PRVhFQzwvY29kZT4gaXMgc2V0LCB0aGlzIGNvbW1hbmQgaXMgY29tcGxldGVseQogICAgICBkaXNhYmxlZC4gVGhlIHZhbGlkIGF0dHJpYnV0ZXMgYXJlOjwvcD4KCiAgICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPmNnaTwvY29kZT48L2R0PgogICAgICA8ZGQ+PHA+VGhlIHZhbHVlIHNwZWNpZmllcyBhICglLWVuY29kZWQpIFVSTC1wYXRoIHRvCiAgICAgIHRoZSBDR0kgc2NyaXB0LiBJZiB0aGUgcGF0aCBkb2VzIG5vdCBiZWdpbiB3aXRoIGEgc2xhc2ggKC8pLAogICAgICB0aGVuIGl0IGlzIHRha2VuIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50CiAgICAgIGRvY3VtZW50LiBUaGUgZG9jdW1lbnQgcmVmZXJlbmNlZCBieSB0aGlzIHBhdGggaXMKICAgICAgaW52b2tlZCBhcyBhIENHSSBzY3JpcHQsIGV2ZW4gaWYgdGhlIHNlcnZlciB3b3VsZCBub3QKICAgICAgbm9ybWFsbHkgcmVjb2duaXplIGl0IGFzIHN1Y2guIEhvd2V2ZXIsIHRoZSBkaXJlY3RvcnkKICAgICAgY29udGFpbmluZyB0aGUgc2NyaXB0IG11c3QgYmUgZW5hYmxlZCBmb3IgQ0dJIHNjcmlwdHMKICAgICAgKHdpdGggPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hbGlhcy5odG1sI3NjcmlwdGFsaWFzIj5TY3JpcHRBbGlhczwvYT48L2NvZGU+CiAgICAgIG9yIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjb3B0aW9ucyI+T3B0aW9uczwvYT48L2NvZGU+CiAgICAgIDxjb2RlPkV4ZWNDR0k8L2NvZGU+KS48L3A+CgogICAgICA8cD5UaGUgQ0dJIHNjcmlwdCBpcyBnaXZlbiB0aGUgPGNvZGU+UEFUSF9JTkZPPC9jb2RlPiBhbmQgcXVlcnkKICAgICAgc3RyaW5nICg8Y29kZT5RVUVSWV9TVFJJTkc8L2NvZGU+KSBvZiB0aGUgb3JpZ2luYWwgcmVxdWVzdCBmcm9tIHRoZQogICAgICBjbGllbnQ7IHRoZXNlIDxlbT5jYW5ub3Q8L2VtPiBiZSBzcGVjaWZpZWQgaW4gdGhlIFVSTCBwYXRoLiBUaGUKICAgICAgaW5jbHVkZSB2YXJpYWJsZXMgd2lsbCBiZSBhdmFpbGFibGUgdG8gdGhlIHNjcmlwdCBpbiBhZGRpdGlvbiB0bwogICAgICB0aGUgc3RhbmRhcmQgPGEgaHJlZj0ibW9kX2NnaS5odG1sIj5DR0k8L2E+IGVudmlyb25tZW50LjwvcD4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlPC9oMz48cD48Y29kZT4KICAgICAgICAmbHQ7IS0tI2V4ZWMgY2dpPSIvY2dpLWJpbi9leGFtcGxlLmNnaSIgLS0mZ3Q7CiAgICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgICA8cD5JZiB0aGUgc2NyaXB0IHJldHVybnMgYSA8Y29kZT5Mb2NhdGlvbjo8L2NvZGU+IGhlYWRlciBpbnN0ZWFkIG9mCiAgICAgIG91dHB1dCwgdGhlbiB0aGlzIHdpbGwgYmUgdHJhbnNsYXRlZCBpbnRvIGFuIEhUTUwgYW5jaG9yLjwvcD4KCiAgICAgIDxwPlRoZSA8Y29kZT48YSBocmVmPSIjaW5jbHVkZXZpcnR1YWwiPmluY2x1ZGUgdmlydHVhbDwvYT48L2NvZGU+CiAgICAgIGVsZW1lbnQgc2hvdWxkIGJlIHVzZWQgaW4gcHJlZmVyZW5jZSB0byA8Y29kZT5leGVjIGNnaTwvY29kZT4uIEluCiAgICAgIHBhcnRpY3VsYXIsIGlmIHlvdSBuZWVkIHRvIHBhc3MgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gYSBDR0kgcHJvZ3JhbSwKICAgICAgdXNpbmcgdGhlIHF1ZXJ5IHN0cmluZywgdGhpcyBjYW5ub3QgYmUgZG9uZSB3aXRoIDxjb2RlPmV4ZWMKICAgICAgY2dpPC9jb2RlPiwgYnV0IGNhbiBiZSBkb25lIHdpdGggPGNvZGU+aW5jbHVkZSB2aXJ0dWFsPC9jb2RlPiwgYXMKICAgICAgc2hvd24gaGVyZTo8L3A+CgogICAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgICAmbHQ7IS0tI2luY2x1ZGUgdmlydHVhbD0iL2NnaS1iaW4vZXhhbXBsZS5jZ2k/YXJndW1lbnQ9dmFsdWUiIC0tJmd0OwogICAgICA8L2NvZGU+PC9wPjwvZGl2PgogICAgICA8L2RkPgoKICAgICAgPGR0Pjxjb2RlPmNtZDwvY29kZT48L2R0PgogICAgICA8ZGQ+PHA+VGhlIHNlcnZlciB3aWxsIGV4ZWN1dGUgdGhlIGdpdmVuIHN0cmluZyB1c2luZwogICAgICA8Y29kZT4vYmluL3NoPC9jb2RlPi4gVGhlIDxhIGhyZWY9IiNpbmNsdWRldmFycyI+aW5jbHVkZSB2YXJpYWJsZXM8L2E+IGFyZSBhdmFpbGFibGUgdG8gdGhlIGNvbW1hbmQsIGluIGFkZGl0aW9uCiAgICAgIHRvIHRoZSB1c3VhbCBzZXQgb2YgQ0dJIHZhcmlhYmxlcy48L3A+CgogICAgICA8cD5UaGUgdXNlIG9mIDxjb2RlPjxhIGhyZWY9IiNpbmNsdWRldmlydHVhbCI+I2luY2x1ZGUgdmlydHVhbDwvYT48L2NvZGU+IGlzIGFsbW9zdCBhbHdheXMgcHJlZmVyZWQgdG8gdXNpbmcKICAgICAgZWl0aGVyIDxjb2RlPiNleGVjIGNnaTwvY29kZT4gb3IgPGNvZGU+I2V4ZWMgY21kPC9jb2RlPi4gVGhlIGZvcm1lcgogICAgICAoPGNvZGU+I2luY2x1ZGUgdmlydHVhbDwvY29kZT4pIHVzZXMgdGhlIHN0YW5kYXJkIEFwYWNoZSBzdWItcmVxdWVzdAogICAgICBtZWNoYW5pc20gdG8gaW5jbHVkZSBmaWxlcyBvciBzY3JpcHRzLiBJdCBpcyBtdWNoIGJldHRlciB0ZXN0ZWQgYW5kCiAgICAgIG1haW50YWluZWQuPC9wPgoKICAgICAgPHA+SW4gYWRkaXRpb24sIG9uIHNvbWUgcGxhdGZvcm1zLCBsaWtlIFdpbjMyLCBhbmQgb24gdW5peCB3aGVuCiAgICAgIHVzaW5nIDxhIGhyZWY9Ii4uL3N1ZXhlYy5odG1sIj5zdWV4ZWM8L2E+LCB5b3UgY2Fubm90IHBhc3MgYXJndW1lbnRzCiAgICAgIHRvIGEgY29tbWFuZCBpbiBhbiA8Y29kZT5leGVjPC9jb2RlPiBkaXJlY3RpdmUsIG9yIG90aGVyd2lzZSBpbmNsdWRlCiAgICAgIHNwYWNlcyBpbiB0aGUgY29tbWFuZC4gVGh1cywgd2hpbGUgdGhlIGZvbGxvd2luZyB3aWxsIHdvcmsgdW5kZXIgYQogICAgICBub24tc3VleGVjIGNvbmZpZ3VyYXRpb24gb24gdW5peCwgaXQgd2lsbCBub3QgcHJvZHVjZSB0aGUgZGVzaXJlZAogICAgICByZXN1bHQgdW5kZXIgV2luMzIsIG9yIHdoZW4gcnVubmluZyBzdWV4ZWM6PC9wPgoKICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgICAgJmx0OyEtLSNleGVjIGNtZD0icGVybCAvcGF0aC90by9wZXJsc2NyaXB0IGFyZzEgYXJnMiIgLS0mZ3Q7CiAgICAgIDwvY29kZT48L3A+PC9kaXY+CiAgICAgIDwvZGQ+CiAgICAgIDwvZGw+CiAgICAgCgogICAgPGgzPjxhIG5hbWU9ImVsZW1lbnQuZnNpemUiIGlkPSJlbGVtZW50LmZzaXplIj5UaGUgZnNpemUgRWxlbWVudDwvYT48L2gzPgogICAgICA8cD5UaGlzIGNvbW1hbmQgcHJpbnRzIHRoZSBzaXplIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSwgc3ViamVjdAogICAgICB0byB0aGUgPGNvZGU+c2l6ZWZtdDwvY29kZT4gZm9ybWF0IHNwZWNpZmljYXRpb24uIEF0dHJpYnV0ZXM6PC9wPgoKICAgICAgPGRsPgogICAgICA8ZHQ+PGNvZGU+ZmlsZTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIHZhbHVlIGlzIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5CiAgICAgIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgZG9jdW1lbnQgYmVpbmcgcGFyc2VkLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+dmlydHVhbDwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIHZhbHVlIGlzIGEgKCUtZW5jb2RlZCkgVVJMLXBhdGguIElmIGl0IGRvZXMgbm90IGJlZ2luIHdpdGgKICAgICAgYSBzbGFzaCAoLykgdGhlbiBpdCBpcyB0YWtlbiB0byBiZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkb2N1bWVudC4KICAgICAgTm90ZSwgdGhhdCB0aGlzIGRvZXMgPGVtPm5vdDwvZW0+IHByaW50IHRoZSBzaXplIG9mIGFueSBDR0kgb3V0cHV0LAogICAgICBidXQgdGhlIHNpemUgb2YgdGhlIENHSSBzY3JpcHQgaXRzZWxmLjwvZGQ+CiAgICAgIDwvZGw+CiAgICAgCgogICAgPGgzPjxhIG5hbWU9ImVsZW1lbnQuZmxhc3Rtb2QiIGlkPSJlbGVtZW50LmZsYXN0bW9kIj5UaGUgZmxhc3Rtb2QgRWxlbWVudDwvYT48L2gzPgogICAgICA8cD5UaGlzIGNvbW1hbmQgcHJpbnRzIHRoZSBsYXN0IG1vZGlmaWNhdGlvbiBkYXRlIG9mIHRoZQogICAgICBzcGVjaWZpZWQgZmlsZSwgc3ViamVjdCB0byB0aGUgPGNvZGU+dGltZWZtdDwvY29kZT4gZm9ybWF0CiAgICAgIHNwZWNpZmljYXRpb24uIFRoZSBhdHRyaWJ1dGVzIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlCiAgICAgIDxjb2RlPjxhIGhyZWY9IiNlbGVtZW50LmZzaXplIj5mc2l6ZTwvYT48L2NvZGU+IGNvbW1hbmQuPC9wPgogICAgIAoKICAgIDxoMz48YSBuYW1lPSJlbGVtZW50LmluY2x1ZGUiIGlkPSJlbGVtZW50LmluY2x1ZGUiPlRoZSBpbmNsdWRlIEVsZW1lbnQ8L2E+PC9oMz4KICAgICAgPHA+VGhpcyBjb21tYW5kIGluc2VydHMgdGhlIHRleHQgb2YgYW5vdGhlciBkb2N1bWVudCBvciBmaWxlCiAgICAgIGludG8gdGhlIHBhcnNlZCBmaWxlLiBBbnkgaW5jbHVkZWQgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB1c3VhbAogICAgICBhY2Nlc3MgY29udHJvbC4gSWYgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBwYXJzZWQgZmlsZSBoYXMKICAgICAgPGEgaHJlZj0iY29yZS5odG1sI29wdGlvbnMiPk9wdGlvbnM8L2E+CiAgICAgIDxjb2RlPkluY2x1ZGVzTk9FWEVDPC9jb2RlPiBzZXQsIHRoZW4gb25seSBkb2N1bWVudHMgd2l0aCBhIHRleHQKICAgICAgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCNtaW1lLXR5cGUiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPk1JTUUtdHlwZTwvYT4gKDxjb2RlPnRleHQvcGxhaW48L2NvZGU+LAogICAgICA8Y29kZT50ZXh0L2h0bWw8L2NvZGU+IGV0Yy4pIHdpbGwgYmUgaW5jbHVkZWQuIE90aGVyd2lzZSBDR0kKICAgICAgc2NyaXB0cyBhcmUgaW52b2tlZCBhcyBub3JtYWwgdXNpbmcgdGhlIGNvbXBsZXRlIFVSTCBnaXZlbiBpbgogICAgICB0aGUgY29tbWFuZCwgaW5jbHVkaW5nIGFueSBxdWVyeSBzdHJpbmcuPC9wPgoKICAgICAgPHA+QW4gYXR0cmlidXRlIGRlZmluZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBkb2N1bWVudDsgdGhlCiAgICAgIGluY2x1c2lvbiBpcyBkb25lIGZvciBlYWNoIGF0dHJpYnV0ZSBnaXZlbiB0byB0aGUgaW5jbHVkZQogICAgICBjb21tYW5kLiBUaGUgdmFsaWQgYXR0cmlidXRlcyBhcmU6PC9wPgoKICAgICAgPGRsPgogICAgICA8ZHQ+PGNvZGU+ZmlsZTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIHZhbHVlIGlzIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5CiAgICAgIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgZG9jdW1lbnQgYmVpbmcgcGFyc2VkLiBJdCBjYW5ub3QKICAgICAgY29udGFpbiA8Y29kZT4uLi88L2NvZGU+LCBub3IgY2FuIGl0IGJlIGFuIGFic29sdXRlIHBhdGguCiAgICAgIFRoZXJlZm9yZSwgeW91IGNhbm5vdCBpbmNsdWRlIGZpbGVzIHRoYXQgYXJlIG91dHNpZGUgb2YgdGhlCiAgICAgIGRvY3VtZW50IHJvb3QsIG9yIGFib3ZlIHRoZSBjdXJyZW50IGRvY3VtZW50IGluIHRoZSBkaXJlY3RvcnkKICAgICAgc3RydWN0dXJlLiBUaGUgPGNvZGU+dmlydHVhbDwvY29kZT4gYXR0cmlidXRlIHNob3VsZCBhbHdheXMgYmUKICAgICAgdXNlZCBpbiBwcmVmZXJlbmNlIHRvIHRoaXMgb25lLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+PGEgaWQ9ImluY2x1ZGV2aXJ0dWFsIiBuYW1lPSJpbmNsdWRldmlydHVhbCI+dmlydHVhbDwvYT48L2NvZGU+PC9kdD4KICAgICAgPGRkPjxwPlRoZSB2YWx1ZSBpcyBhICglLWVuY29kZWQpIFVSTC1wYXRoLiBUaGUgVVJMIGNhbm5vdCBjb250YWluIGEKICAgICAgc2NoZW1lIG9yIGhvc3RuYW1lLCBvbmx5IGEgcGF0aCBhbmQgYW4gb3B0aW9uYWwgcXVlcnkgc3RyaW5nLiBJZiBpdAogICAgICBkb2VzIG5vdCBiZWdpbiB3aXRoIGEgc2xhc2ggKC8pIHRoZW4gaXQgaXMgdGFrZW4gdG8gYmUgcmVsYXRpdmUgdG8gdGhlCiAgICAgIGN1cnJlbnQgZG9jdW1lbnQuPC9wPgoKICAgICAgPHA+QSBVUkwgaXMgY29uc3RydWN0ZWQgZnJvbSB0aGUgYXR0cmlidXRlLCBhbmQgdGhlIG91dHB1dCB0aGUKICAgICAgc2VydmVyIHdvdWxkIHJldHVybiBpZiB0aGUgVVJMIHdlcmUgYWNjZXNzZWQgYnkgdGhlIGNsaWVudCBpcwogICAgICBpbmNsdWRlZCBpbiB0aGUgcGFyc2VkIG91dHB1dC4gVGh1cyBpbmNsdWRlZCBmaWxlcyBjYW4gYmUgbmVzdGVkLjwvcD4KCiAgICAgIDxwPklmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGEgQ0dJIHByb2dyYW0sIHRoZSBwcm9ncmFtIHdpbGwgYmUKICAgICAgZXhlY3V0ZWQgYW5kIGl0cyBvdXRwdXQgaW5zZXJ0ZWQgaW4gcGxhY2Ugb2YgdGhlIGRpcmVjdGl2ZSBpbiB0aGUKICAgICAgcGFyc2VkIGZpbGUuIFlvdSBtYXkgaW5jbHVkZSBhIHF1ZXJ5IHN0cmluZyBpbiBhIENHSSB1cmw6PC9wPgogICAgIAogICAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgICAmbHQ7IS0tI2luY2x1ZGUgdmlydHVhbD0iL2NnaS1iaW4vZXhhbXBsZS5jZ2k/YXJndW1lbnQ9dmFsdWUiIC0tJmd0OwogICAgICA8L2NvZGU+PC9wPjwvZGl2PgogICAgICAgICAgIAogICAgICA8cD48Y29kZT5pbmNsdWRlIHZpcnR1YWw8L2NvZGU+IHNob3VsZCBiZSB1c2VkIGluIHByZWZlcmVuY2UKICAgICAgdG8gPGNvZGU+ZXhlYyBjZ2k8L2NvZGU+IHRvIGluY2x1ZGUgdGhlIG91dHB1dCBvZiBDR0kgcHJvZ3JhbXMKICAgICAgaW50byBhbiBIVE1MIGRvY3VtZW50LjwvcD4KICAgICAgPC9kZD4KICAgICAgPC9kbD4KICAgICAKCiAgICA8aDM+PGEgbmFtZT0iZWxlbWVudC5wcmludGVudiIgaWQ9ImVsZW1lbnQucHJpbnRlbnYiPlRoZSBwcmludGVudiBFbGVtZW50PC9hPjwvaDM+CiAgICAgIDxwPlRoaXMgcHJpbnRzIG91dCBhIGxpc3Rpbmcgb2YgYWxsIGV4aXN0aW5nIHZhcmlhYmxlcyBhbmQKICAgICAgdGhlaXIgdmFsdWVzLiBTcGVjaWFsIGNoYXJhY3RlcnMgYXJlIGVudGl0eSBlbmNvZGVkIChzZWUgdGhlIDxjb2RlPjxhIGhyZWY9IiNlbGVtZW50LmVjaG8iPmVjaG88L2E+PC9jb2RlPiBlbGVtZW50IGZvciBkZXRhaWxzKQogICAgICBiZWZvcmUgYmVpbmcgb3V0cHV0LiBUaGVyZSBhcmUgbm8gYXR0cmlidXRlcy48L3A+CgogICAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+RXhhbXBsZTwvaDM+PHA+PGNvZGU+CiAgICAgICAgJmx0OyEtLSNwcmludGVudiAtLSZndDsKICAgICAgPC9jb2RlPjwvcD48L2Rpdj4KICAgICAKCiAgICA8aDM+PGEgbmFtZT0iZWxlbWVudC5zZXQiIGlkPSJlbGVtZW50LnNldCI+VGhlIHNldCBFbGVtZW50PC9hPjwvaDM+CiAgICAgIDxwPlRoaXMgc2V0cyB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS4gQXR0cmlidXRlczo8L3A+CgogICAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT52YXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBzZXQuPC9kZD4KCiAgICAgIDxkdD48Y29kZT52YWx1ZTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIHZhbHVlIHRvIGdpdmUgYSB2YXJpYWJsZS48L2RkPgogICAgICA8L2RsPgoKICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPkV4YW1wbGU8L2gzPjxwPjxjb2RlPgogICAgICAgICZsdDshLS0jc2V0IHZhcj0iY2F0ZWdvcnkiIHZhbHVlPSJoZWxwIiAtLSZndDsKICAgICAgPC9jb2RlPjwvcD48L2Rpdj4KICAgICAKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iaW5jbHVkZXZhcnMiIGlkPSJpbmNsdWRldmFycyI+SW5jbHVkZSBWYXJpYWJsZXM8L2E+PC9oMj4KICAgIAoKICAgIDxwPkluIGFkZGl0aW9uIHRvIHRoZSB2YXJpYWJsZXMgaW4gdGhlIHN0YW5kYXJkIENHSSBlbnZpcm9ubWVudCwKICAgIHRoZXNlIGFyZSBhdmFpbGFibGUgZm9yIHRoZSA8Y29kZT5lY2hvPC9jb2RlPiBjb21tYW5kLCBmb3IKICAgIDxjb2RlPmlmPC9jb2RlPiBhbmQgPGNvZGU+ZWxpZjwvY29kZT4sIGFuZCB0byBhbnkgcHJvZ3JhbQogICAgaW52b2tlZCBieSB0aGUgZG9jdW1lbnQuPC9wPgoKICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPkRBVEVfR01UPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgY3VycmVudCBkYXRlIGluIEdyZWVud2ljaCBNZWFuIFRpbWUuPC9kZD4KCiAgICAgIDxkdD48Y29kZT5EQVRFX0xPQ0FMPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgY3VycmVudCBkYXRlIGluIHRoZSBsb2NhbCB0aW1lIHpvbmUuPC9kZD4KCiAgICAgIDxkdD48Y29kZT5ET0NVTUVOVF9OQU1FPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgZmlsZW5hbWUgKGV4Y2x1ZGluZyBkaXJlY3Rvcmllcykgb2YgdGhlIGRvY3VtZW50CiAgICAgIHJlcXVlc3RlZCBieSB0aGUgdXNlci48L2RkPgoKICAgICAgPGR0Pjxjb2RlPkRPQ1VNRU5UX1VSSTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlICglLWRlY29kZWQpIFVSTCBwYXRoIG9mIHRoZSBkb2N1bWVudCByZXF1ZXN0ZWQgYnkgdGhlCiAgICAgIHVzZXIuIE5vdGUgdGhhdCBpbiB0aGUgY2FzZSBvZiBuZXN0ZWQgaW5jbHVkZSBmaWxlcywgdGhpcyBpcwogICAgICA8ZW0+bm90PC9lbT4gdGhlIFVSTCBmb3IgdGhlIGN1cnJlbnQgZG9jdW1lbnQuPC9kZD4KCiAgICAgIDxkdD48Y29kZT5MQVNUX01PRElGSUVEPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgbGFzdCBtb2RpZmljYXRpb24gZGF0ZSBvZiB0aGUgZG9jdW1lbnQgcmVxdWVzdGVkIGJ5CiAgICAgIHRoZSB1c2VyLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+UVVFUllfU1RSSU5HX1VORVNDQVBFRDwvY29kZT48L2R0PgogICAgICA8ZGQ+SWYgYSBxdWVyeSBzdHJpbmcgaXMgcHJlc2VudCwgdGhpcyB2YXJpYWJsZSBjb250YWlucyB0aGUKICAgICAgKCUtZGVjb2RlZCkgcXVlcnkgc3RyaW5nLCB3aGljaCBpcyA8ZW0+ZXNjYXBlZDwvZW0+IGZvciBzaGVsbAogICAgICB1c2FnZSAoc3BlY2lhbCBjaGFyYWN0ZXJzIGxpa2UgPGNvZGU+JmFtcDs8L2NvZGU+IGV0Yy4gYXJlCiAgICAgIHByZWNlZGVkIGJ5IGJhY2tzbGFzaGVzKS48L2RkPgogICAgPC9kbD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0ic3Vic3RpdHV0aW9uIiBpZD0ic3Vic3RpdHV0aW9uIj5WYXJpYWJsZSBTdWJzdGl0dXRpb248L2E+PC9oMj4KCiAgICA8cD5WYXJpYWJsZSBzdWJzdGl0dXRpb24gaXMgZG9uZSB3aXRoaW4gcXVvdGVkIHN0cmluZ3MgaW4gbW9zdAogICAgY2FzZXMgd2hlcmUgdGhleSBtYXkgcmVhc29uYWJseSBvY2N1ciBhcyBhbiBhcmd1bWVudCB0byBhbiBTU0kKICAgIGRpcmVjdGl2ZS4gVGhpcyBpbmNsdWRlcyB0aGUgPGNvZGU+Y29uZmlnPC9jb2RlPiwKICAgIDxjb2RlPmV4ZWM8L2NvZGU+LCA8Y29kZT5mbGFzdG1vZDwvY29kZT4sIDxjb2RlPmZzaXplPC9jb2RlPiwKICAgIDxjb2RlPmluY2x1ZGU8L2NvZGU+LCA8Y29kZT5lY2hvPC9jb2RlPiwgYW5kIDxjb2RlPnNldDwvY29kZT4KICAgIGRpcmVjdGl2ZXMsIGFzIHdlbGwgYXMgdGhlIGFyZ3VtZW50cyB0byBjb25kaXRpb25hbCBvcGVyYXRvcnMuCiAgICBZb3UgY2FuIGluc2VydCBhIGxpdGVyYWwgZG9sbGFyIHNpZ24gaW50byB0aGUgc3RyaW5nIHVzaW5nIGJhY2tzbGFzaAogICAgcXVvdGluZzo8L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgICZsdDshLS0jaWYgZXhwcj0iJGEgPSBcJHRlc3QiIC0tJmd0OwogICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5JZiBhIHZhcmlhYmxlIHJlZmVyZW5jZSBuZWVkcyB0byBiZSBzdWJzdGl0dXRlZCBpbiB0aGUKICAgIG1pZGRsZSBvZiBhIGNoYXJhY3RlciBzZXF1ZW5jZSB0aGF0IG1pZ2h0IG90aGVyd2lzZSBiZQogICAgY29uc2lkZXJlZCBhIHZhbGlkIGlkZW50aWZpZXIgaW4gaXRzIG93biByaWdodCwgaXQgY2FuIGJlCiAgICBkaXNhbWJpZ3VhdGVkIGJ5IGVuY2xvc2luZyB0aGUgcmVmZXJlbmNlIGluIGJyYWNlcywKICAgIDxlbT5hIGxhPC9lbT4gc2hlbGwgc3Vic3RpdHV0aW9uOjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgJmx0OyEtLSNzZXQgdmFyPSJaZWQiIHZhbHVlPSIke1JFTU9URV9IT1NUfV8ke1JFUVVFU1RfTUVUSE9EfSIgLS0mZ3Q7CiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPlRoaXMgd2lsbCByZXN1bHQgaW4gdGhlIDxjb2RlPlplZDwvY29kZT4gdmFyaWFibGUgYmVpbmcgc2V0CiAgICB0byAiPGNvZGU+WF9ZPC9jb2RlPiIgaWYgPGNvZGU+UkVNT1RFX0hPU1Q8L2NvZGU+IGlzCiAgICAiPGNvZGU+WDwvY29kZT4iIGFuZCA8Y29kZT5SRVFVRVNUX01FVEhPRDwvY29kZT4gaXMKICAgICI8Y29kZT5ZPC9jb2RlPiIuPC9wPgoKICAgIDxwPlRoZSBiZWxvdyBleGFtcGxlIHdpbGwgcHJpbnQgImluIGZvbyIgaWYgdGhlCiAgICA8Y29kZT5ET0NVTUVOVF9VUkk8L2NvZGU+IGlzIDxjb2RlPi9mb28vZmlsZS5odG1sPC9jb2RlPiwgImluIGJhciIKICAgIGlmIGl0IGlzIDxjb2RlPi9iYXIvZmlsZS5odG1sPC9jb2RlPiBhbmQgImluIG5laXRoZXIiIG90aGVyd2lzZTo8L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgICZsdDshLS0jaWYgZXhwcj0nIiRET0NVTUVOVF9VUkkiID0gIi9mb28vZmlsZS5odG1sIicgLS0mZ3Q7PGJyIC8+CiAgICAgIDxzcGFuIGNsYXNzPSJpbmRlbnQiPgogICAgICAgIGluIGZvbzxiciAvPgogICAgICA8L3NwYW4+CiAgICAgICZsdDshLS0jZWxpZiBleHByPSciJERPQ1VNRU5UX1VSSSIgPSAiL2Jhci9maWxlLmh0bWwiJyAtLSZndDs8YnIgLz4KICAgICAgPHNwYW4gY2xhc3M9ImluZGVudCI+CiAgICAgICAgaW4gYmFyPGJyIC8+CiAgICAgIDwvc3Bhbj4KICAgICAgJmx0OyEtLSNlbHNlIC0tJmd0OzxiciAvPgogICAgICA8c3BhbiBjbGFzcz0iaW5kZW50Ij4KICAgICAgICBpbiBuZWl0aGVyPGJyIC8+CiAgICAgIDwvc3Bhbj4KICAgICAgJmx0OyEtLSNlbmRpZiAtLSZndDsKICAgIDwvY29kZT48L3A+PC9kaXY+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImZsb3djdHJsIiBpZD0iZmxvd2N0cmwiPkZsb3cgQ29udHJvbCBFbGVtZW50czwvYT48L2gyPgogICAgCgogICAgPHA+VGhlIGJhc2ljIGZsb3cgY29udHJvbCBlbGVtZW50cyBhcmU6PC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICAmbHQ7IS0tI2lmIGV4cHI9Ijx2YXI+dGVzdF9jb25kaXRpb248L3Zhcj4iIC0tJmd0OzxiciAvPgogICAgICAmbHQ7IS0tI2VsaWYgZXhwcj0iPHZhcj50ZXN0X2NvbmRpdGlvbjwvdmFyPiIgLS0mZ3Q7PGJyIC8+CiAgICAgICZsdDshLS0jZWxzZSAtLSZndDs8YnIgLz4KICAgICAgJmx0OyEtLSNlbmRpZiAtLSZndDsKICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+VGhlIDxjb2RlPmlmPC9jb2RlPiBlbGVtZW50IHdvcmtzIGxpa2UgYW4gaWYgc3RhdGVtZW50IGluIGEKICAgIHByb2dyYW1taW5nIGxhbmd1YWdlLiBUaGUgdGVzdCBjb25kaXRpb24gaXMgZXZhbHVhdGVkIGFuZCBpZgogICAgdGhlIHJlc3VsdCBpcyB0cnVlLCB0aGVuIHRoZSB0ZXh0IHVudGlsIHRoZSBuZXh0IDxjb2RlPmVsaWY8L2NvZGU+LAogICAgPGNvZGU+ZWxzZTwvY29kZT4gb3IgPGNvZGU+ZW5kaWY8L2NvZGU+IGVsZW1lbnQgaXMgaW5jbHVkZWQgaW4gdGhlCiAgICBvdXRwdXQgc3RyZWFtLjwvcD4KCiAgICA8cD5UaGUgPGNvZGU+ZWxpZjwvY29kZT4gb3IgPGNvZGU+ZWxzZTwvY29kZT4gc3RhdGVtZW50cyBhcmUgYmUgdXNlZAogICAgdG8gcHV0IHRleHQgaW50byB0aGUgb3V0cHV0IHN0cmVhbSBpZiB0aGUgb3JpZ2luYWwKICAgIDx2YXI+dGVzdF9jb25kaXRpb248L3Zhcj4gd2FzIGZhbHNlLiBUaGVzZSBlbGVtZW50cyBhcmUgb3B0aW9uYWwuPC9wPgoKICAgIDxwPlRoZSA8Y29kZT5lbmRpZjwvY29kZT4gZWxlbWVudCBlbmRzIHRoZSA8Y29kZT5pZjwvY29kZT4gZWxlbWVudAogICAgYW5kIGlzIHJlcXVpcmVkLjwvcD4KCiAgICA8cD48dmFyPnRlc3RfY29uZGl0aW9uPC92YXI+IGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOjwvcD4KCiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT48dmFyPnN0cmluZzwvdmFyPjwvY29kZT48L2R0PgogICAgICA8ZGQ+dHJ1ZSBpZiA8dmFyPnN0cmluZzwvdmFyPiBpcyBub3QgZW1wdHk8L2RkPgoKICAgICAgPGR0Pjxjb2RlPjx2YXI+c3RyaW5nMTwvdmFyPiA9IDx2YXI+c3RyaW5nMjwvdmFyPjxiciAvPgogICAgICA8dmFyPnN0cmluZzE8L3Zhcj4gPT0gPHZhcj5zdHJpbmcyPC92YXI+PGJyIC8+CiAgICAgIDx2YXI+c3RyaW5nMTwvdmFyPiAhPSA8dmFyPnN0cmluZzI8L3Zhcj48L2NvZGU+PC9kdD4KICAgICAgCiAgICAgIDxkZD48cD5Db21wYXJlIDx2YXI+c3RyaW5nMTwvdmFyPiB3aXRoIDx2YXI+c3RyaW5nMjwvdmFyPi4gSWYKICAgICAgPHZhcj5zdHJpbmcyPC92YXI+IGhhcyB0aGUgZm9ybSA8Y29kZT4vPHZhcj5zdHJpbmcyPC92YXI+LzwvY29kZT4KICAgICAgdGhlbiBpdCBpcyB0cmVhdGVkIGFzIGEgcmVndWxhciBleHByZXNzaW9uLiBSZWd1bGFyIGV4cHJlc3Npb25zIGFyZQogICAgICBpbXBsZW1lbnRlZCBieSB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5wY3JlLm9yZyI+UENSRTwvYT4gZW5naW5lIGFuZAogICAgICBoYXZlIHRoZSBzYW1lIHN5bnRheCBhcyB0aG9zZSBpbiA8YSBocmVmPSJodHRwOi8vd3d3LnBlcmwuY29tIj5wZXJsCiAgICAgIDU8L2E+LiBOb3RlIHRoYXQgPGNvZGU+PT08L2NvZGU+IGlzIGp1c3QgYW4gYWxpYXMgZm9yIDxjb2RlPj08L2NvZGU+CiAgICAgIGFuZCBiZWhhdmVzIGV4YWN0bHkgdGhlIHNhbWUgd2F5LjwvcD4KCiAgICAgIDxwPklmIHlvdSBhcmUgbWF0Y2hpbmcgcG9zaXRpdmUgKDxjb2RlPj08L2NvZGU+IG9yIDxjb2RlPj09PC9jb2RlPiksIHlvdQogICAgICBjYW4gY2FwdHVyZSBncm91cGVkIHBhcnRzIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uIFRoZSBjYXB0dXJlZCBwYXJ0cwogICAgICBhcmUgc3RvcmVkIGluIHRoZSBzcGVjaWFsIHZhcmlhYmxlcyA8Y29kZT4kMTwvY29kZT4gLi4KICAgICAgPGNvZGU+JDk8L2NvZGU+LjwvcD4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlPC9oMz48cD48Y29kZT4KICAgICAgICAmbHQ7IS0tI2lmIGV4cHI9IiRRVUVSWV9TVFJJTkcgPSAvXnNpZD0oW2EtekEtWjAtOV0rKS8iIC0tJmd0OzxiciAvPgogICAgICAgIDxzcGFuIGNsYXNzPSJpbmRlbnQiPgogICAgICAgICAgJmx0OyEtLSNzZXQgdmFyPSJzZXNzaW9uIiB2YWx1ZT0iJDEiIC0tJmd0OzxiciAvPgogICAgICAgIDwvc3Bhbj4KICAgICAgICAmbHQ7IS0tI2VuZGlmIC0tJmd0OwogICAgICA8L2NvZGU+PC9wPjwvZGl2PgogICAgICA8L2RkPgoKICAgICAgPGR0Pjxjb2RlPjx2YXI+c3RyaW5nMTwvdmFyPiAmbHQ7IDx2YXI+c3RyaW5nMjwvdmFyPjxiciAvPgogICAgICAgPHZhcj5zdHJpbmcxPC92YXI+ICZsdDs9IDx2YXI+c3RyaW5nMjwvdmFyPjxiciAvPgogICAgICAgPHZhcj5zdHJpbmcxPC92YXI+ICZndDsgPHZhcj5zdHJpbmcyPC92YXI+PGJyIC8+CiAgICAgICA8dmFyPnN0cmluZzE8L3Zhcj4gJmd0Oz0gPHZhcj5zdHJpbmcyPC92YXI+PC9jb2RlPjwvZHQ+CgogICAgICA8ZGQ+Q29tcGFyZSA8dmFyPnN0cmluZzE8L3Zhcj4gd2l0aCA8dmFyPnN0cmluZzI8L3Zhcj4uIE5vdGUsIHRoYXQKICAgICAgc3RyaW5ncyBhcmUgY29tcGFyZWQgPGVtPmxpdGVyYWxseTwvZW0+ICh1c2luZwogICAgICA8Y29kZT5zdHJjbXAoMyk8L2NvZGU+KS4gVGhlcmVmb3JlIHRoZSBzdHJpbmcgIjEwMCIgaXMgbGVzcyB0aGFuCiAgICAgICIyMCIuPC9kZD4KCiAgICAgIDxkdD48Y29kZT4oIDx2YXI+dGVzdF9jb25kaXRpb248L3Zhcj4gKTwvY29kZT48L2R0PgogICAgICA8ZGQ+dHJ1ZSBpZiA8dmFyPnRlc3RfY29uZGl0aW9uPC92YXI+IGlzIHRydWU8L2RkPgoKICAgICAgPGR0Pjxjb2RlPiEgPHZhcj50ZXN0X2NvbmRpdGlvbjwvdmFyPjwvY29kZT48L2R0PgogICAgICA8ZGQ+dHJ1ZSBpZiA8dmFyPnRlc3RfY29uZGl0aW9uPC92YXI+IGlzIGZhbHNlPC9kZD4KCiAgICAgIDxkdD48Y29kZT48dmFyPnRlc3RfY29uZGl0aW9uMTwvdmFyPiAmYW1wOyZhbXA7CiAgICAgICAgPHZhcj50ZXN0X2NvbmRpdGlvbjI8L3Zhcj48L2NvZGU+PC9kdD4KICAgICAgPGRkPnRydWUgaWYgYm90aCA8dmFyPnRlc3RfY29uZGl0aW9uMTwvdmFyPiBhbmQKICAgICAgPHZhcj50ZXN0X2NvbmRpdGlvbjI8L3Zhcj4gYXJlIHRydWU8L2RkPgoKICAgICAgPGR0Pjxjb2RlPjx2YXI+dGVzdF9jb25kaXRpb24xPC92YXI+IHx8CiAgICAgICAgPHZhcj50ZXN0X2NvbmRpdGlvbjI8L3Zhcj48L2NvZGU+PC9kdD4KICAgICAgPGRkPnRydWUgaWYgZWl0aGVyIDx2YXI+dGVzdF9jb25kaXRpb24xPC92YXI+IG9yCiAgICAgIDx2YXI+dGVzdF9jb25kaXRpb24yPC92YXI+IGlzIHRydWU8L2RkPgogICAgPC9kbD4KCiAgICA8cD4iPGNvZGU+PTwvY29kZT4iIGFuZCAiPGNvZGU+IT08L2NvZGU+IiBiaW5kIG1vcmUgdGlnaHRseSB0aGFuCiAgICAiPGNvZGU+JmFtcDsmYW1wOzwvY29kZT4iIGFuZCAiPGNvZGU+fHw8L2NvZGU+Ii4gIjxjb2RlPiE8L2NvZGU+IiBiaW5kcwogICAgbW9zdCB0aWdodGx5LiBUaHVzLCB0aGUgZm9sbG93aW5nIGFyZSBlcXVpdmFsZW50OjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgJmx0OyEtLSNpZiBleHByPSIkYSA9IHRlc3QxICZhbXA7JmFtcDsgJGIgPSB0ZXN0MiIgLS0mZ3Q7PGJyIC8+CiAgICAgICZsdDshLS0jaWYgZXhwcj0iKCRhID0gdGVzdDEpICZhbXA7JmFtcDsgKCRiID0gdGVzdDIpIiAtLSZndDsKICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+VGhlIGJvb2xlYW4gb3BlcmF0b3JzIDxjb2RlPiZhbXA7JmFtcDs8L2NvZGU+IGFuZCA8Y29kZT58fDwvY29kZT4KICAgIHNoYXJlIHRoZSBzYW1lIHByaW9yaXR5LiBTbyBpZiB5b3Ugd2FudCB0byBiaW5kIHN1Y2ggYW4gb3BlcmF0b3IgbW9yZQogICAgdGlnaHRseSwgeW91IHNob3VsZCB1c2UgcGFyZW50aGVzZXMuPC9wPgoKICAgIDxwPkFueXRoaW5nIHRoYXQncyBub3QgcmVjb2duaXplZCBhcyBhIHZhcmlhYmxlIG9yIGFuIG9wZXJhdG9yCiAgICBpcyB0cmVhdGVkIGFzIGEgc3RyaW5nLiBTdHJpbmdzIGNhbiBhbHNvIGJlIHF1b3RlZDoKICAgIDxjb2RlPidzdHJpbmcnPC9jb2RlPi4gVW5xdW90ZWQgc3RyaW5ncyBjYW4ndCBjb250YWluIHdoaXRlc3BhY2UKICAgIChibGFua3MgYW5kIHRhYnMpIGJlY2F1c2UgaXQgaXMgdXNlZCB0byBzZXBhcmF0ZSB0b2tlbnMgc3VjaCBhcwogICAgdmFyaWFibGVzLiBJZiBtdWx0aXBsZSBzdHJpbmdzIGFyZSBmb3VuZCBpbiBhIHJvdywgdGhleSBhcmUKICAgIGNvbmNhdGVuYXRlZCB1c2luZyBibGFua3MuIFNvLDwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT48dmFyPnN0cmluZzE8L3Zhcj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8dmFyPnN0cmluZzI8L3Zhcj48L2NvZGU+IHJlc3VsdHMgaW4gPGNvZGU+PHZhcj5zdHJpbmcxPC92YXI+Jm5ic3A7PHZhcj5zdHJpbmcyPC92YXI+PC9jb2RlPjxiciAvPgogICAgICA8YnIgLz4KICAgICAgYW5kPGJyIC8+CiAgICAgIDxiciAvPgogICAgICA8Y29kZT4nPHZhcj5zdHJpbmcxPC92YXI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PHZhcj5zdHJpbmcyPC92YXI+JzwvY29kZT4gcmVzdWx0cyBpbiA8Y29kZT48dmFyPnN0cmluZzE8L3Zhcj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8dmFyPnN0cmluZzI8L3Zhcj48L2NvZGU+LjwvcD48L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJub3RlIj48aDM+T3B0aW1pemF0aW9uIG9mIEJvb2xlYW4gRXhwcmVzc2lvbnM8L2gzPgogICAgICA8cD5JZiB0aGUgZXhwcmVzc2lvbnMgYmVjb21lIG1vcmUgY29tcGxleCBhbmQgc2xvdyBkb3duIHByb2Nlc3NpbmcKICAgICAgc2lnbmlmaWNhbnRseSwgeW91IGNhbiB0cnkgdG8gb3B0aW1pemUgdGhlbSBhY2NvcmRpbmcgdG8gdGhlCiAgICAgIGV2YWx1YXRpb24gcnVsZXM6PC9wPgogICAgICA8dWw+CiAgICAgIDxsaT5FeHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodDwvbGk+CiAgICAgIDxsaT5CaW5hcnkgYm9vbGVhbiBvcGVyYXRvcnMgKDxjb2RlPiZhbXA7JmFtcDs8L2NvZGU+IGFuZCA8Y29kZT58fDwvY29kZT4pCiAgICAgICAgICBhcmUgc2hvcnQgY2lyY3VpdGVkIHdoZXJldmVyIHBvc3NpYmxlLiBJbiBjb25jbHVzaW9uIHdpdGggdGhlIHJ1bGUKICAgICAgICAgIGFib3ZlIHRoYXQgbWVhbnMsIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfaW5jbHVkZS5odG1sIj5tb2RfaW5jbHVkZTwvYT48L2NvZGU+IGV2YWx1YXRlcyBhdCBmaXJzdAogICAgICAgICAgdGhlIGxlZnQgZXhwcmVzc2lvbi4gSWYgdGhlIGxlZnQgcmVzdWx0IGlzIHN1ZmZpY2llbnQgdG8gZGV0ZXJtaW5lCiAgICAgICAgICB0aGUgZW5kIHJlc3VsdCwgcHJvY2Vzc2luZyBzdG9wcyBoZXJlLiBPdGhlcndpc2UgaXQgZXZhbHVhdGVzIHRoZQogICAgICAgICAgcmlnaHQgc2lkZSBhbmQgY29tcHV0ZXMgdGhlIGVuZCByZXN1bHQgZnJvbSBib3RoIGxlZnQgYW5kIHJpZ2h0CiAgICAgICAgICByZXN1bHRzLjwvbGk+CiAgICAgIDxsaT5TaG9ydCBjaXJjdWl0IGV2YWx1YXRpb24gaXMgdHVybmVkIG9mZiBhcyBsb25nIGFzIHRoZXJlIGFyZSByZWd1bGFyCiAgICAgICAgICBleHByZXNzaW9ucyB0byBkZWFsIHdpdGguIFRoZXNlIG11c3QgYmUgZXZhbHVhdGVkIHRvIGZpbGwgaW4gdGhlCiAgICAgICAgICBiYWNrcmVmZXJlbmNlIHZhcmlhYmxlcyAoPGNvZGU+JDE8L2NvZGU+IC4uIDxjb2RlPiQ5PC9jb2RlPikuPC9saT4KICAgICAgPC91bD4KICAgICAgPHA+SWYgeW91IHdhbnQgdG8gbG9vayBob3cgYSBwYXJ0aWN1bGFyIGV4cHJlc3Npb24gaXMgaGFuZGxlZCwgeW91IGNhbgogICAgICByZWNvbXBpbGUgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9pbmNsdWRlLmh0bWwiPm1vZF9pbmNsdWRlPC9hPjwvY29kZT4gdXNpbmcgdGhlCiAgICAgIDxjb2RlPi1EREVCVUdfSU5DTFVERTwvY29kZT4gY29tcGlsZXIgb3B0aW9uLiBUaGlzIGluc2VydHMgZm9yIGV2ZXJ5CiAgICAgIHBhcnNlZCBleHByZXNzaW9uIHRva2VuaXplciBpbmZvcm1hdGlvbiwgdGhlIHBhcnNlIHRyZWUgYW5kIGhvdyBpdCBpcwogICAgICBldmFsdWF0ZWQgaW50byB0aGUgb3V0cHV0IHNlbnQgdG8gdGhlIGNsaWVudC48L3A+CiAgICA8L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlNTSUVuZFRhZyIgaWQ9IlNTSUVuZFRhZyI+U1NJRW5kVGFnPC9hPiA8YSBuYW1lPSJzc2llbmR0YWciIGlkPSJzc2llbmR0YWciPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlN0cmluZyB0aGF0IGVuZHMgYW4gaW5jbHVkZSBlbGVtZW50PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlNTSUVuZFRhZyA8dmFyPnRhZzwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5TU0lFbmRUYWcgIi0tJmd0OyI8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkJhc2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2luY2x1ZGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD5BdmFpbGFibGUgaW4gdmVyc2lvbiAyLjAuMzAgYW5kIGxhdGVyLjwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoaXMgZGlyZWN0aXZlIGNoYW5nZXMgdGhlIHN0cmluZyB0aGF0IDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfaW5jbHVkZS5odG1sIj5tb2RfaW5jbHVkZTwvYT48L2NvZGU+CiAgICBsb29rcyBmb3IgdG8gbWFyayB0aGUgZW5kIG9mIGFuIGluY2x1ZGUgZWxlbWVudC48L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPkV4YW1wbGU8L2gzPjxwPjxjb2RlPgogICAgICBTU0lFbmRUYWcgIiUmZ3Q7IgogICAgPC9jb2RlPjwvcD48L2Rpdj4KCgo8aDM+U2VlIGFsc288L2gzPgo8dWw+CjxsaT48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjc3Npc3RhcnR0YWciPlNTSVN0YXJ0VGFnPC9hPjwvY29kZT48L2xpPgo8L3VsPgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iU1NJRXJyb3JNc2ciIGlkPSJTU0lFcnJvck1zZyI+U1NJRXJyb3JNc2c8L2E+IDxhIG5hbWU9InNzaWVycm9ybXNnIiBpZD0ic3NpZXJyb3Jtc2ciPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkVycm9yIG1lc3NhZ2UgZGlzcGxheWVkIHdoZW4gdGhlcmUgaXMgYW4gU1NJCmVycm9yPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlNTSUVycm9yTXNnIDx2YXI+bWVzc2FnZTwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5TU0lFcnJvck1zZyAiW2FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHByb2Nlc3NpbmcgdGhpcwpkaXJlY3RpdmVdIjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5BbGw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+QmFzZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfaW5jbHVkZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPkF2YWlsYWJsZSBpbiB2ZXJzaW9uIDIuMC4zMCBhbmQgbGF0ZXIuPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlNTSUVycm9yTXNnPC9jb2RlPiBkaXJlY3RpdmUgY2hhbmdlcyB0aGUgZXJyb3IKICAgIG1lc3NhZ2UgZGlzcGxheWVkIHdoZW4gPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9pbmNsdWRlLmh0bWwiPm1vZF9pbmNsdWRlPC9hPjwvY29kZT4gZW5jb3VudGVycyBhbgogICAgZXJyb3IuIEZvciBwcm9kdWN0aW9uIHNlcnZlcnMgeW91IG1heSBjb25zaWRlciBjaGFuZ2luZyB0aGUgZGVmYXVsdAogICAgZXJyb3IgbWVzc2FnZSB0byA8Y29kZT4iJmx0OyEtLSBFcnJvciAtLSZndDsiPC9jb2RlPiBzbyB0aGF0CiAgICB0aGUgbWVzc2FnZSBpcyBub3QgcHJlc2VudGVkIHRvIHRoZSB1c2VyLjwvcD4KCiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSA8Y29kZT4mbHQ7IS0tI2NvbmZpZwogICAgZXJybXNnPTx2YXI+bWVzc2FnZTwvdmFyPiAtLSZndDs8L2NvZGU+IGVsZW1lbnQuPC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlPC9oMz48cD48Y29kZT4KICAgICAgU1NJRXJyb3JNc2cgIiZsdDshLS0gRXJyb3IgLS0mZ3Q7IgogICAgPC9jb2RlPjwvcD48L2Rpdj4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJTU0lTdGFydFRhZyIgaWQ9IlNTSVN0YXJ0VGFnIj5TU0lTdGFydFRhZzwvYT4gPGEgbmFtZT0ic3Npc3RhcnR0YWciIGlkPSJzc2lzdGFydHRhZyI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+U3RyaW5nIHRoYXQgc3RhcnRzIGFuIGluY2x1ZGUgZWxlbWVudDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5TU0lTdGFydFRhZyA8dmFyPnRhZzwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5TU0lTdGFydFRhZyAiJmx0OyEtLSMiPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5CYXNlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9pbmNsdWRlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTo8L2E+PC90aD48dGQ+QXZhaWxhYmxlIGluIHZlcnNpb24gMi4wLjMwIGFuZCBsYXRlci48L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBjaGFuZ2VzIHRoZSBzdHJpbmcgdGhhdCA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2luY2x1ZGUuaHRtbCI+bW9kX2luY2x1ZGU8L2E+PC9jb2RlPgogICAgbG9va3MgZm9yIHRvIG1hcmsgYW4gaW5jbHVkZSBlbGVtZW50IHRvIHByb2Nlc3MuPC9wPgoKICAgIDxwPllvdSBtYXkgd2FudCB0byB1c2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgMiBzZXJ2ZXJzIHBhcnNpbmcgdGhlCiAgICBvdXRwdXQgb2YgYSBmaWxlIGVhY2ggcHJvY2Vzc2luZyBkaWZmZXJlbnQgY29tbWFuZHMgKHBvc3NpYmx5IGF0CiAgICBkaWZmZXJlbnQgdGltZXMpLjwvcD4gCgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPkV4YW1wbGU8L2gzPjxwPjxjb2RlPgogICAgICBTU0lTdGFydFRhZyAiJmx0OyUiPGJyIC8+CiAgICAgIFNTSUVuZFRhZyAgICIlJmd0OyIKICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+VGhlIGV4YW1wbGUgZ2l2ZW4gYWJvdmUsIHdoaWNoIGFsc28gc3BlY2lmaWVzIGEgbWF0Y2hpbmcKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNzc2llbmR0YWciPlNTSUVuZFRhZzwvYT48L2NvZGU+LCB3aWxsIAogICAgYWxsb3cgeW91IHRvIHVzZSBTU0kgZGlyZWN0aXZlcyBhcyBzaG93biBpbiB0aGUgZXhhbXBsZSAKICAgIGJlbG93OjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+U1NJIGRpcmVjdGl2ZXMgd2l0aCBhbHRlcm5hdGUgc3RhcnQgYW5kIGVuZCB0YWdzPC9oMz48cD48Y29kZT4KICAgICAgJmx0OyVwcmludGVudiAlJmd0OwogICAgPC9jb2RlPjwvcD48L2Rpdj4KCjxoMz5TZWUgYWxzbzwvaDM+Cjx1bD4KPGxpPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNzc2llbmR0YWciPlNTSUVuZFRhZzwvYT48L2NvZGU+PC9saT4KPC91bD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlNTSVRpbWVGb3JtYXQiIGlkPSJTU0lUaW1lRm9ybWF0Ij5TU0lUaW1lRm9ybWF0PC9hPiA8YSBuYW1lPSJzc2l0aW1lZm9ybWF0IiBpZD0ic3NpdGltZWZvcm1hdCI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+Q29uZmlndXJlcyB0aGUgZm9ybWF0IGluIHdoaWNoIGRhdGUgc3RyaW5ncyBhcmUKZGlzcGxheWVkPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlNTSVRpbWVGb3JtYXQgPHZhcj5mb3JtYXRzdHJpbmc8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+U1NJVGltZUZvcm1hdCAiJUEsICVkLSViLSVZICVIOiVNOiVTICVaIjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5BbGw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+QmFzZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfaW5jbHVkZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPkF2YWlsYWJsZSBpbiB2ZXJzaW9uIDIuMC4zMCBhbmQgbGF0ZXIuPC90ZD48L3RyPgo8L3RhYmxlPgo8cD5UaGlzIGRpcmVjdGl2ZSBjaGFuZ2VzIHRoZSBmb3JtYXQgaW4gd2hpY2ggZGF0ZSBzdHJpbmdzIGFyZSBkaXNwbGF5ZWQgCiAgICB3aGVuIGVjaG9pbmcgPGNvZGU+REFURTwvY29kZT4gZW52aXJvbm1lbnQgdmFyaWFibGVzLiBUaGUKICAgIDx2YXI+Zm9ybWF0c3RyaW5nPC92YXI+IGlzIGFzIGluIDxjb2RlPnN0cmZ0aW1lKDMpPC9jb2RlPiBmcm9tIHRoZQogICAgQyBzdGFuZGFyZCBsaWJyYXJ5LjwvcD4KCiAgICA8cD5UaGlzIGRpcmVjdGl2ZSBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHRoZSA8Y29kZT4mbHQ7IS0tI2NvbmZpZwogICAgdGltZWZtdD08dmFyPmZvcm1hdHN0cmluZzwvdmFyPiAtLSZndDs8L2NvZGU+IGVsZW1lbnQuPC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlPC9oMz48cD48Y29kZT4KICAgICAgU1NJVGltZUZvcm1hdCAiJVIsICVCICVkLCAlWSIKICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+VGhlIGFib3ZlIGRpcmVjdGl2ZSB3b3VsZCBjYXVzZSB0aW1lcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlCiAgICBmb3JtYXQgIjIyOjI2LCBKdW5lIDE0LCAyMDAyIi48L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iU1NJVW5kZWZpbmVkRWNobyIgaWQ9IlNTSVVuZGVmaW5lZEVjaG8iPlNTSVVuZGVmaW5lZEVjaG88L2E+IDxhIG5hbWU9InNzaXVuZGVmaW5lZGVjaG8iIGlkPSJzc2l1bmRlZmluZWRlY2hvIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5TdHJpbmcgZGlzcGxheWVkIHdoZW4gYW4gdW5zZXQgdmFyaWFibGUgaXMgZWNob2VkPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlNTSVVuZGVmaW5lZEVjaG8gPHZhcj5zdHJpbmc8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+U1NJVW5kZWZpbmVkRWNobyAiKG5vbmUpIjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPk92ZXJyaWRlOjwvYT48L3RoPjx0ZD5BbGw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+QmFzZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfaW5jbHVkZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPkF2YWlsYWJsZSBpbiB2ZXJzaW9uIDIuMC4zNCBhbmQgbGF0ZXIuPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgY2hhbmdlcyB0aGUgc3RyaW5nIHRoYXQgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9pbmNsdWRlLmh0bWwiPm1vZF9pbmNsdWRlPC9hPjwvY29kZT4KICAgIGRpc3BsYXlzIHdoZW4gYSB2YXJpYWJsZSBpcyBub3Qgc2V0IGFuZCAiZWNob2VkIi48L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPkV4YW1wbGU8L2gzPjxwPjxjb2RlPgogICAgICBTU0lVbmRlZmluZWRFY2hvICImbHQ7IS0tIHVuZGVmIC0tJmd0OyIKICAgIDwvY29kZT48L3A+PC9kaXY+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iWEJpdEhhY2siIGlkPSJYQml0SGFjayI+WEJpdEhhY2s8L2E+IDxhIG5hbWU9InhiaXRoYWNrIiBpZD0ieGJpdGhhY2siPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlBhcnNlIFNTSSBkaXJlY3RpdmVzIGluIGZpbGVzIHdpdGggdGhlIGV4ZWN1dGUgYml0CnNldDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5YQml0SGFjayBvbnxvZmZ8ZnVsbDwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5YQml0SGFjayBvZmY8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0LCBkaXJlY3RvcnksIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI092ZXJyaWRlIj5PdmVycmlkZTo8L2E+PC90aD48dGQ+T3B0aW9uczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5CYXNlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9pbmNsdWRlPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlhCaXRIYWNrPC9jb2RlPiBkaXJlY3RpdmUgY29udHJvbHMgdGhlIHBhcnNpbmcKICAgIG9mIG9yZGluYXJ5IGh0bWwgZG9jdW1lbnRzLiBUaGlzIGRpcmVjdGl2ZSBvbmx5IGFmZmVjdHMgZmlsZXMgYXNzb2NpYXRlZAogICAgd2l0aCB0aGUgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCNtaW1lLXR5cGUiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPk1JTUUtdHlwZTwvYT4gPGNvZGU+dGV4dC9odG1sPC9jb2RlPi4gPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+WEJpdEhhY2s8L2NvZGU+IGNhbiB0YWtlIG9uIHRoZSBmb2xsb3dpbmcgdmFsdWVzOjwvcD4KCiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT5vZmY8L2NvZGU+PC9kdD4KICAgICAgPGRkPk5vIHNwZWNpYWwgdHJlYXRtZW50IG9mIGV4ZWN1dGFibGUgZmlsZXMuPC9kZD4KCiAgICAgIDxkdD48Y29kZT5vbjwvY29kZT48L2R0PgogICAgICA8ZGQ+QW55IDxjb2RlPnRleHQvaHRtbDwvY29kZT4gZmlsZSB0aGF0IGhhcyB0aGUgdXNlci1leGVjdXRlIGJpdAogICAgICBzZXQgd2lsbCBiZSB0cmVhdGVkIGFzIGEgc2VydmVyLXBhcnNlZCBodG1sIGRvY3VtZW50LjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+ZnVsbDwvY29kZT48L2R0PgogICAgICA8ZGQ+QXMgZm9yIDxjb2RlPm9uPC9jb2RlPiBidXQgYWxzbyB0ZXN0IHRoZSBncm91cC1leGVjdXRlIGJpdC4KICAgICAgSWYgaXQgaXMgc2V0LCB0aGVuIHNldCB0aGUgPGNvZGU+TGFzdC1tb2RpZmllZDwvY29kZT4gZGF0ZSBvZiB0aGUKICAgICAgcmV0dXJuZWQgZmlsZSB0byBiZSB0aGUgbGFzdCBtb2RpZmllZCB0aW1lIG9mIHRoZSBmaWxlLiBJZgogICAgICBpdCBpcyBub3Qgc2V0LCB0aGVuIG5vIGxhc3QtbW9kaWZpZWQgZGF0ZSBpcyBzZW50LiBTZXR0aW5nCiAgICAgIHRoaXMgYml0IGFsbG93cyBjbGllbnRzIGFuZCBwcm94aWVzIHRvIGNhY2hlIHRoZSByZXN1bHQgb2YKICAgICAgdGhlIHJlcXVlc3QuIAoKICAgICAgPGRpdiBjbGFzcz0ibm90ZSI+PGgzPk5vdGU8L2gzPgogICAgICA8cD5Zb3Ugd291bGQgbm90IHdhbnQgdG8gdXNlIHRoZSBmdWxsIG9wdGlvbiwgdW5sZXNzIHlvdSBhc3N1cmUgdGhlCiAgICAgIGdyb3VwLWV4ZWN1dGUgYml0IGlzIHVuc2V0IGZvciBldmVyeSBTU0kgc2NyaXB0IHdoaWNoIG1pZ2h0IDxjb2RlPiNpbmNsdWRlPC9jb2RlPiBhIENHSSBvciBvdGhlcndpc2UgcHJvZHVjZXMgZGlmZmVyZW50IG91dHB1dCBvbgogICAgICBlYWNoIGhpdCAob3IgY291bGQgcG90ZW50aWFsbHkgY2hhbmdlIG9uIHN1YnNlcXVlbnQgcmVxdWVzdHMpLjwvcD4KICAgICAgPC9kaXY+CiAgICAgIDwvZGQ+CiAgICA8L2RsPgoKICAgIAo8L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9ImJvdHRvbWxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vbW9kL21vZF9pbmNsdWRlLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9qYS9tb2QvbW9kX2luY2x1ZGUuaHRtbCIgaHJlZmxhbmc9ImphIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkphcGFuZXNlIj4mbmJzcDtqYSZuYnNwOzwvYT48L3A+CjwvZGl2PjxkaXYgaWQ9ImZvb3RlciI+CjxwIGNsYXNzPSJhcGFjaGUiPkNvcHlyaWdodCAxOTk1LTIwMDUgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG9yIGl0cyBsaWNlbnNvcnMsIGFzIGFwcGxpY2FibGUuPGJyIC8+TGljZW5zZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wPC9hPi48L3A+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9kaXJlY3RpdmVzLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iLi4vZmFxLyI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+PC9kaXY+CjwvYm9keT48L2h0bWw+