PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPG1ldGEgY29udGVudD0ibm9pbmRleCwgbm9mb2xsb3ciIG5hbWU9InJvYm90cyIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5BbiBJbi1EZXB0aCBEaXNjdXNzaW9uIG9mIFZpcnR1YWwgSG9zdCBNYXRjaGluZyAtIEFwYWNoZSBIVFRQIFNlcnZlcjwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+CjxsaW5rIGhyZWY9Ii4uL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjxsaW5rIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvY3VycmVudC92aG9zdHMvZGV0YWlscy5odG1sIiByZWw9ImNhbm9uaWNhbCIgLz48L2hlYWQ+Cjxib2R5IGlkPSJtYW51YWwtcGFnZSI+PGRpdiBpZD0icGFnZS1oZWFkZXIiPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Ii4uL2ZhcS8iPkZBUTwvYT4gfCA8YSBocmVmPSIuLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FyeTwvYT4gfCA8YSBocmVmPSIuLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPgo8cCBjbGFzcz0iYXBhY2hlIj5BcGFjaGUgSFRUUCBTZXJ2ZXIgVmVyc2lvbiAyLjA8L3A+CjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2ZlYXRoZXIuZ2lmIiAvPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ1cCI+PGEgaHJlZj0iLi8iPjxpbWcgdGl0bGU9IiZsdDstIiBhbHQ9IiZsdDstIiBzcmM9Ii4uL2ltYWdlcy9sZWZ0LmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgaWQ9InBhdGgiPgo8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvIj5BcGFjaGU8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvIj5IVFRQIFNlcnZlcjwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLyI+RG9jdW1lbnRhdGlvbjwvYT4gJmd0OyA8YSBocmVmPSIuLi8iPlZlcnNpb24gMi4wPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4vIj5WaXJ0dWFsIEhvc3RzPC9hPjwvZGl2PjxkaXYgaWQ9InBhZ2UtY29udGVudCI+PGRpdiBjbGFzcz0icmV0aXJlZCI+PGg0PlBsZWFzZSBub3RlPC9oND4KICAgICAgICAgICAgPHA+VGhpcyBkb2N1bWVudCByZWZlcnMgdG8gdGhlIDxzdHJvbmc+Mi4wPC9zdHJvbmc+IHZlcnNpb24gb2YgQXBhY2hlIGh0dHBkLCB3aGljaCA8c3Ryb25nPmlzIG5vIGxvbmdlciBtYWludGFpbmVkPC9zdHJvbmc+LiBVcGdyYWRlLCBhbmQgcmVmZXIgdG8gdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBodHRwZCBpbnN0ZWFkLCBkb2N1bWVudGVkIGF0OjwvcD4KICAgICAgICA8dWw+PGxpPjxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvY3VycmVudC8iPkN1cnJlbnQgcmVsZWFzZSB2ZXJzaW9uIG9mIEFwYWNoZSBIVFRQIFNlcnZlciBkb2N1bWVudGF0aW9uPC9hPjwvbGk+PC91bD48cD5Zb3UgbWF5IGZvbGxvdyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzL2N1cnJlbnQvdmhvc3RzL2RldGFpbHMuaHRtbCI+dGhpcyBsaW5rPC9hPiB0byBnbyB0byB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQuPC9wPjwvZGl2PjxkaXYgaWQ9InByZWFtYmxlIj48aDE+QW4gSW4tRGVwdGggRGlzY3Vzc2lvbiBvZiBWaXJ0dWFsIEhvc3QgTWF0Y2hpbmc8L2gxPgo8ZGl2IGNsYXNzPSJ0b3BsYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL3Zob3N0cy9kZXRhaWxzLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9rby92aG9zdHMvZGV0YWlscy5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi90ci92aG9zdHMvZGV0YWlscy5odG1sIiBocmVmbGFuZz0idHIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iVPxya+dlIj4mbmJzcDt0ciZuYnNwOzwvYT48L3A+CjwvZGl2PgoKCiAgICA8cD5UaGUgdmlydHVhbCBob3N0IGNvZGUgd2FzIGNvbXBsZXRlbHkgcmV3cml0dGVuIGluCiAgICA8c3Ryb25nPkFwYWNoZSAxLjM8L3N0cm9uZz4uIFRoaXMgZG9jdW1lbnQgYXR0ZW1wdHMgdG8gZXhwbGFpbgogICAgZXhhY3RseSB3aGF0IEFwYWNoZSBkb2VzIHdoZW4gZGVjaWRpbmcgd2hhdCB2aXJ0dWFsIGhvc3QgdG8KICAgIHNlcnZlIGEgaGl0IGZyb20uIFdpdGggdGhlIGhlbHAgb2YgdGhlIG5ldwogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNuYW1ldmlydHVhbGhvc3QiPk5hbWVWaXJ0dWFsSG9zdDwvYT48L2NvZGU+CiAgICBkaXJlY3RpdmUgdmlydHVhbCBob3N0IGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIGEgbG90IGVhc2llciBhbmQKICAgIHNhZmVyIHRoYW4gd2l0aCB2ZXJzaW9ucyBwcmlvciB0byAxLjMuPC9wPgoKICAgIDxwPklmIHlvdSBqdXN0IHdhbnQgdG8gPGNpdGU+bWFrZSBpdCB3b3JrPC9jaXRlPiB3aXRob3V0CiAgICB1bmRlcnN0YW5kaW5nIGhvdywgaGVyZSBhcmUgPGEgaHJlZj0iZXhhbXBsZXMuaHRtbCI+c29tZQogICAgZXhhbXBsZXM8L2E+LjwvcD4KCjwvZGl2Pgo8ZGl2IGlkPSJxdWlja3ZpZXciPjx1bCBpZD0idG9jIj48bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNjb25maWdwYXJzaW5nIj5Db25maWcgRmlsZSBQYXJzaW5nPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2hvc3RtYXRjaGluZyI+VmlydHVhbCBIb3N0IE1hdGNoaW5nPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3RpcHMiPlRpcHM8L2E+PC9saT4KPC91bD48L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iY29uZmlncGFyc2luZyIgaWQ9ImNvbmZpZ3BhcnNpbmciPkNvbmZpZyBGaWxlIFBhcnNpbmc8L2E+PC9oMj4KCiAgICA8cD5UaGVyZSBpcyBhIDxlbT5tYWluX3NlcnZlcjwvZW0+IHdoaWNoIGNvbnNpc3RzIG9mIGFsbCB0aGUKICAgIGRlZmluaXRpb25zIGFwcGVhcmluZyBvdXRzaWRlIG9mCiAgICA8Y29kZT4mbHQ7VmlydHVhbEhvc3QmZ3Q7PC9jb2RlPiBzZWN0aW9ucy4gVGhlcmUgYXJlIHZpcnR1YWwKICAgIHNlcnZlcnMsIGNhbGxlZCA8ZW0+dmhvc3RzPC9lbT4sIHdoaWNoIGFyZSBkZWZpbmVkIGJ5CiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI3ZpcnR1YWxob3N0Ij4mbHQ7VmlydHVhbEhvc3QmZ3Q7PC9hPjwvY29kZT4KICAgIHNlY3Rpb25zLjwvcD4KCiAgICA8cD5UaGUgZGlyZWN0aXZlcwogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21wbV9jb21tb24uaHRtbCNsaXN0ZW4iPkxpc3RlbjwvYT48L2NvZGU+LAogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNzZXJ2ZXJuYW1lIj5TZXJ2ZXJOYW1lPC9hPjwvY29kZT4sCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI3NlcnZlcnBhdGgiPlNlcnZlclBhdGg8L2E+PC9jb2RlPiwKICAgIGFuZCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI3NlcnZlcmFsaWFzIj5TZXJ2ZXJBbGlhczwvYT48L2NvZGU+CiAgICBjYW4gYXBwZWFyIGFueXdoZXJlIHdpdGhpbiB0aGUgZGVmaW5pdGlvbiBvZiBhIHNlcnZlci4gSG93ZXZlciwKICAgIGVhY2ggYXBwZWFyYW5jZSBvdmVycmlkZXMgdGhlIHByZXZpb3VzIGFwcGVhcmFuY2UgKHdpdGhpbiB0aGF0CiAgICBzZXJ2ZXIpLjwvcD4KCiAgICA8cD5UaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgPGNvZGU+TGlzdGVuPC9jb2RlPiBmaWVsZCBmb3IKICAgIG1haW5fc2VydmVyIGlzIDgwLiBUaGUgbWFpbl9zZXJ2ZXIgaGFzIG5vIGRlZmF1bHQKICAgIDxjb2RlPlNlcnZlclBhdGg8L2NvZGU+LCBvciA8Y29kZT5TZXJ2ZXJBbGlhczwvY29kZT4uIFRoZQogICAgZGVmYXVsdCA8Y29kZT5TZXJ2ZXJOYW1lPC9jb2RlPiBpcyBkZWR1Y2VkIGZyb20gdGhlIHNlcnZlcidzIElQCiAgICBhZGRyZXNzLjwvcD4KCiAgICA8cD5UaGUgbWFpbl9zZXJ2ZXIgTGlzdGVuIGRpcmVjdGl2ZSBoYXMgdHdvIGZ1bmN0aW9ucy4gIE9uZQogICAgZnVuY3Rpb24gaXMgdG8gZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IG5ldHdvcmsgcG9ydCBBcGFjaGUgd2lsbAogICAgYmluZCB0by4gIFRoZSBzZWNvbmQgZnVuY3Rpb24gaXMgdG8gc3BlY2lmeSB0aGUgcG9ydCBudW1iZXIKICAgIHdoaWNoIGlzIHVzZWQgaW4gYWJzb2x1dGUgVVJJcyBkdXJpbmcgcmVkaXJlY3RzLjwvcD4KCiAgICA8cD5Vbmxpa2UgdGhlIG1haW5fc2VydmVyLCB2aG9zdCBwb3J0cyA8ZW0+ZG8gbm90PC9lbT4gYWZmZWN0CiAgICB3aGF0IHBvcnRzIEFwYWNoZSBsaXN0ZW5zIGZvciBjb25uZWN0aW9ucyBvbi48L3A+CgogICAgPHA+RWFjaCBhZGRyZXNzIGFwcGVhcmluZyBpbiB0aGUgPGNvZGU+VmlydHVhbEhvc3Q8L2NvZGU+CiAgICBkaXJlY3RpdmUgY2FuIGhhdmUgYW4gb3B0aW9uYWwgcG9ydC4gSWYgdGhlIHBvcnQgaXMgdW5zcGVjaWZpZWQKICAgIGl0IGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiB0aGUgbWFpbl9zZXJ2ZXIncyBtb3N0IHJlY2VudAogICAgPGNvZGU+TGlzdGVuPC9jb2RlPiBzdGF0ZW1lbnQuIFRoZSBzcGVjaWFsIHBvcnQgPGNvZGU+KjwvY29kZT4KICAgIGluZGljYXRlcyBhIHdpbGRjYXJkIHRoYXQgbWF0Y2hlcyBhbnkgcG9ydC4gQ29sbGVjdGl2ZWx5IHRoZQogICAgZW50aXJlIHNldCBvZiBhZGRyZXNzZXMgKGluY2x1ZGluZyBtdWx0aXBsZSA8Y29kZT5BPC9jb2RlPgogICAgcmVjb3JkIHJlc3VsdHMgZnJvbSBETlMgbG9va3VwcykgYXJlIGNhbGxlZCB0aGUgdmhvc3QncwogICAgPGVtPmFkZHJlc3Mgc2V0PC9lbT4uPC9wPgoKICAgIDxwPlVubGVzcyBhIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjbmFtZXZpcnR1YWxob3N0Ij5OYW1lVmlydHVhbEhvc3Q8L2E+PC9jb2RlPgogICAgZGlyZWN0aXZlIGlzIHVzZWQgZm9yIGEgc3BlY2lmaWMgSVAgYWRkcmVzcyB0aGUgZmlyc3Qgdmhvc3QKICAgIHdpdGggdGhhdCBhZGRyZXNzIGlzIHRyZWF0ZWQgYXMgYW4gSVAtYmFzZWQgdmhvc3QuIFRoZSBJUAogICAgYWRkcmVzcyBjYW4gYWxzbyBiZSB0aGUgd2lsZGNhcmQgPGNvZGU+KjwvY29kZT4uPC9wPgoKICAgIDxwPklmIG5hbWUtYmFzZWQgdmhvc3RzIHNob3VsZCBiZSB1c2VkIGEKICAgIDxjb2RlPk5hbWVWaXJ0dWFsSG9zdDwvY29kZT4gZGlyZWN0aXZlIDxlbT5tdXN0PC9lbT4gYXBwZWFyCiAgICB3aXRoIHRoZSBJUCBhZGRyZXNzIHNldCB0byBiZSB1c2VkIGZvciB0aGUgbmFtZS1iYXNlZCB2aG9zdHMuCiAgICBJbiBvdGhlciB3b3JkcywgeW91IG11c3Qgc3BlY2lmeSB0aGUgSVAgYWRkcmVzcyB0aGF0IGhvbGRzIHRoZQogICAgaG9zdG5hbWUgYWxpYXNlcyAoQ05BTUVzKSBmb3IgeW91ciBuYW1lLWJhc2VkIHZob3N0cyB2aWEgYQogICAgPGNvZGU+TmFtZVZpcnR1YWxIb3N0PC9jb2RlPiBkaXJlY3RpdmUgaW4geW91ciBjb25maWd1cmF0aW9uCiAgICBmaWxlLjwvcD4KCiAgICA8cD5NdWx0aXBsZSA8Y29kZT5OYW1lVmlydHVhbEhvc3Q8L2NvZGU+IGRpcmVjdGl2ZXMgY2FuIGJlIHVzZWQKICAgIGVhY2ggd2l0aCBhIHNldCBvZiA8Y29kZT5WaXJ0dWFsSG9zdDwvY29kZT4gZGlyZWN0aXZlcyBidXQgb25seQogICAgb25lIDxjb2RlPk5hbWVWaXJ0dWFsSG9zdDwvY29kZT4gZGlyZWN0aXZlIHNob3VsZCBiZSB1c2VkIGZvcgogICAgZWFjaCBzcGVjaWZpYyBJUDpwb3J0IHBhaXIuPC9wPgoKICAgIDxwPlRoZSBvcmRlcmluZyBvZiA8Y29kZT5OYW1lVmlydHVhbEhvc3Q8L2NvZGU+IGFuZAogICAgPGNvZGU+VmlydHVhbEhvc3Q8L2NvZGU+IGRpcmVjdGl2ZXMgaXMgbm90IGltcG9ydGFudCB3aGljaAogICAgbWFrZXMgdGhlIGZvbGxvd2luZyB0d28gZXhhbXBsZXMgaWRlbnRpY2FsIChvbmx5IHRoZSBvcmRlciBvZgogICAgdGhlIDxjb2RlPlZpcnR1YWxIb3N0PC9jb2RlPiBkaXJlY3RpdmVzIGZvciA8ZW0+b25lPC9lbT4KICAgIGFkZHJlc3Mgc2V0IGlzIGltcG9ydGFudCwgc2VlIGJlbG93KTo8L3A+Cgo8dGFibGU+PHRyPgo8dGQ+PGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgTmFtZVZpcnR1YWxIb3N0IDExMS4yMi4zMy40NDxiciAvPgogICZsdDtWaXJ0dWFsSG9zdCAxMTEuMjIuMzMuNDQmZ3Q7PGJyIC8+CiAgIyBzZXJ2ZXIgQTxiciAvPgogIC4uLjxiciAvPgogICZsdDsvVmlydHVhbEhvc3QmZ3Q7PGJyIC8+CiAgJmx0O1ZpcnR1YWxIb3N0IDExMS4yMi4zMy40NCZndDs8YnIgLz4KICAjIHNlcnZlciBCPGJyIC8+CiAgLi4uPGJyIC8+CiAgJmx0Oy9WaXJ0dWFsSG9zdCZndDs8YnIgLz4KICA8YnIgLz4KICBOYW1lVmlydHVhbEhvc3QgMTExLjIyLjMzLjU1PGJyIC8+CiAgJmx0O1ZpcnR1YWxIb3N0IDExMS4yMi4zMy41NSZndDs8YnIgLz4KICAjIHNlcnZlciBDPGJyIC8+CiAgLi4uPGJyIC8+CiAgJmx0Oy9WaXJ0dWFsSG9zdCZndDs8YnIgLz4KICAmbHQ7VmlydHVhbEhvc3QgMTExLjIyLjMzLjU1Jmd0OzxiciAvPgogICMgc2VydmVyIEQ8YnIgLz4KICAuLi48YnIgLz4KICAmbHQ7L1ZpcnR1YWxIb3N0Jmd0Owo8L2NvZGU+PC9wPjwvZGl2PjwvdGQ+Cjx0ZD48ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAmbHQ7VmlydHVhbEhvc3QgMTExLjIyLjMzLjQ0Jmd0OzxiciAvPgogICMgc2VydmVyIEE8YnIgLz4KICAmbHQ7L1ZpcnR1YWxIb3N0Jmd0OzxiciAvPgogICZsdDtWaXJ0dWFsSG9zdCAxMTEuMjIuMzMuNTUmZ3Q7PGJyIC8+CiAgIyBzZXJ2ZXIgQzxiciAvPgogIC4uLjxiciAvPgogICZsdDsvVmlydHVhbEhvc3QmZ3Q7PGJyIC8+CiAgJmx0O1ZpcnR1YWxIb3N0IDExMS4yMi4zMy40NCZndDs8YnIgLz4KICAjIHNlcnZlciBCPGJyIC8+CiAgLi4uPGJyIC8+CiAgJmx0Oy9WaXJ0dWFsSG9zdCZndDs8YnIgLz4KICAmbHQ7VmlydHVhbEhvc3QgMTExLjIyLjMzLjU1Jmd0OzxiciAvPgogICMgc2VydmVyIEQ8YnIgLz4KICAuLi48YnIgLz4KICAmbHQ7L1ZpcnR1YWxIb3N0Jmd0OzxiciAvPgogIDxiciAvPgogIE5hbWVWaXJ0dWFsSG9zdCAxMTEuMjIuMzMuNDQ8YnIgLz4KICBOYW1lVmlydHVhbEhvc3QgMTExLjIyLjMzLjU1PGJyIC8+CiAgPGJyIC8+CjwvY29kZT48L3A+PC9kaXY+PC90ZD4KPC90cj48L3RhYmxlPgoKCiAgICA8cD4oVG8gYWlkIHRoZSByZWFkYWJpbGl0eSBvZiB5b3VyIGNvbmZpZ3VyYXRpb24geW91IHNob3VsZAogICAgcHJlZmVyIHRoZSBsZWZ0IHZhcmlhbnQuKTwvcD4KCiAgICA8cD5BZnRlciBwYXJzaW5nIHRoZSA8Y29kZT5WaXJ0dWFsSG9zdDwvY29kZT4gZGlyZWN0aXZlLCB0aGUKICAgIHZob3N0IHNlcnZlciBpcyBnaXZlbiBhIGRlZmF1bHQgPGNvZGU+TGlzdGVuPC9jb2RlPiBlcXVhbCB0byB0aGUKICAgIHBvcnQgYXNzaWduZWQgdG8gdGhlIGZpcnN0IG5hbWUgaW4gaXRzIDxjb2RlPlZpcnR1YWxIb3N0PC9jb2RlPgogICAgZGlyZWN0aXZlLjwvcD4KCiAgICA8cD5UaGUgY29tcGxldGUgbGlzdCBvZiBuYW1lcyBpbiB0aGUgPGNvZGU+VmlydHVhbEhvc3Q8L2NvZGU+CiAgICBkaXJlY3RpdmUgYXJlIHRyZWF0ZWQganVzdCBsaWtlIGEgPGNvZGU+U2VydmVyQWxpYXM8L2NvZGU+IChidXQKICAgIGFyZSBub3Qgb3ZlcnJpZGRlbiBieSBhbnkgPGNvZGU+U2VydmVyQWxpYXM8L2NvZGU+IHN0YXRlbWVudCkKICAgIGlmIGFsbCBuYW1lcyByZXNvbHZlIHRvIHRoZSBzYW1lIGFkZHJlc3Mgc2V0LiBOb3RlIHRoYXQKICAgIHN1YnNlcXVlbnQgPGNvZGU+TGlzdGVuPC9jb2RlPiBzdGF0ZW1lbnRzIGZvciB0aGlzIHZob3N0IHdpbGwgbm90CiAgICBhZmZlY3QgdGhlIHBvcnRzIGFzc2lnbmVkIGluIHRoZSBhZGRyZXNzIHNldC48L3A+CgogICAgPHA+RHVyaW5nIGluaXRpYWxpemF0aW9uIGEgbGlzdCBmb3IgZWFjaCBJUCBhZGRyZXNzIGlzCiAgICBnZW5lcmF0ZWQgYW5kIGluc2VydGVkIGludG8gYW4gaGFzaCB0YWJsZS4gSWYgdGhlIElQIGFkZHJlc3MgaXMKICAgIHVzZWQgaW4gYSA8Y29kZT5OYW1lVmlydHVhbEhvc3Q8L2NvZGU+IGRpcmVjdGl2ZSB0aGUgbGlzdAogICAgY29udGFpbnMgYWxsIG5hbWUtYmFzZWQgdmhvc3RzIGZvciB0aGUgZ2l2ZW4gSVAgYWRkcmVzcy4gSWYKICAgIHRoZXJlIGFyZSBubyB2aG9zdHMgZGVmaW5lZCBmb3IgdGhhdCBhZGRyZXNzIHRoZQogICAgPGNvZGU+TmFtZVZpcnR1YWxIb3N0PC9jb2RlPiBkaXJlY3RpdmUgaXMgaWdub3JlZCBhbmQgYW4gZXJyb3IKICAgIGlzIGxvZ2dlZC4gRm9yIGFuIElQLWJhc2VkIHZob3N0IHRoZSBsaXN0IGluIHRoZSBoYXNoIHRhYmxlIGlzCiAgICBlbXB0eS48L3A+CgogICAgPHA+RHVlIHRvIGEgZmFzdCBoYXNoaW5nIGZ1bmN0aW9uIHRoZSBvdmVyaGVhZCBvZiBoYXNoaW5nIGFuIElQCiAgICBhZGRyZXNzIGR1cmluZyBhIHJlcXVlc3QgaXMgbWluaW1hbCBhbmQgYWxtb3N0IG5vdCBleGlzdGVudC4KICAgIEFkZGl0aW9uYWxseSB0aGUgdGFibGUgaXMgb3B0aW1pemVkIGZvciBJUCBhZGRyZXNzZXMgd2hpY2ggdmFyeQogICAgaW4gdGhlIGxhc3Qgb2N0ZXQuPC9wPgoKICAgIDxwPkZvciBldmVyeSB2aG9zdCB2YXJpb3VzIGRlZmF1bHQgdmFsdWVzIGFyZSBzZXQuIEluCiAgICBwYXJ0aWN1bGFyOjwvcD4KCiAgICA8b2w+CiAgICAgIDxsaT5JZiBhIHZob3N0IGhhcyBubyA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI3NlcnZlcmFkbWluIj5TZXJ2ZXJBZG1pbjwvYT48L2NvZGU+LAogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI3RpbWVvdXQiPlRpbWVvdXQ8L2E+PC9jb2RlPiwKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNrZWVwYWxpdmV0aW1lb3V0Ij5LZWVwQWxpdmVUaW1lb3V0PC9hPjwvY29kZT4sCiAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwja2VlcGFsaXZlIj5LZWVwQWxpdmU8L2E+PC9jb2RlPiwKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNtYXhrZWVwYWxpdmVyZXF1ZXN0cyI+TWF4S2VlcEFsaXZlUmVxdWVzdHM8L2E+PC9jb2RlPiwKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNyZWNlaXZlYnVmZmVyc2l6ZSI+UmVjZWl2ZUJ1ZmZlclNpemU8L2E+PC9jb2RlPiwKICAgICAgb3IgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNzZW5kYnVmZmVyc2l6ZSI+U2VuZEJ1ZmZlclNpemU8L2E+PC9jb2RlPgogICAgICBkaXJlY3RpdmUgdGhlbiB0aGUgcmVzcGVjdGl2ZSB2YWx1ZSBpcyBpbmhlcml0ZWQgZnJvbSB0aGUKICAgICAgbWFpbl9zZXJ2ZXIuIChUaGF0IGlzLCBpbmhlcml0ZWQgZnJvbSB3aGF0ZXZlciB0aGUgZmluYWwKICAgICAgc2V0dGluZyBvZiB0aGF0IHZhbHVlIGlzIGluIHRoZSBtYWluX3NlcnZlci4pPC9saT4KCiAgICAgIDxsaT5UaGUgImxvb2t1cCBkZWZhdWx0cyIgdGhhdCBkZWZpbmUgdGhlIGRlZmF1bHQgZGlyZWN0b3J5CiAgICAgIHBlcm1pc3Npb25zIGZvciBhIHZob3N0IGFyZSBtZXJnZWQgd2l0aCB0aG9zZSBvZiB0aGUKICAgICAgbWFpbl9zZXJ2ZXIuIFRoaXMgaW5jbHVkZXMgYW55IHBlci1kaXJlY3RvcnkgY29uZmlndXJhdGlvbgogICAgICBpbmZvcm1hdGlvbiBmb3IgYW55IG1vZHVsZS48L2xpPgoKICAgICAgPGxpPlRoZSBwZXItc2VydmVyIGNvbmZpZ3MgZm9yIGVhY2ggbW9kdWxlIGZyb20gdGhlCiAgICAgIG1haW5fc2VydmVyIGFyZSBtZXJnZWQgaW50byB0aGUgdmhvc3Qgc2VydmVyLjwvbGk+CiAgICA8L29sPgoKICAgIDxwPkVzc2VudGlhbGx5LCB0aGUgbWFpbl9zZXJ2ZXIgaXMgdHJlYXRlZCBhcyAiZGVmYXVsdHMiIG9yIGEKICAgICJiYXNlIiBvbiB3aGljaCB0byBidWlsZCBlYWNoIHZob3N0LiBCdXQgdGhlIHBvc2l0aW9uaW5nIG9mCiAgICB0aGVzZSBtYWluX3NlcnZlciBkZWZpbml0aW9ucyBpbiB0aGUgY29uZmlnIGZpbGUgaXMgbGFyZ2VseQogICAgaXJyZWxldmFudCAtLSB0aGUgZW50aXJlIGNvbmZpZyBvZiB0aGUgbWFpbl9zZXJ2ZXIgaGFzIGJlZW4KICAgIHBhcnNlZCB3aGVuIHRoaXMgZmluYWwgbWVyZ2luZyBvY2N1cnMuIFNvIGV2ZW4gaWYgYSBtYWluX3NlcnZlcgogICAgZGVmaW5pdGlvbiBhcHBlYXJzIGFmdGVyIGEgdmhvc3QgZGVmaW5pdGlvbiBpdCBtaWdodCBhZmZlY3QgdGhlCiAgICB2aG9zdCBkZWZpbml0aW9uLjwvcD4KCiAgICA8cD5JZiB0aGUgbWFpbl9zZXJ2ZXIgaGFzIG5vIDxjb2RlPlNlcnZlck5hbWU8L2NvZGU+IGF0IHRoaXMKICAgIHBvaW50LCB0aGVuIHRoZSBob3N0bmFtZSBvZiB0aGUgbWFjaGluZSB0aGF0IDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9odHRwZC5odG1sIj5odHRwZDwvYT48L2NvZGU+CiAgICBpcyBydW5uaW5nIG9uIGlzIHVzZWQgaW5zdGVhZC4gV2Ugd2lsbCBjYWxsIHRoZSA8ZW0+bWFpbl9zZXJ2ZXIgYWRkcmVzcwogICAgc2V0PC9lbT4gdGhvc2UgSVAgYWRkcmVzc2VzIHJldHVybmVkIGJ5IGEgRE5TIGxvb2t1cCBvbiB0aGUKICAgIDxjb2RlPlNlcnZlck5hbWU8L2NvZGU+IG9mIHRoZSBtYWluX3NlcnZlci48L3A+CgogICAgPHA+Rm9yIGFueSB1bmRlZmluZWQgPGNvZGU+U2VydmVyTmFtZTwvY29kZT4gZmllbGRzLCBhCiAgICBuYW1lLWJhc2VkIHZob3N0IGRlZmF1bHRzIHRvIHRoZSBhZGRyZXNzIGdpdmVuIGZpcnN0IGluIHRoZQogICAgPGNvZGU+VmlydHVhbEhvc3Q8L2NvZGU+IHN0YXRlbWVudCBkZWZpbmluZyB0aGUgdmhvc3QuPC9wPgoKICAgIDxwPkFueSB2aG9zdCB0aGF0IGluY2x1ZGVzIHRoZSBtYWdpYyA8Y29kZT5fZGVmYXVsdF88L2NvZGU+CiAgICB3aWxkY2FyZCBpcyBnaXZlbiB0aGUgc2FtZSA8Y29kZT5TZXJ2ZXJOYW1lPC9jb2RlPiBhcyB0aGUKICAgIG1haW5fc2VydmVyLjwvcD4KCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9Imhvc3RtYXRjaGluZyIgaWQ9Imhvc3RtYXRjaGluZyI+VmlydHVhbCBIb3N0IE1hdGNoaW5nPC9hPjwvaDI+CgogICAgPHA+VGhlIHNlcnZlciBkZXRlcm1pbmVzIHdoaWNoIHZob3N0IHRvIHVzZSBmb3IgYSByZXF1ZXN0IGFzCiAgICBmb2xsb3dzOjwvcD4KCiAgICA8aDM+PGEgbmFtZT0iaGFzaHRhYmxlIiBpZD0iaGFzaHRhYmxlIj5IYXNoIHRhYmxlIGxvb2t1cDwvYT48L2gzPgoKICAgIDxwPldoZW4gdGhlIGNvbm5lY3Rpb24gaXMgZmlyc3QgbWFkZSBieSBhIGNsaWVudCwgdGhlIElQCiAgICBhZGRyZXNzIHRvIHdoaWNoIHRoZSBjbGllbnQgY29ubmVjdGVkIGlzIGxvb2tlZCB1cCBpbiB0aGUKICAgIGludGVybmFsIElQIGhhc2ggdGFibGUuPC9wPgoKICAgIDxwPklmIHRoZSBsb29rdXAgZmFpbHMgKHRoZSBJUCBhZGRyZXNzIHdhc24ndCBmb3VuZCkgdGhlCiAgICByZXF1ZXN0IGlzIHNlcnZlZCBmcm9tIHRoZSA8Y29kZT5fZGVmYXVsdF88L2NvZGU+IHZob3N0IGlmCiAgICB0aGVyZSBpcyBzdWNoIGEgdmhvc3QgZm9yIHRoZSBwb3J0IHRvIHdoaWNoIHRoZSBjbGllbnQgc2VudCB0aGUKICAgIHJlcXVlc3QuIElmIHRoZXJlIGlzIG5vIG1hdGNoaW5nIDxjb2RlPl9kZWZhdWx0XzwvY29kZT4gdmhvc3QKICAgIHRoZSByZXF1ZXN0IGlzIHNlcnZlZCBmcm9tIHRoZSBtYWluX3NlcnZlci48L3A+CgogICAgPHA+SWYgdGhlIElQIGFkZHJlc3MgaXMgbm90IGZvdW5kIGluIHRoZSBoYXNoIHRhYmxlIHRoZW4gdGhlCiAgICBtYXRjaCBhZ2FpbnN0IHRoZSBwb3J0IG51bWJlciBtYXkgYWxzbyByZXN1bHQgaW4gYW4gZW50cnkKICAgIGNvcnJlc3BvbmRpbmcgdG8gYSA8Y29kZT5OYW1lVmlydHVhbEhvc3QgKjwvY29kZT4sIHdoaWNoIGlzCiAgICBzdWJzZXF1ZW50bHkgaGFuZGxlZCBsaWtlIG90aGVyIG5hbWUtYmFzZWQgdmhvc3RzLjwvcD4KCiAgICA8cD5JZiB0aGUgbG9va3VwIHN1Y2NlZWRlZCAoYSBjb3JyZXNwb25kaW5nIGxpc3QgZm9yIHRoZSBJUAogICAgYWRkcmVzcyB3YXMgZm91bmQpIHRoZSBuZXh0IHN0ZXAgaXMgdG8gZGVjaWRlIGlmIHdlIGhhdmUgdG8KICAgIGRlYWwgd2l0aCBhbiBJUC1iYXNlZCBvciBhIG5hbWUtYmFzZSB2aG9zdC48L3A+CgogICAgCgogICAgPGgzPjxhIG5hbWU9ImlwYmFzZWQiIGlkPSJpcGJhc2VkIj5JUC1iYXNlZCB2aG9zdDwvYT48L2gzPgoKICAgIDxwPklmIHRoZSBlbnRyeSB3ZSBmb3VuZCBoYXMgYW4gZW1wdHkgbmFtZSBsaXN0IHRoZW4gd2UgaGF2ZQogICAgZm91bmQgYW4gSVAtYmFzZWQgdmhvc3QsIG5vIGZ1cnRoZXIgYWN0aW9ucyBhcmUgcGVyZm9ybWVkIGFuZAogICAgdGhlIHJlcXVlc3QgaXMgc2VydmVkIGZyb20gdGhhdCB2aG9zdC48L3A+CgogICAgCgogICAgPGgzPjxhIG5hbWU9Im5hbWViYXNlZCIgaWQ9Im5hbWViYXNlZCI+TmFtZS1iYXNlZCB2aG9zdDwvYT48L2gzPgoKICAgIDxwPklmIHRoZSBlbnRyeSBjb3JyZXNwb25kcyB0byBhIG5hbWUtYmFzZWQgdmhvc3QgdGhlIG5hbWUgbGlzdAogICAgY29udGFpbnMgb25lIG9yIG1vcmUgdmhvc3Qgc3RydWN0dXJlcy4gVGhpcyBsaXN0IGNvbnRhaW5zIHRoZQogICAgdmhvc3RzIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSA8Y29kZT5WaXJ0dWFsSG9zdDwvY29kZT4KICAgIGRpcmVjdGl2ZXMgYXBwZWFyIGluIHRoZSBjb25maWcgZmlsZS48L3A+CgogICAgPHA+VGhlIGZpcnN0IHZob3N0IG9uIHRoaXMgbGlzdCAodGhlIGZpcnN0IHZob3N0IGluIHRoZSBjb25maWcKICAgIGZpbGUgd2l0aCB0aGUgc3BlY2lmaWVkIElQIGFkZHJlc3MpIGhhcyB0aGUgaGlnaGVzdCBwcmlvcml0eQogICAgYW5kIGNhdGNoZXMgYW55IHJlcXVlc3QgdG8gYW4gdW5rbm93biBzZXJ2ZXIgbmFtZSBvciBhIHJlcXVlc3QKICAgIHdpdGhvdXQgYSA8Y29kZT5Ib3N0OjwvY29kZT4gaGVhZGVyIGZpZWxkLjwvcD4KCiAgICA8cD5JZiB0aGUgY2xpZW50IHByb3ZpZGVkIGEgPGNvZGU+SG9zdDo8L2NvZGU+IGhlYWRlciBmaWVsZCB0aGUKICAgIGxpc3QgaXMgc2VhcmNoZWQgZm9yIGEgbWF0Y2hpbmcgdmhvc3QgYW5kIHRoZSBmaXJzdCBoaXQgb24gYQogICAgPGNvZGU+U2VydmVyTmFtZTwvY29kZT4gb3IgPGNvZGU+U2VydmVyQWxpYXM8L2NvZGU+IGlzIHRha2VuCiAgICBhbmQgdGhlIHJlcXVlc3QgaXMgc2VydmVkIGZyb20gdGhhdCB2aG9zdC4gQSA8Y29kZT5Ib3N0OjwvY29kZT4KICAgIGhlYWRlciBmaWVsZCBjYW4gY29udGFpbiBhIHBvcnQgbnVtYmVyLCBidXQgQXBhY2hlIGFsd2F5cwogICAgbWF0Y2hlcyBhZ2FpbnN0IHRoZSByZWFsIHBvcnQgdG8gd2hpY2ggdGhlIGNsaWVudCBzZW50IHRoZQogICAgcmVxdWVzdC48L3A+CgogICAgPHA+SWYgdGhlIGNsaWVudCBzdWJtaXR0ZWQgYSBIVFRQLzEuMCByZXF1ZXN0IHdpdGhvdXQKICAgIDxjb2RlPkhvc3Q6PC9jb2RlPiBoZWFkZXIgZmllbGQgd2UgZG9uJ3Qga25vdyB0byB3aGF0IHNlcnZlcgogICAgdGhlIGNsaWVudCB0cmllZCB0byBjb25uZWN0IGFuZCBhbnkgZXhpc3RpbmcKICAgIDxjb2RlPlNlcnZlclBhdGg8L2NvZGU+IGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgVVJJIGZyb20gdGhlCiAgICByZXF1ZXN0LiBUaGUgZmlyc3QgbWF0Y2hpbmcgcGF0aCBvbiB0aGUgbGlzdCBpcyB1c2VkIGFuZCB0aGUKICAgIHJlcXVlc3QgaXMgc2VydmVkIGZyb20gdGhhdCB2aG9zdC48L3A+CgogICAgPHA+SWYgbm8gbWF0Y2hpbmcgdmhvc3QgY291bGQgYmUgZm91bmQgdGhlIHJlcXVlc3QgaXMgc2VydmVkCiAgICBmcm9tIHRoZSBmaXJzdCB2aG9zdCB3aXRoIGEgbWF0Y2hpbmcgcG9ydCBudW1iZXIgdGhhdCBpcyBvbiB0aGUKICAgIGxpc3QgZm9yIHRoZSBJUCB0byB3aGljaCB0aGUgY2xpZW50IGNvbm5lY3RlZCAoYXMgYWxyZWFkeQogICAgbWVudGlvbmVkIGJlZm9yZSkuPC9wPgoKICAgIAoKICAgIDxoMz48YSBuYW1lPSJwZXJzaXN0ZW50IiBpZD0icGVyc2lzdGVudCI+UGVyc2lzdGVudCBjb25uZWN0aW9uczwvYT48L2gzPgoKICAgIDxwPlRoZSBJUCBsb29rdXAgZGVzY3JpYmVkIGFib3ZlIGlzIG9ubHkgZG9uZSA8ZW0+b25jZTwvZW0+IGZvciBhCiAgICBwYXJ0aWN1bGFyIFRDUC9JUCBzZXNzaW9uIHdoaWxlIHRoZSBuYW1lIGxvb2t1cCBpcyBkb25lIG9uCiAgICA8ZW0+ZXZlcnk8L2VtPiByZXF1ZXN0IGR1cmluZyBhIEtlZXBBbGl2ZS9wZXJzaXN0ZW50CiAgICBjb25uZWN0aW9uLiBJbiBvdGhlciB3b3JkcyBhIGNsaWVudCBtYXkgcmVxdWVzdCBwYWdlcyBmcm9tCiAgICBkaWZmZXJlbnQgbmFtZS1iYXNlZCB2aG9zdHMgZHVyaW5nIGEgc2luZ2xlIHBlcnNpc3RlbnQKICAgIGNvbm5lY3Rpb24uPC9wPgoKICAgIAoKICAgIDxoMz48YSBuYW1lPSJhYnNvbHV0ZVVSSSIgaWQ9ImFic29sdXRlVVJJIj5BYnNvbHV0ZSBVUkk8L2E+PC9oMz4KCiAgICA8cD5JZiB0aGUgVVJJIGZyb20gdGhlIHJlcXVlc3QgaXMgYW4gYWJzb2x1dGUgVVJJLCBhbmQgaXRzCiAgICBob3N0bmFtZSBhbmQgcG9ydCBtYXRjaCB0aGUgbWFpbiBzZXJ2ZXIgb3Igb25lIG9mIHRoZQogICAgY29uZmlndXJlZCB2aXJ0dWFsIGhvc3RzIDxlbT5hbmQ8L2VtPiBtYXRjaCB0aGUgYWRkcmVzcyBhbmQKICAgIHBvcnQgdG8gd2hpY2ggdGhlIGNsaWVudCBzZW50IHRoZSByZXF1ZXN0LCB0aGVuIHRoZQogICAgc2NoZW1lL2hvc3RuYW1lL3BvcnQgcHJlZml4IGlzIHN0cmlwcGVkIG9mZiBhbmQgdGhlIHJlbWFpbmluZwogICAgcmVsYXRpdmUgVVJJIGlzIHNlcnZlZCBieSB0aGUgY29ycmVzcG9uZGluZyBtYWluIHNlcnZlciBvcgogICAgdmlydHVhbCBob3N0LiBJZiBpdCBkb2VzIG5vdCBtYXRjaCwgdGhlbiB0aGUgVVJJIHJlbWFpbnMKICAgIHVudG91Y2hlZCBhbmQgdGhlIHJlcXVlc3QgaXMgdGFrZW4gdG8gYmUgYSBwcm94eSByZXF1ZXN0LjwvcD4KCgo8aDM+PGEgbmFtZT0ib2JzZXJ2YXRpb25zIiBpZD0ib2JzZXJ2YXRpb25zIj5PYnNlcnZhdGlvbnM8L2E+PC9oMz4KCiAgICA8dWw+CiAgICAgIDxsaT5BIG5hbWUtYmFzZWQgdmhvc3QgY2FuIG5ldmVyIGludGVyZmVyZSB3aXRoIGFuIElQLWJhc2UKICAgICAgdmhvc3QgYW5kIHZpY2UgdmVyc2EuIElQLWJhc2VkIHZob3N0cyBjYW4gb25seSBiZSByZWFjaGVkCiAgICAgIHRocm91Z2ggYW4gSVAgYWRkcmVzcyBvZiBpdHMgb3duIGFkZHJlc3Mgc2V0IGFuZCBuZXZlcgogICAgICB0aHJvdWdoIGFueSBvdGhlciBhZGRyZXNzLiBUaGUgc2FtZSBhcHBsaWVzIHRvIG5hbWUtYmFzZWQKICAgICAgdmhvc3RzLCB0aGV5IGNhbiBvbmx5IGJlIHJlYWNoZWQgdGhyb3VnaCBhbiBJUCBhZGRyZXNzIG9mIHRoZQogICAgICBjb3JyZXNwb25kaW5nIGFkZHJlc3Mgc2V0IHdoaWNoIG11c3QgYmUgZGVmaW5lZCB3aXRoIGEKICAgICAgPGNvZGU+TmFtZVZpcnR1YWxIb3N0PC9jb2RlPiBkaXJlY3RpdmUuPC9saT4KCiAgICAgIDxsaT48Y29kZT5TZXJ2ZXJBbGlhczwvY29kZT4gYW5kIDxjb2RlPlNlcnZlclBhdGg8L2NvZGU+CiAgICAgIGNoZWNrcyBhcmUgbmV2ZXIgcGVyZm9ybWVkIGZvciBhbiBJUC1iYXNlZCB2aG9zdC48L2xpPgoKICAgICAgPGxpPlRoZSBvcmRlciBvZiBuYW1lLS9JUC1iYXNlZCwgdGhlIDxjb2RlPl9kZWZhdWx0XzwvY29kZT4KICAgICAgdmhvc3QgYW5kIHRoZSA8Y29kZT5OYW1lVmlydHVhbEhvc3Q8L2NvZGU+IGRpcmVjdGl2ZSB3aXRoaW4KICAgICAgdGhlIGNvbmZpZyBmaWxlIGlzIG5vdCBpbXBvcnRhbnQuIE9ubHkgdGhlIG9yZGVyaW5nIG9mCiAgICAgIG5hbWUtYmFzZWQgdmhvc3RzIGZvciBhIHNwZWNpZmljIGFkZHJlc3Mgc2V0IGlzIHNpZ25pZmljYW50LgogICAgICBUaGUgb25lIG5hbWUtYmFzZWQgdmhvc3RzIHRoYXQgY29tZXMgZmlyc3QgaW4gdGhlCiAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZSBoYXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgZm9yIGl0cwogICAgICBjb3JyZXNwb25kaW5nIGFkZHJlc3Mgc2V0LjwvbGk+CgogICAgICA8bGk+Rm9yIHNlY3VyaXR5IHJlYXNvbnMgdGhlIHBvcnQgbnVtYmVyIGdpdmVuIGluIGEKICAgICAgPGNvZGU+SG9zdDo8L2NvZGU+IGhlYWRlciBmaWVsZCBpcyBuZXZlciB1c2VkIGR1cmluZyB0aGUKICAgICAgbWF0Y2hpbmcgcHJvY2Vzcy4gQXBhY2hlIGFsd2F5cyB1c2VzIHRoZSByZWFsIHBvcnQgdG8gd2hpY2gKICAgICAgdGhlIGNsaWVudCBzZW50IHRoZSByZXF1ZXN0LjwvbGk+CgogICAgICA8bGk+SWYgYSA8Y29kZT5TZXJ2ZXJQYXRoPC9jb2RlPiBkaXJlY3RpdmUgZXhpc3RzIHdoaWNoIGlzIGEKICAgICAgcHJlZml4IG9mIGFub3RoZXIgPGNvZGU+U2VydmVyUGF0aDwvY29kZT4gZGlyZWN0aXZlIHRoYXQKICAgICAgYXBwZWFycyBsYXRlciBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLCB0aGVuIHRoZSBmb3JtZXIgd2lsbAogICAgICBhbHdheXMgYmUgbWF0Y2hlZCBhbmQgdGhlIGxhdHRlciB3aWxsIG5ldmVyIGJlIG1hdGNoZWQuIChUaGF0CiAgICAgIGlzIGFzc3VtaW5nIHRoYXQgbm8gPGNvZGU+SG9zdDo8L2NvZGU+IGhlYWRlciBmaWVsZCB3YXMKICAgICAgYXZhaWxhYmxlIHRvIGRpc2FtYmlndWF0ZSB0aGUgdHdvLik8L2xpPgoKICAgICAgPGxpPklmIHR3byBJUC1iYXNlZCB2aG9zdHMgaGF2ZSBhbiBhZGRyZXNzIGluIGNvbW1vbiwgdGhlCiAgICAgIHZob3N0IGFwcGVhcmluZyBmaXJzdCBpbiB0aGUgY29uZmlnIGZpbGUgaXMgYWx3YXlzIG1hdGNoZWQuCiAgICAgIFN1Y2ggYSB0aGluZyBtaWdodCBoYXBwZW4gaW5hZHZlcnRlbnRseS4gVGhlIHNlcnZlciB3aWxsIGdpdmUKICAgICAgYSB3YXJuaW5nIGluIHRoZSBlcnJvciBsb2dmaWxlIHdoZW4gaXQgZGV0ZWN0cyB0aGlzLjwvbGk+CgogICAgICA8bGk+QSA8Y29kZT5fZGVmYXVsdF88L2NvZGU+IHZob3N0IGNhdGNoZXMgYSByZXF1ZXN0IG9ubHkgaWYKICAgICAgdGhlcmUgaXMgbm8gb3RoZXIgdmhvc3Qgd2l0aCBhIG1hdGNoaW5nIElQIGFkZHJlc3MKICAgICAgPGVtPmFuZDwvZW0+IGEgbWF0Y2hpbmcgcG9ydCBudW1iZXIgZm9yIHRoZSByZXF1ZXN0LiBUaGUKICAgICAgcmVxdWVzdCBpcyBvbmx5IGNhdWdodCBpZiB0aGUgcG9ydCBudW1iZXIgdG8gd2hpY2ggdGhlIGNsaWVudAogICAgICBzZW50IHRoZSByZXF1ZXN0IG1hdGNoZXMgdGhlIHBvcnQgbnVtYmVyIG9mIHlvdXIKICAgICAgPGNvZGU+X2RlZmF1bHRfPC9jb2RlPiB2aG9zdCB3aGljaCBpcyB5b3VyIHN0YW5kYXJkCiAgICAgIDxjb2RlPkxpc3RlbjwvY29kZT4gYnkgZGVmYXVsdC4gQSB3aWxkY2FyZCBwb3J0IGNhbiBiZQogICAgICBzcGVjaWZpZWQgKDxlbT5pLmUuPC9lbT4sIDxjb2RlPl9kZWZhdWx0XzoqPC9jb2RlPikgdG8gY2F0Y2gKICAgICAgcmVxdWVzdHMgdG8gYW55IGF2YWlsYWJsZSBwb3J0LiBUaGlzIGFsc28gYXBwbGllcyB0bwogICAgICA8Y29kZT5OYW1lVmlydHVhbEhvc3QgKjwvY29kZT4gdmhvc3RzLjwvbGk+CgogICAgICA8bGk+VGhlIG1haW5fc2VydmVyIGlzIG9ubHkgdXNlZCB0byBzZXJ2ZSBhIHJlcXVlc3QgaWYgdGhlIElQCiAgICAgIGFkZHJlc3MgYW5kIHBvcnQgbnVtYmVyIHRvIHdoaWNoIHRoZSBjbGllbnQgY29ubmVjdGVkIGlzCiAgICAgIHVuc3BlY2lmaWVkIGFuZCBkb2VzIG5vdCBtYXRjaCBhbnkgb3RoZXIgdmhvc3QgKGluY2x1ZGluZyBhCiAgICAgIDxjb2RlPl9kZWZhdWx0XzwvY29kZT4gdmhvc3QpLiBJbiBvdGhlciB3b3JkcyB0aGUgbWFpbl9zZXJ2ZXIKICAgICAgb25seSBjYXRjaGVzIGEgcmVxdWVzdCBmb3IgYW4gdW5zcGVjaWZpZWQgYWRkcmVzcy9wb3J0CiAgICAgIGNvbWJpbmF0aW9uICh1bmxlc3MgdGhlcmUgaXMgYSA8Y29kZT5fZGVmYXVsdF88L2NvZGU+IHZob3N0CiAgICAgIHdoaWNoIG1hdGNoZXMgdGhhdCBwb3J0KS48L2xpPgoKICAgICAgPGxpPkEgPGNvZGU+X2RlZmF1bHRfPC9jb2RlPiB2aG9zdCBvciB0aGUgbWFpbl9zZXJ2ZXIgaXMKICAgICAgPGVtPm5ldmVyPC9lbT4gbWF0Y2hlZCBmb3IgYSByZXF1ZXN0IHdpdGggYW4gdW5rbm93biBvcgogICAgICBtaXNzaW5nIDxjb2RlPkhvc3Q6PC9jb2RlPiBoZWFkZXIgZmllbGQgaWYgdGhlIGNsaWVudAogICAgICBjb25uZWN0ZWQgdG8gYW4gYWRkcmVzcyAoYW5kIHBvcnQpIHdoaWNoIGlzIHVzZWQgZm9yCiAgICAgIG5hbWUtYmFzZWQgdmhvc3RzLCA8ZW0+ZS5nLjwvZW0+LCBpbiBhCiAgICAgIDxjb2RlPk5hbWVWaXJ0dWFsSG9zdDwvY29kZT4gZGlyZWN0aXZlLjwvbGk+CgogICAgICA8bGk+WW91IHNob3VsZCBuZXZlciBzcGVjaWZ5IEROUyBuYW1lcyBpbgogICAgICA8Y29kZT5WaXJ0dWFsSG9zdDwvY29kZT4gZGlyZWN0aXZlcyBiZWNhdXNlIGl0IHdpbGwgZm9yY2UKICAgICAgeW91ciBzZXJ2ZXIgdG8gcmVseSBvbiBETlMgdG8gYm9vdC4gRnVydGhlcm1vcmUgaXQgcG9zZXMgYQogICAgICBzZWN1cml0eSB0aHJlYXQgaWYgeW91IGRvIG5vdCBjb250cm9sIHRoZSBETlMgZm9yIGFsbCB0aGUKICAgICAgZG9tYWlucyBsaXN0ZWQuIFRoZXJlJ3MgPGEgaHJlZj0iLi4vZG5zLWNhdmVhdHMuaHRtbCI+bW9yZQogICAgICBpbmZvcm1hdGlvbjwvYT4gYXZhaWxhYmxlIG9uIHRoaXMgYW5kIHRoZSBuZXh0IHR3bwogICAgICB0b3BpY3MuPC9saT4KCiAgICAgIDxsaT48Y29kZT5TZXJ2ZXJOYW1lPC9jb2RlPiBzaG91bGQgYWx3YXlzIGJlIHNldCBmb3IgZWFjaAogICAgICB2aG9zdC4gT3RoZXJ3aXNlIEEgRE5TIGxvb2t1cCBpcyByZXF1aXJlZCBmb3IgZWFjaAogICAgICB2aG9zdC48L2xpPgogICAgICA8L3VsPgogICAgICAKCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InRpcHMiIGlkPSJ0aXBzIj5UaXBzPC9hPjwvaDI+CgogICAgPHA+SW4gYWRkaXRpb24gdG8gdGhlIHRpcHMgb24gdGhlIDxhIGhyZWY9Ii4uL2Rucy1jYXZlYXRzLmh0bWwjdGlwcyI+RE5TIElzc3VlczwvYT4gcGFnZSwgaGVyZSBhcmUKICAgIHNvbWUgZnVydGhlciB0aXBzOjwvcD4KCiAgICA8dWw+CiAgICAgIDxsaT5QbGFjZSBhbGwgbWFpbl9zZXJ2ZXIgZGVmaW5pdGlvbnMgYmVmb3JlIGFueQogICAgICA8Y29kZT5WaXJ0dWFsSG9zdDwvY29kZT4gZGVmaW5pdGlvbnMuIChUaGlzIGlzIHRvIGFpZCB0aGUKICAgICAgcmVhZGFiaWxpdHkgb2YgdGhlIGNvbmZpZ3VyYXRpb24gLS0gdGhlIHBvc3QtY29uZmlnIG1lcmdpbmcKICAgICAgcHJvY2VzcyBtYWtlcyBpdCBub24tb2J2aW91cyB0aGF0IGRlZmluaXRpb25zIG1peGVkIGluIGFyb3VuZAogICAgICB2aXJ0dWFsIGhvc3RzIG1pZ2h0IGFmZmVjdCBhbGwgdmlydHVhbCBob3N0cy4pPC9saT4KCiAgICAgIDxsaT5Hcm91cCBjb3JyZXNwb25kaW5nIDxjb2RlPk5hbWVWaXJ0dWFsSG9zdDwvY29kZT4gYW5kCiAgICAgIDxjb2RlPlZpcnR1YWxIb3N0PC9jb2RlPiBkZWZpbml0aW9ucyBpbiB5b3VyIGNvbmZpZ3VyYXRpb24gdG8KICAgICAgZW5zdXJlIGJldHRlciByZWFkYWJpbGl0eS48L2xpPgoKICAgICAgPGxpPkF2b2lkIDxjb2RlPlNlcnZlclBhdGhzPC9jb2RlPiB3aGljaCBhcmUgcHJlZml4ZXMgb2YKICAgICAgb3RoZXIgPGNvZGU+U2VydmVyUGF0aHM8L2NvZGU+LiBJZiB5b3UgY2Fubm90IGF2b2lkIHRoaXMgdGhlbgogICAgICB5b3UgaGF2ZSB0byBlbnN1cmUgdGhhdCB0aGUgbG9uZ2VyIChtb3JlIHNwZWNpZmljKSBwcmVmaXgKICAgICAgdmhvc3QgYXBwZWFycyBlYXJsaWVyIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgdGhhbiB0aGUKICAgICAgc2hvcnRlciAobGVzcyBzcGVjaWZpYykgcHJlZml4ICg8ZW0+aS5lLjwvZW0+LCAiU2VydmVyUGF0aAogICAgICAvYWJjIiBzaG91bGQgYXBwZWFyIGFmdGVyICJTZXJ2ZXJQYXRoIC9hYmMvZGVmIikuPC9saT4KICAgIDwvdWw+Cgo8L2Rpdj48L2Rpdj4KPGRpdiBjbGFzcz0iYm90dG9tbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi92aG9zdHMvZGV0YWlscy5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4va28vdmhvc3RzL2RldGFpbHMuaHRtbCIgaHJlZmxhbmc9ImtvIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IktvcmVhbiI+Jm5ic3A7a28mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vdHIvdmhvc3RzL2RldGFpbHMuaHRtbCIgaHJlZmxhbmc9InRyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlT8cmvnZSI+Jm5ic3A7dHImbmJzcDs8L2E+PC9wPgo8L2Rpdj48ZGl2IGlkPSJmb290ZXIiPgo8cCBjbGFzcz0iYXBhY2hlIj5Db3B5cmlnaHQgMjAxMyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uPGJyIC8+TGljZW5zZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wPC9hPi48L3A+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9kaXJlY3RpdmVzLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iLi4vZmFxLyI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+PC9kaXY+CjwvYm9keT48L2h0bWw+