LyoKICogVVNCIENvbXBhcSBpUEFRIGRyaXZlcgogKgogKglDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDAyCiAqCSAgICBHYW5lc2ggVmFyYWRhcmFqYW4gPGdhbmVzaEB2ZXJpdGFzLmNvbT4KICoKICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogKDEyLzEyLzIwMDIpIGdhbmVzaAogKiAJQWRkZWQgc3VwcG9ydCBmb3IgcHJhY3RpY2FsbHkgYWxsIGRldmljZXMgc3VwcG9ydGVkIGJ5IEFjdGl2ZVN5bmMKICogCW9uIFdpbmRvd3MuIFRoYW5rcyB0byBXZXMgQ2lsbGRoYWlyZSA8YmlsbHlib2Jqb2VoZW5yeWJvYkBob3RtYWlsLmNvbT4uCiAqCiAqICgyNi8xMS8yMDAyKSBnYW5lc2gKICogCUFkZGVkIGluc21vZCBvcHRpb25zIHRvIHNwZWNpZnkgcHJvZHVjdCBhbmQgdmVuZG9yIGlkLgogKiAJVXNlIG1vZHByb2JlIGlwYXEgdmVuZG9yPTB4Zm9vIHByb2R1Y3Q9MHhiYXIKICoKICogKDI2LzcvMjAwMikgZ2FuZXNoCiAqIAlGaXhlZCB1cCBicm9rZW4gZXJyb3IgaGFuZGxpbmcgaW4gaXBhcV9vcGVuLiBSZXRyeSB0aGUgImtpY2tzdGFydCIKICogCXBhY2tldCBtdWNoIGhhcmRlciAtIHRoaXMgZHJhc3RpY2FsbHkgcmVkdWNlcyBjb25uZWN0aW9uIGZhaWx1cmVzLgogKgogKiAoMzAvNC8yMDAyKSBnYW5lc2gKICogCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBDYXNpbyBFTTUwMC4gQ29tcGxldGVseSB1bnRlc3RlZC4gVGhhbmtzCiAqIAl0byBpbmZvIGZyb20gTmF0aGFuIDx3ZmlsYXJkb0BmdXNlLm5ldD4KICoKICogKDE5LzMvMjAwMikgZ2FuZXNoCiAqCURvbid0IHN1Ym1pdCB1cmJzIHdoaWxlIGhvbGRpbmcgc3BpbmxvY2tzLiBOb3Qgc3RyaWN0bHkgbmVjZXNzYXJ5CiAqCWluIDIuNS54LgogKgogKiAoOC8zLzIwMDIpIGdhbmVzaAogKiAJVGhlIGlwYXEgc29tZXRpbWVzIGVtaXRzIGEgJ1wwJyBiZWZvcmUgdGhlIENMSUVOVCBzdHJpbmcuIEF0IHRoaXMKICogCXBvaW50IG9mIHRpbWUsIHRoZSBwcHAgbGRpc2MgaXMgbm90IHlldCBhdHRhY2hlZCB0byB0aGUgdHR5LCBzbwogKiAJbl90dHkgZWNob2VzICJeICIgdG8gdGhlIGlwYXEsIHdoaWNoIG1lc3NlcyB1cCB0aGUgY2hhdC4gSW4gMi41LjYtcHJlMgogKiAJdGhpcyBjYXVzZXMgYSBwYW5pYyBiZWNhdXNlIGVjaG9fY2hhcigpIHRyaWVzIHRvIHNsZWVwIGluIGludGVycnVwdAogKiAJY29udGV4dC4KICogCVRoZSBmaXggaXMgdG8gdGVsbCB0aGUgdXBwZXIgbGF5ZXJzIHRoYXQgdGhpcyBpcyBhIHJhdyBkZXZpY2Ugc28gdGhhdAogKiAJZWNob2luZyBpcyBzdXBwcmVzc2VkLiBUaGFua3MgdG8gTHlsZSBMaW5kaG9sbSBmb3IgYSBkZXRhaWxlZCBidWcKICogCXJlcG9ydC4KICoKICogKDI1LzIvMjAwMikgZ2FuZXNoCiAqIAlBZGRlZCBzdXBwb3J0IGZvciB0aGUgSFAgSm9ybmFkYSA1NDggYW5kIDU2OC4gQ29tcGxldGVseSB1bnRlc3RlZC4KICogCVRoYW5rcyB0byBpbmZvIGZyb20gSGVhdGggUm9iaW5zb24gYW5kIEFyaWVoIERhdmlkb2ZmLgogKi8KCiNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiNpbmNsdWRlIDxsaW51eC90dHkuaD4KI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgojaW5jbHVkZSA8bGludXgvdXNiLmg+CiNpbmNsdWRlICJ1c2Itc2VyaWFsLmgiCiNpbmNsdWRlICJpcGFxLmgiCgojZGVmaW5lIEtQX1JFVFJJRVMJMTAwCgovKgogKiBWZXJzaW9uIEluZm9ybWF0aW9uCiAqLwoKI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuNSIKI2RlZmluZSBEUklWRVJfQVVUSE9SICJHYW5lc2ggVmFyYWRhcmFqYW4gPGdhbmVzaEB2ZXJpdGFzLmNvbT4iCiNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBQb2NrZXRQQyBQREEgZHJpdmVyIgoKc3RhdGljIF9fdTE2IHByb2R1Y3QsIHZlbmRvcjsKc3RhdGljIGludCBkZWJ1ZzsKCi8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGFuIGlwYXEgKi8Kc3RhdGljIGludCAgaXBhcV9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CnN0YXRpYyB2b2lkIGlwYXFfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKc3RhdGljIGludCAgaXBhcV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKc3RhdGljIHZvaWQgaXBhcV9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CnN0YXRpYyBpbnQgaXBhcV93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCgkJICAgICAgIGludCBjb3VudCk7CnN0YXRpYyBpbnQgaXBhcV93cml0ZV9idWxrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKCQkJICAgaW50IGNvdW50KTsKc3RhdGljIHZvaWQgaXBhcV93cml0ZV9nYXRoZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CnN0YXRpYyB2b2lkIGlwYXFfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKc3RhdGljIHZvaWQgaXBhcV93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpzdGF0aWMgaW50IGlwYXFfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKc3RhdGljIGludCBpcGFxX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKc3RhdGljIHZvaWQgaXBhcV9kZXN0cm95X2xpc3RzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwoKCnN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpcGFxX2lkX3RhYmxlIFtdID0gewoJLyogVGhlIGZpcnN0IGVudHJ5IGlzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBpbnNtb2Qtc3BlY2lmaWVkIGRldmljZSAqLwoJeyBVU0JfREVWSUNFKDB4MDQ5RiwgMHgwMDAzKSB9LAoJeyBVU0JfREVWSUNFKDB4MDEwNCwgMHgwMEJFKSB9LCAvKiBTb2NrZXQgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MTAxNikgfSwgLyogSFAgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MTExNikgfSwgLyogSFAgVVNCIFN5bmMgMTYxMSAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgxMjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjEyICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDIwMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MjAgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MjExNikgfSwgLyogSFAgVVNCIFN5bmMgMTYyMSAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgyMjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjIyICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDMwMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MzAgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MzExNikgfSwgLyogSFAgVVNCIFN5bmMgMTYzMSAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgzMjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjMyICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDQwMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2NDAgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4NDExNikgfSwgLyogSFAgVVNCIFN5bmMgMTY0MSAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg0MjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjQyICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDUwMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2NTAgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4NTExNikgfSwgLyogSFAgVVNCIFN5bmMgMTY1MSAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg1MjE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjUyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDA5LCAweDAwRDUpIH0sIC8qIE5FQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDQwOSwgMHgwMEQ2KSB9LCAvKiBORUMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0MDksIDB4MDBENykgfSwgLyogTkVDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNDA5LCAweDgwMjQpIH0sIC8qIE5FQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDQwOSwgMHg4MDI1KSB9LCAvKiBORUMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0M0UsIDB4OUMwMSkgfSwgLyogTEdFIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDAwQ0UpIH0sIC8qIE1pY3Jvc29mdCBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDAwKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwMSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDAzKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwNCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDA2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwNykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDA5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwQSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MEIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDBDKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwRCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MEUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDBGKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxMCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDEyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxMykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDE1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxNikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDMyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzMykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDM1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzNikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDM4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzOSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0M0EpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDNCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzQykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0M0QpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDNFKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzRikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQxKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0MikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQ0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0NSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQ3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0OCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDRBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0QikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NEMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDREKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0RSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NEYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDUwKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1MSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDUzKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1NCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDU2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1NykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDU5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1QSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NUIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDVDKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1RCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NUUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDVGKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2MCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDYyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2MykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDY1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2NikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDY4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2OSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NkEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDZCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2QykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NkQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDZFKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2RikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDcxKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3MikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDc0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3NSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDc3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3OCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDdBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3QikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0QzgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRDOSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNENBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0Q0IpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRDQykgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNENEKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0Q0UpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRENykgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEQ4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RDkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDREQSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNERCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRERCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNERFKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFMCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEUxKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFMykgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEU0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFNikgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEU3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFOSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEVBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDlGLCAweDAwMDMpIH0sIC8qIENvbXBhcSBpUEFRIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNDlGLCAweDAwMzIpIH0sIC8qIENvbXBhcSBpUEFRIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEE0LCAweDAwMTQpIH0sIC8qIEhpdGFjaGkgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0QUQsIDB4MDMwMSkgfSwgLyogVVNCIFN5bmMgMDMwMSAqLwoJeyBVU0JfREVWSUNFKDB4MDRBRCwgMHgwMzAyKSB9LCAvKiBVU0IgU3luYyAwMzAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDMpIH0sIC8qIFVTQiBTeW5jIDAzMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0QzUsIDB4MTA1OCkgfSwgLyogRlVKSVRTVSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRDNSwgMHgxMDc5KSB9LCAvKiBGVUpJVFNVIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNERBLCAweDI1MDApIH0sIC8qIFBhbmFzb25pYyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg1RjAwKSB9LCAvKiBTYW1zdW5nIE5FWGlPIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDVGMDEpIH0sIC8qIFNhbXN1bmcgTkVYaU8gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMikgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg1RjAzKSB9LCAvKiBTYW1zdW5nIE5FWGlPIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDVGMDQpIH0sIC8qIFNhbXN1bmcgTkVYaU8gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxMSkgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MTMpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjE1KSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxNykgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MTkpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjFCKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYyRSkgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MzApIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjMyKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0ZjEsIDB4MzAxMSkgfSwgLyogSlZDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEYxLCAweDMwMTIpIH0sIC8qIEpWQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNjMxKSB9LCAvKiBjMTAgU2VyaWVzICovCgl7IFVTQl9ERVZJQ0UoMHgwNTAyLCAweDE2MzIpIH0sIC8qIGMyMCBTZXJpZXMgKi8KCXsgVVNCX0RFVklDRSgweDA1MDIsIDB4MTZFMSkgfSwgLyogQWNlciBuMTAgSGFuZGhlbGQgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA1MDIsIDB4MTZFMikgfSwgLyogQWNlciBuMjAgSGFuZGhlbGQgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA1MDIsIDB4MTZFMykgfSwgLyogQWNlciBuMzAgSGFuZGhlbGQgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA1MzYsIDB4MDFBMCkgfSwgLyogSEhQIFBEVCAqLwoJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgwRUQ5KSB9LCAvKiBWaWV3U29uaWMgQ29sb3IgUG9ja2V0IFBDIFYzNSAqLwoJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxNTI3KSB9LCAvKiBWaWV3U29uaWMgQ29sb3IgUG9ja2V0IFBDIFYzNiAqLwoJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxNTI5KSB9LCAvKiBWaWV3U29uaWMgQ29sb3IgUG9ja2V0IFBDIFYzNyAqLwoJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxNTJCKSB9LCAvKiBWaWV3U29uaWMgQ29sb3IgUG9ja2V0IFBDIFYzOCAqLwoJeyBVU0JfREVWSUNFKDB4MDU0MywgMHgxNTJFKSB9LCAvKiBWaWV3U29uaWMgUG9ja2V0IFBDICovCgl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE5MjEpIH0sIC8qIFZpZXdTb25pYyBDb21tdW5pY2F0b3IgUG9ja2V0IFBDICovCgl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE5MjIpIH0sIC8qIFZpZXdTb25pYyBTbWFydHBob25lICovCgl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE5MjMpIH0sIC8qIFZpZXdTb25pYyBQb2NrZXQgUEMgVjMwICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDApIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDAxKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDAxICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDIpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwMykgfSwgLyogU3ltYm9sIFVTQiBTeW5jIDB4MjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA0KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA0ICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDUpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDUgKi8KCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwNikgfSwgLyogU3ltYm9sIFVTQiBTeW5jIDB4MjAwNiAqLwoJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA3KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA3ICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDgpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDggKi8KCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwOSkgfSwgLyogU3ltYm9sIFVTQiBTeW5jIDB4MjAwOSAqLwoJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDBBKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDBBICovCgl7IFVTQl9ERVZJQ0UoMHgwNjdFLCAweDEwMDEpIH0sIC8qIEludGVybWVjIE1vYmlsZSBDb21wdXRlciAqLwoJeyBVU0JfREVWSUNFKDB4MDdDRiwgMHgyMDAxKSB9LCAvKiBDQVNJTyBVU0IgU3luYyAyMDAxICovCgl7IFVTQl9ERVZJQ0UoMHgwN0NGLCAweDIwMDIpIH0sIC8qIENBU0lPIFVTQiBTeW5jIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA3Q0YsIDB4MjAwMykgfSwgLyogQ0FTSU8gVVNCIFN5bmMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzAwKSB9LCAvKiBUT1NISUJBIFVTQiBTeW5jIDA3MDAgKi8KCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwNSkgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTMxMCAqLwoJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzA2KSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlNzQwICovCgl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDcpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGUzMzAgU2VyaWVzICovCgl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDgpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGUzNTCgU2VyaWVzICovCgl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDkpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGU3NTAgU2VyaWVzICovCgl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MEEpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGU0MDAgU2VyaWVzICovCgl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MEIpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGU4MDAgU2VyaWVzICovCgl7IFVTQl9ERVZJQ0UoMHgwOTRCLCAweDAwMDEpIH0sIC8qIExpbmt1cCBTeXN0ZW1zIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwOTYwLCAweDAwNjUpIH0sIC8qIEJDT00gVVNCIFN5bmMgMDA2NSAqLwoJeyBVU0JfREVWSUNFKDB4MDk2MCwgMHgwMDY2KSB9LCAvKiBCQ09NIFVTQiBTeW5jIDAwNjYgKi8KCXsgVVNCX0RFVklDRSgweDA5NjAsIDB4MDA2NykgfSwgLyogQkNPTSBVU0IgU3luYyAwMDY3ICovCgl7IFVTQl9ERVZJQ0UoMHgwOTYxLCAweDAwMTApIH0sIC8qIFBvcnRhdGVjIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwOTlFLCAweDAwNTIpIH0sIC8qIFRyaW1ibGUgR2VvRXhwbG9yZXIgKi8KCXsgVVNCX0RFVklDRSgweDA5OUUsIDB4NDAwMCkgfSwgLyogVERTIERhdGEgQ29sbGVjdG9yICovCgl7IFVTQl9ERVZJQ0UoMHgwQjA1LCAweDQyMDApIH0sIC8qIEFTVVMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCMDUsIDB4NDIwMSkgfSwgLyogQVNVUyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjAyKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQjA1LCAweDQyMEYpIH0sIC8qIEFTVVMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCMDUsIDB4OTIwMCkgfSwgLyogQVNVUyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg5MjAyKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDAwQ0UpIH0sIC8qIEhUQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTAxKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTAyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTAzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTA5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBEKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTBGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTEwKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTExKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTEyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTEzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTE5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFEKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTFGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTIwKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTIxKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTIyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTIzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTI5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJEKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTJGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTMwKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTMxKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTMyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTMzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTM5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNEKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTNGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQwKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQxKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQyKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQzKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ0KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ1KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ2KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ3KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ4KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTQ5KSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRBKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRCKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRDKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTREKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRFKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTRGKSB9LCAvKiBQb2NrZXRQQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTUwKSB9LCAvKiBIVEMgU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTUxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1MykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1NikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTgpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1OSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNUIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1QykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNUUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1RikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTYwKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2MikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTYzKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2NSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjcpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2OCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNkEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2QikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNkQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2RSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzApIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3MSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTcyKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3NCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc1KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3NykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc4KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzkpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3QSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdCKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBN0MpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3RCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBN0YpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4MCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTgxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4MykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4NikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODgpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4OSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOEIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4QykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOEUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4RikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTkwKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5MikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTkzKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5NSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTcpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5OCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOUEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5QikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOUQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5RSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkY4LCAweDEwMDEpIH0sIC8qIEZ1aml0c3UgU2llbWVucyBDb21wdXRlcnMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBDNDQsIDB4MDNBMikgfSwgLyogTW90b3JvbGEgaURFTiBTbWFydHBob25lICovCgl7IFVTQl9ERVZJQ0UoMHgwQzhFLCAweDYwMDApIH0sIC8qIENlc3Njb20gTHV4aWFuIFNlcmllcyAqLwoJeyBVU0JfREVWSUNFKDB4MENBRCwgMHg5MDAxKSB9LCAvKiBNb3Rvcm9sYSBQb3dlclBhZCBQb2NrZXQgUEOgRGV2aWNlICovCgl7IFVTQl9ERVZJQ0UoMHgwRjRFLCAweDAyMDApIH0sIC8qIEZyZWVkb20gU2NpZW50aWZpYyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEY5OCwgMHgwMjAxKSB9LCAvKiBDeWJlcmJhbmsgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBGQjgsIDB4MzAwMSkgfSwgLyogV2lzdHJvbiBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEZCOCwgMHgzMDAyKSB9LCAvKiBXaXN0cm9uIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwRkI4LCAweDMwMDMpIH0sIC8qIFdpc3Ryb24gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBGQjgsIDB4NDAwMSkgfSwgLyogV2lzdHJvbiBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MTA2NiwgMHgwMENFKSB9LCAvKiBFLVRFTiBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MTA2NiwgMHgwMzAwKSB9LCAvKiBFLVRFTiBQM1hYIFBvY2tldCBQQyAqLwoJeyBVU0JfREVWSUNFKDB4MTA2NiwgMHgwNTAwKSB9LCAvKiBFLVRFTiBQNVhYIFBvY2tldCBQQyAqLwoJeyBVU0JfREVWSUNFKDB4MTA2NiwgMHgwNjAwKSB9LCAvKiBFLVRFTiBQNlhYIFBvY2tldCBQQyAqLwoJeyBVU0JfREVWSUNFKDB4MTA2NiwgMHgwNzAwKSB9LCAvKiBFLVRFTiBQN1hYIFBvY2tldCBQQyAqLwoJeyBVU0JfREVWSUNFKDB4MTExNCwgMHgwMDAxKSB9LCAvKiBQc2lvbiBUZWtsb2dpeCBTeW5jIDc1M3ggKi8KCXsgVVNCX0RFVklDRSgweDExMTQsIDB4MDAwNCkgfSwgLyogUHNpb24gVGVrbG9naXggU3luYyBuZXRCb29rUHJvICovCgl7IFVTQl9ERVZJQ0UoMHgxMTE0LCAweDAwMDYpIH0sIC8qIFBzaW9uIFRla2xvZ2l4IFN5bmMgNzUyNSAqLwoJeyBVU0JfREVWSUNFKDB4MTE4MiwgMHgxMzg4KSB9LCAvKiBWRVMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDExRDksIDB4MTAwMikgfSwgLyogUnVnZ2VkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgxMUQ5LCAweDEwMDMpIH0sIC8qIFJ1Z2dlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MTIzMSwgMHhDRTAxKSB9LCAvKiBVU0IgU3luYyAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MTIzMSwgMHhDRTAyKSB9LCAvKiBVU0IgU3luYyAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MTY5MCwgMHgwNjAxKSB9LCAvKiBBc2tleSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MjJCOCwgMHg0MjA0KSB9LCAvKiBNb3Rvcm9sYSBNUHgyMDAgU21hcnRwaG9uZSAqLwoJeyBVU0JfREVWSUNFKDB4MjJCOCwgMHg0MjE0KSB9LCAvKiBNb3Rvcm9sYSBNUGMgR1NNICovCgl7IFVTQl9ERVZJQ0UoMHgyMkI4LCAweDQyMjQpIH0sIC8qIE1vdG9yb2xhIE1QeDIyMCBTbWFydHBob25lICovCgl7IFVTQl9ERVZJQ0UoMHgyMkI4LCAweDQyMzQpIH0sIC8qIE1vdG9yb2xhIE1QYyBDRE1BICovCgl7IFVTQl9ERVZJQ0UoMHgyMkI4LCAweDQyNDQpIH0sIC8qIE1vdG9yb2xhIE1QeDEwMCBTbWFydHBob25lICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDAxMUMpIH0sIC8qIE1pbyBEaWdpV2Fsa2VyIFBQQyBTdHJvbmdBUk0gKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDMyNikgfSwgLyogTWlvIERpZ2lXYWxrZXIgMzM4ICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDA0MjYpIH0sIC8qIE1pbyBEaWdpV2Fsa2VyIDMzOCAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwNDNBKSB9LCAvKiBNaW8gRGlnaVdhbGtlciBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwNTFDKSB9LCAvKiBNaVRBQyBVU0IgU3luYyA1MjggKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDUzQSkgfSwgLyogTWlvIERpZ2lXYWxrZXIgU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwNzFDKSB9LCAvKiBNaVRBQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwQjFDKSB9LCAvKiBHZW5lcmljIFBQQyBTdHJvbmdBUk0gKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MEUzQSkgfSwgLyogR2VuZXJpYyBQUEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MEYxQykgfSwgLyogSXRhdXRlYyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwRjNBKSB9LCAvKiBHZW5lcmljIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MTMyNikgfSwgLyogSXRhdXRlYyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgxOTFDKSB9LCAvKiBZQUtVTU8gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MjMyNikgfSwgLyogVm9iaXMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MzMyNikgfSwgLyogTUVESU9OIFdpbm9kd3MgTW9ibGUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDM3MDgsIDB4MjBDRSkgfSwgLyogTGVnZW5kIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgzNzA4LCAweDIxQ0UpIH0sIC8qIExlbm92byBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDExMywgMHgwMjEwKSB9LCAvKiBNb2JpbGUgTWVkaWEgVGVjaG5vbG9neSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDExMywgMHgwMjExKSB9LCAvKiBNb2JpbGUgTWVkaWEgVGVjaG5vbG9neSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDExMywgMHgwNDAwKSB9LCAvKiBNb2JpbGUgTWVkaWEgVGVjaG5vbG9neSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDExMywgMHgwNDEwKSB9LCAvKiBNb2JpbGUgTWVkaWEgVGVjaG5vbG9neSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDAxKSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwMikgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDMpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA0KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwNSkgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDYpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA3KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwOCkgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDkpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDUwNSwgMHgwMDEwKSB9LCAvKiBTbWFydHBob25lICovCgl7IFVTQl9ERVZJQ0UoMHg1RTA0LCAweENFMDApIH0sIC8qIFNBR0VNIFdpcmVsZXNzIEFzc2lzdGFudCAqLwoJeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwp9OwoKTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpcGFxX2lkX3RhYmxlKTsKCnN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpcGFxX2RyaXZlciA9IHsKCS5uYW1lID0JCSJpcGFxIiwKCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCgkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKCS5pZF90YWJsZSA9CWlwYXFfaWRfdGFibGUsCgkubm9fZHluYW1pY19pZCA9IAkxLAp9OwoKCi8qIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgQ29tcGFxIGlQQVEgKi8Kc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBpcGFxX2RldmljZSA9IHsKCS5kcml2ZXIgPSB7CgkJLm93bmVyID0JVEhJU19NT0RVTEUsCgkJLm5hbWUgPQkJImlwYXEiLAoJfSwKCS5kZXNjcmlwdGlvbiA9CQkiUG9ja2V0UEMgUERBIiwKCS5pZF90YWJsZSA9CQlpcGFxX2lkX3RhYmxlLAoJLm51bV9pbnRlcnJ1cHRfaW4gPQlOVU1fRE9OVF9DQVJFLAoJLm51bV9idWxrX2luID0JCTEsCgkubnVtX2J1bGtfb3V0ID0JCTEsCgkubnVtX3BvcnRzID0JCTEsCgkub3BlbiA9CQkJaXBhcV9vcGVuLAoJLmNsb3NlID0JCWlwYXFfY2xvc2UsCgkuYXR0YWNoID0JCWlwYXFfc3RhcnR1cCwKCS5zaHV0ZG93biA9CQlpcGFxX3NodXRkb3duLAoJLndyaXRlID0JCWlwYXFfd3JpdGUsCgkud3JpdGVfcm9vbSA9CQlpcGFxX3dyaXRlX3Jvb20sCgkuY2hhcnNfaW5fYnVmZmVyID0JaXBhcV9jaGFyc19pbl9idWZmZXIsCgkucmVhZF9idWxrX2NhbGxiYWNrID0JaXBhcV9yZWFkX2J1bGtfY2FsbGJhY2ssCgkud3JpdGVfYnVsa19jYWxsYmFjayA9CWlwYXFfd3JpdGVfYnVsa19jYWxsYmFjaywKfTsKCnN0YXRpYyBzcGlubG9ja190CXdyaXRlX2xpc3RfbG9jazsKc3RhdGljIGludAkJYnl0ZXNfaW47CnN0YXRpYyBpbnQJCWJ5dGVzX291dDsKCnN0YXRpYyBpbnQgaXBhcV9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQp7CglzdHJ1Y3QgdXNiX3NlcmlhbAkqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwoJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdjsKCXN0cnVjdCBpcGFxX3BhY2tldAkqcGt0OwoJaW50CQkJaSwgcmVzdWx0ID0gMDsKCWludAkJCXJldHJpZXMgPSBLUF9SRVRSSUVTOwoKCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwoKCWJ5dGVzX2luID0gMDsKCWJ5dGVzX291dCA9IDA7Cglwcml2ID0gKHN0cnVjdCBpcGFxX3ByaXZhdGUgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXBhcV9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CglpZiAocHJpdiA9PSBOVUxMKSB7CgkJZXJyKCIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX0ZVTkNUSU9OX18pOwoJCXJldHVybiAtRU5PTUVNOwoJfQoJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIHByaXYpOwoJcHJpdi0+YWN0aXZlID0gMDsKCXByaXYtPnF1ZXVlX2xlbiA9IDA7Cglwcml2LT5mcmVlX2xlbiA9IDA7CglJTklUX0xJU1RfSEVBRCgmcHJpdi0+cXVldWUpOwoJSU5JVF9MSVNUX0hFQUQoJnByaXYtPmZyZWVsaXN0KTsKCglmb3IgKGkgPSAwOyBpIDwgVVJCREFUQV9RVUVVRV9NQVggLyBQQUNLRVRfU0laRTsgaSsrKSB7CgkJcGt0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwYXFfcGFja2V0KSwgR0ZQX0tFUk5FTCk7CgkJaWYgKHBrdCA9PSBOVUxMKSB7CgkJCWdvdG8gZW5vbWVtOwoJCX0KCQlwa3QtPmRhdGEgPSBrbWFsbG9jKFBBQ0tFVF9TSVpFLCBHRlBfS0VSTkVMKTsKCQlpZiAocGt0LT5kYXRhID09IE5VTEwpIHsKCQkJa2ZyZWUocGt0KTsKCQkJZ290byBlbm9tZW07CgkJfQoJCXBrdC0+bGVuID0gMDsKCQlwa3QtPndyaXR0ZW4gPSAwOwoJCUlOSVRfTElTVF9IRUFEKCZwa3QtPmxpc3QpOwoJCWxpc3RfYWRkKCZwa3QtPmxpc3QsICZwcml2LT5mcmVlbGlzdCk7CgkJcHJpdi0+ZnJlZV9sZW4gKz0gUEFDS0VUX1NJWkU7Cgl9CgoJLyoKCSAqIEZvcmNlIGxvdyBsYXRlbmN5IG9uLiBUaGlzIHdpbGwgaW1tZWRpYXRlbHkgcHVzaCBkYXRhIHRvIHRoZSBsaW5lCgkgKiBkaXNjaXBsaW5lIGluc3RlYWQgb2YgcXVldWVpbmcuCgkgKi8KCglwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKCXBvcnQtPnR0eS0+cmF3ID0gMTsKCXBvcnQtPnR0eS0+cmVhbF9yYXcgPSAxOwoKCS8qCgkgKiBMb3NlIHRoZSBzbWFsbCBidWZmZXJzIHVzYnNlcmlhbCBwcm92aWRlcy4gTWFrZSBsYXJnZXIgb25lcy4KCSAqLwoKCWtmcmVlKHBvcnQtPmJ1bGtfaW5fYnVmZmVyKTsKCWtmcmVlKHBvcnQtPmJ1bGtfb3V0X2J1ZmZlcik7Cglwb3J0LT5idWxrX2luX2J1ZmZlciA9IGttYWxsb2MoVVJCREFUQV9TSVpFLCBHRlBfS0VSTkVMKTsKCWlmIChwb3J0LT5idWxrX2luX2J1ZmZlciA9PSBOVUxMKSB7CgkJZ290byBlbm9tZW07Cgl9Cglwb3J0LT5idWxrX291dF9idWZmZXIgPSBrbWFsbG9jKFVSQkRBVEFfU0laRSwgR0ZQX0tFUk5FTCk7CglpZiAocG9ydC0+YnVsa19vdXRfYnVmZmVyID09IE5VTEwpIHsKCQlrZnJlZShwb3J0LT5idWxrX2luX2J1ZmZlcik7CgkJZ290byBlbm9tZW07Cgl9Cglwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyID0gcG9ydC0+YnVsa19pbl9idWZmZXI7Cglwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciA9IHBvcnQtPmJ1bGtfb3V0X2J1ZmZlcjsKCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gVVJCREFUQV9TSVpFOwoJcG9ydC0+YnVsa19vdXRfc2l6ZSA9IHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IFVSQkRBVEFfU0laRTsKCQoJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwgCgkJICAgICAgdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCgkJICAgICAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCgkJICAgICAgaXBhcV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwoJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwoJaWYgKHJlc3VsdCkgewoJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CgkJZ290byBlcnJvcjsKCX0KCgkvKgoJICogU2VuZCBvdXQgY29udHJvbCBtZXNzYWdlIG9ic2VydmVkIGluIHdpbjk4IHNuaWZmcy4gTm90IHN1cmUgd2hhdAoJICogaXQgZG9lcywgYnV0IGZyb20gZW1waXJpY2FsIG9ic2VydmF0aW9ucywgaXQgc2VlbXMgdGhhdCB0aGUgZGV2aWNlCgkgKiB3aWxsIHN0YXJ0IHRoZSBjaGF0IHNlcXVlbmNlIG9uY2Ugb25lIG9mIHRoZXNlIG1lc3NhZ2VzIGdldHMKCSAqIHRocm91Z2guIFNpbmNlIHRoaXMgaGFzIGEgcmVhc29uYWJseSBoaWdoIGZhaWx1cmUgcmF0ZSwgd2UgcmV0cnkKCSAqIHNldmVyYWwgdGltZXMuCgkgKi8KCgl3aGlsZSAocmV0cmllcy0tKSB7CgkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAoJCQkJdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwgMHgyMiwgMHgyMSwKCQkJCTB4MSwgMCwgTlVMTCwgMCwgMTAwKTsKCQlpZiAocmVzdWx0ID09IDApIHsKCQkJcmV0dXJuIDA7CgkJfQoJfQoJZXJyKCIlcyAtIGZhaWxlZCBkb2luZyBjb250cm9sIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7Cglnb3RvIGVycm9yOwoKZW5vbWVtOgoJcmVzdWx0ID0gLUVOT01FTTsKCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19GVU5DVElPTl9fKTsKZXJyb3I6CglpcGFxX2Rlc3Ryb3lfbGlzdHMocG9ydCk7CglrZnJlZShwcml2KTsKCXJldHVybiByZXN1bHQ7Cn0KCgpzdGF0aWMgdm9pZCBpcGFxX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQp7CglzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwoKCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwoJCQkgCgkvKgoJICogc2h1dCBkb3duIGJ1bGsgcmVhZCBhbmQgd3JpdGUKCSAqLwoJdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7Cgl1c2Jfa2lsbF91cmIocG9ydC0+cmVhZF91cmIpOwoJaXBhcV9kZXN0cm95X2xpc3RzKHBvcnQpOwoJa2ZyZWUocHJpdik7Cgl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgTlVMTCk7CgoJLyogVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSBpZiB5b3Ugd2FudCB0byBzZWUgc29tZSBzdGF0aXN0aWNzIGluIHlvdXIgc3lzbG9nICovCgkvKiBpbmZvICgiQnl0ZXMgSW4gPSAlZCAgQnl0ZXMgT3V0ID0gJWQiLCBieXRlc19pbiwgYnl0ZXNfb3V0KTsgKi8KfQoKc3RhdGljIHZvaWQgaXBhcV9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKewoJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OwoJc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKCXVuc2lnbmVkIGNoYXIJCSpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CglpbnQJCQlyZXN1bHQ7CgoJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CgoJaWYgKHVyYi0+c3RhdHVzKSB7CgkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKCQlyZXR1cm47Cgl9CgoJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CgoJdHR5ID0gcG9ydC0+dHR5OwoJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CgkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CgkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKCQlieXRlc19pbiArPSB1cmItPmFjdHVhbF9sZW5ndGg7Cgl9CgoJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkICAqLwoJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LCAKCQkgICAgICB1c2JfcmN2YnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKCQkgICAgICBpcGFxX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CglyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CglpZiAocmVzdWx0KQoJCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKCXJldHVybjsKfQoKc3RhdGljIGludCBpcGFxX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKCQkgICAgICAgaW50IGNvdW50KQp7Cgljb25zdCB1bnNpZ25lZCBjaGFyCSpjdXJyZW50X3Bvc2l0aW9uID0gYnVmOwoJaW50CQkJYnl0ZXNfc2VudCA9IDA7CglpbnQJCQl0cmFuc2Zlcl9zaXplOwoKCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwoKCXdoaWxlIChjb3VudCA+IDApIHsKCQl0cmFuc2Zlcl9zaXplID0gbWluKGNvdW50LCBQQUNLRVRfU0laRSk7CgkJaWYgKGlwYXFfd3JpdGVfYnVsayhwb3J0LCBjdXJyZW50X3Bvc2l0aW9uLCB0cmFuc2Zlcl9zaXplKSkgewoJCQlicmVhazsKCQl9CgkJY3VycmVudF9wb3NpdGlvbiArPSB0cmFuc2Zlcl9zaXplOwoJCWJ5dGVzX3NlbnQgKz0gdHJhbnNmZXJfc2l6ZTsKCQljb3VudCAtPSB0cmFuc2Zlcl9zaXplOwoJCWJ5dGVzX291dCArPSB0cmFuc2Zlcl9zaXplOwoJfQoKCXJldHVybiBieXRlc19zZW50Owp9IAoKc3RhdGljIGludCBpcGFxX3dyaXRlX2J1bGsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAoJCQkgICBpbnQgY291bnQpCnsKCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CglzdHJ1Y3QgaXBhcV9wYWNrZXQJKnBrdCA9IE5VTEw7CglpbnQJCQlyZXN1bHQgPSAwOwoJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CgoJaWYgKHByaXYtPmZyZWVfbGVuIDw9IDApIHsKCQlkYmcoIiVzIC0gd2UncmUgc3R1ZmZlZCIsIF9fRlVOQ1RJT05fXyk7CgkJcmV0dXJuIC1FQUdBSU47Cgl9CgoJc3Bpbl9sb2NrX2lycXNhdmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwoJaWYgKCFsaXN0X2VtcHR5KCZwcml2LT5mcmVlbGlzdCkpIHsKCQlwa3QgPSBsaXN0X2VudHJ5KHByaXYtPmZyZWVsaXN0Lm5leHQsIHN0cnVjdCBpcGFxX3BhY2tldCwgbGlzdCk7CgkJbGlzdF9kZWwoJnBrdC0+bGlzdCk7CgkJcHJpdi0+ZnJlZV9sZW4gLT0gUEFDS0VUX1NJWkU7Cgl9CglzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKCWlmIChwa3QgPT0gTlVMTCkgewoJCWRiZygiJXMgLSB3ZSdyZSBzdHVmZmVkIiwgX19GVU5DVElPTl9fKTsKCQlyZXR1cm4gLUVBR0FJTjsKCX0KCgltZW1jcHkocGt0LT5kYXRhLCBidWYsIGNvdW50KTsKCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBjb3VudCwgcGt0LT5kYXRhKTsKCglwa3QtPmxlbiA9IGNvdW50OwoJcGt0LT53cml0dGVuID0gMDsKCXNwaW5fbG9ja19pcnFzYXZlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKCWxpc3RfYWRkX3RhaWwoJnBrdC0+bGlzdCwgJnByaXYtPnF1ZXVlKTsKCXByaXYtPnF1ZXVlX2xlbiArPSBjb3VudDsKCWlmIChwcml2LT5hY3RpdmUgPT0gMCkgewoJCXByaXYtPmFjdGl2ZSA9IDE7CgkJaXBhcV93cml0ZV9nYXRoZXIocG9ydCk7CgkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CgkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKCQlpZiAocmVzdWx0KSB7CgkJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOwoJCX0KCX0gZWxzZSB7CgkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7Cgl9CglyZXR1cm4gcmVzdWx0Owp9CgpzdGF0aWMgdm9pZCBpcGFxX3dyaXRlX2dhdGhlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQp7CglzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwoJc3RydWN0IHVzYl9zZXJpYWwJKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKCWludAkJCWNvdW50LCByb29tOwoJc3RydWN0IGlwYXFfcGFja2V0CSpwa3QsICp0bXA7CglzdHJ1Y3QgdXJiCQkqdXJiID0gcG9ydC0+d3JpdGVfdXJiOwoKCXJvb20gPSBVUkJEQVRBX1NJWkU7CglsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGt0LCB0bXAsICZwcml2LT5xdWV1ZSwgbGlzdCkgewoJCWNvdW50ID0gbWluKHJvb20sIChpbnQpKHBrdC0+bGVuIC0gcGt0LT53cml0dGVuKSk7CgkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgKFVSQkRBVEFfU0laRSAtIHJvb20pLAoJCSAgICAgICBwa3QtPmRhdGEgKyBwa3QtPndyaXR0ZW4sIGNvdW50KTsKCQlyb29tIC09IGNvdW50OwoJCXBrdC0+d3JpdHRlbiArPSBjb3VudDsKCQlwcml2LT5xdWV1ZV9sZW4gLT0gY291bnQ7CgkJaWYgKHBrdC0+d3JpdHRlbiA9PSBwa3QtPmxlbikgewoJCQlsaXN0X21vdmUoJnBrdC0+bGlzdCwgJnByaXYtPmZyZWVsaXN0KTsKCQkJcHJpdi0+ZnJlZV9sZW4gKz0gUEFDS0VUX1NJWkU7CgkJfQoJCWlmIChyb29tID09IDApIHsKCQkJYnJlYWs7CgkJfQoJfQoKCWNvdW50ID0gVVJCREFUQV9TSVpFIC0gcm9vbTsKCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPndyaXRlX3VyYiwgc2VyaWFsLT5kZXYsIAoJCSAgICAgIHVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKCQkgICAgICBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgY291bnQsIGlwYXFfd3JpdGVfYnVsa19jYWxsYmFjaywKCQkgICAgICBwb3J0KTsKCXJldHVybjsKfQoKc3RhdGljIHZvaWQgaXBhcV93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCnsKCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQJKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKXVyYi0+Y29udGV4dDsKCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Cgl1bnNpZ25lZCBsb25nCQlmbGFnczsKCWludAkJCXJlc3VsdDsKCglkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKCQoJaWYgKHVyYi0+c3RhdHVzKSB7CgkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7Cgl9CgoJc3Bpbl9sb2NrX2lycXNhdmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwoJaWYgKCFsaXN0X2VtcHR5KCZwcml2LT5xdWV1ZSkpIHsKCQlpcGFxX3dyaXRlX2dhdGhlcihwb3J0KTsKCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOwoJCWlmIChyZXN1bHQpIHsKCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CgkJfQoJfSBlbHNlIHsKCQlwcml2LT5hY3RpdmUgPSAwOwoJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwoJfQoKCXVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KHBvcnQpOwp9CgpzdGF0aWMgaW50IGlwYXFfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQp7CglzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwoKCWRiZygiJXMgLSBmcmVlbGVuICVkIiwgX19GVU5DVElPTl9fLCBwcml2LT5mcmVlX2xlbik7CglyZXR1cm4gcHJpdi0+ZnJlZV9sZW47Cn0KCnN0YXRpYyBpbnQgaXBhcV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKewoJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKCglkYmcoIiVzIC0gcXVldWVsZW4gJWQiLCBfX0ZVTkNUSU9OX18sIHByaXYtPnF1ZXVlX2xlbik7CglyZXR1cm4gcHJpdi0+cXVldWVfbGVuOwp9CgpzdGF0aWMgdm9pZCBpcGFxX2Rlc3Ryb3lfbGlzdHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKewoJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKCXN0cnVjdCBpcGFxX3BhY2tldAkqcGt0LCAqdG1wOwoKCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwa3QsIHRtcCwgJnByaXYtPnF1ZXVlLCBsaXN0KSB7CgkJa2ZyZWUocGt0LT5kYXRhKTsKCQlrZnJlZShwa3QpOwoJfQoJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBrdCwgdG1wLCAmcHJpdi0+ZnJlZWxpc3QsIGxpc3QpIHsKCQlrZnJlZShwa3QtPmRhdGEpOwoJCWtmcmVlKHBrdCk7Cgl9Cn0KCgpzdGF0aWMgaW50IGlwYXFfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQp7CglkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKCWlmIChzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkgewoJCWVycigiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/PyIsCgkJCXNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CgkJcmV0dXJuIC1FTk9ERVY7Cgl9CglyZXR1cm4gdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24gKHNlcmlhbC0+ZGV2KTsKfQoKc3RhdGljIHZvaWQgaXBhcV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQp7CglkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKfQoKc3RhdGljIGludCBfX2luaXQgaXBhcV9pbml0KHZvaWQpCnsKCWludCByZXR2YWw7CglzcGluX2xvY2tfaW5pdCgmd3JpdGVfbGlzdF9sb2NrKTsKCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmlwYXFfZGV2aWNlKTsKCWlmIChyZXR2YWwpIAoJCWdvdG8gZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI7CglpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CglpZiAodmVuZG9yKSB7CgkJaXBhcV9pZF90YWJsZVswXS5pZFZlbmRvciA9IHZlbmRvcjsKCQlpcGFxX2lkX3RhYmxlWzBdLmlkUHJvZHVjdCA9IHByb2R1Y3Q7Cgl9CglyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmlwYXFfZHJpdmVyKTsKCWlmIChyZXR2YWwpCgkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwoJCSAgCglyZXR1cm4gMDsKZmFpbGVkX3VzYl9yZWdpc3RlcjoKCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXBhcV9kZXZpY2UpOwpmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjoKCXJldHVybiByZXR2YWw7Cn0KCgpzdGF0aWMgdm9pZCBfX2V4aXQgaXBhcV9leGl0KHZvaWQpCnsKCXVzYl9kZXJlZ2lzdGVyKCZpcGFxX2RyaXZlcik7Cgl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmlwYXFfZGV2aWNlKTsKfQoKCm1vZHVsZV9pbml0KGlwYXFfaW5pdCk7Cm1vZHVsZV9leGl0KGlwYXFfZXhpdCk7CgpNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7Ck1PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwoKbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7Ck1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwoKbW9kdWxlX3BhcmFtKHZlbmRvciwgdXNob3J0LCAwKTsKTU9EVUxFX1BBUk1fREVTQyh2ZW5kb3IsICJVc2VyIHNwZWNpZmllZCBVU0IgaWRWZW5kb3IiKTsKCm1vZHVsZV9wYXJhbShwcm9kdWN0LCB1c2hvcnQsIDApOwpNT0RVTEVfUEFSTV9ERVNDKHByb2R1Y3QsICJVc2VyIHNwZWNpZmllZCBVU0IgaWRQcm9kdWN0Iik7Cg==