LyoKICogIE1hdGNoIGEgc3RyaW5nIGFnYWluc3QgYSBsaXN0IG9mIHBhdHRlcm5zL3JlZ2V4ZXMuCiAqCiAqICBDb3B5cmlnaHQgKEMpIDIwMDYgVPZy9msgRWR2aW4gPGVkd2luQGNsYW1hdi5uZXQ+CiAqCiAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgCiAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKICogIE1BIDAyMTEwLTEzMDEsIFVTQS4KICoKICovCgoKI2lmbmRlZiBfUkVHRVhfTElTVF9ICiNkZWZpbmUgX1JFR0VYX0xJU1RfSAoKI2lmZGVmIE5ERUJVRwojZGVmaW5lIG1hc3NlcnQoeCkgKHZvaWQpKDApCiNlbHNlCi8qZGVidWcgdmVyc2lvbiwgbWFzc2VydCBlbmFibGVkKi8KCiNkZWZpbmUgX19tYXNzZXJ0X2ZhaWwoZXhwcixmaWxlLGxpbmUpICh2b2lkKWNsaV9lcnJtc2coIkFzc2VydGlvbiBmYWlsZWQgYXQgJXM6JWRcbiAlc1xuIixmaWxlLGxpbmUsZXhwcikKCiNkZWZpbmUgbWFzc2VydChleHByKSAoKHZvaWQpICgoZXhwcikgPyAodm9pZCkwIDogKF9fbWFzc2VydF9mYWlsICgjZXhwcixfX0ZJTEVfXyxfX0xJTkVfXykpKSkKI2VuZGlmCgojaW5jbHVkZSAicGhpc2hjaGVjay5oIgpzdHJ1Y3Qgbm9kZV9zdGFjayB7CglzdHJ1Y3QgdHJlZV9ub2RlKiogZGF0YTsKCXNpemVfdCBjYXBhY2l0eTsKCXNpemVfdCBjbnQ7Cn07CgpzdHJ1Y3QgcmVnZXhfbWF0Y2hlciB7CglzdHJ1Y3QgY2xpX21hdGNoZXIqIHJvb3RfaG9zdHM7CglzdHJ1Y3QgdHJlZV9ub2RlKiByb290X3JlZ2V4OwoJc3RydWN0IHRyZWVfbm9kZSogcm9vdF9yZWdleF9ob3N0b25seTsgCglzaXplX3Qgcm9vdF9ob3N0c19jbnQ7CglpbnQgbGlzdF9pbml0ZWQ7CglpbnQgbGlzdF9sb2FkZWQ7CglpbnQgbGlzdF9idWlsdDsKCXN0cnVjdCBub2RlX3N0YWNrIG5vZGVfc3RhY2s7CglzdHJ1Y3Qgbm9kZV9zdGFjayBub2RlX3N0YWNrX2FsdDsKfTsKCmludCByZWdleF9saXN0X21hdGNoKHN0cnVjdCByZWdleF9tYXRjaGVyKiBtYXRjaGVyLCBjaGFyKiByZWFsX3VybCxjb25zdCBjaGFyKiBkaXNwbGF5X3VybCxjb25zdCBzdHJ1Y3QgcHJlX2ZpeHVwX2luZm8qIHByZV9maXh1cCwgaW50IGhvc3RPbmx5LGNvbnN0IGNoYXIqKiBpbmZvLGludCBpc193aGl0ZWxpc3QpOwppbnQgaW5pdF9yZWdleF9saXN0KHN0cnVjdCByZWdleF9tYXRjaGVyKiBtYXRjaGVyKTsKaW50IGxvYWRfcmVnZXhfbWF0Y2hlcihzdHJ1Y3QgcmVnZXhfbWF0Y2hlciogbWF0Y2hlcixGSUxFKiBmZCx1bnNpZ25lZCBpbnQgb3B0aW9ucyxpbnQgaXNfd2hpdGVsaXN0KTsKdm9pZCByZWdleF9saXN0X2NsZWFudXAoc3RydWN0IHJlZ2V4X21hdGNoZXIqIG1hdGNoZXIpOwp2b2lkIHJlZ2V4X2xpc3RfZG9uZShzdHJ1Y3QgcmVnZXhfbWF0Y2hlciogbWF0Y2hlcik7CmludCBpc19yZWdleF9vayhzdHJ1Y3QgcmVnZXhfbWF0Y2hlciogbWF0Y2hlcik7CgojZW5kaWYKCg==