LyogVGhpcyBmaWxlIGlzIG9iai1ldmF4LmgKICAgQ29weXJpZ2h0IDE5OTYsIDIwMDAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAgIENvbnRyaWJ1dGVkIGJ5IEtsYXVzIEvkbXBmIChra2FlbXBmQHByb2dpcy5kZSkgb2YKICAgICBwcm9HSVMgU29mdHdhcmUsIEFhY2hlbiwgR2VybWFueS4KCiAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdBUywgdGhlIEdOVSBBc3NlbWJsZXIuCgogICBHQVMgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCiAgIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgR0FTIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgIGFsb25nIHdpdGggR0FTOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCiAgIE1BIDAyMTExLTEzMDcsIFVTQS4gICovCgovKgogKiBUaGlzIGZpbGUgaXMgb2JqLWV2YXguaCBhbmQgaXMgaW50ZW5kZWQgdG8gYmUgYSB0ZW1wbGF0ZSBmb3IKICogb2JqZWN0IGZvcm1hdCBzcGVjaWZpYyBoZWFkZXIgZmlsZXMuCiAqLwoKLyogZGVmaW5lIGFuIG9iaiBzcGVjaWZpYyBtYWNybyBvZmYgd2hpY2ggdGFyZ2V0IGNwdSBiYWNrIGVuZHMgbWF5IGtleS4gICovCiNkZWZpbmUgT0JKX0VWQVggMQoKLyogaW5jbHVkZSB3aGF0ZXZlciB0YXJnZXQgY3B1IGlzIGFwcHJvcHJpYXRlLiAgKi8KI2luY2x1ZGUgInRhcmctY3B1LmgiCgojaWZkZWYgQkZEX0FTU0VNQkxFUgojZGVmaW5lIE9VVFBVVF9GTEFWT1IgYmZkX3RhcmdldF9ldmF4X2ZsYXZvdXIKI2VuZGlmCgovKgogKiBTWU1CT0xTCiAqLwoKLyoKICogSWYgeW91ciBvYmplY3QgZm9ybWF0IG5lZWRzIHRvIHJlb3JkZXIgc3ltYm9scywgZGVmaW5lIHRoaXMuICBXaGVuCiAqIGRlZmluZWQsIHN5bWJvbHMgYXJlIGtlcHQgb24gYSBkb3VibHkgbGlua2VkIGxpc3QgYW5kIGZ1bmN0aW9ucyBhcmUKICogbWFkZSBhdmFpbGFibGUgZm9yIHB1c2gsIGluc2VydCwgYXBwZW5kLCBhbmQgZGVsZXRlLiAgSWYgbm90IGRlZmluZWQsCiAqIHN5bWJvbHMgYXJlIGtlcHQgb24gYSBzaW5nbHkgbGlua2VkIGxpc3QsIG9ubHkgdGhlIGFwcGVuZCBhbmQgY2xlYXIKICogZmFjaWxpdGllcyBhcmUgYXZhaWxhYmxlLCBhbmQgdGhleSBhcmUgbWFjcm9zLgogKi8KCi8qICNkZWZpbmUgU1lNQk9MU19ORUVEX1BBQ0tQT0lOVEVSUyAqLwoKLyogICovCnR5cGVkZWYgc3RydWN0CiAgewogICAgdm9pZCAqbm90aGluZzsKICB9Cm9ial9zeW1ib2xfdHlwZTsJCS8qIHNob3VsZCBiZSB0aGUgZm9ybWF0J3Mgc3ltYm9sIHN0cnVjdHVyZSAqLwoKdHlwZWRlZiB2b2lkICpvYmplY3RfaGVhZGVyczsKCiNkZWZpbmUgREVGQVVMVF9NQUdJQ19OVU1CRVJfRk9SX09CSkVDVF9GSUxFICgwKQkvKiB5b3VyIG1hZ2ljIG51bWJlciAqLwoKI2RlZmluZSBPQkpfRU1JVF9MSU5FTk8oYSxiLGMpCS8qIG11c3QgYmUgKnNvbWV0aGluZyouICBUaGlzIG5vLW9wJ3MgaXQgb3V0LiAgKi8KCiNkZWZpbmUgb2JqX3N5bWJvbF9uZXdfaG9vayhzKSAgICAgICAgezt9CgojZGVmaW5lIFNfU0VUX09USEVSKFMsVikKI2RlZmluZSBTX1NFVF9UWVBFKFMsVCkKI2RlZmluZSBTX1NFVF9ERVNDKFMsRCkKI2RlZmluZSBTX0dFVF9PVEhFUihTKQkwCiNkZWZpbmUgU19HRVRfVFlQRShTKQkwCiNkZWZpbmUgU19HRVRfREVTQyhTKQkwCgojZGVmaW5lIFBEU0NfU19LX0tJTkRfRlBfU1RBQ0sgOQojZGVmaW5lIFBEU0NfU19LX0tJTkRfRlBfUkVHSVNURVIgMTAKI2RlZmluZSBQRFNDX1NfS19LSU5EX05VTEwgOAoKI2RlZmluZSBQRFNDX1NfS19NSU5fU1RBQ0tfU0laRSAzMgojZGVmaW5lIFBEU0NfU19LX01JTl9SRUdJU1RFUl9TSVpFIDI0CiNkZWZpbmUgUERTQ19TX0tfTlVMTF9TSVpFIDE2CgojZGVmaW5lIFBEU0NfU19NX0JBU0VfUkVHX0lTX0ZQIDB4ODAJLyogbG93IGJ5dGUgKi8KI2RlZmluZSBQRFNDX1NfTV9OQVRJVkUgMHgxMAkJLyogaGlnaCBieXRlICovCiNkZWZpbmUgUERTQ19TX01fTk9fSkFDS0VUIDB4MjAJCS8qIGhpZ2ggYnl0ZSAqLwoKI2RlZmluZSBMS1BfU19LX1NJWkUgMTYKCiNkZWZpbmUgVENfSU1QTElDSVRfTENPTU1fQUxJR05NRU5UKFNJWkUsIFAyVkFSKSAoUDJWQVIpID0gMwoKLyoKICogTG9jYWwgVmFyaWFibGVzOgogKiBjb21tZW50LWNvbHVtbjogMAogKiBmaWxsLWNvbHVtbjogMTMxCiAqIEVuZDoKICovCg==