Lyogdmk6IHNldCBzdz00IHRzPTQ6ICovCi8qCiAqIE1pbmkgbG9hZGttYXAgaW1wbGVtZW50YXRpb24gZm9yIGJ1c3lib3gKICoKICogQ29weXJpZ2h0IChDKSAyMDA3IExv72MgR3JlbmnpIDxsb2ljLmdyZW5pZUBnbWFpbC5jb20+CiAqICAgd3JpdHRlbiB1c2luZyBBbmRyaWVzIEJyb3V3ZXIgPGFlYkBjd2kubmw+J3Mga2JkX21vZGUgZnJvbQogKiAgIGNvbnNvbGUtdXRpbHMgdjAuMi4zLCBsaWNlbnNlZCB1bmRlciBHTlUgR1BMdjIKICoKICogTGljZW5zZWQgdW5kZXIgR1BMdjIgb3IgbGF0ZXIsIHNlZSBmaWxlIExJQ0VOU0UgaW4gdGhpcyB0YXJiYWxsIGZvciBkZXRhaWxzLgogKgogKi8KCiNpbmNsdWRlIDxnZXRvcHQuaD4KI2luY2x1ZGUgImxpYmJiLmgiCiNpbmNsdWRlIDxsaW51eC9rZC5oPgoKaW50IGtiZF9tb2RlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSBNQUlOX0VYVEVSTkFMTFlfVklTSUJMRTsKaW50IGtiZF9tb2RlX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQp7CglzdGF0aWMgY29uc3QgY2hhciBvcHRzW10gPSAic2FrdSI7CgoJY29uc3QgY2hhciAqb3B0ID0gYXJndlsxXTsKCWNvbnN0IGNoYXIgKnA7CglpbnQgZmQ7CgoJZmQgPSBnZXRfY29uc29sZV9mZCgpOwoJaWYgKGZkIDwgMCkgLyogZ2V0X2NvbnNvbGVfZmQoKSBhbHJlYWR5IGNvbXBsYWluZWQgKi8KCQlyZXR1cm4gRVhJVF9GQUlMVVJFOwoKCWlmIChvcHQgPT0gTlVMTCkgewoJCS8qIE5vIGFyZyAqLwoJCWNvbnN0IGNoYXIgKm1zZyA9ICJ1bmtub3duIjsKCQlpbnQgbW9kZTsKCgkJaW9jdGwoZmQsIEtER0tCTU9ERSwgJm1vZGUpOwoJCXN3aXRjaChtb2RlKSB7CgkJY2FzZSBLX1JBVzoKCQkJbXNnID0gInJhdyAoc2NhbmNvZGUpIjsKCQkJYnJlYWs7CgkJY2FzZSBLX1hMQVRFOgoJCQltc2cgPSAiZGVmYXVsdCAoQVNDSUkpIjsKCQkJYnJlYWs7CgkJY2FzZSBLX01FRElVTVJBVzoKCQkJbXNnID0gIm1lZGl1bXJhdyAoa2V5Y29kZSkiOwoJCQlicmVhazsKCQljYXNlIEtfVU5JQ09ERToKCQkJbXNnID0gIlVuaWNvZGUgKFVURi04KSI7CgkJCWJyZWFrOwoJCX0KCQlwcmludGYoIlRoZSBrZXlib2FyZCBpcyBpbiAlcyBtb2RlXG4iLCBtc2cpOwoJfQoJZWxzZSBpZiAoYXJnYyA+IDIgLyogbW9yZSB0aGFuIDEgYXJnICovCgkgfHwgKm9wdCAhPSAnLScgLyogbm90IGFuIG9wdGlvbiAqLwoJIHx8IChwID0gc3RyY2hyKG9wdHMsIG9wdFsxXSkpID09IE5VTEwgLyogbm90IGFuIG9wdGlvbiB3ZSBleHBlY3QgKi8KCSB8fCBvcHRbMl0gIT0gJ1wwJyAvKiBtb3JlIHRoYW4gb25lIG9wdGlvbiBjaGFyICovCgkpIHsKCQliYl9zaG93X3VzYWdlKCk7CgkJLyogcmV0dXJuIEVYSVRfRkFJTFVSRTsgLSBub3QgcmVhY2hlZCAqLwoJfQoJZWxzZSB7CiNpZiBLX1JBVyAhPSAwIHx8IEtfWExBVEUgIT0gMSB8fCBLX01FRElVTVJBVyAhPSAyIHx8IEtfVU5JQ09ERSAhPSAzCiNlcnJvciBrYmRfbW9kZSBtdXN0IGJlIGNoYW5nZWQKI2VuZGlmCgkJLyogVGhlIG9wdGlvbnMgYXJlIGluIHRoZSBvcmRlciBvZiB0aGUgdmFyaW91cyBLX3h4eCAqLwoJCWlvY3RsKGZkLCBLRFNLQk1PREUsIHAgLSBvcHRzKTsKCX0KCglpZiAoRU5BQkxFX0ZFQVRVUkVfQ0xFQU5fVVApCgkJY2xvc2UoZmQpOwoJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKfQo=