PGh0bWw+CjxoZWFkPgoJPHRpdGxlPkJPT1NUX1BQX1dISUxFPC90aXRsZT4KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3N0eWxlcy5jc3MiPgo8L2hlYWQ+Cjxib2R5PgoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6ICAwcHg7Ij4KCQlUaGUgPGI+Qk9PU1RfUFBfV0hJTEU8L2I+IG1hY3JvIHJlcHJlc2VudHMgYSBsb29waW5nIGNvbnN0cnVjdC4KCTwvZGl2PgoJPGg0PlVzYWdlPC9oND4KCQk8ZGl2IGNsYXNzPSJjb2RlIj4KCQkJPGI+Qk9PU1RfUFBfV0hJTEU8L2I+KDxpPnByZWQ8L2k+LCA8aT5vcDwvaT4sIDxpPnN0YXRlPC9pPikKCQk8L2Rpdj4KCTxoND5Bcmd1bWVudHM8L2g0PgoJCTxkbD4KCQkJPGR0PnByZWQ8L2R0PgoJCQk8ZGQ+CgkJCQlBIGJpbmFyeSBwcmVkaWNhdGUgb2YgdGhlIGZvcm0gPGk+cHJlZDwvaT4oPGk+ZDwvaT4sIDxpPnN0YXRlPC9pPikuJm5ic3A7CgkJCQlUaGlzIHByZWRpY2F0ZSBpcyBleHBhbmRlZCBieSA8Yj5CT09TVF9QUF9XSElMRTwvYj4gd2l0aCB0aGUgbmV4dCBhdmFpbGFibGUKCQkJCWl0ZXJhdGlvbiA8aT5kPC9pPiBhbmQgdGhlIGN1cnJlbnQgPGk+c3RhdGU8L2k+LiZuYnNwOwoJCQkJVGhpcyBwcmVkaWNhdGUgbXVzdCBleHBhbmQgdG8gdmFsdWUgaW4gdGhlIHJhbmdlIG9mIDxpPjA8L2k+IHRvIDxiPkJPT1NUX1BQX0xJTUlUX01BRzwvYj4uCgkJCQlUaGUgY29uc3RydWN0IGNvbnRpbnVlcyB0byBsb29wIHVudGlsIHRoaXMgcHJlZGljYXRlIHJldHVybnMgPGk+MDwvaT4uJm5ic3A7CgkJCQlXaGVuIHRoaXMgcHJlZGljYXRlIHJldHVybnMgPGk+MDwvaT4sIDxiPkJPT1NUX1BQX1dISUxFPC9iPiByZXR1cm5zIHRoZSBjdXJyZW50IDxpPnN0YXRlPC9pPi4KCQkJPC9kZD4KCQkJPGR0Pm9wPC9kdD4KCQkJPGRkPgoJCQkJQSBiaW5hcnkgb3BlcmF0aW9uIG9mIHRoZSBmb3JtIDxpPm9wPC9pPig8aT5kPC9pPiwgPGk+c3RhdGU8L2k+KS4mbmJzcDsKCQkJCVRoaXMgb3BlcmF0aW9uIGlzIGV4cGFuZGVkIGJ5IDxiPkJPT1NUX1BQX1dISUxFPC9iPiB3aXRoIHRoZSBuZXh0IGF2YWlsYWJsZQoJCQkJaXRlcmF0aW9uIDxpPmQ8L2k+IGFuZCB0aGUgY3VycmVudCA8aT5zdGF0ZTwvaT4uJm5ic3A7CgkJCQlUaGlzIG1hY3JvIGlzIHJlcGVhdGVkbHkgYXBwbGllZCB0byB0aGUgPGk+c3RhdGU8L2k+LCBlYWNoIHRpbWUgcHJvZHVjaW5nIGEgbmV3IDxpPnN0YXRlPC9pPiwgdW50aWwgPGk+cHJlZDwvaT4gcmV0dXJucyA8aT4wPC9pPi4KCQkJPC9kZD4KCQkJPGR0PnN0YXRlPC9kdD4KCQkJPGRkPgoJCQkJVGhlIGluaXRpYWwgc3RhdGUuJm5ic3A7CgkJCQlPZnRlbiB0aGlzIGFyZ3VtZW50IGlzIGEgPGk+dHVwbGU8L2k+LgoJCQk8L2RkPgoJCTwvZGw+Cgk8aDQ+UmVtYXJrczwvaDQ+CgkJPGRpdj4KCQkJVGhpcyBtYWNybyBpdGVyYXRlcyA8aT5vcDwvaT4oPGk+ZDwvaT4sIDxpPnN0YXRlPC9pPikgd2hpbGUgPGk+cHJlZDwvaT4oPGk+ZDwvaT4sIDxpPnN0YXRlPC9pPikgaXMgbm9uLXplcm8uJm5ic3A7CgkJCUluIG90aGVyIHdvcmRzIGV4cGFuZHMgdG86CgkJCTxkaXY+CgkJCQk8aT5vcDwvaT4oPGk+ZDwvaT4sIC4uLiA8aT5vcDwvaT4oPGk+ZDwvaT4sIDxpPm9wPC9pPig8aT5kPC9pPiwgPGk+c3RhdGU8L2k+KSkgLi4uICkuCgkJCTwvZGl2PgoJCTwvZGl2PgoJCTxkaXY+CgkJCVRoZSA8aT5kPC9pPiB2YWx1ZSB0aGF0IGlzIHBhc3NlZCB0byBib3RoIDxpPnByZWQ8L2k+IGFuZCA8aT5vcDwvaT4gcmVwcmVzZW50cyB0aGUgbmV4dCBhdmFpbGFibGUgaXRlcmF0aW9uLiZuYnNwOwoJCQlPdGhlciBtYWNyb3MgdGhhdCBoYXZlIDxiPl9EPC9iPiBzdWZmaXggdmFyaWFudHMgaW50ZXJuYWxseSB1c2UgPGI+Qk9PU1RfUFBfV0hJTEU8L2I+LS1mb3IgZXhhbXBsZSwgPGI+Qk9PU1RfUFBfQUREPC9iPiBhbmQgPGI+Qk9PU1RfUFBfQUREX0Q8L2I+LiZuYnNwOwoJCQlVc2luZyB0aGVzZSA8Yj5fRDwvYj4gdmVyc2lvbnMgaXMgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IHBhc3NpbmcgdGhlIDxpPmQ8L2k+IHZhbHVlICh0aGF0IHBhc3NlZCB0byA8aT5wcmVkPC9pPiBvciA8aT5vcDwvaT4pIHRvIHRoZXNlIG1hY3JvcyBhbGxvd3MgdGhlbSB0byByZWVudGVyIDxiPkJPT1NUX1BQX1dISUxFPC9iPiB3aXRoIG1heGltdW0gZWZmaWNpZW5jeS4KCQk8L2Rpdj4KCQk8ZGl2PgoJCQlUbyBkaXJlY3RseSB1c2UgdGhpcyA8aT5kPC9pPiB2YWx1ZSwgcmF0aGVyIHRoYW4gc2ltcGx5IHBhc3NpbmcgaXQgdG8gYW5vdGhlciBtYWNybywgc2VlIDxiPkJPT1NUX1BQX1dISUxFXzxpPmQ8L2k+PC9iPi4KCQk8L2Rpdj4KCQk8ZGl2PgoJCQlQcmV2aW91c2x5LCB0aGlzIG1hY3JvIGNvdWxkIG5vdCBiZSB1c2VkIHJlY3Vyc2l2ZWx5IGluc2lkZSA8Yj5CT09TVF9QUF9XSElMRTwvYj4uJm5ic3A7CgkJCVRoaXMgbGltaXRhdGlvbiBubyBsb25nZXIgZXhpc3RzLCBhcyB0aGUgbGlicmFyeSBjYW4gYXV0b21hdGljYWxseSBkZXRlY3QgdGhlIG5leHQgYXZhaWxhYmxlIGl0ZXJhdGlvbi4KCQk8L2Rpdj4KCTxoND5TZWUgQWxzbzwvaDQ+CgkJPHVsPgoJCQk8bGk+PGEgaHJlZj0ibGltaXRfbWFnLmh0bWwiPkJPT1NUX1BQX0xJTUlUX01BRzwvYT48L2xpPgoJCQk8bGk+PGEgaHJlZj0id2hpbGVfZC5odG1sIj5CT09TVF9QUF9XSElMRV88aT5kPC9pPjwvYT48L2xpPgoJCTwvdWw+Cgk8aDQ+UmVxdWlyZW1lbnRzPC9oND4KCQk8ZGl2PgoJCQk8Yj5IZWFkZXI6PC9iPiAmbmJzcDs8YSBocmVmPSIuLi9oZWFkZXJzL2NvbnRyb2wvd2hpbGUuaHRtbCI+Jmx0O2Jvb3N0L3ByZXByb2Nlc3Nvci9jb250cm9sL3doaWxlLmhwcCZndDs8L2E+CgkJPC9kaXY+Cgk8aDQ+U2FtcGxlIENvZGU8L2g0Pgo8ZGl2PjxwcmU+CiNpbmNsdWRlICZsdDs8YSBocmVmPSIuLi9oZWFkZXJzL2FyaXRobWV0aWMvYWRkLmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci9hcml0aG1ldGljL2FkZC5ocHA8L2E+Jmd0OwojaW5jbHVkZSAmbHQ7PGEgaHJlZj0iLi4vaGVhZGVycy9jb250cm9sL3doaWxlLmh0bWwiPmJvb3N0L3ByZXByb2Nlc3Nvci9jb250cm9sL3doaWxlLmhwcDwvYT4mZ3Q7CiNpbmNsdWRlICZsdDs8YSBocmVmPSIuLi9oZWFkZXJzL3R1cGxlL2VsZW0uaHRtbCI+Ym9vc3QvcHJlcHJvY2Vzc29yL3R1cGxlL2VsZW0uaHBwPC9hPiZndDsKCiNkZWZpbmUgUFJFRChuLCBzdGF0ZSkgPGEgaHJlZj0idHVwbGVfZWxlbS5odG1sIj5CT09TVF9QUF9UVVBMRV9FTEVNPC9hPigyLCAxLCBzdGF0ZSkKCiNkZWZpbmUgT1AoZCwgc3RhdGUpIFwKICAgT1BfRCggXAogICAgICBkLCBcCiAgICAgIDxhIGhyZWY9InR1cGxlX2VsZW0uaHRtbCI+Qk9PU1RfUFBfVFVQTEVfRUxFTTwvYT4oMiwgMCwgc3RhdGUpLCBcCiAgICAgIDxhIGhyZWY9InR1cGxlX2VsZW0uaHRtbCI+Qk9PU1RfUFBfVFVQTEVfRUxFTTwvYT4oMiwgMSwgc3RhdGUpIFwKICAgKSBcCiAgIC8qKi8KCiNkZWZpbmUgT1BfRChkLCByZXMsIGMpIFwKICAgKCBcCiAgICAgIDxhIGhyZWY9ImFkZF9kLmh0bWwiPkJPT1NUX1BQX0FERF9EPC9hPiggXAogICAgICAgICBkLCBcCiAgICAgICAgIHJlcywgXAogICAgICAgICA8YSBocmVmPSJkZWMuaHRtbCI+Qk9PU1RfUFBfREVDPC9hPihjKSBcCiAgICAgICksIFwKICAgICAgPGEgaHJlZj0iZGVjLmh0bWwiPkJPT1NUX1BQX0RFQzwvYT4oYykgXAogICApIFwKICAgLyoqLwoKI2RlZmluZSBTVU1NQVRJT04obikgXAogICA8YSBocmVmPSJ0dXBsZV9lbGVtLmh0bWwiPkJPT1NUX1BQX1RVUExFX0VMRU08L2E+KCBcCiAgICAgIDIsIDAsIFwKICAgICAgPGEgaHJlZj0id2hpbGUuaHRtbCI+Qk9PU1RfUFBfV0hJTEU8L2E+KFBSRUQsIE9QLCAobiwgbikpIFwKICAgKSBcCiAgIC8qKi8KClNVTU1BVElPTigzKSAvLyBleHBhbmRzIHRvIDYKU1VNTUFUSU9OKDQpIC8vIGV4cGFuZHMgdG8gMTAKPC9wcmU+PC9kaXY+Cgk8aHIgc2l6ZT0iMSI+Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMHB4OyI+CgkJPGk+qSBDb3B5cmlnaHQgPGEgaHJlZj0iaHR0cDovL3d3dy5ob3VzZW1hcnF1ZS5jb20iIHRhcmdldD0iX3RvcCI+SG91c2VtYXJxdWUgT3k8L2E+IDIwMDI8L2k+CgkJPC9icj48aT6pIENvcHlyaWdodCBQYXVsIE1lbnNvbmlkZXMgMjAwMjwvaT4KCTwvZGl2PgoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDBweDsiPgoJCTxwPjxzbWFsbD5EaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUKCQlhY2NvbXBhbnlpbmcgZmlsZSA8YSBocmVmPSIuLi8uLi8uLi8uLi9MSUNFTlNFXzFfMC50eHQiPkxJQ0VOU0VfMV8wLnR4dDwvYT4gb3IKCQljb3B5IGF0IDxhIGhyZWY9CgkJImh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCI+d3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQ8L2E+KTwvc21hbGw+PC9wPgoJPC9kaXY+CjwvYm9keT4KPC9odG1sPgo=