PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5yb3RhdGVsb2dzIC0gUGlwZWQgbG9nZ2luZyBwcm9ncmFtIHRvIHJvdGF0ZSBBcGFjaGUgbG9ncyAtIEFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNDwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vc3R5bGUvY3NzL3ByZXR0aWZ5LmNzcyIgLz4KPHNjcmlwdCBzcmM9Ii4uL3N0eWxlL3NjcmlwdHMvcHJldHRpZnkubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8L3NjcmlwdD4KCjxsaW5rIGhyZWY9Ii4uL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHkgaWQ9Im1hbnVhbC1wYWdlIj48ZGl2IGlkPSJwYWdlLWhlYWRlciI+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9kaXJlY3RpdmVzLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9GQVEiPkZBUTwvYT4gfCA8YSBocmVmPSIuLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FyeTwvYT4gfCA8YSBocmVmPSIuLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPgo8cCBjbGFzcz0iYXBhY2hlIj5BcGFjaGUgSFRUUCBTZXJ2ZXIgVmVyc2lvbiAyLjQ8L3A+CjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2ZlYXRoZXIuZ2lmIiAvPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ1cCI+PGEgaHJlZj0iLi8iPjxpbWcgdGl0bGU9IiZsdDstIiBhbHQ9IiZsdDstIiBzcmM9Ii4uL2ltYWdlcy9sZWZ0LmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgaWQ9InBhdGgiPgo8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvIj5BcGFjaGU8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvIj5IVFRQIFNlcnZlcjwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLyI+RG9jdW1lbnRhdGlvbjwvYT4gJmd0OyA8YSBocmVmPSIuLi8iPlZlcnNpb24gMi40PC9hPiAmZ3Q7IDxhIGhyZWY9Ii4vIj5Qcm9ncmFtczwvYT48L2Rpdj48ZGl2IGlkPSJwYWdlLWNvbnRlbnQiPjxkaXYgaWQ9InByZWFtYmxlIj48aDE+cm90YXRlbG9ncyAtIFBpcGVkIGxvZ2dpbmcgcHJvZ3JhbSB0byByb3RhdGUgQXBhY2hlIGxvZ3M8L2gxPgo8ZGl2IGNsYXNzPSJ0b3BsYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL3Byb2dyYW1zL3JvdGF0ZWxvZ3MuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2ZyL3Byb2dyYW1zL3JvdGF0ZWxvZ3MuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9rby9wcm9ncmFtcy9yb3RhdGVsb2dzLmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL3RyL3Byb2dyYW1zL3JvdGF0ZWxvZ3MuaHRtbCIgaHJlZmxhbmc9InRyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlT8cmvnZSI+Jm5ic3A7dHImbmJzcDs8L2E+PC9wPgo8L2Rpdj4KCiAgICAgPHA+PGNvZGU+cm90YXRlbG9nczwvY29kZT4gaXMgYSBzaW1wbGUgcHJvZ3JhbSBmb3IgdXNlIGluCiAgICAgY29uanVuY3Rpb24gd2l0aCBBcGFjaGUncyBwaXBlZCBsb2dmaWxlIGZlYXR1cmUuICBJdCBzdXBwb3J0cwogICAgIHJvdGF0aW9uIGJhc2VkIG9uIGEgdGltZSBpbnRlcnZhbCBvciBtYXhpbXVtIHNpemUgb2YgdGhlIGxvZy48L3A+CjwvZGl2Pgo8ZGl2IGlkPSJxdWlja3ZpZXciPjx1bCBpZD0idG9jIj48bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzeW5vcHNpcyI+U3lub3BzaXM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjb3B0aW9ucyI+T3B0aW9uczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNleGFtcGxlcyI+RXhhbXBsZXM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjcG9ydGFiaWxpdHkiPlBvcnRhYmlsaXR5PC9hPjwvbGk+CjwvdWw+PHVsIGNsYXNzPSJzZWVhbHNvIj48bGk+PGEgaHJlZj0iI2NvbW1lbnRzX3NlY3Rpb24iPkNvbW1lbnRzPC9hPjwvbGk+PC91bD48L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0ic3lub3BzaXMiIGlkPSJzeW5vcHNpcyI+U3lub3BzaXM8L2E+PC9oMj4KCiAgICAgPHA+PGNvZGU+PHN0cm9uZz5yb3RhdGVsb2dzPC9zdHJvbmc+CiAgICAgWyAtPHN0cm9uZz5sPC9zdHJvbmc+IF0KICAgICBbIC08c3Ryb25nPkw8L3N0cm9uZz4gPHZhcj5saW5rbmFtZTwvdmFyPiBdCiAgICAgWyAtPHN0cm9uZz5wPC9zdHJvbmc+IDx2YXI+cHJvZ3JhbTwvdmFyPiBdCiAgICAgWyAtPHN0cm9uZz5mPC9zdHJvbmc+IF0KICAgICBbIC08c3Ryb25nPnQ8L3N0cm9uZz4gXQogICAgIFsgLTxzdHJvbmc+djwvc3Ryb25nPiBdCiAgICAgWyAtPHN0cm9uZz5lPC9zdHJvbmc+IF0KICAgICBbIC08c3Ryb25nPmM8L3N0cm9uZz4gXQogICAgIFsgLTxzdHJvbmc+bjwvc3Ryb25nPiA8dmFyPm51bWJlci1vZi1maWxlczwvdmFyPiBdCiAgICAgPHZhcj5sb2dmaWxlPC92YXI+CiAgICAgPHZhcj5yb3RhdGlvbnRpbWU8L3Zhcj58PHZhcj5maWxlc2l6ZTwvdmFyPihCfEt8TXxHKQogICAgIFsgPHZhcj5vZmZzZXQ8L3Zhcj4gXTwvY29kZT48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9Im9wdGlvbnMiIGlkPSJvcHRpb25zIj5PcHRpb25zPC9hPjwvaDI+Cgo8ZGw+Cgo8ZHQ+PGNvZGU+LWw8L2NvZGU+PC9kdD4KPGRkPkNhdXNlcyB0aGUgdXNlIG9mIGxvY2FsIHRpbWUgcmF0aGVyIHRoYW4gR01UIGFzIHRoZSBiYXNlIGZvciB0aGUKaW50ZXJ2YWwgb3IgZm9yIDxjb2RlPnN0cmZ0aW1lKDMpPC9jb2RlPiBmb3JtYXR0aW5nIHdpdGggc2l6ZS1iYXNlZApyb3RhdGlvbi48L2RkPgoKPGR0Pjxjb2RlPi1MPC9jb2RlPiA8dmFyPmxpbmtuYW1lPC92YXI+PC9kdD4KPGRkPkNhdXNlcyBhIGhhcmQgbGluayB0byBiZSBtYWRlIGZyb20gdGhlIGN1cnJlbnQgbG9nZmlsZQp0byB0aGUgc3BlY2lmaWVkIGxpbmsgbmFtZS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gd2F0Y2gKdGhlIGxvZyBjb250aW51b3VzbHkgYWNyb3NzIHJvdGF0aW9ucyB1c2luZyBhIGNvbW1hbmQgbGlrZQo8Y29kZT50YWlsIC1GIGxpbmtuYW1lPC9jb2RlPi48L2RkPgoKPGR0Pjxjb2RlPi1wPC9jb2RlPiA8dmFyPnByb2dyYW08L3Zhcj48L2R0PgoKPGRkPklmIGdpdmVuLCA8Y29kZT5yb3RhdGVsb2dzPC9jb2RlPiB3aWxsIGV4ZWN1dGUgdGhlIHNwZWNpZmllZApwcm9ncmFtIGV2ZXJ5IHRpbWUgYSBuZXcgbG9nIGZpbGUgaXMgb3BlbmVkLiAgVGhlIGZpbGVuYW1lIG9mIHRoZQpuZXdseSBvcGVuZWQgZmlsZSBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9ncmFtLiAgSWYKZXhlY3V0aW5nIGFmdGVyIGEgcm90YXRpb24sIHRoZSBvbGQgbG9nIGZpbGUgaXMgcGFzc2VkIGFzIHRoZSBzZWNvbmQKYXJndW1lbnQuICA8Y29kZT5yb3RhdGVsb2dzPC9jb2RlPiBkb2VzIG5vdCB3YWl0IGZvciB0aGUgc3BlY2lmaWVkCnByb2dyYW0gdG8gdGVybWluYXRlIGJlZm9yZSBjb250aW51aW5nIHRvIG9wZXJhdGUsIGFuZCB3aWxsIG5vdCBsb2cKYW55IGVycm9yIGNvZGUgcmV0dXJuZWQgb24gdGVybWluYXRpb24uICBUaGUgc3Bhd25lZCBwcm9ncmFtIHVzZXMgdGhlCnNhbWUgc3RkaW4sIHN0ZG91dCwgYW5kIHN0ZGVyciBhcyByb3RhdGVsb2dzIGl0c2VsZiwgYW5kIGFsc28gaW5oZXJpdHMKdGhlIGVudmlyb25tZW50LjwvZGQ+Cgo8ZHQ+PGNvZGU+LWY8L2NvZGU+PC9kdD4KPGRkPkNhdXNlcyB0aGUgbG9nZmlsZSB0byBiZSBvcGVuZWQgaW1tZWRpYXRlbHksIGFzIHNvb24gYXMKPGNvZGU+cm90YXRlbG9nczwvY29kZT4gc3RhcnRzLCBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIHRoZQpmaXJzdCBsb2dmaWxlIGVudHJ5IHRvIGJlIHJlYWQgKGZvciBub24tYnVzeSBzaXRlcywgdGhlcmUgbWF5IGJlCmEgc3Vic3RhbnRpYWwgZGVsYXkgYmV0d2VlbiB3aGVuIHRoZSBzZXJ2ZXIgaXMgc3RhcnRlZAphbmQgd2hlbiB0aGUgZmlyc3QgcmVxdWVzdCBpcyBoYW5kbGVkLCBtZWFuaW5nIHRoYXQgdGhlCmFzc29jaWF0ZWQgbG9nZmlsZSBkb2VzIG5vdCAiZXhpc3QiIHVudGlsIHRoZW4sIHdoaWNoCmNhdXNlcyBwcm9ibGVtcyBmcm9tIHNvbWUgYXV0b21hdGVkIGxvZ2dpbmcgdG9vbHMpPC9kZD4KCjxkdD48Y29kZT4tdDwvY29kZT48L2R0Pgo8ZGQ+Q2F1c2VzIHRoZSBsb2dmaWxlIHRvIGJlIHRydW5jYXRlZCBpbnN0ZWFkIG9mIHJvdGF0ZWQuIFRoaXMgaXMKdXNlZnVsIHdoZW4gYSBsb2cgaXMgcHJvY2Vzc2VkIGluIHJlYWwgdGltZSBieSBhIGNvbW1hbmQgbGlrZSB0YWlsLAphbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYXJjaGl2ZWQgZGF0YS4gTm8gc3VmZml4IHdpbGwgYmUgYWRkZWQgdG8KdGhlIGZpbGVuYW1lLCBob3dldmVyIGZvcm1hdCBzdHJpbmdzIGNvbnRhaW5pbmcgJyUnIGNoYXJhY3RlcnMKd2lsbCBiZSByZXNwZWN0ZWQuCjwvZGQ+Cgo8ZHQ+PGNvZGU+LXY8L2NvZGU+PC9kdD4KPGRkPlByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgb24gU1RERVJSLiBUaGUgb3V0cHV0IGNvbnRhaW5zCnRoZSByZXN1bHQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gcGFyc2luZywgYW5kIGFsbCBmaWxlIG9wZW4gYW5kCmNsb3NlIGFjdGlvbnMuPC9kZD4KCjxkdD48Y29kZT4tZTwvY29kZT48L2R0Pgo8ZGQ+RWNobyBsb2dzIHRocm91Z2ggdG8gc3Rkb3V0LiBVc2VmdWwgd2hlbiBsb2dzIG5lZWQgdG8gYmUgZnVydGhlcgpwcm9jZXNzZWQgaW4gcmVhbCB0aW1lIGJ5IGEgZnVydGhlciB0b29sIGluIHRoZSBjaGFpbi48L2RkPgoKPGR0Pjxjb2RlPi1jPC9jb2RlPjwvZHQ+CjxkZD5DcmVhdGUgbG9nIGZpbGUgZm9yIGVhY2ggaW50ZXJ2YWwsIGV2ZW4gaWYgZW1wdHkuPC9kZD4KCjxkdD48Y29kZT4tbiA8dmFyPm51bWJlci1vZi1maWxlczwvdmFyPjwvY29kZT48L2R0Pgo8ZGQ+VXNlIGEgY2lyY3VsYXIgbGlzdCBvZiBmaWxlbmFtZXMgd2l0aG91dCB0aW1lc3RhbXBzLgpXaXRoIC1uIDMsIHRoZSBzZXJpZXMgb2YgbG9nIGZpbGVzIG9wZW5lZCB3b3VsZCBiZQoibG9nZmlsZSIsICJsb2dmaWxlLjEiLCAibG9nZmlsZS4yIiwgdGhlbiBvdmVyd3JpdGluZyAibG9nZmlsZSIuCkF2YWlsYWJsZSBpbiAyLjQuNSBhbmQgbGF0ZXIuPC9kZD4KCjxkdD48Y29kZT48dmFyPmxvZ2ZpbGU8L3Zhcj48L2NvZGU+PC9kdD4KCjxkZD48cD5UaGUgcGF0aCBwbHVzIGJhc2VuYW1lIG9mIHRoZSBsb2dmaWxlLiAgSWYgPHZhcj5sb2dmaWxlPC92YXI+CmluY2x1ZGVzIGFueSAnJScgY2hhcmFjdGVycywgaXQgaXMgdHJlYXRlZCBhcyBhIGZvcm1hdCBzdHJpbmcgZm9yCjxjb2RlPnN0cmZ0aW1lKDMpPC9jb2RlPi4gIE90aGVyd2lzZSwgdGhlIHN1ZmZpeAo8dmFyPi5ubm5ubm5ubm5uPC92YXI+IGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgYW5kIGlzIHRoZSB0aW1lIGluCnNlY29uZHMgKHVubGVzcyB0aGUgLXQgb3B0aW9uIGlzIHVzZWQpLiBCb3RoIGZvcm1hdHMgY29tcHV0ZSB0aGUKc3RhcnQgdGltZSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgcGVyaW9kLiAgRm9yIGV4YW1wbGUsCmlmIGEgcm90YXRpb24gdGltZSBvZiA4NjQwMCBpcyBzcGVjaWZpZWQsIHRoZSBob3VyLCBtaW51dGUsIGFuZApzZWNvbmQgZmllbGRzIGNyZWF0ZWQgZnJvbSB0aGUgPGNvZGU+c3RyZnRpbWUoMyk8L2NvZGU+IGZvcm1hdCB3aWxsCmFsbCBiZSB6ZXJvLCByZWZlcnJpbmcgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCAyNC1ob3VyCnBlcmlvZCAobWlkbmlnaHQpLjwvcD4KPHA+V2hlbiB1c2luZyA8Y29kZT5zdHJmdGltZSgzKTwvY29kZT4gZmlsZW5hbWUgZm9ybWF0dGluZywKYmUgc3VyZSB0aGUgbG9nIGZpbGUgZm9ybWF0IGhhcyBlbm91Z2ggZ3JhbnVsYXJpdHkgdG8gcHJvZHVjZQphIGRpZmZlcmVudCBmaWxlIG5hbWUgZWFjaCB0aW1lIHRoZSBsb2dzIGFyZSByb3RhdGVkLiAgT3RoZXJ3aXNlCnJvdGF0aW9uIHdpbGwgb3ZlcndyaXRlIHRoZSBzYW1lIGZpbGUgaW5zdGVhZCBvZiBzdGFydGluZyBhIG5ldwpvbmUuICBGb3IgZXhhbXBsZSwgaWYgPHZhcj5sb2dmaWxlPC92YXI+IHdhcwo8Y29kZT4vdmFyL2xvZy9lcnJvcmxvZy4lWS0lbS0lZDwvY29kZT4gd2l0aCBsb2cgcm90YXRpb24gYXQgNQptZWdhYnl0ZXMsIGJ1dCA1IG1lZ2FieXRlcyB3YXMgcmVhY2hlZCB0d2ljZSBpbiB0aGUgc2FtZSBkYXksIHRoZQpzYW1lIGxvZyBmaWxlIG5hbWUgd291bGQgYmUgcHJvZHVjZWQgYW5kIGxvZyByb3RhdGlvbiB3b3VsZCBrZWVwCndyaXRpbmcgdG8gdGhlIHNhbWUgZmlsZS48L3A+CjwvZGQ+Cgo8ZHQ+PGNvZGU+PHZhcj5yb3RhdGlvbnRpbWU8L3Zhcj48L2NvZGU+PC9kdD4KCjxkZD5UaGUgdGltZSBiZXR3ZWVuIGxvZyBmaWxlIHJvdGF0aW9ucyBpbiBzZWNvbmRzLiAgVGhlIHJvdGF0aW9uCm9jY3VycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgaW50ZXJ2YWwuICBGb3IgZXhhbXBsZSwgaWYgdGhlCnJvdGF0aW9uIHRpbWUgaXMgMzYwMCwgdGhlIGxvZyBmaWxlIHdpbGwgYmUgcm90YXRlZCBhdCB0aGUgYmVnaW5uaW5nCm9mIGV2ZXJ5IGhvdXI7IGlmIHRoZSByb3RhdGlvbiB0aW1lIGlzIDg2NDAwLCB0aGUgbG9nIGZpbGUgd2lsbCBiZQpyb3RhdGVkIGV2ZXJ5IG5pZ2h0IGF0IG1pZG5pZ2h0LiAgKElmIG5vIGRhdGEgaXMgbG9nZ2VkIGR1cmluZyBhbgppbnRlcnZhbCwgbm8gZmlsZSB3aWxsIGJlIGNyZWF0ZWQuKTwvZGQ+Cgo8ZHQ+PGNvZGU+PHZhcj5maWxlc2l6ZTwvdmFyPihCfEt8TXxHKTwvY29kZT48L2R0PgoKPGRkPlRoZSBtYXhpbXVtIGZpbGUgc2l6ZSBpbiBmb2xsb3dlZCBieSBleGFjdGx5IG9uZSBvZiB0aGUgbGV0dGVycwo8Y29kZT5CPC9jb2RlPiAoQnl0ZXMpLCA8Y29kZT5LPC9jb2RlPiAoS0J5dGVzKSwgPGNvZGU+TTwvY29kZT4gKE1CeXRlcykKb3IgPGNvZGU+RzwvY29kZT4gKEdCeXRlcykuCjxwPgpXaGVuIHRpbWUgYW5kIHNpemUgYXJlIHNwZWNpZmllZCwgdGhlIHNpemUgbXVzdCBiZSBnaXZlbiBhZnRlciB0aGUgdGltZS4KUm90YXRpb24gd2lsbCBvY2N1ciB3aGVuZXZlciBlaXRoZXIgdGltZSBvciBzaXplIGxpbWl0cyBhcmUgcmVhY2hlZC4KPC9wPgo8L2RkPgoKPGR0Pjxjb2RlPjx2YXI+b2Zmc2V0PC92YXI+PC9jb2RlPjwvZHQ+Cgo8ZGQ+VGhlIG51bWJlciBvZiBtaW51dGVzIG9mZnNldCBmcm9tIFVUQy4gIElmIG9taXR0ZWQsIHplcm8gaXMKYXNzdW1lZCBhbmQgVVRDIGlzIHVzZWQuICBGb3IgZXhhbXBsZSwgdG8gdXNlIGxvY2FsIHRpbWUgaW4gdGhlIHpvbmUKVVRDIC01IGhvdXJzLCBzcGVjaWZ5IGEgdmFsdWUgb2YgPGNvZGU+LTMwMDwvY29kZT4gZm9yIHRoaXMgYXJndW1lbnQuCkluIG1vc3QgY2FzZXMsIDxjb2RlPi1sPC9jb2RlPiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIHNwZWNpZnlpbmcKYW4gb2Zmc2V0LjwvZGQ+Cgo8L2RsPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJleGFtcGxlcyIgaWQ9ImV4YW1wbGVzIj5FeGFtcGxlczwvYT48L2gyPgoKPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgQ3VzdG9tTG9nICJ8YmluL3JvdGF0ZWxvZ3MgL3Zhci9sb2cvbG9nZmlsZSA4NjQwMCIgY29tbW9uCjwvY29kZT48L3A+PC9kaXY+CgogICAgIDxwPlRoaXMgY3JlYXRlcyB0aGUgZmlsZXMgL3Zhci9sb2cvbG9nZmlsZS5ubm5uIHdoZXJlIG5ubm4gIGlzCiAgICAgdGhlIHN5c3RlbSB0aW1lIGF0IHdoaWNoIHRoZSBsb2cgbm9taW5hbGx5IHN0YXJ0cyAodGhpcyB0aW1lCiAgICAgd2lsbCBhbHdheXMgYmUgYSBtdWx0aXBsZSBvZiB0aGUgcm90YXRpb24gdGltZSwgc28gIHlvdSAgY2FuCiAgICAgc3luY2hyb25pemUgY3JvbiBzY3JpcHRzIHdpdGggaXQpLiAgQXQgdGhlIGVuZCBvZiBlYWNoIHJvdGF0aW9uCiAgICAgdGltZSAoaGVyZSBhZnRlciAyNCBob3VycykgYSBuZXcgbG9nIGlzIHN0YXJ0ZWQuPC9wPgoKPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgQ3VzdG9tTG9nICJ8YmluL3JvdGF0ZWxvZ3MgLWwgL3Zhci9sb2cvbG9nZmlsZS4lWS4lbS4lZCA4NjQwMCIgY29tbW9uCjwvY29kZT48L3A+PC9kaXY+CgogICAgIDxwPlRoaXMgY3JlYXRlcyB0aGUgZmlsZXMgL3Zhci9sb2cvbG9nZmlsZS55eXl5Lm1tLmRkIHdoZXJlCiAgICAgeXl5eSBpcyB0aGUgeWVhciwgbW0gaXMgdGhlIG1vbnRoLCBhbmQgZGQgaXMgdGhlIGRheSBvZiB0aGUgbW9udGguCiAgICAgTG9nZ2luZyB3aWxsIHN3aXRjaCB0byBhIG5ldyBmaWxlIGV2ZXJ5IGRheSBhdCBtaWRuaWdodCwgbG9jYWwgdGltZS48L3A+Cgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICBDdXN0b21Mb2cgInxiaW4vcm90YXRlbG9ncyAvdmFyL2xvZy9sb2dmaWxlIDVNIiBjb21tb24KPC9jb2RlPjwvcD48L2Rpdj4KCiAgICAgPHA+VGhpcyBjb25maWd1cmF0aW9uIHdpbGwgcm90YXRlIHRoZSBsb2dmaWxlIHdoZW5ldmVyIGl0IHJlYWNoZXMKICAgICBhIHNpemUgb2YgNSBtZWdhYnl0ZXMuPC9wPgoKPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgRXJyb3JMb2cgInxiaW4vcm90YXRlbG9ncyAvdmFyL2xvZy9lcnJvcmxvZy4lWS0lbS0lZC0lSF8lTV8lUyA1TSIKPC9jb2RlPjwvcD48L2Rpdj4KICAgICA8cD5UaGlzIGNvbmZpZ3VyYXRpb24gd2lsbCByb3RhdGUgdGhlIGVycm9yIGxvZ2ZpbGUgd2hlbmV2ZXIgaXQKICAgICByZWFjaGVzIGEgc2l6ZSBvZiA1IG1lZ2FieXRlcywgYW5kIHRoZSBzdWZmaXggdG8gdGhlIGxvZ2ZpbGUgbmFtZQogICAgIHdpbGwgYmUgY3JlYXRlZCBvZiB0aGUgZm9ybQogICAgIDxjb2RlPmVycm9ybG9nLllZWVktbW0tZGQtSEhfTU1fU1M8L2NvZGU+LjwvcD4KCjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgIEN1c3RvbUxvZyAifGJpbi9yb3RhdGVsb2dzIC10IC92YXIvbG9nL2xvZ2ZpbGUgODY0MDAiIGNvbW1vbgo8L2NvZGU+PC9wPjwvZGl2PgoKICAgICA8cD5UaGlzIGNyZWF0ZXMgdGhlIGZpbGUgL3Zhci9sb2cvbG9nZmlsZSwgdHJ1bmNhdGluZyB0aGUgZmlsZSBhdAogICAgIHN0YXJ0dXAgYW5kIHRoZW4gdHJ1bmNhdGluZyB0aGUgZmlsZSBvbmNlIHBlciBkYXkuIEl0IGlzIGV4cGVjdGVkCiAgICAgaW4gdGhpcyBzY2VuYXJpbyB0aGF0IGEgc2VwYXJhdGUgcHJvY2VzcyAoc3VjaCBhcyB0YWlsKSB3b3VsZAogICAgIHByb2Nlc3MgdGhlIGZpbGUgaW4gcmVhbCB0aW1lLjwvcD4KCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InBvcnRhYmlsaXR5IiBpZD0icG9ydGFiaWxpdHkiPlBvcnRhYmlsaXR5PC9hPjwvaDI+Cgo8cD5UaGUgZm9sbG93aW5nIGxvZ2ZpbGUgZm9ybWF0IHN0cmluZyBzdWJzdGl0dXRpb25zIHNob3VsZCBiZQpzdXBwb3J0ZWQgYnkgYWxsIDxjb2RlPnN0cmZ0aW1lKDMpPC9jb2RlPiBpbXBsZW1lbnRhdGlvbnMsIHNlZQp0aGUgPGNvZGU+c3RyZnRpbWUoMyk8L2NvZGU+IG1hbiBwYWdlIGZvciBsaWJyYXJ5LXNwZWNpZmljCmV4dGVuc2lvbnMuPC9wPgoKPHRhYmxlIGNsYXNzPSJib3JkZXJlZCI+PHRyPjx0ZD48Y29kZT4lQTwvY29kZT48L3RkPjx0ZD5mdWxsIHdlZWtkYXkgbmFtZSAobG9jYWxpemVkKTwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lYTwvY29kZT48L3RkPjx0ZD4zLWNoYXJhY3RlciB3ZWVrZGF5IG5hbWUgKGxvY2FsaXplZCk8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JUI8L2NvZGU+PC90ZD48dGQ+ZnVsbCBtb250aCBuYW1lIChsb2NhbGl6ZWQpPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiViPC9jb2RlPjwvdGQ+PHRkPjMtY2hhcmFjdGVyIG1vbnRoIG5hbWUgKGxvY2FsaXplZCk8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JWM8L2NvZGU+PC90ZD48dGQ+ZGF0ZSBhbmQgdGltZSAobG9jYWxpemVkKTwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lZDwvY29kZT48L3RkPjx0ZD4yLWRpZ2l0IGRheSBvZiBtb250aDwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lSDwvY29kZT48L3RkPjx0ZD4yLWRpZ2l0IGhvdXIgKDI0IGhvdXIgY2xvY2spPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVJPC9jb2RlPjwvdGQ+PHRkPjItZGlnaXQgaG91ciAoMTIgaG91ciBjbG9jayk8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JWo8L2NvZGU+PC90ZD48dGQ+My1kaWdpdCBkYXkgb2YgeWVhcjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lTTwvY29kZT48L3RkPjx0ZD4yLWRpZ2l0IG1pbnV0ZTwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lbTwvY29kZT48L3RkPjx0ZD4yLWRpZ2l0IG1vbnRoPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVwPC9jb2RlPjwvdGQ+PHRkPmFtL3BtIG9mIDEyIGhvdXIgY2xvY2sgKGxvY2FsaXplZCk8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JVM8L2NvZGU+PC90ZD48dGQ+Mi1kaWdpdCBzZWNvbmQ8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JVU8L2NvZGU+PC90ZD48dGQ+Mi1kaWdpdCB3ZWVrIG9mIHllYXIKKFN1bmRheSBmaXJzdCBkYXkgb2Ygd2Vlayk8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JVc8L2NvZGU+PC90ZD48dGQ+Mi1kaWdpdCB3ZWVrIG9mIHllYXIKKE1vbmRheSBmaXJzdCBkYXkgb2Ygd2Vlayk8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JXc8L2NvZGU+PC90ZD48dGQ+MS1kaWdpdCB3ZWVrZGF5CihTdW5kYXkgZmlyc3QgZGF5IG9mIHdlZWspPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiVYPC9jb2RlPjwvdGQ+PHRkPnRpbWUgKGxvY2FsaXplZCk8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JXg8L2NvZGU+PC90ZD48dGQ+ZGF0ZSAobG9jYWxpemVkKTwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lWTwvY29kZT48L3RkPjx0ZD40LWRpZ2l0IHllYXI8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JXk8L2NvZGU+PC90ZD48dGQ+Mi1kaWdpdCB5ZWFyPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiVaPC9jb2RlPjwvdGQ+PHRkPnRpbWUgem9uZSBuYW1lPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiUlPC9jb2RlPjwvdGQ+PHRkPmxpdGVyYWwgYCUnPC90ZD48L3RyPgo8L3RhYmxlPgoKPC9kaXY+PC9kaXY+CjxkaXYgY2xhc3M9ImJvdHRvbWxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vcHJvZ3JhbXMvcm90YXRlbG9ncy5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZnIvcHJvZ3JhbXMvcm90YXRlbG9ncy5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2tvL3Byb2dyYW1zL3JvdGF0ZWxvZ3MuaHRtbCIgaHJlZmxhbmc9ImtvIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IktvcmVhbiI+Jm5ic3A7a28mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vdHIvcHJvZ3JhbXMvcm90YXRlbG9ncy5odG1sIiBocmVmbGFuZz0idHIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iVPxya+dlIj4mbmJzcDt0ciZuYnNwOzwvYT48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgYWx0PSJ0b3AiIC8+PC9hPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iPjxoMj48YSBpZD0iY29tbWVudHNfc2VjdGlvbiIgbmFtZT0iY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9oMj48ZGl2IGNsYXNzPSJ3YXJuaW5nIj48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz48YnIgLz5UaGlzIGlzIG5vdCBhIFEmYW1wO0Egc2VjdGlvbi4gQ29tbWVudHMgcGxhY2VkIGhlcmUgc2hvdWxkIGJlIHBvaW50ZWQgdG93YXJkcyBzdWdnZXN0aW9ucyBvbiBpbXByb3ZpbmcgdGhlIGRvY3VtZW50YXRpb24gb3Igc2VydmVyLCBhbmQgbWF5IGJlIHJlbW92ZWQgYWdhaW4gYnkgb3VyIG1vZGVyYXRvcnMgaWYgdGhleSBhcmUgZWl0aGVyIGltcGxlbWVudGVkIG9yIGNvbnNpZGVyZWQgaW52YWxpZC9vZmYtdG9waWMuIFF1ZXN0aW9ucyBvbiBob3cgdG8gbWFuYWdlIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIgc2hvdWxkIGJlIGRpcmVjdGVkIGF0IGVpdGhlciBvdXIgSVJDIGNoYW5uZWwsICNodHRwZCwgb24gRnJlZW5vZGUsIG9yIHNlbnQgdG8gb3VyIDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2xpc3RzLmh0bWwiPm1haWxpbmcgbGlzdHM8L2E+LjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQp2YXIgY29tbWVudHNfc2hvcnRuYW1lID0gJ2h0dHBkJzsKdmFyIGNvbW1lbnRzX2lkZW50aWZpZXIgPSAnaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8yLjQvcHJvZ3JhbXMvcm90YXRlbG9ncy5odG1sJzsKKGZ1bmN0aW9uKHcsIGQpIHsKICAgIGlmICh3LmxvY2F0aW9uLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCkgPT0gImh0dHBkLmFwYWNoZS5vcmciKSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj48XC9kaXY+Jyk7CiAgICAgICAgdmFyIHMgPSBkLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIHMudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgIHMuYXN5bmMgPSB0cnVlOwogICAgICAgIHMuc3JjID0gJ2h0dHBzOi8vY29tbWVudHMuYXBhY2hlLm9yZy9zaG93X2NvbW1lbnRzLmx1YT9zaXRlPScgKyBjb21tZW50c19zaG9ydG5hbWUgKyAnJnBhZ2U9JyArIGNvbW1lbnRzX2lkZW50aWZpZXI7CiAgICAgICAgKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSB8fCBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0pLmFwcGVuZENoaWxkKHMpOwogICAgfQogICAgZWxzZSB7IAogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+Q29tbWVudHMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHBhZ2UgYXQgdGhlIG1vbWVudC48XC9kaXY+Jyk7CiAgICB9Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwovLy0tPjwhXV0+PC9zY3JpcHQ+PC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMTUgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD48L2Rpdj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQppZiAodHlwZW9mKHByZXR0eVByaW50KSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgIHByZXR0eVByaW50KCk7Cn0KLy8tLT48IV1dPjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==