PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5HbG9zc2FyeSAtIEFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNTwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4vc3R5bGUvY3NzL21hbnVhbC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJNYWluIHN0eWxlc2hlZXQiIC8+CjxsaW5rIGhyZWY9Ii4vc3R5bGUvY3NzL21hbnVhbC1sb29zZS0xMDBwYy5jc3MiIHJlbD0iYWx0ZXJuYXRlIHN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTm8gU2lkZWJhciAtIERlZmF1bHQgZm9udCBzaXplIiAvPgo8bGluayBocmVmPSIuL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi9zdHlsZS9jc3MvcHJldHRpZnkuY3NzIiAvPgo8c2NyaXB0IHNyYz0iLi9zdHlsZS9zY3JpcHRzL3ByZXR0aWZ5Lm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KPC9zY3JpcHQ+Cgo8bGluayBocmVmPSIuL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHkgaWQ9Im1hbnVhbC1wYWdlIiBjbGFzcz0ibm8tc2lkZWJhciI+PGRpdiBpZD0icGFnZS1oZWFkZXIiPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4vbW9kL3F1aWNrcmVmZXJlbmNlLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9GQVEiPkZBUTwvYT4gfCA8YSBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD4KPHAgY2xhc3M9ImFwYWNoZSI+QXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi41PC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4vaW1hZ2VzL2ZlYXRoZXIucG5nIiAvPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ1cCI+PGEgaHJlZj0iLi8iPjxpbWcgdGl0bGU9IiZsdDstIiBhbHQ9IiZsdDstIiBzcmM9Ii4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPkhUVFAgU2VydmVyPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4vIj5WZXJzaW9uIDIuNTwvYT48L2Rpdj48ZGl2IGlkPSJwYWdlLWNvbnRlbnQiPjxkaXYgaWQ9InByZWFtYmxlIj48aDE+R2xvc3Nhcnk8L2gxPgo8ZGl2IGNsYXNzPSJ0b3BsYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4vZGUvZ2xvc3NhcnkuaHRtbCIgaHJlZmxhbmc9ImRlIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkRldXRzY2giPiZuYnNwO2RlJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZW4vZ2xvc3NhcnkuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZXMvZ2xvc3NhcnkuaHRtbCIgaHJlZmxhbmc9ImVzIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkVzcGHxb2wiPiZuYnNwO2VzJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vZnIvZ2xvc3NhcnkuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2phL2dsb3NzYXJ5Lmh0bWwiIGhyZWZsYW5nPSJqYSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJKYXBhbmVzZSI+Jm5ic3A7amEmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9rby9nbG9zc2FyeS5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL3RyL2dsb3NzYXJ5Lmh0bWwiIGhyZWZsYW5nPSJ0ciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJU/HJr52UiPiZuYnNwO3RyJm5ic3A7PC9hPjwvcD4KPC9kaXY+CgogICAgPHA+VGhpcyBnbG9zc2FyeSBkZWZpbmVzIHNvbWUgb2YgdGhlIGNvbW1vbiB0ZXJtaW5vbG9neSByZWxhdGVkIHRvIEFwYWNoZSBpbgogICAgICBwYXJ0aWN1bGFyLCBhbmQgd2ViIHNlcnZpbmcgaW4gZ2VuZXJhbC4gTW9yZSBpbmZvcm1hdGlvbiBvbiBlYWNoIGNvbmNlcHQKICAgICAgaXMgcHJvdmlkZWQgaW4gdGhlIGxpbmtzLjwvcD4KICA8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJkZWZpbml0aW9ucyIgaWQ9ImRlZmluaXRpb25zIj5EZWZpbml0aW9uczwvYT48L2gyPgoKICA8ZGw+CiAgICA8ZHQ+PGEgbmFtZT0iYWNjZXNzY29udHJvbCIgaWQ9ImFjY2Vzc2NvbnRyb2wiPkFjY2VzcyBDb250cm9sPC9hPjwvZHQ+CiAgICA8ZGQ+VGhlIHJlc3RyaWN0aW9uIG9mIGFjY2VzcyB0byBuZXR3b3JrIHJlYWxtcy4gSW4gYW4gQXBhY2hlIGNvbnRleHQKICAgICAgdXN1YWxseSB0aGUgcmVzdHJpY3Rpb24gb2YgYWNjZXNzIHRvIGNlcnRhaW4gPGVtPlVSTHM8L2VtPi48YnIgLz4gU2VlOiAgPGEgaHJlZj0iaG93dG8vYXV0aC5odG1sIj5BdXRoZW50aWNhdGlvbiwgQXV0aG9yaXphdGlvbiwgYW5kIEFjY2VzcwogICAgICBDb250cm9sPC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iYWxnb3JpdGhtIiBpZD0iYWxnb3JpdGhtIj5BbGdvcml0aG08L2E+PC9kdD4KICAgIDxkZD5BbiB1bmFtYmlndW91cyBmb3JtdWxhIG9yIHNldCBvZiBydWxlcyBmb3Igc29sdmluZyBhIHByb2JsZW0gaW4gYSBmaW5pdGUKICAgICAgbnVtYmVyIG9mIHN0ZXBzLiBBbGdvcml0aG1zIGZvciBlbmNyeXB0aW9uIGFyZSB1c3VhbGx5IGNhbGxlZAogICAgICA8ZGZuPkNpcGhlcnM8L2Rmbj4uCiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJhcGFjaGVleHRlbnNpb250b29sIiBpZD0iYXBhY2hlZXh0ZW5zaW9udG9vbCI+QVBhY2hlCiAgICAgICAgZVh0ZW5zaW9uIFRvb2w8L2E+IDxhIG5hbWU9ImFweHMiIGlkPSJhcHhzIj4oYXB4cyk8L2E+PC9kdD4KICAgIDxkZD5BIHBlcmwgc2NyaXB0IHRoYXQgYWlkcyBpbiBjb21waWxpbmcgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI21vZHVsZSIgdGl0bGU9InNlZSBnbG9zc2FyeSI+bW9kdWxlPC9hPiBzb3VyY2VzIGludG8gRHluYW1pYyBTaGFyZWQgT2JqZWN0cwogICAgICAoPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI2RzbyIgdGl0bGU9InNlZSBnbG9zc2FyeSI+RFNPPC9hPnMpIGFuZCBoZWxwcyBpbnN0YWxsIHRoZW0gaW4gdGhlCiAgICAgIEFwYWNoZSBXZWIgc2VydmVyLjxiciAvPgogICAgICBTZWU6IE1hbnVhbCBQYWdlOiA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi9wcm9ncmFtcy9hcHhzLmh0bWwiPmFweHM8L2E+PC9jb2RlPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iYXBhY2hlcG9ydGFibGVydW50aW1lIiBpZD0iYXBhY2hlcG9ydGFibGVydW50aW1lIj5BcGFjaGUgUG9ydGFibGUgUnVudGltZTwvYT4gPGEgbmFtZT0iYXByIiBpZD0iYXByIj4oQVBSKTwvYT48L2R0PgogICAgPGRkPkEgc2V0IG9mIGxpYnJhcmllcyBwcm92aWRpbmcgbWFueSBvZiB0aGUgYmFzaWMgaW50ZXJmYWNlcwogICAgICBiZXR3ZWVuIHRoZSBzZXJ2ZXIgYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgQVBSIGlzIGRldmVsb3BlZAogICAgICBwYXJhbGxlbCB0byB0aGUgQXBhY2hlIEhUVFAgU2VydmVyIGFzIGFuIGluZGVwZW5kZW50IHByb2plY3QuPGJyIC8+CiAgICAgIFNlZTogPGEgaHJlZj0iaHR0cDovL2Fwci5hcGFjaGUub3JnLyI+QXBhY2hlIFBvcnRhYmxlIFJ1bnRpbWUKICAgICAgUHJvamVjdDwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9ImF1dGhlbnRpY2F0aW9uIiBpZD0iYXV0aGVudGljYXRpb24iPkF1dGhlbnRpY2F0aW9uPC9hPjwvZHQ+CiAgICA8ZGQ+VGhlIHBvc2l0aXZlIGlkZW50aWZpY2F0aW9uIG9mIGEgbmV0d29yayBlbnRpdHkgc3VjaCBhcyBhIHNlcnZlciwgYQogICAgICBjbGllbnQsIG9yIGEgdXNlci48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJob3d0by9hdXRoLmh0bWwiPkF1dGhlbnRpY2F0aW9uLCBBdXRob3JpemF0aW9uLCBhbmQgQWNjZXNzCiAgICAgIENvbnRyb2w8L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJjZXJ0aWZpY2F0ZSIgaWQ9ImNlcnRpZmljYXRlIj5DZXJ0aWZpY2F0ZTwvYT48L2R0PgogICAgPGRkPkEgZGF0YSByZWNvcmQgdXNlZCBmb3IgYXV0aGVudGljYXRpbmcgbmV0d29yayBlbnRpdGllcyBzdWNoCiAgICAgIGFzIGEgc2VydmVyIG9yIGEgY2xpZW50LiBBIGNlcnRpZmljYXRlIGNvbnRhaW5zIFguNTA5IGluZm9ybWF0aW9uIHBpZWNlcwogICAgICBhYm91dCBpdHMgb3duZXIgKGNhbGxlZCB0aGUgc3ViamVjdCkgYW5kIHRoZSBzaWduaW5nIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNjZXJ0aWZpY2F0aW9uYXV0aG9yaXR5IiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5DZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTwvYT4gKGNhbGxlZAogICAgICB0aGUgaXNzdWVyKSwgcGx1cyB0aGUgb3duZXIncyA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjcHVibGlja2V5IiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5wdWJsaWMKICAgICAga2V5PC9hPiBhbmQgdGhlCiAgICAgIHNpZ25hdHVyZSBtYWRlIGJ5IHRoZSBDQS4gTmV0d29yayBlbnRpdGllcyB2ZXJpZnkgdGhlc2Ugc2lnbmF0dXJlcwogICAgICB1c2luZyBDQSBjZXJ0aWZpY2F0ZXMuPGJyIC8+CiAgICAgIFNlZTogPGEgaHJlZj0ic3NsLyI+U1NML1RMUyBFbmNyeXB0aW9uPC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iY2VydGlmaWNhdHNpZ25pbmdyZXF1ZXN0IiBpZD0iY2VydGlmaWNhdHNpZ25pbmdyZXF1ZXN0Ij5DZXJ0aWZpY2F0ZSBTaWduaW5nIFJlcXVlc3Q8L2E+CiAgICAgIDxhIG5hbWU9ImNzciIgaWQ9ImNzciI+KENTUik8L2E+PC9kdD4KICAgIDxkZD5BbiB1bnNpZ25lZCA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjY2VydGlmaWNhdGUiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPmNlcnRpZmljYXRlPC9hPiBmb3IKICAgICAgc3VibWlzc2lvbiB0byBhIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNjZXJ0aWZpY2F0aW9uYXV0aG9yaXR5IiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5DZXJ0aWZpY2F0aW9uCiAgICAgIEF1dGhvcml0eTwvYT4sIHdoaWNoIHNpZ25zIGl0IHdpdGggdGhlIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNwcml2YXRla2V5IiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5Qcml2YXRlIEtleTwvYT4gb2YgdGhlaXIgQ0EKICAgICAgPGVtPkNlcnRpZmljYXRlPC9lbT4uIE9uY2UgdGhlIENTUiBpcyBzaWduZWQsIGl0IGJlY29tZXMgYSByZWFsCiAgICAgIGNlcnRpZmljYXRlLjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9InNzbC8iPlNTTC9UTFMgRW5jcnlwdGlvbjwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9ImNlcnRpZmljYXRpb25hdXRob3JpdHkiIGlkPSJjZXJ0aWZpY2F0aW9uYXV0aG9yaXR5Ij5DZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTwvYT4KICAgICAgPGEgbmFtZT0iY2EiIGlkPSJjYSI+KENBKTwvYT48L2R0PgogICAgPGRkPkEgdHJ1c3RlZCB0aGlyZCBwYXJ0eSB3aG9zZSBwdXJwb3NlIGlzIHRvIHNpZ24gY2VydGlmaWNhdGVzIGZvciBuZXR3b3JrCiAgICAgIGVudGl0aWVzIGl0IGhhcyBhdXRoZW50aWNhdGVkIHVzaW5nIHNlY3VyZSBtZWFucy4gT3RoZXIgbmV0d29yayBlbnRpdGllcwogICAgICBjYW4gY2hlY2sgdGhlIHNpZ25hdHVyZSB0byB2ZXJpZnkgdGhhdCBhIENBIGhhcyBhdXRoZW50aWNhdGVkIHRoZSBiZWFyZXIKICAgICAgb2YgYSBjZXJ0aWZpY2F0ZS48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJzc2wvIj5TU0wvVExTIEVuY3J5cHRpb248L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJjaXBoZXIiIGlkPSJjaXBoZXIiPkNpcGhlcjwvYT48L2R0PgogICAgPGRkPkFuIGFsZ29yaXRobSBvciBzeXN0ZW0gZm9yIGRhdGEgZW5jcnlwdGlvbi4gRXhhbXBsZXMgYXJlIERFUywgSURFQSwgUkM0LAogICAgICBldGMuPGJyIC8+CiAgICAgIFNlZTogPGEgaHJlZj0ic3NsLyI+U1NML1RMUyBFbmNyeXB0aW9uPC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iY2lwaGVydGV4dCIgaWQ9ImNpcGhlcnRleHQiPkNpcGhlcnRleHQ8L2E+PC9kdD4KICAgIDxkZD5UaGUgcmVzdWx0IGFmdGVyIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNwbGFpbnRleHQiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPlBsYWludGV4dDwvYT4gaXMKICAgICAgcGFzc2VkIHRocm91Z2ggYSA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjY2lwaGVyIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5DaXBoZXI8L2E+LjxiciAvPiBTZWU6IDxhIGhyZWY9InNzbC8iPlNTTC9UTFMgRW5jcnlwdGlvbjwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9ImNvbW1vbmdhdGV3YXlpbnRlcmZhY2UiIGlkPSJjb21tb25nYXRld2F5aW50ZXJmYWNlIj5Db21tb24KICAgICAgICBHYXRld2F5IEludGVyZmFjZTwvYT4gPGEgbmFtZT0iY2dpIiBpZD0iY2dpIj4oQ0dJKTwvYT48L2R0PgogICAgPGRkPkEgc3RhbmRhcmQgZGVmaW5pdGlvbiBmb3IgYW4gaW50ZXJmYWNlIGJldHdlZW4gYSB3ZWIgc2VydmVyIGFuZCBhbgogICAgICBleHRlcm5hbCBwcm9ncmFtIHRoYXQgYWxsb3dzIHRoZSBleHRlcm5hbCBwcm9ncmFtIHRvIHNlcnZpY2UgcmVxdWVzdHMuCiAgICAgIFRoZXJlIGlzIGFuIDxhIGhyZWY9Imh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzM4NzUiPkluZm9ybWF0aW9uYWwKICAgICAgUkZDPC9hPiB3aGljaCBjb3ZlcnMgdGhlIHNwZWNpZmljcy48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJob3d0by9jZ2kuaHRtbCI+RHluYW1pYyBDb250ZW50IHdpdGggQ0dJPC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iY29uZmlndXJhdGlvbmRpcmVjdGl2ZSIgaWQ9ImNvbmZpZ3VyYXRpb25kaXJlY3RpdmUiPkNvbmZpZ3VyYXRpb24gRGlyZWN0aXZlPC9hPjwvZHQ+CiAgICA8ZGQ+U2VlOiA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjZGlyZWN0aXZlIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5EaXJlY3RpdmU8L2E+PC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iY29uZmlndXJhdGlvbmZpbGUiIGlkPSJjb25maWd1cmF0aW9uZmlsZSI+Q29uZmlndXJhdGlvbgogICAgICAgIEZpbGU8L2E+PC9kdD4KICAgIDxkZD5BIHRleHQgZmlsZSBjb250YWluaW5nIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNkaXJlY3RpdmUiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPkRpcmVjdGl2ZXM8L2E+CiAgICAgIHRoYXQgY29udHJvbCB0aGUgY29uZmlndXJhdGlvbiBvZiBBcGFjaGUuPGJyIC8+CiAgICAgIFNlZTogPGEgaHJlZj0iY29uZmlndXJpbmcuaHRtbCI+Q29uZmlndXJhdGlvbiBGaWxlczwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9ImNvbm5lY3QiIGlkPSJjb25uZWN0Ij5DT05ORUNUPC9hPjwvZHQ+CiAgICA8ZGQ+QW4gSFRUUCA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjbWV0aG9kIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5tZXRob2Q8L2E+IGZvciBwcm94eWluZyByYXcgZGF0YQogICAgICBjaGFubmVscyBvdmVyIEhUVFAuIEl0IGNhbiBiZSB1c2VkIHRvIGVuY2Fwc3VsYXRlIG90aGVyIHByb3RvY29scywgc3VjaCBhcwogICAgICB0aGUgU1NMIHByb3RvY29sLgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iY29udGV4dCIgaWQ9ImNvbnRleHQiPkNvbnRleHQ8L2E+PC9kdD4KICAgIDxkZD5BbiBhcmVhIGluIHRoZSA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjY29uZmlndXJhdGlvbmZpbGUiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPmNvbmZpZ3VyYXRpb24KICAgICAgZmlsZXM8L2E+IHdoZXJlIGNlcnRhaW4gdHlwZXMgb2YgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI2RpcmVjdGl2ZSIgdGl0bGU9InNlZSBnbG9zc2FyeSI+ZGlyZWN0aXZlczwvYT4gYXJlIGFsbG93ZWQuPGJyIC8+CiAgICAgIFNlZTogPGEgaHJlZj0ibW9kL2RpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+VGVybXMgVXNlZCB0byBEZXNjcmliZQogICAgICBBcGFjaGUgRGlyZWN0aXZlczwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9ImRpZ2l0YWxzaWduYXR1cmUiIGlkPSJkaWdpdGFsc2lnbmF0dXJlIj5EaWdpdGFsCiAgICAgICAgU2lnbmF0dXJlPC9hPjwvZHQ+CiAgICA8ZGQ+QW4gZW5jcnlwdGVkIHRleHQgYmxvY2sgdGhhdCB2YWxpZGF0ZXMgYSBjZXJ0aWZpY2F0ZSBvciBvdGhlciBmaWxlLiBBCiAgICAgIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNjZXJ0aWZpY2F0aW9uYXV0aG9yaXR5IiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5DZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTwvYT4KICAgICAgY3JlYXRlcyBhIHNpZ25hdHVyZSBieSBnZW5lcmF0aW5nIGEgaGFzaCBvZiB0aGUgPGVtPlB1YmxpYyBLZXk8L2VtPgogICAgICBlbWJlZGRlZCBpbiBhIDxlbT5DZXJ0aWZpY2F0ZTwvZW0+LCB0aGVuIGVuY3J5cHRpbmcgdGhlIGhhc2ggd2l0aCBpdHMgb3duCiAgICAgIDxlbT5Qcml2YXRlIEtleTwvZW0+LiBPbmx5IHRoZSBDQSdzIHB1YmxpYyBrZXkgY2FuIGRlY3J5cHQgdGhlIHNpZ25hdHVyZSwKICAgICAgdmVyaWZ5aW5nIHRoYXQgdGhlIENBIGhhcyBhdXRoZW50aWNhdGVkIHRoZSBuZXR3b3JrIGVudGl0eSB0aGF0IG93bnMgdGhlCiAgICAgIDxlbT5DZXJ0aWZpY2F0ZTwvZW0+LjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9InNzbC8iPlNTTC9UTFMgRW5jcnlwdGlvbjwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9ImRpcmVjdGl2ZSIgaWQ9ImRpcmVjdGl2ZSI+RGlyZWN0aXZlPC9hPjwvZHQ+CiAgICA8ZGQ+QSBjb25maWd1cmF0aW9uIGNvbW1hbmQgdGhhdCBjb250cm9scyBvbmUgb3IgbW9yZSBhc3BlY3RzIG9mIEFwYWNoZSdzCiAgICAgIGJlaGF2aW9yLiAgRGlyZWN0aXZlcyBhcmUgcGxhY2VkIGluIHRoZSA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjY29uZmlndXJhdGlvbmZpbGUiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPkNvbmZpZ3VyYXRpb24gRmlsZTwvYT48YnIgLz4KICAgIFNlZTogPGEgaHJlZj0ibW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlIEluZGV4PC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iZHluYW1pY3NoYXJlZG9iamVjdCIgaWQ9ImR5bmFtaWNzaGFyZWRvYmplY3QiPkR5bmFtaWMKICAgICAgICBTaGFyZWQgT2JqZWN0PC9hPiA8YSBuYW1lPSJkc28iIGlkPSJkc28iPihEU08pPC9hPjwvZHQ+CiAgICA8ZGQ+PGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI21vZHVsZSIgdGl0bGU9InNlZSBnbG9zc2FyeSI+TW9kdWxlczwvYT4gY29tcGlsZWQgc2VwYXJhdGVseSBmcm9tIHRoZQogICAgICBBcGFjaGUgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvaHR0cGQuaHRtbCI+aHR0cGQ8L2E+PC9jb2RlPiBiaW5hcnkgdGhhdCBjYW4gYmUgbG9hZGVkIG9uLWRlbWFuZC48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJkc28uaHRtbCI+RHluYW1pYyBTaGFyZWQgT2JqZWN0IFN1cHBvcnQ8L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJlbnZpcm9ubWVudHZhcmlhYmxlIiBpZD0iZW52aXJvbm1lbnR2YXJpYWJsZSI+RW52aXJvbm1lbnQKICAgICAgICBWYXJpYWJsZTwvYT4gPGEgbmFtZT0iZW52LXZhcmlhYmxlIiBpZD0iZW52LXZhcmlhYmxlIj4oZW52LXZhcmlhYmxlKTwvYT48L2R0PgogICAgPGRkPk5hbWVkIHZhcmlhYmxlcyBtYW5hZ2VkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHNoZWxsIGFuZCB1c2VkIHRvIHN0b3JlCiAgICAgIGluZm9ybWF0aW9uIGFuZCBjb21tdW5pY2F0ZSBiZXR3ZWVuIHByb2dyYW1zLiAgQXBhY2hlIGFsc28gY29udGFpbnMKICAgICAgaW50ZXJuYWwgdmFyaWFibGVzIHRoYXQgYXJlIHJlZmVycmVkIHRvIGFzIGVudmlyb25tZW50IHZhcmlhYmxlcywgYnV0IGFyZQogICAgICBzdG9yZWQgaW4gaW50ZXJuYWwgQXBhY2hlIHN0cnVjdHVyZXMsIHJhdGhlciB0aGFuIGluIHRoZSBzaGVsbAogICAgICBlbnZpcm9ubWVudC48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJlbnYuaHRtbCI+RW52aXJvbm1lbnQgVmFyaWFibGVzIGluIEFwYWNoZTwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9ImV4cG9ydC1jcmlwcGxlZCIgaWQ9ImV4cG9ydC1jcmlwcGxlZCI+RXhwb3J0LUNyaXBwbGVkPC9hPjwvZHQ+CiAgICA8ZGQ+RGltaW5pc2hlZCBpbiBjcnlwdG9ncmFwaGljIHN0cmVuZ3RoIChhbmQgc2VjdXJpdHkpIGluIG9yZGVyIHRvIGNvbXBseQogICAgICB3aXRoIHRoZSBVbml0ZWQgU3RhdGVzJyBFeHBvcnQgQWRtaW5pc3RyYXRpb24gUmVndWxhdGlvbnMgKEVBUikuCiAgICAgIEV4cG9ydC1jcmlwcGxlZCBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIGlzIGxpbWl0ZWQgdG8gYSBzbWFsbCBrZXkgc2l6ZSwKICAgICAgcmVzdWx0aW5nIGluIDxlbT5DaXBoZXJ0ZXh0PC9lbT4gd2hpY2ggdXN1YWxseSBjYW4gYmUgZGVjcnlwdGVkIGJ5IGJydXRlCiAgICAgIGZvcmNlLjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9InNzbC8iPlNTTC9UTFMgRW5jcnlwdGlvbjwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9ImZpbHRlciIgaWQ9ImZpbHRlciI+RmlsdGVyPC9hPjwvZHQ+CiAgICA8ZGQ+QSBwcm9jZXNzIHRoYXQgaXMgYXBwbGllZCB0byBkYXRhIHRoYXQgaXMgc2VudCBvciByZWNlaXZlZCBieSB0aGUKICAgICAgc2VydmVyLiAgSW5wdXQgZmlsdGVycyBwcm9jZXNzIGRhdGEgc2VudCBieSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIsCiAgICAgIHdoaWxlIG91dHB1dCBmaWx0ZXJzIHByb2Nlc3MgZG9jdW1lbnRzIG9uIHRoZSBzZXJ2ZXIgYmVmb3JlIHRoZXkgYXJlIHNlbnQKICAgICAgdG8gdGhlIGNsaWVudC4gIEZvciBleGFtcGxlLCB0aGUgPGNvZGU+SU5DTFVERVM8L2NvZGU+IG91dHB1dCBmaWx0ZXIKICAgICAgcHJvY2Vzc2VzIGRvY3VtZW50cyBmb3IgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI3NzaSIgdGl0bGU9InNlZSBnbG9zc2FyeSI+U2VydmVyIFNpZGUKICAgICAgSW5jbHVkZXM8L2E+LjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9ImZpbHRlci5odG1sIj5GaWx0ZXJzPC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iZnVsbHktcXVhbGlmaWVkZG9tYWluLW5hbWUiIGlkPSJmdWxseS1xdWFsaWZpZWRkb21haW4tbmFtZSI+RnVsbHktUXVhbGlmaWVkIERvbWFpbi1OYW1lPC9hPgogICAgICA8YSBuYW1lPSJmcWRuIiBpZD0iZnFkbiI+KEZRRE4pPC9hPjwvZHQ+CiAgICA8ZGQ+VGhlIHVuaXF1ZSBuYW1lIG9mIGEgbmV0d29yayBlbnRpdHksIGNvbnNpc3Rpbmcgb2YgYSBob3N0bmFtZSBhbmQgYQogICAgICBkb21haW4gbmFtZSB0aGF0IGNhbiByZXNvbHZlIHRvIGFuIElQIGFkZHJlc3MuIEZvciBleGFtcGxlLAogICAgICA8Y29kZT53d3c8L2NvZGU+IGlzIGEgaG9zdG5hbWUsIDxjb2RlPmV4YW1wbGUuY29tPC9jb2RlPiBpcyBhIGRvbWFpbiBuYW1lLAogICAgICBhbmQgPGNvZGU+d3d3LmV4YW1wbGUuY29tPC9jb2RlPiBpcyBhIGZ1bGx5LXF1YWxpZmllZCBkb21haW4gbmFtZS4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9ImhhbmRsZXIiIGlkPSJoYW5kbGVyIj5IYW5kbGVyPC9hPjwvZHQ+CiAgICA8ZGQ+QW4gaW50ZXJuYWwgQXBhY2hlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3Rpb24gdG8gYmUgcGVyZm9ybWVkIHdoZW4gYQogICAgICBmaWxlIGlzIGNhbGxlZC4gR2VuZXJhbGx5LCBmaWxlcyBoYXZlIGltcGxpY2l0IGhhbmRsZXJzLCBiYXNlZCBvbiB0aGUgZmlsZQogICAgICB0eXBlLiBOb3JtYWxseSwgYWxsIGZpbGVzIGFyZSBzaW1wbHkgc2VydmVkIGJ5IHRoZSBzZXJ2ZXIsIGJ1dCBjZXJ0YWluCiAgICAgIGZpbGUgdHlwZXMgYXJlICJoYW5kbGVkIiBzZXBhcmF0ZWx5LiAgRm9yIGV4YW1wbGUsIHRoZQogICAgICA8Y29kZT5jZ2ktc2NyaXB0PC9jb2RlPiBoYW5kbGVyIGRlc2lnbmF0ZXMgZmlsZXMgdG8gYmUgcHJvY2Vzc2VkIGFzCiAgICAgIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNjZ2kiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPkNHSXM8L2E+LjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9ImhhbmRsZXIuaHRtbCI+QXBhY2hlJ3MgSGFuZGxlciBVc2U8L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJoYXNoIiBpZD0iaGFzaCI+SGFzaDwvYT48L2R0PgogICAgPGRkPkEgbWF0aGVtYXRpY2FsIG9uZS13YXksIGlycmV2ZXJzaWJsZSBhbGdvcml0aG0gZ2VuZXJhdGluZyBhIHN0cmluZyB3aXRoCiAgICAgIGZpeGVkLWxlbmd0aCBmcm9tIGFub3RoZXIgc3RyaW5nIG9mIGFueSBsZW5ndGguIERpZmZlcmVudCBpbnB1dCBzdHJpbmdzCiAgICAgIHdpbGwgdXN1YWxseSBwcm9kdWNlIGRpZmZlcmVudCBoYXNoZXMgKGRlcGVuZGluZyBvbiB0aGUgaGFzaCBmdW5jdGlvbikuCiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJoZWFkZXIiIGlkPSJoZWFkZXIiPkhlYWRlcjwvYT48L2R0PgogICAgPGRkPlRoZSBwYXJ0IG9mIHRoZSA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjaHR0cCIgdGl0bGU9InNlZSBnbG9zc2FyeSI+SFRUUDwvYT4gcmVxdWVzdCBhbmQKICAgICAgcmVzcG9uc2UgdGhhdCBpcyBzZW50IGJlZm9yZSB0aGUgYWN0dWFsIGNvbnRlbnQsIGFuZCB0aGF0IGNvbnRhaW5zCiAgICAgIG1ldGEtaW5mb3JtYXRpb24gZGVzY3JpYmluZyB0aGUgY29udGVudC4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9Imh0YWNjZXNzIiBpZD0iaHRhY2Nlc3MiPi5odGFjY2VzczwvYT48L2R0PgogICAgPGRkPkEgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI2NvbmZpZ3VyYXRpb25maWxlIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5jb25maWd1cmF0aW9uIGZpbGU8L2E+IHRoYXQKICAgICAgaXMgcGxhY2VkIGluc2lkZSB0aGUgd2ViIHRyZWUgYW5kIGFwcGxpZXMgY29uZmlndXJhdGlvbiA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjZGlyZWN0aXZlIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5kaXJlY3RpdmVzPC9hPiB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIGl0IGlzCiAgICAgIHBsYWNlZCBhbmQgYWxsIHN1Yi1kaXJlY3Rvcmllcy4gIERlc3BpdGUgaXRzIG5hbWUsIHRoaXMgZmlsZSBjYW4gaG9sZAogICAgICBhbG1vc3QgYW55IHR5cGUgb2YgZGlyZWN0aXZlLCBub3QganVzdCBhY2Nlc3MtY29udHJvbCBkaXJlY3RpdmVzLjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9ImNvbmZpZ3VyaW5nLmh0bWwiPkNvbmZpZ3VyYXRpb24gRmlsZXM8L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJodHRwZC5jb25mIiBpZD0iaHR0cGQuY29uZiI+aHR0cGQuY29uZjwvYT48L2R0PgogICAgPGRkPlRoZSBtYWluIEFwYWNoZSA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjY29uZmlndXJhdGlvbmZpbGUiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPmNvbmZpZ3VyYXRpb24KICAgICAgZmlsZTwvYT4uICBUaGUgZGVmYXVsdCBsb2NhdGlvbiBpcwogICAgICA8Y29kZT4vdXNyL2xvY2FsL2FwYWNoZTIvY29uZi9odHRwZC5jb25mPC9jb2RlPiwgYnV0IGl0IG1heSBiZSBtb3ZlZCB1c2luZwogICAgICBydW4tdGltZSBvciBjb21waWxlLXRpbWUgY29uZmlndXJhdGlvbi48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJjb25maWd1cmluZy5odG1sIj5Db25maWd1cmF0aW9uIEZpbGVzPC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0iaHlwZXJ0ZXh0dHJhbnNmZXJwcm90b2NvbCIgaWQ9Imh5cGVydGV4dHRyYW5zZmVycHJvdG9jb2wiPkh5cGVyVGV4dCBUcmFuc2ZlciBQcm90b2NvbDwvYT4KICAgICAgPGEgbmFtZT0iaHR0cCIgaWQ9ImhodHAiPihIVFRQKTwvYT48L2R0PgogICAgPGRkPlRoZSBzdGFuZGFyZCB0cmFuc21pc3Npb24gcHJvdG9jb2wgdXNlZCBvbiB0aGUgV29ybGQgV2lkZSBXZWIuICBBcGFjaGUKICAgICAgaW1wbGVtZW50cyB2ZXJzaW9uIDEuMSBvZiB0aGUgcHJvdG9jb2wsIHJlZmVycmVkIHRvIGFzIEhUVFAvMS4xIGFuZAogICAgICBkZWZpbmVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly9pZXRmLm9yZy9yZmMvcmZjMjYxNi50eHQiPlJGQyAyNjE2PC9hPi4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9Imh0dHBzIiBpZD0iaHR0cHMiPkhUVFBTPC9hPjwvZHQ+CiAgICA8ZGQ+VGhlIEh5cGVyVGV4dCBUcmFuc2ZlciBQcm90b2NvbCAoU2VjdXJlKSwgdGhlIHN0YW5kYXJkIGVuY3J5cHRlZAogICAgICBjb21tdW5pY2F0aW9uIG1lY2hhbmlzbSBvbiB0aGUgV29ybGQgV2lkZSBXZWIuIFRoaXMgaXMgYWN0dWFsbHkganVzdCBIVFRQCiAgICAgIG92ZXIgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI3NzbCIgdGl0bGU9InNlZSBnbG9zc2FyeSI+U1NMPC9hPi48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJzc2wvIj5TU0wvVExTIEVuY3J5cHRpb248L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJtZXRob2QiIGlkPSJtZXRob2QiPk1ldGhvZDwvYT48L2R0PgogICAgPGRkPkluIHRoZSBjb250ZXh0IG9mIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNodHRwIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5IVFRQPC9hPiwgYW4gYWN0aW9uIHRvCiAgICAgIHBlcmZvcm0gb24gYSByZXNvdXJjZSwgc3BlY2lmaWVkIG9uIHRoZSByZXF1ZXN0IGxpbmUgYnkgdGhlIGNsaWVudC4gIFNvbWUKICAgICAgb2YgdGhlIG1ldGhvZHMgYXZhaWxhYmxlIGluIEhUVFAgYXJlIDxjb2RlPkdFVDwvY29kZT4sIDxjb2RlPlBPU1Q8L2NvZGU+LAogICAgICBhbmQgPGNvZGU+UFVUPC9jb2RlPi4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9Im1lc3NhZ2VkaWdlc3QiIGlkPSJtZXNzYWdlZGlnZXN0Ij5NZXNzYWdlIERpZ2VzdDwvYT48L2R0PgogICAgPGRkPkEgaGFzaCBvZiBhIG1lc3NhZ2UsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHZlcmlmeSB0aGF0IHRoZSBjb250ZW50cyBvZgogICAgICB0aGUgbWVzc2FnZSBoYXZlIG5vdCBiZWVuIGFsdGVyZWQgaW4gdHJhbnNpdC48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJzc2wvIj5TU0wvVExTIEVuY3J5cHRpb248L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJtaW1lLXR5cGUiIGlkPSJtaW1lLXR5cGUiPk1JTUUtdHlwZTwvYT48L2R0PgogICAgPGRkPkEgd2F5IHRvIGRlc2NyaWJlIHRoZSBraW5kIG9mIGRvY3VtZW50IGJlaW5nIHRyYW5zbWl0dGVkLiAgSXRzIG5hbWUKICAgICAgY29tZXMgZnJvbSB0aGF0IGZhY3QgdGhhdCBpdHMgZm9ybWF0IGlzIGJvcnJvd2VkIGZyb20gdGhlIE11bHRpcHVycG9zZQogICAgICBJbnRlcm5ldCBNYWlsIEV4dGVuc2lvbnMuICBJdCBjb25zaXN0cyBvZiBhIG1ham9yIHR5cGUgYW5kIGEgbWlub3IgdHlwZSwKICAgICAgc2VwYXJhdGVkIGJ5IGEgc2xhc2guICBTb21lIGV4YW1wbGVzIGFyZSA8Y29kZT50ZXh0L2h0bWw8L2NvZGU+LAogICAgICA8Y29kZT5pbWFnZS9naWY8L2NvZGU+LCBhbmQgPGNvZGU+YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtPC9jb2RlPi4gIEluCiAgICAgIEhUVFAsIHRoZSBNSU1FLXR5cGUgaXMgdHJhbnNtaXR0ZWQgaW4gdGhlIDxjb2RlPkNvbnRlbnQtVHlwZTwvY29kZT4KICAgICAgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI2hlYWRlciIgdGl0bGU9InNlZSBnbG9zc2FyeSI+aGVhZGVyPC9hPi48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJtb2QvbW9kX21pbWUuaHRtbCI+bW9kX21pbWU8L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJtb2R1bGUiIGlkPSJtb2R1bGUiPk1vZHVsZTwvYT48L2R0PgogICAgPGRkPkFuIGluZGVwZW5kZW50IHBhcnQgb2YgYSBwcm9ncmFtLiAgTXVjaCBvZiBBcGFjaGUncyBmdW5jdGlvbmFsaXR5IGlzCiAgICAgIGNvbnRhaW5lZCBpbiBtb2R1bGVzIHRoYXQgeW91IGNhbiBjaG9vc2UgdG8gaW5jbHVkZSBvciBleGNsdWRlLiAgTW9kdWxlcwogICAgICB0aGF0IGFyZSBjb21waWxlZCBpbnRvIHRoZSBBcGFjaGUgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4vcHJvZ3JhbXMvaHR0cGQuaHRtbCI+aHR0cGQ8L2E+PC9jb2RlPiBiaW5hcnkgYXJlCiAgICAgIGNhbGxlZCA8ZGZuPnN0YXRpYyBtb2R1bGVzPC9kZm4+LCB3aGlsZSBtb2R1bGVzIHRoYXQgYXJlIHN0b3JlZAogICAgICBzZXBhcmF0ZWx5IGFuZCBjYW4gYmUgb3B0aW9uYWxseSBsb2FkZWQgYXQgcnVuLXRpbWUgYXJlIGNhbGxlZAogICAgICA8ZGZuPmR5bmFtaWMgbW9kdWxlczwvZGZuPiBvciA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjZHNvIiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5EU09zPC9hPi4KICAgICAgTW9kdWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBieSBkZWZhdWx0CiAgICAgIGFyZSBjYWxsZWQgPGRmbj5iYXNlIG1vZHVsZXM8L2Rmbj4uIE1hbnkgbW9kdWxlcyBhcmUgYXZhaWxhYmxlIGZvciBBcGFjaGUKICAgICAgdGhhdCBhcmUgbm90IGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgdGhlIEFwYWNoZSBIVFRQIFNlcnZlciA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjdGFyYmFsbCIgdGl0bGU9InNlZSBnbG9zc2FyeSI+dGFyYmFsbDwvYT4uICBUaGVzZSBhcmUgcmVmZXJyZWQgdG8gYXMKICAgICAgPGRmbj50aGlyZC1wYXJ0eSBtb2R1bGVzPC9kZm4+LjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9Im1vZC8iPk1vZHVsZSBJbmRleDwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9Im1vZHVsZW1hZ2ljbnVtYmVyIiBpZD0ibW9kdWxlbWFnaWNudW1iZXIiPk1vZHVsZSBNYWdpYwogICAgICBOdW1iZXI8L2E+ICg8YSBuYW1lPSJtbW4iIGlkPSJtbW4iPk1NTjwvYT4pPC9kdD4KICAgIDxkZD5Nb2R1bGUgTWFnaWMgTnVtYmVyIGlzIGEgY29uc3RhbnQgZGVmaW5lZCBpbiB0aGUgQXBhY2hlIHNvdXJjZSBjb2RlIHRoYXQKICAgICAgaXMgYXNzb2NpYXRlZCB3aXRoIGJpbmFyeSBjb21wYXRpYmlsaXR5IG9mIG1vZHVsZXMuIEl0IGlzIGNoYW5nZWQgd2hlbgogICAgICBpbnRlcm5hbCBBcGFjaGUgc3RydWN0dXJlcywgZnVuY3Rpb24gY2FsbHMgYW5kIG90aGVyIHNpZ25pZmljYW50IHBhcnRzIG9mCiAgICAgIEFQSSBjaGFuZ2UgaW4gc3VjaCBhIHdheSB0aGF0IGJpbmFyeSBjb21wYXRpYmlsaXR5IGNhbm5vdCBiZSBndWFyYW50ZWVkCiAgICAgIGFueSBtb3JlLiBPbiBNTU4gY2hhbmdlLCBhbGwgdGhpcmQgcGFydHkgbW9kdWxlcyBoYXZlIHRvIGJlIGF0IGxlYXN0CiAgICAgIHJlY29tcGlsZWQsIHNvbWV0aW1lcyBldmVuIHNsaWdodGx5IGNoYW5nZWQgaW4gb3JkZXIgdG8gd29yayB3aXRoIHRoZSBuZXcKICAgICAgdmVyc2lvbiBvZiBBcGFjaGUuCiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJvcGVuc3NsIiBpZD0ib3BlbnNzbCI+T3BlblNTTDwvYT48L2R0PgogICAgPGRkPlRoZSBPcGVuIFNvdXJjZSB0b29sa2l0IGZvciBTU0wvVExTPGJyIC8+CiAgICAgIFNlZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW5zc2wub3JnLyI+aHR0cDovL3d3dy5vcGVuc3NsLm9yZy88L2E+IwogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0icGFzc3BocmFzZSIgaWQ9InBhc3NwaHJhc2UiPlBhc3MgUGhyYXNlPC9hPjwvZHQ+CiAgICA8ZGQ+VGhlIHdvcmQgb3IgcGhyYXNlIHRoYXQgcHJvdGVjdHMgcHJpdmF0ZSBrZXkgZmlsZXMuIEl0IHByZXZlbnRzCiAgICAgIHVuYXV0aG9yaXplZCB1c2VycyBmcm9tIGVuY3J5cHRpbmcgdGhlbS4gVXN1YWxseSBpdCdzIGp1c3QgdGhlIHNlY3JldAogICAgICBlbmNyeXB0aW9uL2RlY3J5cHRpb24ga2V5IHVzZWQgZm9yIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCNjaXBoZXIiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPkNpcGhlcnM8L2E+LjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9InNzbC8iPlNTTC9UTFMgRW5jcnlwdGlvbjwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9InBsYWludGV4dCIgaWQ9InBsYWludGV4dCI+UGxhaW50ZXh0PC9hPjwvZHQ+CiAgICA8ZGQ+VGhlIHVuZW5jcnlwdGVkIHRleHQuPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0icHJpdmF0ZWtleSIgaWQ9InByaXZhdGVrZXkiPlByaXZhdGUgS2V5PC9hPjwvZHQ+CiAgICA8ZGQ+VGhlIHNlY3JldCBrZXkgaW4gYSA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuL2dsb3NzYXJ5Lmh0bWwjcHVibGlja2V5Y3J5cHRvZ3JhcGh5IiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5QdWJsaWMgS2V5CiAgICAgIENyeXB0b2dyYXBoeTwvYT4gc3lzdGVtLCB1c2VkIHRvIGRlY3J5cHQgaW5jb21pbmcgbWVzc2FnZXMgYW5kCiAgICAgIHNpZ24gb3V0Z29pbmcgb25lcy48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJzc2wvIj5TU0wvVExTIEVuY3J5cHRpb248L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJwcm94eSIgaWQ9InByb3h5Ij5Qcm94eTwvYT48L2R0PgogICAgPGRkPkFuIGludGVybWVkaWF0ZSBzZXJ2ZXIgdGhhdCBzaXRzIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgdGhlIDxlbT5vcmlnaW4KICAgICAgICBzZXJ2ZXI8L2VtPi4gIEl0IGFjY2VwdHMgcmVxdWVzdHMgZnJvbSBjbGllbnRzLCB0cmFuc21pdHMgdGhvc2UgcmVxdWVzdHMKICAgICAgb24gdG8gdGhlIG9yaWdpbiBzZXJ2ZXIsIGFuZCB0aGVuIHJldHVybnMgdGhlIHJlc3BvbnNlIGZyb20gdGhlIG9yaWdpbgogICAgICBzZXJ2ZXIgdG8gdGhlIGNsaWVudC4gIElmIHNldmVyYWwgY2xpZW50cyByZXF1ZXN0IHRoZSBzYW1lIGNvbnRlbnQsIHRoZQogICAgICBwcm94eSBjYW4gZGVsaXZlciB0aGF0IGNvbnRlbnQgZnJvbSBpdHMgY2FjaGUsIHJhdGhlciB0aGFuIHJlcXVlc3RpbmcgaXQKICAgICAgZnJvbSB0aGUgb3JpZ2luIHNlcnZlciBlYWNoIHRpbWUsIHRoZXJlYnkgcmVkdWNpbmcgcmVzcG9uc2UgdGltZS48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJtb2QvbW9kX3Byb3h5Lmh0bWwiPm1vZF9wcm94eTwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9InB1YmxpY2tleSIgaWQ9InB1YmxpY2tleSI+UHVibGljIEtleTwvYT48L2R0PgogICAgPGRkPlRoZSBwdWJsaWNseSBhdmFpbGFibGUga2V5IGluIGEgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI3B1YmxpY2tleWNyeXB0b2dyYXBoeSIgdGl0bGU9InNlZSBnbG9zc2FyeSI+UHVibGljIEtleSBDcnlwdG9ncmFwaHk8L2E+IHN5c3RlbSwKICAgICAgdXNlZCB0byBlbmNyeXB0IG1lc3NhZ2VzIGJvdW5kIGZvciBpdHMgb3duZXIgYW5kIHRvIGRlY3J5cHQgc2lnbmF0dXJlcwogICAgICBtYWRlIGJ5IGl0cyBvd25lci48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJzc2wvIj5TU0wvVExTIEVuY3J5cHRpb248L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJwdWJsaWNrZXljcnlwdG9ncmFwaHkiIGlkPSJwdWJsaWNrZXljcnlwdG9ncmFwaHkiPlB1YmxpYyBLZXkgQ3J5cHRvZ3JhcGh5PC9hPjwvZHQ+CiAgICA8ZGQ+VGhlIHN0dWR5IGFuZCBhcHBsaWNhdGlvbiBvZiBhc3ltbWV0cmljIGVuY3J5cHRpb24gc3lzdGVtcywgd2hpY2ggdXNlCiAgICAgIG9uZSBrZXkgZm9yIGVuY3J5cHRpb24gYW5kIGFub3RoZXIgZm9yIGRlY3J5cHRpb24uIEEgY29ycmVzcG9uZGluZyBwYWlyIG9mCiAgICAgIHN1Y2gga2V5cyBjb25zdGl0dXRlcyBhIGtleSBwYWlyLiBBbHNvIGNhbGxlZCBBc3ltbWV0cmljIENyeXB0b2dyYXBoeS4KICAgICAgPGJyIC8+CiAgICAgIFNlZTogPGEgaHJlZj0ic3NsLyI+U1NML1RMUyBFbmNyeXB0aW9uPC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0icmVndWxhcmV4cHJlc2lvbiIgaWQ9InJlZ3VsYXJleHByZXNpb24iPlJlZ3VsYXIgRXhwcmVzc2lvbjwvYT4KICAgICAgPGEgbmFtZT0icmVnZXgiIGlkPSJyZWdleCI+KFJlZ2V4KTwvYT48L2R0PgogICAgPGRkPkEgd2F5IG9mIGRlc2NyaWJpbmcgYSBwYXR0ZXJuIGluIHRleHQgLSBmb3IgZXhhbXBsZSwgImFsbCB0aGUgd29yZHMgdGhhdAogICAgICBiZWdpbiB3aXRoIHRoZSBsZXR0ZXIgQSIgb3IgImV2ZXJ5IDEwLWRpZ2l0IHBob25lIG51bWJlciIgb3IgZXZlbiAiRXZlcnkKICAgICAgc2VudGVuY2Ugd2l0aCB0d28gY29tbWFzIGluIGl0LCBhbmQgbm8gY2FwaXRhbCBsZXR0ZXIgUSIuIFJlZ3VsYXIKICAgICAgZXhwcmVzc2lvbnMgYXJlIHVzZWZ1bCBpbiBBcGFjaGUgYmVjYXVzZSB0aGV5IGxldCB5b3UgYXBwbHkgY2VydGFpbgogICAgICBhdHRyaWJ1dGVzIGFnYWluc3QgY29sbGVjdGlvbnMgb2YgZmlsZXMgb3IgcmVzb3VyY2VzIGluIHZlcnkgZmxleGlibGUgd2F5cwogICAgICAtIGZvciBleGFtcGxlLCBhbGwgLmdpZiBhbmQgLmpwZyBmaWxlcyB1bmRlciBhbnkgImltYWdlcyIgZGlyZWN0b3J5IGNvdWxkCiAgICAgIGJlIHdyaXR0ZW4gYXMgIjxjb2RlPi9pbWFnZXMvLiooanBnfGdpZikkPC9jb2RlPiIuICBJbiBwbGFjZXMgd2hlcmUKICAgICAgcmVndWxhciBleHByZXNzaW9ucyBhcmUgdXNlZCB0byByZXBsYWNlIHN0cmluZ3MsIHRoZSBzcGVjaWFsIHZhcmlhYmxlcwogICAgICAkMSAuLi4gJDkgY29udGFpbiBiYWNrcmVmZXJlbmNlcyB0byB0aGUgZ3JvdXBlZCBwYXJ0cyAoaW4gcGFyZW50aGVzZXMpIG9mCiAgICAgIHRoZSBtYXRjaGVkIGV4cHJlc3Npb24uIFRoZSBzcGVjaWFsIHZhcmlhYmxlICQwIGNvbnRhaW5zIGEgYmFja3JlZmVyZW5jZQogICAgICB0byB0aGUgd2hvbGUgbWF0Y2hlZCBleHByZXNzaW9uLiBUbyB3cml0ZSBhIGxpdGVyYWwgZG9sbGFyIHNpZ24gaW4gYQogICAgICByZXBsYWNlbWVudCBzdHJpbmcsIGl0IGNhbiBiZSBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2guIEhpc3RvcmljYWxseSwgdGhlCiAgICAgIHZhcmlhYmxlICZhbXA7IGNvdWxkIGJlIHVzZWQgYXMgYWxpYXMgZm9yICQwIGluIHNvbWUgcGxhY2VzLiBUaGlzIGlzIG5vCiAgICAgIGxvbmdlciBwb3NzaWJsZSBzaW5jZSB2ZXJzaW9uIDIuMy42LiAgQXBhY2hlIHVzZXMgUGVybCBDb21wYXRpYmxlIFJlZ3VsYXIKICAgICAgRXhwcmVzc2lvbnMgcHJvdmlkZWQgYnkgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cucGNyZS5vcmcvIj5QQ1JFPC9hPgogICAgICBsaWJyYXJ5LiAgWW91IGNhbiBmaW5kIG1vcmUgZG9jdW1lbnRhdGlvbiBhYm91dCBQQ1JFJ3MgcmVndWxhciBleHByZXNzaW9uCiAgICAgIHN5bnRheCBhdCB0aGF0IHNpdGUsIG9yIGF0CiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUENSRSI+V2lraXBlZGlhPC9hPi4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9InJldmVyc2Vwcm94eSIgaWQ9InJldmVyc2Vwcm94eSI+UmV2ZXJzZSBQcm94eTwvYT48L2R0PgogICAgPGRkPkEgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI3Byb3h5IiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5wcm94eTwvYT4gc2VydmVyIHRoYXQgYXBwZWFycyB0byB0aGUgY2xpZW50CiAgICAgIGFzIGlmIGl0IGlzIGFuIDxlbT5vcmlnaW4gc2VydmVyPC9lbT4uICBUaGlzIGlzIHVzZWZ1bCB0byBoaWRlIHRoZSByZWFsCiAgICAgIG9yaWdpbiBzZXJ2ZXIgZnJvbSB0aGUgY2xpZW50IGZvciBzZWN1cml0eSByZWFzb25zLCBvciB0byBsb2FkIGJhbGFuY2UuCiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJzZWN1cmVzb2NrZXRzbGF5ZXIiIGlkPSJzZWN1cmVzb2NrZXRzbGF5ZXIiPlNlY3VyZSBTb2NrZXRzCiAgICAgICAgTGF5ZXI8L2E+IDxhIG5hbWU9InNzbCIgaWQ9InNzbCI+KFNTTCk8L2E+PC9kdD4KICAgIDxkZD5BIHByb3RvY29sIGNyZWF0ZWQgYnkgTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24gZm9yIGdlbmVyYWwKICAgICAgY29tbXVuaWNhdGlvbiBhdXRoZW50aWNhdGlvbiBhbmQgZW5jcnlwdGlvbiBvdmVyIFRDUC9JUCBuZXR3b3Jrcy4gIFRoZSBtb3N0CiAgICAgIHBvcHVsYXIgdXNhZ2UgaXMgPGVtPkhUVFBTPC9lbT4sIGkuZS4gdGhlIEh5cGVyVGV4dCBUcmFuc2ZlciBQcm90b2NvbCAoSFRUUCkKICAgICAgb3ZlciBTU0wuPGJyIC8+CiAgICAgIFNlZTogPGEgaHJlZj0ic3NsLyI+U1NML1RMUyBFbmNyeXB0aW9uPC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0ic2VydmVybmFtZWluZGljYXRpb24iIGlkPSJzZXJ2ZXJuYW1laW5kaWNhdGlvbiI+U2VydmVyIE5hbWUKICAgICAgICBJbmRpY2F0aW9uPC9hPiA8YSBuYW1lPSJzbmkiIGlkPSJzbmkiPihTTkkpPC9hPjwvZHQ+CiAgICA8ZGQ+QW4gU1NMIGZ1bmN0aW9uIHRoYXQgYWxsb3dzIHBhc3NpbmcgdGhlIGRlc2lyZWQgc2VydmVyCiAgICAgIGhvc3RuYW1lIGluIHRoZSBpbml0aWFsIFNTTCBoYW5kc2hha2UgbWVzc2FnZSwgc28gdGhhdCB0aGUgd2ViCiAgICAgIHNlcnZlciBjYW4gc2VsZWN0IHRoZSBjb3JyZWN0IHZpcnR1YWwgaG9zdCBjb25maWd1cmF0aW9uIHRvIHVzZQogICAgICBpbiBwcm9jZXNzaW5nIHRoZSBTU0wgaGFuZHNoYWtlLiAgSXQgd2FzIGFkZGVkIHRvIFNTTCBzdGFydGluZwogICAgICB3aXRoIHRoZSBUTFMgZXh0ZW5zaW9ucywgUkZDIDM1NDYuICA8YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJzc2wvc3NsX2ZhcS5odG1sIj50aGUgU1NMIEZBUTwvYT4KICAgICAgYW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzM1NDYudHh0Ij5SRkMgMzU0NjwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9InNlcnZlcnNpZGVpbmNsdWRlcyIgaWQ9InNlcnZlcnNpZGVpbmNsdWRlcyI+U2VydmVyIFNpZGUKICAgICAgICBJbmNsdWRlczwvYT4gPGEgbmFtZT0ic3NpIiBpZD0ic3NpIj4oU1NJKTwvYT48L2R0PgogICAgPGRkPkEgdGVjaG5pcXVlIGZvciBlbWJlZGRpbmcgcHJvY2Vzc2luZyBkaXJlY3RpdmVzIGluc2lkZSBIVE1MIGZpbGVzLjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9Imhvd3RvL3NzaS5odG1sIj5JbnRyb2R1Y3Rpb24gdG8gU2VydmVyIFNpZGUgSW5jbHVkZXM8L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJzZXNzaW9uIiBpZD0ic2Vzc2lvbiI+U2Vzc2lvbjwvYT48L2R0PgogICAgPGRkPlRoZSBjb250ZXh0IGluZm9ybWF0aW9uIG9mIGEgY29tbXVuaWNhdGlvbiBpbiBnZW5lcmFsLjwvZGQ+CgogICAgPGR0PjxhIG5hbWU9InNzbGVheSIgaWQ9InNzbGVheSI+U1NMZWF5PC9hPjwvZHQ+CiAgICA8ZGQ+VGhlIG9yaWdpbmFsIFNTTC9UTFMgaW1wbGVtZW50YXRpb24gbGlicmFyeSBkZXZlbG9wZWQgYnkgRXJpYyBBLgogICAgICBZb3VuZwogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0ic3VicmVxdWVzdCIgaWQ9InN1YnJlcXVlc3QiPlN1YnJlcXVlc3Q8L2E+PC9kdD4KICAgIDxkZD5BcGFjaGUgcHJvdmlkZXMgYSBzdWJyZXF1ZXN0IEFQSSB0byBtb2R1bGVzIHRoYXQgYWxsb3dzIG90aGVyCiAgICAgICAgZmlsZXN5c3RlbSBvciBVUkwgcGF0aHMgdG8gYmUgcGFydGlhbGx5IG9yIGZ1bGx5IGV2YWx1YXRlZCBieQogICAgICAgIHRoZSBzZXJ2ZXIuIEV4YW1wbGUgY29uc3VtZXJzIG9mIHRoaXMgQVBJIGFyZQogICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4vbW9kL21vZF9kaXIuaHRtbCNkaXJlY3RvcnlpbmRleCI+RGlyZWN0b3J5SW5kZXg8L2E+PC9jb2RlPiwKICAgICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuL21vZC9tb2RfYXV0b2luZGV4Lmh0bWwiPm1vZF9hdXRvaW5kZXg8L2E+PC9jb2RlPiwgYW5kIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4vbW9kL21vZF9pbmNsdWRlLmh0bWwiPm1vZF9pbmNsdWRlPC9hPjwvY29kZT4uCiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJzeW1tZXRyaWNjcnlwdG9waHJhcGh5IiBpZD0ic3ltbWV0cmljY3J5cHRvcGhyYXBoeSI+U3ltbWV0cmljCiAgICAgICAgQ3J5cHRvZ3JhcGh5PC9hPjwvZHQ+CiAgICA8ZGQ+VGhlIHN0dWR5IGFuZCBhcHBsaWNhdGlvbiBvZiA8ZW0+Q2lwaGVyczwvZW0+IHRoYXQgdXNlIGEgc2luZ2xlIHNlY3JldCBrZXkKICAgICAgZm9yIGJvdGggZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbiBvcGVyYXRpb25zLjxiciAvPgogICAgICBTZWU6IDxhIGhyZWY9InNzbC8iPlNTTC9UTFMgRW5jcnlwdGlvbjwvYT4KICAgIDwvZGQ+CgogICAgPGR0PjxhIG5hbWU9InRhcmJhbGwiIGlkPSJ0YXJiYWxsIj5UYXJiYWxsPC9hPjwvZHQ+CiAgICA8ZGQ+QSBwYWNrYWdlIG9mIGZpbGVzIGdhdGhlcmVkIHRvZ2V0aGVyIHVzaW5nIHRoZSA8Y29kZT50YXI8L2NvZGU+IHV0aWxpdHkuCiAgICAgIEFwYWNoZSBkaXN0cmlidXRpb25zIGFyZSBzdG9yZWQgaW4gY29tcHJlc3NlZCB0YXIgYXJjaGl2ZXMgb3IgdXNpbmcKICAgICAgcGt6aXAuCiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJ0cmFuc3BvcnRsYXllcnNlY3VyaXR5IiBpZD0idHJhbnNwb3J0bGF5ZXJzZWN1cml0eSI+VHJhbnNwb3J0CiAgICAgICAgTGF5ZXIgU2VjdXJpdHk8L2E+IDxhIG5hbWU9InRscyIgaWQ9InRscyI+KFRMUyk8L2E+PC9kdD4KICAgIDxkZD5UaGUgc3VjY2Vzc29yIHByb3RvY29sIHRvIFNTTCwgY3JlYXRlZCBieSB0aGUgSW50ZXJuZXQgRW5naW5lZXJpbmcgVGFzawogICAgICBGb3JjZSAoSUVURikgZm9yIGdlbmVyYWwgY29tbXVuaWNhdGlvbiBhdXRoZW50aWNhdGlvbiBhbmQgZW5jcnlwdGlvbiBvdmVyCiAgICAgIFRDUC9JUCBuZXR3b3Jrcy4gVExTIHZlcnNpb24gMSBpcyBuZWFybHkgaWRlbnRpY2FsIHdpdGggU1NMIHZlcnNpb24gMy48YnIgLz4KICAgICAgU2VlOiA8YSBocmVmPSJzc2wvIj5TU0wvVExTIEVuY3J5cHRpb248L2E+CiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJ1bmlmb3JtcmVzb3VyY2Vsb2NhdG9yIiBpZD0idW5pZm9ybXJlc291cmNlbG9jYXRvciI+VW5pZm9ybQogICAgICAgIFJlc291cmNlIExvY2F0b3I8L2E+IDxhIG5hbWU9InVybCIgaWQ9InVybCI+KFVSTCk8L2E+PC9kdD4KICAgIDxkZD5UaGUgbmFtZS9hZGRyZXNzIG9mIGEgcmVzb3VyY2Ugb24gdGhlIEludGVybmV0LiAgVGhpcyBpcyB0aGUgY29tbW9uCiAgICAgIGluZm9ybWFsIHRlcm0gZm9yIHdoYXQgaXMgZm9ybWFsbHkgY2FsbGVkIGEgPGEgY2xhc3M9Imdsb3NzYXJ5bGluayIgaHJlZj0iLi9nbG9zc2FyeS5odG1sI3VuaWZvcm1yZXNvdXJjZWlkZW50aWZpZXIiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPlVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllcjwvYT4uCiAgICAgIFVSTHMgYXJlIHVzdWFsbHkgbWFkZSB1cCBvZiBhIHNjaGVtZSwgbGlrZSA8Y29kZT5odHRwPC9jb2RlPiBvcgogICAgICA8Y29kZT5odHRwczwvY29kZT4sIGEgaG9zdG5hbWUsIGFuZCBhIHBhdGguICBBIFVSTCBmb3IgdGhpcyBwYWdlIG1pZ2h0CiAgICAgIGJlIDxjb2RlPmh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvdHJ1bmsvZ2xvc3NhcnkuaHRtbDwvY29kZT4uCiAgICA8L2RkPgoKICAgIDxkdD48YSBuYW1lPSJ1bmlmb3JtcmVzb3VyY2VpZGVudGlmaWVyIiBpZD0idW5pZm9ybXJlc291cmNlaWRlbnRpZmllciI+VW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyPC9hPgogICAgICA8YSBuYW1lPSJVUkkiIGlkPSJVUkkiPihVUkkpPC9hPjwvZHQ+CiAgICA8ZGQ+QSBjb21wYWN0IHN0cmluZyBvZiBjaGFyYWN0ZXJzIGZvciBpZGVudGlmeWluZyBhbiBhYnN0cmFjdCBvciBwaHlzaWNhbAogICAgICByZXNvdXJjZS4gIEl0IGlzIGZvcm1hbGx5IGRlZmluZWQgYnkgPGEgaHJlZj0iaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjM5Ni50eHQiPlJGQyAyMzk2PC9hPi4gIFVSSXMgdXNlZCBvbiB0aGUKICAgICAgd29ybGQtd2lkZSB3ZWIgYXJlIGNvbW1vbmx5IHJlZmVycmVkIHRvIGFzIDxhIGNsYXNzPSJnbG9zc2FyeWxpbmsiIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCN1cmwiIHRpdGxlPSJzZWUgZ2xvc3NhcnkiPlVSTHM8L2E+LgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0idmlydHVhbGhvc3RpbmciIGlkPSJ2aXJ0dWFsaG9zdGluZyI+VmlydHVhbCBIb3N0aW5nPC9hPjwvZHQ+CiAgICA8ZGQ+U2VydmluZyBtdWx0aXBsZSB3ZWJzaXRlcyB1c2luZyBhIHNpbmdsZSBpbnN0YW5jZSBvZiBBcGFjaGUuICA8ZW0+SVAKICAgICAgdmlydHVhbCBob3N0aW5nPC9lbT4gZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiB3ZWJzaXRlcyBiYXNlZCBvbiB0aGVpciBJUAogICAgICBhZGRyZXNzLCB3aGlsZSA8ZW0+bmFtZS1iYXNlZCB2aXJ0dWFsIGhvc3Rpbmc8L2VtPiB1c2VzIG9ubHkgdGhlIG5hbWUgb2YgdGhlCiAgICAgIGhvc3QgYW5kIGNhbiB0aGVyZWZvcmUgaG9zdCBtYW55IHNpdGVzIG9uIHRoZSBzYW1lIElQIGFkZHJlc3MuPGJyIC8+CiAgICAgIFNlZTogPGEgaHJlZj0idmhvc3RzLyI+QXBhY2hlIFZpcnR1YWwgSG9zdCBkb2N1bWVudGF0aW9uPC9hPgogICAgPC9kZD4KCiAgICA8ZHQ+PGEgbmFtZT0ieC41MDkiIGlkPSJ4LjUwOSI+WC41MDk8L2E+PC9kdD4KICAgIDxkZD5BbiBhdXRoZW50aWNhdGlvbiBjZXJ0aWZpY2F0ZSBzY2hlbWUgcmVjb21tZW5kZWQgYnkgdGhlIEludGVybmF0aW9uYWwKICAgICAgVGVsZWNvbW11bmljYXRpb24gVW5pb24gKElUVS1UKSB3aGljaCBpcyB1c2VkIGZvciBTU0wvVExTIGF1dGhlbnRpY2F0aW9uLjxiciAvPiBTZWU6IDxhIGhyZWY9InNzbC8iPlNTTC9UTFMgRW5jcnlwdGlvbjwvYT4KICAgIDwvZGQ+CiAgPC9kbD4KPC9kaXY+PC9kaXY+CjxkaXYgY2xhc3M9ImJvdHRvbWxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi9kZS9nbG9zc2FyeS5odG1sIiBocmVmbGFuZz0iZGUiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRGV1dHNjaCI+Jm5ic3A7ZGUmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9lbi9nbG9zc2FyeS5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9lcy9nbG9zc2FyeS5odG1sIiBocmVmbGFuZz0iZXMiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRXNwYfFvbCI+Jm5ic3A7ZXMmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi9mci9nbG9zc2FyeS5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vamEvZ2xvc3NhcnkuaHRtbCIgaHJlZmxhbmc9ImphIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkphcGFuZXNlIj4mbmJzcDtqYSZuYnNwOzwvYT4gfAo8YSBocmVmPSIuL2tvL2dsb3NzYXJ5Lmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4vdHIvZ2xvc3NhcnkuaHRtbCIgaHJlZmxhbmc9InRyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IlT8cmvnZSI+Jm5ic3A7dHImbmJzcDs8L2E+PC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBzcmM9Ii4vaW1hZ2VzL3VwLmdpZiIgYWx0PSJ0b3AiIC8+PC9hPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iPjxoMj48YSBpZD0iY29tbWVudHNfc2VjdGlvbiIgbmFtZT0iY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9oMj48ZGl2IGNsYXNzPSJ3YXJuaW5nIj48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz48YnIgLz5UaGlzIGlzIG5vdCBhIFEmYW1wO0Egc2VjdGlvbi4gQ29tbWVudHMgcGxhY2VkIGhlcmUgc2hvdWxkIGJlIHBvaW50ZWQgdG93YXJkcyBzdWdnZXN0aW9ucyBvbiBpbXByb3ZpbmcgdGhlIGRvY3VtZW50YXRpb24gb3Igc2VydmVyLCBhbmQgbWF5IGJlIHJlbW92ZWQgYWdhaW4gYnkgb3VyIG1vZGVyYXRvcnMgaWYgdGhleSBhcmUgZWl0aGVyIGltcGxlbWVudGVkIG9yIGNvbnNpZGVyZWQgaW52YWxpZC9vZmYtdG9waWMuIFF1ZXN0aW9ucyBvbiBob3cgdG8gbWFuYWdlIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIgc2hvdWxkIGJlIGRpcmVjdGVkIGF0IGVpdGhlciBvdXIgSVJDIGNoYW5uZWwsICNodHRwZCwgb24gRnJlZW5vZGUsIG9yIHNlbnQgdG8gb3VyIDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2xpc3RzLmh0bWwiPm1haWxpbmcgbGlzdHM8L2E+LjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQp2YXIgY29tbWVudHNfc2hvcnRuYW1lID0gJ2h0dHBkJzsKdmFyIGNvbW1lbnRzX2lkZW50aWZpZXIgPSAnaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy90cnVuay9nbG9zc2FyeS5odG1sJzsKKGZ1bmN0aW9uKHcsIGQpIHsKICAgIGlmICh3LmxvY2F0aW9uLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCkgPT0gImh0dHBkLmFwYWNoZS5vcmciKSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj48XC9kaXY+Jyk7CiAgICAgICAgdmFyIHMgPSBkLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIHMudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgIHMuYXN5bmMgPSB0cnVlOwogICAgICAgIHMuc3JjID0gJ2h0dHBzOi8vY29tbWVudHMuYXBhY2hlLm9yZy9zaG93X2NvbW1lbnRzLmx1YT9zaXRlPScgKyBjb21tZW50c19zaG9ydG5hbWUgKyAnJnBhZ2U9JyArIGNvbW1lbnRzX2lkZW50aWZpZXI7CiAgICAgICAgKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSB8fCBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0pLmFwcGVuZENoaWxkKHMpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj5Db21tZW50cyBhcmUgZGlzYWJsZWQgZm9yIHRoaXMgcGFnZSBhdCB0aGUgbW9tZW50LjxcL2Rpdj4nKTsKICAgIH0KfSkod2luZG93LCBkb2N1bWVudCk7Ci8vLS0+PCFdXT48L3NjcmlwdD48L2Rpdj48ZGl2IGlkPSJmb290ZXIiPgo8cCBjbGFzcz0iYXBhY2hlIj5Db3B5cmlnaHQgMjAxNiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uPGJyIC8+TGljZW5zZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wPC9hPi48L3A+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi9tb2QvcXVpY2tyZWZlcmVuY2UuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPjwvZGl2PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCmlmICh0eXBlb2YocHJldHR5UHJpbnQpICE9PSAndW5kZWZpbmVkJykgewogICAgcHJldHR5UHJpbnQoKTsKfQovLy0tPjwhXV0+PC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+