PGh0bWw+CjxoZWFkPgoJPHRpdGxlPm1vdGl2YXRpb24uaHRtbDwvdGl0bGU+Cgk8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9zdHlsZXMuY3NzIj4KPC9oZWFkPgo8Ym9keT4KPGg0Pk1vdGl2YXRpb248L2g0Pgo8ZGl2PgoJVGhlIEMrKyBmdW5jdGlvbiBhbmQgdGVtcGxhdGUgcGFyYW1ldGVyIGxpc3RzIGFyZSBzcGVjaWFsIHN5bnRhY3RpYyBjb25zdHJ1Y3RzLCBhbmQgaXQgaXMgaW1wb3NzaWJsZSB0byBkaXJlY3RseQoJbWFuaXB1bGF0ZSBvciBnZW5lcmF0ZSB0aGVtIHVzaW5nIEMrKyBjb25zdHJ1Y3RzLiZuYnNwOwoJVGhpcyBsZWFkcyB0byB1bm5lY2Vzc2FyeSBjb2RlIHJlcGV0aXRpb24uCjwvZGl2Pgo8ZGl2PgoJQ29uc2lkZXIgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSA8Y29kZT5pc19mdW5jdGlvbiZsdDsmZ3Q7PC9jb2RlPiBtZXRhZnVuY3Rpb24gaXMgQm9vc3QuJm5ic3A7CglUaGUgaW1wbGVtZW50YXRpb24gdXNlcyBhbiBvdmVybG9hZGVkIDxjb2RlPmlzX2Z1bmN0aW9uX3Rlc3RlcigpPC9jb2RlPiBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgZm9yIHRlc3RpbmcgaWYgYSB0eXBlIGlzIGNvbnZlcnRpYmxlCgl0byBhIHBvaW50ZXIgdG8gYSBmdW5jdGlvbi4mbmJzcDsKCUJlY2F1c2Ugb2YgdGhlIHNwZWNpYWwgdHJlYXRtZW50IG9mIHBhcmFtZXRlciBsaXN0cywgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGRpcmVjdGx5IG1hdGNoIGEgZnVuY3Rpb24gd2l0aCBhbiBhcmJpdHJhcnkgcGFyYW1ldGVyIGxpc3QuJm5ic3A7CglJbnN0ZWFkLCB0aGUgPGNvZGU+aXNfZnVuY3Rpb25fdGVzdGVyKCk8L2NvZGU+IG11c3QgYmUgb3ZlcmxvYWRlZCBmb3IgZXZlcnkgZGlzdGluY3QgbnVtYmVyIG9mIHBhcmFtZXRlcnMgdGhhdCBpcyB0byBiZSBzdXBwb3J0ZWQuJm5ic3A7CglGb3IgZXhhbXBsZToKPC9kaXY+CjxkaXYgY2xhc3M9ImNvZGUiPjxwcmU+CnRlbXBsYXRlJmx0O2NsYXNzIFImZ3Q7Cnllc190eXBlIGlzX2Z1bmN0aW9uX3Rlc3RlcihSICgqKSgpKTsKCnRlbXBsYXRlJmx0O2NsYXNzIFIsIGNsYXNzIEEwJmd0Owp5ZXNfdHlwZSBpc19mdW5jdGlvbl90ZXN0ZXIoUiAoKikoQTApKTsKCnRlbXBsYXRlJmx0O2NsYXNzIFIsIGNsYXNzIEEwLCBjbGFzcyBBMSZndDsKeWVzX3R5cGUgaXNfZnVuY3Rpb25fdGVzdGVyKFIgKCopKEEwLCBBMSkpOwoKdGVtcGxhdGUmbHQ7Y2xhc3MgUiwgY2xhc3MgQTAsIGNsYXNzIEExLCBjbGFzcyBBMiZndDsKeWVzX3R5cGUgaXNfZnVuY3Rpb25fdGVzdGVyKFIgKCopKEEwLCBBMSwgQTIpKTsKCi8vIC4uLgo8L3ByZT48L2Rpdj4KPGRpdj4KCVRoZSBuZWVkIGZvciB0aGlzIGtpbmQgb2YgcmVwZXRpdGlvbiBvY2N1cnMgcGFydGljdWxhcmx5IGZyZXF1ZW50bHkgd2hpbGUgaW1wbGVtZW50aW5nIGdlbmVyaWMgY29tcG9uZW50cyBvciBtZXRhcHJvZ3JhbW1pbmcgZmFjaWxpdGllcywKCWJ1dCB0aGUgbmVlZCBhbHNvIG1hbmlmZXN0cyBpdHNlbGYgaW4gbWFueSBmYXIgc2ltcGxlciBzaXR1YXRpb25zLgo8L2Rpdj4KPGg0PlR5cGljYWwgU29sdXRpb25zPC9oND4KPGRpdj4KCVR5cGljYWxseSB0aGUgcmVwZXRpdGlvbiBpcyBkb25lIG1hbnVhbGx5LiZuYnNwOwoJTWFudWFsIGNvZGUgcmVwZXRpdGlvbiBpcyBoaWdobHkgdW5wcm9kdWN0aXZlLCBidXQgc29tZXRpbWVzIG1vcmUgcmVhZGFibGUgdG8gdGhlIHVudHJhaW5lZCBleWUuCjwvZGl2Pgo8ZGl2PgoJQW5vdGhlciBzb2x1dGlvbiBpcyB0byB3cml0ZSBhbiBleHRlcm5hbCBwcm9ncmFtIGZvciBnZW5lcmF0aW5nIHRoZSByZXBlYXRlZCBjb2RlIG9yIHVzZSBzb21lIG90aGVyIGV4dHJhIGxpbmd1aXN0aWMgbWVhbnMgc3VjaCBhcyBhIHNtYXJ0IGVkaXRvci4mbmJzcDsKCVVuZm9ydHVuYXRlbHksIHVzaW5nIGV4dGVybmFsIGNvZGUgZ2VuZXJhdG9ycyBoYXMgbWFueSBkaXNhZHZhbnRhZ2VzOgoJPHVsPgoJCTxsaT5Xcml0aW5nIHRoZSBnZW5lcmF0b3IgdGFrZXMgdGltZS4mbmJzcDsgKFRoaXMgY291bGQgYmUgaGVscGVkIGJ5IHVzaW5nIGEgc3RhbmRhcmQgZ2VuZXJhdG9yLik8L2xpPgoJCTxsaT5JdCBpcyBubyBsb25nZXIgcHJvZHVjdGl2ZSB0byBtYW5pcHVsYXRlIEMrKyBjb2RlIGRpcmVjdGx5LjwvbGk+CgkJPGxpPkludm9raW5nIHRoZSBnZW5lcmF0b3IgbWF5IGJlIGRpZmZpY3VsdC48L2xpPgoJCTxsaT5BdXRvbWF0aW5nIHRoZSBpbnZvY2F0aW9uIG9mIHRoZSBnZW5lcmF0b3IgY2FuIGJlIGRpZmZpY3VsdCBpbiBjZXJ0YWluIGVudmlyb25tZW50cy4mbmJzcDsgKEF1dG9tYXRpYyBpbnZvY2F0aW9uIGlzIGRlc2lyYWJsZSBmb3IgYWN0aXZlIGxpYnJhcmllcy4pPC9saT4KCQk8bGk+UG9ydGluZyBhbmQgZGlzdHJpYnV0aW5nIHRoZSBnZW5lcmF0b3IgbWF5IGJlIGRpZmZpY3VsdCBvciBzaW1wbHkgdGFrZXMgcHJlY2lvdXMgdGltZS48L2xpPgoJPC91bD4KPC9kaXY+CjxoND5XaGF0IGFib3V0IHRoZSBwcmVwcm9jZXNzb3I/PC9oND4KPGRpdj4KCUJlY2F1c2UgQysrIGNvbWVzIHdpdGggYSBwcmVwcm9jZXNzb3IsIG9uZSB3b3VsZCBhc3N1bWUgdGhhdCBpdCB3b3VsZCBzdXBwb3J0IHRoZXNlIGtpbmRzIG9mIG5lZWRzIGRpcmVjdGx5LiZuYnNwOwoJVXNpbmcgdGhlIHByZXByb2Nlc3NvciBpbiB0aGlzIGNhc2UgaXMgaGlnaGx5IGRlc2lyYWJsZSBiZWNhdXNlOgoJPHVsPgoJCTxsaT5UaGUgcHJlcHJvY2Vzc29yIGlzIGhpZ2hseSBwb3J0YWJsZS48L2xpPgoJCTxsaT5UaGUgcHJlcHJvY2Vzc29yIGlzIGF1dG9tYXRpY2FsbHkgaW52b2tlZCBhcyBwYXJ0IG9mIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLjwvbGk+CgkJPGxpPlByZXByb2Nlc3NvciBtZXRhY29kZSBjYW4gYmUgZGlyZWN0bHkgZW1iZWRkZWQgaW50byB0aGUgQysrIHNvdXJjZSBjb2RlLjwvbGk+CgkJPGxpPkNvbXBpbGVycyBnZW5lcmFsbHkgYWxsb3cgdmlld2luZyBvciBvdXRwdXR0aW5nIHRoZSBwcmVwcm9jZXNzZWQgY29kZSwgd2hpY2ggY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBvciB0byBjb3B5IGFuZCBwYXN0ZSB0aGUgZ2VuZXJhdGVkIGNvZGUuPC9saT4KCTwvdWw+CjwvZGl2Pgo8ZGl2PgoJTW9zdCB1bmZvcnR1bmF0ZWx5LCB0aGUgcHJlcHJvY2Vzc29yIGlzIGEgdmVyeSBsb3cgbGV2ZWwgcHJlcHJvY2Vzc29yIHRoYXQgc3BlY2lmaWNhbGx5IGRvZXMgbm90IHN1cHBvcnQgcmVwZXRpdGlvbiBvciByZWN1cnNpdmUgbWFjcm9zLiZuYnNwOwoJTGlicmFyeSBzdXBwb3J0IGlzIG5lZWRlZCEKPC9kaXY+CjxkaXY+Cgk8aT5Gb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdGhlIGNhcGFiaWxpdGllcyBhbmQgbGltaXRhdGlvbnMgb2YgdGhlIHByZXByb2Nlc3NvciwgcGxlYXNlIHJlZmVyIHRvIHRoZSBDKysgc3RhbmRhcmQgPGEgaHJlZj0iLi4vYmlibGlvZ3JhcGh5Lmh0bWwjc3RkIj5bU3RkXTwvYT4uPC9pPgo8L2Rpdj4KPGg0PlRoZSBNb3RpdmF0aW9uIEV4YW1wbGUgUmV2aXNpdGVkPC9oND4KPGRpdj4KCVVzaW5nIHRoZSBwcmltaXRpdmVzIG9mIHRoZSBwcmVwcm9jZXNzb3IgbGlicmFyeSwgdGhlIDxjb2RlPmlzX2Z1bmN0aW9uX3Rlc3RlcigpPC9jb2RlPidzIGNvdWxkIGJlIGltcGxlbWVudGVkIGxpa2UgdGhpczoKPC9kaXY+CjxkaXYgY2xhc3M9ImNvZGUiPjxwcmU+CiNpbmNsdWRlICZsdDtib29zdC9wcmVwcm9jZXNzb3IvYXJpdGhtZXRpYy9pbmMuaHBwJmd0OwojaW5jbHVkZSAmbHQ7Ym9vc3QvcHJlcHJvY2Vzc29yL3B1bmN0dWF0aW9uL2NvbW1hX2lmLmhwcCZndDsKI2luY2x1ZGUgJmx0O2Jvb3N0L3ByZXByb2Nlc3Nvci9yZXBldGl0aW9uLmhwcCZndDsKCiNpZm5kZWYgTUFYX0lTX0ZVTkNUSU9OX1RFU1RFUl9QQVJBTVMKI2RlZmluZSBNQVhfSVNfRlVOQ1RJT05fVEVTVEVSX1BBUkFNUyAxNQojZW5kaWYKCiNkZWZpbmUgSVNfRlVOQ1RJT05fVEVTVEVSKFosIE4sIF8pIFwKICAgdGVtcGxhdGUmbHQ7Y2xhc3MgUiBCT09TVF9QUF9DT01NQV9JRihOKSBCT09TVF9QUF9FTlVNX1BBUkFNUyhOLCBjbGFzcyBBKSZndDsgXAogICB5ZXNfdHlwZSBpc19mdW5jdGlvbl90ZXN0ZXIoUiAoKikoQk9PU1RfUFBfRU5VTV9QQVJBTVMoTiwgQSkpKTsgXAogICAvKiovCgpCT09TVF9QUF9SRVBFQVQoQk9PU1RfUFBfSU5DKE1BWF9JU19GVU5DVElPTl9URVNURVJfUEFSQU1TKSwgSVNfRlVOQ1RJT05fVEVTVEVSLCBfKQoKI3VuZGVmIElTX0ZVTkNUSU9OX1RFU1RFUgo8L3ByZT48L2Rpdj4KPGRpdj4KCUluIG9yZGVyIHRvIGNoYW5nZSB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnVuY3Rpb24gcGFyYW1ldGVycyBzdXBwb3J0ZWQsIHlvdSBub3cgc2ltcGx5IGNoYW5nZSB0aGUgPGNvZGU+TUFYX0lTX0ZVTkNUSU9OX1RFU1RFUl9QQVJBTVM8L2NvZGU+IGRlZmluaXRpb24gYW5kIHJlY29tcGlsZS4KPC9kaXY+CjxociBzaXplPSIxIj4KPGRpdiBzdHlsZT0ibWFyZ2luLWxlZnQ6IDBweDsiPgoJPGk+qSBDb3B5cmlnaHQgPGEgaHJlZj0iaHR0cDovL3d3dy5ob3VzZW1hcnF1ZS5jb20iIHRhcmdldD0iX3RvcCI+SG91c2VtYXJxdWUgT3k8L2E+IDIwMDI8L2k+CjwvZGl2Pgo8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMHB4OyI+ClBlcm1pc3Npb24gdG8gY29weSwgdXNlLCBtb2RpZnksIHNlbGwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBkb2N1bWVudCBpcyBncmFudGVkIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMuJm5ic3A7ClRoaXMgZG9jdW1lbnQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eSBhbmQgd2l0aCBubyBjbGFpbSBhcyB0byBpdHMgc3VpdGFiaWxpdHkgZm9yIGFueSBwdXJwb3NlLgo8L2Rpdj4KCTxociBzaXplPSIxIj4KCTxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwcHg7Ij4KCQk8aT6pIENvcHlyaWdodCA8YSBocmVmPSJodHRwOi8vd3d3LmhvdXNlbWFycXVlLmNvbSIgdGFyZ2V0PSJfdG9wIj5Ib3VzZW1hcnF1ZSBPeTwvYT4gMjAwMjwvaT4KCQk8L2JyPjxpPqkgQ29weXJpZ2h0IFBhdWwgTWVuc29uaWRlcyAyMDAyPC9pPgoJPC9kaXY+Cgk8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDogMHB4OyI+CgkJPHA+PHNtYWxsPkRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZQoJCWFjY29tcGFueWluZyBmaWxlIDxhIGhyZWY9Ii4uLy4uLy4uLy4uL0xJQ0VOU0VfMV8wLnR4dCI+TElDRU5TRV8xXzAudHh0PC9hPiBvcgoJCWNvcHkgYXQgPGEgaHJlZj0KCQkiaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0Ij53d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dDwvYT4pPC9zbWFsbD48L3A+Cgk8L2Rpdj4KPC9ib2R5Pgo8L2h0bWw+Cg==