LyoKICogRE9TIEVYRSBsb2FkZXIKICoKICogQ29weXJpZ2h0IDE5OTggT3ZlIEvldmVuCiAqLwoKI2lmbmRlZiBfX1dJTkVfRE9TRVhFX0gKI2RlZmluZSBfX1dJTkVfRE9TRVhFX0gKCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gLyogcGlkX3QgKi8KI2luY2x1ZGUgIndpbmJhc2UuaCIgICAvKiBmb3IgTFBTVEFSVFVQSU5GTzMyQSAqLwojaW5jbHVkZSAid2lubnQuaCIgICAgIC8qIGZvciBQQ09OVEVYVCAqLwoKc3RydWN0IF9ET1NFVkVOVDsKCnR5cGVkZWYgc3RydWN0IF9ET1NUQVNLIHsKIFdPUkQgcHNwX3NlZzsKIFdPUkQgZHBtaV9mbGFnOwp9IERPU1RBU0ssICpMUERPU1RBU0s7CgojZGVmaW5lIERPU19QUklPUklUWV9SRUFMVElNRSAwICAvKiBJUlEwICovCiNkZWZpbmUgRE9TX1BSSU9SSVRZX0tFWUJPQVJEIDEgIC8qIElSUTEgKi8KI2RlZmluZSBET1NfUFJJT1JJVFlfVkdBICAgICAgMiAgLyogSVJROSAqLwojZGVmaW5lIERPU19QUklPUklUWV9NT1VTRSAgICA1ICAvKiBJUlExMiAqLwojZGVmaW5lIERPU19QUklPUklUWV9TRVJJQUwgICAxMCAvKiBJUlE0ICovCgojaWYgZGVmaW5lZChsaW51eCkgJiYgZGVmaW5lZChfX2kzODZfXykKI2RlZmluZSBNWl9TVVBQT1JURUQKI2VuZGlmIC8qIGxpbnV4LWkzODYgKi8KCiNkZWZpbmUgVjg2X0ZMQUcgMHgwMDAyMDAwMAoKZXh0ZXJuIEJPT0wgTVpfTG9hZEltYWdlKCBITU9EVUxFIG1vZHVsZSwgSEFORExFIGhGaWxlLCBMUENTVFIgZmlsZW5hbWUgKTsKZXh0ZXJuIExQRE9TVEFTSyBNWl9DdXJyZW50KCB2b2lkICk7CmV4dGVybiBMUERPU1RBU0sgTVpfQWxsb2NEUE1JVGFzayggdm9pZCApOwpleHRlcm4gaW50IERPU1ZNX0VudGVyKCBDT05URVhUODYgKmNvbnRleHQgKTsKZXh0ZXJuIHZvaWQgRE9TVk1fV2FpdCggaW50IHJlYWRfcGlwZSwgSEFORExFIGhPYmplY3QgKTsKZXh0ZXJuIHZvaWQgRE9TVk1fUXVldWVFdmVudCggaW50IGlycSwgaW50IHByaW9yaXR5LCB2b2lkICgqcmVsYXkpKENPTlRFWFQ4Niosdm9pZCopLCB2b2lkICpkYXRhICk7CmV4dGVybiB2b2lkIERPU1ZNX1BJQ19pb3BvcnRfb3V0KCBXT1JEIHBvcnQsIEJZVEUgdmFsICk7CmV4dGVybiB2b2lkIERPU1ZNX1NldFRpbWVyKCB1bnNpZ25lZCB0aWNrcyApOwpleHRlcm4gdW5zaWduZWQgRE9TVk1fR2V0VGltZXIoIHZvaWQgKTsKCiNlbmRpZiAvKiBfX1dJTkVfRE9TRVhFX0ggKi8K