LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiBpMmMtYWxnby1iaXQuaCBpMmMgZHJpdmVyIGFsZ29yaXRobXMgZm9yIGJpdC1zaGlmdCBhZGFwdGVycyAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICBDb3B5cmlnaHQgKEMpIDE5OTUtOTkgU2ltb24gRy4gVm9nbAoKICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLiAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKiBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt59nN0aSBN5Gxra2kgPGttYWxra2lAY2MuaHV0LmZpPiBhbmQgZXZlbgogICBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+ICovCgojaWZuZGVmIF9MSU5VWF9JMkNfQUxHT19CSVRfSAojZGVmaW5lIF9MSU5VWF9JMkNfQUxHT19CSVRfSAoKLyogLS0tIERlZmluZXMgZm9yIGJpdC1hZGFwdGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JKi8KLyoKICogVGhpcyBzdHJ1Y3QgY29udGFpbnMgdGhlIGh3LWRlcGVuZGVudCBmdW5jdGlvbnMgb2YgYml0LXN0eWxlIGFkYXB0ZXJzIHRvCiAqIG1hbmlwdWxhdGUgdGhlIGxpbmUgc3RhdGVzLCBhbmQgdG8gaW5pdCBhbnkgaHctc3BlY2lmaWMgZmVhdHVyZXMuIFRoaXMgaXMKICogb25seSB1c2VkIGlmIHlvdSBoYXZlIG1vcmUgdGhhbiBvbmUgaHctdHlwZSBvZiBhZGFwdGVyIHJ1bm5pbmcuCiAqLwpzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgewoJdm9pZCAqZGF0YTsJCS8qIHByaXZhdGUgZGF0YSBmb3IgbG93bGV2ZWwgcm91dGluZXMgKi8KCXZvaWQgKCpzZXRzZGEpICh2b2lkICpkYXRhLCBpbnQgc3RhdGUpOwoJdm9pZCAoKnNldHNjbCkgKHZvaWQgKmRhdGEsIGludCBzdGF0ZSk7CglpbnQgICgqZ2V0c2RhKSAodm9pZCAqZGF0YSk7CglpbnQgICgqZ2V0c2NsKSAodm9pZCAqZGF0YSk7CgoJLyogbG9jYWwgc2V0dGluZ3MgKi8KCWludCB1ZGVsYXk7CQkvKiBoYWxmLWNsb2NrLWN5Y2xlIHRpbWUgaW4gbWljcm9zZWNzICovCgkJCQkvKiBpLmUuIGNsb2NrIGlzICg1MDAgLyB1ZGVsYXkpIEtIeiAqLwoJaW50IHRpbWVvdXQ7CQkvKiBpbiBqaWZmaWVzICovCn07CgppbnQgaTJjX2JpdF9hZGRfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKCiNlbmRpZiAvKiBfTElOVVhfSTJDX0FMR09fQklUX0ggKi8K