PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5tb2Rfc2Vzc2lvbl9kYmQgLSBBcGFjaGUgSFRUUCBTZXJ2ZXIgVmVyc2lvbiAyLjU8L3RpdGxlPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik1haW4gc3R5bGVzaGVldCIgLz4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC1sb29zZS0xMDBwYy5jc3MiIHJlbD0iYWx0ZXJuYXRlIHN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTm8gU2lkZWJhciAtIERlZmF1bHQgZm9udCBzaXplIiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLXByaW50LmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0icHJpbnQiIHR5cGU9InRleHQvY3NzIiAvPjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3N0eWxlL2Nzcy9wcmV0dGlmeS5jc3MiIC8+CjxzY3JpcHQgc3JjPSIuLi9zdHlsZS9zY3JpcHRzL3ByZXR0aWZ5Lm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KPC9zY3JpcHQ+Cgo8bGluayBocmVmPSIuLi9pbWFnZXMvZmF2aWNvbi5pY28iIHJlbD0ic2hvcnRjdXQgaWNvbiIgLz48L2hlYWQ+Cjxib2R5Pgo8ZGl2IGlkPSJwYWdlLWhlYWRlciI+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9xdWlja3JlZmVyZW5jZS5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD4KPHAgY2xhc3M9ImFwYWNoZSI+QXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi41PC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9mZWF0aGVyLnBuZyIgLz48L2Rpdj4KPGRpdiBjbGFzcz0idXAiPjxhIGhyZWY9Ii4vIj48aW1nIHRpdGxlPSImbHQ7LSIgYWx0PSImbHQ7LSIgc3JjPSIuLi9pbWFnZXMvbGVmdC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYXRoIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyI+QXBhY2hlPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnLyI+SFRUUCBTZXJ2ZXI8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8iPkRvY3VtZW50YXRpb248L2E+ICZndDsgPGEgaHJlZj0iLi4vIj5WZXJzaW9uIDIuNTwvYT4gJmd0OyA8YSBocmVmPSIuLyI+TW9kdWxlczwvYT48L2Rpdj4KPGRpdiBpZD0icGFnZS1jb250ZW50Ij4KPGRpdiBpZD0icHJlYW1ibGUiPjxoMT5BcGFjaGUgTW9kdWxlIG1vZF9zZXNzaW9uX2RiZDwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vbW9kL21vZF9zZXNzaW9uX2RiZC5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+PC9wPgo8L2Rpdj4KPHRhYmxlIGNsYXNzPSJtb2R1bGUiPjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkRCRC9TUUwgYmFzZWQgc2Vzc2lvbiBzdXBwb3J0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI01vZHVsZUlkZW50aWZpZXIiPk1vZHVsZaBJZGVudGlmaWVyOjwvYT48L3RoPjx0ZD5zZXNzaW9uX2RiZF9tb2R1bGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNTb3VyY2VGaWxlIj5Tb3VyY2WgRmlsZTo8L2E+PC90aD48dGQ+bW9kX3Nlc3Npb25fZGJkLmM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD5BdmFpbGFibGUgaW4gQXBhY2hlIDIuMyBhbmQgbGF0ZXI8L3RkPjwvdHI+PC90YWJsZT4KPGgzPlN1bW1hcnk8L2gzPgoKICAgIDxkaXYgY2xhc3M9Indhcm5pbmciPjxoMz5XYXJuaW5nPC9oMz4KICAgICAgPHA+VGhlIHNlc3Npb24gbW9kdWxlcyBtYWtlIHVzZSBvZiBIVFRQIGNvb2tpZXMsIGFuZCBhcyBzdWNoIGNhbiBmYWxsCiAgICAgIHZpY3RpbSB0byBDcm9zcyBTaXRlIFNjcmlwdGluZyBhdHRhY2tzLCBvciBleHBvc2UgcG90ZW50aWFsbHkgcHJpdmF0ZQogICAgICBpbmZvcm1hdGlvbiB0byBjbGllbnRzLiBQbGVhc2UgZW5zdXJlIHRoYXQgdGhlIHJlbGV2YW50IHJpc2tzIGhhdmUKICAgICAgYmVlbiB0YWtlbiBpbnRvIGFjY291bnQgYmVmb3JlIGVuYWJsaW5nIHRoZSBzZXNzaW9uIGZ1bmN0aW9uYWxpdHkgb24KICAgICAgeW91ciBzZXJ2ZXIuPC9wPgogICAgPC9kaXY+CgogICAgPHA+VGhpcyBzdWJtb2R1bGUgb2YgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9zZXNzaW9uLmh0bWwiPm1vZF9zZXNzaW9uPC9hPjwvY29kZT4gcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlCiAgICBzdG9yYWdlIG9mIHVzZXIgc2Vzc2lvbnMgd2l0aGluIGEgU1FMIGRhdGFiYXNlIHVzaW5nIHRoZQogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9kYmQuaHRtbCI+bW9kX2RiZDwvYT48L2NvZGU+IG1vZHVsZS48L3A+CgogICAgPHA+U2Vzc2lvbnMgY2FuIGVpdGhlciBiZSA8c3Ryb25nPmFub255bW91czwvc3Ryb25nPiwgd2hlcmUgdGhlIHNlc3Npb24gaXMKICAgIGtleWVkIGJ5IGEgdW5pcXVlIFVVSUQgc3RyaW5nIHN0b3JlZCBvbiB0aGUgYnJvd3NlciBpbiBhIGNvb2tpZSwgb3IKICAgIDxzdHJvbmc+cGVyIHVzZXI8L3N0cm9uZz4sIHdoZXJlIHRoZSBzZXNzaW9uIGlzIGtleWVkIGFnYWluc3QgdGhlIHVzZXJpZCBvZgogICAgdGhlIGxvZ2dlZCBpbiB1c2VyLjwvcD4KCiAgICA8cD5TUUwgYmFzZWQgc2Vzc2lvbnMgYXJlIGhpZGRlbiBmcm9tIHRoZSBicm93c2VyLCBhbmQgc28gb2ZmZXIgYSBtZWFzdXJlIG9mCiAgICBwcml2YWN5IHdpdGhvdXQgdGhlIG5lZWQgZm9yIGVuY3J5cHRpb24uPC9wPgoKICAgIDxwPkRpZmZlcmVudCB3ZWJzZXJ2ZXJzIHdpdGhpbiBhIHNlcnZlciBmYXJtIG1heSBjaG9vc2UgdG8gc2hhcmUgYSBkYXRhYmFzZSwKICAgIGFuZCBzbyBzaGFyZSBzZXNzaW9ucyB3aXRoIG9uZSBhbm90aGVyLjwvcD4KCiAgICA8cD5Gb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSBzZXNzaW9uIGludGVyZmFjZSwgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvcgogICAgdGhlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2Rfc2Vzc2lvbi5odG1sIj5tb2Rfc2Vzc2lvbjwvYT48L2NvZGU+IG1vZHVsZS48L3A+Cgo8L2Rpdj4KPGRpdiBpZD0icXVpY2t2aWV3Ij48aDM+VG9waWNzPC9oMz4KPHVsIGlkPSJ0b3BpY3MiPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNkYmRjb25maWciPkRCRCBDb25maWd1cmF0aW9uPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2Fub255bW91cyI+QW5vbnltb3VzIFNlc3Npb25zPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3BlcnVzZXIiPlBlciBVc2VyIFNlc3Npb25zPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2hvdXNla2VlcGluZyI+RGF0YWJhc2UgSG91c2VrZWVwaW5nPC9hPjwvbGk+CjwvdWw+PGgzIGNsYXNzPSJkaXJlY3RpdmVzIj5EaXJlY3RpdmVzPC9oMz4KPHVsIGlkPSJ0b2MiPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzZXNzaW9uZGJkY29va2llbmFtZSI+U2Vzc2lvbkRCRENvb2tpZU5hbWU8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjc2Vzc2lvbmRiZGNvb2tpZW5hbWUyIj5TZXNzaW9uREJEQ29va2llTmFtZTI8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjc2Vzc2lvbmRiZGNvb2tpZXJlbW92ZSI+U2Vzc2lvbkRCRENvb2tpZVJlbW92ZTwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzZXNzaW9uZGJkZGVsZXRlbGFiZWwiPlNlc3Npb25EQkREZWxldGVMYWJlbDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzZXNzaW9uZGJkaW5zZXJ0bGFiZWwiPlNlc3Npb25EQkRJbnNlcnRMYWJlbDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzZXNzaW9uZGJkcGVydXNlciI+U2Vzc2lvbkRCRFBlclVzZXI8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjc2Vzc2lvbmRiZHNlbGVjdGxhYmVsIj5TZXNzaW9uREJEU2VsZWN0TGFiZWw8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjc2Vzc2lvbmRiZHVwZGF0ZWxhYmVsIj5TZXNzaW9uREJEVXBkYXRlTGFiZWw8L2E+PC9saT4KPC91bD4KPGgzPkJ1Z2ZpeCBjaGVja2xpc3Q8L2gzPjx1bCBjbGFzcz0ic2VlYWxzbyI+PGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvZGlzdC9odHRwZC9DSEFOR0VTXzIuNCI+aHR0cGQgY2hhbmdlbG9nPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vYnouYXBhY2hlLm9yZy9idWd6aWxsYS9idWdsaXN0LmNnaT9idWdfc3RhdHVzPV9fb3Blbl9fJmFtcDtsaXN0X2lkPTE0NDUzMiZhbXA7cHJvZHVjdD1BcGFjaGUlMjBodHRwZC0yJmFtcDtxdWVyeV9mb3JtYXQ9c3BlY2lmaWMmYW1wO29yZGVyPWNoYW5nZWRkYXRlJTIwREVTQyUyQ3ByaW9yaXR5JTJDYnVnX3NldmVyaXR5JmFtcDtjb21wb25lbnQ9bW9kX3Nlc3Npb25fZGJkIj5Lbm93biBpc3N1ZXM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9iei5hcGFjaGUub3JnL2J1Z3ppbGxhL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1BcGFjaGUlMjBodHRwZC0yJmFtcDtjb21wb25lbnQ9bW9kX3Nlc3Npb25fZGJkIj5SZXBvcnQgYSBidWc8L2E+PC9saT48L3VsPjxoMz5TZWUgYWxzbzwvaDM+Cjx1bCBjbGFzcz0ic2VlYWxzbyI+CjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Nlc3Npb24uaHRtbCI+bW9kX3Nlc3Npb248L2E+PC9jb2RlPjwvbGk+CjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Nlc3Npb25fY3J5cHRvLmh0bWwiPm1vZF9zZXNzaW9uX2NyeXB0bzwvYT48L2NvZGU+PC9saT4KPGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2Rfc2Vzc2lvbl9jb29raWUuaHRtbCI+bW9kX3Nlc3Npb25fY29va2llPC9hPjwvY29kZT48L2xpPgo8bGk+PGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9kYmQuaHRtbCI+bW9kX2RiZDwvYT48L2NvZGU+PC9saT4KPGxpPjxhIGhyZWY9IiNjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2xpPjwvdWw+PC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImRiZGNvbmZpZyIgaWQ9ImRiZGNvbmZpZyI+REJEIENvbmZpZ3VyYXRpb248L2E+PC9oMj4KCiAgICAgIDxwPkJlZm9yZSB0aGUgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9zZXNzaW9uX2RiZC5odG1sIj5tb2Rfc2Vzc2lvbl9kYmQ8L2E+PC9jb2RlPiBtb2R1bGUgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gbWFpbnRhaW4gYQogICAgICBzZXNzaW9uLCB0aGUgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9kYmQuaHRtbCI+bW9kX2RiZDwvYT48L2NvZGU+IG1vZHVsZSBtdXN0IGJlIGNvbmZpZ3VyZWQgdG8gbWFrZSB0aGUgdmFyaW91cyBkYXRhYmFzZSBxdWVyaWVzCiAgICAgIGF2YWlsYWJsZSB0byB0aGUgc2VydmVyLjwvcD4KCiAgICAgIDxwPlRoZXJlIGFyZSBmb3VyIHF1ZXJpZXMgcmVxdWlyZWQgdG8ga2VlcCBhIHNlc3Npb24gbWFpbnRhaW5lZCwgdG8gc2VsZWN0IGFuIGV4aXN0aW5nIHNlc3Npb24sCiAgICAgIHRvIHVwZGF0ZSBhbiBleGlzdGluZyBzZXNzaW9uLCB0byBpbnNlcnQgYSBuZXcgc2Vzc2lvbiwgYW5kIHRvIGRlbGV0ZSBhbiBleHBpcmVkIG9yIGVtcHR5CiAgICAgIHNlc3Npb24uIFRoZXNlIHF1ZXJpZXMgYXJlIGNvbmZpZ3VyZWQgYXMgcGVyIHRoZSBleGFtcGxlIGJlbG93LjwvcD4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5TYW1wbGUgREJEIGNvbmZpZ3VyYXRpb248L2gzPjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5EQkRyaXZlciBwZ3NxbApEQkRQYXJhbXMgImRibmFtZT1hcGFjaGVzZXNzaW9uIHVzZXI9YXBhY2hlIHBhc3N3b3JkPXh4eHh4IGhvc3Q9bG9jYWxob3N0IgpEQkRQcmVwYXJlU1FMICJkZWxldGUgZnJvbSBzZXNzaW9uIHdoZXJlIGtleSA9ICVzIiBkZWxldGVzZXNzaW9uCkRCRFByZXBhcmVTUUwgInVwZGF0ZSBzZXNzaW9uIHNldCB2YWx1ZSA9ICVzLCBleHBpcnkgPSAlbGxkLCBrZXkgPSAlcyB3aGVyZSBrZXkgPSAlcyIgdXBkYXRlc2Vzc2lvbgpEQkRQcmVwYXJlU1FMICJpbnNlcnQgaW50byBzZXNzaW9uICh2YWx1ZSwgZXhwaXJ5LCBrZXkpIHZhbHVlcyAoJXMsICVsbGQsICVzKSIgaW5zZXJ0c2Vzc2lvbgpEQkRQcmVwYXJlU1FMICJzZWxlY3QgdmFsdWUgZnJvbSBzZXNzaW9uIHdoZXJlIGtleSA9ICVzIGFuZCAoZXhwaXJ5ID0gMCBvciBleHBpcnkgJmd0OyAlbGxkKSIgc2VsZWN0c2Vzc2lvbgpEQkRQcmVwYXJlU1FMICJkZWxldGUgZnJvbSBzZXNzaW9uIHdoZXJlIGV4cGlyeSAhPSAwIGFuZCBleHBpcnkgJmx0OyAlbGxkIiBjbGVhbnNlc3Npb248L3ByZT4KPC9kaXY+CgogICAgPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iYW5vbnltb3VzIiBpZD0iYW5vbnltb3VzIj5Bbm9ueW1vdXMgU2Vzc2lvbnM8L2E+PC9oMj4KCiAgICAgIDxwPkFub255bW91cyBzZXNzaW9ucyBhcmUga2V5ZWQgYWdhaW5zdCBhIHVuaXF1ZSBVVUlELCBhbmQgc3RvcmVkIG9uIHRoZQogICAgICBicm93c2VyIHdpdGhpbiBhbiBIVFRQIGNvb2tpZS4gVGhpcyBtZXRob2QgaXMgc2ltaWxhciB0byB0aGF0IHVzZWQgYnkgbW9zdAogICAgICBhcHBsaWNhdGlvbiBzZXJ2ZXJzIHRvIHN0b3JlIHNlc3Npb24gaW5mb3JtYXRpb24uPC9wPgoKICAgICAgPHA+VG8gY3JlYXRlIGEgc2ltcGxlIGFub255bW91cyBzZXNzaW9uIGFuZCBzdG9yZSBpdCBpbiBhIHBvc3RncmVzIGRhdGFiYXNlCiAgICAgIHRhYmxlIGNhbGxlZCA8dmFyPmFwYWNoZXNlc3Npb248L3Zhcj4sIGFuZCBzYXZlIHRoZSBzZXNzaW9uIElEIGluIGEgY29va2llCiAgICAgIGNhbGxlZCA8dmFyPnNlc3Npb248L3Zhcj4sIGNvbmZpZ3VyZSB0aGUgc2Vzc2lvbiBhcyBmb2xsb3dzOjwvcD4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5TUUwgYmFzZWQgYW5vbnltb3VzIHNlc3Npb248L2gzPjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5TZXNzaW9uIE9uClNlc3Npb25EQkRDb29raWVOYW1lIHNlc3Npb24gcGF0aD0vPC9wcmU+CjwvZGl2PgoKICAgICAgPHA+Rm9yIG1vcmUgZXhhbXBsZXMgb24gaG93IHRoZSBzZXNzaW9uIGNhbiBiZSBjb25maWd1cmVkIHRvIGJlIHJlYWQKICAgICAgZnJvbSBhbmQgd3JpdHRlbiB0byBieSBhIENHSSBhcHBsaWNhdGlvbiwgc2VlIHRoZQogICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Nlc3Npb24uaHRtbCI+bW9kX3Nlc3Npb248L2E+PC9jb2RlPiBleGFtcGxlcyBzZWN0aW9uLjwvcD4KCiAgICAgIDxwPkZvciBkb2N1bWVudGF0aW9uIG9uIGhvdyB0aGUgc2Vzc2lvbiBjYW4gYmUgdXNlZCB0byBzdG9yZSB1c2VybmFtZQogICAgICBhbmQgcGFzc3dvcmQgZGV0YWlscywgc2VlIHRoZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGhfZm9ybS5odG1sIj5tb2RfYXV0aF9mb3JtPC9hPjwvY29kZT4gbW9kdWxlLjwvcD4KCiAgICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJwZXJ1c2VyIiBpZD0icGVydXNlciI+UGVyIFVzZXIgU2Vzc2lvbnM8L2E+PC9oMj4KCiAgICAgIDxwPlBlciB1c2VyIHNlc3Npb25zIGFyZSBrZXllZCBhZ2FpbnN0IHRoZSB1c2VybmFtZSBvZiBhIHN1Y2Nlc3NmdWxseQogICAgICBhdXRoZW50aWNhdGVkIHVzZXIuIEl0IG9mZmVycyB0aGUgbW9zdCBwcml2YWN5LCBhcyBubyBleHRlcm5hbCBoYW5kbGUKICAgICAgdG8gdGhlIHNlc3Npb24gZXhpc3RzIG91dHNpZGUgb2YgdGhlIGF1dGhlbnRpY2F0ZWQgcmVhbG0uPC9wPgoKICAgICAgPHA+UGVyIHVzZXIgc2Vzc2lvbnMgd29yayB3aXRoaW4gYSBjb3JyZWN0bHkgY29uZmlndXJlZCBhdXRoZW50aWNhdGVkCiAgICAgIGVudmlyb25tZW50LCBiZSB0aGF0IHVzaW5nIGJhc2ljIGF1dGhlbnRpY2F0aW9uLCBkaWdlc3QgYXV0aGVudGljYXRpb24KICAgICAgb3IgU1NMIGNsaWVudCBjZXJ0aWZpY2F0ZXMuIER1ZSB0byB0aGUgbGltaXRhdGlvbnMgb2Ygd2hvIGNhbWUgZmlyc3QsCiAgICAgIHRoZSBjaGlja2VuIG9yIHRoZSBlZ2csIHBlciB1c2VyIHNlc3Npb25zIGNhbm5vdCBiZSB1c2VkIHRvIHN0b3JlCiAgICAgIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWxzIGZyb20gYSBtb2R1bGUgbGlrZQogICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGhfZm9ybS5odG1sIj5tb2RfYXV0aF9mb3JtPC9hPjwvY29kZT4uPC9wPgoKICAgICAgPHA+VG8gY3JlYXRlIGEgc2ltcGxlIHBlciB1c2VyIHNlc3Npb24gYW5kIHN0b3JlIGl0IGluIGEgcG9zdGdyZXMgZGF0YWJhc2UKICAgICAgdGFibGUgY2FsbGVkIDx2YXI+YXBhY2hlc2Vzc2lvbjwvdmFyPiwgYW5kIHdpdGggdGhlIHNlc3Npb24ga2V5ZWQgdG8gdGhlCiAgICAgIHVzZXJpZCwgY29uZmlndXJlIHRoZSBzZXNzaW9uIGFzIGZvbGxvd3M6PC9wPgoKICAgICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPlNRTCBiYXNlZCBwZXIgdXNlciBzZXNzaW9uPC9oMz48cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+U2Vzc2lvbiBPbgpTZXNzaW9uREJEUGVyVXNlciBPbjwvcHJlPgo8L2Rpdj4KCiAgICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJob3VzZWtlZXBpbmciIGlkPSJob3VzZWtlZXBpbmciPkRhdGFiYXNlIEhvdXNla2VlcGluZzwvYT48L2gyPgogICAgICA8cD5PdmVyIHRoZSBjb3Vyc2Ugb2YgdGltZSwgdGhlIGRhdGFiYXNlIGNhbiBiZSBleHBlY3RlZCB0byBzdGFydCBhY2N1bXVsYXRpbmcKICAgICAgZXhwaXJlZCBzZXNzaW9ucy4gQXQgdGhpcyBwb2ludCwgdGhlIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2Rfc2Vzc2lvbl9kYmQuaHRtbCI+bW9kX3Nlc3Npb25fZGJkPC9hPjwvY29kZT4gbW9kdWxlCiAgICAgIGlzIG5vdCB5ZXQgYWJsZSB0byBoYW5kbGUgc2Vzc2lvbiBleHBpcnkgYXV0b21hdGljYWxseS48L3A+CgogICAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIj48aDM+V2FybmluZzwvaDM+CiAgICAgIDxwPlRoZSBhZG1pbmlzdHJhdG9yIHdpbGwgbmVlZCB0byBzZXQgdXAgYW4gZXh0ZXJuYWwgcHJvY2VzcyB2aWEgY3JvbiB0byBjbGVhbgogICAgICBvdXQgZXhwaXJlZCBzZXNzaW9ucy48L3A+CiAgICAgIDwvZGl2PgoKICAgIDwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJTZXNzaW9uREJEQ29va2llTmFtZSIgaWQ9IlNlc3Npb25EQkRDb29raWVOYW1lIj5TZXNzaW9uREJEQ29va2llTmFtZTwvYT4gPGEgbmFtZT0ic2Vzc2lvbmRiZGNvb2tpZW5hbWUiIGlkPSJzZXNzaW9uZGJkY29va2llbmFtZSI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+TmFtZSBhbmQgYXR0cmlidXRlcyBmb3IgdGhlIFJGQzIxMDkgY29va2llIHN0b3JpbmcgdGhlIHNlc3Npb24gSUQ8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+U2Vzc2lvbkRCRENvb2tpZU5hbWUgPHZhcj5uYW1lPC92YXI+IDx2YXI+YXR0cmlidXRlczwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5ub25lPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9zZXNzaW9uX2RiZDwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5TZXNzaW9uREJEQ29va2llTmFtZTwvY29kZT4gZGlyZWN0aXZlIHNwZWNpZmllcyB0aGUgbmFtZSBhbmQKICAgIG9wdGlvbmFsIGF0dHJpYnV0ZXMgb2YgYW4gUkZDMjEwOSBjb21wbGlhbnQgY29va2llIGluc2lkZSB3aGljaCB0aGUgc2Vzc2lvbiBJRCB3aWxsCiAgICBiZSBzdG9yZWQuIFJGQzIxMDkgY29va2llcyBhcmUgc2V0IHVzaW5nIHRoZSA8Y29kZT5TZXQtQ29va2llPC9jb2RlPiBIVFRQIGhlYWRlci4KICAgIDwvcD4KCiAgICA8cD5BbiBvcHRpb25hbCBsaXN0IG9mIGNvb2tpZSBhdHRyaWJ1dGVzIGNhbiBiZSBzcGVjaWZpZWQsIGFzIHBlciB0aGUgZXhhbXBsZSBiZWxvdy4KICAgIFRoZXNlIGF0dHJpYnV0ZXMgYXJlIGluc2VydGVkIGludG8gdGhlIGNvb2tpZSBhcyBpcywgYW5kIGFyZSBub3QgaW50ZXJwcmV0ZWQgYnkKICAgIEFwYWNoZS4gRW5zdXJlIHRoYXQgeW91ciBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkIGNvcnJlY3RseSBhcyBwZXIgdGhlIGNvb2tpZSBzcGVjaWZpY2F0aW9uLgogICAgPC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5Db29raWUgd2l0aCBhdHRyaWJ1dGVzPC9oMz48cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+U2Vzc2lvbiBPbgpTZXNzaW9uREJEQ29va2llTmFtZSBzZXNzaW9uIHBhdGg9L3ByaXZhdGU7ZG9tYWluPWV4YW1wbGUuY29tO2h0dHBvbmx5O3NlY3VyZTt2ZXJzaW9uPTE7PC9wcmU+CjwvZGl2PgoKCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJTZXNzaW9uREJEQ29va2llTmFtZTIiIGlkPSJTZXNzaW9uREJEQ29va2llTmFtZTIiPlNlc3Npb25EQkRDb29raWVOYW1lMjwvYT4gPGEgbmFtZT0ic2Vzc2lvbmRiZGNvb2tpZW5hbWUyIiBpZD0ic2Vzc2lvbmRiZGNvb2tpZW5hbWUyIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5OYW1lIGFuZCBhdHRyaWJ1dGVzIGZvciB0aGUgUkZDMjk2NSBjb29raWUgc3RvcmluZyB0aGUgc2Vzc2lvbiBJRDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5TZXNzaW9uREJEQ29va2llTmFtZTIgPHZhcj5uYW1lPC92YXI+IDx2YXI+YXR0cmlidXRlczwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5ub25lPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9zZXNzaW9uX2RiZDwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5TZXNzaW9uREJEQ29va2llTmFtZTI8L2NvZGU+IGRpcmVjdGl2ZSBzcGVjaWZpZXMgdGhlIG5hbWUgYW5kCiAgICBvcHRpb25hbCBhdHRyaWJ1dGVzIG9mIGFuIFJGQzI5NjUgY29tcGxpYW50IGNvb2tpZSBpbnNpZGUgd2hpY2ggdGhlIHNlc3Npb24gSUQgd2lsbAogICAgYmUgc3RvcmVkLiBSRkMyOTY1IGNvb2tpZXMgYXJlIHNldCB1c2luZyB0aGUgPGNvZGU+U2V0LUNvb2tpZTI8L2NvZGU+IEhUVFAgaGVhZGVyLgogICAgPC9wPgoKICAgIDxwPkFuIG9wdGlvbmFsIGxpc3Qgb2YgY29va2llIGF0dHJpYnV0ZXMgY2FuIGJlIHNwZWNpZmllZCwgYXMgcGVyIHRoZSBleGFtcGxlIGJlbG93LgogICAgVGhlc2UgYXR0cmlidXRlcyBhcmUgaW5zZXJ0ZWQgaW50byB0aGUgY29va2llIGFzIGlzLCBhbmQgYXJlIG5vdCBpbnRlcnByZXRlZCBieQogICAgQXBhY2hlLiBFbnN1cmUgdGhhdCB5b3VyIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQgY29ycmVjdGx5IGFzIHBlciB0aGUgY29va2llIHNwZWNpZmljYXRpb24uCiAgICA8L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPkNvb2tpZTIgd2l0aCBhdHRyaWJ1dGVzPC9oMz48cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+U2Vzc2lvbiBPbgpTZXNzaW9uREJEQ29va2llTmFtZTIgc2Vzc2lvbiBwYXRoPS9wcml2YXRlO2RvbWFpbj1leGFtcGxlLmNvbTtodHRwb25seTtzZWN1cmU7dmVyc2lvbj0xOzwvcHJlPgo8L2Rpdj4KCgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iU2Vzc2lvbkRCRENvb2tpZVJlbW92ZSIgaWQ9IlNlc3Npb25EQkRDb29raWVSZW1vdmUiPlNlc3Npb25EQkRDb29raWVSZW1vdmU8L2E+IDxhIG5hbWU9InNlc3Npb25kYmRjb29raWVyZW1vdmUiIGlkPSJzZXNzaW9uZGJkY29va2llcmVtb3ZlIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Db250cm9sIGZvciB3aGV0aGVyIHNlc3Npb24gSUQgY29va2llcyBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIGluY29taW5nIEhUVFAgaGVhZGVyczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5TZXNzaW9uREJEQ29va2llUmVtb3ZlIE9ufE9mZjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5TZXNzaW9uREJEQ29va2llUmVtb3ZlIE9uPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9zZXNzaW9uX2RiZDwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5TZXNzaW9uREJEQ29va2llUmVtb3ZlPC9jb2RlPiBmbGFnIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGNvb2tpZXMKICAgIGNvbnRhaW5pbmcgdGhlIHNlc3Npb24gSUQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGhlYWRlcnMgZHVyaW5nIHJlcXVlc3QgcHJvY2Vzc2luZy48L3A+CgogICAgPHA+SW4gYSByZXZlcnNlIHByb3h5IHNpdHVhdGlvbiB3aGVyZSB0aGUgQXBhY2hlIHNlcnZlciBhY3RzIGFzIGEgc2VydmVyIGZyb250ZW5kIGZvcgogICAgYSBiYWNrZW5kIG9yaWdpbiBzZXJ2ZXIsIHJldmVhbGluZyB0aGUgY29udGVudHMgb2YgdGhlIHNlc3Npb24gSUQgY29va2llIHRvIHRoZSBiYWNrZW5kCiAgICBjb3VsZCBiZSBhIHBvdGVudGlhbCBwcml2YWN5IHZpb2xhdGlvbi4gV2hlbiBzZXQgdG8gb24sIHRoZSBzZXNzaW9uIElEIGNvb2tpZSB3aWxsIGJlCiAgICByZW1vdmVkIGZyb20gdGhlIGluY29taW5nIEhUVFAgaGVhZGVycy48L3A+CgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlNlc3Npb25EQkREZWxldGVMYWJlbCIgaWQ9IlNlc3Npb25EQkREZWxldGVMYWJlbCI+U2Vzc2lvbkRCRERlbGV0ZUxhYmVsPC9hPiA8YSBuYW1lPSJzZXNzaW9uZGJkZGVsZXRlbGFiZWwiIGlkPSJzZXNzaW9uZGJkZGVsZXRlbGFiZWwiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlRoZSBTUUwgcXVlcnkgdG8gdXNlIHRvIHJlbW92ZSBzZXNzaW9ucyBmcm9tIHRoZSBkYXRhYmFzZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5TZXNzaW9uREJERGVsZXRlTGFiZWwgPHZhcj5sYWJlbDwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5TZXNzaW9uREJERGVsZXRlTGFiZWwgZGVsZXRlc2Vzc2lvbjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2Rfc2Vzc2lvbl9kYmQ8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+U2Vzc2lvbkRCRERlbGV0ZUxhYmVsPC9jb2RlPiBkaXJlY3RpdmUgc2V0cyB0aGUgZGVmYXVsdCBkZWxldGUKICAgIHF1ZXJ5IGxhYmVsIHRvIGJlIHVzZWQgdG8gZGVsZXRlIGFuIGV4cGlyZWQgb3IgZW1wdHkgc2Vzc2lvbi4gVGhpcyBsYWJlbCBtdXN0IGhhdmUgYmVlbiBwcmV2aW91c2x5CiAgICBkZWZpbmVkIHVzaW5nIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2RiZC5odG1sI2RiZHByZXBhcmVzcWwiPkRCRFByZXBhcmVTUUw8L2E+PC9jb2RlPiBkaXJlY3RpdmUuPC9wPgoKCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJTZXNzaW9uREJESW5zZXJ0TGFiZWwiIGlkPSJTZXNzaW9uREJESW5zZXJ0TGFiZWwiPlNlc3Npb25EQkRJbnNlcnRMYWJlbDwvYT4gPGEgbmFtZT0ic2Vzc2lvbmRiZGluc2VydGxhYmVsIiBpZD0ic2Vzc2lvbmRiZGluc2VydGxhYmVsIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5UaGUgU1FMIHF1ZXJ5IHRvIHVzZSB0byBpbnNlcnQgc2Vzc2lvbnMgaW50byB0aGUgZGF0YWJhc2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+U2Vzc2lvbkRCREluc2VydExhYmVsIDx2YXI+bGFiZWw8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+U2Vzc2lvbkRCREluc2VydExhYmVsIGluc2VydHNlc3Npb248L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0LCBkaXJlY3RvcnksIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Nlc3Npb25fZGJkPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlNlc3Npb25EQkRJbnNlcnRMYWJlbDwvY29kZT4gZGlyZWN0aXZlIHNldHMgdGhlIGRlZmF1bHQgaW5zZXJ0CiAgICBxdWVyeSBsYWJlbCB0byBiZSB1c2VkIHRvIGxvYWQgaW4gYSBzZXNzaW9uLiBUaGlzIGxhYmVsIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgZGVmaW5lZCB1c2luZyB0aGUKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfZGJkLmh0bWwjZGJkcHJlcGFyZXNxbCI+REJEUHJlcGFyZVNRTDwvYT48L2NvZGU+IGRpcmVjdGl2ZS48L3A+CgogICAgPHA+SWYgYW4gYXR0ZW1wdCB0byB1cGRhdGUgdGhlIHNlc3Npb24gYWZmZWN0cyBubyByb3dzLCB0aGlzIHF1ZXJ5IHdpbGwgYmUgY2FsbGVkIHRvIGluc2VydCB0aGUKICAgIHNlc3Npb24gaW50byB0aGUgZGF0YWJhc2UuPC9wPgoKCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJTZXNzaW9uREJEUGVyVXNlciIgaWQ9IlNlc3Npb25EQkRQZXJVc2VyIj5TZXNzaW9uREJEUGVyVXNlcjwvYT4gPGEgbmFtZT0ic2Vzc2lvbmRiZHBlcnVzZXIiIGlkPSJzZXNzaW9uZGJkcGVydXNlciI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+RW5hYmxlIGEgcGVyIHVzZXIgc2Vzc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5TZXNzaW9uREJEUGVyVXNlciBPbnxPZmY8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+U2Vzc2lvbkRCRFBlclVzZXIgT2ZmPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdCwgZGlyZWN0b3J5LCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9zZXNzaW9uX2RiZDwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5TZXNzaW9uREJEUGVyVXNlcjwvY29kZT4gZmxhZyBlbmFibGVzIGEgcGVyIHVzZXIgc2Vzc2lvbiBrZXllZAogICAgYWdhaW5zdCB0aGUgdXNlcidzIGxvZ2luIG5hbWUuIElmIHRoZSB1c2VyIGlzIG5vdCBsb2dnZWQgaW4sIHRoaXMgZGlyZWN0aXZlIHdpbGwgYmUKICAgIGlnbm9yZWQuPC9wPgoKCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJTZXNzaW9uREJEU2VsZWN0TGFiZWwiIGlkPSJTZXNzaW9uREJEU2VsZWN0TGFiZWwiPlNlc3Npb25EQkRTZWxlY3RMYWJlbDwvYT4gPGEgbmFtZT0ic2Vzc2lvbmRiZHNlbGVjdGxhYmVsIiBpZD0ic2Vzc2lvbmRiZHNlbGVjdGxhYmVsIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5UaGUgU1FMIHF1ZXJ5IHRvIHVzZSB0byBzZWxlY3Qgc2Vzc2lvbnMgZnJvbSB0aGUgZGF0YWJhc2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+U2Vzc2lvbkRCRFNlbGVjdExhYmVsIDx2YXI+bGFiZWw8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+U2Vzc2lvbkRCRFNlbGVjdExhYmVsIHNlbGVjdHNlc3Npb248L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0LCBkaXJlY3RvcnksIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Nlc3Npb25fZGJkPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlNlc3Npb25EQkRTZWxlY3RMYWJlbDwvY29kZT4gZGlyZWN0aXZlIHNldHMgdGhlIGRlZmF1bHQgc2VsZWN0CiAgICBxdWVyeSBsYWJlbCB0byBiZSB1c2VkIHRvIGxvYWQgaW4gYSBzZXNzaW9uLiBUaGlzIGxhYmVsIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgZGVmaW5lZCB1c2luZyB0aGUKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfZGJkLmh0bWwjZGJkcHJlcGFyZXNxbCI+REJEUHJlcGFyZVNRTDwvYT48L2NvZGU+IGRpcmVjdGl2ZS48L3A+CgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlNlc3Npb25EQkRVcGRhdGVMYWJlbCIgaWQ9IlNlc3Npb25EQkRVcGRhdGVMYWJlbCI+U2Vzc2lvbkRCRFVwZGF0ZUxhYmVsPC9hPiA8YSBuYW1lPSJzZXNzaW9uZGJkdXBkYXRlbGFiZWwiIGlkPSJzZXNzaW9uZGJkdXBkYXRlbGFiZWwiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlRoZSBTUUwgcXVlcnkgdG8gdXNlIHRvIHVwZGF0ZSBleGlzdGluZyBzZXNzaW9ucyBpbiB0aGUgZGF0YWJhc2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+U2Vzc2lvbkRCRFVwZGF0ZUxhYmVsIDx2YXI+bGFiZWw8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+U2Vzc2lvbkRCRFVwZGF0ZUxhYmVsIHVwZGF0ZXNlc3Npb248L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0LCBkaXJlY3RvcnksIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Nlc3Npb25fZGJkPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlNlc3Npb25EQkRVcGRhdGVMYWJlbDwvY29kZT4gZGlyZWN0aXZlIHNldHMgdGhlIGRlZmF1bHQgdXBkYXRlCiAgICBxdWVyeSBsYWJlbCB0byBiZSB1c2VkIHRvIGxvYWQgaW4gYSBzZXNzaW9uLiBUaGlzIGxhYmVsIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgZGVmaW5lZCB1c2luZyB0aGUKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfZGJkLmh0bWwjZGJkcHJlcGFyZXNxbCI+REJEUHJlcGFyZVNRTDwvYT48L2NvZGU+IGRpcmVjdGl2ZS48L3A+CgogICAgPHA+SWYgYW4gYXR0ZW1wdCB0byB1cGRhdGUgdGhlIHNlc3Npb24gYWZmZWN0cyBubyByb3dzLCB0aGUgaW5zZXJ0IHF1ZXJ5IHdpbGwgYmUKICAgIGNhbGxlZCB0byBpbnNlcnQgdGhlIHNlc3Npb24gaW50byB0aGUgZGF0YWJhc2UuIElmIHRoZSBkYXRhYmFzZSBzdXBwb3J0cyBJbnNlcnRPclVwZGF0ZSwKICAgIG92ZXJyaWRlIHRoaXMgcXVlcnkgdG8gcGVyZm9ybSB0aGUgdXBkYXRlIGluIG9uZSBxdWVyeSBpbnN0ZWFkIG9mIHR3by48L3A+CgoKPC9kaXY+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJib3R0b21sYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL21vZC9tb2Rfc2Vzc2lvbl9kYmQuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiBhbHQ9InRvcCIgLz48L2E+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiI+PGgyPjxhIGlkPSJjb21tZW50c19zZWN0aW9uIiBuYW1lPSJjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2gyPjxkaXYgY2xhc3M9Indhcm5pbmciPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPjxiciAvPlRoaXMgaXMgbm90IGEgUSZhbXA7QSBzZWN0aW9uLiBDb21tZW50cyBwbGFjZWQgaGVyZSBzaG91bGQgYmUgcG9pbnRlZCB0b3dhcmRzIHN1Z2dlc3Rpb25zIG9uIGltcHJvdmluZyB0aGUgZG9jdW1lbnRhdGlvbiBvciBzZXJ2ZXIsIGFuZCBtYXkgYmUgcmVtb3ZlZCBhZ2FpbiBieSBvdXIgbW9kZXJhdG9ycyBpZiB0aGV5IGFyZSBlaXRoZXIgaW1wbGVtZW50ZWQgb3IgY29uc2lkZXJlZCBpbnZhbGlkL29mZi10b3BpYy4gUXVlc3Rpb25zIG9uIGhvdyB0byBtYW5hZ2UgdGhlIEFwYWNoZSBIVFRQIFNlcnZlciBzaG91bGQgYmUgZGlyZWN0ZWQgYXQgZWl0aGVyIG91ciBJUkMgY2hhbm5lbCwgI2h0dHBkLCBvbiBGcmVlbm9kZSwgb3Igc2VudCB0byBvdXIgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvbGlzdHMuaHRtbCI+bWFpbGluZyBsaXN0czwvYT4uPC9kaXY+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCnZhciBjb21tZW50c19zaG9ydG5hbWUgPSAnaHR0cGQnOwp2YXIgY29tbWVudHNfaWRlbnRpZmllciA9ICdodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzL3RydW5rL21vZC9tb2Rfc2Vzc2lvbl9kYmQuaHRtbCc7CihmdW5jdGlvbih3LCBkKSB7CiAgICBpZiAody5sb2NhdGlvbi5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpID09ICJodHRwZC5hcGFjaGUub3JnIikgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+PFwvZGl2PicpOwogICAgICAgIHZhciBzID0gZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBzLnNyYyA9ICdodHRwczovL2NvbW1lbnRzLmFwYWNoZS5vcmcvc2hvd19jb21tZW50cy5sdWE/c2l0ZT0nICsgY29tbWVudHNfc2hvcnRuYW1lICsgJyZwYWdlPScgKyBjb21tZW50c19pZGVudGlmaWVyOwogICAgICAgIChkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0gfHwgZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdKS5hcHBlbmRDaGlsZChzKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+Q29tbWVudHMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHBhZ2UgYXQgdGhlIG1vbWVudC48XC9kaXY+Jyk7CiAgICB9Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwovLy0tPjwhXV0+PC9zY3JpcHQ+PC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMTcgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvcXVpY2tyZWZlcmVuY2UuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+PC9kaXY+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KaWYgKHR5cGVvZihwcmV0dHlQcmludCkgIT09ICd1bmRlZmluZWQnKSB7CiAgICBwcmV0dHlQcmludCgpOwp9Ci8vLS0+PCFdXT48L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=