LyoKICogVVNCIENvbXBhcSBpUEFRIGRyaXZlcgogKgogKglDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDAyCiAqCSAgICBHYW5lc2ggVmFyYWRhcmFqYW4gPGdhbmVzaEB2ZXJpdGFzLmNvbT4KICoKICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogKDEyLzEyLzIwMDIpIGdhbmVzaAogKiAJQWRkZWQgc3VwcG9ydCBmb3IgcHJhY3RpY2FsbHkgYWxsIGRldmljZXMgc3VwcG9ydGVkIGJ5IEFjdGl2ZVN5bmMKICogCW9uIFdpbmRvd3MuIFRoYW5rcyB0byBXZXMgQ2lsbGRoYWlyZSA8YmlsbHlib2Jqb2VoZW5yeWJvYkBob3RtYWlsLmNvbT4uCiAqCiAqICgyNi8xMS8yMDAyKSBnYW5lc2gKICogCUFkZGVkIGluc21vZCBvcHRpb25zIHRvIHNwZWNpZnkgcHJvZHVjdCBhbmQgdmVuZG9yIGlkLgogKiAJVXNlIG1vZHByb2JlIGlwYXEgdmVuZG9yPTB4Zm9vIHByb2R1Y3Q9MHhiYXIKICoKICogKDI2LzcvMjAwMikgZ2FuZXNoCiAqIAlGaXhlZCB1cCBicm9rZW4gZXJyb3IgaGFuZGxpbmcgaW4gaXBhcV9vcGVuLiBSZXRyeSB0aGUgImtpY2tzdGFydCIKICogCXBhY2tldCBtdWNoIGhhcmRlciAtIHRoaXMgZHJhc3RpY2FsbHkgcmVkdWNlcyBjb25uZWN0aW9uIGZhaWx1cmVzLgogKgogKiAoMzAvNC8yMDAyKSBnYW5lc2gKICogCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBDYXNpbyBFTTUwMC4gQ29tcGxldGVseSB1bnRlc3RlZC4gVGhhbmtzCiAqIAl0byBpbmZvIGZyb20gTmF0aGFuIDx3ZmlsYXJkb0BmdXNlLm5ldD4KICoKICogKDE5LzMvMjAwMikgZ2FuZXNoCiAqCURvbid0IHN1Ym1pdCB1cmJzIHdoaWxlIGhvbGRpbmcgc3BpbmxvY2tzLiBOb3Qgc3RyaWN0bHkgbmVjZXNzYXJ5CiAqCWluIDIuNS54LgogKgogKiAoOC8zLzIwMDIpIGdhbmVzaAogKiAJVGhlIGlwYXEgc29tZXRpbWVzIGVtaXRzIGEgJ1wwJyBiZWZvcmUgdGhlIENMSUVOVCBzdHJpbmcuIEF0IHRoaXMKICogCXBvaW50IG9mIHRpbWUsIHRoZSBwcHAgbGRpc2MgaXMgbm90IHlldCBhdHRhY2hlZCB0byB0aGUgdHR5LCBzbwogKiAJbl90dHkgZWNob2VzICJeICIgdG8gdGhlIGlwYXEsIHdoaWNoIG1lc3NlcyB1cCB0aGUgY2hhdC4gSW4gMi41LjYtcHJlMgogKiAJdGhpcyBjYXVzZXMgYSBwYW5pYyBiZWNhdXNlIGVjaG9fY2hhcigpIHRyaWVzIHRvIHNsZWVwIGluIGludGVycnVwdAogKiAJY29udGV4dC4KICogCVRoZSBmaXggaXMgdG8gdGVsbCB0aGUgdXBwZXIgbGF5ZXJzIHRoYXQgdGhpcyBpcyBhIHJhdyBkZXZpY2Ugc28gdGhhdAogKiAJZWNob2luZyBpcyBzdXBwcmVzc2VkLiBUaGFua3MgdG8gTHlsZSBMaW5kaG9sbSBmb3IgYSBkZXRhaWxlZCBidWcKICogCXJlcG9ydC4KICoKICogKDI1LzIvMjAwMikgZ2FuZXNoCiAqIAlBZGRlZCBzdXBwb3J0IGZvciB0aGUgSFAgSm9ybmFkYSA1NDggYW5kIDU2OC4gQ29tcGxldGVseSB1bnRlc3RlZC4KICogCVRoYW5rcyB0byBpbmZvIGZyb20gSGVhdGggUm9iaW5zb24gYW5kIEFyaWVoIERhdmlkb2ZmLgogKi8KCiNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgojaW5jbHVkZSA8bGludXgvZXJybm8uaD4KI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgojaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgojaW5jbHVkZSA8bGludXgvdHR5X2ZsaXAuaD4KI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgojaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiNpbmNsdWRlIDxsaW51eC91c2IuaD4KI2luY2x1ZGUgInVzYi1zZXJpYWwuaCIKI2luY2x1ZGUgImlwYXEuaCIKCiNkZWZpbmUgS1BfUkVUUklFUwkxMDAKCi8qCiAqIFZlcnNpb24gSW5mb3JtYXRpb24KICovCgojZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC41IgojZGVmaW5lIERSSVZFUl9BVVRIT1IgIkdhbmVzaCBWYXJhZGFyYWphbiA8Z2FuZXNoQHZlcml0YXMuY29tPiIKI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIFBvY2tldFBDIFBEQSBkcml2ZXIiCgpzdGF0aWMgX191MTYgcHJvZHVjdCwgdmVuZG9yOwpzdGF0aWMgaW50IGRlYnVnOwoKLyogRnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYW4gaXBhcSAqLwpzdGF0aWMgaW50ICBpcGFxX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKc3RhdGljIHZvaWQgaXBhcV9jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOwpzdGF0aWMgaW50ICBpcGFxX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwpzdGF0aWMgdm9pZCBpcGFxX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKc3RhdGljIGludCBpcGFxX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKCQkgICAgICAgaW50IGNvdW50KTsKc3RhdGljIGludCBpcGFxX3dyaXRlX2J1bGsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAoJCQkgICBpbnQgY291bnQpOwpzdGF0aWMgdm9pZCBpcGFxX3dyaXRlX2dhdGhlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKc3RhdGljIHZvaWQgaXBhcV9yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpzdGF0aWMgdm9pZCBpcGFxX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CnN0YXRpYyBpbnQgaXBhcV93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwpzdGF0aWMgaW50IGlwYXFfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwpzdGF0aWMgdm9pZCBpcGFxX2Rlc3Ryb3lfbGlzdHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CgoKc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlwYXFfaWRfdGFibGUgW10gPSB7CgkvKiBUaGUgZmlyc3QgZW50cnkgaXMgYSBwbGFjZWhvbGRlciBmb3IgdGhlIGluc21vZC1zcGVjaWZpZWQgZGV2aWNlICovCgl7IFVTQl9ERVZJQ0UoMHgwNDlGLCAweDAwMDMpIH0sCgl7IFVTQl9ERVZJQ0UoMHgwMTA0LCAweDAwQkUpIH0sIC8qIFNvY2tldCBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgxMDE2KSB9LCAvKiBIUCBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgxMTE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjExICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDEyMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MTIgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MjAxNikgfSwgLyogSFAgVVNCIFN5bmMgMTYyMCAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgyMTE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjIxICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDIyMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MjIgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MzAxNikgfSwgLyogSFAgVVNCIFN5bmMgMTYzMCAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgzMTE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjMxICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDMyMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MzIgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4NDAxNikgfSwgLyogSFAgVVNCIFN5bmMgMTY0MCAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg0MTE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjQxICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDQyMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2NDIgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4NTAxNikgfSwgLyogSFAgVVNCIFN5bmMgMTY1MCAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg1MTE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjUxICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDUyMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2NTIgKi8KCXsgVVNCX0RFVklDRSgweDA0MDksIDB4MDBENSkgfSwgLyogTkVDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNDA5LCAweDAwRDYpIH0sIC8qIE5FQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDQwOSwgMHgwMEQ3KSB9LCAvKiBORUMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0MDksIDB4ODAyNCkgfSwgLyogTkVDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNDA5LCAweDgwMjUpIH0sIC8qIE5FQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDQzRSwgMHg5QzAxKSB9LCAvKiBMR0UgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDBDRSkgfSwgLyogTWljcm9zb2Z0IFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDAxKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwMikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDA0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwNSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDA3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwOCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDBBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwQikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MEMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDBEKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwRSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MEYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDEwKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxMSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDEzKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxNCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDE2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxNykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDMzKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzNCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDM2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzNykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDM5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzQSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0M0IpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDNDKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzRCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0M0UpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDNGKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0MCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0MykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQ1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0NikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQ4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0OSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NEEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDRCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0QykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NEQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDRFKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0RikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDUxKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1MikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDU0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1NSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDU3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1OCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDVBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1QikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NUMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDVEKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1RSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NUYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDYwKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2MSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDYzKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2NCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDY2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2NykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDY5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2QSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NkIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDZDKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2RCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NkUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDZGKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3MCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDcyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3MykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDc1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3NikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDc4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3OSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0N0EpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDdCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRDOCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEM5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0Q0EpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRDQikgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNENDKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0Q0QpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRDRSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEQ3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RDgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDREOSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNERBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDREQykgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEREKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRERikgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEUwKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFMikgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEUzKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFNSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEU2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFOCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEU5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RUEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0OUYsIDB4MDAwMykgfSwgLyogQ29tcGFxIGlQQVEgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0OUYsIDB4MDAzMikgfSwgLyogQ29tcGFxIGlQQVEgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0QTQsIDB4MDAxNCkgfSwgLyogSGl0YWNoaSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRBRCwgMHgwMzAxKSB9LCAvKiBVU0IgU3luYyAwMzAxICovCgl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDIpIH0sIC8qIFVTQiBTeW5jIDAzMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0QUQsIDB4MDMwMykgfSwgLyogVVNCIFN5bmMgMDMwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDRDNSwgMHgxMDU4KSB9LCAvKiBGVUpJVFNVIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEM1LCAweDEwNzkpIH0sIC8qIEZVSklUU1UgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0REEsIDB4MjUwMCkgfSwgLyogUGFuYXNvbmljIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDVGMDApIH0sIC8qIFNhbXN1bmcgTkVYaU8gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMSkgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg1RjAyKSB9LCAvKiBTYW1zdW5nIE5FWGlPIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDVGMDMpIH0sIC8qIFNhbXN1bmcgTkVYaU8gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwNCkgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjExKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxMykgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MTUpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjE3KSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxOSkgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MUIpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjJFKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYzMCkgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MzIpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRmMSwgMHgzMDExKSB9LCAvKiBKVkMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RjEsIDB4MzAxMikgfSwgLyogSlZDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNTAyLCAweDE2MzEpIH0sIC8qIGMxMCBTZXJpZXMgKi8KCXsgVVNCX0RFVklDRSgweDA1MDIsIDB4MTYzMikgfSwgLyogYzIwIFNlcmllcyAqLwoJeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNkUxKSB9LCAvKiBBY2VyIG4xMCBIYW5kaGVsZCBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNkUyKSB9LCAvKiBBY2VyIG4yMCBIYW5kaGVsZCBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNkUzKSB9LCAvKiBBY2VyIG4zMCBIYW5kaGVsZCBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDUzNiwgMHgwMUEwKSB9LCAvKiBISFAgUERUICovCgl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDBFRDkpIH0sIC8qIFZpZXdTb25pYyBDb2xvciBQb2NrZXQgUEMgVjM1ICovCgl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE1MjcpIH0sIC8qIFZpZXdTb25pYyBDb2xvciBQb2NrZXQgUEMgVjM2ICovCgl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE1MjkpIH0sIC8qIFZpZXdTb25pYyBDb2xvciBQb2NrZXQgUEMgVjM3ICovCgl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE1MkIpIH0sIC8qIFZpZXdTb25pYyBDb2xvciBQb2NrZXQgUEMgVjM4ICovCgl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE1MkUpIH0sIC8qIFZpZXdTb25pYyBQb2NrZXQgUEMgKi8KCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTkyMSkgfSwgLyogVmlld1NvbmljIENvbW11bmljYXRvciBQb2NrZXQgUEMgKi8KCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTkyMikgfSwgLyogVmlld1NvbmljIFNtYXJ0cGhvbmUgKi8KCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTkyMykgfSwgLyogVmlld1NvbmljIFBvY2tldCBQQyBWMzAgKi8KCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwMCkgfSwgLyogU3ltYm9sIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDEpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDEgKi8KCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwMikgfSwgLyogU3ltYm9sIFVTQiBTeW5jIDB4MjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDAzKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDQpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDQgKi8KCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwNSkgfSwgLyogU3ltYm9sIFVTQiBTeW5jIDB4MjAwNSAqLwoJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA2KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA2ICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDcpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDcgKi8KCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwOCkgfSwgLyogU3ltYm9sIFVTQiBTeW5jIDB4MjAwOCAqLwoJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA5KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA5ICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMEEpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMEEgKi8KCXsgVVNCX0RFVklDRSgweDA2N0UsIDB4MTAwMSkgfSwgLyogSW50ZXJtZWMgTW9iaWxlIENvbXB1dGVyICovCgl7IFVTQl9ERVZJQ0UoMHgwN0NGLCAweDIwMDEpIH0sIC8qIENBU0lPIFVTQiBTeW5jIDIwMDEgKi8KCXsgVVNCX0RFVklDRSgweDA3Q0YsIDB4MjAwMikgfSwgLyogQ0FTSU8gVVNCIFN5bmMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDdDRiwgMHgyMDAzKSB9LCAvKiBDQVNJTyBVU0IgU3luYyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDApIH0sIC8qIFRPU0hJQkEgVVNCIFN5bmMgMDcwMCAqLwoJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzA1KSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlMzEwICovCgl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDYpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGU3NDAgKi8KCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwNykgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTMzMCBTZXJpZXMgKi8KCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwOCkgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTM1MKBTZXJpZXMgKi8KCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwOSkgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTc1MCBTZXJpZXMgKi8KCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwQSkgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTQwMCBTZXJpZXMgKi8KCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwQikgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTgwMCBTZXJpZXMgKi8KCXsgVVNCX0RFVklDRSgweDA5NEIsIDB4MDAwMSkgfSwgLyogTGlua3VwIFN5c3RlbXMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA5NjAsIDB4MDA2NSkgfSwgLyogQkNPTSBVU0IgU3luYyAwMDY1ICovCgl7IFVTQl9ERVZJQ0UoMHgwOTYwLCAweDAwNjYpIH0sIC8qIEJDT00gVVNCIFN5bmMgMDA2NiAqLwoJeyBVU0JfREVWSUNFKDB4MDk2MCwgMHgwMDY3KSB9LCAvKiBCQ09NIFVTQiBTeW5jIDAwNjcgKi8KCXsgVVNCX0RFVklDRSgweDA5NjEsIDB4MDAxMCkgfSwgLyogUG9ydGF0ZWMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA5OUUsIDB4MDA1MikgfSwgLyogVHJpbWJsZSBHZW9FeHBsb3JlciAqLwoJeyBVU0JfREVWSUNFKDB4MDk5RSwgMHg0MDAwKSB9LCAvKiBURFMgRGF0YSBDb2xsZWN0b3IgKi8KCXsgVVNCX0RFVklDRSgweDBCMDUsIDB4NDIwMCkgfSwgLyogQVNVUyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjAxKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQjA1LCAweDQyMDIpIH0sIC8qIEFTVVMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCMDUsIDB4NDIwRikgfSwgLyogQVNVUyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg5MjAwKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQjA1LCAweDkyMDIpIH0sIC8qIEFTVVMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MDBDRSkgfSwgLyogSFRDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDMpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDYpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDcpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDgpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMDkpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMEEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMEIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMEMpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMEQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMEUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMEYpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTApIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTMpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTYpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTcpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTgpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMTkpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMUEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMUIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMUMpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMUQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMUUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMUYpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjApIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjMpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjYpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjcpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjgpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMjkpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMkEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMkIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMkMpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMkQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMkUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMkYpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzApIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzMpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzYpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzcpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzgpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBMzkpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBM0EpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBM0IpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBM0MpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBM0QpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBM0UpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBM0YpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDApIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDMpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDYpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDcpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDgpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNDkpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNEEpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNEIpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNEMpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNEQpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNEUpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNEYpIH0sIC8qIFBvY2tldFBDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTApIH0sIC8qIEhUQyBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1MikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTUzKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1NSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTcpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1OCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNUEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1QikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNUQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1RSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjApIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2MSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTYyKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2NCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY1KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2NykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY4KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjkpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2QSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZCKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNkMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2RCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNkYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3MCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTcxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3MykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3NikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzgpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3OSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBN0IpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3QykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBN0UpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3RikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTgwKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4MikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTgzKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4NSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODcpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4OCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOEEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4QikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOEQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4RSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTApIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5MSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTkyKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5NCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk1KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5NykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk4KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTkpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5QSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlCKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOUMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5RCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOUYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCRjgsIDB4MTAwMSkgfSwgLyogRnVqaXRzdSBTaWVtZW5zIENvbXB1dGVycyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEM0NCwgMHgwM0EyKSB9LCAvKiBNb3Rvcm9sYSBpREVOIFNtYXJ0cGhvbmUgKi8KCXsgVVNCX0RFVklDRSgweDBDOEUsIDB4NjAwMCkgfSwgLyogQ2Vzc2NvbSBMdXhpYW4gU2VyaWVzICovCgl7IFVTQl9ERVZJQ0UoMHgwQ0FELCAweDkwMDEpIH0sIC8qIE1vdG9yb2xhIFBvd2VyUGFkIFBvY2tldCBQQ6BEZXZpY2UgKi8KCXsgVVNCX0RFVklDRSgweDBGNEUsIDB4MDIwMCkgfSwgLyogRnJlZWRvbSBTY2llbnRpZmljIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwRjk4LCAweDAyMDEpIH0sIC8qIEN5YmVyYmFuayBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEZCOCwgMHgzMDAxKSB9LCAvKiBXaXN0cm9uIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwRkI4LCAweDMwMDIpIH0sIC8qIFdpc3Ryb24gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBGQjgsIDB4MzAwMykgfSwgLyogV2lzdHJvbiBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEZCOCwgMHg0MDAxKSB9LCAvKiBXaXN0cm9uIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDAwQ0UpIH0sIC8qIEUtVEVOIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDAzMDApIH0sIC8qIEUtVEVOIFAzWFggUG9ja2V0IFBDICovCgl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDA1MDApIH0sIC8qIEUtVEVOIFA1WFggUG9ja2V0IFBDICovCgl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDA2MDApIH0sIC8qIEUtVEVOIFA2WFggUG9ja2V0IFBDICovCgl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDA3MDApIH0sIC8qIEUtVEVOIFA3WFggUG9ja2V0IFBDICovCgl7IFVTQl9ERVZJQ0UoMHgxMTE0LCAweDAwMDEpIH0sIC8qIFBzaW9uIFRla2xvZ2l4IFN5bmMgNzUzeCAqLwoJeyBVU0JfREVWSUNFKDB4MTExNCwgMHgwMDA0KSB9LCAvKiBQc2lvbiBUZWtsb2dpeCBTeW5jIG5ldEJvb2tQcm8gKi8KCXsgVVNCX0RFVklDRSgweDExMTQsIDB4MDAwNikgfSwgLyogUHNpb24gVGVrbG9naXggU3luYyA3NTI1ICovCgl7IFVTQl9ERVZJQ0UoMHgxMTgyLCAweDEzODgpIH0sIC8qIFZFUyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MTFEOSwgMHgxMDAyKSB9LCAvKiBSdWdnZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDExRDksIDB4MTAwMykgfSwgLyogUnVnZ2VkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgxMjMxLCAweENFMDEpIH0sIC8qIFVTQiBTeW5jIDAzICovCgl7IFVTQl9ERVZJQ0UoMHgxMjMxLCAweENFMDIpIH0sIC8qIFVTQiBTeW5jIDAzICovCgl7IFVTQl9ERVZJQ0UoMHgxNjkwLCAweDA2MDEpIH0sIC8qIEFza2V5IFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgyMkI4LCAweDQyMDQpIH0sIC8qIE1vdG9yb2xhIE1QeDIwMCBTbWFydHBob25lICovCgl7IFVTQl9ERVZJQ0UoMHgyMkI4LCAweDQyMTQpIH0sIC8qIE1vdG9yb2xhIE1QYyBHU00gKi8KCXsgVVNCX0RFVklDRSgweDIyQjgsIDB4NDIyNCkgfSwgLyogTW90b3JvbGEgTVB4MjIwIFNtYXJ0cGhvbmUgKi8KCXsgVVNCX0RFVklDRSgweDIyQjgsIDB4NDIzNCkgfSwgLyogTW90b3JvbGEgTVBjIENETUEgKi8KCXsgVVNCX0RFVklDRSgweDIyQjgsIDB4NDI0NCkgfSwgLyogTW90b3JvbGEgTVB4MTAwIFNtYXJ0cGhvbmUgKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDExQykgfSwgLyogTWlvIERpZ2lXYWxrZXIgUFBDIFN0cm9uZ0FSTSAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwMzI2KSB9LCAvKiBNaW8gRGlnaVdhbGtlciAzMzggKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDQyNikgfSwgLyogTWlvIERpZ2lXYWxrZXIgMzM4ICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDA0M0EpIH0sIC8qIE1pbyBEaWdpV2Fsa2VyIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDA1MUMpIH0sIC8qIE1pVEFDIFVTQiBTeW5jIDUyOCAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwNTNBKSB9LCAvKiBNaW8gRGlnaVdhbGtlciBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDA3MUMpIH0sIC8qIE1pVEFDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDBCMUMpIH0sIC8qIEdlbmVyaWMgUFBDIFN0cm9uZ0FSTSAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwRTNBKSB9LCAvKiBHZW5lcmljIFBQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwRjFDKSB9LCAvKiBJdGF1dGVjIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDBGM0EpIH0sIC8qIEdlbmVyaWMgU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgxMzI2KSB9LCAvKiBJdGF1dGVjIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDE5MUMpIH0sIC8qIFlBS1VNTyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgyMzI2KSB9LCAvKiBWb2JpcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgzMzI2KSB9LCAvKiBNRURJT04gV2lub2R3cyBNb2JsZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzcwOCwgMHgyMENFKSB9LCAvKiBMZWdlbmQgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDM3MDgsIDB4MjFDRSkgfSwgLyogTGVub3ZvIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTEzLCAweDAyMTApIH0sIC8qIE1vYmlsZSBNZWRpYSBUZWNobm9sb2d5IFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTEzLCAweDAyMTEpIH0sIC8qIE1vYmlsZSBNZWRpYSBUZWNobm9sb2d5IFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTEzLCAweDA0MDApIH0sIC8qIE1vYmlsZSBNZWRpYSBUZWNobm9sb2d5IFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTEzLCAweDA0MTApIH0sIC8qIE1vYmlsZSBNZWRpYSBUZWNobm9sb2d5IFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDEpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDAyKSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwMykgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDQpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA1KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwNikgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDcpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA4KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwOSkgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0NTA1LCAweDAwMTApIH0sIC8qIFNtYXJ0cGhvbmUgKi8KCXsgVVNCX0RFVklDRSgweDVFMDQsIDB4Q0UwMCkgfSwgLyogU0FHRU0gV2lyZWxlc3MgQXNzaXN0YW50ICovCgl7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCn07CgpNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlwYXFfaWRfdGFibGUpOwoKc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlwYXFfZHJpdmVyID0gewoJLm5hbWUgPQkJImlwYXEiLAoJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAoJLmlkX3RhYmxlID0JaXBhcV9pZF90YWJsZSwKCS5ub19keW5hbWljX2lkID0gCTEsCn07CgoKLyogQWxsIG9mIHRoZSBkZXZpY2UgaW5mbyBuZWVkZWQgZm9yIHRoZSBDb21wYXEgaVBBUSAqLwpzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGlwYXFfZGV2aWNlID0gewoJLmRyaXZlciA9IHsKCQkub3duZXIgPQlUSElTX01PRFVMRSwKCQkubmFtZSA9CQkiaXBhcSIsCgl9LAoJLmRlc2NyaXB0aW9uID0JCSJQb2NrZXRQQyBQREEiLAoJLmlkX3RhYmxlID0JCWlwYXFfaWRfdGFibGUsCgkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCgkubnVtX2J1bGtfaW4gPQkJMSwKCS5udW1fYnVsa19vdXQgPQkJMSwKCS5udW1fcG9ydHMgPQkJMSwKCS5vcGVuID0JCQlpcGFxX29wZW4sCgkuY2xvc2UgPQkJaXBhcV9jbG9zZSwKCS5hdHRhY2ggPQkJaXBhcV9zdGFydHVwLAoJLnNodXRkb3duID0JCWlwYXFfc2h1dGRvd24sCgkud3JpdGUgPQkJaXBhcV93cml0ZSwKCS53cml0ZV9yb29tID0JCWlwYXFfd3JpdGVfcm9vbSwKCS5jaGFyc19pbl9idWZmZXIgPQlpcGFxX2NoYXJzX2luX2J1ZmZlciwKCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQlpcGFxX3JlYWRfYnVsa19jYWxsYmFjaywKCS53cml0ZV9idWxrX2NhbGxiYWNrID0JaXBhcV93cml0ZV9idWxrX2NhbGxiYWNrLAp9OwoKc3RhdGljIHNwaW5sb2NrX3QJd3JpdGVfbGlzdF9sb2NrOwpzdGF0aWMgaW50CQlieXRlc19pbjsKc3RhdGljIGludAkJYnl0ZXNfb3V0OwoKc3RhdGljIGludCBpcGFxX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCnsKCXN0cnVjdCB1c2Jfc2VyaWFsCSpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CglzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2OwoJc3RydWN0IGlwYXFfcGFja2V0CSpwa3Q7CglpbnQJCQlpLCByZXN1bHQgPSAwOwoJaW50CQkJcmV0cmllcyA9IEtQX1JFVFJJRVM7CgoJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CgoJYnl0ZXNfaW4gPSAwOwoJYnl0ZXNfb3V0ID0gMDsKCXByaXYgPSAoc3RydWN0IGlwYXFfcHJpdmF0ZSAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcGFxX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKCWlmIChwcml2ID09IE5VTEwpIHsKCQllcnIoIiVzIC0gT3V0IG9mIG1lbW9yeSIsIF9fRlVOQ1RJT05fXyk7CgkJcmV0dXJuIC1FTk9NRU07Cgl9Cgl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgcHJpdik7Cglwcml2LT5hY3RpdmUgPSAwOwoJcHJpdi0+cXVldWVfbGVuID0gMDsKCXByaXYtPmZyZWVfbGVuID0gMDsKCUlOSVRfTElTVF9IRUFEKCZwcml2LT5xdWV1ZSk7CglJTklUX0xJU1RfSEVBRCgmcHJpdi0+ZnJlZWxpc3QpOwoKCWZvciAoaSA9IDA7IGkgPCBVUkJEQVRBX1FVRVVFX01BWCAvIFBBQ0tFVF9TSVpFOyBpKyspIHsKCQlwa3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXBhcV9wYWNrZXQpLCBHRlBfS0VSTkVMKTsKCQlpZiAocGt0ID09IE5VTEwpIHsKCQkJZ290byBlbm9tZW07CgkJfQoJCXBrdC0+ZGF0YSA9IGttYWxsb2MoUEFDS0VUX1NJWkUsIEdGUF9LRVJORUwpOwoJCWlmIChwa3QtPmRhdGEgPT0gTlVMTCkgewoJCQlrZnJlZShwa3QpOwoJCQlnb3RvIGVub21lbTsKCQl9CgkJcGt0LT5sZW4gPSAwOwoJCXBrdC0+d3JpdHRlbiA9IDA7CgkJSU5JVF9MSVNUX0hFQUQoJnBrdC0+bGlzdCk7CgkJbGlzdF9hZGQoJnBrdC0+bGlzdCwgJnByaXYtPmZyZWVsaXN0KTsKCQlwcml2LT5mcmVlX2xlbiArPSBQQUNLRVRfU0laRTsKCX0KCgkvKgoJICogRm9yY2UgbG93IGxhdGVuY3kgb24uIFRoaXMgd2lsbCBpbW1lZGlhdGVseSBwdXNoIGRhdGEgdG8gdGhlIGxpbmUKCSAqIGRpc2NpcGxpbmUgaW5zdGVhZCBvZiBxdWV1ZWluZy4KCSAqLwoKCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOwoJcG9ydC0+dHR5LT5yYXcgPSAxOwoJcG9ydC0+dHR5LT5yZWFsX3JhdyA9IDE7CgoJLyoKCSAqIExvc2UgdGhlIHNtYWxsIGJ1ZmZlcnMgdXNic2VyaWFsIHByb3ZpZGVzLiBNYWtlIGxhcmdlciBvbmVzLgoJICovCgoJa2ZyZWUocG9ydC0+YnVsa19pbl9idWZmZXIpOwoJa2ZyZWUocG9ydC0+YnVsa19vdXRfYnVmZmVyKTsKCXBvcnQtPmJ1bGtfaW5fYnVmZmVyID0ga21hbGxvYyhVUkJEQVRBX1NJWkUsIEdGUF9LRVJORUwpOwoJaWYgKHBvcnQtPmJ1bGtfaW5fYnVmZmVyID09IE5VTEwpIHsKCQlnb3RvIGVub21lbTsKCX0KCXBvcnQtPmJ1bGtfb3V0X2J1ZmZlciA9IGttYWxsb2MoVVJCREFUQV9TSVpFLCBHRlBfS0VSTkVMKTsKCWlmIChwb3J0LT5idWxrX291dF9idWZmZXIgPT0gTlVMTCkgewoJCWtmcmVlKHBvcnQtPmJ1bGtfaW5fYnVmZmVyKTsKCQlnb3RvIGVub21lbTsKCX0KCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBwb3J0LT5idWxrX2luX2J1ZmZlcjsKCXBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyID0gcG9ydC0+YnVsa19vdXRfYnVmZmVyOwoJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBVUkJEQVRBX1NJWkU7Cglwb3J0LT5idWxrX291dF9zaXplID0gcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gVVJCREFUQV9TSVpFOwoJCgkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLwoJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LCAKCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKCQkgICAgICBpcGFxX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CglyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CglpZiAocmVzdWx0KSB7CgkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKCQlnb3RvIGVycm9yOwoJfQoKCS8qCgkgKiBTZW5kIG91dCBjb250cm9sIG1lc3NhZ2Ugb2JzZXJ2ZWQgaW4gd2luOTggc25pZmZzLiBOb3Qgc3VyZSB3aGF0CgkgKiBpdCBkb2VzLCBidXQgZnJvbSBlbXBpcmljYWwgb2JzZXJ2YXRpb25zLCBpdCBzZWVtcyB0aGF0IHRoZSBkZXZpY2UKCSAqIHdpbGwgc3RhcnQgdGhlIGNoYXQgc2VxdWVuY2Ugb25jZSBvbmUgb2YgdGhlc2UgbWVzc2FnZXMgZ2V0cwoJICogdGhyb3VnaC4gU2luY2UgdGhpcyBoYXMgYSByZWFzb25hYmx5IGhpZ2ggZmFpbHVyZSByYXRlLCB3ZSByZXRyeQoJICogc2V2ZXJhbCB0aW1lcy4KCSAqLwoKCXdoaWxlIChyZXRyaWVzLS0pIHsKCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCgkJCQl1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLCAweDIyLCAweDIxLAoJCQkJMHgxLCAwLCBOVUxMLCAwLCAxMDApOwoJCWlmIChyZXN1bHQgPT0gMCkgewoJCQlyZXR1cm4gMDsKCQl9Cgl9CgllcnIoIiVzIC0gZmFpbGVkIGRvaW5nIGNvbnRyb2wgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKCWdvdG8gZXJyb3I7Cgplbm9tZW06CglyZXN1bHQgPSAtRU5PTUVNOwoJZXJyKCIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX0ZVTkNUSU9OX18pOwplcnJvcjoKCWlwYXFfZGVzdHJveV9saXN0cyhwb3J0KTsKCWtmcmVlKHByaXYpOwoJcmV0dXJuIHJlc3VsdDsKfQoKCnN0YXRpYyB2b2lkIGlwYXFfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCnsKCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CgoJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CgkJCSAKCS8qCgkgKiBzaHV0IGRvd24gYnVsayByZWFkIGFuZCB3cml0ZQoJICovCgl1c2Jfa2lsbF91cmIocG9ydC0+d3JpdGVfdXJiKTsKCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CglpcGFxX2Rlc3Ryb3lfbGlzdHMocG9ydCk7CglrZnJlZShwcml2KTsKCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBOVUxMKTsKCgkvKiBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIGlmIHlvdSB3YW50IHRvIHNlZSBzb21lIHN0YXRpc3RpY3MgaW4geW91ciBzeXNsb2cgKi8KCS8qIGluZm8gKCJCeXRlcyBJbiA9ICVkICBCeXRlcyBPdXQgPSAlZCIsIGJ5dGVzX2luLCBieXRlc19vdXQpOyAqLwp9CgpzdGF0aWMgdm9pZCBpcGFxX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQp7CglzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CSpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CglzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OwoJdW5zaWduZWQgY2hhcgkJKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKCWludAkJCXJlc3VsdDsKCglkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKCglpZiAodXJiLT5zdGF0dXMpIHsKCQlkYmcoIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOwoJCXJldHVybjsKCX0KCgl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKCgl0dHkgPSBwb3J0LT50dHk7CglpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewoJCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwoJCWJ5dGVzX2luICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKCX0KCgkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgICovCgl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsIAoJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAoJCSAgICAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAoJCSAgICAgIGlwYXFfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKCWlmIChyZXN1bHQpCgkJZXJyKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOwoJcmV0dXJuOwp9CgpzdGF0aWMgaW50IGlwYXFfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAoJCSAgICAgICBpbnQgY291bnQpCnsKCWNvbnN0IHVuc2lnbmVkIGNoYXIJKmN1cnJlbnRfcG9zaXRpb24gPSBidWY7CglpbnQJCQlieXRlc19zZW50ID0gMDsKCWludAkJCXRyYW5zZmVyX3NpemU7CgoJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CgoJd2hpbGUgKGNvdW50ID4gMCkgewoJCXRyYW5zZmVyX3NpemUgPSBtaW4oY291bnQsIFBBQ0tFVF9TSVpFKTsKCQlpZiAoaXBhcV93cml0ZV9idWxrKHBvcnQsIGN1cnJlbnRfcG9zaXRpb24sIHRyYW5zZmVyX3NpemUpKSB7CgkJCWJyZWFrOwoJCX0KCQljdXJyZW50X3Bvc2l0aW9uICs9IHRyYW5zZmVyX3NpemU7CgkJYnl0ZXNfc2VudCArPSB0cmFuc2Zlcl9zaXplOwoJCWNvdW50IC09IHRyYW5zZmVyX3NpemU7CgkJYnl0ZXNfb3V0ICs9IHRyYW5zZmVyX3NpemU7Cgl9CgoJcmV0dXJuIGJ5dGVzX3NlbnQ7Cn0gCgpzdGF0aWMgaW50IGlwYXFfd3JpdGVfYnVsayhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCgkJCSAgIGludCBjb3VudCkKewoJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKCXN0cnVjdCBpcGFxX3BhY2tldAkqcGt0ID0gTlVMTDsKCWludAkJCXJlc3VsdCA9IDA7Cgl1bnNpZ25lZCBsb25nCQlmbGFnczsKCglpZiAocHJpdi0+ZnJlZV9sZW4gPD0gMCkgewoJCWRiZygiJXMgLSB3ZSdyZSBzdHVmZmVkIiwgX19GVU5DVElPTl9fKTsKCQlyZXR1cm4gLUVBR0FJTjsKCX0KCglzcGluX2xvY2tfaXJxc2F2ZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CglpZiAoIWxpc3RfZW1wdHkoJnByaXYtPmZyZWVsaXN0KSkgewoJCXBrdCA9IGxpc3RfZW50cnkocHJpdi0+ZnJlZWxpc3QubmV4dCwgc3RydWN0IGlwYXFfcGFja2V0LCBsaXN0KTsKCQlsaXN0X2RlbCgmcGt0LT5saXN0KTsKCQlwcml2LT5mcmVlX2xlbiAtPSBQQUNLRVRfU0laRTsKCX0KCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwoJaWYgKHBrdCA9PSBOVUxMKSB7CgkJZGJnKCIlcyAtIHdlJ3JlIHN0dWZmZWQiLCBfX0ZVTkNUSU9OX18pOwoJCXJldHVybiAtRUFHQUlOOwoJfQoKCW1lbWNweShwa3QtPmRhdGEsIGJ1ZiwgY291bnQpOwoJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LCBwa3QtPmRhdGEpOwoKCXBrdC0+bGVuID0gY291bnQ7Cglwa3QtPndyaXR0ZW4gPSAwOwoJc3Bpbl9sb2NrX2lycXNhdmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwoJbGlzdF9hZGRfdGFpbCgmcGt0LT5saXN0LCAmcHJpdi0+cXVldWUpOwoJcHJpdi0+cXVldWVfbGVuICs9IGNvdW50OwoJaWYgKHByaXYtPmFjdGl2ZSA9PSAwKSB7CgkJcHJpdi0+YWN0aXZlID0gMTsKCQlpcGFxX3dyaXRlX2dhdGhlcihwb3J0KTsKCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOwoJCWlmIChyZXN1bHQpIHsKCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CgkJfQoJfSBlbHNlIHsKCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKCX0KCXJldHVybiByZXN1bHQ7Cn0KCnN0YXRpYyB2b2lkIGlwYXFfd3JpdGVfZ2F0aGVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCnsKCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CglzdHJ1Y3QgdXNiX3NlcmlhbAkqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwoJaW50CQkJY291bnQsIHJvb207CglzdHJ1Y3QgaXBhcV9wYWNrZXQJKnBrdCwgKnRtcDsKCXN0cnVjdCB1cmIJCSp1cmIgPSBwb3J0LT53cml0ZV91cmI7CgoJcm9vbSA9IFVSQkRBVEFfU0laRTsKCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwa3QsIHRtcCwgJnByaXYtPnF1ZXVlLCBsaXN0KSB7CgkJY291bnQgPSBtaW4ocm9vbSwgKGludCkocGt0LT5sZW4gLSBwa3QtPndyaXR0ZW4pKTsKCQltZW1jcHkodXJiLT50cmFuc2Zlcl9idWZmZXIgKyAoVVJCREFUQV9TSVpFIC0gcm9vbSksCgkJICAgICAgIHBrdC0+ZGF0YSArIHBrdC0+d3JpdHRlbiwgY291bnQpOwoJCXJvb20gLT0gY291bnQ7CgkJcGt0LT53cml0dGVuICs9IGNvdW50OwoJCXByaXYtPnF1ZXVlX2xlbiAtPSBjb3VudDsKCQlpZiAocGt0LT53cml0dGVuID09IHBrdC0+bGVuKSB7CgkJCWxpc3RfbW92ZSgmcGt0LT5saXN0LCAmcHJpdi0+ZnJlZWxpc3QpOwoJCQlwcml2LT5mcmVlX2xlbiArPSBQQUNLRVRfU0laRTsKCQl9CgkJaWYgKHJvb20gPT0gMCkgewoJCQlicmVhazsKCQl9Cgl9CgoJY291bnQgPSBVUkJEQVRBX1NJWkUgLSByb29tOwoJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+d3JpdGVfdXJiLCBzZXJpYWwtPmRldiwgCgkJICAgICAgdXNiX3NuZGJ1bGtwaXBlKHNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAoJCSAgICAgIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBjb3VudCwgaXBhcV93cml0ZV9idWxrX2NhbGxiYWNrLAoJCSAgICAgIHBvcnQpOwoJcmV0dXJuOwp9CgpzdGF0aWMgdm9pZCBpcGFxX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKewoJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OwoJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwoJaW50CQkJcmVzdWx0OwoKCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwoJCglpZiAodXJiLT5zdGF0dXMpIHsKCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKCX0KCglzcGluX2xvY2tfaXJxc2F2ZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CglpZiAoIWxpc3RfZW1wdHkoJnByaXYtPnF1ZXVlKSkgewoJCWlwYXFfd3JpdGVfZ2F0aGVyKHBvcnQpOwoJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwoJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CgkJaWYgKHJlc3VsdCkgewoJCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKCQl9Cgl9IGVsc2UgewoJCXByaXYtPmFjdGl2ZSA9IDA7CgkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7Cgl9CgoJc2NoZWR1bGVfd29yaygmcG9ydC0+d29yayk7Cn0KCnN0YXRpYyBpbnQgaXBhcV93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCnsKCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CgoJZGJnKCIlcyAtIGZyZWVsZW4gJWQiLCBfX0ZVTkNUSU9OX18sIHByaXYtPmZyZWVfbGVuKTsKCXJldHVybiBwcml2LT5mcmVlX2xlbjsKfQoKc3RhdGljIGludCBpcGFxX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQp7CglzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwoKCWRiZygiJXMgLSBxdWV1ZWxlbiAlZCIsIF9fRlVOQ1RJT05fXywgcHJpdi0+cXVldWVfbGVuKTsKCXJldHVybiBwcml2LT5xdWV1ZV9sZW47Cn0KCnN0YXRpYyB2b2lkIGlwYXFfZGVzdHJveV9saXN0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQp7CglzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwoJc3RydWN0IGlwYXFfcGFja2V0CSpwa3QsICp0bXA7CgoJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBrdCwgdG1wLCAmcHJpdi0+cXVldWUsIGxpc3QpIHsKCQlrZnJlZShwa3QtPmRhdGEpOwoJCWtmcmVlKHBrdCk7Cgl9CglsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGt0LCB0bXAsICZwcml2LT5mcmVlbGlzdCwgbGlzdCkgewoJCWtmcmVlKHBrdC0+ZGF0YSk7CgkJa2ZyZWUocGt0KTsKCX0KfQoKCnN0YXRpYyBpbnQgaXBhcV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCnsKCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOwoJaWYgKHNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7CgkJZXJyKCJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/IiwKCQkJc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlKTsKCQlyZXR1cm4gLUVOT0RFVjsKCX0KCXJldHVybiB1c2JfcmVzZXRfY29uZmlndXJhdGlvbiAoc2VyaWFsLT5kZXYpOwp9CgpzdGF0aWMgdm9pZCBpcGFxX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCnsKCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOwp9CgpzdGF0aWMgaW50IF9faW5pdCBpcGFxX2luaXQodm9pZCkKewoJaW50IHJldHZhbDsKCXNwaW5fbG9ja19pbml0KCZ3cml0ZV9saXN0X2xvY2spOwoJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmaXBhcV9kZXZpY2UpOwoJaWYgKHJldHZhbCkgCgkJZ290byBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjsKCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKCWlmICh2ZW5kb3IpIHsKCQlpcGFxX2lkX3RhYmxlWzBdLmlkVmVuZG9yID0gdmVuZG9yOwoJCWlwYXFfaWRfdGFibGVbMF0uaWRQcm9kdWN0ID0gcHJvZHVjdDsKCX0KCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaXBhcV9kcml2ZXIpOwoJaWYgKHJldHZhbCkKCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CgkJICAKCXJldHVybiAwOwpmYWlsZWRfdXNiX3JlZ2lzdGVyOgoJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZpcGFxX2RldmljZSk7CmZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOgoJcmV0dXJuIHJldHZhbDsKfQoKCnN0YXRpYyB2b2lkIF9fZXhpdCBpcGFxX2V4aXQodm9pZCkKewoJdXNiX2RlcmVnaXN0ZXIoJmlwYXFfZHJpdmVyKTsKCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXBhcV9kZXZpY2UpOwp9CgoKbW9kdWxlX2luaXQoaXBhcV9pbml0KTsKbW9kdWxlX2V4aXQoaXBhcV9leGl0KTsKCk1PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOwpNT0RVTEVfTElDRU5TRSgiR1BMIik7Cgptb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7Cgptb2R1bGVfcGFyYW0odmVuZG9yLCB1c2hvcnQsIDApOwpNT0RVTEVfUEFSTV9ERVNDKHZlbmRvciwgIlVzZXIgc3BlY2lmaWVkIFVTQiBpZFZlbmRvciIpOwoKbW9kdWxlX3BhcmFtKHByb2R1Y3QsIHVzaG9ydCwgMCk7Ck1PRFVMRV9QQVJNX0RFU0MocHJvZHVjdCwgIlVzZXIgc3BlY2lmaWVkIFVTQiBpZFByb2R1Y3QiKTsK