PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD48IS0tCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20geG1sIHNvdXJjZTogRE8gTk9UIEVESVQKICAgICAgICBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAogICAgICAtLT4KPHRpdGxlPkNvbXBpbGluZyBhbmQgSW5zdGFsbGluZyAtIEFwYWNoZSBIVFRQIFNlcnZlcjwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4vc3R5bGUvY3NzL21hbnVhbC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJNYWluIHN0eWxlc2hlZXQiIC8+CjxsaW5rIGhyZWY9Ii4vc3R5bGUvY3NzL21hbnVhbC1sb29zZS0xMDBwYy5jc3MiIHJlbD0iYWx0ZXJuYXRlIHN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTm8gU2lkZWJhciAtIERlZmF1bHQgZm9udCBzaXplIiAvPgo8bGluayBocmVmPSIuL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+CjxsaW5rIGhyZWY9Ii4vaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+PC9oZWFkPgo8Ym9keSBpZD0ibWFudWFsLXBhZ2UiPjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuL21vZC9kaXJlY3RpdmVzLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iLi9mYXEvIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FyeTwvYT4gfCA8YSBocmVmPSIuL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+CjxwIGNsYXNzPSJhcGFjaGUiPkFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuMzwvcD4KPGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9mZWF0aGVyLmdpZiIgLz48L2Rpdj4KPGRpdiBjbGFzcz0idXAiPjxhIGhyZWY9Ii4vIj48aW1nIHRpdGxlPSImbHQ7LSIgYWx0PSImbHQ7LSIgc3JjPSIuL2ltYWdlcy9sZWZ0LmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgaWQ9InBhdGgiPgo8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvIj5BcGFjaGU8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvIj5IVFRQIFNlcnZlcjwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLyI+RG9jdW1lbnRhdGlvbjwvYT4gJmd0OyA8YSBocmVmPSIuLyI+VmVyc2lvbiAyLjM8L2E+PC9kaXY+PGRpdiBpZD0icGFnZS1jb250ZW50Ij48ZGl2IGlkPSJwcmVhbWJsZSI+PGgxPkNvbXBpbGluZyBhbmQgSW5zdGFsbGluZzwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi9kZS9pbnN0YWxsLmh0bWwiIGhyZWZsYW5nPSJkZSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJEZXV0c2NoIj4mbmJzcDtkZSZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2VuL2luc3RhbGwuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZXMvaW5zdGFsbC5odG1sIiBocmVmbGFuZz0iZXMiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRXNwYfFvbCI+Jm5ic3A7ZXMmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9mci9pbnN0YWxsLmh0bWwiIGhyZWZsYW5nPSJmciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGcmFu52FpcyI+Jm5ic3A7ZnImbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9qYS9pbnN0YWxsLmh0bWwiIGhyZWZsYW5nPSJqYSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJKYXBhbmVzZSI+Jm5ic3A7amEmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9rby9pbnN0YWxsLmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPjwvcD4KPC9kaXY+CgoKICAgIDxwPlRoaXMgZG9jdW1lbnQgY292ZXJzIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgQXBhY2hlCiAgICBvbiBVbml4IGFuZCBVbml4LWxpa2Ugc3lzdGVtcyBvbmx5LiBGb3IgY29tcGlsaW5nIGFuZAogICAgaW5zdGFsbGF0aW9uIG9uIFdpbmRvd3MsIHNlZSA8YSBocmVmPSJwbGF0Zm9ybS93aW5kb3dzLmh0bWwiPlVzaW5nIEFwYWNoZSB3aXRoIE1pY3Jvc29mdAogICAgV2luZG93czwvYT4uIEZvciBvdGhlciBwbGF0Zm9ybXMsIHNlZSB0aGUgPGEgaHJlZj0icGxhdGZvcm0vIj5wbGF0Zm9ybTwvYT4gZG9jdW1lbnRhdGlvbi48L3A+CgogICAgPHA+QXBhY2hlIGh0dHBkIHVzZXMgPGNvZGU+bGlidG9vbDwvY29kZT4gYW5kIDxjb2RlPmF1dG9jb25mPC9jb2RlPgogICAgdG8gY3JlYXRlIGEgYnVpbGQgZW52aXJvbm1lbnQgdGhhdCBsb29rcyBsaWtlIG1hbnkgb3RoZXIgT3BlbiBTb3VyY2UKICAgIHByb2plY3RzLjwvcD4KCiAgICA8cD5JZiB5b3UgYXJlIHVwZ3JhZGluZyBmcm9tIG9uZSBtaW5vciB2ZXJzaW9uIHRvIHRoZSBuZXh0IChmb3IKICAgIGV4YW1wbGUsIDIuMi41MCB0byAyLjIuNTEpLCBwbGVhc2Ugc2tpcCBkb3duIHRvIHRoZSA8YSBocmVmPSIjdXBncmFkaW5nIj51cGdyYWRpbmc8L2E+IHNlY3Rpb24uPC9wPgoKPC9kaXY+CjxkaXYgaWQ9InF1aWNrdmlldyI+PHVsIGlkPSJ0b2MiPjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjb3ZlcnZpZXciPk92ZXJ2aWV3IGZvciB0aGUKICAgIGltcGF0aWVudDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3JlcXVpcmVtZW50cyI+UmVxdWlyZW1lbnRzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZG93bmxvYWQiPkRvd25sb2FkPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZXh0cmFjdCI+RXh0cmFjdDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2NvbmZpZ3VyZSI+Q29uZmlndXJpbmcgdGhlIHNvdXJjZSB0cmVlPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjY29tcGlsZSI+QnVpbGQ8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNpbnN0YWxsIj5JbnN0YWxsPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjY3VzdG9taXplIj5DdXN0b21pemU8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiN0ZXN0Ij5UZXN0PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjdXBncmFkaW5nIj5VcGdyYWRpbmc8L2E+PC9saT4KPC91bD48aDM+U2VlIGFsc288L2gzPjx1bCBjbGFzcz0ic2VlYWxzbyI+PGxpPjxhIGhyZWY9InByb2dyYW1zL2NvbmZpZ3VyZS5odG1sIj5Db25maWd1cmUgdGhlIHNvdXJjZSB0cmVlPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imludm9raW5nLmh0bWwiPlN0YXJ0aW5nIEFwYWNoZTwvYT48L2xpPjxsaT48YSBocmVmPSJzdG9wcGluZy5odG1sIj5TdG9wcGluZyBhbmQgUmVzdGFydGluZzwvYT48L2xpPjwvdWw+PC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0ib3ZlcnZpZXciIGlkPSJvdmVydmlldyI+T3ZlcnZpZXcgZm9yIHRoZQogICAgaW1wYXRpZW50PC9hPjwvaDI+CgogICAgPHRhYmxlPgogICAgICAKICAgICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSIjZG93bmxvYWQiPkRvd25sb2FkPC9hPjwvdGQ+CgogICAgICAgIDx0ZD48Y29kZT4kIGx5bnggaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG93bmxvYWQuY2dpPC9jb2RlPgogICAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CgogICAgICA8dHI+CiAgICAgICAgPHRkPjxhIGhyZWY9IiNleHRyYWN0Ij5FeHRyYWN0PC9hPjwvdGQ+CgogICAgICAgIDx0ZD48Y29kZT4kIGd6aXAgLWQgaHR0cGQtPGVtPk5OPC9lbT4udGFyLmd6PGJyIC8+CiAgICAgICAgICQgdGFyIHh2ZiBodHRwZC08ZW0+Tk48L2VtPi50YXI8YnIgLz4KICAgICAgICAgJCBjZCBodHRwZC08ZW0+Tk48L2VtPjwvY29kZT48L3RkPgogICAgICA8L3RyPgoKICAgICAgPHRyPgogICAgICAgIDx0ZD48YSBocmVmPSIjY29uZmlndXJlIj5Db25maWd1cmU8L2E+PC90ZD4KCiAgICAgICAgPHRkPjxjb2RlPiQgLi9jb25maWd1cmUgLS1wcmVmaXg9PGVtPlBSRUZJWDwvZW0+PC9jb2RlPgogICAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CgogICAgICA8dHI+CiAgICAgICAgPHRkPjxhIGhyZWY9IiNjb21waWxlIj5Db21waWxlPC9hPjwvdGQ+CgogICAgICAgIDx0ZD48Y29kZT4kIG1ha2U8L2NvZGU+IDwvdGQ+CiAgICAgIDwvdHI+CgogICAgICA8dHI+CiAgICAgICAgPHRkPjxhIGhyZWY9IiNpbnN0YWxsIj5JbnN0YWxsPC9hPjwvdGQ+CgogICAgICAgIDx0ZD48Y29kZT4kIG1ha2UgaW5zdGFsbDwvY29kZT4gPC90ZD4KICAgICAgPC90cj4KCiAgICAgIDx0cj4KICAgICAgICA8dGQ+PGEgaHJlZj0iI2N1c3RvbWl6ZSI+Q3VzdG9taXplPC9hPjwvdGQ+CgogICAgICAgIDx0ZD48Y29kZT4kIHZpIDxlbT5QUkVGSVg8L2VtPi9jb25mL2h0dHBkLmNvbmY8L2NvZGU+IDwvdGQ+CiAgICAgIDwvdHI+CgogICAgICA8dHI+CiAgICAgICAgPHRkPjxhIGhyZWY9IiN0ZXN0Ij5UZXN0PC9hPjwvdGQ+CgogICAgICAgIDx0ZD48Y29kZT4kIDxlbT5QUkVGSVg8L2VtPi9iaW4vYXBhY2hlY3RsIC1rIHN0YXJ0PC9jb2RlPgogICAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICA8L3RhYmxlPgoKICAgIDxwPjxlbT5OTjwvZW0+IG11c3QgYmUgcmVwbGFjZWQgd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uCiAgICBudW1iZXIsIGFuZCA8ZW0+UFJFRklYPC9lbT4gbXVzdCBiZSByZXBsYWNlZCB3aXRoIHRoZQogICAgZmlsZXN5c3RlbSBwYXRoIHVuZGVyIHdoaWNoIHRoZSBzZXJ2ZXIgc2hvdWxkIGJlIGluc3RhbGxlZC4gSWYKICAgIDxlbT5QUkVGSVg8L2VtPiBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkZWZhdWx0cyB0bwogICAgPGNvZGU+L3Vzci9sb2NhbC9hcGFjaGUyPC9jb2RlPi48L3A+CgogICAgPHA+RWFjaCBzZWN0aW9uIG9mIHRoZSBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIHByb2Nlc3MgaXMKICAgIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBiZWxvdywgYmVnaW5uaW5nIHdpdGggdGhlIHJlcXVpcmVtZW50cwogICAgZm9yIGNvbXBpbGluZyBhbmQgaW5zdGFsbGluZyBBcGFjaGUgaHR0cGQuPC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InJlcXVpcmVtZW50cyIgaWQ9InJlcXVpcmVtZW50cyI+UmVxdWlyZW1lbnRzPC9hPjwvaDI+CgogICAgPHA+VGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHMgZXhpc3QgZm9yIGJ1aWxkaW5nIEFwYWNoZTo8L3A+CgogICAgPGRsPgogICAgICA8ZHQ+RGlzayBTcGFjZTwvZHQ+CiAgICAgIDxkZD5NYWtlIHN1cmUgeW91IGhhdmUgYXQgbGVhc3QgNTAgTUIgb2YgdGVtcG9yYXJ5IGZyZWUgZGlzawogICAgICBzcGFjZSBhdmFpbGFibGUuIEFmdGVyIGluc3RhbGxhdGlvbiBBcGFjaGUgb2NjdXBpZXMKICAgICAgYXBwcm94aW1hdGVseSAxMCBNQiBvZiBkaXNrIHNwYWNlLiBUaGUgYWN0dWFsIGRpc2sgc3BhY2UKICAgICAgcmVxdWlyZW1lbnRzIHdpbGwgdmFyeSBjb25zaWRlcmFibHkgYmFzZWQgb24geW91ciBjaG9zZW4KICAgICAgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBhbnkgdGhpcmQtcGFydHkgbW9kdWxlcy48L2RkPgoKICAgICAgPGR0PkFOU0ktQyBDb21waWxlciBhbmQgQnVpbGQgU3lzdGVtPC9kdD4KICAgICAgPGRkPk1ha2Ugc3VyZSB5b3UgaGF2ZSBhbiBBTlNJLUMgY29tcGlsZXIgaW5zdGFsbGVkLiBUaGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2djYy9nY2MuaHRtbCI+R05VIEMKICAgICAgY29tcGlsZXIgKEdDQyk8L2E+IGZyb20gdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy8iPkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiAoRlNGKTwvYT4KICAgICAgaXMgcmVjb21tZW5kZWQuIElmIHlvdSBkb24ndCBoYXZlIEdDQwogICAgICB0aGVuIGF0IGxlYXN0IG1ha2Ugc3VyZSB5b3VyIHZlbmRvcidzIGNvbXBpbGVyIGlzIEFOU0kKICAgICAgY29tcGxpYW50LiBJbiBhZGRpdGlvbiwgeW91ciA8Y29kZT5QQVRIPC9jb2RlPiBtdXN0IGNvbnRhaW4KICAgICAgYmFzaWMgYnVpbGQgdG9vbHMgc3VjaCBhcyA8Y29kZT5tYWtlPC9jb2RlPi48L2RkPgoKICAgICAgPGR0PkFjY3VyYXRlIHRpbWUga2VlcGluZzwvZHQ+CiAgICAgIDxkZD5FbGVtZW50cyBvZiB0aGUgSFRUUCBwcm90b2NvbCBhcmUgZXhwcmVzc2VkIGFzIHRoZSB0aW1lIG9mCiAgICAgIGRheS4gU28sIGl0J3MgdGltZSB0byBpbnZlc3RpZ2F0ZSBzZXR0aW5nIHNvbWUgdGltZQogICAgICBzeW5jaHJvbml6YXRpb24gZmFjaWxpdHkgb24geW91ciBzeXN0ZW0uIFVzdWFsbHkgdGhlCiAgICAgIDxjb2RlPm50cGRhdGU8L2NvZGU+IG9yIDxjb2RlPnhudHBkPC9jb2RlPiBwcm9ncmFtcyBhcmUgdXNlZCBmb3IKICAgICAgdGhpcyBwdXJwb3NlIHdoaWNoIGFyZSBiYXNlZCBvbiB0aGUgTmV0d29yayBUaW1lIFByb3RvY29sIChOVFApLgogICAgICBTZWUgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cubnRwLm9yZyI+TlRQCiAgICAgIGhvbWVwYWdlPC9hPiBmb3IgbW9yZSBkZXRhaWxzIGFib3V0IE5UUCBzb2Z0d2FyZSBhbmQgcHVibGljCiAgICAgIHRpbWUgc2VydmVycy48L2RkPgoKICAgICAgPGR0PjxhIGhyZWY9Imh0dHA6Ly93d3cucGVybC5vcmcvIj5QZXJsIDU8L2E+CiAgICAgIFtPUFRJT05BTF08L2R0PgogICAgICA8ZGQ+Rm9yIHNvbWUgb2YgdGhlIHN1cHBvcnQgc2NyaXB0cyBsaWtlIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuL3Byb2dyYW1zL2FweHMuaHRtbCI+YXB4czwvYT48L2NvZGU+IG9yIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuL3Byb2dyYW1zL2RibW1hbmFnZS5odG1sIj5kYm1tYW5hZ2U8L2E+PC9jb2RlPiAod2hpY2ggYXJlCiAgICAgIHdyaXR0ZW4gaW4gUGVybCkgdGhlIFBlcmwgNSBpbnRlcnByZXRlciBpcyByZXF1aXJlZCAodmVyc2lvbnMKICAgICAgNS4wMDMgb3IgbmV3ZXIgYXJlIHN1ZmZpY2llbnQpLiBJZiB5b3UgaGF2ZSBtdWx0aXBsZSBQZXJsIAogICAgICBpbnRlcnByZXRlcnMgKGZvciBleGFtcGxlLCBhIHN5c3RlbXdpZGUgaW5zdGFsbCBvZiBQZXJsIDQsIGFuZCAKICAgICAgeW91ciBvd24gaW5zdGFsbCBvZiBQZXJsIDUpLCB5b3UgYXJlIGFkdmlzZWQgdG8gdXNlIHRoZSAKICAgICAgPGNvZGU+LS13aXRoLXBlcmw8L2NvZGU+IG9wdGlvbiAoc2VlIGJlbG93KSB0byBtYWtlIHN1cmUgdGhlIAogICAgICBjb3JyZWN0IG9uZSBpcyB1c2VkIGJ5IDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuL3Byb2dyYW1zL2NvbmZpZ3VyZS5odG1sIj5jb25maWd1cmU8L2E+PC9jb2RlPi4KICAgICAgSWYgbm8gUGVybCA1IGludGVycHJldGVyIGlzIGZvdW5kIGJ5IHRoZSAKICAgICAgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvY29uZmlndXJlLmh0bWwiPmNvbmZpZ3VyZTwvYT48L2NvZGU+IHNjcmlwdCwgeW91IHdpbGwgbm90IGJlIGFibGUgdG8gdXNlIAogICAgICB0aGUgYWZmZWN0ZWQgc3VwcG9ydCBzY3JpcHRzLiBPZiBjb3Vyc2UsIHlvdSB3aWxsIHN0aWxsIGJlIGFibGUgdG8gCiAgICAgIGJ1aWxkIGFuZCB1c2UgQXBhY2hlIGh0dHBkLjwvZGQ+CiAgICA8L2RsPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImRvd25sb2FkIiBpZD0iZG93bmxvYWQiPkRvd25sb2FkPC9hPjwvaDI+CgogICAgPHA+VGhlIEFwYWNoZSBIVFRQIFNlcnZlciBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIHRoZSA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb3dubG9hZC5jZ2kiPkFwYWNoZSBIVFRQIFNlcnZlcgogICAgZG93bmxvYWQgc2l0ZTwvYT4sIHdoaWNoIGxpc3RzIHNldmVyYWwgbWlycm9ycy4gIE1vc3QgdXNlcnMgb2YKICAgIEFwYWNoZSBvbiB1bml4LWxpa2Ugc3lzdGVtcyB3aWxsIGJlIGJldHRlciBvZmYgZG93bmxvYWRpbmcgYW5kCiAgICBjb21waWxpbmcgYSBzb3VyY2UgdmVyc2lvbi4gIFRoZSBidWlsZCBwcm9jZXNzIChkZXNjcmliZWQgYmVsb3cpIGlzCiAgICBlYXN5LCBhbmQgaXQgYWxsb3dzIHlvdSB0byBjdXN0b21pemUgeW91ciBzZXJ2ZXIgdG8gc3VpdCB5b3VyIG5lZWRzLgogICAgSW4gYWRkaXRpb24sIGJpbmFyeSByZWxlYXNlcyBhcmUgb2Z0ZW4gbm90IHVwIHRvIGRhdGUgd2l0aCB0aGUgbGF0ZXN0CiAgICBzb3VyY2UgcmVsZWFzZXMuICBJZiB5b3UgZG8gZG93bmxvYWQgYSBiaW5hcnksIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zCiAgICBpbiB0aGUgPGNvZGU+SU5TVEFMTC5iaW5kaXN0PC9jb2RlPiBmaWxlIGluc2lkZSB0aGUgZGlzdHJpYnV0aW9uLjwvcD4KCiAgICA8cD5BZnRlciBkb3dubG9hZGluZywgaXQgaXMgaW1wb3J0YW50IHRvIHZlcmlmeSB0aGF0IHlvdSBoYXZlIGEKICAgIGNvbXBsZXRlIGFuZCB1bm1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIEFwYWNoZSBIVFRQIFNlcnZlci4gVGhpcwogICAgY2FuIGJlIGFjY29tcGxpc2hlZCBieSB0ZXN0aW5nIHRoZSBkb3dubG9hZGVkIHRhcmJhbGwgYWdhaW5zdCB0aGUKICAgIFBHUCBzaWduYXR1cmUuICBEZXRhaWxzIG9uIGhvdyB0byBkbyB0aGlzIGFyZSBhdmFpbGFibGUgb24gdGhlIDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2Rvd25sb2FkLmNnaSN2ZXJpZnkiPmRvd25sb2FkCiAgICBwYWdlPC9hPiBhbmQgYW4gZXh0ZW5kZWQgZXhhbXBsZSBpcyBhdmFpbGFibGUgZGVzY3JpYmluZyB0aGUgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZGV2L3ZlcmlmaWNhdGlvbi5odG1sIj51c2Ugb2YKICAgIFBHUDwvYT4uPC9wPgoKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJleHRyYWN0IiBpZD0iZXh0cmFjdCI+RXh0cmFjdDwvYT48L2gyPgoKICAgIDxwPkV4dHJhY3RpbmcgdGhlIHNvdXJjZSBmcm9tIHRoZSBBcGFjaGUgSFRUUEQgdGFyYmFsbCBpcyBhCiAgICBzaW1wbGUgbWF0dGVyIG9mIHVuY29tcHJlc3NpbmcsIGFuZCB0aGVuIHVudGFycmluZzo8L3A+Cgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KJCBnemlwIC1kIGh0dHBkLTxlbT5OTjwvZW0+LnRhci5nejxiciAvPgokIHRhciB4dmYgaHR0cGQtPGVtPk5OPC9lbT4udGFyCjwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+VGhpcyB3aWxsIGNyZWF0ZSBhIG5ldyBkaXJlY3RvcnkgdW5kZXIgdGhlIGN1cnJlbnQgZGlyZWN0b3J5CiAgICBjb250YWluaW5nIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGRpc3RyaWJ1dGlvbi4gWW91IHNob3VsZAogICAgPGNvZGU+Y2Q8L2NvZGU+IGludG8gdGhhdCBkaXJlY3RvcnkgYmVmb3JlIHByb2NlZWRpbmcgd2l0aAogICAgY29tcGlsaW5nIHRoZSBzZXJ2ZXIuPC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImNvbmZpZ3VyZSIgaWQ9ImNvbmZpZ3VyZSI+Q29uZmlndXJpbmcgdGhlIHNvdXJjZSB0cmVlPC9hPjwvaDI+CgogICAgPHA+VGhlIG5leHQgc3RlcCBpcyB0byBjb25maWd1cmUgdGhlIEFwYWNoZSBzb3VyY2UgdHJlZSBmb3IgeW91cgogICAgcGFydGljdWxhciBwbGF0Zm9ybSBhbmQgcGVyc29uYWwgcmVxdWlyZW1lbnRzLiBUaGlzIGlzIGRvbmUgdXNpbmcKICAgIHRoZSBzY3JpcHQgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvY29uZmlndXJlLmh0bWwiPmNvbmZpZ3VyZTwvYT48L2NvZGU+IGluY2x1ZGVkIGluCiAgICB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gKERldmVsb3BlcnMgZG93bmxvYWRpbmcKICAgIGFuIHVucmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgQXBhY2hlIHNvdXJjZSB0cmVlIHdpbGwgbmVlZCB0byBoYXZlCiAgICA8Y29kZT5hdXRvY29uZjwvY29kZT4gYW5kIDxjb2RlPmxpYnRvb2w8L2NvZGU+IGluc3RhbGxlZCBhbmQgd2lsbAogICAgbmVlZCB0byBydW4gPGNvZGU+YnVpbGRjb25mPC9jb2RlPiBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIHRoZSBuZXh0CiAgICBzdGVwcy4gVGhpcyBpcyBub3QgbmVjZXNzYXJ5IGZvciBvZmZpY2lhbCByZWxlYXNlcy4pPC9wPgoKICAgIDxwPlRvIGNvbmZpZ3VyZSB0aGUgc291cmNlIHRyZWUgdXNpbmcgYWxsIHRoZSBkZWZhdWx0IG9wdGlvbnMsCiAgICBzaW1wbHkgdHlwZSA8Y29kZT4uL2NvbmZpZ3VyZTwvY29kZT4uIFRvIGNoYW5nZSB0aGUgZGVmYXVsdAogICAgb3B0aW9ucywgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvY29uZmlndXJlLmh0bWwiPmNvbmZpZ3VyZTwvYT48L2NvZGU+IGFjY2VwdHMgYSB2YXJpZXR5IG9mIHZhcmlhYmxlcwogICAgYW5kIGNvbW1hbmQgbGluZSBvcHRpb25zLjwvcD4KCiAgICA8cD5UaGUgbW9zdCBpbXBvcnRhbnQgb3B0aW9uIGlzIHRoZSBsb2NhdGlvbiA8Y29kZT4tLXByZWZpeDwvY29kZT4KICAgIHdoZXJlIEFwYWNoZSBpcyB0byBiZSBpbnN0YWxsZWQgbGF0ZXIsIGJlY2F1c2UgQXBhY2hlIGhhcyB0byBiZQogICAgY29uZmlndXJlZCBmb3IgdGhpcyBsb2NhdGlvbiB0byB3b3JrIGNvcnJlY3RseS4gIE1vcmUgZmluZS10dW5lZAogICAgY29udHJvbCBvZiB0aGUgbG9jYXRpb24gb2YgZmlsZXMgaXMgcG9zc2libGUgd2l0aCBhZGRpdGlvbmFsIDxhIGhyZWY9InByb2dyYW1zL2NvbmZpZ3VyZS5odG1sI2luc3RhbGxhdGlvbmRpcmVjdG9yaWVzIj5jb25maWd1cmUKICAgIG9wdGlvbnM8L2E+LjwvcD4KCiAgICA8cD5BbHNvIGF0IHRoaXMgcG9pbnQsIHlvdSBjYW4gc3BlY2lmeSB3aGljaCA8YSBocmVmPSJwcm9ncmFtcy9jb25maWd1cmUuaHRtbCNvcHRpb25hbGZlYXR1cmVzIj5mZWF0dXJlczwvYT4geW91CiAgICB3YW50IGluY2x1ZGVkIGluIEFwYWNoZSBieSBlbmFibGluZyBhbmQgZGlzYWJsaW5nIDxhIGhyZWY9Im1vZC8iPm1vZHVsZXM8L2E+LiAgQXBhY2hlIGNvbWVzIHdpdGggYSA8YSBocmVmPSJtb2QvbW9kdWxlLWRpY3QuaHRtbCNTdGF0dXMiPkJhc2U8L2E+IHNldCBvZiBtb2R1bGVzIGluY2x1ZGVkIGJ5CiAgICBkZWZhdWx0LiAgT3RoZXIgbW9kdWxlcyBhcmUgZW5hYmxlZCB1c2luZyB0aGUKICAgIDxjb2RlPi0tZW5hYmxlLTx2YXI+bW9kdWxlPC92YXI+PC9jb2RlPiBvcHRpb24sIHdoZXJlCiAgICA8dmFyPm1vZHVsZTwvdmFyPiBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHdpdGggdGhlCiAgICA8Y29kZT5tb2RfPC9jb2RlPiBzdHJpbmcgcmVtb3ZlZCBhbmQgd2l0aCBhbnkgdW5kZXJzY29yZSBjb252ZXJ0ZWQKICAgIHRvIGEgZGFzaC4gIFlvdSBjYW4gYWxzbyBjaG9vc2UgdG8gY29tcGlsZSBtb2R1bGVzIGFzIDxhIGhyZWY9ImRzby5odG1sIj5zaGFyZWQgb2JqZWN0cyAoRFNPcyk8L2E+IC0tIHdoaWNoIGNhbiBiZSBsb2FkZWQKICAgIG9yIHVubG9hZGVkIGF0IHJ1bnRpbWUgLS0gYnkgdXNpbmcgdGhlIG9wdGlvbgogICAgPGNvZGU+LS1lbmFibGUtPHZhcj5tb2R1bGU8L3Zhcj49c2hhcmVkPC9jb2RlPi4gIFNpbWlsYXJseSwgeW91IGNhbgogICAgZGlzYWJsZSBCYXNlIG1vZHVsZXMgd2l0aCB0aGUKICAgIDxjb2RlPi0tZGlzYWJsZS08dmFyPm1vZHVsZTwvdmFyPjwvY29kZT4gb3B0aW9uLiAgQmUgY2FyZWZ1bCB3aGVuCiAgICB1c2luZyB0aGVzZSBvcHRpb25zLCBzaW5jZSA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi9wcm9ncmFtcy9jb25maWd1cmUuaHRtbCI+Y29uZmlndXJlPC9hPjwvY29kZT4gY2Fubm90IHdhcm4geW91CiAgICBpZiB0aGUgbW9kdWxlIHlvdSBzcGVjaWZ5IGRvZXMgbm90IGV4aXN0OyBpdCB3aWxsIHNpbXBseSBpZ25vcmUgdGhlCiAgICBvcHRpb24uPC9wPgoKICAgIDxwPkluIGFkZGl0aW9uLCBpdCBpcyBzb21ldGltZXMgbmVjZXNzYXJ5IHRvIHByb3ZpZGUgdGhlCiAgICA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi9wcm9ncmFtcy9jb25maWd1cmUuaHRtbCI+Y29uZmlndXJlPC9hPjwvY29kZT4gc2NyaXB0IHdpdGggZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgdGhlCiAgICBsb2NhdGlvbiBvZiB5b3VyIGNvbXBpbGVyLCBsaWJyYXJpZXMsIG9yIGhlYWRlciBmaWxlcy4gIFRoaXMgaXMKICAgIGRvbmUgYnkgcGFzc2luZyBlaXRoZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIGNvbW1hbmQgbGluZQogICAgb3B0aW9ucyB0byA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi9wcm9ncmFtcy9jb25maWd1cmUuaHRtbCI+Y29uZmlndXJlPC9hPjwvY29kZT4uICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZQogICAgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvY29uZmlndXJlLmh0bWwiPmNvbmZpZ3VyZTwvYT48L2NvZGU+IG1hbnVhbCBwYWdlLjwvcD4KCiAgICA8cD5Gb3IgYSBzaG9ydCBpbXByZXNzaW9uIG9mIHdoYXQgcG9zc2liaWxpdGllcyB5b3UgaGF2ZSwgaGVyZQogICAgaXMgYSB0eXBpY2FsIGV4YW1wbGUgd2hpY2ggY29tcGlsZXMgQXBhY2hlIGZvciB0aGUgaW5zdGFsbGF0aW9uCiAgICB0cmVlIDxjb2RlPi9zdy9wa2cvYXBhY2hlPC9jb2RlPiB3aXRoIGEgcGFydGljdWxhciBjb21waWxlciBhbmQgZmxhZ3MKICAgIHBsdXMgdGhlIHR3byBhZGRpdGlvbmFsIG1vZHVsZXMgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi9tb2QvbW9kX3Jld3JpdGUuaHRtbCI+bW9kX3Jld3JpdGU8L2E+PC9jb2RlPiBhbmQKICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9zcGVsaW5nLmh0bWwiPm1vZF9zcGVsaW5nPC9hPjwvY29kZT4gZm9yCiAgICBsYXRlciBsb2FkaW5nIHRocm91Z2ggdGhlIERTTyBtZWNoYW5pc206PC9wPgoKPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgICQgQ0M9InBnY2MiIENGTEFHUz0iLU8yIiBcPGJyIC8+CiAgICAgICAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vc3cvcGtnL2FwYWNoZSBcPGJyIC8+CiAgICAgICAtLWVuYWJsZS1yZXdyaXRlPXNoYXJlZCBcPGJyIC8+CiAgICAgICAtLWVuYWJsZS1zcGVsaW5nPXNoYXJlZAo8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPldoZW4gPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvY29uZmlndXJlLmh0bWwiPmNvbmZpZ3VyZTwvYT48L2NvZGU+IGlzIHJ1biBpdCB3aWxsIHRha2Ugc2V2ZXJhbCBtaW51dGVzIHRvCiAgICB0ZXN0IGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIGZlYXR1cmVzIG9uIHlvdXIgc3lzdGVtIGFuZCBidWlsZAogICAgTWFrZWZpbGVzIHdoaWNoIHdpbGwgbGF0ZXIgYmUgdXNlZCB0byBjb21waWxlIHRoZSBzZXJ2ZXIuPC9wPgoKICAgIDxwPkRldGFpbHMgb24gYWxsIHRoZSBkaWZmZXJlbnQgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvY29uZmlndXJlLmh0bWwiPmNvbmZpZ3VyZTwvYT48L2NvZGU+IG9wdGlvbnMgYXJlCiAgICBhdmFpbGFibGUgb24gdGhlIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuL3Byb2dyYW1zL2NvbmZpZ3VyZS5odG1sIj5jb25maWd1cmU8L2E+PC9jb2RlPiBtYW51YWwgcGFnZS48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iY29tcGlsZSIgaWQ9ImNvbXBpbGUiPkJ1aWxkPC9hPjwvaDI+CgogICAgPHA+Tm93IHlvdSBjYW4gYnVpbGQgdGhlIHZhcmlvdXMgcGFydHMgd2hpY2ggZm9ybSB0aGUgQXBhY2hlCiAgICBwYWNrYWdlIGJ5IHNpbXBseSBydW5uaW5nIHRoZSBjb21tYW5kOjwvcD4KCjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPiQgbWFrZTwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+UGxlYXNlIGJlIHBhdGllbnQgaGVyZSwgc2luY2UgYSBiYXNlIGNvbmZpZ3VyYXRpb24gdGFrZXMKICAgIHNldmVyYWwgbWludXRlcyB0byBjb21waWxlIGFuZCB0aGUgdGltZSB3aWxsIHZhcnkgd2lkZWx5CiAgICBkZXBlbmRpbmcgb24geW91ciBoYXJkd2FyZSBhbmQgdGhlIG51bWJlciBvZiBtb2R1bGVzIHRoYXQgeW91CiAgICBoYXZlIGVuYWJsZWQuPC9wPiAKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJpbnN0YWxsIiBpZD0iaW5zdGFsbCI+SW5zdGFsbDwvYT48L2gyPgoKICAgIDxwPk5vdyBpdCdzIHRpbWUgdG8gaW5zdGFsbCB0aGUgcGFja2FnZSB1bmRlciB0aGUgY29uZmlndXJlZAogICAgaW5zdGFsbGF0aW9uIDxlbT5QUkVGSVg8L2VtPiAoc2VlIDxjb2RlPi0tcHJlZml4PC9jb2RlPiBvcHRpb24KICAgIGFib3ZlKSBieSBydW5uaW5nOjwvcD4KCjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPiQgbWFrZSBpbnN0YWxsPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5JZiB5b3UgYXJlIHVwZ3JhZGluZywgdGhlIGluc3RhbGxhdGlvbiB3aWxsIG5vdCBvdmVyd3JpdGUKICAgIHlvdXIgY29uZmlndXJhdGlvbiBmaWxlcyBvciBkb2N1bWVudHMuPC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImN1c3RvbWl6ZSIgaWQ9ImN1c3RvbWl6ZSI+Q3VzdG9taXplPC9hPjwvaDI+CgogICAgPHA+TmV4dCwgeW91IGNhbiBjdXN0b21pemUgeW91ciBBcGFjaGUgSFRUUCBzZXJ2ZXIgYnkgZWRpdGluZwogICAgdGhlIDxhIGhyZWY9ImNvbmZpZ3VyaW5nLmh0bWwiPmNvbmZpZ3VyYXRpb24gZmlsZXM8L2E+IHVuZGVyCiAgICA8Y29kZT48ZW0+UFJFRklYPC9lbT4vY29uZi88L2NvZGU+LjwvcD4KCjxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPiQgdmkgPGVtPlBSRUZJWDwvZW0+L2NvbmYvaHR0cGQuY29uZjwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+SGF2ZSBhIGxvb2sgYXQgdGhlIEFwYWNoZSBtYW51YWwgdW5kZXIgPGEgaHJlZj0iLi8iPmRvY3MvbWFudWFsLzwvYT4gb3IgY29uc3VsdCA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzL3RydW5rLyI+aHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy90cnVuay88L2E+IGZvciB0aGUgbW9zdCByZWNlbnQKICAgIHZlcnNpb24gb2YgdGhpcyBtYW51YWwgYW5kIGEgY29tcGxldGUgcmVmZXJlbmNlIG9mIGF2YWlsYWJsZSA8YSBocmVmPSJtb2QvZGlyZWN0aXZlcy5odG1sIj5jb25maWd1cmF0aW9uIGRpcmVjdGl2ZXM8L2E+LjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJ0ZXN0IiBpZD0idGVzdCI+VGVzdDwvYT48L2gyPgoKICAgIDxwPk5vdyB5b3UgY2FuIDxhIGhyZWY9Imludm9raW5nLmh0bWwiPnN0YXJ0PC9hPiB5b3VyIEFwYWNoZQogICAgSFRUUCBzZXJ2ZXIgYnkgaW1tZWRpYXRlbHkgcnVubmluZzo8L3A+Cgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4kIDxlbT5QUkVGSVg8L2VtPi9iaW4vYXBhY2hlY3RsIC1rIHN0YXJ0PC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5hbmQgdGhlbiB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gcmVxdWVzdCB5b3VyIGZpcnN0IGRvY3VtZW50CiAgICB2aWEgVVJMIDxjb2RlPmh0dHA6Ly9sb2NhbGhvc3QvPC9jb2RlPi4gVGhlIHdlYiBwYWdlIHlvdSBzZWUgaXMgbG9jYXRlZAogICAgdW5kZXIgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL2NvcmUuaHRtbCNkb2N1bWVudHJvb3QiPkRvY3VtZW50Um9vdDwvYT48L2NvZGU+LAogICAgd2hpY2ggd2lsbCB1c3VhbGx5IGJlIDxjb2RlPjxlbT5QUkVGSVg8L2VtPi9odGRvY3MvPC9jb2RlPi4KICAgIFRoZW4gPGEgaHJlZj0ic3RvcHBpbmcuaHRtbCI+c3RvcDwvYT4gdGhlIHNlcnZlciBhZ2FpbiBieQogICAgcnVubmluZzo8L3A+Cgo8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4kIDxlbT5QUkVGSVg8L2VtPi9iaW4vYXBhY2hlY3RsIC1rIHN0b3A8L2NvZGU+PC9wPjwvZGl2Pgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InVwZ3JhZGluZyIgaWQ9InVwZ3JhZGluZyI+VXBncmFkaW5nPC9hPjwvaDI+CgogICAgPHA+VGhlIGZpcnN0IHN0ZXAgaW4gdXBncmFkaW5nIGlzIHRvIHJlYWQgdGhlIHJlbGVhc2UgYW5ub3VuY2VtZW50CiAgICBhbmQgdGhlIGZpbGUgPGNvZGU+Q0hBTkdFUzwvY29kZT4gaW4gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24gdG8KICAgIGZpbmQgYW55IGNoYW5nZXMgdGhhdCBtYXkgYWZmZWN0IHlvdXIgc2l0ZS4gIFdoZW4gY2hhbmdpbmcgYmV0d2VlbgogICAgbWFqb3IgcmVsZWFzZXMgKGZvciBleGFtcGxlLCBmcm9tIDEuMyB0byAyLjAgb3IgZnJvbSAyLjAgdG8gMi4yKSwKICAgIHRoZXJlIHdpbGwgbGlrZWx5IGJlIG1ham9yIGRpZmZlcmVuY2VzIGluIHRoZSBjb21waWxlLXRpbWUgYW5kCiAgICBydW4tdGltZSBjb25maWd1cmF0aW9uIHRoYXQgd2lsbCByZXF1aXJlIG1hbnVhbCBhZGp1c3RtZW50cy4gIEFsbAogICAgbW9kdWxlcyB3aWxsIGFsc28gbmVlZCB0byBiZSB1cGdyYWRlZCB0byBhY2NvbW9kYXRlIGNoYW5nZXMgaW4gdGhlCiAgICBtb2R1bGUgQVBJLjwvcD4KCiAgICA8cD5VcGdyYWRpbmcgZnJvbSBvbmUgbWlub3IgdmVyc2lvbiB0byB0aGUgbmV4dCAoZm9yIGV4YW1wbGUsIGZyb20KICAgIDIuMi41NSB0byAyLjIuNTcpIGlzIGVhc2llci4gIFRoZSA8Y29kZT5tYWtlIGluc3RhbGw8L2NvZGU+CiAgICBwcm9jZXNzIHdpbGwgbm90IG92ZXJ3cml0ZSBhbnkgb2YgeW91ciBleGlzdGluZyBkb2N1bWVudHMsIGxvZwogICAgZmlsZXMsIG9yIGNvbmZpZ3VyYXRpb24gZmlsZXMuICBJbiBhZGRpdGlvbiwgdGhlIGRldmVsb3BlcnMgbWFrZQogICAgZXZlcnkgZWZmb3J0IHRvIGF2b2lkIGluY29tcGF0aWJsZSBjaGFuZ2VzIGluIHRoZQogICAgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvY29uZmlndXJlLmh0bWwiPmNvbmZpZ3VyZTwvYT48L2NvZGU+IG9wdGlvbnMsIHJ1bi10aW1lIGNvbmZpZ3VyYXRpb24sIG9yIHRoZQogICAgbW9kdWxlIEFQSSBiZXR3ZWVuIG1pbm9yIHZlcnNpb25zLiAgSW4gbW9zdCBjYXNlcyB5b3Ugc2hvdWxkIGJlIGFibGUgdG8KICAgIHVzZSBhbiBpZGVudGljYWwgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvY29uZmlndXJlLmh0bWwiPmNvbmZpZ3VyZTwvYT48L2NvZGU+IGNvbW1hbmQgbGluZSwgYW4gaWRlbnRpY2FsCiAgICBjb25maWd1cmF0aW9uIGZpbGUsIGFuZCBhbGwgb2YgeW91ciBtb2R1bGVzIHNob3VsZCBjb250aW51ZSB0bwogICAgd29yay48L3A+CgogICAgPHA+VG8gdXBncmFkZSBhY3Jvc3MgbWlub3IgdmVyc2lvbnMsIHN0YXJ0IGJ5IGZpbmRpbmcgdGhlIGZpbGUKICAgIDxjb2RlPmNvbmZpZy5uaWNlPC9jb2RlPiBpbiB0aGUgPGNvZGU+YnVpbGQ8L2NvZGU+IGRpcmVjdG9yeSBvZgogICAgeW91ciBpbnN0YWxsZWQgc2VydmVyIG9yIGF0IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZSBmb3IgeW91cgogICAgb2xkIGluc3RhbGwuICBUaGlzIHdpbGwgY29udGFpbiB0aGUgZXhhY3QKICAgIDxjb2RlIGNsYXNzPSJwcm9ncmFtIj48YSBocmVmPSIuL3Byb2dyYW1zL2NvbmZpZ3VyZS5odG1sIj5jb25maWd1cmU8L2E+PC9jb2RlPiBjb21tYW5kIGxpbmUgdGhhdCB5b3UgdXNlZCB0bwogICAgY29uZmlndXJlIHRoZSBzb3VyY2UgdHJlZS4gIFRoZW4gdG8gdXBncmFkZSBmcm9tIG9uZSB2ZXJzaW9uIHRvCiAgICB0aGUgbmV4dCwgeW91IG5lZWQgb25seSBjb3B5IHRoZSA8Y29kZT5jb25maWcubmljZTwvY29kZT4gZmlsZSB0bwogICAgdGhlIHNvdXJjZSB0cmVlIG9mIHRoZSBuZXcgdmVyc2lvbiwgZWRpdCBpdCB0byBtYWtlIGFueSBkZXNpcmVkCiAgICBjaGFuZ2VzLCBhbmQgdGhlbiBydW46PC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgJCAuL2NvbmZpZy5uaWNlPGJyIC8+CiAgICAkIG1ha2U8YnIgLz4KICAgICQgbWFrZSBpbnN0YWxsPGJyIC8+CiAgICAkIDxlbT5QUkVGSVg8L2VtPi9iaW4vYXBhY2hlY3RsIC1rIGdyYWNlZnVsLXN0b3A8YnIgLz4KICAgICQgPGVtPlBSRUZJWDwvZW0+L2Jpbi9hcGFjaGVjdGwgLWsgc3RhcnQ8YnIgLz4KICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPGRpdiBjbGFzcz0id2FybmluZyI+WW91IHNob3VsZCBhbHdheXMgdGVzdCBhbnkgbmV3IHZlcnNpb24gaW4geW91cgogICAgZW52aXJvbm1lbnQgYmVmb3JlIHB1dHRpbmcgaXQgaW50byBwcm9kdWN0aW9uLiAgRm9yIGV4YW1wbGUsIHlvdQogICAgY2FuIGluc3RhbGwgYW5kIHJ1biB0aGUgbmV3IHZlcnNpb24gYWxvbmcgc2lkZSB0aGUgb2xkIG9uZSBieQogICAgdXNpbmcgYSBkaWZmZXJlbnQgPGNvZGU+LS1wcmVmaXg8L2NvZGU+IGFuZCBhCiAgICBkaWZmZXJlbnQgcG9ydCAoYnkgYWRqdXN0aW5nIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuL21vZC9tcG1fY29tbW9uLmh0bWwjbGlzdGVuIj5MaXN0ZW48L2E+PC9jb2RlPiBkaXJlY3RpdmUpIHRvIHRlc3QgZm9yIGFueQogICAgaW5jb21wYXRpYmlsaXRpZXMgYmVmb3JlIGRvaW5nIHRoZSBmaW5hbCB1cGdyYWRlLjwvZGl2Pgo8L2Rpdj48L2Rpdj4KPGRpdiBjbGFzcz0iYm90dG9tbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuL2RlL2luc3RhbGwuaHRtbCIgaHJlZmxhbmc9ImRlIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkRldXRzY2giPiZuYnNwO2RlJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZW4vaW5zdGFsbC5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9lcy9pbnN0YWxsLmh0bWwiIGhyZWZsYW5nPSJlcyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJFc3Bh8W9sIj4mbmJzcDtlcyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2ZyL2luc3RhbGwuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2phL2luc3RhbGwuaHRtbCIgaHJlZmxhbmc9ImphIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkphcGFuZXNlIj4mbmJzcDtqYSZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2tvL2luc3RhbGwuaHRtbCIgaHJlZmxhbmc9ImtvIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IktvcmVhbiI+Jm5ic3A7a28mbmJzcDs8L2E+PC9wPgo8L2Rpdj48ZGl2IGlkPSJmb290ZXIiPgo8cCBjbGFzcz0iYXBhY2hlIj5Db3B5cmlnaHQgMTk5NS0yMDA1IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBvciBpdHMgbGljZW5zb3JzLCBhcyBhcHBsaWNhYmxlLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSIuL2ZhcS8iPkZBUTwvYT4gfCA8YSBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD48L2Rpdj4KPC9ib2R5PjwvaHRtbD4=