LyoKICogVVNCIENvbXBhcSBpUEFRIGRyaXZlcgogKgogKglDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDAyCiAqCSAgICBHYW5lc2ggVmFyYWRhcmFqYW4gPGdhbmVzaEB2ZXJpdGFzLmNvbT4KICoKICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogKDEyLzEyLzIwMDIpIGdhbmVzaAogKiAJQWRkZWQgc3VwcG9ydCBmb3IgcHJhY3RpY2FsbHkgYWxsIGRldmljZXMgc3VwcG9ydGVkIGJ5IEFjdGl2ZVN5bmMKICogCW9uIFdpbmRvd3MuIFRoYW5rcyB0byBXZXMgQ2lsbGRoYWlyZSA8YmlsbHlib2Jqb2VoZW5yeWJvYkBob3RtYWlsLmNvbT4uCiAqCiAqICgyNi8xMS8yMDAyKSBnYW5lc2gKICogCUFkZGVkIGluc21vZCBvcHRpb25zIHRvIHNwZWNpZnkgcHJvZHVjdCBhbmQgdmVuZG9yIGlkLgogKiAJVXNlIG1vZHByb2JlIGlwYXEgdmVuZG9yPTB4Zm9vIHByb2R1Y3Q9MHhiYXIKICoKICogKDI2LzcvMjAwMikgZ2FuZXNoCiAqIAlGaXhlZCB1cCBicm9rZW4gZXJyb3IgaGFuZGxpbmcgaW4gaXBhcV9vcGVuLiBSZXRyeSB0aGUgImtpY2tzdGFydCIKICogCXBhY2tldCBtdWNoIGhhcmRlciAtIHRoaXMgZHJhc3RpY2FsbHkgcmVkdWNlcyBjb25uZWN0aW9uIGZhaWx1cmVzLgogKgogKiAoMzAvNC8yMDAyKSBnYW5lc2gKICogCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBDYXNpbyBFTTUwMC4gQ29tcGxldGVseSB1bnRlc3RlZC4gVGhhbmtzCiAqIAl0byBpbmZvIGZyb20gTmF0aGFuIDx3ZmlsYXJkb0BmdXNlLm5ldD4KICoKICogKDE5LzMvMjAwMikgZ2FuZXNoCiAqCURvbid0IHN1Ym1pdCB1cmJzIHdoaWxlIGhvbGRpbmcgc3BpbmxvY2tzLiBOb3Qgc3RyaWN0bHkgbmVjZXNzYXJ5CiAqCWluIDIuNS54LgogKgogKiAoOC8zLzIwMDIpIGdhbmVzaAogKiAJVGhlIGlwYXEgc29tZXRpbWVzIGVtaXRzIGEgJ1wwJyBiZWZvcmUgdGhlIENMSUVOVCBzdHJpbmcuIEF0IHRoaXMKICogCXBvaW50IG9mIHRpbWUsIHRoZSBwcHAgbGRpc2MgaXMgbm90IHlldCBhdHRhY2hlZCB0byB0aGUgdHR5LCBzbwogKiAJbl90dHkgZWNob2VzICJeICIgdG8gdGhlIGlwYXEsIHdoaWNoIG1lc3NlcyB1cCB0aGUgY2hhdC4gSW4gMi41LjYtcHJlMgogKiAJdGhpcyBjYXVzZXMgYSBwYW5pYyBiZWNhdXNlIGVjaG9fY2hhcigpIHRyaWVzIHRvIHNsZWVwIGluIGludGVycnVwdAogKiAJY29udGV4dC4KICogCVRoZSBmaXggaXMgdG8gdGVsbCB0aGUgdXBwZXIgbGF5ZXJzIHRoYXQgdGhpcyBpcyBhIHJhdyBkZXZpY2Ugc28gdGhhdAogKiAJZWNob2luZyBpcyBzdXBwcmVzc2VkLiBUaGFua3MgdG8gTHlsZSBMaW5kaG9sbSBmb3IgYSBkZXRhaWxlZCBidWcKICogCXJlcG9ydC4KICoKICogKDI1LzIvMjAwMikgZ2FuZXNoCiAqIAlBZGRlZCBzdXBwb3J0IGZvciB0aGUgSFAgSm9ybmFkYSA1NDggYW5kIDU2OC4gQ29tcGxldGVseSB1bnRlc3RlZC4KICogCVRoYW5rcyB0byBpbmZvIGZyb20gSGVhdGggUm9iaW5zb24gYW5kIEFyaWVoIERhdmlkb2ZmLgogKi8KCiNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiNpbmNsdWRlIDxsaW51eC90dHkuaD4KI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgojaW5jbHVkZSA8bGludXgvdXNiLmg+CiNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiNpbmNsdWRlICJpcGFxLmgiCgojZGVmaW5lIEtQX1JFVFJJRVMJMTAwCgovKgogKiBWZXJzaW9uIEluZm9ybWF0aW9uCiAqLwoKI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuNSIKI2RlZmluZSBEUklWRVJfQVVUSE9SICJHYW5lc2ggVmFyYWRhcmFqYW4gPGdhbmVzaEB2ZXJpdGFzLmNvbT4iCiNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBQb2NrZXRQQyBQREEgZHJpdmVyIgoKc3RhdGljIF9fdTE2IHByb2R1Y3QsIHZlbmRvcjsKc3RhdGljIGludCBkZWJ1ZzsKc3RhdGljIGludCBjb25uZWN0X3JldHJpZXMgPSBLUF9SRVRSSUVTOwpzdGF0aWMgaW50IGluaXRpYWxfd2FpdDsKCi8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGFuIGlwYXEgKi8Kc3RhdGljIGludCAgaXBhcV9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CnN0YXRpYyB2b2lkIGlwYXFfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKc3RhdGljIGludCAgaXBhcV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKc3RhdGljIHZvaWQgaXBhcV9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CnN0YXRpYyBpbnQgaXBhcV93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCgkJICAgICAgIGludCBjb3VudCk7CnN0YXRpYyBpbnQgaXBhcV93cml0ZV9idWxrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKCQkJICAgaW50IGNvdW50KTsKc3RhdGljIHZvaWQgaXBhcV93cml0ZV9nYXRoZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CnN0YXRpYyB2b2lkIGlwYXFfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIpOwpzdGF0aWMgdm9pZCBpcGFxX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKc3RhdGljIGludCBpcGFxX3dyaXRlX3Jvb20oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CnN0YXRpYyBpbnQgaXBhcV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CnN0YXRpYyB2b2lkIGlwYXFfZGVzdHJveV9saXN0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKCgpzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaXBhcV9pZF90YWJsZSBbXSA9IHsKCS8qIFRoZSBmaXJzdCBlbnRyeSBpcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgaW5zbW9kLXNwZWNpZmllZCBkZXZpY2UgKi8KCXsgVVNCX0RFVklDRSgweDA0OUYsIDB4MDAwMykgfSwKCXsgVVNCX0RFVklDRSgweDAxMDQsIDB4MDBCRSkgfSwgLyogU29ja2V0IFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDEwMTYpIH0sIC8qIEhQIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDExMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MTEgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MTIxNikgfSwgLyogSFAgVVNCIFN5bmMgMTYxMiAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgyMDE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjIwICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDIxMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MjEgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MjIxNikgfSwgLyogSFAgVVNCIFN5bmMgMTYyMiAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgzMDE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjMwICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDMxMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MzEgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MzIxNikgfSwgLyogSFAgVVNCIFN5bmMgMTYzMiAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg0MDE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjQwICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDQxMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2NDEgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4NDIxNikgfSwgLyogSFAgVVNCIFN5bmMgMTY0MiAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg1MDE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjUwICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDUxMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2NTEgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4NTIxNikgfSwgLyogSFAgVVNCIFN5bmMgMTY1MiAqLwoJeyBVU0JfREVWSUNFKDB4MDQwOSwgMHgwMEQ1KSB9LCAvKiBORUMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0MDksIDB4MDBENikgfSwgLyogTkVDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNDA5LCAweDAwRDcpIH0sIC8qIE5FQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDQwOSwgMHg4MDI0KSB9LCAvKiBORUMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0MDksIDB4ODAyNSkgfSwgLyogTkVDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNDNFLCAweDlDMDEpIH0sIC8qIExHRSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwMENFKSB9LCAvKiBNaWNyb3NvZnQgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwMCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDAyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwMykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDA1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwNikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDA4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwOSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MEEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDBCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwQykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MEQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDBFKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwRikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDExKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxMikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDE0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxNSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDE3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzMikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDM0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzNSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDM3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzOCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDNBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzQikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0M0MpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDNEKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzRSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0M0YpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQwKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0MSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQzKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0NCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQ2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0NykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQ5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0QSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NEIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDRDKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0RCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NEUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDRGKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1MCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDUyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1MykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDU1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1NikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDU4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1OSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NUEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDVCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1QykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NUQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDVFKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1RikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDYxKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2MikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDY0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2NSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDY3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2OCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDZBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2QikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NkMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDZEKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2RSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NkYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDcwKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3MSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDczKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3NCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDc2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3NykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDc5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3QSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0N0IpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEM4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0QzkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRDQSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNENCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0Q0MpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRDRCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNENFKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RDcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDREOCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEQ5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDREQikgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNERDKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRERSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNERGKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFMSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEUyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFNCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEU1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFNykgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEU4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFQSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ5RiwgMHgwMDAzKSB9LCAvKiBDb21wYXEgaVBBUSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ5RiwgMHgwMDMyKSB9LCAvKiBDb21wYXEgaVBBUSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRBNCwgMHgwMDE0KSB9LCAvKiBIaXRhY2hpIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDEpIH0sIC8qIFVTQiBTeW5jIDAzMDEgKi8KCXsgVVNCX0RFVklDRSgweDA0QUQsIDB4MDMwMikgfSwgLyogVVNCIFN5bmMgMDMwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDRBRCwgMHgwMzAzKSB9LCAvKiBVU0IgU3luYyAwMzAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDYpIH0sIC8qIEdQUyBQb2NrZXQgUEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0QjcsIDB4MDUzMSkgfSwgLyogTXlHdWlkZSA3MDAwIFhMIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEM1LCAweDEwNTgpIH0sIC8qIEZVSklUU1UgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0QzUsIDB4MTA3OSkgfSwgLyogRlVKSVRTVSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDREQSwgMHgyNTAwKSB9LCAvKiBQYW5hc29uaWMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0REQsIDB4OTEwMikgfSwgLyogU0hBUlAgV1MwMDNTSCBVU0IgTW9kZW0gKi8KCXsgVVNCX0RFVklDRSgweDA0REQsIDB4OTEyMSkgfSwgLyogU0hBUlAgV1MwMDRTSCBVU0IgTW9kZW0gKi8KCXsgVVNCX0RFVklDRSgweDA0REQsIDB4OTEyMykgfSwgLyogU0hBUlAgV1MwMDdTSCBVU0IgTW9kZW0gKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMCkgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg1RjAxKSB9LCAvKiBTYW1zdW5nIE5FWGlPIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDVGMDIpIH0sIC8qIFNhbXN1bmcgTkVYaU8gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMykgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg1RjA0KSB9LCAvKiBTYW1zdW5nIE5FWGlPIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MTEpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjEzKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxNSkgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MTcpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjE5KSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxQikgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MkUpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjMwKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYzMikgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNGYxLCAweDMwMTEpIH0sIC8qIEpWQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRGMSwgMHgzMDEyKSB9LCAvKiBKVkMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA1MDIsIDB4MTYzMSkgfSwgLyogYzEwIFNlcmllcyAqLwoJeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNjMyKSB9LCAvKiBjMjAgU2VyaWVzICovCgl7IFVTQl9ERVZJQ0UoMHgwNTAyLCAweDE2RTEpIH0sIC8qIEFjZXIgbjEwIEhhbmRoZWxkIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNTAyLCAweDE2RTIpIH0sIC8qIEFjZXIgbjIwIEhhbmRoZWxkIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNTAyLCAweDE2RTMpIH0sIC8qIEFjZXIgbjMwIEhhbmRoZWxkIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNTM2LCAweDAxQTApIH0sIC8qIEhIUCBQRFQgKi8KCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MEVEOSkgfSwgLyogVmlld1NvbmljIENvbG9yIFBvY2tldCBQQyBWMzUgKi8KCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTUyNykgfSwgLyogVmlld1NvbmljIENvbG9yIFBvY2tldCBQQyBWMzYgKi8KCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTUyOSkgfSwgLyogVmlld1NvbmljIENvbG9yIFBvY2tldCBQQyBWMzcgKi8KCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTUyQikgfSwgLyogVmlld1NvbmljIENvbG9yIFBvY2tldCBQQyBWMzggKi8KCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTUyRSkgfSwgLyogVmlld1NvbmljIFBvY2tldCBQQyAqLwoJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxOTIxKSB9LCAvKiBWaWV3U29uaWMgQ29tbXVuaWNhdG9yIFBvY2tldCBQQyAqLwoJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxOTIyKSB9LCAvKiBWaWV3U29uaWMgU21hcnRwaG9uZSAqLwoJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxOTIzKSB9LCAvKiBWaWV3U29uaWMgUG9ja2V0IFBDIFYzMCAqLwoJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDAwKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwMSkgfSwgLyogU3ltYm9sIFVTQiBTeW5jIDB4MjAwMSAqLwoJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDAyKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDMpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwNCkgfSwgLyogU3ltYm9sIFVTQiBTeW5jIDB4MjAwNCAqLwoJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA1KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA1ICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDYpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDYgKi8KCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwNykgfSwgLyogU3ltYm9sIFVTQiBTeW5jIDB4MjAwNyAqLwoJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA4KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA4ICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDkpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDkgKi8KCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwQSkgfSwgLyogU3ltYm9sIFVTQiBTeW5jIDB4MjAwQSAqLwoJeyBVU0JfREVWSUNFKDB4MDY3RSwgMHgxMDAxKSB9LCAvKiBJbnRlcm1lYyBNb2JpbGUgQ29tcHV0ZXIgKi8KCXsgVVNCX0RFVklDRSgweDA3Q0YsIDB4MjAwMSkgfSwgLyogQ0FTSU8gVVNCIFN5bmMgMjAwMSAqLwoJeyBVU0JfREVWSUNFKDB4MDdDRiwgMHgyMDAyKSB9LCAvKiBDQVNJTyBVU0IgU3luYyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwN0NGLCAweDIwMDMpIH0sIC8qIENBU0lPIFVTQiBTeW5jIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwMCkgfSwgLyogVE9TSElCQSBVU0IgU3luYyAwNzAwICovCgl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDUpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGUzMTAgKi8KCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwNikgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTc0MCAqLwoJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzA3KSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlMzMwIFNlcmllcyAqLwoJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzA4KSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlMzUwoFNlcmllcyAqLwoJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzA5KSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlNzUwIFNlcmllcyAqLwoJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzBBKSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlNDAwIFNlcmllcyAqLwoJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzBCKSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlODAwIFNlcmllcyAqLwoJeyBVU0JfREVWSUNFKDB4MDk0QiwgMHgwMDAxKSB9LCAvKiBMaW5rdXAgU3lzdGVtcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDk2MCwgMHgwMDY1KSB9LCAvKiBCQ09NIFVTQiBTeW5jIDAwNjUgKi8KCXsgVVNCX0RFVklDRSgweDA5NjAsIDB4MDA2NikgfSwgLyogQkNPTSBVU0IgU3luYyAwMDY2ICovCgl7IFVTQl9ERVZJQ0UoMHgwOTYwLCAweDAwNjcpIH0sIC8qIEJDT00gVVNCIFN5bmMgMDA2NyAqLwoJeyBVU0JfREVWSUNFKDB4MDk2MSwgMHgwMDEwKSB9LCAvKiBQb3J0YXRlYyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDk5RSwgMHgwMDUyKSB9LCAvKiBUcmltYmxlIEdlb0V4cGxvcmVyICovCgl7IFVTQl9ERVZJQ0UoMHgwOTlFLCAweDQwMDApIH0sIC8qIFREUyBEYXRhIENvbGxlY3RvciAqLwoJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjAwKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQjA1LCAweDQyMDEpIH0sIC8qIEFTVVMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCMDUsIDB4NDIwMikgfSwgLyogQVNVUyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjBGKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQjA1LCAweDkyMDApIH0sIC8qIEFTVVMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCMDUsIDB4OTIwMikgfSwgLyogQVNVUyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwMENFKSB9LCAvKiBIVEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MDBDRikgfSwgLyogSFRDIFVTQiBNb2RlbSAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTAxKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTAyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTAzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBEKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTEwKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTExKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTEyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTEzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFEKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTIwKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTIxKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTIyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTIzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJEKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTMwKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTMxKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTMyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTMzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNEKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQwKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQxKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTREKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTUwKSB9LCAvKiBIVEMgU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTUxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1MykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1NikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTgpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1OSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNUIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1QykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNUUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1RikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTYwKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2MikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTYzKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2NSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjcpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2OCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNkEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2QikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNkQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2RSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzApIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3MSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTcyKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3NCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc1KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3NykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc4KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzkpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3QSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdCKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBN0MpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3RCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBN0YpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4MCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTgxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4MykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4NikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODgpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4OSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOEIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4QykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOEUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4RikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTkwKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5MikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTkzKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5NSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTcpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5OCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOUEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5QikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOUQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5RSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBCQ0UpIH0sIC8qICJIaWdoIFRlY2ggQ29tcHV0ZXIgQ29ycCIgKi8KCXsgVVNCX0RFVklDRSgweDBCRjgsIDB4MTAwMSkgfSwgLyogRnVqaXRzdSBTaWVtZW5zIENvbXB1dGVycyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEM0NCwgMHgwM0EyKSB9LCAvKiBNb3Rvcm9sYSBpREVOIFNtYXJ0cGhvbmUgKi8KCXsgVVNCX0RFVklDRSgweDBDOEUsIDB4NjAwMCkgfSwgLyogQ2Vzc2NvbSBMdXhpYW4gU2VyaWVzICovCgl7IFVTQl9ERVZJQ0UoMHgwQ0FELCAweDkwMDEpIH0sIC8qIE1vdG9yb2xhIFBvd2VyUGFkIFBvY2tldCBQQ6BEZXZpY2UgKi8KCXsgVVNCX0RFVklDRSgweDBGNEUsIDB4MDIwMCkgfSwgLyogRnJlZWRvbSBTY2llbnRpZmljIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwRjk4LCAweDAyMDEpIH0sIC8qIEN5YmVyYmFuayBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEZCOCwgMHgzMDAxKSB9LCAvKiBXaXN0cm9uIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwRkI4LCAweDMwMDIpIH0sIC8qIFdpc3Ryb24gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBGQjgsIDB4MzAwMykgfSwgLyogV2lzdHJvbiBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEZCOCwgMHg0MDAxKSB9LCAvKiBXaXN0cm9uIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDAwQ0UpIH0sIC8qIEUtVEVOIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDAzMDApIH0sIC8qIEUtVEVOIFAzWFggUG9ja2V0IFBDICovCgl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDA1MDApIH0sIC8qIEUtVEVOIFA1WFggUG9ja2V0IFBDICovCgl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDA2MDApIH0sIC8qIEUtVEVOIFA2WFggUG9ja2V0IFBDICovCgl7IFVTQl9ERVZJQ0UoMHgxMDY2LCAweDA3MDApIH0sIC8qIEUtVEVOIFA3WFggUG9ja2V0IFBDICovCgl7IFVTQl9ERVZJQ0UoMHgxMTE0LCAweDAwMDEpIH0sIC8qIFBzaW9uIFRla2xvZ2l4IFN5bmMgNzUzeCAqLwoJeyBVU0JfREVWSUNFKDB4MTExNCwgMHgwMDA0KSB9LCAvKiBQc2lvbiBUZWtsb2dpeCBTeW5jIG5ldEJvb2tQcm8gKi8KCXsgVVNCX0RFVklDRSgweDExMTQsIDB4MDAwNikgfSwgLyogUHNpb24gVGVrbG9naXggU3luYyA3NTI1ICovCgl7IFVTQl9ERVZJQ0UoMHgxMTgyLCAweDEzODgpIH0sIC8qIFZFUyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MTFEOSwgMHgxMDAyKSB9LCAvKiBSdWdnZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDExRDksIDB4MTAwMykgfSwgLyogUnVnZ2VkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgxMjMxLCAweENFMDEpIH0sIC8qIFVTQiBTeW5jIDAzICovCgl7IFVTQl9ERVZJQ0UoMHgxMjMxLCAweENFMDIpIH0sIC8qIFVTQiBTeW5jIDAzICovCgl7IFVTQl9ERVZJQ0UoMHgxNjkwLCAweDA2MDEpIH0sIC8qIEFza2V5IFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgyMkI4LCAweDQyMDQpIH0sIC8qIE1vdG9yb2xhIE1QeDIwMCBTbWFydHBob25lICovCgl7IFVTQl9ERVZJQ0UoMHgyMkI4LCAweDQyMTQpIH0sIC8qIE1vdG9yb2xhIE1QYyBHU00gKi8KCXsgVVNCX0RFVklDRSgweDIyQjgsIDB4NDIyNCkgfSwgLyogTW90b3JvbGEgTVB4MjIwIFNtYXJ0cGhvbmUgKi8KCXsgVVNCX0RFVklDRSgweDIyQjgsIDB4NDIzNCkgfSwgLyogTW90b3JvbGEgTVBjIENETUEgKi8KCXsgVVNCX0RFVklDRSgweDIyQjgsIDB4NDI0NCkgfSwgLyogTW90b3JvbGEgTVB4MTAwIFNtYXJ0cGhvbmUgKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDExQykgfSwgLyogTWlvIERpZ2lXYWxrZXIgUFBDIFN0cm9uZ0FSTSAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwMzI2KSB9LCAvKiBNaW8gRGlnaVdhbGtlciAzMzggKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDQyNikgfSwgLyogTWlvIERpZ2lXYWxrZXIgMzM4ICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDA0M0EpIH0sIC8qIE1pbyBEaWdpV2Fsa2VyIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDA1MUMpIH0sIC8qIE1pVEFDIFVTQiBTeW5jIDUyOCAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwNTNBKSB9LCAvKiBNaW8gRGlnaVdhbGtlciBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDA3MUMpIH0sIC8qIE1pVEFDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDBCMUMpIH0sIC8qIEdlbmVyaWMgUFBDIFN0cm9uZ0FSTSAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwRTNBKSB9LCAvKiBHZW5lcmljIFBQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwRjFDKSB9LCAvKiBJdGF1dGVjIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDBGM0EpIH0sIC8qIEdlbmVyaWMgU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgxMzI2KSB9LCAvKiBJdGF1dGVjIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDE5MUMpIH0sIC8qIFlBS1VNTyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgyMzI2KSB9LCAvKiBWb2JpcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgzMzI2KSB9LCAvKiBNRURJT04gV2lub2R3cyBNb2JsZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzcwOCwgMHgyMENFKSB9LCAvKiBMZWdlbmQgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDM3MDgsIDB4MjFDRSkgfSwgLyogTGVub3ZvIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTEzLCAweDAyMTApIH0sIC8qIE1vYmlsZSBNZWRpYSBUZWNobm9sb2d5IFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTEzLCAweDAyMTEpIH0sIC8qIE1vYmlsZSBNZWRpYSBUZWNobm9sb2d5IFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTEzLCAweDA0MDApIH0sIC8qIE1vYmlsZSBNZWRpYSBUZWNobm9sb2d5IFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTEzLCAweDA0MTApIH0sIC8qIE1vYmlsZSBNZWRpYSBUZWNobm9sb2d5IFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDEpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDAyKSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwMykgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDQpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA1KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwNikgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDcpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA4KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwOSkgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0NTA1LCAweDAwMTApIH0sIC8qIFNtYXJ0cGhvbmUgKi8KCXsgVVNCX0RFVklDRSgweDVFMDQsIDB4Q0UwMCkgfSwgLyogU0FHRU0gV2lyZWxlc3MgQXNzaXN0YW50ICovCgl7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCn07CgpNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlwYXFfaWRfdGFibGUpOwoKc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGlwYXFfZHJpdmVyID0gewoJLm5hbWUgPQkJImlwYXEiLAoJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAoJLmlkX3RhYmxlID0JaXBhcV9pZF90YWJsZSwKCS5ub19keW5hbWljX2lkID0gCTEsCn07CgoKLyogQWxsIG9mIHRoZSBkZXZpY2UgaW5mbyBuZWVkZWQgZm9yIHRoZSBDb21wYXEgaVBBUSAqLwpzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGlwYXFfZGV2aWNlID0gewoJLmRyaXZlciA9IHsKCQkub3duZXIgPQlUSElTX01PRFVMRSwKCQkubmFtZSA9CQkiaXBhcSIsCgl9LAoJLmRlc2NyaXB0aW9uID0JCSJQb2NrZXRQQyBQREEiLAoJLnVzYl9kcml2ZXIgPSAJCSZpcGFxX2RyaXZlciwKCS5pZF90YWJsZSA9CQlpcGFxX2lkX3RhYmxlLAoJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAoJLm51bV9idWxrX2luID0JCTEsCgkubnVtX2J1bGtfb3V0ID0JCTEsCgkubnVtX3BvcnRzID0JCTEsCgkub3BlbiA9CQkJaXBhcV9vcGVuLAoJLmNsb3NlID0JCWlwYXFfY2xvc2UsCgkuYXR0YWNoID0JCWlwYXFfc3RhcnR1cCwKCS5zaHV0ZG93biA9CQlpcGFxX3NodXRkb3duLAoJLndyaXRlID0JCWlwYXFfd3JpdGUsCgkud3JpdGVfcm9vbSA9CQlpcGFxX3dyaXRlX3Jvb20sCgkuY2hhcnNfaW5fYnVmZmVyID0JaXBhcV9jaGFyc19pbl9idWZmZXIsCgkucmVhZF9idWxrX2NhbGxiYWNrID0JaXBhcV9yZWFkX2J1bGtfY2FsbGJhY2ssCgkud3JpdGVfYnVsa19jYWxsYmFjayA9CWlwYXFfd3JpdGVfYnVsa19jYWxsYmFjaywKfTsKCnN0YXRpYyBzcGlubG9ja190CXdyaXRlX2xpc3RfbG9jazsKc3RhdGljIGludAkJYnl0ZXNfaW47CnN0YXRpYyBpbnQJCWJ5dGVzX291dDsKCnN0YXRpYyBpbnQgaXBhcV9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQp7CglzdHJ1Y3QgdXNiX3NlcmlhbAkqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwoJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdjsKCXN0cnVjdCBpcGFxX3BhY2tldAkqcGt0OwoJaW50CQkJaSwgcmVzdWx0ID0gMDsKCWludAkJCXJldHJpZXMgPSBjb25uZWN0X3JldHJpZXM7CgoJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CgoJYnl0ZXNfaW4gPSAwOwoJYnl0ZXNfb3V0ID0gMDsKCXByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXBhcV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CglpZiAocHJpdiA9PSBOVUxMKSB7CgkJZXJyKCIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX0ZVTkNUSU9OX18pOwoJCXJldHVybiAtRU5PTUVNOwoJfQoJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIHByaXYpOwoJcHJpdi0+YWN0aXZlID0gMDsKCXByaXYtPnF1ZXVlX2xlbiA9IDA7Cglwcml2LT5mcmVlX2xlbiA9IDA7CglJTklUX0xJU1RfSEVBRCgmcHJpdi0+cXVldWUpOwoJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmZyZWVsaXN0KTsKCglmb3IgKGkgPSAwOyBpIDwgVVJCREFUQV9RVUVVRV9NQVggLyBQQUNLRVRfU0laRTsgaSsrKSB7CgkJcGt0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwYXFfcGFja2V0KSwgR0ZQX0tFUk5FTCk7CgkJaWYgKHBrdCA9PSBOVUxMKSB7CgkJCWdvdG8gZW5vbWVtOwoJCX0KCQlwa3QtPmRhdGEgPSBrbWFsbG9jKFBBQ0tFVF9TSVpFLCBHRlBfS0VSTkVMKTsKCQlpZiAocGt0LT5kYXRhID09IE5VTEwpIHsKCQkJa2ZyZWUocGt0KTsKCQkJZ290byBlbm9tZW07CgkJfQoJCXBrdC0+bGVuID0gMDsKCQlwa3QtPndyaXR0ZW4gPSAwOwoJCUlOSVRfTElTVF9IRUFEKCZwa3QtPmxpc3QpOwoJCWxpc3RfYWRkKCZwa3QtPmxpc3QsICZwcml2LT5mcmVlbGlzdCk7CgkJcHJpdi0+ZnJlZV9sZW4gKz0gUEFDS0VUX1NJWkU7Cgl9CgoJLyoKCSAqIEZvcmNlIGxvdyBsYXRlbmN5IG9uLiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgcHVzaCBkYXRhIHRvIHRoZSBsaW5lCgkgKiBkaXNjaXBsaW5lIGluc3RlYWQgb2YgcXVldWVpbmcuCgkgKi8KCglwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKCXBvcnQtPnR0eS0+cmF3ID0gMTsKCXBvcnQtPnR0eS0+cmVhbF9yYXcgPSAxOwoKCS8qCgkgKiBMb3NlIHRoZSBzbWFsbCBidWZmZXJzIHVzYnNlcmlhbCBwcm92aWRlcy4gTWFrZSBsYXJnZXIgb25lcy4KCSAqLwoKCWtmcmVlKHBvcnQtPmJ1bGtfaW5fYnVmZmVyKTsKCWtmcmVlKHBvcnQtPmJ1bGtfb3V0X2J1ZmZlcik7Cglwb3J0LT5idWxrX2luX2J1ZmZlciA9IGttYWxsb2MoVVJCREFUQV9TSVpFLCBHRlBfS0VSTkVMKTsKCWlmIChwb3J0LT5idWxrX2luX2J1ZmZlciA9PSBOVUxMKSB7CgkJZ290byBlbm9tZW07Cgl9Cglwb3J0LT5idWxrX291dF9idWZmZXIgPSBrbWFsbG9jKFVSQkRBVEFfU0laRSwgR0ZQX0tFUk5FTCk7CglpZiAocG9ydC0+YnVsa19vdXRfYnVmZmVyID09IE5VTEwpIHsKCQlrZnJlZShwb3J0LT5idWxrX2luX2J1ZmZlcik7CgkJZ290byBlbm9tZW07Cgl9Cglwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyID0gcG9ydC0+YnVsa19pbl9idWZmZXI7Cglwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciA9IHBvcnQtPmJ1bGtfb3V0X2J1ZmZlcjsKCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gVVJCREFUQV9TSVpFOwoJcG9ydC0+YnVsa19vdXRfc2l6ZSA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IFVSQkRBVEFfU0laRTsKCQoJbXNsZWVwKDEwMDAqaW5pdGlhbF93YWl0KTsKCgkvKgoJICogU2VuZCBvdXQgY29udHJvbCBtZXNzYWdlIG9ic2VydmVkIGluIHdpbjk4IHNuaWZmcy4gTm90IHN1cmUgd2hhdAoJICogaXQgZG9lcywgYnV0IGZyb20gZW1waXJpY2FsIG9ic2VydmF0aW9ucywgaXQgc2VlbXMgdGhhdCB0aGUgZGV2aWNlCgkgKiB3aWxsIHN0YXJ0IHRoZSBjaGF0IHNlcXVlbmNlIG9uY2Ugb25lIG9mIHRoZXNlIG1lc3NhZ2VzIGdldHMKCSAqIHRocm91Z2guIFNpbmNlIHRoaXMgaGFzIGEgcmVhc29uYWJseSBoaWdoIGZhaWx1cmUgcmF0ZSwgd2UgcmV0cnkKCSAqIHNldmVyYWwgdGltZXMuCgkgKi8KCgl3aGlsZSAocmV0cmllcy0tKSB7CgkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAoJCQkJdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwgMHgyMiwgMHgyMSwKCQkJCTB4MSwgMCwgTlVMTCwgMCwgMTAwKTsKCQlpZiAoIXJlc3VsdCkKCQkJYnJlYWs7CgoJCW1zbGVlcCgxMDAwKTsKCX0KCglpZiAoIXJldHJpZXMgJiYgcmVzdWx0KSB7CgkJZXJyKCIlcyAtIGZhaWxlZCBkb2luZyBjb250cm9sIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sCgkJICAgIHJlc3VsdCk7CgkJZ290byBlcnJvcjsKCX0KCgkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLwoJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAoJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAoJCSAgICAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAoJCSAgICAgIGlwYXFfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKCglyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CglpZiAocmVzdWx0KSB7CgkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKCQlnb3RvIGVycm9yOwoJfQoKCXJldHVybiAwOwoKZW5vbWVtOgoJcmVzdWx0ID0gLUVOT01FTTsKCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19GVU5DVElPTl9fKTsKZXJyb3I6CglpcGFxX2Rlc3Ryb3lfbGlzdHMocG9ydCk7CglrZnJlZShwcml2KTsKCXJldHVybiByZXN1bHQ7Cn0KCgpzdGF0aWMgdm9pZCBpcGFxX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQp7CglzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwoKCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwoJCQkgCgkvKgoJICogc2h1dCBkb3duIGJ1bGsgcmVhZCBhbmQgd3JpdGUKCSAqLwoJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7Cgl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwoJaXBhcV9kZXN0cm95X2xpc3RzKHBvcnQpOwoJa2ZyZWUocHJpdik7Cgl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgTlVMTCk7CgoJLyogVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSBpZiB5b3Ugd2FudCB0byBzZWUgc29tZSBzdGF0aXN0aWNzIGluIHlvdXIgc3lzbG9nICovCgkvKiBpbmZvICgiQnl0ZXMgSW4gPSAlZCAgQnl0ZXMgT3V0ID0gJWQiLCBieXRlc19pbiwgYnl0ZXNfb3V0KTsgKi8KfQoKc3RhdGljIHZvaWQgaXBhcV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQp7CglzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CSpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CglzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OwoJdW5zaWduZWQgY2hhcgkJKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKCWludAkJCXJlc3VsdDsKCglkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKCglpZiAodXJiLT5zdGF0dXMpIHsKCQlkYmcoIiVzIC0gbm9uemVybyByZWFkIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOwoJCXJldHVybjsKCX0KCgl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKCgl0dHkgPSBwb3J0LT50dHk7CglpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewoJCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwoJCWJ5dGVzX2luICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKCX0KCgkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQgICovCgl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsIAoJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAoJCSAgICAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAoJCSAgICAgIGlwYXFfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKCWlmIChyZXN1bHQpCgkJZXJyKCIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOwoJcmV0dXJuOwp9CgpzdGF0aWMgaW50IGlwYXFfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAoJCSAgICAgICBpbnQgY291bnQpCnsKCWNvbnN0IHVuc2lnbmVkIGNoYXIJKmN1cnJlbnRfcG9zaXRpb24gPSBidWY7CglpbnQJCQlieXRlc19zZW50ID0gMDsKCWludAkJCXRyYW5zZmVyX3NpemU7CgoJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CgoJd2hpbGUgKGNvdW50ID4gMCkgewoJCXRyYW5zZmVyX3NpemUgPSBtaW4oY291bnQsIFBBQ0tFVF9TSVpFKTsKCQlpZiAoaXBhcV93cml0ZV9idWxrKHBvcnQsIGN1cnJlbnRfcG9zaXRpb24sIHRyYW5zZmVyX3NpemUpKSB7CgkJCWJyZWFrOwoJCX0KCQljdXJyZW50X3Bvc2l0aW9uICs9IHRyYW5zZmVyX3NpemU7CgkJYnl0ZXNfc2VudCArPSB0cmFuc2Zlcl9zaXplOwoJCWNvdW50IC09IHRyYW5zZmVyX3NpemU7CgkJYnl0ZXNfb3V0ICs9IHRyYW5zZmVyX3NpemU7Cgl9CgoJcmV0dXJuIGJ5dGVzX3NlbnQ7Cn0gCgpzdGF0aWMgaW50IGlwYXFfd3JpdGVfYnVsayhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCgkJCSAgIGludCBjb3VudCkKewoJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKCXN0cnVjdCBpcGFxX3BhY2tldAkqcGt0ID0gTlVMTDsKCWludAkJCXJlc3VsdCA9IDA7Cgl1bnNpZ25lZCBsb25nCQlmbGFnczsKCglpZiAocHJpdi0+ZnJlZV9sZW4gPD0gMCkgewoJCWRiZygiJXMgLSB3ZSdyZSBzdHVmZmVkIiwgX19GVU5DVElPTl9fKTsKCQlyZXR1cm4gLUVBR0FJTjsKCX0KCglzcGluX2xvY2tfaXJxc2F2ZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CglpZiAoIWxpc3RfZW1wdHkoJnByaXYtPmZyZWVsaXN0KSkgewoJCXBrdCA9IGxpc3RfZW50cnkocHJpdi0+ZnJlZWxpc3QubmV4dCwgc3RydWN0IGlwYXFfcGFja2V0LCBsaXN0KTsKCQlsaXN0X2RlbCgmcGt0LT5saXN0KTsKCQlwcml2LT5mcmVlX2xlbiAtPSBQQUNLRVRfU0laRTsKCX0KCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwoJaWYgKHBrdCA9PSBOVUxMKSB7CgkJZGJnKCIlcyAtIHdlJ3JlIHN0dWZmZWQiLCBfX0ZVTkNUSU9OX18pOwoJCXJldHVybiAtRUFHQUlOOwoJfQoKCW1lbWNweShwa3QtPmRhdGEsIGJ1ZiwgY291bnQpOwoJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LCBwa3QtPmRhdGEpOwoKCXBrdC0+bGVuID0gY291bnQ7Cglwa3QtPndyaXR0ZW4gPSAwOwoJc3Bpbl9sb2NrX2lycXNhdmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwoJbGlzdF9hZGRfdGFpbCgmcGt0LT5saXN0LCAmcHJpdi0+cXVldWUpOwoJcHJpdi0+cXVldWVfbGVuICs9IGNvdW50OwoJaWYgKHByaXYtPmFjdGl2ZSA9PSAwKSB7CgkJcHJpdi0+YWN0aXZlID0gMTsKCQlpcGFxX3dyaXRlX2dhdGhlcihwb3J0KTsKCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOwoJCWlmIChyZXN1bHQpIHsKCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CgkJfQoJfSBlbHNlIHsKCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKCX0KCXJldHVybiByZXN1bHQ7Cn0KCnN0YXRpYyB2b2lkIGlwYXFfd3JpdGVfZ2F0aGVyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCnsKCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CglzdHJ1Y3QgdXNiX3NlcmlhbAkqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwoJaW50CQkJY291bnQsIHJvb207CglzdHJ1Y3QgaXBhcV9wYWNrZXQJKnBrdCwgKnRtcDsKCXN0cnVjdCB1cmIJCSp1cmIgPSBwb3J0LT53cml0ZV91cmI7CgoJcm9vbSA9IFVSQkRBVEFfU0laRTsKCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwa3QsIHRtcCwgJnByaXYtPnF1ZXVlLCBsaXN0KSB7CgkJY291bnQgPSBtaW4ocm9vbSwgKGludCkocGt0LT5sZW4gLSBwa3QtPndyaXR0ZW4pKTsKCQltZW1jcHkodXJiLT50cmFuc2Zlcl9idWZmZXIgKyAoVVJCREFUQV9TSVpFIC0gcm9vbSksCgkJICAgICAgIHBrdC0+ZGF0YSArIHBrdC0+d3JpdHRlbiwgY291bnQpOwoJCXJvb20gLT0gY291bnQ7CgkJcGt0LT53cml0dGVuICs9IGNvdW50OwoJCXByaXYtPnF1ZXVlX2xlbiAtPSBjb3VudDsKCQlpZiAocGt0LT53cml0dGVuID09IHBrdC0+bGVuKSB7CgkJCWxpc3RfbW92ZSgmcGt0LT5saXN0LCAmcHJpdi0+ZnJlZWxpc3QpOwoJCQlwcml2LT5mcmVlX2xlbiArPSBQQUNLRVRfU0laRTsKCQl9CgkJaWYgKHJvb20gPT0gMCkgewoJCQlicmVhazsKCQl9Cgl9CgoJY291bnQgPSBVUkJEQVRBX1NJWkUgLSByb29tOwoJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+d3JpdGVfdXJiLCBzZXJpYWwtPmRldiwgCgkJICAgICAgdXNiX3NuZGJ1bGtwaXBlKHNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAoJCSAgICAgIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBjb3VudCwgaXBhcV93cml0ZV9idWxrX2NhbGxiYWNrLAoJCSAgICAgIHBvcnQpOwoJcmV0dXJuOwp9CgpzdGF0aWMgdm9pZCBpcGFxX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQp7CglzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0CSpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CglzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwoJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CglpbnQJCQlyZXN1bHQ7CgoJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CgkKCWlmICh1cmItPnN0YXR1cykgewoJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOwoJCXJldHVybjsKCX0KCglzcGluX2xvY2tfaXJxc2F2ZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CglpZiAoIWxpc3RfZW1wdHkoJnByaXYtPnF1ZXVlKSkgewoJCWlwYXFfd3JpdGVfZ2F0aGVyKHBvcnQpOwoJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwoJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CgkJaWYgKHJlc3VsdCkgewoJCQllcnIoIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKCQl9Cgl9IGVsc2UgewoJCXByaXYtPmFjdGl2ZSA9IDA7CgkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7Cgl9CgoJdXNiX3NlcmlhbF9wb3J0X3NvZnRpbnQocG9ydCk7Cn0KCnN0YXRpYyBpbnQgaXBhcV93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCnsKCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CgoJZGJnKCIlcyAtIGZyZWVsZW4gJWQiLCBfX0ZVTkNUSU9OX18sIHByaXYtPmZyZWVfbGVuKTsKCXJldHVybiBwcml2LT5mcmVlX2xlbjsKfQoKc3RhdGljIGludCBpcGFxX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQp7CglzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwoKCWRiZygiJXMgLSBxdWV1ZWxlbiAlZCIsIF9fRlVOQ1RJT05fXywgcHJpdi0+cXVldWVfbGVuKTsKCXJldHVybiBwcml2LT5xdWV1ZV9sZW47Cn0KCnN0YXRpYyB2b2lkIGlwYXFfZGVzdHJveV9saXN0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQp7CglzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwoJc3RydWN0IGlwYXFfcGFja2V0CSpwa3QsICp0bXA7CgoJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBrdCwgdG1wLCAmcHJpdi0+cXVldWUsIGxpc3QpIHsKCQlrZnJlZShwa3QtPmRhdGEpOwoJCWtmcmVlKHBrdCk7Cgl9CglsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGt0LCB0bXAsICZwcml2LT5mcmVlbGlzdCwgbGlzdCkgewoJCWtmcmVlKHBrdC0+ZGF0YSk7CgkJa2ZyZWUocGt0KTsKCX0KfQoKCnN0YXRpYyBpbnQgaXBhcV9zdGFydHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCnsKCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOwoJaWYgKHNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSAhPSAxKSB7CgkJZXJyKCJhY3RpdmUgY29uZmlnICMlZCAhPSAxID8/IiwKCQkJc2VyaWFsLT5kZXYtPmFjdGNvbmZpZy0+ZGVzYy5iQ29uZmlndXJhdGlvblZhbHVlKTsKCQlyZXR1cm4gLUVOT0RFVjsKCX0KCXJldHVybiB1c2JfcmVzZXRfY29uZmlndXJhdGlvbiAoc2VyaWFsLT5kZXYpOwp9CgpzdGF0aWMgdm9pZCBpcGFxX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCnsKCWRiZygiJXMiLCBfX0ZVTkNUSU9OX18pOwp9CgpzdGF0aWMgaW50IF9faW5pdCBpcGFxX2luaXQodm9pZCkKewoJaW50IHJldHZhbDsKCXNwaW5fbG9ja19pbml0KCZ3cml0ZV9saXN0X2xvY2spOwoJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmaXBhcV9kZXZpY2UpOwoJaWYgKHJldHZhbCkgCgkJZ290byBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjsKCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKCWlmICh2ZW5kb3IpIHsKCQlpcGFxX2lkX3RhYmxlWzBdLmlkVmVuZG9yID0gdmVuZG9yOwoJCWlwYXFfaWRfdGFibGVbMF0uaWRQcm9kdWN0ID0gcHJvZHVjdDsKCX0KCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaXBhcV9kcml2ZXIpOwoJaWYgKHJldHZhbCkKCQlnb3RvIGZhaWxlZF91c2JfcmVnaXN0ZXI7CgkJICAKCXJldHVybiAwOwpmYWlsZWRfdXNiX3JlZ2lzdGVyOgoJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZpcGFxX2RldmljZSk7CmZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOgoJcmV0dXJuIHJldHZhbDsKfQoKCnN0YXRpYyB2b2lkIF9fZXhpdCBpcGFxX2V4aXQodm9pZCkKewoJdXNiX2RlcmVnaXN0ZXIoJmlwYXFfZHJpdmVyKTsKCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXBhcV9kZXZpY2UpOwp9CgoKbW9kdWxlX2luaXQoaXBhcV9pbml0KTsKbW9kdWxlX2V4aXQoaXBhcV9leGl0KTsKCk1PRFVMRV9BVVRIT1IoIERSSVZFUl9BVVRIT1IgKTsKTU9EVUxFX0RFU0NSSVBUSU9OKCBEUklWRVJfREVTQyApOwpNT0RVTEVfTElDRU5TRSgiR1BMIik7Cgptb2R1bGVfcGFyYW0oZGVidWcsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGVuYWJsZWQgb3Igbm90Iik7Cgptb2R1bGVfcGFyYW0odmVuZG9yLCB1c2hvcnQsIDApOwpNT0RVTEVfUEFSTV9ERVNDKHZlbmRvciwgIlVzZXIgc3BlY2lmaWVkIFVTQiBpZFZlbmRvciIpOwoKbW9kdWxlX3BhcmFtKHByb2R1Y3QsIHVzaG9ydCwgMCk7Ck1PRFVMRV9QQVJNX0RFU0MocHJvZHVjdCwgIlVzZXIgc3BlY2lmaWVkIFVTQiBpZFByb2R1Y3QiKTsKCm1vZHVsZV9wYXJhbShjb25uZWN0X3JldHJpZXMsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKTU9EVUxFX1BBUk1fREVTQyhjb25uZWN0X3JldHJpZXMsICJNYXhpbXVtIG51bWJlciBvZiBjb25uZWN0IHJldHJpZXMgKG9uZSBzZWNvbmQgZWFjaCkiKTsKCm1vZHVsZV9wYXJhbShpbml0aWFsX3dhaXQsIGludCwgU19JUlVHT3xTX0lXVVNSKTsKTU9EVUxFX1BBUk1fREVTQyhpbml0aWFsX3dhaXQsICJUaW1lIHRvIHdhaXQgYmVmb3JlIGF0dGVtcHRpbmcgYSBjb25uZWN0aW9uIChpbiBzZWNvbmRzKSIpOwo=