LyoKICAgIFNETCAtIFNpbXBsZSBEaXJlY3RNZWRpYSBMYXllcgogICAgQ29weXJpZ2h0IChDKSAxOTk3LTIwMTIgU2FtIExhbnRpbmdhCgogICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwogICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQogICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQoKICAgIFNhbSBMYW50aW5nYQogICAgc2xvdWtlbkBsaWJzZGwub3JnCiovCiNpbmNsdWRlICJTRExfY29uZmlnLmgiCgovKgoJRE1BIDhiaXRzIGFuZCBGYWxjb24gQ29kZWMgYXVkaW8gZGVmaW5pdGlvbnMKCglQYXRyaWNlIE1hbmRpbiwgRGlkaWVyIE3pcXVpZ25vbgoqLwoKI2lmbmRlZiBfU0RMX21pbnRhdWRpb19kbWE4X2gKI2RlZmluZSBfU0RMX21pbnRhdWRpb19kbWE4X2gKCiNkZWZpbmUgRE1BQVVESU9fSU9fQkFTRSAoMHhmZmZmODkwMCkKc3RydWN0IERNQUFVRElPX0lPX1MgewoJdW5zaWduZWQgY2hhciBpbnRfY3RybDsKCXVuc2lnbmVkIGNoYXIgY29udHJvbDsKCgl1bnNpZ25lZCBjaGFyIGR1bW15MTsKCXVuc2lnbmVkIGNoYXIgc3RhcnRfaGlnaDsKCXVuc2lnbmVkIGNoYXIgZHVtbXkyOwoJdW5zaWduZWQgY2hhciBzdGFydF9taWQ7Cgl1bnNpZ25lZCBjaGFyIGR1bW15MzsKCXVuc2lnbmVkIGNoYXIgc3RhcnRfbG93OwoKCXVuc2lnbmVkIGNoYXIgZHVtbXk0OwoJdW5zaWduZWQgY2hhciBjdXJfaGlnaDsKCXVuc2lnbmVkIGNoYXIgZHVtbXk1OwoJdW5zaWduZWQgY2hhciBjdXJfbWlkOwoJdW5zaWduZWQgY2hhciBkdW1teTY7Cgl1bnNpZ25lZCBjaGFyIGN1cl9sb3c7CgoJdW5zaWduZWQgY2hhciBkdW1teTc7Cgl1bnNpZ25lZCBjaGFyIGVuZF9oaWdoOwoJdW5zaWduZWQgY2hhciBkdW1teTg7Cgl1bnNpZ25lZCBjaGFyIGVuZF9taWQ7Cgl1bnNpZ25lZCBjaGFyIGR1bW15OTsKCXVuc2lnbmVkIGNoYXIgZW5kX2xvdzsKCgl1bnNpZ25lZCBjaGFyIGR1bW15MTBbMTJdOwoKCXVuc2lnbmVkIGNoYXIgdHJhY2tfY3RybDsgLyogQ09ERUMgb25seSAqLwoJdW5zaWduZWQgY2hhciBzb3VuZF9jdHJsOwoJdW5zaWduZWQgc2hvcnQgc291bmRfZGF0YTsKCXVuc2lnbmVkIHNob3J0IHNvdW5kX21hc2s7CgoJdW5zaWduZWQgY2hhciBkdW1teTExWzEwXTsKCQoJdW5zaWduZWQgc2hvcnQgZGV2X2N0cmw7Cgl1bnNpZ25lZCBzaG9ydCBkZXN0X2N0cmw7Cgl1bnNpZ25lZCBzaG9ydCBzeW5jX2RpdjsKCXVuc2lnbmVkIGNoYXIgdHJhY2tfcmVjOwoJdW5zaWduZWQgY2hhciBhZGRlcmluX2lucHV0OwoJdW5zaWduZWQgY2hhciBjaGFubmVsX2lucHV0OwoJdW5zaWduZWQgY2hhciBjaGFubmVsX2FtcGxpZmljYXRpb247Cgl1bnNpZ25lZCBjaGFyIGNoYW5uZWxfcmVkdWN0aW9uOwoJCgl1bnNpZ25lZCBjaGFyIGR1bW15MTJbNl07CgoJdW5zaWduZWQgY2hhciBkYXRhX2RpcmVjdGlvbjsKCXVuc2lnbmVkIGNoYXIgZHVtbXkxMzsKCXVuc2lnbmVkIGNoYXIgZGV2X2RhdGE7Cn07CiNkZWZpbmUgRE1BQVVESU9fSU8gKCgqKHZvbGF0aWxlIHN0cnVjdCBETUFBVURJT19JT19TICopRE1BQVVESU9fSU9fQkFTRSkpCgojZW5kaWYgLyogX1NETF9taW50YXVkaW9fZG1hOF9oICovCg==