LyogdWlzdGhyZWFkLmgKICoKICogQ29weXJpZ2h0IKkgMjAxMCAtIDIwMTMgVU5JU1lTIENPUlBPUkFUSU9OCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAogKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IKICogTk9OIElORlJJTkdFTUVOVC4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUKICogZGV0YWlscy4KICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qIFVuaXN5cyB0aHJlYWQgdXRpbGl0aWVzIGhlYWRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCiNpZm5kZWYgX19VSVNUSFJFQURfSF9fCiNkZWZpbmUgX19VSVNUSFJFQURfSF9fCgoKI2luY2x1ZGUgImxpbnV4L2NvbXBsZXRpb24uaCIKCnN0cnVjdCB1aXN0aHJlYWRfaW5mbyB7CglzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CglpbnQgaWQ7CglpbnQgc2hvdWxkX3N0b3A7CglzdHJ1Y3QgY29tcGxldGlvbiBoYXNfc3RvcHBlZDsKfTsKCgovKiByZXR1cm5zIDAgZm9yIGZhaWx1cmUsIDEgZm9yIHN1Y2Nlc3MgKi8KaW50IHVpc3RocmVhZF9zdGFydCgKCXN0cnVjdCB1aXN0aHJlYWRfaW5mbyAqdGhyaW5mbywKCWludCAoKnRocmVhZGZuKSh2b2lkICopLAoJdm9pZCAqdGhyY29udGV4dCwKCWNoYXIgKm5hbWUpOwoKdm9pZCB1aXN0aHJlYWRfc3RvcChzdHJ1Y3QgdWlzdGhyZWFkX2luZm8gKnRocmluZm8pOwoKI2VuZGlmIC8qIF9fVUlTVEhSRUFEX0hfXyAqLwo=