PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5BdXRoZW50aWNhdGlvbiBhbmQgQXV0aG9yaXphdGlvbiAtIEFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNTwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vc3R5bGUvY3NzL3ByZXR0aWZ5LmNzcyIgLz4KPHNjcmlwdCBzcmM9Ii4uL3N0eWxlL3NjcmlwdHMvcHJldHRpZnkubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8L3NjcmlwdD4KCjxsaW5rIGhyZWY9Ii4uL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHkgaWQ9Im1hbnVhbC1wYWdlIj48ZGl2IGlkPSJwYWdlLWhlYWRlciI+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9xdWlja3JlZmVyZW5jZS5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD4KPHAgY2xhc3M9ImFwYWNoZSI+QXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi41PC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9mZWF0aGVyLnBuZyIgLz48L2Rpdj4KPGRpdiBjbGFzcz0idXAiPjxhIGhyZWY9Ii4vIj48aW1nIHRpdGxlPSImbHQ7LSIgYWx0PSImbHQ7LSIgc3JjPSIuLi9pbWFnZXMvbGVmdC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYXRoIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyI+QXBhY2hlPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnLyI+SFRUUCBTZXJ2ZXI8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8iPkRvY3VtZW50YXRpb248L2E+ICZndDsgPGEgaHJlZj0iLi4vIj5WZXJzaW9uIDIuNTwvYT4gJmd0OyA8YSBocmVmPSIuLyI+SG93LVRvIC8gVHV0b3JpYWxzPC9hPjwvZGl2PjxkaXYgaWQ9InBhZ2UtY29udGVudCI+PGRpdiBpZD0icHJlYW1ibGUiPjxoMT5BdXRoZW50aWNhdGlvbiBhbmQgQXV0aG9yaXphdGlvbjwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vaG93dG8vYXV0aC5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZXMvaG93dG8vYXV0aC5odG1sIiBocmVmbGFuZz0iZXMiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRXNwYfFvbCI+Jm5ic3A7ZXMmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZnIvaG93dG8vYXV0aC5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2phL2hvd3RvL2F1dGguaHRtbCIgaHJlZmxhbmc9ImphIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkphcGFuZXNlIj4mbmJzcDtqYSZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9rby9ob3d0by9hdXRoLmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL3RyL2hvd3RvL2F1dGguaHRtbCIgaHJlZmxhbmc9InRyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlT8cmvnZSI+Jm5ic3A7dHImbmJzcDs8L2E+PC9wPgo8L2Rpdj4KCiAgICA8cD5BdXRoZW50aWNhdGlvbiBpcyBhbnkgcHJvY2VzcyBieSB3aGljaCB5b3UgdmVyaWZ5IHRoYXQKICAgIHNvbWVvbmUgaXMgd2hvIHRoZXkgY2xhaW0gdGhleSBhcmUuIEF1dGhvcml6YXRpb24gaXMgYW55CiAgICBwcm9jZXNzIGJ5IHdoaWNoIHNvbWVvbmUgaXMgYWxsb3dlZCB0byBiZSB3aGVyZSB0aGV5IHdhbnQgdG8KICAgIGdvLCBvciB0byBoYXZlIGluZm9ybWF0aW9uIHRoYXQgdGhleSB3YW50IHRvIGhhdmUuPC9wPgoKICAgIDxwPkZvciBnZW5lcmFsIGFjY2VzcyBjb250cm9sLCBzZWUgdGhlIDxhIGhyZWY9ImFjY2Vzcy5odG1sIj5BY2Nlc3MKICAgIENvbnRyb2wgSG93LVRvPC9hPi48L3A+CjwvZGl2Pgo8ZGl2IGlkPSJxdWlja3ZpZXciPjx1bCBpZD0idG9jIj48bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNyZWxhdGVkIj5SZWxhdGVkIE1vZHVsZXMgYW5kIERpcmVjdGl2ZXM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjaW50cm9kdWN0aW9uIj5JbnRyb2R1Y3Rpb248L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjdGhlcHJlcmVxdWlzaXRlcyI+VGhlIFByZXJlcXVpc2l0ZXM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZ2V0dGluZ2l0d29ya2luZyI+R2V0dGluZyBpdCB3b3JraW5nPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2xldHRpbmdtb3JldGhhbm9uZXBlcnNvbmluIj5MZXR0aW5nIG1vcmUgdGhhbiBvbmUKcGVyc29uIGluPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3Bvc3NpYmxlcHJvYmxlbXMiPlBvc3NpYmxlIHByb2JsZW1zPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2RibWRiZCI+QWx0ZXJuYXRlIHBhc3N3b3JkIHN0b3JhZ2U8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbXVsdHByb3ZpZGVyIj5Vc2luZyBtdWx0aXBsZSBwcm92aWRlcnM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjYmV5b25kIj5CZXlvbmQganVzdCBhdXRob3JpemF0aW9uPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3NvY2FjaGUiPkF1dGhlbnRpY2F0aW9uIENhY2hpbmc8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbW9yZWluZm9ybWF0aW9uIj5Nb3JlIGluZm9ybWF0aW9uPC9hPjwvbGk+CjwvdWw+PGgzPlNlZSBhbHNvPC9oMz48dWwgY2xhc3M9InNlZWFsc28iPjxsaT48YSBocmVmPSIjY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9saT48L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJyZWxhdGVkIiBpZD0icmVsYXRlZCI+UmVsYXRlZCBNb2R1bGVzIGFuZCBEaXJlY3RpdmVzPC9hPjwvaDI+Cgo8cD5UaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2YgbW9kdWxlcyBpbnZvbHZlZCBpbiB0aGUgYXV0aGVudGljYXRpb24gYW5kCmF1dGhvcml6YXRpb24gcHJvY2Vzcy4gIFlvdSB3aWxsIHVzdWFsbHkgbmVlZCB0byBjaG9vc2UgYXQgbGVhc3Qgb25lCm1vZHVsZSBmcm9tIGVhY2ggZ3JvdXAuPC9wPgoKPHVsPgogIDxsaT5BdXRoZW50aWNhdGlvbiB0eXBlIChzZWUgdGhlCiAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aG5fY29yZS5odG1sI2F1dGh0eXBlIj5BdXRoVHlwZTwvYT48L2NvZGU+IGRpcmVjdGl2ZSkKICAgIDx1bD4KICAgICAgPGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aF9iYXNpYy5odG1sIj5tb2RfYXV0aF9iYXNpYzwvYT48L2NvZGU+PC9saT4KICAgICAgPGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aF9kaWdlc3QuaHRtbCI+bW9kX2F1dGhfZGlnZXN0PC9hPjwvY29kZT48L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5BdXRoZW50aWNhdGlvbiBwcm92aWRlciAoc2VlIHRoZQogIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aF9iYXNpYy5odG1sI2F1dGhiYXNpY3Byb3ZpZGVyIj5BdXRoQmFzaWNQcm92aWRlcjwvYT48L2NvZGU+IGFuZAogIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aF9kaWdlc3QuaHRtbCNhdXRoZGlnZXN0cHJvdmlkZXIiPkF1dGhEaWdlc3RQcm92aWRlcjwvYT48L2NvZGU+IGRpcmVjdGl2ZXMpCgogICAgPHVsPgogICAgICA8bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRobl9hbm9uLmh0bWwiPm1vZF9hdXRobl9hbm9uPC9hPjwvY29kZT48L2xpPgogICAgICA8bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRobl9kYmQuaHRtbCI+bW9kX2F1dGhuX2RiZDwvYT48L2NvZGU+PC9saT4KICAgICAgPGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aG5fZGJtLmh0bWwiPm1vZF9hdXRobl9kYm08L2E+PC9jb2RlPjwvbGk+CiAgICAgIDxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGhuX2ZpbGUuaHRtbCI+bW9kX2F1dGhuX2ZpbGU8L2E+PC9jb2RlPjwvbGk+CiAgICAgIDxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGhuel9sZGFwLmh0bWwiPm1vZF9hdXRobnpfbGRhcDwvYT48L2NvZGU+PC9saT4KICAgICAgPGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aG5fc29jYWNoZS5odG1sIj5tb2RfYXV0aG5fc29jYWNoZTwvYT48L2NvZGU+PC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+QXV0aG9yaXphdGlvbiAoc2VlIHRoZQogICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGh6X2NvcmUuaHRtbCNyZXF1aXJlIj5SZXF1aXJlPC9hPjwvY29kZT4gZGlyZWN0aXZlKQogICAgPHVsPgogICAgICA8bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRobnpfbGRhcC5odG1sIj5tb2RfYXV0aG56X2xkYXA8L2E+PC9jb2RlPjwvbGk+CiAgICAgIDxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGh6X2RiZC5odG1sIj5tb2RfYXV0aHpfZGJkPC9hPjwvY29kZT48L2xpPgogICAgICA8bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRoel9kYm0uaHRtbCI+bW9kX2F1dGh6X2RibTwvYT48L2NvZGU+PC9saT4KICAgICAgPGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aHpfZ3JvdXBmaWxlLmh0bWwiPm1vZF9hdXRoel9ncm91cGZpbGU8L2E+PC9jb2RlPjwvbGk+CiAgICAgIDxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGh6X2hvc3QuaHRtbCI+bW9kX2F1dGh6X2hvc3Q8L2E+PC9jb2RlPjwvbGk+CiAgICAgIDxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGh6X293bmVyLmh0bWwiPm1vZF9hdXRoel9vd25lcjwvYT48L2NvZGU+PC9saT4KICAgICAgPGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aHpfdXNlci5odG1sIj5tb2RfYXV0aHpfdXNlcjwvYT48L2NvZGU+PC9saT4KICAgIDwvdWw+CiAgPC9saT4KPC91bD4KCiAgPHA+SW4gYWRkaXRpb24gdG8gdGhlc2UgbW9kdWxlcywgdGhlcmUgYXJlIGFsc28KICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGhuX2NvcmUuaHRtbCI+bW9kX2F1dGhuX2NvcmU8L2E+PC9jb2RlPiBhbmQKICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGh6X2NvcmUuaHRtbCI+bW9kX2F1dGh6X2NvcmU8L2E+PC9jb2RlPi4gIFRoZXNlIG1vZHVsZXMgaW1wbGVtZW50IGNvcmUKICBkaXJlY3RpdmVzIHRoYXQgYXJlIGNvcmUgdG8gYWxsIGF1dGggbW9kdWxlcy48L3A+CgogIDxwPlRoZSBtb2R1bGUgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRobnpfbGRhcC5odG1sIj5tb2RfYXV0aG56X2xkYXA8L2E+PC9jb2RlPiBpcyBib3RoIGFuCiAgYXV0aGVudGljYXRpb24gYW5kIGF1dGhvcml6YXRpb24gcHJvdmlkZXIuICBUaGUgbW9kdWxlCiAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRoel9ob3N0Lmh0bWwiPm1vZF9hdXRoel9ob3N0PC9hPjwvY29kZT4gcHJvdmlkZXMgYXV0aG9yaXphdGlvbgogIGFuZCBhY2Nlc3MgY29udHJvbCBiYXNlZCBvbiBob3N0bmFtZSwgSVAgYWRkcmVzcyBvciBjaGFyYWN0ZXJpc3RpY3MKICBvZiB0aGUgcmVxdWVzdCwgYnV0IGlzIG5vdCBwYXJ0IG9mIHRoZSBhdXRoZW50aWNhdGlvbiBwcm92aWRlcgogIHN5c3RlbS4gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggdGhlIG1vZF9hY2Nlc3MsIHRoZXJlIGlzCiAgYSBuZXcgbW9kdWxlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYWNjZXNzX2NvbXBhdC5odG1sIj5tb2RfYWNjZXNzX2NvbXBhdDwvYT48L2NvZGU+LjwvcD4KCiAgPHA+WW91IHByb2JhYmx5IGFsc28gd2FudCB0byB0YWtlIGEgbG9vayBhdCB0aGUgPGEgaHJlZj0iYWNjZXNzLmh0bWwiPkFjY2VzcyBDb250cm9sPC9hPiBob3d0bywgd2hpY2ggZGlzY3Vzc2VzIHRoZQogIHZhcmlvdXMgd2F5cyB0byBjb250cm9sIGFjY2VzcyB0byB5b3VyIHNlcnZlci48L3A+Cgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJpbnRyb2R1Y3Rpb24iIGlkPSJpbnRyb2R1Y3Rpb24iPkludHJvZHVjdGlvbjwvYT48L2gyPgogICAgPHA+SWYgeW91IGhhdmUgaW5mb3JtYXRpb24gb24geW91ciB3ZWIgc2l0ZSB0aGF0IGlzIHNlbnNpdGl2ZQogICAgb3IgaW50ZW5kZWQgZm9yIG9ubHkgYSBzbWFsbCBncm91cCBvZiBwZW9wbGUsIHRoZSB0ZWNobmlxdWVzIGluCiAgICB0aGlzIGFydGljbGUgd2lsbCBoZWxwIHlvdSBtYWtlIHN1cmUgdGhhdCB0aGUgcGVvcGxlIHRoYXQgc2VlCiAgICB0aG9zZSBwYWdlcyBhcmUgdGhlIHBlb3BsZSB0aGF0IHlvdSB3YW50ZWQgdG8gc2VlIHRoZW0uPC9wPgoKICAgIDxwPlRoaXMgYXJ0aWNsZSBjb3ZlcnMgdGhlICJzdGFuZGFyZCIgd2F5IG9mIHByb3RlY3RpbmcgcGFydHMKICAgIG9mIHlvdXIgd2ViIHNpdGUgdGhhdCBtb3N0IG9mIHlvdSBhcmUgZ29pbmcgdG8gdXNlLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJub3RlIj48aDM+Tm90ZTo8L2gzPgogICAgPHA+SWYgeW91ciBkYXRhIHJlYWxseSBuZWVkcyB0byBiZSBzZWN1cmUsIGNvbnNpZGVyIHVzaW5nCiAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3NzbC5odG1sIj5tb2Rfc3NsPC9hPjwvY29kZT4gaW4gYWRkaXRpb24gdG8gYW55IGF1dGhlbnRpY2F0aW9uLjwvcD4KICAgIDwvZGl2Pgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJ0aGVwcmVyZXF1aXNpdGVzIiBpZD0idGhlcHJlcmVxdWlzaXRlcyI+VGhlIFByZXJlcXVpc2l0ZXM8L2E+PC9oMj4KICAgIDxwPlRoZSBkaXJlY3RpdmVzIGRpc2N1c3NlZCBpbiB0aGlzIGFydGljbGUgd2lsbCBuZWVkIHRvIGdvCiAgICBlaXRoZXIgaW4geW91ciBtYWluIHNlcnZlciBjb25maWd1cmF0aW9uIGZpbGUgKHR5cGljYWxseSBpbiBhCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI2RpcmVjdG9yeSI+Jmx0O0RpcmVjdG9yeSZndDs8L2E+PC9jb2RlPiBzZWN0aW9uKSwgb3IKICAgIGluIHBlci1kaXJlY3RvcnkgY29uZmlndXJhdGlvbiBmaWxlcyAoPGNvZGU+Lmh0YWNjZXNzPC9jb2RlPiBmaWxlcykuPC9wPgoKICAgIDxwPklmIHlvdSBwbGFuIHRvIHVzZSA8Y29kZT4uaHRhY2Nlc3M8L2NvZGU+IGZpbGVzLCB5b3Ugd2lsbAogICAgbmVlZCB0byBoYXZlIGEgc2VydmVyIGNvbmZpZ3VyYXRpb24gdGhhdCBwZXJtaXRzIHB1dHRpbmcKICAgIGF1dGhlbnRpY2F0aW9uIGRpcmVjdGl2ZXMgaW4gdGhlc2UgZmlsZXMuIFRoaXMgaXMgZG9uZSB3aXRoIHRoZQogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNhbGxvd292ZXJyaWRlIj5BbGxvd092ZXJyaWRlPC9hPjwvY29kZT4gZGlyZWN0aXZlLCB3aGljaAogICAgc3BlY2lmaWVzIHdoaWNoIGRpcmVjdGl2ZXMsIGlmIGFueSwgbWF5IGJlIHB1dCBpbiBwZXItZGlyZWN0b3J5CiAgICBjb25maWd1cmF0aW9uIGZpbGVzLjwvcD4KCiAgICA8cD5TaW5jZSB3ZSdyZSB0YWxraW5nIGhlcmUgYWJvdXQgYXV0aGVudGljYXRpb24sIHlvdSB3aWxsIG5lZWQKICAgIGFuIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjYWxsb3dvdmVycmlkZSI+QWxsb3dPdmVycmlkZTwvYT48L2NvZGU+IGRpcmVjdGl2ZSBsaWtlIHRoZQogICAgZm9sbG93aW5nOjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+QWxsb3dPdmVycmlkZSBBdXRoQ29uZmlnPC9wcmU+CgoKICAgIDxwPk9yLCBpZiB5b3UgYXJlIGp1c3QgZ29pbmcgdG8gcHV0IHRoZSBkaXJlY3RpdmVzIGRpcmVjdGx5IGluCiAgICB5b3VyIG1haW4gc2VydmVyIGNvbmZpZ3VyYXRpb24gZmlsZSwgeW91IHdpbGwgb2YgY291cnNlIG5lZWQgdG8KICAgIGhhdmUgd3JpdGUgcGVybWlzc2lvbiB0byB0aGF0IGZpbGUuPC9wPgoKICAgIDxwPkFuZCB5b3UnbGwgbmVlZCB0byBrbm93IGEgbGl0dGxlIGJpdCBhYm91dCB0aGUgZGlyZWN0b3J5CiAgICBzdHJ1Y3R1cmUgb2YgeW91ciBzZXJ2ZXIsIGluIG9yZGVyIHRvIGtub3cgd2hlcmUgc29tZSBmaWxlcyBhcmUKICAgIGtlcHQuIFRoaXMgc2hvdWxkIG5vdCBiZSB0ZXJyaWJseSBkaWZmaWN1bHQsIGFuZCBJJ2xsIHRyeSB0bwogICAgbWFrZSB0aGlzIGNsZWFyIHdoZW4gd2UgY29tZSB0byB0aGF0IHBvaW50LjwvcD4KCiAgICA8cD5Zb3Ugd2lsbCBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1vZHVsZXMKICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aG5fY29yZS5odG1sIj5tb2RfYXV0aG5fY29yZTwvYT48L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGh6X2NvcmUuaHRtbCI+bW9kX2F1dGh6X2NvcmU8L2E+PC9jb2RlPgogICAgaGF2ZSBlaXRoZXIgYmVlbiBidWlsdCBpbnRvIHRoZSBodHRwZCBiaW5hcnkgb3IgbG9hZGVkIGJ5IHRoZQogICAgaHR0cGQuY29uZiBjb25maWd1cmF0aW9uIGZpbGUuIEJvdGggb2YgdGhlc2UgbW9kdWxlcyBwcm92aWRlIGNvcmUKICAgIGRpcmVjdGl2ZXMgYW5kIGZ1bmN0aW9uYWxpdHkgdGhhdCBhcmUgY3JpdGljYWwgdG8gdGhlIGNvbmZpZ3VyYXRpb24KICAgIGFuZCB1c2Ugb2YgYXV0aGVudGljYXRpb24gYW5kIGF1dGhvcml6YXRpb24gaW4gdGhlIHdlYiBzZXJ2ZXIuPC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJnZXR0aW5naXR3b3JraW5nIiBpZD0iZ2V0dGluZ2l0d29ya2luZyI+R2V0dGluZyBpdCB3b3JraW5nPC9hPjwvaDI+CiAgICA8cD5IZXJlJ3MgdGhlIGJhc2ljcyBvZiBwYXNzd29yZCBwcm90ZWN0aW5nIGEgZGlyZWN0b3J5IG9uIHlvdXIKICAgIHNlcnZlci48L3A+CgogICAgPHA+Rmlyc3QsIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIHBhc3N3b3JkIGZpbGUuIEV4YWN0bHkgaG93IHlvdSBkbwogICAgdGhpcyB3aWxsIHZhcnkgZGVwZW5kaW5nIG9uIHdoYXQgYXV0aGVudGljYXRpb24gcHJvdmlkZXIgeW91IGhhdmUKICAgIGNob3Nlbi4gTW9yZSBvbiB0aGF0IGxhdGVyLiBUbyBzdGFydCB3aXRoLCB3ZSdsbCB1c2UgYSB0ZXh0IHBhc3N3b3JkCiAgICBmaWxlLjwvcD4KCiAgICA8cD5UaGlzIGZpbGUgc2hvdWxkIGJlCiAgICBwbGFjZWQgc29tZXdoZXJlIG5vdCBhY2Nlc3NpYmxlIGZyb20gdGhlIHdlYi4gVGhpcyBpcyBzbyB0aGF0CiAgICBmb2xrcyBjYW5ub3QgZG93bmxvYWQgdGhlIHBhc3N3b3JkIGZpbGUuIEZvciBleGFtcGxlLCBpZiB5b3VyCiAgICBkb2N1bWVudHMgYXJlIHNlcnZlZCBvdXQgb2YgPGNvZGU+L3Vzci9sb2NhbC9hcGFjaGUvaHRkb2NzPC9jb2RlPiwgeW91CiAgICBtaWdodCB3YW50IHRvIHB1dCB0aGUgcGFzc3dvcmQgZmlsZShzKSBpbgogICAgPGNvZGU+L3Vzci9sb2NhbC9hcGFjaGUvcGFzc3dkPC9jb2RlPi48L3A+CgogICAgPHA+VG8gY3JlYXRlIHRoZSBmaWxlLCB1c2UgdGhlIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuLi9wcm9ncmFtcy9odHBhc3N3ZC5odG1sIj5odHBhc3N3ZDwvYT48L2NvZGU+IHV0aWxpdHkgdGhhdAogICAgY2FtZSB3aXRoIEFwYWNoZS4gVGhpcyB3aWxsIGJlIGxvY2F0ZWQgaW4gdGhlIDxjb2RlPmJpbjwvY29kZT4gZGlyZWN0b3J5CiAgICBvZiB3aGVyZXZlciB5b3UgaW5zdGFsbGVkIEFwYWNoZS4gSWYgeW91IGhhdmUgaW5zdGFsbGVkIEFwYWNoZSBmcm9tCiAgICBhIHRoaXJkLXBhcnR5IHBhY2thZ2UsIGl0IG1heSBiZSBpbiB5b3VyIGV4ZWN1dGlvbiBwYXRoLjwvcD4KCiAgICA8cD5UbyBjcmVhdGUgdGhlIGZpbGUsIHR5cGU6PC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICBodHBhc3N3ZCAtYyAvdXNyL2xvY2FsL2FwYWNoZS9wYXNzd2QvcGFzc3dvcmRzIHJib3dlbgogICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD48Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi4vcHJvZ3JhbXMvaHRwYXNzd2QuaHRtbCI+aHRwYXNzd2Q8L2E+PC9jb2RlPiB3aWxsIGFzayB5b3UgZm9yIHRoZSBwYXNzd29yZCwgYW5kCiAgICB0aGVuIGFzayB5b3UgdG8gdHlwZSBpdCBhZ2FpbiB0byBjb25maXJtIGl0OjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgIyBodHBhc3N3ZCAtYyAvdXNyL2xvY2FsL2FwYWNoZS9wYXNzd2QvcGFzc3dvcmRzIHJib3dlbjxiciAvPgogICAgICBOZXcgcGFzc3dvcmQ6IG15cGFzc3dvcmQ8YnIgLz4KICAgICAgUmUtdHlwZSBuZXcgcGFzc3dvcmQ6IG15cGFzc3dvcmQ8YnIgLz4KICAgICAgQWRkaW5nIHBhc3N3b3JkIGZvciB1c2VyIHJib3dlbgogICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5JZiA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi4vcHJvZ3JhbXMvaHRwYXNzd2QuaHRtbCI+aHRwYXNzd2Q8L2E+PC9jb2RlPiBpcyBub3QgaW4geW91ciBwYXRoLCBvZiBjb3Vyc2UKICAgIHlvdSdsbCBoYXZlIHRvIHR5cGUgdGhlIGZ1bGwgcGF0aCB0byB0aGUgZmlsZSB0byBnZXQgaXQgdG8gcnVuLgogICAgV2l0aCBhIGRlZmF1bHQgaW5zdGFsbGF0aW9uLCBpdCdzIGxvY2F0ZWQgYXQKICAgIDxjb2RlPi91c3IvbG9jYWwvYXBhY2hlMi9iaW4vaHRwYXNzd2Q8L2NvZGU+PC9wPgoKICAgIDxwPk5leHQsIHlvdSdsbCBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgc2VydmVyIHRvIHJlcXVlc3QgYQogICAgcGFzc3dvcmQgYW5kIHRlbGwgdGhlIHNlcnZlciB3aGljaCB1c2VycyBhcmUgYWxsb3dlZCBhY2Nlc3MuCiAgICBZb3UgY2FuIGRvIHRoaXMgZWl0aGVyIGJ5IGVkaXRpbmcgdGhlIDxjb2RlPmh0dHBkLmNvbmY8L2NvZGU+CiAgICBmaWxlIG9yIHVzaW5nIGFuIDxjb2RlPi5odGFjY2VzczwvY29kZT4gZmlsZS4gRm9yIGV4YW1wbGUsIGlmCiAgICB5b3Ugd2lzaCB0byBwcm90ZWN0IHRoZSBkaXJlY3RvcnkKICAgIDxjb2RlPi91c3IvbG9jYWwvYXBhY2hlL2h0ZG9jcy9zZWNyZXQ8L2NvZGU+LCB5b3UgY2FuIHVzZSB0aGUKICAgIGZvbGxvd2luZyBkaXJlY3RpdmVzLCBlaXRoZXIgcGxhY2VkIGluIHRoZSBmaWxlCiAgICA8Y29kZT4vdXNyL2xvY2FsL2FwYWNoZS9odGRvY3Mvc2VjcmV0Ly5odGFjY2VzczwvY29kZT4sIG9yCiAgICBwbGFjZWQgaW4gPGNvZGU+aHR0cGQuY29uZjwvY29kZT4gaW5zaWRlIGEgJmx0O0RpcmVjdG9yeQogICAgIi91c3IvbG9jYWwvYXBhY2hlL2h0ZG9jcy9zZWNyZXQiJmd0OyBzZWN0aW9uLjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+QXV0aFR5cGUgQmFzaWMKQXV0aE5hbWUgIlJlc3RyaWN0ZWQgRmlsZXMiCiMgKEZvbGxvd2luZyBsaW5lIG9wdGlvbmFsKQpBdXRoQmFzaWNQcm92aWRlciBmaWxlCkF1dGhVc2VyRmlsZSAiL3Vzci9sb2NhbC9hcGFjaGUvcGFzc3dkL3Bhc3N3b3JkcyIKUmVxdWlyZSB1c2VyIHJib3dlbjwvcHJlPgoKCiAgICA8cD5MZXQncyBleGFtaW5lIGVhY2ggb2YgdGhvc2UgZGlyZWN0aXZlcyBpbmRpdmlkdWFsbHkuIFRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGhuX2NvcmUuaHRtbCNhdXRodHlwZSI+QXV0aFR5cGU8L2E+PC9jb2RlPiBkaXJlY3RpdmUgc2VsZWN0cwogICAgdGhlIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gYXV0aGVudGljYXRlIHRoZSB1c2VyLiBUaGUgbW9zdAogICAgY29tbW9uIG1ldGhvZCBpcyA8Y29kZT5CYXNpYzwvY29kZT4sIGFuZCB0aGlzIGlzIHRoZSBtZXRob2QKICAgIGltcGxlbWVudGVkIGJ5IDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aF9iYXNpYy5odG1sIj5tb2RfYXV0aF9iYXNpYzwvYT48L2NvZGU+LiBJdCBpcyBpbXBvcnRhbnQgdG8gYmUgYXdhcmUsCiAgICBob3dldmVyLCB0aGF0IEJhc2ljIGF1dGhlbnRpY2F0aW9uIHNlbmRzIHRoZSBwYXNzd29yZCBmcm9tIHRoZSBjbGllbnQgdG8KICAgIHRoZSBzZXJ2ZXIgdW5lbmNyeXB0ZWQuIFRoaXMgbWV0aG9kIHNob3VsZCB0aGVyZWZvcmUgbm90IGJlIHVzZWQgZm9yCiAgICBoaWdobHkgc2Vuc2l0aXZlIGRhdGEsIHVubGVzcyBhY2NvbXBhbmllZCBieSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3NzbC5odG1sIj5tb2Rfc3NsPC9hPjwvY29kZT4uCiAgICBBcGFjaGUgc3VwcG9ydHMgb25lIG90aGVyIGF1dGhlbnRpY2F0aW9uIG1ldGhvZDoKICAgIDxjb2RlPkF1dGhUeXBlIERpZ2VzdDwvY29kZT4uIFRoaXMgbWV0aG9kIGlzIGltcGxlbWVudGVkIGJ5IDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aF9kaWdlc3QuaHRtbCI+bW9kX2F1dGhfZGlnZXN0PC9hPjwvY29kZT4gYW5kIHdhcyBpbnRlbmRlZCB0byBiZSBtb3JlIHNlY3VyZS4gVGhpcyBpcyBubwogICAgbG9uZ2VyIHRoZSBjYXNlIGFuZCB0aGUgY29ubmVjdGlvbiBzaG91bGQgYmUgZW5jcnlwdGVkIHdpdGggPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9zc2wuaHRtbCI+bW9kX3NzbDwvYT48L2NvZGU+IGluc3RlYWQuPC9wPgoKICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGhuX2NvcmUuaHRtbCNhdXRobmFtZSI+QXV0aE5hbWU8L2E+PC9jb2RlPiBkaXJlY3RpdmUgc2V0cwogICAgdGhlIDxkZm4+UmVhbG08L2Rmbj4gdG8gYmUgdXNlZCBpbiB0aGUgYXV0aGVudGljYXRpb24uIFRoZSByZWFsbSBzZXJ2ZXMKICAgIHR3byBtYWpvciBmdW5jdGlvbnMuIEZpcnN0LCB0aGUgY2xpZW50IG9mdGVuIHByZXNlbnRzIHRoaXMgaW5mb3JtYXRpb24gdG8KICAgIHRoZSB1c2VyIGFzIHBhcnQgb2YgdGhlIHBhc3N3b3JkIGRpYWxvZyBib3guIFNlY29uZCwgaXQgaXMgdXNlZCBieSB0aGUKICAgIGNsaWVudCB0byBkZXRlcm1pbmUgd2hhdCBwYXNzd29yZCB0byBzZW5kIGZvciBhIGdpdmVuIGF1dGhlbnRpY2F0ZWQKICAgIGFyZWEuPC9wPgoKICAgIDxwPlNvLCBmb3IgZXhhbXBsZSwgb25jZSBhIGNsaWVudCBoYXMgYXV0aGVudGljYXRlZCBpbiB0aGUKICAgIDxjb2RlPiJSZXN0cmljdGVkIEZpbGVzIjwvY29kZT4gYXJlYSwgaXQgd2lsbCBhdXRvbWF0aWNhbGx5CiAgICByZXRyeSB0aGUgc2FtZSBwYXNzd29yZCBmb3IgYW55IGFyZWEgb24gdGhlIHNhbWUgc2VydmVyIHRoYXQgaXMKICAgIG1hcmtlZCB3aXRoIHRoZSA8Y29kZT4iUmVzdHJpY3RlZCBGaWxlcyI8L2NvZGU+IFJlYWxtLgogICAgVGhlcmVmb3JlLCB5b3UgY2FuIHByZXZlbnQgYSB1c2VyIGZyb20gYmVpbmcgcHJvbXB0ZWQgbW9yZSB0aGFuCiAgICBvbmNlIGZvciBhIHBhc3N3b3JkIGJ5IGxldHRpbmcgbXVsdGlwbGUgcmVzdHJpY3RlZCBhcmVhcyBzaGFyZQogICAgdGhlIHNhbWUgcmVhbG0uIE9mIGNvdXJzZSwgZm9yIHNlY3VyaXR5IHJlYXNvbnMsIHRoZSBjbGllbnQKICAgIHdpbGwgYWx3YXlzIG5lZWQgdG8gYXNrIGFnYWluIGZvciB0aGUgcGFzc3dvcmQgd2hlbmV2ZXIgdGhlCiAgICBob3N0bmFtZSBvZiB0aGUgc2VydmVyIGNoYW5nZXMuPC9wPgoKICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGhfYmFzaWMuaHRtbCNhdXRoYmFzaWNwcm92aWRlciI+QXV0aEJhc2ljUHJvdmlkZXI8L2E+PC9jb2RlPiBpcywKICAgIGluIHRoaXMgY2FzZSwgb3B0aW9uYWwsIHNpbmNlIDxjb2RlPmZpbGU8L2NvZGU+IGlzIHRoZSBkZWZhdWx0IHZhbHVlCiAgICBmb3IgdGhpcyBkaXJlY3RpdmUuIFlvdSdsbCBuZWVkIHRvIHVzZSB0aGlzIGRpcmVjdGl2ZSBpZiB5b3UgYXJlCiAgICBjaG9vc2luZyBhIGRpZmZlcmVudCBzb3VyY2UgZm9yIGF1dGhlbnRpY2F0aW9uLCBzdWNoIGFzCiAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGhuX2RibS5odG1sIj5tb2RfYXV0aG5fZGJtPC9hPjwvY29kZT4gb3IgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRobl9kYmQuaHRtbCI+bW9kX2F1dGhuX2RiZDwvYT48L2NvZGU+LjwvcD4KCiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRobl9maWxlLmh0bWwjYXV0aHVzZXJmaWxlIj5BdXRoVXNlckZpbGU8L2E+PC9jb2RlPgogICAgZGlyZWN0aXZlIHNldHMgdGhlIHBhdGggdG8gdGhlIHBhc3N3b3JkIGZpbGUgdGhhdCB3ZSBqdXN0CiAgICBjcmVhdGVkIHdpdGggPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL2h0cGFzc3dkLmh0bWwiPmh0cGFzc3dkPC9hPjwvY29kZT4uIElmIHlvdSBoYXZlIGEgbGFyZ2UgbnVtYmVyCiAgICBvZiB1c2VycywgaXQgY2FuIGJlIHF1aXRlIHNsb3cgdG8gc2VhcmNoIHRocm91Z2ggYSBwbGFpbiB0ZXh0CiAgICBmaWxlIHRvIGF1dGhlbnRpY2F0ZSB0aGUgdXNlciBvbiBlYWNoIHJlcXVlc3QuIEFwYWNoZSBhbHNvIGhhcwogICAgdGhlIGFiaWxpdHkgdG8gc3RvcmUgdXNlciBpbmZvcm1hdGlvbiBpbiBmYXN0IGRhdGFiYXNlIGZpbGVzLgogICAgVGhlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aG5fZGJtLmh0bWwiPm1vZF9hdXRobl9kYm08L2E+PC9jb2RlPiBtb2R1bGUgcHJvdmlkZXMgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aG5fZGJtLmh0bWwjYXV0aGRibXVzZXJmaWxlIj5BdXRoREJNVXNlckZpbGU8L2E+PC9jb2RlPiBkaXJlY3RpdmUuIFRoZXNlCiAgICBmaWxlcyBjYW4gYmUgY3JlYXRlZCBhbmQgbWFuaXB1bGF0ZWQgd2l0aCB0aGUgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL2RibW1hbmFnZS5odG1sIj5kYm1tYW5hZ2U8L2E+PC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL2h0ZGJtLmh0bWwiPmh0ZGJtPC9hPjwvY29kZT4gcHJvZ3JhbXMuIE1hbnkKICAgIG90aGVyIHR5cGVzIG9mIGF1dGhlbnRpY2F0aW9uIG9wdGlvbnMgYXJlIGF2YWlsYWJsZSBmcm9tIHRoaXJkCiAgICBwYXJ0eSBtb2R1bGVzIGluIHRoZSA8YSBocmVmPSJodHRwOi8vbW9kdWxlcy5hcGFjaGUub3JnLyI+QXBhY2hlIE1vZHVsZXMKICAgIERhdGFiYXNlPC9hPi48L3A+CgogICAgPHA+RmluYWxseSwgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aHpfY29yZS5odG1sI3JlcXVpcmUiPlJlcXVpcmU8L2E+PC9jb2RlPgogICAgZGlyZWN0aXZlIHByb3ZpZGVzIHRoZSBhdXRob3JpemF0aW9uIHBhcnQgb2YgdGhlIHByb2Nlc3MgYnkKICAgIHNldHRpbmcgdGhlIHVzZXIgdGhhdCBpcyBhbGxvd2VkIHRvIGFjY2VzcyB0aGlzIHJlZ2lvbiBvZiB0aGUKICAgIHNlcnZlci4gSW4gdGhlIG5leHQgc2VjdGlvbiwgd2UgZGlzY3VzcyB2YXJpb3VzIHdheXMgdG8gdXNlIHRoZQogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRoel9jb3JlLmh0bWwjcmVxdWlyZSI+UmVxdWlyZTwvYT48L2NvZGU+IGRpcmVjdGl2ZS48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImxldHRpbmdtb3JldGhhbm9uZXBlcnNvbmluIiBpZD0ibGV0dGluZ21vcmV0aGFub25lcGVyc29uaW4iPkxldHRpbmcgbW9yZSB0aGFuIG9uZQpwZXJzb24gaW48L2E+PC9oMj4KICAgIDxwPlRoZSBkaXJlY3RpdmVzIGFib3ZlIG9ubHkgbGV0IG9uZSBwZXJzb24gKHNwZWNpZmljYWxseQogICAgc29tZW9uZSB3aXRoIGEgdXNlcm5hbWUgb2YgPGNvZGU+cmJvd2VuPC9jb2RlPikgaW50byB0aGUKICAgIGRpcmVjdG9yeS4gSW4gbW9zdCBjYXNlcywgeW91J2xsIHdhbnQgdG8gbGV0IG1vcmUgdGhhbiBvbmUKICAgIHBlcnNvbiBpbi4gVGhpcyBpcyB3aGVyZSB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRoel9ncm91cGZpbGUuaHRtbCNhdXRoZ3JvdXBmaWxlIj5BdXRoR3JvdXBGaWxlPC9hPjwvY29kZT4gY29tZXMgaW4uPC9wPgoKICAgIDxwPklmIHlvdSB3YW50IHRvIGxldCBtb3JlIHRoYW4gb25lIHBlcnNvbiBpbiwgeW91J2xsIG5lZWQgdG8KICAgIGNyZWF0ZSBhIGdyb3VwIGZpbGUgdGhhdCBhc3NvY2lhdGVzIGdyb3VwIG5hbWVzIHdpdGggYSBsaXN0IG9mCiAgICB1c2VycyBpbiB0aGF0IGdyb3VwLiBUaGUgZm9ybWF0IG9mIHRoaXMgZmlsZSBpcyBwcmV0dHkgc2ltcGxlLAogICAgYW5kIHlvdSBjYW4gY3JlYXRlIGl0IHdpdGggeW91ciBmYXZvcml0ZSBlZGl0b3IuIFRoZSBjb250ZW50cwogICAgb2YgdGhlIGZpbGUgd2lsbCBsb29rIGxpa2UgdGhpczo8L3A+CgogICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICBHcm91cE5hbWU6IHJib3dlbiBkcGl0dHMgc3VuZ28gcnNoZXJzZXkKICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5UaGF0J3MganVzdCBhIGxpc3Qgb2YgdGhlIG1lbWJlcnMgb2YgdGhlIGdyb3VwIGluIGEgbG9uZwogICAgbGluZSBzZXBhcmF0ZWQgYnkgc3BhY2VzLjwvcD4KCiAgICA8cD5UbyBhZGQgYSB1c2VyIHRvIHlvdXIgYWxyZWFkeSBleGlzdGluZyBwYXNzd29yZCBmaWxlLAogICAgdHlwZTo8L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgIGh0cGFzc3dkIC91c3IvbG9jYWwvYXBhY2hlL3Bhc3N3ZC9wYXNzd29yZHMgZHBpdHRzCiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPllvdSdsbCBnZXQgdGhlIHNhbWUgcmVzcG9uc2UgYXMgYmVmb3JlLCBidXQgaXQgd2lsbCBiZQogICAgYXBwZW5kZWQgdG8gdGhlIGV4aXN0aW5nIGZpbGUsIHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgbmV3IGZpbGUuCiAgICAoSXQncyB0aGUgPGNvZGU+LWM8L2NvZGU+IHRoYXQgbWFrZXMgaXQgY3JlYXRlIGEgbmV3IHBhc3N3b3JkCiAgICBmaWxlKS48L3A+CgogICAgPHA+Tm93LCB5b3UgbmVlZCB0byBtb2RpZnkgeW91ciA8Y29kZT4uaHRhY2Nlc3M8L2NvZGU+IGZpbGUgdG8KICAgIGxvb2sgbGlrZSB0aGUgZm9sbG93aW5nOjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+QXV0aFR5cGUgQmFzaWMKQXV0aE5hbWUgIkJ5IEludml0YXRpb24gT25seSIKIyBPcHRpb25hbCBsaW5lOgpBdXRoQmFzaWNQcm92aWRlciBmaWxlCkF1dGhVc2VyRmlsZSAiL3Vzci9sb2NhbC9hcGFjaGUvcGFzc3dkL3Bhc3N3b3JkcyIKQXV0aEdyb3VwRmlsZSAiL3Vzci9sb2NhbC9hcGFjaGUvcGFzc3dkL2dyb3VwcyIKUmVxdWlyZSBncm91cCBHcm91cE5hbWU8L3ByZT4KCgogICAgPHA+Tm93LCBhbnlvbmUgdGhhdCBpcyBsaXN0ZWQgaW4gdGhlIGdyb3VwIDxjb2RlPkdyb3VwTmFtZTwvY29kZT4sCiAgICBhbmQgaGFzIGFuIGVudHJ5IGluIHRoZSA8Y29kZT5wYXNzd29yZDwvY29kZT4gZmlsZSwgd2lsbCBiZSBsZXQgaW4sIGlmCiAgICB0aGV5IHR5cGUgdGhlIGNvcnJlY3QgcGFzc3dvcmQuPC9wPgoKICAgIDxwPlRoZXJlJ3MgYW5vdGhlciB3YXkgdG8gbGV0IG11bHRpcGxlIHVzZXJzIGluIHRoYXQgaXMgbGVzcwogICAgc3BlY2lmaWMuIFJhdGhlciB0aGFuIGNyZWF0aW5nIGEgZ3JvdXAgZmlsZSwgeW91IGNhbiBqdXN0IHVzZQogICAgdGhlIGZvbGxvd2luZyBkaXJlY3RpdmU6PC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5SZXF1aXJlIHZhbGlkLXVzZXI8L3ByZT4KCgogICAgPHA+VXNpbmcgdGhhdCByYXRoZXIgdGhhbiB0aGUgPGNvZGU+UmVxdWlyZSB1c2VyIHJib3dlbjwvY29kZT4KICAgIGxpbmUgd2lsbCBhbGxvdyBhbnlvbmUgaW4gdGhhdCBpcyBsaXN0ZWQgaW4gdGhlIHBhc3N3b3JkIGZpbGUsCiAgICBhbmQgd2hvIGNvcnJlY3RseSBlbnRlcnMgdGhlaXIgcGFzc3dvcmQuIFlvdSBjYW4gZXZlbiBlbXVsYXRlCiAgICB0aGUgZ3JvdXAgYmVoYXZpb3IgaGVyZSwgYnkganVzdCBrZWVwaW5nIGEgc2VwYXJhdGUgcGFzc3dvcmQKICAgIGZpbGUgZm9yIGVhY2ggZ3JvdXAuIFRoZSBhZHZhbnRhZ2Ugb2YgdGhpcyBhcHByb2FjaCBpcyB0aGF0CiAgICBBcGFjaGUgb25seSBoYXMgdG8gY2hlY2sgb25lIGZpbGUsIHJhdGhlciB0aGFuIHR3by4gVGhlCiAgICBkaXNhZHZhbnRhZ2UgaXMgdGhhdCB5b3UgaGF2ZSB0byBtYWludGFpbiBhIGJ1bmNoIG9mIHBhc3N3b3JkCiAgICBmaWxlcywgYW5kIHJlbWVtYmVyIHRvIHJlZmVyZW5jZSB0aGUgcmlnaHQgb25lIGluIHRoZQogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRobl9maWxlLmh0bWwjYXV0aHVzZXJmaWxlIj5BdXRoVXNlckZpbGU8L2E+PC9jb2RlPiBkaXJlY3RpdmUuPC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJwb3NzaWJsZXByb2JsZW1zIiBpZD0icG9zc2libGVwcm9ibGVtcyI+UG9zc2libGUgcHJvYmxlbXM8L2E+PC9oMj4KICAgIDxwPkJlY2F1c2Ugb2YgdGhlIHdheSB0aGF0IEJhc2ljIGF1dGhlbnRpY2F0aW9uIGlzIHNwZWNpZmllZCwKICAgIHlvdXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIG11c3QgYmUgdmVyaWZpZWQgZXZlcnkgdGltZSB5b3UKICAgIHJlcXVlc3QgYSBkb2N1bWVudCBmcm9tIHRoZSBzZXJ2ZXIuIFRoaXMgaXMgZXZlbiBpZiB5b3UncmUKICAgIHJlbG9hZGluZyB0aGUgc2FtZSBwYWdlLCBhbmQgZm9yIGV2ZXJ5IGltYWdlIG9uIHRoZSBwYWdlIChpZgogICAgdGhleSBjb21lIGZyb20gYSBwcm90ZWN0ZWQgZGlyZWN0b3J5KS4gQXMgeW91IGNhbiBpbWFnaW5lLCB0aGlzCiAgICBzbG93cyB0aGluZ3MgZG93biBhIGxpdHRsZS4gVGhlIGFtb3VudCB0aGF0IGl0IHNsb3dzIHRoaW5ncwogICAgZG93biBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlIHNpemUgb2YgdGhlIHBhc3N3b3JkIGZpbGUsIGJlY2F1c2UKICAgIGl0IGhhcyB0byBvcGVuIHVwIHRoYXQgZmlsZSwgYW5kIGdvIGRvd24gdGhlIGxpc3Qgb2YgdXNlcnMKICAgIHVudGlsIGl0IGdldHMgdG8geW91ciBuYW1lLiBBbmQgaXQgaGFzIHRvIGRvIHRoaXMgZXZlcnkgdGltZSBhCiAgICBwYWdlIGlzIGxvYWRlZC48L3A+CgogICAgPHA+QSBjb25zZXF1ZW5jZSBvZiB0aGlzIGlzIHRoYXQgdGhlcmUncyBhIHByYWN0aWNhbCBsaW1pdCB0bwogICAgaG93IG1hbnkgdXNlcnMgeW91IGNhbiBwdXQgaW4gb25lIHBhc3N3b3JkIGZpbGUuIFRoaXMgbGltaXQKICAgIHdpbGwgdmFyeSBkZXBlbmRpbmcgb24gdGhlIHBlcmZvcm1hbmNlIG9mIHlvdXIgcGFydGljdWxhcgogICAgc2VydmVyIG1hY2hpbmUsIGJ1dCB5b3UgY2FuIGV4cGVjdCB0byBzZWUgc2xvd2Rvd25zIG9uY2UgeW91CiAgICBnZXQgYWJvdmUgYSBmZXcgaHVuZHJlZCBlbnRyaWVzLCBhbmQgbWF5IHdpc2ggdG8gY29uc2lkZXIgYQogICAgZGlmZmVyZW50IGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBhdCB0aGF0IHRpbWUuPC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJkYm1kYmQiIGlkPSJkYm1kYmQiPkFsdGVybmF0ZSBwYXNzd29yZCBzdG9yYWdlPC9hPjwvaDI+CgogICAgPHA+QmVjYXVzZSBzdG9yaW5nIHBhc3N3b3JkcyBpbiBwbGFpbiB0ZXh0IGZpbGVzIGhhcyB0aGUgYWJvdmUKICAgIHByb2JsZW1zLCB5b3UgbWF5IHdpc2ggdG8gc3RvcmUgeW91ciBwYXNzd29yZHMgc29tZXdoZXJlIGVsc2UsIHN1Y2gKICAgIGFzIGluIGEgZGF0YWJhc2UuPC9wPgoKICAgIDxwPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aG5fZGJtLmh0bWwiPm1vZF9hdXRobl9kYm08L2E+PC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRobl9kYmQuaHRtbCI+bW9kX2F1dGhuX2RiZDwvYT48L2NvZGU+IGFyZSB0d28KICAgIG1vZHVsZXMgd2hpY2ggbWFrZSB0aGlzIHBvc3NpYmxlLiBSYXRoZXIgdGhhbiBzZWxlY3RpbmcgPGNvZGU+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRoX2Jhc2ljLmh0bWwjYXV0aGJhc2ljcHJvdmlkZXIiPkF1dGhCYXNpY1Byb3ZpZGVyPC9hPjwvY29kZT4gZmlsZTwvY29kZT4sIGluc3RlYWQKICAgIHlvdSBjYW4gY2hvb3NlIDxjb2RlPmRibTwvY29kZT4gb3IgPGNvZGU+ZGJkPC9jb2RlPiBhcyB5b3VyIHN0b3JhZ2UKICAgIGZvcm1hdC48L3A+CgogICAgPHA+VG8gc2VsZWN0IGEgZGJtIGZpbGUgcmF0aGVyIHRoYW4gYSB0ZXh0IGZpbGUsIGZvciBleGFtcGxlOjwvcD4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+Jmx0O0RpcmVjdG9yeSAiL3d3dy9kb2NzL3ByaXZhdGUiJmd0OwogICAgQXV0aE5hbWUgIlByaXZhdGUiCiAgICBBdXRoVHlwZSBCYXNpYwogICAgQXV0aEJhc2ljUHJvdmlkZXIgZGJtCiAgICBBdXRoREJNVXNlckZpbGUgIi93d3cvcGFzc3dvcmRzL3Bhc3N3ZC5kYm0iCiAgICBSZXF1aXJlIHZhbGlkLXVzZXIKJmx0Oy9EaXJlY3RvcnkmZ3Q7PC9wcmU+CgoKICAgIDxwPk90aGVyIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gQ29uc3VsdCB0aGUKICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aG5fZGJtLmh0bWwiPm1vZF9hdXRobl9kYm08L2E+PC9jb2RlPiBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMuPC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJtdWx0cHJvdmlkZXIiIGlkPSJtdWx0cHJvdmlkZXIiPlVzaW5nIG11bHRpcGxlIHByb3ZpZGVyczwvYT48L2gyPgoKICAgIDxwPldpdGggdGhlIGludHJvZHVjdGlvbiBvZiB0aGUgbmV3IHByb3ZpZGVyIGJhc2VkIGF1dGhlbnRpY2F0aW9uIGFuZAogICAgYXV0aG9yaXphdGlvbiBhcmNoaXRlY3R1cmUsIHlvdSBhcmUgbm8gbG9uZ2VyIGxvY2tlZCBpbnRvIGEgc2luZ2xlCiAgICBhdXRoZW50aWNhdGlvbiBvciBhdXRob3JpemF0aW9uIG1ldGhvZC4gSW4gZmFjdCBhbnkgbnVtYmVyIG9mIHRoZQogICAgcHJvdmlkZXJzIGNhbiBiZSBtaXhlZCBhbmQgbWF0Y2hlZCB0byBwcm92aWRlIHlvdSB3aXRoIGV4YWN0bHkgdGhlCiAgICBzY2hlbWUgdGhhdCBtZWV0cyB5b3VyIG5lZWRzLiBJbiB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIGJvdGggdGhlCiAgICBmaWxlIGFuZCBMREFQIGJhc2VkIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVycyBhcmUgYmVpbmcgdXNlZC48L3A+CgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtEaXJlY3RvcnkgIi93d3cvZG9jcy9wcml2YXRlIiZndDsKICAgIEF1dGhOYW1lICJQcml2YXRlIgogICAgQXV0aFR5cGUgQmFzaWMKICAgIEF1dGhCYXNpY1Byb3ZpZGVyIGZpbGUgbGRhcAogICAgQXV0aFVzZXJGaWxlICIvdXNyL2xvY2FsL2FwYWNoZS9wYXNzd2QvcGFzc3dvcmRzIgogICAgQXV0aExEQVBVUkwgbGRhcDovL2xkYXBob3N0L289eW91cm9yZwogICAgUmVxdWlyZSB2YWxpZC11c2VyCiZsdDsvRGlyZWN0b3J5Jmd0OzwvcHJlPgoKCiAgICA8cD5JbiB0aGlzIGV4YW1wbGUgdGhlIGZpbGUgcHJvdmlkZXIgd2lsbCBhdHRlbXB0IHRvIGF1dGhlbnRpY2F0ZQogICAgdGhlIHVzZXIgZmlyc3QuIElmIGl0IGlzIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgdGhlIHVzZXIsIHRoZSBMREFQCiAgICBwcm92aWRlciB3aWxsIGJlIGNhbGxlZC4gVGhpcyBhbGxvd3MgdGhlIHNjb3BlIG9mIGF1dGhlbnRpY2F0aW9uCiAgICB0byBiZSBicm9hZGVuZWQgaWYgeW91ciBvcmdhbml6YXRpb24gaW1wbGVtZW50cyBtb3JlIHRoYW4KICAgIG9uZSB0eXBlIG9mIGF1dGhlbnRpY2F0aW9uIHN0b3JlLiBPdGhlciBhdXRoZW50aWNhdGlvbiBhbmQgYXV0aG9yaXphdGlvbgogICAgc2NlbmFyaW9zIG1heSBpbmNsdWRlIG1peGluZyBvbmUgdHlwZSBvZiBhdXRoZW50aWNhdGlvbiB3aXRoIGEKICAgIGRpZmZlcmVudCB0eXBlIG9mIGF1dGhvcml6YXRpb24uIEZvciBleGFtcGxlLCBhdXRoZW50aWNhdGluZyBhZ2FpbnN0CiAgICBhIHBhc3N3b3JkIGZpbGUgeWV0IGF1dGhvcml6aW5nIGFnYWluc3QgYW4gTERBUCBkaXJlY3RvcnkuPC9wPgoKICAgIDxwPkp1c3QgYXMgbXVsdGlwbGUgYXV0aGVudGljYXRpb24gcHJvdmlkZXJzIGNhbiBiZSBpbXBsZW1lbnRlZCwgbXVsdGlwbGUKICAgIGF1dGhvcml6YXRpb24gbWV0aG9kcyBjYW4gYWxzbyBiZSB1c2VkLiBJbiB0aGlzIGV4YW1wbGUgYm90aCBmaWxlIGdyb3VwCiAgICBhdXRob3JpemF0aW9uIGFzIHdlbGwgYXMgTERBUCBncm91cCBhdXRob3JpemF0aW9uIGlzIGJlaW5nIHVzZWQuPC9wPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7RGlyZWN0b3J5ICIvd3d3L2RvY3MvcHJpdmF0ZSImZ3Q7CiAgICBBdXRoTmFtZSAiUHJpdmF0ZSIKICAgIEF1dGhUeXBlIEJhc2ljCiAgICBBdXRoQmFzaWNQcm92aWRlciBmaWxlCiAgICBBdXRoVXNlckZpbGUgIi91c3IvbG9jYWwvYXBhY2hlL3Bhc3N3ZC9wYXNzd29yZHMiCiAgICBBdXRoTERBUFVSTCBsZGFwOi8vbGRhcGhvc3Qvbz15b3Vyb3JnCiAgICBBdXRoR3JvdXBGaWxlICIvdXNyL2xvY2FsL2FwYWNoZS9wYXNzd2QvZ3JvdXBzIgogICAgUmVxdWlyZSBncm91cCBHcm91cE5hbWUKICAgIFJlcXVpcmUgbGRhcC1ncm91cCBjbj1teWdyb3VwLG89eW91cm9yZwombHQ7L0RpcmVjdG9yeSZndDs8L3ByZT4KCgogICAgPHA+VG8gdGFrZSBhdXRob3JpemF0aW9uIGEgbGl0dGxlIGZ1cnRoZXIsIGF1dGhvcml6YXRpb24gY29udGFpbmVyCiAgICBkaXJlY3RpdmVzIHN1Y2ggYXMKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aHpfY29yZS5odG1sI3JlcXVpcmVhbGwiPiZsdDtSZXF1aXJlQWxsJmd0OzwvYT48L2NvZGU+CiAgICBhbmQKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aHpfY29yZS5odG1sI3JlcXVpcmVhbnkiPiZsdDtSZXF1aXJlQW55Jmd0OzwvYT48L2NvZGU+CiAgICBhbGxvdyBsb2dpYyB0byBiZSBhcHBsaWVkIHNvIHRoYXQgdGhlIG9yZGVyIGluIHdoaWNoIGF1dGhvcml6YXRpb24KICAgIGlzIGhhbmRsZWQgY2FuIGJlIGNvbXBsZXRlbHkgY29udHJvbGxlZCB0aHJvdWdoIHRoZSBjb25maWd1cmF0aW9uLgogICAgU2VlIDxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aHpfY29yZS5odG1sI2xvZ2ljIj5BdXRob3JpemF0aW9uCiAgICBDb250YWluZXJzPC9hPiBmb3IgYW4gZXhhbXBsZSBvZiBob3cgdGhleSBtYXkgYmUgYXBwbGllZC48L3A+Cgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJiZXlvbmQiIGlkPSJiZXlvbmQiPkJleW9uZCBqdXN0IGF1dGhvcml6YXRpb248L2E+PC9oMj4KCiAgICA8cD5UaGUgd2F5IHRoYXQgYXV0aG9yaXphdGlvbiBjYW4gYmUgYXBwbGllZCBpcyBub3cgbXVjaCBtb3JlIGZsZXhpYmxlCiAgICB0aGFuIGp1c3QgYSBzaW5nbGUgY2hlY2sgYWdhaW5zdCBhIHNpbmdsZSBkYXRhIHN0b3JlLiBPcmRlcmluZywgbG9naWMKICAgIGFuZCBjaG9vc2luZyBob3cgYXV0aG9yaXphdGlvbiB3aWxsIGJlIGRvbmUgaXMgbm93IHBvc3NpYmxlLjwvcD4KCiAgICA8aDM+PGEgbmFtZT0iYXV0aGFuZG9yb3JkZXIiIGlkPSJhdXRoYW5kb3JvcmRlciI+QXBwbHlpbmcgbG9naWMgYW5kIG9yZGVyaW5nPC9hPjwvaDM+CiAgICAgICAgPHA+Q29udHJvbGxpbmcgaG93IGFuZCBpbiB3aGF0IG9yZGVyIGF1dGhvcml6YXRpb24gd2lsbCBiZSBhcHBsaWVkCiAgICAgICAgaGFzIGJlZW4gYSBiaXQgb2YgYSBteXN0ZXJ5IGluIHRoZSBwYXN0LiBJbiBBcGFjaGUgMi4yIGEgcHJvdmlkZXItYmFzZWQKICAgICAgICBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20gd2FzIGludHJvZHVjZWQgdG8gZGVjb3VwbGUgdGhlIGFjdHVhbAogICAgICAgIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MgZnJvbSBhdXRob3JpemF0aW9uIGFuZCBzdXBwb3J0aW5nIGZ1bmN0aW9uYWxpdHkuCiAgICAgICAgT25lIG9mIHRoZSBzaWRlIGJlbmVmaXRzIHdhcyB0aGF0IGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVycyBjb3VsZCBiZQogICAgICAgIGNvbmZpZ3VyZWQgYW5kIGNhbGxlZCBpbiBhIHNwZWNpZmljIG9yZGVyIHdoaWNoIGRpZG4ndCBkZXBlbmQgb24gdGhlCiAgICAgICAgbG9hZCBvcmRlciBvZiB0aGUgYXV0aCBtb2R1bGUgaXRzZWxmLiBUaGlzIHNhbWUgcHJvdmlkZXIgYmFzZWQgbWVjaGFuaXNtCiAgICAgICAgaGFzIGJlZW4gYnJvdWdodCBmb3J3YXJkIGludG8gYXV0aG9yaXphdGlvbiBhcyB3ZWxsLiBXaGF0IHRoaXMgbWVhbnMgaXMKICAgICAgICB0aGF0IHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGh6X2NvcmUuaHRtbCNyZXF1aXJlIj5SZXF1aXJlPC9hPjwvY29kZT4gZGlyZWN0aXZlCiAgICAgICAgbm90IG9ubHkgc3BlY2lmaWVzIHdoaWNoIGF1dGhvcml6YXRpb24gbWV0aG9kcyBzaG91bGQgYmUgdXNlZCwgaXQgYWxzbwogICAgICAgIHNwZWNpZmllcyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgY2FsbGVkLiBNdWx0aXBsZSBhdXRob3JpemF0aW9uCiAgICAgICAgbWV0aG9kcyBhcmUgY2FsbGVkIGluIHRoZSBzYW1lIG9yZGVyIGluIHdoaWNoIHRoZQogICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aHpfY29yZS5odG1sI3JlcXVpcmUiPlJlcXVpcmU8L2E+PC9jb2RlPiBkaXJlY3RpdmVzCiAgICAgICAgYXBwZWFyIGluIHRoZSBjb25maWd1cmF0aW9uLjwvcD4KCiAgICAgICAgPHA+V2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIGF1dGhvcml6YXRpb24gY29udGFpbmVyIGRpcmVjdGl2ZXMKICAgICAgICBzdWNoIGFzCiAgICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRoel9jb3JlLmh0bWwjcmVxdWlyZWFsbCI+Jmx0O1JlcXVpcmVBbGwmZ3Q7PC9hPjwvY29kZT4KICAgICAgICBhbmQKICAgICAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGh6X2NvcmUuaHRtbCNyZXF1aXJlYW55Ij4mbHQ7UmVxdWlyZUFueSZndDs8L2E+PC9jb2RlPiwKICAgICAgICB0aGUgY29uZmlndXJhdGlvbiBhbHNvIGhhcyBjb250cm9sIG92ZXIgd2hlbiB0aGUKICAgICAgICBhdXRob3JpemF0aW9uIG1ldGhvZHMgYXJlIGNhbGxlZCBhbmQgd2hhdCBjcml0ZXJpYSBkZXRlcm1pbmVzIHdoZW4KICAgICAgICBhY2Nlc3MgaXMgZ3JhbnRlZC4gIFNlZQogICAgICAgIDxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aHpfY29yZS5odG1sI2xvZ2ljIj5BdXRob3JpemF0aW9uIENvbnRhaW5lcnM8L2E+CiAgICAgICAgZm9yIGFuIGV4YW1wbGUgb2YgaG93IHRoZXkgbWF5IGJlIHVzZWQgdG8gZXhwcmVzcyBjb21wbGV4CiAgICAgICAgYXV0aG9yaXphdGlvbiBsb2dpYy48L3A+CgogICAgICAgIDxwPkJ5IGRlZmF1bHQgYWxsCiAgICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRoel9jb3JlLmh0bWwjcmVxdWlyZSI+UmVxdWlyZTwvYT48L2NvZGU+CiAgICAgICAgZGlyZWN0aXZlcyBhcmUgaGFuZGxlZCBhcyB0aG91Z2ggY29udGFpbmVkIHdpdGhpbiBhCiAgICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRoel9jb3JlLmh0bWwjcmVxdWlyZWFueSI+Jmx0O1JlcXVpcmVBbnkmZ3Q7PC9hPjwvY29kZT4KICAgICAgICBjb250YWluZXIgZGlyZWN0aXZlLiAgSW4gb3RoZXIgd29yZHMsIGlmCiAgICAgICAgYW55IG9mIHRoZSBzcGVjaWZpZWQgYXV0aG9yaXphdGlvbiBtZXRob2RzIHN1Y2NlZWQsIHRoZW4gYXV0aG9yaXphdGlvbgogICAgICAgIGlzIGdyYW50ZWQuPC9wPgoKICAgIAoKICAgIDxoMz48YSBuYW1lPSJyZXFhY2Nlc3NjdHJsIiBpZD0icmVxYWNjZXNzY3RybCI+VXNpbmcgYXV0aG9yaXphdGlvbiBwcm92aWRlcnMgZm9yIGFjY2VzcyBjb250cm9sPC9hPjwvaDM+CiAgICAgICAgPHA+QXV0aGVudGljYXRpb24gYnkgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGlzIG9ubHkgcGFydCBvZiB0aGUKICAgICAgICBzdG9yeS4gRnJlcXVlbnRseSB5b3Ugd2FudCB0byBsZXQgcGVvcGxlIGluIGJhc2VkIG9uIHNvbWV0aGluZwogICAgICAgIG90aGVyIHRoYW4gd2hvIHRoZXkgYXJlLiBTb21ldGhpbmcgc3VjaCBhcyB3aGVyZSB0aGV5IGFyZQogICAgICAgIGNvbWluZyBmcm9tLjwvcD4KCiAgICAgICAgPHA+VGhlIGF1dGhvcml6YXRpb24gcHJvdmlkZXJzIDxjb2RlPmFsbDwvY29kZT4sCiAgICAgICAgPGNvZGU+ZW52PC9jb2RlPiwgPGNvZGU+aG9zdDwvY29kZT4gYW5kIDxjb2RlPmlwPC9jb2RlPiBsZXQgeW91CiAgICAgICAgYWxsb3cgb3IgZGVueSBhY2Nlc3MgYmFzZWQgb24gb3RoZXIgaG9zdCBiYXNlZCBjcml0ZXJpYSBzdWNoIGFzCiAgICAgICAgaG9zdCBuYW1lIG9yIGlwIGFkZHJlc3Mgb2YgdGhlIG1hY2hpbmUgcmVxdWVzdGluZyBhCiAgICAgICAgZG9jdW1lbnQuPC9wPgoKICAgICAgICA8cD5UaGUgdXNhZ2Ugb2YgdGhlc2UgcHJvdmlkZXJzIGlzIHNwZWNpZmllZCB0aHJvdWdoIHRoZQogICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aHpfY29yZS5odG1sI3JlcXVpcmUiPlJlcXVpcmU8L2E+PC9jb2RlPiBkaXJlY3RpdmUuCiAgICAgICAgVGhpcyBkaXJlY3RpdmUgcmVnaXN0ZXJzIHRoZSBhdXRob3JpemF0aW9uIHByb3ZpZGVycwogICAgICAgIHRoYXQgd2lsbCBiZSBjYWxsZWQgZHVyaW5nIHRoZSBhdXRob3JpemF0aW9uIHN0YWdlIG9mIHRoZSByZXF1ZXN0CiAgICAgICAgcHJvY2Vzc2luZy4gRm9yIGV4YW1wbGU6PC9wPgoKICAgICAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+UmVxdWlyZSBpcCA8dmFyPmFkZHJlc3M8L3Zhcj4KICAgICAgICA8L3ByZT4KCgogICAgICAgIDxwPndoZXJlIDx2YXI+YWRkcmVzczwvdmFyPiBpcyBhbiBJUCBhZGRyZXNzIChvciBhIHBhcnRpYWwgSVAKICAgICAgICBhZGRyZXNzKSBvcjo8L3A+CgogICAgICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5SZXF1aXJlIGhvc3QgPHZhcj5kb21haW5fbmFtZTwvdmFyPgogICAgICAgIDwvcHJlPgoKCiAgICAgICAgPHA+d2hlcmUgPHZhcj5kb21haW5fbmFtZTwvdmFyPiBpcyBhIGZ1bGx5IHF1YWxpZmllZCBkb21haW4gbmFtZQogICAgICAgIChvciBhIHBhcnRpYWwgZG9tYWluIG5hbWUpOyB5b3UgbWF5IHByb3ZpZGUgbXVsdGlwbGUgYWRkcmVzc2VzIG9yCiAgICAgICAgZG9tYWluIG5hbWVzLCBpZiBkZXNpcmVkLjwvcD4KCiAgICAgICAgPHA+Rm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHNvbWVvbmUgc3BhbW1pbmcgeW91ciBtZXNzYWdlCiAgICAgICAgYm9hcmQsIGFuZCB5b3Ugd2FudCB0byBrZWVwIHRoZW0gb3V0LCB5b3UgY291bGQgZG8gdGhlCiAgICAgICAgZm9sbG93aW5nOjwvcD4KCiAgICAgICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtSZXF1aXJlQWxsJmd0OwogICAgUmVxdWlyZSBhbGwgZ3JhbnRlZAogICAgUmVxdWlyZSBub3QgaXAgMTAuMjUyLjQ2LjE2NQombHQ7L1JlcXVpcmVBbGwmZ3Q7PC9wcmU+CgoKICAgICAgICA8cD5WaXNpdG9ycyBjb21pbmcgZnJvbSB0aGF0IGFkZHJlc3Mgd2lsbCBub3QgYmUgYWJsZSB0byBzZWUKICAgICAgICB0aGUgY29udGVudCBjb3ZlcmVkIGJ5IHRoaXMgZGlyZWN0aXZlLiBJZiwgaW5zdGVhZCwgeW91IGhhdmUgYQogICAgICAgIG1hY2hpbmUgbmFtZSwgcmF0aGVyIHRoYW4gYW4gSVAgYWRkcmVzcywgeW91IGNhbiB1c2UgdGhhdC48L3A+CgogICAgICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj4mbHQ7UmVxdWlyZUFsbCZndDsKICAgIFJlcXVpcmUgYWxsIGdyYW50ZWQKICAgIFJlcXVpcmUgbm90IGhvc3QgaG9zdC5leGFtcGxlLmNvbQombHQ7L1JlcXVpcmVBbGwmZ3Q7PC9wcmU+CgoKICAgICAgICA8cD5BbmQsIGlmIHlvdSdkIGxpa2UgdG8gYmxvY2sgYWNjZXNzIGZyb20gYW4gZW50aXJlIGRvbWFpbiwKICAgICAgICB5b3UgY2FuIHNwZWNpZnkganVzdCBwYXJ0IG9mIGFuIGFkZHJlc3Mgb3IgZG9tYWluIG5hbWU6PC9wPgoKICAgICAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+Jmx0O1JlcXVpcmVBbGwmZ3Q7CiAgICBSZXF1aXJlIGFsbCBncmFudGVkCiAgICBSZXF1aXJlIG5vdCBpcCAxOTIuMTY4LjIwNQogICAgUmVxdWlyZSBub3QgaG9zdCBwaGlzaGVycy5leGFtcGxlLmNvbSBtb3JlaWRpb3RzLmV4YW1wbGUKICAgIFJlcXVpcmUgbm90IGhvc3Qga2UKJmx0Oy9SZXF1aXJlQWxsJmd0OzwvcHJlPgoKCiAgICAgICAgPHA+VXNpbmcgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRoel9jb3JlLmh0bWwjcmVxdWlyZWFsbCI+Jmx0O1JlcXVpcmVBbGwmZ3Q7PC9hPjwvY29kZT4KICAgICAgICB3aXRoIG11bHRpcGxlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aHpfY29yZS5odG1sI3JlcXVpcmUiPiZsdDtSZXF1aXJlJmd0OzwvYT48L2NvZGU+IGRpcmVjdGl2ZXMsIGVhY2ggbmVnYXRlZCB3aXRoIDxjb2RlPm5vdDwvY29kZT4sCiAgICAgICAgd2lsbCBvbmx5IGFsbG93IGFjY2VzcywgaWYgYWxsIG9mIG5lZ2F0ZWQgY29uZGl0aW9ucyBhcmUgdHJ1ZS4gSW4gb3RoZXIgd29yZHMsCiAgICAgICAgYWNjZXNzIHdpbGwgYmUgYmxvY2tlZCwgaWYgYW55IG9mIHRoZSBuZWdhdGVkIGNvbmRpdGlvbnMgZmFpbHMuPC9wPgoKICAgIAoKICAgIDxoMz48YSBuYW1lPSJmaWxlc3lzdGVtIiBpZD0iZmlsZXN5c3RlbSI+QWNjZXNzIENvbnRyb2wgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk8L2E+PC9oMz4KICAgICAgICA8cD5PbmUgb2YgdGhlIHNpZGUgZWZmZWN0cyBvZiBhZG9wdGluZyBhIHByb3ZpZGVyIGJhc2VkIG1lY2hhbmlzbSBmb3IKICAgICAgICBhdXRoZW50aWNhdGlvbiBpcyB0aGF0IHRoZSBwcmV2aW91cyBhY2Nlc3MgY29udHJvbCBkaXJlY3RpdmVzCiAgICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hY2Nlc3NfY29tcGF0Lmh0bWwjb3JkZXIiPk9yZGVyPC9hPjwvY29kZT4sCiAgICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hY2Nlc3NfY29tcGF0Lmh0bWwjYWxsb3ciPkFsbG93PC9hPjwvY29kZT4sCiAgICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hY2Nlc3NfY29tcGF0Lmh0bWwjZGVueSI+RGVueTwvYT48L2NvZGU+IGFuZAogICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYWNjZXNzX2NvbXBhdC5odG1sI3NhdGlzZnkiPlNhdGlzZnk8L2E+PC9jb2RlPiBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4KICAgICAgICBIb3dldmVyIHRvIHByb3ZpZGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIG9sZGVyIGNvbmZpZ3VyYXRpb25zLCB0aGVzZQogICAgICAgIGRpcmVjdGl2ZXMgaGF2ZSBiZWVuIG1vdmVkIHRvIHRoZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2FjY2Vzc19jb21wYXQuaHRtbCI+bW9kX2FjY2Vzc19jb21wYXQ8L2E+PC9jb2RlPiBtb2R1bGUuPC9wPgoKICAgICAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIj48aDM+Tm90ZTwvaDM+CiAgICAgICAgPHA+VGhlIGRpcmVjdGl2ZXMgcHJvdmlkZWQgYnkgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hY2Nlc3NfY29tcGF0Lmh0bWwiPm1vZF9hY2Nlc3NfY29tcGF0PC9hPjwvY29kZT4gaGF2ZQogICAgICAgIGJlZW4gZGVwcmVjYXRlZCBieSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGh6X2hvc3QuaHRtbCI+bW9kX2F1dGh6X2hvc3Q8L2E+PC9jb2RlPi4KICAgICAgICBNaXhpbmcgb2xkIGRpcmVjdGl2ZXMgbGlrZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2FjY2Vzc19jb21wYXQuaHRtbCNvcmRlciI+T3JkZXI8L2E+PC9jb2RlPiwgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hY2Nlc3NfY29tcGF0Lmh0bWwjYWxsb3ciPkFsbG93PC9hPjwvY29kZT4gb3IgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hY2Nlc3NfY29tcGF0Lmh0bWwjZGVueSI+RGVueTwvYT48L2NvZGU+IHdpdGggbmV3IG9uZXMgbGlrZQogICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aHpfY29yZS5odG1sI3JlcXVpcmUiPlJlcXVpcmU8L2E+PC9jb2RlPiBpcyB0ZWNobmljYWxseSBwb3NzaWJsZQogICAgICAgIGJ1dCBkaXNjb3VyYWdlZC4gVGhlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYWNjZXNzX2NvbXBhdC5odG1sIj5tb2RfYWNjZXNzX2NvbXBhdDwvYT48L2NvZGU+IG1vZHVsZSB3YXMgY3JlYXRlZCB0byBzdXBwb3J0CiAgICAgICAgY29uZmlndXJhdGlvbnMgY29udGFpbmluZyBvbmx5IG9sZCBkaXJlY3RpdmVzIHRvIGZhY2lsaXRhdGUgdGhlIDIuNCB1cGdyYWRlLgogICAgICAgIFBsZWFzZSBjaGVjayB0aGUgPGEgaHJlZj0iLi4vdXBncmFkaW5nLmh0bWwiPnVwZ3JhZGluZzwvYT4gZ3VpZGUgZm9yIG1vcmUKICAgICAgICBpbmZvcm1hdGlvbi4KICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAKCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InNvY2FjaGUiIGlkPSJzb2NhY2hlIj5BdXRoZW50aWNhdGlvbiBDYWNoaW5nPC9hPjwvaDI+CiAgICA8cD5UaGVyZSBtYXkgYmUgdGltZXMgd2hlbiBhdXRoZW50aWNhdGlvbiBwdXRzIGFuIHVuYWNjZXB0YWJsZSBsb2FkCiAgICBvbiBhIHByb3ZpZGVyIG9yIG9uIHlvdXIgbmV0d29yay4gIFRoaXMgaXMgbW9zdCBsaWtlbHkgdG8gYWZmZWN0IHVzZXJzCiAgICBvZiA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGhuX2RiZC5odG1sIj5tb2RfYXV0aG5fZGJkPC9hPjwvY29kZT4gKG9yIHRoaXJkLXBhcnR5L2N1c3RvbSBwcm92aWRlcnMpLgogICAgVG8gZGVhbCB3aXRoIHRoaXMsIEhUVFBEIDIuMy8yLjQgaW50cm9kdWNlcyBhIG5ldyBjYWNoaW5nIHByb3ZpZGVyCiAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGhuX3NvY2FjaGUuaHRtbCI+bW9kX2F1dGhuX3NvY2FjaGU8L2E+PC9jb2RlPiB0byBjYWNoZSBjcmVkZW50aWFscyBhbmQgcmVkdWNlCiAgICB0aGUgbG9hZCBvbiB0aGUgb3JpZ2luIHByb3ZpZGVyKHMpLjwvcD4KICAgIDxwPlRoaXMgbWF5IG9mZmVyIGEgc3Vic3RhbnRpYWwgcGVyZm9ybWFuY2UgYm9vc3QgdG8gc29tZSB1c2Vycy48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9Im1vcmVpbmZvcm1hdGlvbiIgaWQ9Im1vcmVpbmZvcm1hdGlvbiI+TW9yZSBpbmZvcm1hdGlvbjwvYT48L2gyPgogICAgPHA+WW91IHNob3VsZCBhbHNvIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gZm9yCiAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGhfYmFzaWMuaHRtbCI+bW9kX2F1dGhfYmFzaWM8L2E+PC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRoel9ob3N0Lmh0bWwiPm1vZF9hdXRoel9ob3N0PC9hPjwvY29kZT4KICAgIHdoaWNoIGNvbnRhaW4gc29tZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0aGlzIGFsbCB3b3Jrcy4gIFRoZQogICAgZGlyZWN0aXZlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aG5fY29yZS5odG1sI2F1dGhucHJvdmlkZXJhbGlhcyI+Jmx0O0F1dGhuUHJvdmlkZXJBbGlhcyZndDs8L2E+PC9jb2RlPiBjYW4gYWxzbyBoZWxwCiAgICBpbiBzaW1wbGlmeWluZyBjZXJ0YWluIGF1dGhlbnRpY2F0aW9uIGNvbmZpZ3VyYXRpb25zLjwvcD4KCiAgICA8cD5UaGUgdmFyaW91cyBjaXBoZXJzIHN1cHBvcnRlZCBieSBBcGFjaGUgZm9yIGF1dGhlbnRpY2F0aW9uIGRhdGEgYXJlCiAgICBleHBsYWluZWQgaW4gPGEgaHJlZj0iLi4vbWlzYy9wYXNzd29yZF9lbmNyeXB0aW9ucy5odG1sIj5QYXNzd29yZAogICAgRW5jcnlwdGlvbnM8L2E+LjwvcD4KCiAgICA8cD5BbmQgeW91IG1heSB3YW50IHRvIGxvb2sgYXQgdGhlIDxhIGhyZWY9ImFjY2Vzcy5odG1sIj5BY2Nlc3MKICAgIENvbnRyb2w8L2E+IGhvd3RvLCB3aGljaCBkaXNjdXNzZXMgYSBudW1iZXIgb2YgcmVsYXRlZCB0b3BpY3MuPC9wPgoKPC9kaXY+PC9kaXY+CjxkaXYgY2xhc3M9ImJvdHRvbWxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vaG93dG8vYXV0aC5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZXMvaG93dG8vYXV0aC5odG1sIiBocmVmbGFuZz0iZXMiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRXNwYfFvbCI+Jm5ic3A7ZXMmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZnIvaG93dG8vYXV0aC5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2phL2hvd3RvL2F1dGguaHRtbCIgaHJlZmxhbmc9ImphIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkphcGFuZXNlIj4mbmJzcDtqYSZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9rby9ob3d0by9hdXRoLmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL3RyL2hvd3RvL2F1dGguaHRtbCIgaHJlZmxhbmc9InRyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlT8cmvnZSI+Jm5ic3A7dHImbmJzcDs8L2E+PC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIGFsdD0idG9wIiAvPjwvYT48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDI+PGEgaWQ9ImNvbW1lbnRzX3NlY3Rpb24iIG5hbWU9ImNvbW1lbnRzX3NlY3Rpb24iPkNvbW1lbnRzPC9hPjwvaDI+PGRpdiBjbGFzcz0id2FybmluZyI+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+PGJyIC8+VGhpcyBpcyBub3QgYSBRJmFtcDtBIHNlY3Rpb24uIENvbW1lbnRzIHBsYWNlZCBoZXJlIHNob3VsZCBiZSBwb2ludGVkIHRvd2FyZHMgc3VnZ2VzdGlvbnMgb24gaW1wcm92aW5nIHRoZSBkb2N1bWVudGF0aW9uIG9yIHNlcnZlciwgYW5kIG1heSBiZSByZW1vdmVkIGFnYWluIGJ5IG91ciBtb2RlcmF0b3JzIGlmIHRoZXkgYXJlIGVpdGhlciBpbXBsZW1lbnRlZCBvciBjb25zaWRlcmVkIGludmFsaWQvb2ZmLXRvcGljLiBRdWVzdGlvbnMgb24gaG93IHRvIG1hbmFnZSB0aGUgQXBhY2hlIEhUVFAgU2VydmVyIHNob3VsZCBiZSBkaXJlY3RlZCBhdCBlaXRoZXIgb3VyIElSQyBjaGFubmVsLCAjaHR0cGQsIG9uIEZyZWVub2RlLCBvciBzZW50IHRvIG91ciA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9saXN0cy5odG1sIj5tYWlsaW5nIGxpc3RzPC9hPi48L2Rpdj4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KdmFyIGNvbW1lbnRzX3Nob3J0bmFtZSA9ICdodHRwZCc7CnZhciBjb21tZW50c19pZGVudGlmaWVyID0gJ2h0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvdHJ1bmsvaG93dG8vYXV0aC5odG1sJzsKKGZ1bmN0aW9uKHcsIGQpIHsKICAgIGlmICh3LmxvY2F0aW9uLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCkgPT0gImh0dHBkLmFwYWNoZS5vcmciKSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj48XC9kaXY+Jyk7CiAgICAgICAgdmFyIHMgPSBkLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIHMudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgIHMuYXN5bmMgPSB0cnVlOwogICAgICAgIHMuc3JjID0gJ2h0dHBzOi8vY29tbWVudHMuYXBhY2hlLm9yZy9zaG93X2NvbW1lbnRzLmx1YT9zaXRlPScgKyBjb21tZW50c19zaG9ydG5hbWUgKyAnJnBhZ2U9JyArIGNvbW1lbnRzX2lkZW50aWZpZXI7CiAgICAgICAgKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSB8fCBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0pLmFwcGVuZENoaWxkKHMpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj5Db21tZW50cyBhcmUgZGlzYWJsZWQgZm9yIHRoaXMgcGFnZSBhdCB0aGUgbW9tZW50LjxcL2Rpdj4nKTsKICAgIH0KfSkod2luZG93LCBkb2N1bWVudCk7Ci8vLS0+PCFdXT48L3NjcmlwdD48L2Rpdj48ZGl2IGlkPSJmb290ZXIiPgo8cCBjbGFzcz0iYXBhY2hlIj5Db3B5cmlnaHQgMjAxNyBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uPGJyIC8+TGljZW5zZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wPC9hPi48L3A+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9xdWlja3JlZmVyZW5jZS5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD48L2Rpdj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQppZiAodHlwZW9mKHByZXR0eVByaW50KSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgIHByZXR0eVByaW50KCk7Cn0KLy8tLT48IV1dPjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==