PGh0bWw+CjxoZWFkPgoJPHRpdGxlPmluY29tcGF0aWJsZS5odG1sPC90aXRsZT4KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3N0eWxlcy5jc3MiPgo8L2hlYWQ+Cjxib2R5PgoJPGg0PkluY29tcGF0aWJpbGl0aWVzPC9oND4KCTxkaXY+CgkJVGhlcmUgYXJlIHNldmVyYWwgaW5jb21wYXRpYmlsaXRpZXMgd2l0aCB0aGUgcHJldmlvdXMgQm9vc3QgcmVsZWFzZSAoMS4yOCkuJm5ic3A7CgkJVGhlc2UgZmFsbCBpbnRvIHJvdWdobHkgdGhyZWUgY2F0ZWdvcmllczombmJzcDsKCTwvZGl2PgoJPHVsPgoJCTxsaT50aGUgaG9yaXpvbnRhbCByZXBldGl0aW9uIHByaW1pdGl2ZXMgYmFzZWQgb24gPGI+Qk9PU1RfUFBfUkVQRUFUPC9iPjwvbGk+CgkJPGxpPnRoZSByZWVudHJhbmN5IHN5bnRheDwvbGk+CgkJPGxpPjxpPmxpc3Q8L2k+IGZvbGRpbmc8L2xpPgoJPC91bD4KCTxoND5SZXBldGl0aW9uIFRhcmdldHM8L2g0PgoJPGRpdj4KCQlGaXJzdCwgYW5kIHByb2JhYmx5IHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQsIGlzIHRoZSB0YXJnZXQgbWFjcm9zIHBhc3NlZCBpbnRvIDxiPkJPT1NUX1BQX1JFUEVBVDwvYj4gYW5kIHRoZSBob3Jpem9udGFsIHJlcGV0aXRpb24gY29udHJ1Y3RzIHRoYXQgdXNlIDxiPkJPT1NUX1BQX1JFUEVBVDwvYj4uJm5ic3A7CgkJVGhpcyBpbmNsdWRlcyBhbGwgb2YgdGhlIDxiPkJPT1NUX1BQX1JFUEVBVF88L2I+KiBwcmltaXRpdmVzIGFuZCBhbGwgb2YgdGhlIDxiPkJPT1NUX1BQX0VOVU1fPC9iPiogcHJpbWl0aXZlcyB0aGF0IHJlcXVpcmUgYSB0YXJnZXQgbWFjcm8uCgk8L2Rpdj4KCTxkaXY+CgkJVGhlIGluY29tcGF0aWJsaXR5IGlzIHRyaXZpYWwsIGJ1dCBpdCB3aWxsIHJlcXVpcmUgdGhhdCB0aGUgc291cmNlIGJlIHVwZGF0ZWQuJm5ic3A7Cgk8L2Rpdj4KCTxkaXY+CgkJVGhlc2UgdGFyZ2V0IG1hY3JvcyBtdXN0IG5vdyBleGNlcHQgYSA8aT50aGlyZDwvaT4gcGFyYW1ldGVyLiZuYnNwOwoJCVRoaXMgZXh0cmEgcGFyYW1ldGVyIGJlY29tZXMgdGhlIDxpPmZpcnN0PC9pPiBwYXJhbWV0ZXIgaW4gZXZlcnkgdGFyZ2V0IG1hY3JvLiZuYnNwOwoJCUl0IHJlcHJlc2VudHMgdGhlIG5leHQgcmVwZXRpdGlvbiBkaW1lbnNpb24gYW5kIGJyaW5ncyA8Yj5CT09TVF9QUF9SRVBFQVQ8L2I+IGlubGluZSB3aXRoIHJlc3Qgb2YgdGhlIGxpYnJhcnkuJm5ic3A7Cgk8L2Rpdj4KCTxkaXY+CgkJU28sIHdoYXQgb25jZSB3YXM6Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9ImNvZGUiPgoJCSNkZWZpbmUgPGk+bWFjcm88L2k+KDxpPm48L2k+LCA8aT5kYXRhPC9pPikgLi4uPGJyPgoJCTxiPkJPT1NUX1BQX1JFUEVBVDwvYj4oPGk+NTwvaT4sIDxpPm1hY3JvPC9pPiwgPGk+ZGF0YTwvaT4pCgk8L2Rpdj4KCTxkaXY+CgkJLi4uaXMgbm93OgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJjb2RlIj4KCQkjZGVmaW5lIDxpPm1hY3JvPC9pPig8aT56PC9pPiwgPGk+bjwvaT4sIDxpPmRhdGE8L2k+KSAuLi48YnI+CgkJPGI+Qk9PU1RfUFBfUkVQRUFUPC9iPig8aT41PC9pPiwgPGk+bWFjcm88L2k+LCA8aT5kYXRhPC9pPikKCTwvZGl2PgoJPGRpdj4KCQlUaGlzIHBhcmFtZXRlciBjYW4gYmUgdXNlZCBmb3IgaGlnaGx5IGVmZmljaWVudCByZWVudHJhbmNlIGludG8gdGhlIDxiPkJPT1NUX1BQX1JFUEVBVDwvYj4gbWVjaGFuaXNtLiZuYnNwOwoJCUhvd2V2ZXIsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gdXNlIGl0IGFzIHRoZSBsaWJyYXJ5IGNhbiBhdXRvbWF0aWNhbGx5IGRldGVjdCB0aGUgbmV4dCBhdmFpbGFibGUgcmVwZXRpdGlvbiBkaW1lbnNpb24uCgk8L2Rpdj4KCTxoND5EaW1lbnNpb25hbCBPcmRlcmluZzwvaDQ+Cgk8ZGl2PgoJCUJlY2F1c2Ugb2YgdGhpcyBkZXRlY3Rpb24sIGhvd2V2ZXIsIGl0IGlzIHVuc2FmZSB0byB1c2UgPGI+Qk9PU1RfUFBfUkVQRUFUXzFTVDwvYj4sIDxiPkJPT1NUX1BQX1JFUEVBVF8yTkQ8L2I+LCBhbmQgPGI+Qk9PU1RfUFBfUkVQRUFUXzNSRDwvYj4gb3V0IG9mIG9yZGVyLiZuYnNwOwoJCVRoZXNlIG1hY3JvcyBieXBhc3MgdGhlIDxpPmF1dG9tYXRpYy1yZWN1cnNpb248L2k+IG1lY2hhbmlzbSwgYW5kIHRoZSA8aT5hdXRvbWF0aWMtcmVjdXJzaW9uPC9pPiBtZWNoYW5pc20gcmVsaWVzIG9uIG1hY3JvcyBiZWluZyB1c2VkIGluIHRoZSBwcm9wZXIgb3JkZXIuJm5ic3A7CgkJVG8gY2xhcmlmeSwgaWYgeW91IHVzZSB0aGVzZSBieXBhc3MgbWFjcm9zLCB0aGUgb3V0ZXItbW9zdCByZXBldGl0aW9uIDxpPm11c3Q8L2k+IGJlIDxiPkJPT1NUX1BQX1JFUEVBVF8xU1Q8L2I+LCB0aGVuIDxiPkJPT1NUX1BQX1JFUEVBVF8yTkQ8L2I+LCBhbmQgZmluYWxseSA8Yj5CT09TVF9QUF9SRVBFQVRfM1JEPC9iPi4mbmJzcDsKCQlBbnkgb3RoZXIgdXNhZ2UgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbGlicmFyeS4mbmJzcDsKCQlTb21ldGltZXMgaXQgbWF5IHdvcmssIGFuZCBvdGhlciB0aW1lcyBpdCB3b24ndC4KCTwvZGl2PgoJPGg0PlJlZW50cmFuY3kgU3ludGF4PC9oND4KCTxkaXY+CgkJPGk+QXV0b21hdGljLXJlY3Vyc2lvbjwvaT4gYnJpbmdzIHdpdGggaXQgYW5vdGhlciBpc3N1ZSBhcyB3ZWxsLiZuYnNwO1ByZXZpb3VzbHksIHRoZSByZWVudHJhbmN5IHN5bnRheCBmb3IgPGI+Qk9PU1RfUFBfV0hJTEU8L2I+IChhbmQgc2ltaWxhcmx5IGZvciA8Yj5CT09TVF9QUF9GT1I8L2I+KSB3YXM6Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9ImNvZGUiPgoJCTxiPkJPT1NUX1BQX1dISUxFPC9iPiAjIyA8aT5kPC9pPig8aT5wcmVkPC9pPiwgPGk+b3A8L2k+LCA8aT5zdGF0ZTwvaT4pCgk8L2Rpdj4KCTxkaXY+CgkJLi4ub3I6Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9ImNvZGUiPgoJCTxiPkJPT1NUX1BQX0NBVDwvYj4oPGI+Qk9PU1RfUFBfV0hJTEU8L2I+LCA8aT5kPC9pPikoPGk+cHJlZDwvaT4sIDxpPm9wPC9pPiwgPGk+c3RhdGU8L2k+KQoJPC9kaXY+Cgk8ZGl2PgoJCVVuZGVyIHRoZSA8aT5hdXRvbWF0aWMtcmVjdXJzaW9uPC9pPiBtb2RlbCwgdGhlIDxiPkJPT1NUX1BQX0NBVDwvYj4gdmVyc2lvbiBicmVha3MuJm5ic3A7CgkJVGhpcyBpcyBiZWNhdXNlIDxiPkJPT1NUX1BQX0NBVDwvYj4gYWxsb3dzIGl0cyBhcmd1bWVudHMgdG8gZXhwYW5kIHByaW9yIHRvIGNvbmNhdGVuYXRpb24sCgkJYW5kIDxiPkJPT1NUX1BQX1dISUxFPC9iPiBpcyBhIG1hY3JvIHRoYXQgZXhwYW5kcyB3aXRob3V0IGFyZ3VtZW50cy4mbmJzcDsKCQlUaGUgbGlicmFyeSBtYWtlcyBpdCBhcHBlYXIgdGhhdCBpdCB0YWtlcyB0aHJlZSBwYXJhbWV0ZXJzLCBidXQgdGhhdCBpcyB0aGUgdHJpY2sgb2YgPGk+YXV0b21hdGljLXJlY3Vyc2lvbjwvaT4uJm5ic3A7CgkJSXQgd29ya3Mgc2ltaWxhcmx5IHRvIHRoZSBmb2xsb3dpbmc6Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9ImNvZGUiPgoJCSNkZWZpbmUgQSh4LCB5KSAuLi48YnI+CgkJI2RlZmluZSBCIEE8YnI+CgkJLy8gLi4uPGJyPgoJCUIoMiwgMykKCTwvZGl2PgoJPGRpdj4KCQlUaGUgc3ludGF4IG1ha2VzIGl0IGxvb2sgbGlrZSB0aGUgPGk+QjwvaT4gbWFjcm8gYWJvdmUgdGFrZXMgdHdvIGFyZ3VtZW50cywgYnV0IGl0IGRvZXNuJ3QuJm5ic3A7CgkJVGhlIDxpPmF1dG9tYXRpYy1yZWN1cnNpb248L2k+IG1lY2hhbmlzbSB3b3JrcyBpbiB0aGlzIGZhc2hpb24sIGV4Y2VwdCB0aGF0IHRoZSAiPGk+QjwvaT4iIG1hY3JvIGRlZHVjZXMgdGhlIG5leHQgYXZhaWxhYmxlICI8aT5BPC9pPiIgbWFjcm8uCgk8L2Rpdj4KCTxkaXY+CgkJQmVjYXVzZSBzb21lIHByZXByb2Nlc3NvcnMgYXJlIHN0aWxsIHNsb3csIGRpcmVjdCByZWVudHJhbmN5IChzYW5zIDxpPmF1dG9tYXRpYy1yZWN1cnNpb248L2k+KSBpcyBzdGlsbCBuZWNlc3NhcnkgaW4gbm9uLXRyaXZpYWwgY2FzZXMuJm5ic3A7CgkJQ29uc2VxdWVudGx5LCB0aGUgbGlicmFyeSB1c2VzIGEgbmV3IHN5bnRheCB0byBoYW5kbGUgcmVlbnRyYW5jeToKCTwvZGl2PgoJPGRpdiBjbGFzcz0iY29kZSI+CgkJPGI+Qk9PU1RfUFBfRk9SXzwvYj4gIyMgPGk+cjwvaT4oPGk+c3RhdGU8L2k+LCA8aT5wcmVkPC9pPiwgPGk+b3A8L2k+LCA8aT5tYWNybzwvaT4pPGJyPgoJCTxiPkJPT1NUX1BQX1JFUEVBVF88L2I+ICMjIDxpPno8L2k+KDxpPmNvdW50PC9pPiwgPGk+bWFjcm88L2k+LCA8aT5kYXRhPC9pPik8YnI+CgkJPGI+Qk9PU1RfUFBfV0hJTEVfPC9iPiAjIyA8aT5kPC9pPig8aT5wcmVkPC9pPiwgPGk+b3A8L2k+LCA8aT5zdGF0ZTwvaT4pCgk8L2Rpdj4KCTxoND5Gb2xkaW5nPC9oND4KCTxkaXY+CgkJUHJldmlvdXNseSwgdGhlIDxiPkJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVDwvYj4gbWFjcm9zJyBhcmd1bWVudHMgd2VyZSB0aGUgcmV2ZXJzZSBvZiA8Yj5CT09TVF9QUF9MSVNUX0ZPTERfTEVGVDwvYj4uJm5ic3A7CgkJQWxzbywgdGhlIGFjY3VtdWxhdGlvbiBtYWNybyBwYXNzZWQgaW50byA8Yj5CT09TVF9QUF9MSVNUX0ZPTERfUklHSFQ8L2I+IHdhcyBjYWxsZWQgd2l0aCByZXZlcnNlZCBwYXJhbWV0ZXJzIGFzIHdlbGwuJm5ic3A7CgkJVGhpcyBkaXNjcmVwYW5jeSBoYXMgYmVlbiBlbGltaW5hdGVkLgoJPC9kaXY+Cgk8ZGl2PgoJCVRvIGlsbHVzdHJhdGUsIDxiPkJPT1NUX1BQX0xJU1RfRk9MRF9SSUdIVDwvYj4gdXNlZCB0byBiZSB1c2VkIGxpa2UgdGhpczoKCTwvZGl2PgoJPGRpdiBjbGFzcz0iY29kZSI+CgkJI2RlZmluZSA8aT5tYWNybzwvaT4oPGk+ZDwvaT4sIDx1PjxpPmVsZW08L2k+PC91PiwgPHU+PGk+c3RhdGU8L2k+PC91Pik8YnI+CgkJPGI+Qk9PU1RfUFBfTElTVF9GT0xEX1JJR0hUPC9iPig8aT5tYWNybzwvaT4sIDx1PjxpPmxpc3Q8L2k+PC91PiwgPHU+PGk+c3RhdGU8L2k+PC91PikKCTwvZGl2PgoJPGRpdj4KCQlUaGlzIHNpZ25hdHVyZSBoYXMgYmVlbiByZXBsYWNlZCBieS4uLgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJjb2RlIj4KCQkjZGVmaW5lIDxpPm1hY3JvPC9pPig8aT5kPC9pPiwgPHU+PGk+c3RhdGU8L2k+PC91PiwgPHU+PGk+ZWxlbTwvaT48L3U+KTxicj4KCQk8Yj5CT09TVF9QUF9MSVNUX0ZPTERfUklHSFQ8L2I+KDxpPm1hY3JvPC9pPiwgPHU+PGk+c3RhdGU8L2k+PC91PiwgPHU+PGk+bGlzdDwvaT48L3U+KQoJPC9kaXY+Cgk8aDQ+U3VtbWFyeTwvaDQ+Cgk8ZGl2PgoJCVRoZSBsaWJyYXJ5IGhhcyBtYW55IG5ldyBmZWF0dXJlcyBub3QgcHJlc2VudCBpbiB0aGUgMS4yOCByZWxlYXNlLCBhbmQgdGhpcyBsaXN0IGRvZXMgbm90IGF0dGVtcHQgdG8gZW51bWVyYXRlIHRoZW0uJm5ic3A7CgkJVGhpcyBpcyBzaW1wbHkgYSBsaXN0IG9mIHRoaW5ncyB0aGF0IDxpPm11c3Q8L2k+IGNoYW5nZSBmb3IgY29kZSB0byBiZSBjb21wYXRpYmxlIHdpdGggdGhpcyBuZXcgcmVsZWFzZS4KCTwvZGl2PgoJPGg0PlNlZSBBbHNvPC9oND4KCTx1bD4KCQk8bGk+PGEgaHJlZj0iLi4vcmVmL2Zvci5odG1sIj5CT09TVF9QUF9GT1I8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iLi4vcmVmL2xpc3RfZm9sZF9yaWdodC5odG1sIj5CT09TVF9QUF9MSVNUX0ZPTERfUklHSFQ8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iLi4vcmVmL3JlcGVhdC5odG1sIj5CT09TVF9QUF9SRVBFQVQ8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iLi4vcmVmL3doaWxlLmh0bWwiPkJPT1NUX1BQX1dISUxFPC9hPjwvbGk+Cgk8L3VsPgoJPGRpdiBjbGFzcz0ic2lnIj4tIFBhdWwgTWVuc29uaWRlczwvZGl2PgoJPGhyIHNpemU9IjEiPgoJPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDBweDsiPgoJCTxpPqkgQ29weXJpZ2h0IDxhIGhyZWY9Imh0dHA6Ly93d3cuaG91c2VtYXJxdWUuY29tIiB0YXJnZXQ9Il90b3AiPkhvdXNlbWFycXVlIE95PC9hPiAyMDAyPC9pPgoJCTwvYnI+PGk+qSBDb3B5cmlnaHQgUGF1bCBNZW5zb25pZGVzIDIwMDI8L2k+Cgk8L2Rpdj4KCTxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwcHg7Ij4KCQk8cD48c21hbGw+RGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlCgkJYWNjb21wYW55aW5nIGZpbGUgPGEgaHJlZj0iLi4vLi4vLi4vLi4vTElDRU5TRV8xXzAudHh0Ij5MSUNFTlNFXzFfMC50eHQ8L2E+IG9yCgkJY29weSBhdCA8YSBocmVmPQoJCSJodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQiPnd3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9hPik8L3NtYWxsPjwvcD4KCTwvZGl2Pgo8L2JvZHk+CjwvaHRtbD4K