PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5tb2RfcHJveHlfaHR0cCAtIEFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNDwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vc3R5bGUvY3NzL3ByZXR0aWZ5LmNzcyIgLz4KPHNjcmlwdCBzcmM9Ii4uL3N0eWxlL3NjcmlwdHMvcHJldHRpZnkubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8L3NjcmlwdD4KCjxsaW5rIGhyZWY9Ii4uL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHk+CjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+CjxwIGNsYXNzPSJhcGFjaGUiPkFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNDwvcD4KPGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZmVhdGhlci5wbmciIC8+PC9kaXY+CjxkaXYgY2xhc3M9InVwIj48YSBocmVmPSIuLyI+PGltZyB0aXRsZT0iJmx0Oy0iIGFsdD0iJmx0Oy0iIHNyYz0iLi4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPkhUVFAgU2VydmVyPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4uLyI+VmVyc2lvbiAyLjQ8L2E+ICZndDsgPGEgaHJlZj0iLi8iPk1vZHVsZXM8L2E+PC9kaXY+CjxkaXYgaWQ9InBhZ2UtY29udGVudCI+CjxkaXYgaWQ9InByZWFtYmxlIj48aDE+QXBhY2hlIE1vZHVsZSBtb2RfcHJveHlfaHR0cDwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vbW9kL21vZF9wcm94eV9odHRwLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9mci9tb2QvbW9kX3Byb3h5X2h0dHAuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT48L3A+CjwvZGl2Pgo8dGFibGUgY2xhc3M9Im1vZHVsZSI+PHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+SFRUUCBzdXBwb3J0IG1vZHVsZSBmb3IKPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eS5odG1sIj5tb2RfcHJveHk8L2E+PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNNb2R1bGVJZGVudGlmaWVyIj5Nb2R1bGWgSWRlbnRpZmllcjo8L2E+PC90aD48dGQ+cHJveHlfaHR0cF9tb2R1bGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNTb3VyY2VGaWxlIj5Tb3VyY2WgRmlsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5X2h0dHAuYzwvdGQ+PC90cj48L3RhYmxlPgo8aDM+U3VtbWFyeTwvaDM+CgogICAgPHA+VGhpcyBtb2R1bGUgPGVtPnJlcXVpcmVzPC9lbT4gdGhlIHNlcnZpY2Ugb2YgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eS5odG1sIj5tb2RfcHJveHk8L2E+PC9jb2RlPi4gSXQgcHJvdmlkZXMgdGhlIGZlYXR1cmVzIHVzZWQgZm9yCiAgICBwcm94eWluZyBIVFRQIGFuZCBIVFRQUyByZXF1ZXN0cy4gPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eV9odHRwLmh0bWwiPm1vZF9wcm94eV9odHRwPC9hPjwvY29kZT4KICAgIHN1cHBvcnRzIEhUVFAvMC45LCBIVFRQLzEuMCBhbmQgSFRUUC8xLjEuIEl0IGRvZXMgPGVtPm5vdDwvZW0+CiAgICBwcm92aWRlIGFueSBjYWNoaW5nIGFiaWxpdGllcy4gSWYgeW91IHdhbnQgdG8gc2V0IHVwIGEgY2FjaGluZwogICAgcHJveHksIHlvdSBtaWdodCB3YW50IHRvIHVzZSB0aGUgYWRkaXRpb25hbCBzZXJ2aWNlIG9mIHRoZQogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPiBtb2R1bGUuPC9wPgoKICAgIDxwPlRodXMsIGluIG9yZGVyIHRvIGdldCB0aGUgYWJpbGl0eSBvZiBoYW5kbGluZyBIVFRQIHByb3h5IHJlcXVlc3RzLAogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eS5odG1sIj5tb2RfcHJveHk8L2E+PC9jb2RlPiBhbmQgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eV9odHRwLmh0bWwiPm1vZF9wcm94eV9odHRwPC9hPjwvY29kZT4KICAgIGhhdmUgdG8gYmUgcHJlc2VudCBpbiB0aGUgc2VydmVyLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIj48aDM+V2FybmluZzwvaDM+CiAgICAgIDxwPkRvIG5vdCBlbmFibGUgcHJveHlpbmcgdW50aWwgeW91IGhhdmUgPGEgaHJlZj0ibW9kX3Byb3h5Lmh0bWwjYWNjZXNzIj5zZWN1cmVkIHlvdXIgc2VydmVyPC9hPi4gT3BlbiBwcm94eQogICAgICBzZXJ2ZXJzIGFyZSBkYW5nZXJvdXMgYm90aCB0byB5b3VyIG5ldHdvcmsgYW5kIHRvIHRoZSBJbnRlcm5ldCBhdAogICAgICBsYXJnZS48L3A+CiAgICA8L2Rpdj4KPC9kaXY+CjxkaXYgaWQ9InF1aWNrdmlldyI+PGgzPlRvcGljczwvaDM+Cjx1bCBpZD0idG9waWNzIj4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZW52Ij5FbnZpcm9ubWVudCBWYXJpYWJsZXM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbm90ZXMiPlJlcXVlc3Qgbm90ZXM8L2E+PC9saT4KPC91bD48aDMgY2xhc3M9ImRpcmVjdGl2ZXMiPkRpcmVjdGl2ZXM8L2gzPgo8cD5UaGlzIG1vZHVsZSBwcm92aWRlcyBubwogICAgICAgICAgICBkaXJlY3RpdmVzLjwvcD4KPGgzPkJ1Z2ZpeCBjaGVja2xpc3Q8L2gzPjx1bCBjbGFzcz0ic2VlYWxzbyI+PGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZGlzdC9odHRwZC9DSEFOR0VTXzIuNCI+aHR0cGQgY2hhbmdlbG9nPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vYnouYXBhY2hlLm9yZy9idWd6aWxsYS9idWdsaXN0LmNnaT9idWdfc3RhdHVzPV9fb3Blbl9fJmFtcDtsaXN0X2lkPTE0NDUzMiZhbXA7cHJvZHVjdD1BcGFjaGUlMjBodHRwZC0yJmFtcDtxdWVyeV9mb3JtYXQ9c3BlY2lmaWMmYW1wO29yZGVyPWNoYW5nZWRkYXRlJTIwREVTQyUyQ3ByaW9yaXR5JTJDYnVnX3NldmVyaXR5JmFtcDtjb21wb25lbnQ9bW9kX3Byb3h5X2h0dHAiPktub3duIGlzc3VlczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL2J6LmFwYWNoZS5vcmcvYnVnemlsbGEvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUFwYWNoZSUyMGh0dHBkLTImYW1wO2NvbXBvbmVudD1tb2RfcHJveHlfaHR0cCI+UmVwb3J0IGEgYnVnPC9hPjwvbGk+PC91bD48aDM+U2VlIGFsc288L2gzPgo8dWwgY2xhc3M9InNlZWFsc28iPgo8bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eS5odG1sIj5tb2RfcHJveHk8L2E+PC9jb2RlPjwvbGk+CjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5X2Nvbm5lY3QuaHRtbCI+bW9kX3Byb3h5X2Nvbm5lY3Q8L2E+PC9jb2RlPjwvbGk+CjxsaT48YSBocmVmPSIjY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9saT48L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJlbnYiIGlkPSJlbnYiPkVudmlyb25tZW50IFZhcmlhYmxlczwvYT48L2gyPgogICAgPHA+SW4gYWRkaXRpb24gdG8gdGhlIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlcyB0aGF0IGNvbnRyb2wgdGhlCiAgICBiZWhhdmlvdXIgb2YgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eS5odG1sIj5tb2RfcHJveHk8L2E+PC9jb2RlPiwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mCiAgICA8ZGZuPmVudmlyb25tZW50IHZhcmlhYmxlczwvZGZuPiB0aGF0IGNvbnRyb2wgdGhlIEhUVFAgcHJvdG9jb2wKICAgIHByb3ZpZGVyLiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgYmVsb3cgdGhhdCBkb24ndCBzcGVjaWZ5IHNwZWNpZmljIHZhbHVlcwogICAgYXJlIGVuYWJsZWQgd2hlbiBzZXQgdG8gYW55IHZhbHVlLjwvcD4KICAgIDxkbD4KICAgICAgICA8ZHQ+cHJveHktc2VuZGV4dHJhY3JsZjwvZHQ+CiAgICAgICAgPGRkPkNhdXNlcyBwcm94eSB0byBzZW5kIGFuIGV4dHJhIENSLUxGIG5ld2xpbmUgb24gdGhlIGVuZCBvZiBhCiAgICAgICAgcmVxdWVzdC4gIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBzb21lIGJyb3dzZXJzLjwvZGQ+CiAgICAgICAgPGR0PmZvcmNlLXByb3h5LXJlcXVlc3QtMS4wPC9kdD4KICAgICAgICA8ZGQ+Rm9yY2VzIHRoZSBwcm94eSB0byBzZW5kIHJlcXVlc3RzIHRvIHRoZSBiYWNrZW5kIGFzIEhUVFAvMS4wCiAgICAgICAgYW5kIGRpc2FibGVzIEhUVFAvMS4xIGZlYXR1cmVzLjwvZGQ+CiAgICAgICAgPGR0PnByb3h5LW5va2VlcGFsaXZlPC9kdD4KICAgICAgICA8ZGQ+Rm9yY2VzIHRoZSBwcm94eSB0byBjbG9zZSB0aGUgYmFja2VuZCBjb25uZWN0aW9uIGFmdGVyCiAgICAgICAgZWFjaCByZXF1ZXN0LjwvZGQ+CiAgICAgICAgPGR0PnByb3h5LWNoYWluLWF1dGg8L2R0PgogICAgICAgIDxkZD5JZiB0aGUgcHJveHkgcmVxdWlyZXMgYXV0aGVudGljYXRpb24sIGl0IHdpbGwgcmVhZCBhbmQKICAgICAgICBjb25zdW1lIHRoZSBwcm94eSBhdXRoZW50aWNhdGlvbiBjcmVkZW50aWFscyBzZW50IGJ5IHRoZSBjbGllbnQuCiAgICAgICAgV2l0aCA8dmFyPnByb3h5LWNoYWluLWF1dGg8L3Zhcj4gaXQgd2lsbCA8ZW0+YWxzbzwvZW0+IGZvcndhcmQKICAgICAgICB0aGUgY3JlZGVudGlhbHMgdG8gdGhlIG5leHQgcHJveHkgaW4gdGhlIGNoYWluLiAgVGhpcyBtYXkKICAgICAgICBiZSBuZWNlc3NhcnkgaWYgeW91IGhhdmUgYSBjaGFpbiBvZiBwcm94aWVzIHRoYXQgc2hhcmUKICAgICAgICBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbi4gIDxzdHJvbmc+U2VjdXJpdHkgV2FybmluZzo8L3N0cm9uZz4KICAgICAgICBEbyBub3Qgc2V0IHRoaXMgdW5sZXNzIHlvdSBrbm93IHlvdSBuZWVkIGl0LCBhcyBpdCBmb3J3YXJkcwogICAgICAgIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiE8L2RkPgogICAgICAgIDxkdD5wcm94eS1zZW5kY2w8L2R0PgogICAgICAgIDxkZD5IVFRQLzEuMCByZXF1aXJlZCBhbGwgSFRUUCByZXF1ZXN0cyB0aGF0IGluY2x1ZGUgYSBib2R5CiAgICAgICAgKGUuZy4gUE9TVCByZXF1ZXN0cykgdG8gaW5jbHVkZSBhIDx2YXI+Q29udGVudC1MZW5ndGg8L3Zhcj4KICAgICAgICBoZWFkZXIuICBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGZvcmNlcyB0aGUgQXBhY2hlIHByb3h5IHRvCiAgICAgICAgc2VuZCB0aGlzIGhlYWRlciB0byB0aGUgYmFja2VuZCBzZXJ2ZXIsIHJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUKICAgICAgICBDbGllbnQgc2VudCB0byB0aGUgcHJveHkuICBJdCBlbnN1cmVzIGNvbXBhdGliaWxpdHkgd2hlbgogICAgICAgIHByb3h5aW5nIGZvciBhbiBIVFRQLzEuMCBvciB1bmtub3duIGJhY2tlbmQuICBIb3dldmVyLCBpdAogICAgICAgIG1heSByZXF1aXJlIHRoZSBlbnRpcmUgcmVxdWVzdCB0byBiZSBidWZmZXJlZCBieSB0aGUgcHJveHksCiAgICAgICAgc28gaXQgYmVjb21lcyB2ZXJ5IGluZWZmaWNpZW50IGZvciBsYXJnZSByZXF1ZXN0cy48L2RkPgogICAgICAgIDxkdD5wcm94eS1zZW5kY2h1bmtzIG9yIHByb3h5LXNlbmRjaHVua2VkPC9kdD4KICAgICAgICA8ZGQ+VGhpcyBpcyB0aGUgb3Bwb3NpdGUgb2YgPHZhcj5wcm94eS1zZW5kY2w8L3Zhcj4uICBJdCBhbGxvd3MKICAgICAgICByZXF1ZXN0IGJvZGllcyB0byBiZSBzZW50IHRvIHRoZSBiYWNrZW5kIHVzaW5nIGNodW5rZWQgdHJhbnNmZXIKICAgICAgICBlbmNvZGluZy4gIFRoaXMgYWxsb3dzIHRoZSByZXF1ZXN0IHRvIGJlIGVmZmljaWVudGx5IHN0cmVhbWVkLAogICAgICAgIGJ1dCByZXF1aXJlcyB0aGF0IHRoZSBiYWNrZW5kIHNlcnZlciBzdXBwb3J0cyBIVFRQLzEuMS48L2RkPgogICAgICAgIDxkdD5wcm94eS1pbnRlcmltLXJlc3BvbnNlPC9kdD4KICAgICAgICA8ZGQ+VGhpcyB2YXJpYWJsZSB0YWtlcyB2YWx1ZXMgPGNvZGU+UkZDPC9jb2RlPiAodGhlIGRlZmF1bHQpIG9yCiAgICAgICAgPGNvZGU+U3VwcHJlc3M8L2NvZGU+LiAgRWFybGllciBodHRwZCB2ZXJzaW9ucyB3b3VsZCBzdXBwcmVzcwogICAgICAgIEhUVFAgaW50ZXJpbSAoMXh4KSByZXNwb25zZXMgc2VudCBmcm9tIHRoZSBiYWNrZW5kLiAgVGhpcyBpcwogICAgICAgIHRlY2huaWNhbGx5IGEgdmlvbGF0aW9uIG9mIHRoZSBIVFRQIHByb3RvY29sLiAgSW4gcHJhY3RpY2UsCiAgICAgICAgaWYgYSBiYWNrZW5kIHNlbmRzIGFuIGludGVyaW0gcmVzcG9uc2UsIGl0IG1heSBpdHNlbGYgYmUKICAgICAgICBleHRlbmRpbmcgdGhlIHByb3RvY29sIGluIGEgbWFubmVyIHdlIGtub3cgbm90aGluZyBhYm91dCwKICAgICAgICBvciBqdXN0IGJyb2tlbi4gIFNvIHRoaXMgaXMgbm93IGNvbmZpZ3VyYWJsZTogc2V0CiAgICAgICAgPGNvZGU+cHJveHktaW50ZXJpbS1yZXNwb25zZSBSRkM8L2NvZGU+IHRvIGJlIGZ1bGx5IHByb3RvY29sCiAgICAgICAgY29tcGxpYW50LCBvciA8Y29kZT5wcm94eS1pbnRlcmltLXJlc3BvbnNlIFN1cHByZXNzPC9jb2RlPgogICAgICAgIHRvIHN1cHByZXNzIGludGVyaW0gcmVzcG9uc2VzLjwvZGQ+CiAgICAgICAgPGR0PnByb3h5LWluaXRpYWwtbm90LXBvb2xlZDwvZHQ+CiAgICAgICAgPGRkPklmIHRoaXMgdmFyaWFibGUgaXMgc2V0LCBubyBwb29sZWQgY29ubmVjdGlvbiB3aWxsIGJlIHJldXNlZAogICAgICAgIGlmIHRoZSBjbGllbnQgcmVxdWVzdCBpcyB0aGUgaW5pdGlhbCByZXF1ZXN0IG9uIHRoZSBmcm9udGVuZCBjb25uZWN0aW9uLiBUaGlzIGF2b2lkcwogICAgICAgIHRoZSAicHJveHk6IGVycm9yIHJlYWRpbmcgc3RhdHVzIGxpbmUgZnJvbSByZW1vdGUgc2VydmVyIiBlcnJvciBtZXNzYWdlCiAgICAgICAgY2F1c2VkIGJ5IHRoZSByYWNlIGNvbmRpdGlvbiB0aGF0IHRoZSBiYWNrZW5kIHNlcnZlciBjbG9zZWQgdGhlCiAgICAgICAgcG9vbGVkIGNvbm5lY3Rpb24gYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gY2hlY2sgYnkgdGhlIHByb3h5IGFuZAogICAgICAgIGJlZm9yZSBkYXRhIHNlbnQgYnkgdGhlIHByb3h5IHJlYWNoZWQgdGhlIGJhY2tlbmQuIEl0IGhhcyB0byBiZQogICAgICAgIGtlcHQgaW4gbWluZCB0aGF0IHNldHRpbmcgdGhpcyB2YXJpYWJsZSBkb3duZ3JhZGVzIHBlcmZvcm1hbmNlLAogICAgICAgIGVzcGVjaWFsbHkgd2l0aCBIVFRQLzEuMCBjbGllbnRzLgogICAgICAgIDwvZGQ+CiAgICA8L2RsPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJub3RlcyIgaWQ9Im5vdGVzIj5SZXF1ZXN0IG5vdGVzPC9hPjwvaDI+CiAgICA8cD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5X2h0dHAuaHRtbCI+bW9kX3Byb3h5X2h0dHA8L2E+PC9jb2RlPiBjcmVhdGVzIHRoZSBmb2xsb3dpbmcgcmVxdWVzdCBub3RlcyBmb3IKICAgICAgICBsb2dnaW5nIHVzaW5nIHRoZSA8Y29kZT4le1ZBUk5BTUV9bjwvY29kZT4gZm9ybWF0IGluCiAgICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9sb2dfY29uZmlnLmh0bWwjbG9nZm9ybWF0Ij5Mb2dGb3JtYXQ8L2E+PC9jb2RlPiBvcgogICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjZXJyb3Jsb2dmb3JtYXQiPkVycm9yTG9nRm9ybWF0PC9hPjwvY29kZT46CiAgICA8L3A+CiAgICA8ZGw+CiAgICAgICAgPGR0PnByb3h5LXNvdXJjZS1wb3J0PC9kdD4KICAgICAgICA8ZGQ+VGhlIGxvY2FsIHBvcnQgdXNlZCBmb3IgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIGJhY2tlbmQgc2VydmVyLjwvZGQ+CiAgICAgICAgPGR0PnByb3h5LXN0YXR1czwvZHQ+CiAgICAgICAgPGRkPlRoZSBIVFRQIHN0YXR1cyByZWNlaXZlZCBmcm9tIHRoZSBiYWNrZW5kIHNlcnZlci48L2RkPgogICAgPC9kbD4KPC9kaXY+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJib3R0b21sYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL21vZC9tb2RfcHJveHlfaHR0cC5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZnIvbW9kL21vZF9wcm94eV9odHRwLmh0bWwiIGhyZWZsYW5nPSJmciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGcmFu52FpcyI+Jm5ic3A7ZnImbmJzcDs8L2E+PC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIGFsdD0idG9wIiAvPjwvYT48L2Rpdj48ZGl2IGNsYXNzPSJzZWN0aW9uIj48aDI+PGEgaWQ9ImNvbW1lbnRzX3NlY3Rpb24iIG5hbWU9ImNvbW1lbnRzX3NlY3Rpb24iPkNvbW1lbnRzPC9hPjwvaDI+PGRpdiBjbGFzcz0id2FybmluZyI+PHN0cm9uZz5Ob3RpY2U6PC9zdHJvbmc+PGJyIC8+VGhpcyBpcyBub3QgYSBRJmFtcDtBIHNlY3Rpb24uIENvbW1lbnRzIHBsYWNlZCBoZXJlIHNob3VsZCBiZSBwb2ludGVkIHRvd2FyZHMgc3VnZ2VzdGlvbnMgb24gaW1wcm92aW5nIHRoZSBkb2N1bWVudGF0aW9uIG9yIHNlcnZlciwgYW5kIG1heSBiZSByZW1vdmVkIGFnYWluIGJ5IG91ciBtb2RlcmF0b3JzIGlmIHRoZXkgYXJlIGVpdGhlciBpbXBsZW1lbnRlZCBvciBjb25zaWRlcmVkIGludmFsaWQvb2ZmLXRvcGljLiBRdWVzdGlvbnMgb24gaG93IHRvIG1hbmFnZSB0aGUgQXBhY2hlIEhUVFAgU2VydmVyIHNob3VsZCBiZSBkaXJlY3RlZCBhdCBlaXRoZXIgb3VyIElSQyBjaGFubmVsLCAjaHR0cGQsIG9uIEZyZWVub2RlLCBvciBzZW50IHRvIG91ciA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9saXN0cy5odG1sIj5tYWlsaW5nIGxpc3RzPC9hPi48L2Rpdj4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KdmFyIGNvbW1lbnRzX3Nob3J0bmFtZSA9ICdodHRwZCc7CnZhciBjb21tZW50c19pZGVudGlmaWVyID0gJ2h0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvMi40L21vZC9tb2RfcHJveHlfaHR0cC5odG1sJzsKKGZ1bmN0aW9uKHcsIGQpIHsKICAgIGlmICh3LmxvY2F0aW9uLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCkgPT0gImh0dHBkLmFwYWNoZS5vcmciKSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj48XC9kaXY+Jyk7CiAgICAgICAgdmFyIHMgPSBkLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIHMudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgIHMuYXN5bmMgPSB0cnVlOwogICAgICAgIHMuc3JjID0gJ2h0dHBzOi8vY29tbWVudHMuYXBhY2hlLm9yZy9zaG93X2NvbW1lbnRzLmx1YT9zaXRlPScgKyBjb21tZW50c19zaG9ydG5hbWUgKyAnJnBhZ2U9JyArIGNvbW1lbnRzX2lkZW50aWZpZXI7CiAgICAgICAgKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSB8fCBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0pLmFwcGVuZENoaWxkKHMpOwogICAgfQogICAgZWxzZSB7IAogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+Q29tbWVudHMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHBhZ2UgYXQgdGhlIG1vbWVudC48XC9kaXY+Jyk7CiAgICB9Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwovLy0tPjwhXV0+PC9zY3JpcHQ+PC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMTYgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD48L2Rpdj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQppZiAodHlwZW9mKHByZXR0eVByaW50KSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgIHByZXR0eVByaW50KCk7Cn0KLy8tLT48IV1dPjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==