LyoKICogVVNCIENvbXBhcSBpUEFRIGRyaXZlcgogKgogKglDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDAyCiAqCSAgICBHYW5lc2ggVmFyYWRhcmFqYW4gPGdhbmVzaEB2ZXJpdGFzLmNvbT4KICoKICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICoJaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICoJdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogKDEyLzEyLzIwMDIpIGdhbmVzaAogKiAJQWRkZWQgc3VwcG9ydCBmb3IgcHJhY3RpY2FsbHkgYWxsIGRldmljZXMgc3VwcG9ydGVkIGJ5IEFjdGl2ZVN5bmMKICogCW9uIFdpbmRvd3MuIFRoYW5rcyB0byBXZXMgQ2lsbGRoYWlyZSA8YmlsbHlib2Jqb2VoZW5yeWJvYkBob3RtYWlsLmNvbT4uCiAqCiAqICgyNi8xMS8yMDAyKSBnYW5lc2gKICogCUFkZGVkIGluc21vZCBvcHRpb25zIHRvIHNwZWNpZnkgcHJvZHVjdCBhbmQgdmVuZG9yIGlkLgogKiAJVXNlIG1vZHByb2JlIGlwYXEgdmVuZG9yPTB4Zm9vIHByb2R1Y3Q9MHhiYXIKICoKICogKDI2LzcvMjAwMikgZ2FuZXNoCiAqIAlGaXhlZCB1cCBicm9rZW4gZXJyb3IgaGFuZGxpbmcgaW4gaXBhcV9vcGVuLiBSZXRyeSB0aGUgImtpY2tzdGFydCIKICogCXBhY2tldCBtdWNoIGhhcmRlciAtIHRoaXMgZHJhc3RpY2FsbHkgcmVkdWNlcyBjb25uZWN0aW9uIGZhaWx1cmVzLgogKgogKiAoMzAvNC8yMDAyKSBnYW5lc2gKICogCUFkZGVkIHN1cHBvcnQgZm9yIHRoZSBDYXNpbyBFTTUwMC4gQ29tcGxldGVseSB1bnRlc3RlZC4gVGhhbmtzCiAqIAl0byBpbmZvIGZyb20gTmF0aGFuIDx3ZmlsYXJkb0BmdXNlLm5ldD4KICoKICogKDE5LzMvMjAwMikgZ2FuZXNoCiAqCURvbid0IHN1Ym1pdCB1cmJzIHdoaWxlIGhvbGRpbmcgc3BpbmxvY2tzLiBOb3Qgc3RyaWN0bHkgbmVjZXNzYXJ5CiAqCWluIDIuNS54LgogKgogKiAoOC8zLzIwMDIpIGdhbmVzaAogKiAJVGhlIGlwYXEgc29tZXRpbWVzIGVtaXRzIGEgJ1wwJyBiZWZvcmUgdGhlIENMSUVOVCBzdHJpbmcuIEF0IHRoaXMKICogCXBvaW50IG9mIHRpbWUsIHRoZSBwcHAgbGRpc2MgaXMgbm90IHlldCBhdHRhY2hlZCB0byB0aGUgdHR5LCBzbwogKiAJbl90dHkgZWNob2VzICJeICIgdG8gdGhlIGlwYXEsIHdoaWNoIG1lc3NlcyB1cCB0aGUgY2hhdC4gSW4gMi41LjYtcHJlMgogKiAJdGhpcyBjYXVzZXMgYSBwYW5pYyBiZWNhdXNlIGVjaG9fY2hhcigpIHRyaWVzIHRvIHNsZWVwIGluIGludGVycnVwdAogKiAJY29udGV4dC4KICogCVRoZSBmaXggaXMgdG8gdGVsbCB0aGUgdXBwZXIgbGF5ZXJzIHRoYXQgdGhpcyBpcyBhIHJhdyBkZXZpY2Ugc28gdGhhdAogKiAJZWNob2luZyBpcyBzdXBwcmVzc2VkLiBUaGFua3MgdG8gTHlsZSBMaW5kaG9sbSBmb3IgYSBkZXRhaWxlZCBidWcKICogCXJlcG9ydC4KICoKICogKDI1LzIvMjAwMikgZ2FuZXNoCiAqIAlBZGRlZCBzdXBwb3J0IGZvciB0aGUgSFAgSm9ybmFkYSA1NDggYW5kIDU2OC4gQ29tcGxldGVseSB1bnRlc3RlZC4KICogCVRoYW5rcyB0byBpbmZvIGZyb20gSGVhdGggUm9iaW5zb24gYW5kIEFyaWVoIERhdmlkb2ZmLgogKi8KCiNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiNpbmNsdWRlIDxsaW51eC90dHkuaD4KI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgojaW5jbHVkZSA8bGludXgvdXNiLmg+CiNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiNpbmNsdWRlICJpcGFxLmgiCgojZGVmaW5lIEtQX1JFVFJJRVMJMTAwCgovKgogKiBWZXJzaW9uIEluZm9ybWF0aW9uCiAqLwoKI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuNSIKI2RlZmluZSBEUklWRVJfQVVUSE9SICJHYW5lc2ggVmFyYWRhcmFqYW4gPGdhbmVzaEB2ZXJpdGFzLmNvbT4iCiNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBQb2NrZXRQQyBQREEgZHJpdmVyIgoKc3RhdGljIF9fdTE2IHByb2R1Y3QsIHZlbmRvcjsKc3RhdGljIGludCBkZWJ1ZzsKc3RhdGljIGludCBjb25uZWN0X3JldHJpZXMgPSBLUF9SRVRSSUVTOwpzdGF0aWMgaW50IGluaXRpYWxfd2FpdDsKCi8qIEZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGFuIGlwYXEgKi8Kc3RhdGljIGludCAgaXBhcV9vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CnN0YXRpYyB2b2lkIGlwYXFfY2xvc2UgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKc3RhdGljIGludCAgaXBhcV9zdGFydHVwIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKc3RhdGljIHZvaWQgaXBhcV9zaHV0ZG93biAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CnN0YXRpYyBpbnQgaXBhcV93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsCgkJICAgICAgIGludCBjb3VudCk7CnN0YXRpYyBpbnQgaXBhcV93cml0ZV9idWxrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKCQkJICAgaW50IGNvdW50KTsKc3RhdGljIHZvaWQgaXBhcV93cml0ZV9nYXRoZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CnN0YXRpYyB2b2lkIGlwYXFfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIpOwpzdGF0aWMgdm9pZCBpcGFxX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKc3RhdGljIGludCBpcGFxX3dyaXRlX3Jvb20oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CnN0YXRpYyBpbnQgaXBhcV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CnN0YXRpYyB2b2lkIGlwYXFfZGVzdHJveV9saXN0cyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKCgpzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaXBhcV9pZF90YWJsZSBbXSA9IHsKCS8qIFRoZSBmaXJzdCBlbnRyeSBpcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgaW5zbW9kLXNwZWNpZmllZCBkZXZpY2UgKi8KCXsgVVNCX0RFVklDRSgweDA0OUYsIDB4MDAwMykgfSwKCXsgVVNCX0RFVklDRSgweDAxMDQsIDB4MDBCRSkgfSwgLyogU29ja2V0IFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDEwMTYpIH0sIC8qIEhQIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDExMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MTEgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MTIxNikgfSwgLyogSFAgVVNCIFN5bmMgMTYxMiAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgyMDE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjIwICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDIxMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MjEgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MjIxNikgfSwgLyogSFAgVVNCIFN5bmMgMTYyMiAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHgzMDE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjMwICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDMxMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2MzEgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MzIxNikgfSwgLyogSFAgVVNCIFN5bmMgMTYzMiAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg0MDE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjQwICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDQxMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2NDEgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4NDIxNikgfSwgLyogSFAgVVNCIFN5bmMgMTY0MiAqLwoJeyBVU0JfREVWSUNFKDB4MDNGMCwgMHg1MDE2KSB9LCAvKiBIUCBVU0IgU3luYyAxNjUwICovCgl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDUxMTYpIH0sIC8qIEhQIFVTQiBTeW5jIDE2NTEgKi8KCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4NTIxNikgfSwgLyogSFAgVVNCIFN5bmMgMTY1MiAqLwoJeyBVU0JfREVWSUNFKDB4MDQwOSwgMHgwMEQ1KSB9LCAvKiBORUMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0MDksIDB4MDBENikgfSwgLyogTkVDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNDA5LCAweDAwRDcpIH0sIC8qIE5FQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDQwOSwgMHg4MDI0KSB9LCAvKiBORUMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0MDksIDB4ODAyNSkgfSwgLyogTkVDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNDNFLCAweDlDMDEpIH0sIC8qIExHRSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwMENFKSB9LCAvKiBNaWNyb3NvZnQgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwMCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDAyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwMykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDA1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwNikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MDcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDA4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwOSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MEEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDBCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwQykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MEQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDBFKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQwRikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDExKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxMikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDE0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQxNSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MTYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDE3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzMikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDM0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzNSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDM3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzOCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0MzkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDNBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzQikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0M0MpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDNEKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQzRSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0M0YpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQwKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0MSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQzKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0NCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQ2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0NykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NDgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDQ5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0QSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NEIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDRDKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ0RCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NEUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDRGKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1MCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDUyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1MykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDU1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1NikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NTcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDU4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1OSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NUEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDVCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1QykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NUQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDVFKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ1RikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDYxKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2MikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDY0KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2NSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDY3KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2OCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NjkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDZBKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2QikgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NkMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDZEKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ2RSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NkYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDcwKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3MSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzIpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDczKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3NCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzUpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDc2KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3NykgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0NzgpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNDc5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgUG9ja2V0IFBDIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDQ3QSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0N0IpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEM4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0QzkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRDQSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNENCKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0Q0MpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDIgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRDRCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNENFKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAyICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RDcpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDREOCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEQ5KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REEpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDREQikgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNERDKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0REQpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRERSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNERGKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTApIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFMSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEUyKSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTMpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFNCkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEU1KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTYpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFNykgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ1RSwgMHgwNEU4KSB9LCAvKiBXaW5kb3dzIFBvd2VyZWQgU21hcnRwaG9uZSAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNDVFLCAweDA0RTkpIH0sIC8qIFdpbmRvd3MgUG93ZXJlZCBTbWFydHBob25lIDIwMDMgKi8KCXsgVVNCX0RFVklDRSgweDA0NUUsIDB4MDRFQSkgfSwgLyogV2luZG93cyBQb3dlcmVkIFNtYXJ0cGhvbmUgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ5RiwgMHgwMDAzKSB9LCAvKiBDb21wYXEgaVBBUSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDQ5RiwgMHgwMDMyKSB9LCAvKiBDb21wYXEgaVBBUSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRBNCwgMHgwMDE0KSB9LCAvKiBIaXRhY2hpIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDEpIH0sIC8qIFVTQiBTeW5jIDAzMDEgKi8KCXsgVVNCX0RFVklDRSgweDA0QUQsIDB4MDMwMikgfSwgLyogVVNCIFN5bmMgMDMwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDRBRCwgMHgwMzAzKSB9LCAvKiBVU0IgU3luYyAwMzAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNEFELCAweDAzMDYpIH0sIC8qIEdQUyBQb2NrZXQgUEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0QjcsIDB4MDUzMSkgfSwgLyogTXlHdWlkZSA3MDAwIFhMIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEM1LCAweDEwNTgpIH0sIC8qIEZVSklUU1UgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0QzUsIDB4MTA3OSkgfSwgLyogRlVKSVRTVSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDREQSwgMHgyNTAwKSB9LCAvKiBQYW5hc29uaWMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0REQsIDB4OTEwMikgfSwgLyogU0hBUlAgV1MwMDNTSCBVU0IgTW9kZW0gKi8KCXsgVVNCX0RFVklDRSgweDA0REQsIDB4OTEyMSkgfSwgLyogU0hBUlAgV1MwMDRTSCBVU0IgTW9kZW0gKi8KCXsgVVNCX0RFVklDRSgweDA0REQsIDB4OTEyMykgfSwgLyogU0hBUlAgV1MwMDdTSCBVU0IgTW9kZW0gKi8KCXsgVVNCX0RFVklDRSgweDA0REQsIDB4OTE1MSkgfSwgLyogU0hBUlAgUzAxU0ggVVNCIE1vZGVtICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDVGMDApIH0sIC8qIFNhbXN1bmcgTkVYaU8gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwMSkgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg1RjAyKSB9LCAvKiBTYW1zdW5nIE5FWGlPIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDVGMDMpIH0sIC8qIFNhbXN1bmcgTkVYaU8gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NUYwNCkgfSwgLyogU2Ftc3VuZyBORVhpTyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjExKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxMykgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MTUpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjE3KSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYxOSkgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MUIpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRFOCwgMHg2NjJFKSB9LCAvKiBTYW1zdW5nIE1JVHMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RTgsIDB4NjYzMCkgfSwgLyogU2Ftc3VuZyBNSVRzIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDY2MzIpIH0sIC8qIFNhbXN1bmcgTUlUcyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDRmMSwgMHgzMDExKSB9LCAvKiBKVkMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA0RjEsIDB4MzAxMikgfSwgLyogSlZDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNTAyLCAweDE2MzEpIH0sIC8qIGMxMCBTZXJpZXMgKi8KCXsgVVNCX0RFVklDRSgweDA1MDIsIDB4MTYzMikgfSwgLyogYzIwIFNlcmllcyAqLwoJeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNkUxKSB9LCAvKiBBY2VyIG4xMCBIYW5kaGVsZCBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNkUyKSB9LCAvKiBBY2VyIG4yMCBIYW5kaGVsZCBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDUwMiwgMHgxNkUzKSB9LCAvKiBBY2VyIG4zMCBIYW5kaGVsZCBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MDUzNiwgMHgwMUEwKSB9LCAvKiBISFAgUERUICovCgl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDBFRDkpIH0sIC8qIFZpZXdTb25pYyBDb2xvciBQb2NrZXQgUEMgVjM1ICovCgl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE1MjcpIH0sIC8qIFZpZXdTb25pYyBDb2xvciBQb2NrZXQgUEMgVjM2ICovCgl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE1MjkpIH0sIC8qIFZpZXdTb25pYyBDb2xvciBQb2NrZXQgUEMgVjM3ICovCgl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE1MkIpIH0sIC8qIFZpZXdTb25pYyBDb2xvciBQb2NrZXQgUEMgVjM4ICovCgl7IFVTQl9ERVZJQ0UoMHgwNTQzLCAweDE1MkUpIH0sIC8qIFZpZXdTb25pYyBQb2NrZXQgUEMgKi8KCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTkyMSkgfSwgLyogVmlld1NvbmljIENvbW11bmljYXRvciBQb2NrZXQgUEMgKi8KCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTkyMikgfSwgLyogVmlld1NvbmljIFNtYXJ0cGhvbmUgKi8KCXsgVVNCX0RFVklDRSgweDA1NDMsIDB4MTkyMykgfSwgLyogVmlld1NvbmljIFBvY2tldCBQQyBWMzAgKi8KCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwMCkgfSwgLyogU3ltYm9sIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDEpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDEgKi8KCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwMikgfSwgLyogU3ltYm9sIFVTQiBTeW5jIDB4MjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDAzKSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDQpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDQgKi8KCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwNSkgfSwgLyogU3ltYm9sIFVTQiBTeW5jIDB4MjAwNSAqLwoJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA2KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA2ICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMDcpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMDcgKi8KCXsgVVNCX0RFVklDRSgweDA1RTAsIDB4MjAwOCkgfSwgLyogU3ltYm9sIFVTQiBTeW5jIDB4MjAwOCAqLwoJeyBVU0JfREVWSUNFKDB4MDVFMCwgMHgyMDA5KSB9LCAvKiBTeW1ib2wgVVNCIFN5bmMgMHgyMDA5ICovCgl7IFVTQl9ERVZJQ0UoMHgwNUUwLCAweDIwMEEpIH0sIC8qIFN5bWJvbCBVU0IgU3luYyAweDIwMEEgKi8KCXsgVVNCX0RFVklDRSgweDA2N0UsIDB4MTAwMSkgfSwgLyogSW50ZXJtZWMgTW9iaWxlIENvbXB1dGVyICovCgl7IFVTQl9ERVZJQ0UoMHgwN0NGLCAweDIwMDEpIH0sIC8qIENBU0lPIFVTQiBTeW5jIDIwMDEgKi8KCXsgVVNCX0RFVklDRSgweDA3Q0YsIDB4MjAwMikgfSwgLyogQ0FTSU8gVVNCIFN5bmMgMjAwMiAqLwoJeyBVU0JfREVWSUNFKDB4MDdDRiwgMHgyMDAzKSB9LCAvKiBDQVNJTyBVU0IgU3luYyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDApIH0sIC8qIFRPU0hJQkEgVVNCIFN5bmMgMDcwMCAqLwoJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzA1KSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlMzEwICovCgl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDYpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGU3NDAgKi8KCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwNykgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTMzMCBTZXJpZXMgKi8KCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwOCkgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTM1MKBTZXJpZXMgKi8KCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwOSkgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTc1MCBTZXJpZXMgKi8KCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwQSkgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTQwMCBTZXJpZXMgKi8KCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwQikgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTgwMCBTZXJpZXMgKi8KCXsgVVNCX0RFVklDRSgweDA5NEIsIDB4MDAwMSkgfSwgLyogTGlua3VwIFN5c3RlbXMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA5NjAsIDB4MDA2NSkgfSwgLyogQkNPTSBVU0IgU3luYyAwMDY1ICovCgl7IFVTQl9ERVZJQ0UoMHgwOTYwLCAweDAwNjYpIH0sIC8qIEJDT00gVVNCIFN5bmMgMDA2NiAqLwoJeyBVU0JfREVWSUNFKDB4MDk2MCwgMHgwMDY3KSB9LCAvKiBCQ09NIFVTQiBTeW5jIDAwNjcgKi8KCXsgVVNCX0RFVklDRSgweDA5NjEsIDB4MDAxMCkgfSwgLyogUG9ydGF0ZWMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDA5OUUsIDB4MDA1MikgfSwgLyogVHJpbWJsZSBHZW9FeHBsb3JlciAqLwoJeyBVU0JfREVWSUNFKDB4MDk5RSwgMHg0MDAwKSB9LCAvKiBURFMgRGF0YSBDb2xsZWN0b3IgKi8KCXsgVVNCX0RFVklDRSgweDBCMDUsIDB4NDIwMCkgfSwgLyogQVNVUyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg0MjAxKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQjA1LCAweDQyMDIpIH0sIC8qIEFTVVMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCMDUsIDB4NDIwRikgfSwgLyogQVNVUyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEIwNSwgMHg5MjAwKSB9LCAvKiBBU1VTIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQjA1LCAweDkyMDIpIH0sIC8qIEFTVVMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MDBDRSkgfSwgLyogSFRDIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDAwQ0YpIH0sIC8qIEhUQyBVU0IgTW9kZW0gKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwMSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwMikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwMykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwNCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwNSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwNikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwNykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwOCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwOSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwQSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwQikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwQykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwRCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwRSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEwRikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExMCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExMSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExMikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExMykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExNCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExNSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExNikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExNykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExOCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExOSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExQSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExQikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExQykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExRCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExRSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEExRikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyMCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyMSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyMikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyMykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyNCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyNSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyNikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyNykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyOCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyOSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyQSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyQikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyQykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyRCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyRSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEyRikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzMCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzMSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzMikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzMykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzNCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzNSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzNikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzNykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzOCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzOSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzQSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzQikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzQykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzRCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzRSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEEzRikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0MCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0MSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0MikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0MykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0NCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0NSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0NikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0NykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0OCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0OSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0QSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0QikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0QykgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0RCkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0RSkgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE0RikgfSwgLyogUG9ja2V0UEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1MCkgfSwgLyogSFRDIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1MSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTUyKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1NCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU1KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1NykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTU4KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNTkpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1QSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVCKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNUMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE1RCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTVFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNUYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2MCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTYxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2MykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2NikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTY3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNjgpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2OSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNkIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2QykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTZEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNkUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE2RikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTcwKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzEpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3MikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTczKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzQpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3NSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc2KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBNzcpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3OCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTc5KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBN0EpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3QikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdDKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBN0QpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE3RSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTdGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODApIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4MSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTgyKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4NCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg1KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4NykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTg4KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBODkpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4QSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThCKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOEMpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE4RCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQThFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOEYpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5MCkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTkxKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5MykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk0KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5NikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTk3KSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOTgpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5OSkgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlBKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOUIpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5QykgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwQkI0LCAweDBBOUUpIH0sIC8qIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBCQjQsIDB4MEE5RikgfSwgLyogU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQkNFKSB9LCAvKiAiSGlnaCBUZWNoIENvbXB1dGVyIENvcnAiICovCgl7IFVTQl9ERVZJQ0UoMHgwQkY4LCAweDEwMDEpIH0sIC8qIEZ1aml0c3UgU2llbWVucyBDb21wdXRlcnMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBDNDQsIDB4MDNBMikgfSwgLyogTW90b3JvbGEgaURFTiBTbWFydHBob25lICovCgl7IFVTQl9ERVZJQ0UoMHgwQzhFLCAweDYwMDApIH0sIC8qIENlc3Njb20gTHV4aWFuIFNlcmllcyAqLwoJeyBVU0JfREVWSUNFKDB4MENBRCwgMHg5MDAxKSB9LCAvKiBNb3Rvcm9sYSBQb3dlclBhZCBQb2NrZXQgUEOgRGV2aWNlICovCgl7IFVTQl9ERVZJQ0UoMHgwRjRFLCAweDAyMDApIH0sIC8qIEZyZWVkb20gU2NpZW50aWZpYyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEY5OCwgMHgwMjAxKSB9LCAvKiBDeWJlcmJhbmsgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBGQjgsIDB4MzAwMSkgfSwgLyogV2lzdHJvbiBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MEZCOCwgMHgzMDAyKSB9LCAvKiBXaXN0cm9uIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgwRkI4LCAweDMwMDMpIH0sIC8qIFdpc3Ryb24gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDBGQjgsIDB4NDAwMSkgfSwgLyogV2lzdHJvbiBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MTA2NiwgMHgwMENFKSB9LCAvKiBFLVRFTiBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MTA2NiwgMHgwMzAwKSB9LCAvKiBFLVRFTiBQM1hYIFBvY2tldCBQQyAqLwoJeyBVU0JfREVWSUNFKDB4MTA2NiwgMHgwNTAwKSB9LCAvKiBFLVRFTiBQNVhYIFBvY2tldCBQQyAqLwoJeyBVU0JfREVWSUNFKDB4MTA2NiwgMHgwNjAwKSB9LCAvKiBFLVRFTiBQNlhYIFBvY2tldCBQQyAqLwoJeyBVU0JfREVWSUNFKDB4MTA2NiwgMHgwNzAwKSB9LCAvKiBFLVRFTiBQN1hYIFBvY2tldCBQQyAqLwoJeyBVU0JfREVWSUNFKDB4MTExNCwgMHgwMDAxKSB9LCAvKiBQc2lvbiBUZWtsb2dpeCBTeW5jIDc1M3ggKi8KCXsgVVNCX0RFVklDRSgweDExMTQsIDB4MDAwNCkgfSwgLyogUHNpb24gVGVrbG9naXggU3luYyBuZXRCb29rUHJvICovCgl7IFVTQl9ERVZJQ0UoMHgxMTE0LCAweDAwMDYpIH0sIC8qIFBzaW9uIFRla2xvZ2l4IFN5bmMgNzUyNSAqLwoJeyBVU0JfREVWSUNFKDB4MTE4MiwgMHgxMzg4KSB9LCAvKiBWRVMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDExRDksIDB4MTAwMikgfSwgLyogUnVnZ2VkIFBvY2tldCBQQyAyMDAzICovCgl7IFVTQl9ERVZJQ0UoMHgxMUQ5LCAweDEwMDMpIH0sIC8qIFJ1Z2dlZCBQb2NrZXQgUEMgMjAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MTIzMSwgMHhDRTAxKSB9LCAvKiBVU0IgU3luYyAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MTIzMSwgMHhDRTAyKSB9LCAvKiBVU0IgU3luYyAwMyAqLwoJeyBVU0JfREVWSUNFKDB4MTY5MCwgMHgwNjAxKSB9LCAvKiBBc2tleSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MjJCOCwgMHg0MjA0KSB9LCAvKiBNb3Rvcm9sYSBNUHgyMDAgU21hcnRwaG9uZSAqLwoJeyBVU0JfREVWSUNFKDB4MjJCOCwgMHg0MjE0KSB9LCAvKiBNb3Rvcm9sYSBNUGMgR1NNICovCgl7IFVTQl9ERVZJQ0UoMHgyMkI4LCAweDQyMjQpIH0sIC8qIE1vdG9yb2xhIE1QeDIyMCBTbWFydHBob25lICovCgl7IFVTQl9ERVZJQ0UoMHgyMkI4LCAweDQyMzQpIH0sIC8qIE1vdG9yb2xhIE1QYyBDRE1BICovCgl7IFVTQl9ERVZJQ0UoMHgyMkI4LCAweDQyNDQpIH0sIC8qIE1vdG9yb2xhIE1QeDEwMCBTbWFydHBob25lICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDAxMUMpIH0sIC8qIE1pbyBEaWdpV2Fsa2VyIFBQQyBTdHJvbmdBUk0gKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDMyNikgfSwgLyogTWlvIERpZ2lXYWxrZXIgMzM4ICovCgl7IFVTQl9ERVZJQ0UoMHgzMzQwLCAweDA0MjYpIH0sIC8qIE1pbyBEaWdpV2Fsa2VyIDMzOCAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwNDNBKSB9LCAvKiBNaW8gRGlnaVdhbGtlciBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwNTFDKSB9LCAvKiBNaVRBQyBVU0IgU3luYyA1MjggKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MDUzQSkgfSwgLyogTWlvIERpZ2lXYWxrZXIgU21hcnRQaG9uZSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwNzFDKSB9LCAvKiBNaVRBQyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwQjFDKSB9LCAvKiBHZW5lcmljIFBQQyBTdHJvbmdBUk0gKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MEUzQSkgfSwgLyogR2VuZXJpYyBQUEMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MEYxQykgfSwgLyogSXRhdXRlYyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgwRjNBKSB9LCAvKiBHZW5lcmljIFNtYXJ0UGhvbmUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MTMyNikgfSwgLyogSXRhdXRlYyBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4MzM0MCwgMHgxOTFDKSB9LCAvKiBZQUtVTU8gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MjMyNikgfSwgLyogVm9iaXMgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDMzNDAsIDB4MzMyNikgfSwgLyogTUVESU9OIFdpbm9kd3MgTW9ibGUgVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDM3MDgsIDB4MjBDRSkgfSwgLyogTGVnZW5kIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHgzNzA4LCAweDIxQ0UpIH0sIC8qIExlbm92byBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDExMywgMHgwMjEwKSB9LCAvKiBNb2JpbGUgTWVkaWEgVGVjaG5vbG9neSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDExMywgMHgwMjExKSB9LCAvKiBNb2JpbGUgTWVkaWEgVGVjaG5vbG9neSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDExMywgMHgwNDAwKSB9LCAvKiBNb2JpbGUgTWVkaWEgVGVjaG5vbG9neSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDExMywgMHgwNDEwKSB9LCAvKiBNb2JpbGUgTWVkaWEgVGVjaG5vbG9neSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDAxKSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwMikgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDMpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA0KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwNSkgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDYpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDEzQywgMHg0MDA3KSB9LCAvKiBEZWxsIEF4aW0gVVNCIFN5bmMgKi8KCXsgVVNCX0RFVklDRSgweDQxM0MsIDB4NDAwOCkgfSwgLyogRGVsbCBBeGltIFVTQiBTeW5jICovCgl7IFVTQl9ERVZJQ0UoMHg0MTNDLCAweDQwMDkpIH0sIC8qIERlbGwgQXhpbSBVU0IgU3luYyAqLwoJeyBVU0JfREVWSUNFKDB4NDUwNSwgMHgwMDEwKSB9LCAvKiBTbWFydHBob25lICovCgl7IFVTQl9ERVZJQ0UoMHg1RTA0LCAweENFMDApIH0sIC8qIFNBR0VNIFdpcmVsZXNzIEFzc2lzdGFudCAqLwoJeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwp9OwoKTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBpcGFxX2lkX3RhYmxlKTsKCnN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBpcGFxX2RyaXZlciA9IHsKCS5uYW1lID0JCSJpcGFxIiwKCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCgkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKCS5pZF90YWJsZSA9CWlwYXFfaWRfdGFibGUsCgkubm9fZHluYW1pY19pZCA9IAkxLAp9OwoKCi8qIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgQ29tcGFxIGlQQVEgKi8Kc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBpcGFxX2RldmljZSA9IHsKCS5kcml2ZXIgPSB7CgkJLm93bmVyID0JVEhJU19NT0RVTEUsCgkJLm5hbWUgPQkJImlwYXEiLAoJfSwKCS5kZXNjcmlwdGlvbiA9CQkiUG9ja2V0UEMgUERBIiwKCS51c2JfZHJpdmVyID0gCQkmaXBhcV9kcml2ZXIsCgkuaWRfdGFibGUgPQkJaXBhcV9pZF90YWJsZSwKCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKCS5udW1fYnVsa19pbiA9CQkxLAoJLm51bV9idWxrX291dCA9CQkxLAoJLm51bV9wb3J0cyA9CQkxLAoJLm9wZW4gPQkJCWlwYXFfb3BlbiwKCS5jbG9zZSA9CQlpcGFxX2Nsb3NlLAoJLmF0dGFjaCA9CQlpcGFxX3N0YXJ0dXAsCgkuc2h1dGRvd24gPQkJaXBhcV9zaHV0ZG93biwKCS53cml0ZSA9CQlpcGFxX3dyaXRlLAoJLndyaXRlX3Jvb20gPQkJaXBhcV93cml0ZV9yb29tLAoJLmNoYXJzX2luX2J1ZmZlciA9CWlwYXFfY2hhcnNfaW5fYnVmZmVyLAoJLnJlYWRfYnVsa19jYWxsYmFjayA9CWlwYXFfcmVhZF9idWxrX2NhbGxiYWNrLAoJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQlpcGFxX3dyaXRlX2J1bGtfY2FsbGJhY2ssCn07CgpzdGF0aWMgc3BpbmxvY2tfdAl3cml0ZV9saXN0X2xvY2s7CnN0YXRpYyBpbnQJCWJ5dGVzX2luOwpzdGF0aWMgaW50CQlieXRlc19vdXQ7CgpzdGF0aWMgaW50IGlwYXFfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKewoJc3RydWN0IHVzYl9zZXJpYWwJKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXY7CglzdHJ1Y3QgaXBhcV9wYWNrZXQJKnBrdDsKCWludAkJCWksIHJlc3VsdCA9IDA7CglpbnQJCQlyZXRyaWVzID0gY29ubmVjdF9yZXRyaWVzOwoKCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwoKCWJ5dGVzX2luID0gMDsKCWJ5dGVzX291dCA9IDA7Cglwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlwYXFfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwoJaWYgKHByaXYgPT0gTlVMTCkgewoJCWVycigiJXMgLSBPdXQgb2YgbWVtb3J5IiwgX19GVU5DVElPTl9fKTsKCQlyZXR1cm4gLUVOT01FTTsKCX0KCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBwcml2KTsKCXByaXYtPmFjdGl2ZSA9IDA7Cglwcml2LT5xdWV1ZV9sZW4gPSAwOwoJcHJpdi0+ZnJlZV9sZW4gPSAwOwoJSU5JVF9MSVNUX0hFQUQoJnByaXYtPnF1ZXVlKTsKCUlOSVRfTElTVF9IRUFEKCZwcml2LT5mcmVlbGlzdCk7CgoJZm9yIChpID0gMDsgaSA8IFVSQkRBVEFfUVVFVUVfTUFYIC8gUEFDS0VUX1NJWkU7IGkrKykgewoJCXBrdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpcGFxX3BhY2tldCksIEdGUF9LRVJORUwpOwoJCWlmIChwa3QgPT0gTlVMTCkgewoJCQlnb3RvIGVub21lbTsKCQl9CgkJcGt0LT5kYXRhID0ga21hbGxvYyhQQUNLRVRfU0laRSwgR0ZQX0tFUk5FTCk7CgkJaWYgKHBrdC0+ZGF0YSA9PSBOVUxMKSB7CgkJCWtmcmVlKHBrdCk7CgkJCWdvdG8gZW5vbWVtOwoJCX0KCQlwa3QtPmxlbiA9IDA7CgkJcGt0LT53cml0dGVuID0gMDsKCQlJTklUX0xJU1RfSEVBRCgmcGt0LT5saXN0KTsKCQlsaXN0X2FkZCgmcGt0LT5saXN0LCAmcHJpdi0+ZnJlZWxpc3QpOwoJCXByaXYtPmZyZWVfbGVuICs9IFBBQ0tFVF9TSVpFOwoJfQoKCS8qCgkgKiBGb3JjZSBsb3cgbGF0ZW5jeSBvbi4gVGhpcyB3aWxsIGltbWVkaWF0ZWx5IHB1c2ggZGF0YSB0byB0aGUgbGluZQoJICogZGlzY2lwbGluZSBpbnN0ZWFkIG9mIHF1ZXVlaW5nLgoJICovCgoJcG9ydC0+dHR5LT5sb3dfbGF0ZW5jeSA9IDE7Cglwb3J0LT50dHktPnJhdyA9IDE7Cglwb3J0LT50dHktPnJlYWxfcmF3ID0gMTsKCgkvKgoJICogTG9zZSB0aGUgc21hbGwgYnVmZmVycyB1c2JzZXJpYWwgcHJvdmlkZXMuIE1ha2UgbGFyZ2VyIG9uZXMuCgkgKi8KCglrZnJlZShwb3J0LT5idWxrX2luX2J1ZmZlcik7CglrZnJlZShwb3J0LT5idWxrX291dF9idWZmZXIpOwoJcG9ydC0+YnVsa19pbl9idWZmZXIgPSBrbWFsbG9jKFVSQkRBVEFfU0laRSwgR0ZQX0tFUk5FTCk7CglpZiAocG9ydC0+YnVsa19pbl9idWZmZXIgPT0gTlVMTCkgewoJCWdvdG8gZW5vbWVtOwoJfQoJcG9ydC0+YnVsa19vdXRfYnVmZmVyID0ga21hbGxvYyhVUkJEQVRBX1NJWkUsIEdGUF9LRVJORUwpOwoJaWYgKHBvcnQtPmJ1bGtfb3V0X2J1ZmZlciA9PSBOVUxMKSB7CgkJa2ZyZWUocG9ydC0+YnVsa19pbl9idWZmZXIpOwoJCWdvdG8gZW5vbWVtOwoJfQoJcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciA9IHBvcnQtPmJ1bGtfaW5fYnVmZmVyOwoJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBwb3J0LT5idWxrX291dF9idWZmZXI7Cglwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IFVSQkRBVEFfU0laRTsKCXBvcnQtPmJ1bGtfb3V0X3NpemUgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBVUkJEQVRBX1NJWkU7CgkKCW1zbGVlcCgxMDAwKmluaXRpYWxfd2FpdCk7CgoJLyoKCSAqIFNlbmQgb3V0IGNvbnRyb2wgbWVzc2FnZSBvYnNlcnZlZCBpbiB3aW45OCBzbmlmZnMuIE5vdCBzdXJlIHdoYXQKCSAqIGl0IGRvZXMsIGJ1dCBmcm9tIGVtcGlyaWNhbCBvYnNlcnZhdGlvbnMsIGl0IHNlZW1zIHRoYXQgdGhlIGRldmljZQoJICogd2lsbCBzdGFydCB0aGUgY2hhdCBzZXF1ZW5jZSBvbmNlIG9uZSBvZiB0aGVzZSBtZXNzYWdlcyBnZXRzCgkgKiB0aHJvdWdoLiBTaW5jZSB0aGlzIGhhcyBhIHJlYXNvbmFibHkgaGlnaCBmYWlsdXJlIHJhdGUsIHdlIHJldHJ5CgkgKiBzZXZlcmFsIHRpbWVzLgoJICovCgoJd2hpbGUgKHJldHJpZXMtLSkgewoJCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKCQkJCXVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksIDB4MjIsIDB4MjEsCgkJCQkweDEsIDAsIE5VTEwsIDAsIDEwMCk7CgkJaWYgKCFyZXN1bHQpCgkJCWJyZWFrOwoKCQltc2xlZXAoMTAwMCk7Cgl9CgoJaWYgKCFyZXRyaWVzICYmIHJlc3VsdCkgewoJCWVycigiJXMgLSBmYWlsZWQgZG9pbmcgY29udHJvbCB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLAoJCSAgICByZXN1bHQpOwoJCWdvdG8gZXJyb3I7Cgl9CgoJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKCQkgICAgICB1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKCQkgICAgICBpcGFxX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CgoJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwoJaWYgKHJlc3VsdCkgewoJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CgkJZ290byBlcnJvcjsKCX0KCglyZXR1cm4gMDsKCmVub21lbToKCXJlc3VsdCA9IC1FTk9NRU07CgllcnIoIiVzIC0gT3V0IG9mIG1lbW9yeSIsIF9fRlVOQ1RJT05fXyk7CmVycm9yOgoJaXBhcV9kZXN0cm95X2xpc3RzKHBvcnQpOwoJa2ZyZWUocHJpdik7CglyZXR1cm4gcmVzdWx0Owp9CgoKc3RhdGljIHZvaWQgaXBhcV9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKewoJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKCglkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKCQkJIAoJLyoKCSAqIHNodXQgZG93biBidWxrIHJlYWQgYW5kIHdyaXRlCgkgKi8KCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOwoJdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKCWlwYXFfZGVzdHJveV9saXN0cyhwb3J0KTsKCWtmcmVlKHByaXYpOwoJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIE5VTEwpOwoKCS8qIFVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgaWYgeW91IHdhbnQgdG8gc2VlIHNvbWUgc3RhdGlzdGljcyBpbiB5b3VyIHN5c2xvZyAqLwoJLyogaW5mbyAoIkJ5dGVzIEluID0gJWQgIEJ5dGVzIE91dCA9ICVkIiwgYnl0ZXNfaW4sIGJ5dGVzX291dCk7ICovCn0KCnN0YXRpYyB2b2lkIGlwYXFfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKewoJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OwoJc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKCXVuc2lnbmVkIGNoYXIJCSpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CglpbnQJCQlyZXN1bHQ7CgoJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CgoJaWYgKHVyYi0+c3RhdHVzKSB7CgkJZGJnKCIlcyAtIG5vbnplcm8gcmVhZCBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKCQlyZXR1cm47Cgl9CgoJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CgoJdHR5ID0gcG9ydC0+dHR5OwoJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CgkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CgkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKCQlieXRlc19pbiArPSB1cmItPmFjdHVhbF9sZW5ndGg7Cgl9CgoJLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkICAqLwoJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LCAKCQkgICAgICB1c2JfcmN2YnVsa3BpcGUocG9ydC0+c2VyaWFsLT5kZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKCQkgICAgICBpcGFxX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CglyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CglpZiAocmVzdWx0KQoJCWVycigiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKCXJldHVybjsKfQoKc3RhdGljIGludCBpcGFxX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKCQkgICAgICAgaW50IGNvdW50KQp7Cgljb25zdCB1bnNpZ25lZCBjaGFyCSpjdXJyZW50X3Bvc2l0aW9uID0gYnVmOwoJaW50CQkJYnl0ZXNfc2VudCA9IDA7CglpbnQJCQl0cmFuc2Zlcl9zaXplOwoKCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwoKCXdoaWxlIChjb3VudCA+IDApIHsKCQl0cmFuc2Zlcl9zaXplID0gbWluKGNvdW50LCBQQUNLRVRfU0laRSk7CgkJaWYgKGlwYXFfd3JpdGVfYnVsayhwb3J0LCBjdXJyZW50X3Bvc2l0aW9uLCB0cmFuc2Zlcl9zaXplKSkgewoJCQlicmVhazsKCQl9CgkJY3VycmVudF9wb3NpdGlvbiArPSB0cmFuc2Zlcl9zaXplOwoJCWJ5dGVzX3NlbnQgKz0gdHJhbnNmZXJfc2l6ZTsKCQljb3VudCAtPSB0cmFuc2Zlcl9zaXplOwoJCWJ5dGVzX291dCArPSB0cmFuc2Zlcl9zaXplOwoJfQoKCXJldHVybiBieXRlc19zZW50Owp9IAoKc3RhdGljIGludCBpcGFxX3dyaXRlX2J1bGsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAoJCQkgICBpbnQgY291bnQpCnsKCXN0cnVjdCBpcGFxX3ByaXZhdGUJKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CglzdHJ1Y3QgaXBhcV9wYWNrZXQJKnBrdCA9IE5VTEw7CglpbnQJCQlyZXN1bHQgPSAwOwoJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CgoJaWYgKHByaXYtPmZyZWVfbGVuIDw9IDApIHsKCQlkYmcoIiVzIC0gd2UncmUgc3R1ZmZlZCIsIF9fRlVOQ1RJT05fXyk7CgkJcmV0dXJuIC1FQUdBSU47Cgl9CgoJc3Bpbl9sb2NrX2lycXNhdmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwoJaWYgKCFsaXN0X2VtcHR5KCZwcml2LT5mcmVlbGlzdCkpIHsKCQlwa3QgPSBsaXN0X2VudHJ5KHByaXYtPmZyZWVsaXN0Lm5leHQsIHN0cnVjdCBpcGFxX3BhY2tldCwgbGlzdCk7CgkJbGlzdF9kZWwoJnBrdC0+bGlzdCk7CgkJcHJpdi0+ZnJlZV9sZW4gLT0gUEFDS0VUX1NJWkU7Cgl9CglzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKCWlmIChwa3QgPT0gTlVMTCkgewoJCWRiZygiJXMgLSB3ZSdyZSBzdHVmZmVkIiwgX19GVU5DVElPTl9fKTsKCQlyZXR1cm4gLUVBR0FJTjsKCX0KCgltZW1jcHkocGt0LT5kYXRhLCBidWYsIGNvdW50KTsKCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBjb3VudCwgcGt0LT5kYXRhKTsKCglwa3QtPmxlbiA9IGNvdW50OwoJcGt0LT53cml0dGVuID0gMDsKCXNwaW5fbG9ja19pcnFzYXZlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKCWxpc3RfYWRkX3RhaWwoJnBrdC0+bGlzdCwgJnByaXYtPnF1ZXVlKTsKCXByaXYtPnF1ZXVlX2xlbiArPSBjb3VudDsKCWlmIChwcml2LT5hY3RpdmUgPT0gMCkgewoJCXByaXYtPmFjdGl2ZSA9IDE7CgkJaXBhcV93cml0ZV9nYXRoZXIocG9ydCk7CgkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7CgkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKCQlpZiAocmVzdWx0KSB7CgkJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOwoJCX0KCX0gZWxzZSB7CgkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd3JpdGVfbGlzdF9sb2NrLCBmbGFncyk7Cgl9CglyZXR1cm4gcmVzdWx0Owp9CgpzdGF0aWMgdm9pZCBpcGFxX3dyaXRlX2dhdGhlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQp7CglzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwoJc3RydWN0IHVzYl9zZXJpYWwJKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKCWludAkJCWNvdW50LCByb29tOwoJc3RydWN0IGlwYXFfcGFja2V0CSpwa3QsICp0bXA7CglzdHJ1Y3QgdXJiCQkqdXJiID0gcG9ydC0+d3JpdGVfdXJiOwoKCXJvb20gPSBVUkJEQVRBX1NJWkU7CglsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGt0LCB0bXAsICZwcml2LT5xdWV1ZSwgbGlzdCkgewoJCWNvdW50ID0gbWluKHJvb20sIChpbnQpKHBrdC0+bGVuIC0gcGt0LT53cml0dGVuKSk7CgkJbWVtY3B5KHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgKFVSQkRBVEFfU0laRSAtIHJvb20pLAoJCSAgICAgICBwa3QtPmRhdGEgKyBwa3QtPndyaXR0ZW4sIGNvdW50KTsKCQlyb29tIC09IGNvdW50OwoJCXBrdC0+d3JpdHRlbiArPSBjb3VudDsKCQlwcml2LT5xdWV1ZV9sZW4gLT0gY291bnQ7CgkJaWYgKHBrdC0+d3JpdHRlbiA9PSBwa3QtPmxlbikgewoJCQlsaXN0X21vdmUoJnBrdC0+bGlzdCwgJnByaXYtPmZyZWVsaXN0KTsKCQkJcHJpdi0+ZnJlZV9sZW4gKz0gUEFDS0VUX1NJWkU7CgkJfQoJCWlmIChyb29tID09IDApIHsKCQkJYnJlYWs7CgkJfQoJfQoKCWNvdW50ID0gVVJCREFUQV9TSVpFIC0gcm9vbTsKCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPndyaXRlX3VyYiwgc2VyaWFsLT5kZXYsIAoJCSAgICAgIHVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKSwKCQkgICAgICBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgY291bnQsIGlwYXFfd3JpdGVfYnVsa19jYWxsYmFjaywKCQkgICAgICBwb3J0KTsKCXJldHVybjsKfQoKc3RhdGljIHZvaWQgaXBhcV93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKewoJc3RydWN0IHVzYl9zZXJpYWxfcG9ydAkqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OwoJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwoJaW50CQkJcmVzdWx0OwoKCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwoJCglpZiAodXJiLT5zdGF0dXMpIHsKCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKCQlyZXR1cm47Cgl9CgoJc3Bpbl9sb2NrX2lycXNhdmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwoJaWYgKCFsaXN0X2VtcHR5KCZwcml2LT5xdWV1ZSkpIHsKCQlpcGFxX3dyaXRlX2dhdGhlcihwb3J0KTsKCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3cml0ZV9saXN0X2xvY2ssIGZsYWdzKTsKCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOwoJCWlmIChyZXN1bHQpIHsKCQkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CgkJfQoJfSBlbHNlIHsKCQlwcml2LT5hY3RpdmUgPSAwOwoJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndyaXRlX2xpc3RfbG9jaywgZmxhZ3MpOwoJfQoKCXVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KHBvcnQpOwp9CgpzdGF0aWMgaW50IGlwYXFfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQp7CglzdHJ1Y3QgaXBhcV9wcml2YXRlCSpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwoKCWRiZygiJXMgLSBmcmVlbGVuICVkIiwgX19GVU5DVElPTl9fLCBwcml2LT5mcmVlX2xlbik7CglyZXR1cm4gcHJpdi0+ZnJlZV9sZW47Cn0KCnN0YXRpYyBpbnQgaXBhcV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKewoJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKCglkYmcoIiVzIC0gcXVldWVsZW4gJWQiLCBfX0ZVTkNUSU9OX18sIHByaXYtPnF1ZXVlX2xlbik7CglyZXR1cm4gcHJpdi0+cXVldWVfbGVuOwp9CgpzdGF0aWMgdm9pZCBpcGFxX2Rlc3Ryb3lfbGlzdHMoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKewoJc3RydWN0IGlwYXFfcHJpdmF0ZQkqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKCXN0cnVjdCBpcGFxX3BhY2tldAkqcGt0LCAqdG1wOwoKCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwa3QsIHRtcCwgJnByaXYtPnF1ZXVlLCBsaXN0KSB7CgkJa2ZyZWUocGt0LT5kYXRhKTsKCQlrZnJlZShwa3QpOwoJfQoJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBrdCwgdG1wLCAmcHJpdi0+ZnJlZWxpc3QsIGxpc3QpIHsKCQlrZnJlZShwa3QtPmRhdGEpOwoJCWtmcmVlKHBrdCk7Cgl9Cn0KCgpzdGF0aWMgaW50IGlwYXFfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQp7CglkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKCWlmIChzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkgewoJCWVycigiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/PyIsCgkJCXNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CgkJcmV0dXJuIC1FTk9ERVY7Cgl9CglyZXR1cm4gdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24gKHNlcmlhbC0+ZGV2KTsKfQoKc3RhdGljIHZvaWQgaXBhcV9zaHV0ZG93bihzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQp7CglkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKfQoKc3RhdGljIGludCBfX2luaXQgaXBhcV9pbml0KHZvaWQpCnsKCWludCByZXR2YWw7CglzcGluX2xvY2tfaW5pdCgmd3JpdGVfbGlzdF9sb2NrKTsKCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmlwYXFfZGV2aWNlKTsKCWlmIChyZXR2YWwpIAoJCWdvdG8gZmFpbGVkX3VzYl9zZXJpYWxfcmVnaXN0ZXI7CglpbmZvKERSSVZFUl9ERVNDICIgIiBEUklWRVJfVkVSU0lPTik7CglpZiAodmVuZG9yKSB7CgkJaXBhcV9pZF90YWJsZVswXS5pZFZlbmRvciA9IHZlbmRvcjsKCQlpcGFxX2lkX3RhYmxlWzBdLmlkUHJvZHVjdCA9IHByb2R1Y3Q7Cgl9CglyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmlwYXFfZHJpdmVyKTsKCWlmIChyZXR2YWwpCgkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOwoJCSAgCglyZXR1cm4gMDsKZmFpbGVkX3VzYl9yZWdpc3RlcjoKCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmaXBhcV9kZXZpY2UpOwpmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjoKCXJldHVybiByZXR2YWw7Cn0KCgpzdGF0aWMgdm9pZCBfX2V4aXQgaXBhcV9leGl0KHZvaWQpCnsKCXVzYl9kZXJlZ2lzdGVyKCZpcGFxX2RyaXZlcik7Cgl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJmlwYXFfZGV2aWNlKTsKfQoKCm1vZHVsZV9pbml0KGlwYXFfaW5pdCk7Cm1vZHVsZV9leGl0KGlwYXFfZXhpdCk7CgpNT0RVTEVfQVVUSE9SKCBEUklWRVJfQVVUSE9SICk7Ck1PRFVMRV9ERVNDUklQVElPTiggRFJJVkVSX0RFU0MgKTsKTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwoKbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7Ck1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBlbmFibGVkIG9yIG5vdCIpOwoKbW9kdWxlX3BhcmFtKHZlbmRvciwgdXNob3J0LCAwKTsKTU9EVUxFX1BBUk1fREVTQyh2ZW5kb3IsICJVc2VyIHNwZWNpZmllZCBVU0IgaWRWZW5kb3IiKTsKCm1vZHVsZV9wYXJhbShwcm9kdWN0LCB1c2hvcnQsIDApOwpNT0RVTEVfUEFSTV9ERVNDKHByb2R1Y3QsICJVc2VyIHNwZWNpZmllZCBVU0IgaWRQcm9kdWN0Iik7Cgptb2R1bGVfcGFyYW0oY29ubmVjdF9yZXRyaWVzLCBpbnQsIFNfSVJVR098U19JV1VTUik7Ck1PRFVMRV9QQVJNX0RFU0MoY29ubmVjdF9yZXRyaWVzLCAiTWF4aW11bSBudW1iZXIgb2YgY29ubmVjdCByZXRyaWVzIChvbmUgc2Vjb25kIGVhY2gpIik7Cgptb2R1bGVfcGFyYW0oaW5pdGlhbF93YWl0LCBpbnQsIFNfSVJVR098U19JV1VTUik7Ck1PRFVMRV9QQVJNX0RFU0MoaW5pdGlhbF93YWl0LCAiVGltZSB0byB3YWl0IGJlZm9yZSBhdHRlbXB0aW5nIGEgY29ubmVjdGlvbiAoaW4gc2Vjb25kcykiKTsK